Centos6 包管理器yum詳解

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)程序包的安裝,查詢,卸載,升級等功能
組成部分
  1. 程序包的組成清單
    • 文件清單

    • 安裝或卸載時(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)
  1. 數(shù)據(jù)庫部分
    • 存儲程序包的名稱和版本

    • 包與包的依賴關(guān)系

    • 各包的功能說明

    • 程序安裝生成的各文件的文件路徑及檢驗(yàn)碼信息

正確獲取安裝程序包的途徑

1. 系統(tǒng)發(fā)行版的光盤或官方的鏡像站點(diǎn)
2. 項(xiàng)目的官方站點(diǎn)
3. 第三方的組織制作方
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)制升級

注意:
  1. 不要對內(nèi)核做升級操作;4.0之前內(nèi)核升級需要重啟系統(tǒng),Linux支持多內(nèi)核版本并存,因此直接安裝新版本內(nèi)核,以防止新的內(nèi)核出故障,導(dǎo)致系統(tǒng)無法正常啟動,或者會中斷在線業(yè)務(wù)

  2. 如果某源程序包的配置文件安裝后曾被修改過, 升級時(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)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Linux 程序包管理 linux系統(tǒng)中的諸多程序都是由源代碼編譯或者由二次發(fā)行商選擇性編譯分布,其大部分的程序安...
    魏鎮(zhèn)坪閱讀 5,931評論 1 8
  • http://blog.csdn.net/mathewsking/article/details/8211273 ...
    liuboxx1閱讀 6,241評論 1 1
  • 各大Linux發(fā)行版軟件包管理參考(http://www.freeoa.net/osuport/botinstal...
    IRONYT閱讀 7,567評論 0 12
  • 這兩天張靚穎媽媽的一封信,引發(fā)了微信圈關(guān)于父母與子女關(guān)系的大討論。一邊是依據(jù)自己的人生經(jīng)驗(yàn)、破斧成舟奮力阻止女兒“...
    北漂文科女閱讀 504評論 0 0
  • 今天中午吃時(shí)孩子說她的語文作業(yè)已經(jīng)寫完了,我問她什么作業(yè),這么快就寫完了,她說什么大本上的,還有作文,寫景或出去玩...
    翊翔_28d0閱讀 229評論 0 0

友情鏈接更多精彩內(nèi)容