Linux之yum工具詳解

Linux 程序包管理

linux系統中的諸多程序都是由源代碼編譯或者由二次發行商選擇性編譯分布,其大部分的程序安裝得了需要依賴于三方的庫文件,甚至很多的程序依賴關系會進入到死循環的情況中。由于直接使用源代碼編譯安裝比較繁,故出現了一系列的安裝包管理程序。

各系統包及包管理程序:

Debian

1、軟件包后綴
  • .deb
2、前端管理工具
  • apt-get

RHEL系

1、軟件包后綴
  • .rpm
2、前端管理工具
  • rpm
  • yum(centos5、6)
  • dnf(centos 7)

SUSE

1、軟件包后綴
  • .rpm
2、實現工具
  • zypper

Fedora

1、軟件包后綴
  • .rpm
2、前端管理工具
  • dnf

RHEL Linux軟件包命名規范

源代碼
  • name-major-minor-release
RPM包命名格式
  • name-version-release.arch.rpm
    • release : 2.el7
      * 2 : 編譯次數
      * el7: 適用于centos7平臺
      * arch : 架構
      * rpm : 以rpm后綴命名

程序包管理器

功能
  • 將編譯好的應用程序的各組成文件打包成一個或幾個程序包文件,從而更方便的快捷實現程序包的安裝,查詢,卸載,升級等功能
組成部分
  1. 程序包的組成清單
    • 文件清單
    • 安裝或卸載時運行的腳本,有如下四類:
      • preinstall : 安裝過程開始之前運行的腳本,%pre定義 —nopre
      • postinstall: 安裝過程完成之后運行的腳本,%post定義 —nopost
      • preuninstall : 卸載過程真正開始執行之前運行的腳本,%preun定義 —nopreun
      • postuninstall: 卸載過程完成之后運行的腳本,%postun定義 —nopostun
注意:他將程序的多個功能分拆多個安裝包,單獨實現
  1. 數據庫部分
    • 存儲程序包的名稱和版本
    • 包與包的依賴關系
    • 各包的功能說明
    • 程序安裝生成的各文件的文件路徑及檢驗碼信息

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

1. 系統發行版的光盤或官方的鏡像站點
2. 項目的官方站點
3. 第三方的組織制作方
4.明確知道來源的RPM(自已制作等)
注意:建議在使用程序安裝包時檢查其合法性,針對其做來源合法性程序包的完整性做校驗

RPM包管理程序

1. RPM包的安裝

synopsis: rpm {-i| —install} [install-options] PACKAGE_FILE

  • options:

    • -i , --install: 安裝
    • -v : verbos,輸出詳細信息
    • -vv : verbos,輸出更詳細的信息
  • install-options:

    • -h : 以hash marks格式輸出進度條,每個#代表2%的進度
    • --test : 測試安裝,只做環境檢查,并不真正安裝
    • --nodeps : 忽略程序依賴關系
    • --replacepkgs: 覆蓋安裝,如果文件修改錯誤,需要將其找回,可以使用此方法,但需要把修改錯誤的文件提前刪除
    • --justdb: 不執行安裝操作,只更新數據庫
    • --noscripts: 不執行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 : 強制升級
注意:
  1. 不要對內核做升級操作;4.0之前內核升級需要重啟系統,Linux支持多內核版本并存,因此直接安裝新版本內核,以防止新的內核出故障,導致系統無法正常啟動,或者會中斷在線業務
  2. 如果某源程序包的配置文件安裝后曾被修改過, 升級時新版本的程序包提供的同一個配置文件不會覆蓋老版本已經修改過的文件,而是把新版本的文件重命名后提供(filename.rpm.new的格式)

3. RPM包的卸載

synopsis:

rpm {-e|--erase} [--allmatches] [--nodeps] [—noscripts]

  • [options]:
    • -e : 刪除指定程序
    • --allmatches : 卸載所有匹配指定名稱的程序包的各版本
    • --nodeps : 卸載時忽略依賴關系
    • --test : 測試卸載,dry run模式

4. RPM包的查詢

