Linux軟件包管理之rpm和yum的使用

rpm命令的使用

什么是RPM?

rpm:RPM Package Manager (原Redhat Package Manager) Linux 軟件包管理工具

特定的程序由應用程序組成;

    GPL:源碼

    glibs:標準的C庫

常見Linux發行版的軟件包管理器:

     Debian:.deb dpkg

     RadHat: .rpm(perl編寫),rpm(RadHat Package Manager)

              rpm:RPM is Package Manager

     SUSE  :  rpm

軟件運行環境

API:Application Programming Interface 意味開發庫兼容,因此,源代碼可跨平臺

    遵循POSIX規范:Portable Openratin System  可跨平臺調用

    程序的過程:預編譯、編譯、匯編、鏈接

        編譯:源代碼翻譯成cpu指令集的過程

        靜態鏈接:將庫包含在程序中

        動態鏈接:so(shared object)(相當于windows系統的.dll文件)

            庫為函數,function

            庫:可執行程序,本身不能作為程序執行入口,但可以被調用是編譯好的二進制格式

ABI:Application Binary Interface 編譯后的程序可以跨平臺

注意:1.os平臺:編譯好的應用程序必須為特定平臺所支持的版本(linux和windows平臺不兼容)

      2.硬件平臺:應用程序為特定的cpu所支持

