一、RPM包簡介
linux之所以那么強大,除了linux強大的內核,還有很大一部分取決于linux的軟件包,假想沒有軟件包,就一個內核在運行,人類需要和內核打交道是多么痛苦,但是聰明的人類發明了bash,通過bash,人就可以使用高級語言,和機器溝通,這其中的bash起始也是一個軟件包,當然linux除了bash還有各式各樣的包,幫助我們完成各種任務,這其中便涉及到程序的包管理。
rpm包管理器(原名redhat package manager,后成為行業標準,命名為rpm package manager)。像是Fedora,centos,SuSE,等廠商的發行版都是使用rpm管理程序包管理器,rpm軟件包其實是預先編譯好的壓縮包,其中包括可執行程序、腳本,可以在安裝時檢查系統,硬件資源,操作系統版本,防止用戶錯誤安裝,但是大部分大軟件包會有依賴性,比如說,在安裝A軟件時有可能依賴于軟件B,B軟件又依賴如C軟件,為了知道軟件的依賴性,rpm在系統中建立了一個數據庫,記錄rpm的依賴性。
dpkg:最早是debian linux社區開發出來的,debian衍生的版本,包括B2D,Ubuntu等都支持dpkg的包管理器
二、RPM包名字格式
例如:httpd-devel-2.4.6-40.el7.centos.x86_64.rpm
其中httpd-devel是包名,2是主版本號,2.6是此版本號,40是編譯次數(程序每次改動之后,重新編譯一次el7.centos是指發行版:企業版centos7系統),x86是硬件平臺,之所以要有硬件平臺是因為程序對不同的硬件優化以及設置都不一樣,所以要針對不同的硬件進行編譯(常見的平臺有i386:幾乎所有的x86平臺, i586, i686,x86_64:針對64位cpu進行最佳編譯,noarch:和硬件無關的類型)。
三、RPM包管理
(1) 安裝:
-i 安裝
-v 顯示安裝過程的詳細信息,-vv 更詳細
-h 以#表示安裝進度
–test 測試安裝,不真正安裝
–nodeps 忽略依賴關系
–force 強制安裝
安裝示例:
[root@centos7 ~]# rpm -ivh /mnt/cdrom/Packages/tree-1.6.0-10.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:tree-1.6.0-10.el7 ################################# [100%]
(2) 升級:
-U 如果已經安裝,并且出現新版本則升級,如果沒有安裝則安裝最新版本的軟件包。
-F 單純升級,如果指定的軟件沒有安裝,則什么都不做
注:上面的U、F參數可以配合v和h兩個參數使用,內核不建議使用升級選項來升級內核,因為一旦升級失敗,原來的內核也將不能使用。軟件也可以通過使用–oldpackage安裝上一個版本的軟件包。
(3) 卸載:
-e 卸載軟件包
–nodeps 忽略依賴關系
–test 測試卸載
注:程序包的配置文件如果修改之后,卸載軟件默認是不刪除文件的,只是將配置文件改名為.rpmsave為后綴的文件
(3) 查詢:軟件的查詢要加必選選項-q
-q 查詢軟件包,可以是全名,也可以是包名
-a 查詢安裝的所有包。
-f查詢某文件是由那個包安裝生成的
-p 查詢沒有安裝的包的信息一般配合i使用
-i 查詢包的簡要說明信息
-c 查詢某程序的配置文件
-l 查詢包安裝生成的文件列表
查詢示例:
[root@centos7 ~]# rpm -qi tree //查詢軟件的詳細信息 Name : tree Version : 1.6.0 Release : 10.el7 Architecture: x86_64 Install Date: Mon 25 Jul 2016 05:21:38 PM CST Group : Applications/File Size : 89505 License : GPLv2+ Signature : RSA/SHA256, Fri 04 Jul 2014 01:36:46 PM CST, Key ID 24c6a8a7f4a80eb5 Source RPM : tree-1.6.0-10.el7.src.rpm Build Date : Tue 10 Jun 2014 03:28:53 AM CST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://mama.indstate.edu/users/ice/tree/ Summary : File system tree viewer Description : The tree utility recursively displays the contents of directories in a tree-like format. Tree is basically a UNIX port of the DOS tree utility.
[root@centos7 ~]# rpm -qpi /mnt/cdrom/Packages/httpd-2.4.6-40.el7.centos.x86_64.rpm //查詢未裝包信息 Name : httpd Version : 2.4.6 Release : 40.el7.centos Architecture: x86_64 Install Date: (not installed) Group : System Environment/Daemons Size : 9806197 License : ASL 2.0 Signature : RSA/SHA256, Wed 25 Nov 2015 10:41:23 PM CST, Key ID 24c6a8a7f4a80eb5 Source RPM : httpd-2.4.6-40.el7.centos.src.rpm Build Date : Fri 20 Nov 2015 05:45:11 AM CST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://httpd.apache.org/ Summary : Apache HTTP Server Description : The Apache HTTP Server is a powerful, efficient, and extensible web server.
[root@centos7 ~]# rpm -qc httpd //查詢程序的配置文件 /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.modules.d/00-base.conf /etc/httpd/conf.modules.d/00-dav.conf /etc/httpd/conf.modules.d/00-lua.conf /etc/httpd/conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-proxy.conf /etc/httpd/conf.modules.d/00-systemd.conf /etc/httpd/conf.modules.d/01-cgi.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/logrotate.d/httpd /etc/sysconfig/htcacheclean /etc/sysconfig/httpd
(4) 校驗:查詢包安裝之后的文件發生的變化如果顯示ok則包生成的內容沒有發生變化。使用時用-V參數檢驗軟件包
S: size 文件容量大小發生變化
M: mode 文件的類型或文件的屬性是否發生變化
5:md5發生變化
D: 裝置的主次代碼已經發生改變
L: link 文件的路徑發生變化
U: User owership 文件的屬主發生變化
G:Group owership 文件的所屬組發生變化
T: mtime文件的創建時間發生變化
文件檢驗示例:
[root@centos7 ~]# rpm -V vsftpd //安裝完沒有做任何修改的軟件包檢測沒有任何輸出 [root@centos7 ~]# rpm -qc vsftpd //檢查安裝產生配置文件 /etc/logrotate.d/vsftpd /etc/pam.d/vsftpd /etc/vsftpd/ftpusers /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf [root@centos7 ~]# touch /etc/vsftpd/vsftpd.conf //刷新文件的時間戳 [root@centos7 ~]# rpm -V vsftpd //再次檢查發現文件多了T屬性,表示時間改變,其他沒有改變 .......T. c /etc/vsftpd/vsftpd.conf [root@centos7 ~]# echo "">> /etc/vsftpd/vsftpd.conf //通過echo一個空行發現文件的大?。⊿),文件的MD5(5),文件的時間(T)發生改變 [root@centos7 ~]# rpm -V vsftpd S.5....T. c /etc/vsftpd/vsftpd.conf
導入本地公鑰進行驗證:
[root@centos7 ~]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 (這是7本地密鑰),導入后就可以驗證包內容是否合法。
(5)rpm數據庫的建立:一旦rpm的數據庫丟失,重建后的數據庫將無法查詢到之前安裝的包數據庫文件存放位置:/var/lib/rpm/
–initdb -v –dbpath 如果存在就不建立文件,不存在就建立文件
–rebuilddb 無論數據庫文件時候存在都強制重建
四、YUM包管理:
1. yum是rpm的一個前端工具,通過分析rpm的標頭數據后,根據各種軟件的依賴關系自動解決軟件的依賴性問題。假如rpm不能使用,yum也將不能使用,yum的工作模式是基于C/S的模式,就是說必須配置有一個文件服務器用來存放軟件和依賴關系的文件,當然也可以配置一個本地服務器的yum安裝源。配置本地yum客戶端需要指向服務器的/repodata/ 目錄的父目錄
2. repodata是一個目錄,里面包含了一個以 .xml結尾的文件,這個文件是yum索引文件,包含了rpm包的一些信息,比如依賴關系這些的。通過它用yum安裝才能在自動解決依賴關系。一般光盤里面會自帶有repodata目錄。如果沒有就手動生成了。方法:安裝createrepo包,這個你用rpm方式安裝。成功后執行createrepo -v /mnt/cdrom 來重建索引文件
/etc/yum.conf 全局倉庫的配置文件
3. yum客戶端配置:
[root@centos7 msh]# cat /etc/yum.repos.d/local.repo
[local] ===> 倉庫ID( repositoryID)全局唯一
name=local ===>描述性的信息
baseurl=file:///mnt/cdrom/ ===>最重要的地方支持http,file,ftp三種協議
enabled=1 ===>默認不寫為1
gpgcheck=1 ===>指定rpm包是否需要檢查合法性
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ==>指定公鑰路徑也是三種URL http 、https、file、ftp
4. yum相關命令:
(1) yum-config-manager –disable “repo_name” 對某一倉庫(repo_name)禁用
(2) yum-config-manager –enable “repo_name” 啟用某一倉庫
(3) yum repolist [all | enabled | disabled ] 顯示倉庫列表
(4) yum list {available | installd | updates | } glob_exp1 可以使用通配符列出各種安裝包
(5)安裝和重裝包:
yum install package … 支持安裝多個包
yum reinstall package … 重新安裝程序包
yum update package … 升級安裝程序包
yum downgrade package.. 降級安裝包
yum check-update 檢查可用的升級
(6)yum remove | erase package 卸載安裝包
(7)查看程序包info
yum info [package …] 查看包信息
yum provides [package] 查看某文件是由那個程序提供的
[root@cnode6_8 ~]# yum provides /usr/share/doc/HTML/sr/kioslave/http Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile kde-l10n-Serbian-4.3.4-5.el6.noarch : Serbian language support for KDE Repo : base Matched from: Filename : /usr/share/doc/HTML/sr/kioslave/http
(8)清理構建緩存:
yum clean all //清理緩存
yum makecache // 生成緩存
(9)查看yum事務歷史:
yum history 查看yum history
yum history # 查看具體的第#條yum信息
yum history undo # 撤銷第#條操作
(10)日志操作:
/var/log/yum.log
(11)包組管理:
yum groupinstall group1… 包組安裝
yum groupupdate group1… 包組更新
yum groupremove group1… 包組卸載
yum groupinfo group1… 查看包組信息
(12)yum的命令行選項:
-y 自動回答yes
-q 靜默模式
(13)yum的repo配置文件中可以使用變量替代發行版等變量,部署大量服務器時可以使用統一的配置文件,對服務器進行yum配置
示例:在yum服務器上有發行版6和7的兩個版本的yum源,在同時擁有rhel6和rhel7的版本的服務器時配置文件:
$releasever: 當前OS發行版的主版本:
$arch: 平臺,i386,i486,i586,X86_64
$basearch 基礎平臺;i386
服務器是分別共享的目錄:
http://server/centos/7/x86_64
http://server/centos/6/i384
repo文件寫法:
http://server/centos/$releasever/$basearch/ //配置文件的baseurl這樣寫
四、源碼安裝:
1. 編譯安裝
(1)執行configure腳本,之所以要執行configure腳本,是因為硬件,操作系統等比較多比較雜,針對不同的硬件配置信息等會不一樣,不一樣的發行版本操作系統也是會有許多差別,存放庫文件等的地方也會有很大的差別,軟件發行廠商會編寫configure 偵測程序,程序會針對不同的硬件和操作系統改變配置和做部分優化,然后生成makefile文件,供make調用進行編譯和安裝。軟件包解壓之后會產生許多的源碼文件和可執行文件,腳本,README,NOTICE,install等供編譯安裝時的幫助信息可供參考。configure –help可以看到執行configure時可以指定的參數,如 –prefix=/PATH –sysconfdir=/PATH 兩個選項分別指定安裝路徑和配置文件存放的目錄,沒有指定則按軟件本身的默認路徑執行,在編譯安裝可能會報錯,可以按照報錯消息添加選項等安裝,直至configure執行成功。configure支持交叉編譯,就是說在本地給其他不同的硬件或操作系統執行編譯只需指定system type
(2) make 根據makefile 預設工作進行編譯,只有編譯成功后才能執行下一步工作
(3)make install : make根據編譯好的二進制文件安裝到響應的目錄
2. 安裝后的配置:
(1) 將二進制程序目錄導入至PATH 環境變量中:就可以在任意目錄執行安裝文件的二進制程序
(2) 導入庫文件路徑:
編輯/etc/ld.so.conf.d/NAME.conf 添加新的庫文件所在的目錄至此文件當中,讓系統重新生成緩存:
ldconfig -v
(3)導入頭文件:因為在系統之中,頭文件是存放在/usr/loca 目錄下面,想要讓安裝的軟件包頭文件可以讓系統使用,可以將安裝的頭文件在/usr/local 目錄下面單獨建立一個目錄用戶存放該軟件的頭文件,或者建立一個軟連接指向安裝的軟件的頭文件目錄以httpd為例:
[root@cnode6_8 include]# ln -sv /usr/local/http2/include/ /usr/include/httpd `/usr/include/httpd' -> `/usr/local/http2/include/'
(4)導入man幫助手冊
rhel6中man配置文件/etc/man.config
rhel7配置文件:/etc/man_db.conf
通過在man配置文件當中添加軟件的man路徑,可以將軟件的man幫助添加到man中方便查詢
原創文章,作者:jack_cui,如若轉載,請注明出處:http://www.www58058.com/39316
文章對rpm包管理器總結的很詳細i,如果能有一些操作性的實驗性的東西在文章中會是的文章更加啊豐滿哦。