synopsis : rpm {-q|--query} [select-options] [query-options]

  • options

    • -qa ,-all : 查詢所有已經安裝的包
    • -f , --file FILE : 查詢指定的文件是由哪個包安裝生成的
    • -g , --group GROUP: 查詢指定包由哪個包組提供
    • -p, --package PACKAGE_FILE : 對未安裝的程序包執行查詢操作
    • --wahtprovides CAPADILITY: 查詢指定的capability由哪個程序包提供
    • —whatrequires CAPABILITY: 查詢指定的capability被哪個包所依賴
  • [query-options]

    • --changelog : 查詢rpm包的changelog
    • -l ,--list : 列出程序包安裝生成的所有文件列表
    • -i , --info : 查詢程序包想著的infomation.包括其版本號、大小、所屬的包組等信息
    • -c --configfiles : 查詢指定的程序包提供的配置文件
    • -d --docfiles : 列出指定的程序包提供的文檔
    • --provides : 列出指定的程序包提供的所有capability
    • -R --requires: 查詢指定程序包的依賴關系
    • --script : 查看程序包自帶的腳本
  • 用法

  • -qi -qc -ql -qd

  • -qpi -qpc -qpl -qpd

注意:RPM的查詢支持正則表達式的格式

5. RPM包的校驗

synopsis: rpm {-V|--verify} [select-options] [verify-options]

  • [options]:

    • -V PACKAGE_FILE: 自動檢查其數據的完整性及合法性
    • -K PACKAGE_FILE: 手動檢查其數據的完整性及合法性
    • --import KEY : 手動導入GPG KEY
  • 校驗程序包后的Format

    • 例:
      • rpm -V zsh
      • S.5....T. d /usr/share/doc/zsh-4.3.11/README
S.5....T. : 說明
         S 文件大小改變了
         M 文件權限改變了
         5 MD5校驗碼變了
         D 主次設備不匹配
         L read link變化 了
         U 屬主改變了
         G 屬組改變了
         T 修改時間變了
         P CAPABILITY變了
注意:如果其在某位上有變化,才會顯示相應值," . "代表未修改過

程序包來源合法性驗證和完整性驗證:

1. 取公鑰
  • 系統路徑為:/etc/pki/rpm-gpg/RPM-GPG-KEY-Centos7
  • 系統安裝盤:鏡像文件根目錄下RPM-GPG-KEY-CentOS-6
2. 導入公鑰
  • rpm --import /path/from/keyfile
3.檢驗方式
  • 安裝此組織簽名的程序時,會自動執行驗證
  • 手動驗證:rpm -K package_file
4.查看導入的公鑰
  • rpm -qa gpg-pub*
    • 所有被導入的GPG-KEY都會顯示出來
5.刪除導入的公鑰
  • rpm -e gpg-pubkey-c105b9de-4e0fd3a3(獲取這個公鑰需要使用 rpm -qa gpg-pub*查看)

6.數據庫的重建

1. RPM的數據庫存放路徑
  • /var/lib/rpm/
2. 獲取幫助
  • Centos 6
    • man rpm
  • Centos 7
    • man rpmdb
3. 重建方法

synopsis: rpm {--initdb|—rebuilddb}

  • --initdb
    • 初始化數據庫,當前無任何數據庫時, 可初始化并創建一個新的,當前有時不執行任何操作
  • --rebuilddb
    • 重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建
  • --dbpath
    • 指明庫的路徑,一般用于重建
例:
  • rpm --initdb --dbpath /tmp/rpmdb/
  • rpm --rebuilddb --dbpath /tmp/rpmdb/

=========

7.RPM檢查合法性和完整性原理

1. 作者首先使用非對稱加密算法生成一組密鑰,即公鑰與私鑰
2. 作者再使用單身加密算法算出程序包特征碼
3. 利用私鑰對其特征碼進行加密,這個過程叫簽名
4. 使用者拿到作者發布的公鑰對其特征碼解密 ,如果這個過程通過,即能驗證其來源的合法性
5. 使用與作者一樣的單向加密算法算出已經擁有軟件包的特征碼,與之前解密后的特征碼進行對比,其稱之為完整性校驗

=============

yum前端程序包管理工具

yum工具的出現

Linux平臺中軟件的安裝都由源碼文件編譯成二進制文件后再運行,其在很多的制作好的rpm程序包,制作方在制作的過程中把通常不常用的功能去除進行編譯打包,或者再將不同功能的包進行單獨編譯打包,提供多個功能程序包,這個情況安裝軟件時,一個功能包或者程序會依賴于其他程序的庫文件,甚至有的時候會出現死循環依賴,導致軟件的安裝不正常工作或者根本安裝不成功。此yum工具就是為了有效解決程序之間的依賴關系。早期yum工具是由RHEL的程序人員使用perl語言開發,隨著長時間的使用后,發現性能比較低下或難于使用,此后再由RHEL官方使用C語言重寫。

yum工具的實現原理