包的組成部分

     二進制程序:/bin,/sbin /usr/sbin,/usr/local.bin,/usr/local/sbin

     自身庫文件:/lib /lib64 /usr/lib /usr/lib64 /usr/local/lib  /usr/local/lib64

                 開發時調用API,運行時調用ABI

                 通過調整  /etc/ld.so.conf   /etc/ld.so.conf.d/*.conf

      配置文件: /etc,無須額外配置

      幫助文件: man文件,info文件,README,INSTALL,ChangeLog

                 man COMMAND

                 到某路徑下查找與命令名同名的通常以。gz結尾的壓縮文件的名字

                 /usr/share/man

包命名格式:

源代碼:

        name-VERSION.tar.gz|bz2|xz

             VERSION:major.minor.release

rpm包命名方式:

         name-VERSION-release.arch.rpm

   例如:bash-4.2.46-19.el7.x86_64.rpm

VERSION: major.minor.release

release:release.OS,通常包含rpm的只做發行號,還包含使用的OS

   例如:el6:redhat enterprise linux6

常見的arch:

x86: i386, i486, i586, i686

x86_64: x64, x86_64, amd64

ppc:powerpc

noarch:跟平臺無關

包分類:

Application-VERSION-ARCH.rpm:       主包

Application-devel-VERSION-ARCH.rpm  開發子包

Application-utils-VERSION-ARHC.rpm  其它子包

Application-libs-VERSION-ARHC.rpm   其它子包

軟件包之間可能存在依賴關系,甚至循環依賴

解決依賴包管理工具:

    yum:rpm包管理器的前端工具

    apt-get:deb包管理器前端工具

    zypper: suse上的rpm前端管理工具

    dnf: Fedora 18+ rpm包管理器前端管理工具

庫文件

查看二進制程序所依賴的庫文件:

    ldd [options] 二進制文件

    ldd /PATH/TO/BINARY_FILE

Linux軟件包管理之rpm和yum的使用

管理及查看本機裝載的庫文件:

    ldconfig

    /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

緩存文件:/etc/ld.so.cache

Linux軟件包管理之rpm和yum的使用

包管理器

程序包管理器:

功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

1、包文件組成(每個包獨有)

    RPM包內的文件清單

    RPM的元數據,如名稱,版本,依賴關系,功能性描述等

    安裝或卸載時運行的腳本

2、數據庫(公共)

    程序包名稱及版本

    依賴關系

    功能說明

    包安裝后生成的各文件路徑及校驗碼信息

程序包的來源

管理程序包的方式:

    使用包管理器:rpm

    使用前端工具:yum, dnf(這個可能是未來版本)

獲取程序包的途徑:

(1) 系統發版的光盤或官方的服務器;

CentOS鏡像:

    https://www.centos.org/download/

    http://mirrors.aliyun.com

    http://mirrors.sohu.com

    http://mirrors.163.com

(2) 項目官方站點

(3) 第三方組織:

    EPEL:Extra Packages for Enterprise Linux

(4) 自己制作

注意:檢查其合法性:來源合法性,程序包的完整性

rpm包管理

CentOS系統上使用rpm命令管理程序包基本功能:

安裝、卸載、升級、查詢、校驗、數據庫維護

安裝

rpm {-i|–install} [install-options] PACKAGE_FILE…

    -i –install:安裝

    -v:顯示安裝信息

    -vv:二級詳細

    -vvv:三級詳細

    -h:hash 以#的個數顯示安裝進度,一個#表示2%的進度

安裝選項[install-options]

    –test: 測試安裝,但不真正執行安裝;dry run模式

    –nodeps:忽略依賴關系

    –replacepkgs| replacefiles 重新安裝 

       原來的配置文件不會被覆蓋,新安裝的配置文件將會重命名為以.rpmnew為后綴的文件

    –nosignature: 不檢查來源合法性

    –nodigest:不檢查包完整性

    –noscipts:不執行程序包腳本片斷

        %pre: 安裝前腳本;–nopre

        %post: 安裝后腳本;–nopost

        %preun: 卸載前腳本;–nopreun

        %postun: 卸載后腳本;–nopostun

示例:rpm -ivh PACKAGE_FILE …

Linux軟件包管理之rpm和yum的使用

升級:

rpm {-U|–upgrade} [install-options] PACKAGE_FILE…

rpm {-F|–freshen} [install-options] PACKAGE_FILE…

    upgrade:安裝有舊版程序包,則“升級”

             如果不存在舊版程序包,則“安裝”

    freshen:安裝有舊版程序包,則“升級”

             如果不存在舊版程序包,則不執行升級操作

    –oldpackage:降級

    –force: 強行升級

例如:rpm -Uvh PACKAGE_FILE …

例如:rpm -Fvh PACKAGE_FILE …

升級注意項

(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核

(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留

示例:用centos6.8的內核升級到centos7.2的內核,但是失敗了,原因是沒有安裝相關的依賴文件

如果一定要升級,就需要安裝相關依賴的文件

Linux軟件包管理之rpm和yum的使用

添加 –nodeps忽略依賴包的選項強行升級測試

Linux軟件包管理之rpm和yum的使用

升級完內核以后,發現內核掛了,請小伙伴謹慎操作

Linux軟件包管理之rpm和yum的使用

查詢:

rpm {-q|–query} [select-options] [query-options]

[select-options]

    -q: 查詢某單個包是否安裝

        Linux軟件包管理之rpm和yum的使用

    -qa: 查詢所有已安裝的包

    -qf: 查看指定的文件由哪個程序包安裝生成

        Linux軟件包管理之rpm和yum的使用

    -p:查詢尚未安裝的rpm包文件的相關信息

        -qpl rpm_file:針對尚未安裝的程序包文件做查詢操作;

        -qpi rpm_file: 查詢其簡單描述信息Linux軟件包管理之rpm和yum的使用

    –whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供

    –whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

Linux軟件包管理之rpm和yum的使用

    rpm2cpio 包文件|cpio–itv :預覽包內文件

    rpm2cpio 包文件|cpio–id “*.conf” :釋放包內文件

查詢選項(配合-q)[query-options]

    -qc: 查詢安裝后生成的配置文件

    -qd: 查詢包安裝后生成的幫助文檔

    Linux軟件包管理之rpm和yum的使用

    -qi: 查詢包的描述信息

Linux軟件包管理之rpm和yum的使用    -ql: 查看指定的程序包安裝后生成的所有文件;

Linux軟件包管理之rpm和yum的使用

    -qR: 查詢指定的程序包所依賴的CAPABILITY;

Linux軟件包管理之rpm和yum的使用

    –provides: 列出指定程序包所提供的CAPABILITY;

Linux軟件包管理之rpm和yum的使用

    –changelog:查詢rpm包的changelog

Linux軟件包管理之rpm和yum的使用

    -q –scripts:查詢包相關的腳本

            preinstall 安裝前腳本

            postinstall 安裝后腳本

            preuninstall 卸載前腳本

    postuninstall 卸載后腳本

卸載:

    rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

例如:rpm -e package_name

如果卸載被其他程序所依賴的包

1、把依賴者一同卸載

2、忽略依賴關系:–nodeps

3、不在卸載

Linux軟件包管理之rpm和yum的使用

校驗:檢查包安裝后生成的文件是否被修改過

rpm {-V|–verify} [select-options] [verify-options]

    S  大小       file Size differs 

    M  頭文件     Mode differs (includes permissions and file type)

    5  MD5        digest (formerly MD5 sum) differs

    D  設備錯誤   Device major/minor number mismatch

    L  鏈接       readLink(2) path mismatch

    U  屬主       User ownership differs

    G  主組改變   Group ownership differs

    T  修改時間   mTimediffers

    P  能力改變   capabilities differ

包來源合法性驗正及完整性驗正:

包完整性:通過單向加密機制(MD5|sha1)

來源合法性:通過公鑰加密機制(RSA)

公鑰加密:

對稱加密:加密、解密使用同一密鑰;

非對稱加密:密鑰是成對兒的

    public key: 公鑰,公開所有人

    secret key: 私鑰, 不能公開

            

導入所需要公鑰:

rpm  -K|checksig  rpmfile 檢查包的完整性和簽名

    –nosigeature:不檢查來源合法性

    –nodigest:不檢查包完整性

rpm  –import  /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7  導入以后再做驗證

CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7

rpm  -qa  gpg-pubkey*

示例:導入公鑰以后,查詢包的時候,我們會發現沒有提示信息了,這是因為默認沒有校驗包的公鑰,所以系統會對所有的包對提示報錯的信息

Linux軟件包管理之rpm和yum的使用

Linux軟件包管理之rpm和yum的使用

Linux軟件包管理之rpm和yum的使用

Linux軟件包管理之rpm和yum的使用

rpm數據庫

數據庫重建:

    /var/lib/rpm

rpm {–initdb|–rebuilddb}

    initdb: 初始化

    如果事先不存在數據庫,則新建之,否則,不執行任何操作

    rebuilddb:重建

    無論當前存在與否,直接重新創建數據庫

Linux軟件包管理之rpm和yum的使用


yum命令的使用

CentOS前端工具: yum, dnf

yum: YellowdogUpdate Modifier,rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具

    yum repository: yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)

    文件服務器:通過yum所支持的文件共享機制將各rpm包通過文件服務共享

    ftp  ftp://server/path/to/repo

    http http://server/path/to/repo

    nfs  nfs://servr/nfs_path

    file file:///path/to/path

yum客戶端作用

     1.配置文件:指定各可用的yum倉庫;

     2.緩存元數據:yum會到各可用yum倉庫獲取元數據,并緩存至本地

     3.分析元數據:根據具體的操作請求完成元數據分析,可能包括依賴關系、文件列表等信息

     4.執行具體操作

yum客戶端配置文件:

要使用yum管理應用程序,首先得配置其可用的yum倉庫,保存在配置文件中

/etc/yum.conf:為所有倉庫提供公共配置

/etc/yum.repos.d/*.repo:為倉庫的指向提供配置

配置文件格式:由兩段組成。類似window的ini配置文件

    [main]:主配置段

    [repo]:倉庫配置段

倉庫指向的定義:

[repositoryID]                         倉庫ID

name=Some name for this repository     倉庫名

baseurl=url://path/to/repository/      倉庫的訪問路徑

enabled={1|0}                          1,表示啟用,0表示不啟用

gpgcheck={1|0}                         1,校驗gpg,0表示不驗證

gpgkey=URL                             公鑰地址(可以是本地,也可以是服務器端路徑)

enablegroups={1|0}

failovermethod={roundrobin|priority}   默認為:roundrobin,意為隨機挑選;

cost=                                  定義此倉庫開銷,默認為1000

yum-config-manager  命令

    –add-repo= URL 添加倉庫

    –disable      “倉庫名” 禁用倉庫

    –enable       “倉庫名” 啟用倉庫

示例:創建一個倉庫

Linux軟件包管理之rpm和yum的使用Linux軟件包管理之rpm和yum的使用

yum命令的用法:

yum [options] [command] [package …]

顯示倉庫列表:

    repolist[all|enabled|disabled]

Linux軟件包管理之rpm和yum的使用

顯示程序包:

    list

    # yum list [all | glob_exp1] [glob_exp2] […]

    # yum list {available|installed|updates} [glob_exp1] […]

示例yum list 支持通配符。由于里面的安裝包太多。所以這里用通配符只看部分

Linux軟件包管理之rpm和yum的使用

安裝程序包:

    install package1 [package2] […]

    reinstall package1 [package2] […] (重新安裝)

Linux軟件包管理之rpm和yum的使用

升級程序包:

    update [package1] [package2] […]

    downgrade package1 [package2] […] (降級)

檢查可用升級:

    check-update

Linux軟件包管理之rpm和yum的使用

卸載程序包:

    remove | erase package1 [package2] […]

Linux軟件包管理之rpm和yum的使用

查看程序包information:

    info […]

Linux軟件包管理之rpm和yum的使用

查看指定的特性(可以是某文件)是由哪個程序包所提供:

    provides | whatprovidesfeature1 [feature2] […]

Linux軟件包管理之rpm和yum的使用

清理本地緩存:一般來說,除非倉庫出了問題或者使用新的倉庫,否則一般情況下面不需要清理緩存

    clean [ packages | metadata | expire-cache | rpmdb| plugins | all ]

Linux軟件包管理之rpm和yum的使用

構建緩存:

    makecache

Linux軟件包管理之rpm和yum的使用

搜索:search string1 [string2] […]

    以指定的關鍵字搜索程序包名及summary信息

Linux軟件包管理之rpm和yum的使用

查看指定包所依賴的capabilities:

    deplist package1 [package2] […]

Linux軟件包管理之rpm和yum的使用

查看yum事務歷史:

    history [info|list|packages-list|packages-info|

    summary|addon-info|redo|undo|

    rollback|new|sync|stats]

    yum history

    yum history info 6

    yum history undo 6

Linux軟件包管理之rpm和yum的使用

 查看指定yum歷史的操作

Linux軟件包管理之rpm和yum的使用

撤銷指定歷史操作

Linux軟件包管理之rpm和yum的使用

Linux軟件包管理之rpm和yum的使用

日志存放位置:

    /var/log/yum.log

Linux軟件包管理之rpm和yum的使用

安裝及升級本地程序包:

    localinstallrpmfile1 [rpmfile2] […]

(用install替代)

    localupdaterpmfile1  [rpmfile2] […]

(用update替代)

Linux軟件包管理之rpm和yum的使用

包組管理的相關命令:

    group install group1 [group2] […]

    group update group1 [group2] […]

    group list[hidden] [groupwildcard] […] 加hidden可以顯示隱藏文件

    group remove group1 [group2] […]

    group info group1   […]

Linux軟件包管理之rpm和yum的使用

注意:包組需要用group install安裝

Linux軟件包管理之rpm和yum的使用

如何使用光盤當作本地yum倉庫:

 (1) 掛載光盤至某目錄,例如/media/cdrom

# mount /dev/cdrom/media/cdrom

 (2) 創建配置文件

    [CentOS7]

    name=

    baseurl=

    gpgcheck=

    enabled=

示例:centos7的cdrom當作倉庫配置,注意的是,得先手動配置掛載光盤到該目錄,由于centos7不支持自動掛載,可以把掛載的命令寫入到/etc/profile.d里面以實現開機自動掛載cdrom

Linux軟件包管理之rpm和yum的使用

Linux軟件包管理之rpm和yum的使用

示例:centos6建立yum的光盤倉庫

Linux軟件包管理之rpm和yum的使用

yum的命令行選項:

    –nogpgcheck:禁止進行gpgcheck

    -y: 自動回答為“yes”

    -q:靜默模式

    –disablerepo=repoidglob:臨時禁用此處指定的repo

    –enablerepo=repoidglob:臨時啟用此處指定的repo

    –noplugins:禁用所有插件

Linux軟件包管理之rpm和yum的使用

yum倉庫

yum的repo配置文件中可用的變量:

    $releasever: 當前OS的發行版的主版本號

    $arch: 平臺,i386,i486,i586,x86_64等

    $basearch:基礎平臺;i386

    $YUM0-$YUM9:自定義變量

示例:

    http://server/centos/$releasever/$basearch/

    http://server/centos/7/x86_64

    http://server/centos/6/i384

示例:系統自帶的倉庫里面的url的鏈接均是變量,這樣的話,在生產環境中,如果是有大量的服務器,因為服務器的系統版本很可能不一樣,這樣配置的話,系統可以自動識別版本號,以免安裝錯了其他系統發行版的包導致出其他問題。

Linux軟件包管理之rpm和yum的使用

自己創建yum倉庫:

    createrepo[options] <directory>

示例:在/root/treedir下面創建一個倉庫,并且把一個tree的安裝包放在里面

Linux軟件包管理之rpm和yum的使用

可以跟cd里面的repodata目錄對比一下基本是一樣的

Linux軟件包管理之rpm和yum的使用編輯/etc/yum.repos.d/base.repo文件,啟動treedir的倉庫,并且關閉其他倉庫

Linux軟件包管理之rpm和yum的使用

安裝tree命令,并且成功,可以查看到tree命令是在tree的倉庫里面安裝的。

Linux軟件包管理之rpm和yum的使用

思考問題

刪除kernel包后,系統無法啟動,怎么恢復?

一言不合就把內核干掉了O.O

Linux軟件包管理之rpm和yum的使用

Linux軟件包管理之rpm和yum的使用

重啟以后發現內核真的掛了,怎么辦怎么辦?T_T

Linux軟件包管理之rpm和yum的使用

此時我們可以把安裝光盤放進去服務器,然后選擇cd-rom啟動

Linux軟件包管理之rpm和yum的使用

點擊進去Rescue installed system救援模式

Linux軟件包管理之rpm和yum的使用

選擇系統語言

Linux軟件包管理之rpm和yum的使用

選擇默認鍵盤格局。在天朝都是us的

Linux軟件包管理之rpm和yum的使用

是否啟用網絡,這一個可以選擇no,因為我們是用光盤的,無需聯網

Linux軟件包管理之rpm和yum的使用

問你是否繼續,選擇Continue

Linux軟件包管理之rpm和yum的使用

這里提示如果你需要用root環境的權限可以輸入chroot /mnt/sysimage

Linux軟件包管理之rpm和yum的使用

這里會提示你的系統已經掛載到/mnt/sysimage這個目錄下面

Linux軟件包管理之rpm和yum的使用

此時選擇Start shell,然后救援模式就開始了..

Linux軟件包管理之rpm和yum的使用

因為是內核不小心卸載掉了(實際上是故意的),所以我們只需要從光盤里面安裝一個內核即可,我們把光盤掛載到一個空的文件夾里面。

注意,千萬不要直接掛載/dev/sr0到/mnt下面,不然會出錯的,出錯以后只能重啟又重復這個操作。

掛載完光盤以后,輸入rpm -ivh kernel-2.6.32-642.el6.noarch.rpm –root=/mnt/sysimage

等待安裝完畢以后,重啟電腦

Linux軟件包管理之rpm和yum的使用

重啟電腦可能會看見這樣的提示,意味著你要等一個很長的時間才能進入系統,這個就慢慢等一下吧

Linux軟件包管理之rpm和yum的使用

漫長的等待,看見可以正常進入系統了,并且登陸正常,ok,內核已經修復完

Linux軟件包管理之rpm和yum的使用

原創文章,作者:~微風~,如若轉載,請注明出處:http://www.www58058.com/38918

(0)
~微風~~微風~
上一篇 2016-08-25
下一篇 2016-08-25

相關推薦

  • 習題

    1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符 2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符 3、在/root/install.log每一行行首增加#號 4、在/etc/fstab文件中不以#開頭的行的行首增加#號 5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基…

    Linux干貨 2016-08-10
  • 12壓縮與解壓

    在Linux系統中壓縮、解壓以及歸檔的工具主要有一下幾種: file-roller : 這個工具適合在桌面系統下進行解壓操作。 compress/uncompress  :這是一個比較老的解壓工具,壓縮后會添加.Z為后綴 gzip/gunzip : .gz結尾 bzip2/bunzip2 : .bz2 xz/unxz : .xz  zip…

    Linux干貨 2016-11-27
  • NFS服務

    NFS服務:       NFS:Network File System 網絡文件系統,基于內核的文件系統。 Sun公司開發,通過使用NFS,用戶和程序可以像訪 問本地文件一樣訪問遠端系統上的文件,基于RPC(Remote Procedure Call Protocol遠程過程調用)實現 。 RPC采用C/S模式??蛻魴C請求程序…

    2017-08-14
  • Linux 第11&12天: Linux軟件包管理

    Linux 第11&12天: Linux軟件包管理      在系統管理中, 軟件包的管理是最重要的, 是系統管理的基礎,   本文主要是記錄內容有: RPM二進制包的管理,YUM二進制包的管理, 源代碼包的管理   軟件運行環境API:Application Programming Interfac…

    Linux干貨 2016-08-22
  • test2

    歡迎使用馬克飛象 作業幫 示例筆記本 馬克飛象 幫助 Markdown 馬克飛象是一款專為印象筆記(Evernote)打造的Markdown編輯器,通過精心的設計與技術實現,配合印象筆記強大的存儲和同步功能,帶來前所未有的書寫體驗。特點概述: 功能豐富 :支持高亮代碼塊、LaTeX 公式、流程圖,本地圖片以及…

    Linux干貨 2017-03-20
  • FHS文件系統各目錄功能

    / 根目錄。 包含了幾乎所的文件目錄。相當于中央系統。進入的最簡單方法是:cd /。 /boot 引導程序,內核等存放的目錄。 這個目錄,包括了在引導過程中所必需的文件,引導程序的相關文件(例如grub,lilo以及相應的配置文件以及Linux操作系統內核相關文件(例如vmlinuz等一般都存放在這里。在最開始的啟動階…

    Linux干貨 2016-10-20
欧美性久久久久