Linux 程序包管理
linux系統(tǒng)中的諸多程序都是由源代碼編譯或者由二次發(fā)行商選擇性編譯分布,其大部分的程序安裝得了需要依賴于三方的庫文件,甚至很多的程序依賴關(guān)系會進(jìn)入到死循環(huán)的情況中。由于直接使用源代碼編譯安裝比較繁,故出現(xiàn)了一系列的安裝包管理程序。
各系統(tǒng)包及包管理程序:
Debian
1、軟件包后綴
.deb
2、前端管理工具
- apt-get
RHEL系
1、軟件包后綴
.rpm
2、前端管理工具
rpm
yum(centos5、6)
dnf(centos 7)
SUSE
1、軟件包后綴
.rpm
2、實(shí)現(xiàn)工具
- zypper
Fedora
1、軟件包后綴
.rpm
2、前端管理工具
- dnf
RHEL Linux軟件包命名規(guī)范
源代碼
- name-major-minor-release
RPM包命名格式
-
name-version-release.arch.rpm
-
release : 2.el7
2 : 編譯次數(shù)
el7: 適用于centos7平臺
arch : 架構(gòu)
rpm : 以rpm后綴命名
-
程序包管理器
功能
- 將編譯好的應(yīng)用程序的各組成文件打包成一個(gè)或幾個(gè)程序包文件,從而更方便的快捷實(shí)現(xiàn)程序包的安裝,查詢,卸載,升級等功能
組成部分
-
程序包的組成清單
文件清單
-
安裝或卸載時(shí)運(yùn)行的腳本,有如下四類:
preinstall : 安裝過程開始之前運(yùn)行的腳本,%pre定義 —nopre
postinstall: 安裝過程完成之后運(yùn)行的腳本,%post定義 —nopost
preuninstall : 卸載過程真正開始執(zhí)行之前運(yùn)行的腳本,%preun定義 —nopreun
postuninstall: 卸載過程完成之后運(yùn)行的腳本,%postun定義 —nopostun
注意:他將程序的多個(gè)功能分拆多個(gè)安裝包,單獨(dú)實(shí)現(xiàn)
-
數(shù)據(jù)庫部分
存儲程序包的名稱和版本
包與包的依賴關(guān)系
各包的功能說明
程序安裝生成的各文件的文件路徑及檢驗(yàn)碼信息
正確獲取安裝程序包的途徑
1. 系統(tǒng)發(fā)行版的光盤或官方的鏡像站點(diǎn)
2. 項(xiàng)目的官方站點(diǎn)
3. 第三方的組織制作方
EPEL:紅帽官方社區(qū)組織維護(hù)
-
搜索引擎
4.明確知道來源的RPM(自已制作等)
注意:建議在使用程序安裝包時(shí)檢查其合法性,針對其做來源合法性和程序包的完整性做校驗(yàn)
RPM包管理程序
1. RPM包的安裝
synopsis: rpm {-i| —install} [install-options] PACKAGE_FILE
-
options:-i , --install: 安裝-v: verbos,輸出詳細(xì)信息-vv: verbos,輸出更詳細(xì)的信息
-
install-options:-h: 以hash marks格式輸出進(jìn)度條,每個(gè)#代表2%的進(jìn)度--test: 測試安裝,只做環(huán)境檢查,并不真正安裝--nodeps: 忽略程序依賴關(guān)系--replacepkgs: 覆蓋安裝,如果文件修改錯誤,需要將其找回,可以使用此方法,但需要把修改錯誤的文件提前刪除--justdb: 不執(zhí)行安裝操作,只更新數(shù)據(jù)庫--noscripts: 不執(zhí)行rpm自帶的所有腳本--nosignature: 不檢查包簽名信息,即不檢查來源合法性--nodigest:不檢查包完整性信息
2. RPM包的升級
synopsis:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE …
-
[options]-U: 升級或安裝-F: 升級但不安裝
-
[install-options]--oldpackage: 降級--force: 強(qiáng)制升級
注意:
不要對內(nèi)核做升級操作;4.0之前內(nèi)核升級需要重啟系統(tǒng),Linux支持多內(nèi)核版本并存,因此直接安裝新版本內(nèi)核,以防止新的內(nèi)核出故障,導(dǎo)致系統(tǒng)無法正常啟動,或者會中斷在線業(yè)務(wù)
如果某源程序包的配置文件安裝后曾被修改過, 升級時(shí)新版本的程序包提供的同一個(gè)配置文件不會覆蓋老版本已經(jīng)修改過的文件,而是把新版本的文件重命名后提供(filename.rpm.new的格式)
3. RPM包的卸載
synopsis:
rpm {-e|--erase} [--allmatches] [--nodeps] [—noscripts]
-
[options]:-e: 刪除指定程序--allmatches: 卸載所有匹配指定名稱的程序包的各版本--nodeps: 卸載時(shí)忽略依賴關(guān)系--test: 測試卸載,dry run模式
4. RPM包的查詢
synopsis : rpm {-q|--query} [select-options] [query-options]
-
options-qa ,-all: 查詢所有已經(jīng)安裝的包-f , --file FILE: 查詢指定的文件是由哪個(gè)包安裝生成的-g , --group GROUP: 查詢指定包由哪個(gè)包組提供-p, --package PACKAGE_FILE: 對未安裝的程序包執(zhí)行查詢操作--wahtprovides CAPADILITY: 查詢指定的capability由哪個(gè)程序包提供—whatrequires CAPABILITY: 查詢指定的capability被哪個(gè)包所依賴
-
[query-options]--changelog: 查詢r(jià)pm包的changelog-l ,--list: 列出程序包安裝生成的所有文件列表-i , --info: 查詢程序包想著的infomation.包括其版本號、大小、所屬的包組等信息-c --configfiles: 查詢指定的程序包提供的配置文件-d --docfiles: 列出指定的程序包提供的文檔--provides: 列出指定的程序包提供的所有capability-R --requires: 查詢指定程序包的依賴關(guān)系--script: 查看程序包自帶的腳本
用法
-qi-qc-ql-qd-qpi-qpc-qpl-qpd
注意:RPM的查詢支持正則表達(dá)式的格式
5. RPM包的校驗(yàn)
synopsis: rpm {-V|--verify} [select-options] [verify-options]
-
[options]:-V PACKAGE_FILE: 自動檢查其數(shù)據(jù)的完整性及合法性-K PACKAGE_FILE: 手動檢查其數(shù)據(jù)的完整性及合法性--import KEY: 手動導(dǎo)入GPG KEY
-
校驗(yàn)程序包后的Format-
例:
rpm -V zsh
S.5....T. d /usr/share/doc/zsh-4.3.11/README
-
S.5....T. : 說明
S 文件大小改變了
M 文件權(quán)限改變了
5 MD5校驗(yàn)碼變了
D 主次設(shè)備不匹配
L read link變化 了
U 屬主改變了
G 屬組改變了
T 修改時(shí)間變了
P CAPABILITY變了
注意:如果其在某位上有變化,才會顯示相應(yīng)值," . "代表未修改過
程序包來源合法性驗(yàn)證和完整性驗(yàn)證:
1. 取公鑰
系統(tǒng)路徑為:/etc/pki/rpm-gpg/RPM-GPG-KEY-Centos7
系統(tǒng)安裝盤:鏡像文件根目錄下RPM-GPG-KEY-CentOS-6
2. 導(dǎo)入公鑰
- rpm --import /path/from/keyfile
3.檢驗(yàn)方式
安裝此組織簽名的程序時(shí),會自動執(zhí)行驗(yàn)證
手動驗(yàn)證:
rpm -K package_file
4.查看導(dǎo)入的公鑰
-
rpm -qa gpg-pub*
- 所有被導(dǎo)入的GPG-KEY都會顯示出來
5.刪除導(dǎo)入的公鑰
- rpm -e gpg-pubkey-c105b9de-4e0fd3a3(獲取這個(gè)公鑰需要使用
rpm -qa gpg-pub*查看)
6.數(shù)據(jù)庫的重建
1. RPM的數(shù)據(jù)庫存放路徑
/var/lib/rpm/
2. 獲取幫助
-
Centos 6
man rpm
-
Centos 7
man rpmdb
3. 重建方法
synopsis: rpm {--initdb|—rebuilddb}
-
--initdb- 初始化數(shù)據(jù)庫,當(dāng)前無任何數(shù)據(jù)庫時(shí), 可初始化并創(chuàng)建一個(gè)新的,當(dāng)前有時(shí)不執(zhí)行任何操作
-
--rebuilddb- 重新構(gòu)建,通過讀取當(dāng)前系統(tǒng)上所有已經(jīng)安裝過的程序包進(jìn)行重新創(chuàng)建
-
--dbpath- 指明庫的路徑,一般用于重建
例:
rpm --initdb --dbpath /tmp/rpmdb/rpm --rebuilddb --dbpath /tmp/rpmdb/
=========
7.RPM檢查合法性和完整性原理
1. 作者首先使用非對稱加密算法生成一組密鑰,即公鑰與私鑰
2. 作者再使用單身加密算法算出程序包特征碼
3. 利用私鑰對其特征碼進(jìn)行加密,這個(gè)過程叫簽名
4. 使用者拿到作者發(fā)布的公鑰對其特征碼解密 ,如果這個(gè)過程通過,即能驗(yàn)證其來源的合法性
5. 使用與作者一樣的單向加密算法算出已經(jīng)擁有軟件包的特征碼,與之前解密后的特征碼進(jìn)行對比,其稱之為完整性校驗(yàn)
=============
yum前端程序包管理工具
yum工具的出現(xiàn)
Linux平臺中軟件的安裝都由源碼文件編譯成二進(jìn)制文件后再運(yùn)行,其在很多的制作好的rpm程序包,制作方在制作的過程中把通常不常用的功能去除進(jìn)行編譯打包,或者再將不同功能的包進(jìn)行單獨(dú)編譯打包,提供多個(gè)功能程序包,這個(gè)情況安裝軟件時(shí),一個(gè)功能包或者程序會依賴于其他程序的庫文件,甚至有的時(shí)候會出現(xiàn)死循環(huán)依賴,導(dǎo)致軟件的安裝不正常工作或者根本安裝不成功。此yum工具就是為了有效解決程序之間的依賴關(guān)系。早期yum工具是由RHEL的程序人員使用perl語言開發(fā),隨著長時(shí)間的使用后,發(fā)現(xiàn)性能比較低下或難于使用,此后再由RHEL官方使用C語言重寫。
yum工具的實(shí)現(xiàn)原理
將諸多程序的包信息和頭文件提取出來,放到一個(gè)集中的地方,記錄其依賴關(guān)系。在下次安裝的時(shí)候,均于存儲的庫文件查找相應(yīng)的對應(yīng)關(guān)系,再安裝所依賴的軟件程序。
yum的工作機(jī)制
其更像C/S架構(gòu)模式,提供yum源的一方類似服務(wù)端,使用yum工具的一方類似客戶端??蛻舳嗣看蜗螺d遠(yuǎn)程服務(wù)器軟件包的一個(gè)元數(shù)據(jù)表,存放至本地進(jìn)行緩存 ,在要安裝程序時(shí),查詢緩存,如果存在, 就向遠(yuǎn)程服務(wù)器請求軟件安裝,如果有依賴關(guān)系,YUM服務(wù)器會檢查其軟件安裝情況并記錄本地,把有依賴并沒有安裝的軟件提示用戶安裝。下載的元數(shù)據(jù)緩存至本地時(shí),服務(wù)器會對元數(shù)據(jù)進(jìn)行特征算法,與自己本地進(jìn)行對比,如果變動了, 就要下載新的元數(shù)據(jù)
yum工具的傳輸協(xié)議及格式
-
http- 格式為:
http://mirrors.aliyun.com
- 格式為:
-
ftp- 格式為:
ftp://mirros.aliyun.com
- 格式為:
-
nfs- 格式為:
-
file- 格式為:
file:///media/cdrom
- 格式為:
yum的安裝及卸載
-
安裝
rpm -i yum-version.rpm
-
卸載
rpm -e yum
yum配置文件及格式:
/etc/yum.conf
-
各倉庫文件的公共配置,或者不屬于倉庫的配置,格式如下:
[main]:主名稱,固定名稱
cachedir= : 緩存目錄
keepcache=0:要不要保存緩存
exactarch=1:要不要做精確嚴(yán)格的平臺匹配
gpgcheck=1:檢查來源法性和完整性
plugins=1:要不要支持插件
installonly_limit: 同時(shí)安裝幾個(gè)
/etc/yum.repos.d/*.repo
-
為倉庫的指向及其配置,格式如下:
[repository ID] :ID名稱,即倉庫名稱,不可與其他ID重命
name= : 對ID名稱的說明
-
baserul=URL1
URL2
URL3 (如果同一個(gè)源有多個(gè)鏡像,可以在此我寫幾個(gè),但每個(gè)URL需換行)
mirrorlist= (有一臺服務(wù)器在網(wǎng)絡(luò)上,保存了多個(gè)baseurl,如果使用這項(xiàng),就不使用baseurl項(xiàng))
enabled={1|0}
gpgcheck={1|0}
repo_gpgcheck= : 檢查倉庫的元數(shù)據(jù)的簽名信息
gpgkey=URL (gpg密鑰文件)
enablegroups= {1|0}}是否在此倉庫中上使用組來指管理程序包
failovermethod= roundrobin|priority (對多個(gè)baseurl做優(yōu)先級的,roundrobin為輪循,priority為優(yōu)先級,默認(rèn)為輪循,意為隨機(jī))
keepalive= 如果對方是http 1.0是否要保持連接
username= yum的驗(yàn)證用戶
password= yum的驗(yàn)證用戶密碼
-
cost=默認(rèn)baseurl都為1000
- 注意:等號左右不能出現(xiàn)空格
yum命令
yum - yum - Yellowdog Updater Modified
synopsis: yum [options] [command] [package ...]
-
options:—nogpgcheck: 禁止進(jìn)行g(shù)pg check-y: 自動回答為Yes-q: 靜默模式—enablerepo: 臨時(shí)啟用此處指定的repo—disablereop:臨時(shí)禁用此處指定的reop—noplugins:禁用所有插件
========
yum軟件管理
yum的程序安裝:
-
install Package1....: 安裝 -
reinstall Package1...: 重新安裝 -
downgrade Package1...:降級安裝 -
localinstall Package1...: 安裝本地程序
yum程序包的升級
-
update soft_name -
localupdate Package1...
yum檢查升級
-
check-update
yum程序卸載
-
remove | erase soft_name
yum顯示程序包
-
list {all|available|updates|installed}all : 顯示所有倉庫中的包
available : 顯示可用的軟件包
updates : 顯示可用于升級的包
-
installed : 顯示已經(jīng)安裝的包
yum list php* : 顯示想著以php開頭的所有軟件包
yum查看包的infomation信息
-
info Packages1....
yum查看文件是由哪個(gè)包提供
-
provides packages1 | FILE….
yum清理本地緩存
clean [ package ] | metadata | expire-cache| rpmdb | plugins | all ]
yum生成緩存
makecache
yum搜索程序包名及summary信息
search [ string1…]
yum顯示程序包的依賴關(guān)系:
deplist packages1….
查看yum事務(wù)歷史(事務(wù)只記錄安裝、升級、卸載的信息)
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
yum顯示倉庫列表:
-
repolist [all | enabled| |disabled}all : 查看全部的倉庫
enabled : 查看地可用的倉庫
disabled : 查看不可用的倉庫
此項(xiàng)就是在/etc/yum.repos.d/*.reop中定義了enabled=1或者等于0的
=========
yum組管理
yum組的安裝
-
groupinstall
yum組的查看
-
grouplist
yum組的基本信息查看
-
groupinfo
yum組的刪除
-
groupremove
yum組的更新
-
groupupdate
==========
YUM的repo配置文件中可用的變量
$releasever:當(dāng)前os的發(fā)行版本的主版本號$arch:平臺$basearch:基礎(chǔ)平臺$YUM0-$YUM9:用戶自定義的變量
===========
yum倉庫的配置文件示例
[base] #光盤的基本軟件,即os代表光盤
name=CentOS $releasever $basearch on local server 172.16.0.1
baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.7-$basearch/ #此處如果使用公網(wǎng)公開的repo,這里的地址一定要為repodata目錄相同層級地址
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enable=1 #如果此項(xiàng)未寫,默認(rèn)表示啟用
[extra] # extra表示額外的程序
name=CentOS $releasever $basearch extras
baseurl=http://172.16.0.1/centos/$releasever/extras/$basearch/
gpgcheck=0
[epel] # 是由公共組織權(quán)威維護(hù)
name=Fedora EPEL for CentOS$releasever $basearch on local server 172.16.0.1
baseurl=http://172.16.0.1/fedora-epel/$releasever/$basearch/
gpgcheck=0
[cdrom]
name=cdrom
baseurl=file:///media/
gpgcheck=0
=========
創(chuàng)建yum倉庫:
-
yum install createrepo
createrepo - Create repomd (xml-rpm-metadata) repository
-
synosis: createrepo [options] <directory>-
[options]
-
—baseurl : 指定repodate的目錄位置
- repodate: 使用sqlite格式存儲
-
-
作者:魏鎮(zhèn)坪
鏈接:http://www.itdecent.cn/p/d3af022bc89b
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。