在沒有軟件包管理器前,用戶都是通過源代碼的方式來安裝軟件。但是我們很容易發(fā)現(xiàn),在每次安裝軟件時都必須對操作系統(tǒng)的境、編譯的參數(shù)進行對應(yīng)的編譯,并且操作過程很是復(fù)雜,這對于不熟悉操作系統(tǒng)的朋友來說真心困難,那么有沒有一款軟件能讓用戶能很簡單的安裝所需的軟件呢?
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、濂溪網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、商城建設(shè)、集團公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為濂溪等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。隨著自由軟件蓬勃發(fā)展,Linux系統(tǒng)的飛快發(fā)展,很多軟件開發(fā)者、企業(yè)和社區(qū)將這些軟件開始通過收集、整理、編譯制作成distributions發(fā)布到常用的Linux操作系統(tǒng)上,但是后來發(fā)現(xiàn),這樣做在日后軟件更新、系統(tǒng)更新上面都需要做很多操作。為了解決這個問題,一些社區(qū)和企業(yè)開始思考關(guān)于Linux的軟件管理方式。
通過社區(qū)與企業(yè)的共同努力,Linux開發(fā)商將固定的硬件平臺和操作系統(tǒng)需要安裝或升級的軟件編譯好,并且將這些軟件通過特定的打包方式將軟件打包成一個特殊格式的文件,這些軟件的文件含有能檢測操作系統(tǒng)環(huán)境和軟件依賴性的腳本,并提供記載該軟件提供的所有文件信息等,最后將這個軟件發(fā)布出去供用戶使用。那么用戶得到這個軟件包,通過特定的命令,就能執(zhí)行檢測系統(tǒng)環(huán)境,根據(jù)環(huán)境所需的要求,對軟件進行安裝。這就是軟件管理器的誕生。
2.1、dpkg
這個軟件安裝方法是通過Debian Linux社區(qū)開發(fā)出來的,通過dpkg機制,Debian所提供的軟件就能通過很簡單的方法安裝軟件,并且能記錄安裝后的軟件信息。只有是Debian的Linux distributions大多數(shù)都是使用這個方法管理軟件。例如B2D、Ubuntu
2.2、RPM
這個軟件安裝方法是由Red Hat公司開發(fā)出來的,由于非常的簡單實用,很多的distributions都使用這個機制來安裝和管理軟件。例如:CentOS、SuSe等
功能:將編譯好的程序打包成一個文件或有限的幾個文件,可以用于實現(xiàn)安裝、卸載、升級、查詢等功能
包含:
1、數(shù)據(jù)庫
程序名及版本
依賴關(guān)系: X –> Y,Z
功能性說明(rpm -qi bash)
安裝生成的各文件路徑及校驗碼
2、程序的組成清單
文件清單
安裝卸載時運行的腳本
RPM(RedHat Package Manager),RPM通過以一個數(shù)據(jù)庫記錄的方式來將你所需的軟件安裝到你的Linux系統(tǒng)上的。在你所安裝的軟件前先通過編譯完成,打包成RPM格式的文件,數(shù)據(jù)庫記錄的方式搜索對應(yīng)需要具備的依賴關(guān)系的軟件,那么當你在安裝該軟件的時候,RPM會查看你系統(tǒng)環(huán)境和依賴性關(guān)系來判定你是否能安裝此軟件。若能滿足,則允許安裝。否則將不給予安裝。并且在安裝的時候?qū)⒃撥浖男畔懭隦PM的數(shù)據(jù)庫中,以便日后查詢、檢驗和升級。
格式:
name–version–release.arch.rpm
例如:
bash-4.2.3-3.centos5.x86_64.rpm #表示bash-4.2.3,第三次發(fā)行,支持CentOS5系統(tǒng),支持硬件平臺x86_64位系統(tǒng)
獲取rpm包的途徑:
1、發(fā)行的光盤或站點服務(wù)器
鏡像:
http://mirrors.163.com
http://mirrors.sohu.com
http://mirros.aliyun.com
2、項目的官網(wǎng)
源代碼
rpm包
3、很多第三方機構(gòu)或個人制作并公開發(fā)布許多的rpm包
http://rpmfind.net
http://rpm.pbone.net/
假設(shè)一個程序有20個功能:常用功能有8個,特殊功能A:3個,特殊功能B:6個,二次開發(fā)相關(guān)功能:3個。那如果用戶只需要常用功能,可是必須要全部安裝,那么就會很占用空間,而且其他功能根本不會使用,這時就會分包機制了。
分包機制:
核心包(主包) + 子包(分包)組成
核心包:命令與源程序一致
例如:bash-4.2.3-3.centos7.x86_64.rpm
子包:(安裝子包前必須安裝核心包)
例如: bash-a-4.2.3-3.centos7.x86_64.rpm
bash-devel-4.2.3-3.centos7.x86_64.rpm #devel就表示開發(fā)功能
7.1、安裝(組合選項:-ivh)
rpm [option] Package_file -i:install安裝操作 -v:安裝時顯示詳細信息 -vv:安裝時顯示更詳細信息 -h:hash碼,在安裝過程中使用#號來顯示安裝進度 –-test:僅作測試,不做安裝操作 -–nodeps:忽略依賴關(guān)系,強制安裝如果某包依賴于其他包,要么解決所有的依賴關(guān)系,要么忽略依賴關(guān)系,強制安裝。但是如果強制安裝完成后,軟件未必能正常使用。 –-replacepkgs:重新安裝程序包 備注:如果原有配置文件作了修改,很有可能不執(zhí)行替換文件,而是將新生成的配置文件重命名后綴為 .rpmnew
例子:
#測試安裝RPM包 [root@localhost mnt]# mount /dev/cdrom /mnt #掛載光盤鏡像到/mnt目錄下 mount: block device /dev/sr0 is write-protected, mounting read-only [root@localhost mnt]# cd /mnt/Packages/ #進入光盤目錄 [root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm #安裝zsh-4.3.10-7.el6.x86_64.rpm包 warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY #這里的是提示密鑰,無法校驗包的合法性 Preparing... ########################################### [100%] #使用#代表安裝進度,一個#代表2% 1:zsh ########################################### [100%] #僅作測試,不做安裝 [root@localhost Packages]# rpm -q zsh package zsh is not installed [root@localhost Packages]# rpm --test -ivh zsh-4.3.10-7.el6.x86_64.rpm#僅作測試安裝,實際上未安裝 warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] [root@localhost Packages]# rpm -q zsh package zsh is not installed
7.2、卸載
rpm [option] Package_name -e:erase 刪除
卸載的時候也會存在依賴關(guān)系的,如果被其他包所依賴:
1、將依賴于此包的所有包一并卸載
2、忽略依賴關(guān)系能卸載,但依賴于此包程序包可能會運行不正常
–nodeps 忽略依賴關(guān)系
練習(xí):
[root@localhost Packages]# rpm -q zsh #查看軟件是否安裝,顯示出包的信息證明已經(jīng)安裝 zsh-4.3.10-7.el6.x86_64 [root@localhost Packages]# rpm -e zsh #卸載zsh軟件 [root@localhost Packages]# rpm -q zsh package zsh is not installed #提示該軟件未安裝
注意:如果包的配置文件安裝后曾被改動過,卸載時,此文件將不會卸載,而是重命名并保存,會出現(xiàn)下面的字段
warning: /etc/zshrc saved as /etc/zshrc.rpmsave
例如:
[root@localhost Packages]# rpm -e zsh warning: /etc/zshrc saved as /etc/zshrc.rpmsave [root@localhost Packages]# ls /etc/ | grep "zsh*" zshrc.rpmsave
7.3、升級(一般而言是新版本取代老版本)
rpm [option] Package_file
(1)、升級或安裝 (如果有老版本就升級,如果沒有就安裝)
組合 -Uvh
(2)、直接升級 (如果有老版本就安裝新版本)
組合 -Fvh
升級的時候也可能會出現(xiàn)版本沖突等問題,所以如果想強制升級可以使用 --force
注意:不應(yīng)該對內(nèi)核執(zhí)行升級操作,而是安裝(因為Linux系統(tǒng)允許多內(nèi)核并存)
7.4、查詢
(1)、查詢某包是否安裝
rpm -q package_name…..
(2)、查詢所有已經(jīng)安裝的包
rpm -qa #a表示all
按條件過濾: rpm -qa | grep 'PATTERN'
(3)、查詢包的表述信息
rpm -qi package_name (這里查詢僅查詢已安裝的包)
(4)、查詢某包生成了哪些文件
rpm -ql package_name
①查詢某包生成了哪些配置文件
rpm -qc package_name
②查詢某包生成了哪些幫助文件
rpm -qd package_name
③查詢程序包的相關(guān)腳本
rpm -q –scripts package_name
腳本有四類
preinstall:安裝前腳本
postinstall:安裝后腳本
preuninstall:卸載前腳本
postuninstall:卸載后腳本
(5)、查詢某文件是由哪個包安裝生成的
rpm -qf /path/to/some_file
(6)查詢某包所提供的capabilities
rpm -q provides PACKAGE_NAME
(7)查詢某包所依賴的capabilities
rpm -q --requires PACKAGE_NAME
(8)、對尚未安裝的包執(zhí)行查詢
rpm [option] /path/to/package_file -q :查看軟件包是否安裝 -qpi:包的信息 -qpl:安裝以后會生成什么文件 -qpc:安裝以后會生成什么配置文件 -qpd:安裝以后會生成什么幫助文件
(9)查詢指定的CAPABILITY由哪個包所提供
rpm -q --whatprovides CAPABILITY
(10)查詢指定的CAPABILITY被哪個包所依賴
rpm -q --whatrequires CAPABILITY
(11)查詢某包制作時隨版本變化的changelog信息
rpm -q --changelog PACKAGE_NAME
(12)預(yù)覽包內(nèi)文件
rpm2cpio 包文件|cpio –itv #需要制定包的路徑
(13)釋放包內(nèi)文件
rpm2cpio 包文件|cpio –id “ *.conf” #需要制定包的路徑
練習(xí):
[root@localhost Packages]# rpm -q zsh #查看zsh軟件是否安裝 zsh-4.3.10-7.el6.x86_64 [root@localhost Packages]# rpm -qa | grep zsh #查看zsh軟件是否安裝 zsh-4.3.10-7.el6.x86_64 [root@localhost Packages]# rpm -qd zsh #查詢zsh包生成了哪些幫助文件 [root@localhost Packages]# rpm -qpl httpd-2.2.15-29.el6.centos.x86_64.rpm #在未安裝httpd時,查詢安裝httpd會生成什么文件 [root@localhost Packages]# rpm -qf /etc/bashrc #查詢bashrc這個文件是通過什么程序包安裝生成的 setup-2.8.14-20.el6_4.1.noarch
7.5、校驗(用于檢查包裝后文件屬性是否發(fā)生變化)
rpm -V Package_name S file Size differs 大小 M Mode differs (includes permissions and file type) 權(quán)限,文件類型改變 5 digest (formerly MD5 sum) differs md5校驗碼發(fā)生改變 D Device major/minor number mismatch 如果是設(shè)備文件,則主設(shè)備號和次設(shè)備號發(fā)生改變 L readLink(2) path mismatch 路徑發(fā)生改變 U User ownership differs 屬主發(fā)生改變 G Group ownership differs 屬組發(fā)生改變 T mTime differs 修改時間發(fā)生變化 P caPabilities differ 能力發(fā)生變化(可以理解為功能)
某屬性無改變,則顯示為:
[root@localhost Packages]# tail -5 /etc/zshrc } _src_etc_profile_d unset -f _src_etc_profile_d #test file #在 /etc/zshrc文件中最后一行添加了最后一段 [root@localhost Packages]# rpm -V zsh #查詢該zsh軟件的配置文件是否更改 S.5....T. c /etc/zshrc #看出文件大小,MD5校驗,修改時間都發(fā)生了變化
7.6、RPM數(shù)據(jù)庫重建
rpm 的數(shù)據(jù)庫目錄: /var/lib/rpm
rpm –-initdb
:初始化如果事先沒有庫,會新建一個;如果有,則不覆蓋
rpm –-rebuilddb
:重建直接重建,覆蓋原有的數(shù)據(jù)庫
7.7、校驗RPM包來源合法性及完整性
前言:包制作者制作完成之后會附加數(shù)字簽名于包上;包的制作者使用單向加密提取原始數(shù)據(jù)的特征碼,而后使用自己的私鑰加密這段特征碼,附加原始數(shù)據(jù)后面。
驗證包來源合法性和完整性的過程:
前提:必須有可靠機制獲取到包制作者的公鑰
1、使用制作者的公鑰解密加密的特征碼,能解密則意味著來源合法
2、使用與制作者同樣的一樣加密算法提取原始數(shù)據(jù)的特征碼,并與解密出來的特征碼比對,相同,則意味著完整性沒問題,所以我們必須在當前系統(tǒng)上導(dǎo)入包的制作者的公鑰
導(dǎo)入公鑰:
rpm –-import /path/to/key_file
小貼士:centos6的密鑰是在光盤里的“RPM-GPG-KEY-CentOS-6 ”文件
顯示所有已導(dǎo)入的gpg格式的公鑰:
rpm -qa gpg-pubkey*
顯示公鑰的詳細信息:
rpm -qi gpg-pubkey-name
檢查包安裝過程中會自動執(zhí)行,若要手動檢測請如下操作:
手動檢查:
rpm -K /path/to/package_file rpm –-checksig /path/to/package_file
不檢查包完整性:
rpm -K –-nodigest
不檢查來源合法性:
rpm -K –-nosignature
實驗:
誤刪除rpm修復(fù)方法:
1.進入救援模式
2.創(chuàng)建掛載目錄:
mkdir /mnt/cdrom
3.掛載光盤鏡像:
mount -r /dev/sr0 /mnt/cdrom
4.進入軟件包目錄:
cd /mnt/cdrom/Packages/
5.安裝rpm:
rpm -ivh rpm-4.11.3-17.el6.x86_64- --root=/mnt/sysp_w_picpath/
練習(xí):
[root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm #安裝時會提示你沒有公鑰,無法校驗包的完整性與合法性 warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY [root@localhost Packages]# rpm --import /mnt/RPM-GPG-KEY-CentOS-6 #導(dǎo)入密鑰 [root@localhost Packages]# rpm -qa gpg-pubkey* #查看所以已導(dǎo)入的gpg格式的密鑰 gpg-pubkey-c105b9de-4e0fd3a3 [root@localhost Packages]# rpm -qi gpg-pubkey-c105b9de-4e0fd3a3 #查看密鑰詳細信息 [root@localhost Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm #可以導(dǎo)入密鑰后安裝軟件會自動執(zhí)行檢查,通過后直接安裝 Preparing... ########################################### [100%] 1:zsh ########################################### [100%] [root@localhost Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm #手動檢查包的完整性與合法性 zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
8.1、了解軟件包管理器的來源與使用
8.2、熟悉RPM包的命名格式 name-version-release.arch.rpm
8.3、熟悉打包和分包機制
8.4、熟悉RPM命令的使用 ,包括 安裝、卸載、查詢、升級、校驗、公鑰導(dǎo)入、合法性的檢驗、RPM數(shù)據(jù)庫重建
雖然在安裝軟件時還有其他更好的命名,比如yum(日后再介紹),但是yum也是基于RPM而衍生出來的,而且在查詢軟件包很有用,日后也會經(jīng)常使用這個命令,所以必須要對RPM命令非常熟悉,尤其是查詢命令,對日后維護Linux系統(tǒng)幫助很大。建議多加練習(xí)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。