將諸多程序的包信息和頭文件提取出來,放到一個集中的地方,記錄其依賴關系。在下次安裝的時候,均于存儲的庫文件查找相應的對應關系,再安裝所依賴的軟件程序。

yum的工作機制

其更像C/S架構模式,提供yum源的一方類似服務端,使用yum工具的一方類似客戶端。客戶端每次下載遠程服務器軟件包的一個元數據表,存放至本地進行緩存 ,在要安裝程序時,查詢緩存,如果存在, 就向遠程服務器請求軟件安裝,如果有依賴關系,YUM服務器會檢查其軟件安裝情況并記錄本地,把有依賴并沒有安裝的軟件提示用戶安裝。下載的元數據緩存至本地時,服務器會對元數據進行特征算法,與自己本地進行對比,如果變動了, 就要下載新的元數據

yum工具的傳輸協議及格式

  • 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:要不要做精確嚴格的平臺匹配
    • gpgcheck=1:檢查來源法性和完整性
    • plugins=1:要不要支持插件
    • installonly_limit: 同時安裝幾個
/etc/yum.repos.d/*.repo
  • 為倉庫的指向及其配置,格式如下:
    • [repository ID] :ID名稱,即倉庫名稱,不可與其他ID重命
    • name= : 對ID名稱的說明
    • baserul=URL1
      URL2
      URL3 (如果同一個源有多個鏡像,可以在此我寫幾個,但每個URL需換行)
    • mirrorlist= (有一臺服務器在網絡上,保存了多個baseurl,如果使用這項,就不使用baseurl項)
    • enabled={1|0}
    • gpgcheck={1|0}
    • repo_gpgcheck= : 檢查倉庫的元數據的簽名信息
    • gpgkey=URL (gpg密鑰文件)
    • enablegroups= {1|0}}是否在此倉庫中上使用組來指管理程序包
    • failovermethod= roundrobin|priority (對多個baseurl做優先級的,roundrobin為輪循,priority為優先級,默認為輪循,意為隨機)
    • keepalive= 如果對方是http 1.0是否要保持連接
    • username= yum的驗證用戶
    • password= yum的驗證用戶密碼
    • cost=默認baseurl都為1000
      * 注意:等號左右不能出現空格

yum命令

yum - yum - Yellowdog Updater Modified
synopsis: yum [options] [command] [package ...]
  • options:

    • —nogpgcheck : 禁止進行gpg check
    • -y : 自動回答為Yes
    • -q : 靜默模式
    • —enablerepo : 臨時啟用此處指定的repo
    • —disablereop :臨時禁用此處指定的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 : 顯示已經安裝的包
      • yum list php* : 顯示想著以php開頭的所有軟件包
yum查看包的infomation信息
  • info Packages1....
yum查看文件是由哪個包提供
  • provides packages1 | FILE….
yum清理本地緩存
  • clean [ package ] | metadata | expire-cache| rpmdb | plugins | all ]
yum生成緩存
  • makecache
yum搜索程序包名及summary信息
  • search [ string1…]
yum顯示程序包的依賴關系:
  • deplist packages1….
查看yum事務歷史(事務只記錄安裝、升級、卸載的信息)
  • history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

yum顯示倉庫列表:

  • repolist [all | enabled| |disabled}
    • all : 查看全部的倉庫
    • enabled : 查看地可用的倉庫
    • disabled : 查看不可用的倉庫
此項就是在/etc/yum.repos.d/*.reop中定義了enabled=1或者等于0的

=========

yum組管理

yum組的安裝
  • groupinstall
yum組的查看
  • grouplist
yum組的基本信息查看
  • groupinfo
yum組的刪除
  • groupremove
yum組的更新
  • groupupdate

==========

YUM的repo配置文件中可用的變量
  • $releasever:當前os的發行版本的主版本號
  • $arch:平臺
  • $basearch:基礎平臺
  • $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/ #此處如果使用公網公開的repo,這里的地址一定要為repodata目錄相同層級地址
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
    enable=1 #如果此項未寫,默認表示啟用

    [extra] #  extra表示額外的程序
    name=CentOS $releasever $basearch extras
    baseurl=http://172.16.0.1/centos/$releasever/extras/$basearch/
    gpgcheck=0

    [epel]  # 是由公共組織權威維護
    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

=========

創建yum倉庫:
  • yum install createrepo
createrepo - Create repomd (xml-rpm-metadata) repository
  • synosis: createrepo [options] <directory>
    • [options]
      • —baseurl : 指定repodate的目錄位置

        • repodate: 使用sqlite格式存儲
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容