rpm與yum的初步學習

rpm與yum的初步學習

  我們在使用linux系統時需要安裝和卸載軟件,我們這節就先來看一下rpm和yum的初步簡單實用。

linux軟件安裝:

  安裝程序的方式:

     通用二進制格式:直接解壓壓縮文件,就可以使用。但一定要注意安裝平臺。

         軟件包管理器:如RPM。

         軟件包管理器的前端工具:如YUM。

         源代碼編譯。

   軟件包的組成:

        二進制程序,位于 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 等目錄中。

        庫文件,位于 /lib, /usr/lib, /usr/local/lib 等目錄中。Linux中庫文件以 .so(動態鏈接庫)或 .a(靜態鏈接庫)作為文件后綴名。

        配置文件,位于 /etc 目錄中。

        幫助文件:手冊, README, INSTALL (/usr/share/doc/)

   了解安裝方式和軟件包組成之后我們用什么來安裝和卸載軟件呢? 這里我們就需要用到軟件包管理器來實現,要知道在沒有軟件包管理器之前,安裝程序,卸載程序是非常繁雜的。

   軟件包管理工具的特性:

        文件清單

        文件放置路徑

        提供的功能說明

        依賴關系

        軟件包管理器內部有一個數據庫,其中記載著程序的基本信息,校驗信息,程序路徑信息等。

   軟件包管理器:

        debian:deb文件, dpkg包管理器

        redhat: rpm文件, rpm包管理器

        rpm: Redhat Package Manager

         RPM  Package Manager

RPM

   RPM早期被稱為RedHat Package Manager,但由于目前RPM非常流行,且已經成為Linux工業標準。所以RPM現在又被稱為RPM is Package Manager。RPM管理支持事務機制。增強了程序安裝卸載的管理。RPM的功能:打包、安裝、查詢、升級、卸載、校驗、數據庫管理。

   RPM包的命名規范:

      源程序的命名規范:

        name-version.tar.{gz|bz2|xz}

        版本號:major.minor.release

        例:bash-4.3.1.tar.xz

        RPM包的命名規范:name-version-release.os.arch.rpm

        name:程序名稱。

        version:程序版本號。

        release(發行號):用于標識RPM包本身的發行號,與源程序的release號無關。

        os:即說明RPM包支持的操作系統版本。如el6(即rhel6)、centos6、el5、suse11。

        arch:主機平臺。如i686、x86_64、amd64、ppc(power-pc)、noarch(即不依賴平臺)

        例:bash-4.3.2-5.el6.x86_64.rpm

    RPM分包:

        包:分類和拆包

        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包管理器前端管理工具

        這里我們稍后會簡單介紹yum的使用,先來把RPM講完。

  上面我們說過的包的組成有二進制程序、庫文件、配置文件和幫助文檔,我們說說庫文件。

    庫文件:

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

           ldd /PATH/TO/BINARY_FILE

        示例:

                    [root@centos6 Packages]# ldd /bin/ls                    
                    linux-vdso.so.1 =>  (0x00007ffcfbd95000)
                    libselinux.so.1 => /lib64/libselinux.so.1 (0x000000359f400000)
                    librt.so.1 => /lib64/librt.so.1 (0x000000359e400000)
                    libcap.so.2 => /lib64/libcap.so.2 (0x00000035a4800000)
                    libacl.so.1 => /lib64/libacl.so.1 (0x00000035a8800000)
                    libc.so.6 => /lib64/libc.so.6 (0x000000359dc00000)
                    libdl.so.2 => /lib64/libdl.so.2 (0x000000359d800000)
                    /lib64/ld-linux-x86-64.so.2 (0x000000359d400000)
                    libpthread.so.0 => /lib64/libpthread.so.0 (0x000000359e000000)
                    libattr.so.1 => /lib64/libattr.so.1 (0x00000035a8400000)

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

        ldconfig

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

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

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

               示例:

                    [root@centos7 Packages]# /sbin/ldconfig -p                    
                    922 libs found in cache `/etc/ld.so.cache'
                    p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so
                    libzapojit-0.0.so.0 (libc6,x86-64) => /lib64/libzapojit-0.0.so.0
                    libz.so.1 (libc6,x86-64) => /lib64/libz.so.1
                    libyelp.so.0 (libc6,x86-64) => /lib64/libyelp.so.0
                    libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2
                    ...

    程序包管理器:

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

1、包文件組成(每個包獨有)RPM包內的文件 RPM的元數據,如名稱,版本,依賴性,描述等 安裝或卸載時運行的腳本

2、數據庫(公共) 程序包名稱及版本 依賴關系 功能說明 包安裝后生成的各文件路徑及校驗碼信息

獲取程序包的途徑:

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

CentOS鏡像:

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

http://mirrors.aliyun.com

http://mirrors.sohu.com

http://mirrors.163.com

(2) 項目官方站點

(3) 第三方組織

Fedora-EPEL

搜索引擎:

http://pkgs.org

http://rpmfind.net

http://rpm.pbone.net

https://sourceforge.net

0822.png

(4) 自己制作

rpm包管理:

CentOS系統上使用rpm命令管理程序包:

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

安裝:-i

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

[install-options]:

   -v:詳細信息

   -vv:更詳細信息

   -h:輸出進度條 (hash marks)每個#代表2%

     –test:測試安裝,檢查并報告以來關系及沖突消息

   –nodeps:忽略依賴關系

   –justdb:只升級數據庫

   –relpacepkgs:重新安裝

-F:升級

rpm -Fvh PACKAGE FILE

-U:升級或安裝 

rpm -Uvh PACKAGE FILE

–oldpackage:降級

–force:強制升級

-e:卸載

–allmatches:卸載所有匹配指定名稱的程序包的個版本

–nodeps:忽略依賴關系

–test:測試卸載

-q:查詢

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

[select-options]:

   PACKAGE——NAME:查詢指定程序包是否已經安裝,及其版本

   -a –all:查詢已安裝的所有程序包

   -f FILE:查詢指定的文件由哪個程序包安裝生成

                                [root@centos7 Packages]# rpm -qf /usr/sbin/httpd                        
                                  httpd-2.4.6-40.el7.centos.x86_64

   –whatprovides CAPBILITY:查詢指定的CAPBILITY由哪個程序包提供

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

[query-options]:

   –changelog:查詢rpm包的changelog

   -l –list:安裝程序包生成了多少個文件

    rpm -ql 包名

                                  [root@centos7 Packages]# rpm -ql httpd                                    
                                    /etc/httpd
                                    /etc/httpd/conf
                                    /etc/httpd/conf.d
                                    /etc/httpd/conf.d/README
                                    ...
                                    [root@centos7 Packages]# rpm -ql httpd | wc -l
                                    496

   -i –info:查詢程序包information(版本號,大小等)

    rpm -qi 包名

[root@centos7 Packages]# rpm -qi httpd                                
Name        : httpd
Version     : 2.4.6
Release     : 40.el7.centos
Architecture: x86_64
Install Date: Sun 21 Aug 2016 11:17:05 PM EDT
Group       : System Environment/Daemons
Size        : 9806197
License     : ASL 2.0
Signature   : RSA/SHA256, Wed 25 Nov 2015 09:41:23 AM EST, Key ID 24c6a8a7f4a80eb5
Source RPM  : httpd-2.4.6-40.el7.centos.src.rpm
Build Date  : Thu 19 Nov 2015 04:45:11 PM EST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

   -c –configfiles:程序包配置文件

   -d:查詢指定的程序包提供的文檔

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

   -R –requires:查詢指定程序包依賴關系

   –scripts:查詢程序包自帶的腳本

[root@centos7 Packages]# rpm -q --scripts httpd
preinstall scriptlet (using /bin/sh):
# Add the "apache" user
/usr/sbin/useradd -c "Apache" -u 48 \
    -s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || :
postinstall scriptlet (using /bin/sh):

if [ $1 -eq 1 ] ; then 
        # Initial installation 
        /usr/bin/systemctl preset httpd.service htcacheclean.service >/dev/null 2>&1 || : 
fi
preuninstall scriptlet (using /bin/sh):

if [ $1 -eq 0 ] ; then 
        # Package removal, not upgrade 
        /usr/bin/systemctl --no-reload disable httpd.service htcacheclean.service > /dev/null 2>&1 || : 
        /usr/bin/systemctl stop httpd.service htcacheclean.service > /dev/null 2>&1 || : 
fi
postuninstall scriptlet (using /bin/sh):

/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : 


# Trigger for conversion from SysV, per guidelines at:
# https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd
posttrans scriptlet (using /bin/sh):
test -f /etc/sysconfig/httpd-disable-posttrans || \
  /bin/systemctl try-restart httpd.service htcacheclean.service >/dev/null 2>&1 || :

rpm包自帶腳本:

自帶的腳本分為4類:

   preinstall:安裝之前運行的

   postinstall:安裝完成之后運行的

   preuninstall:卸載真正開始執行之前運行

     postuninstall:卸載過程執行完成之后執行

  安裝程序包時加上下面的參數命令:

  –noscrips :  不執行腳本

–nosidnature:不檢查包簽名信息,不檢查來源合法性

–nodigest:   不檢查程序包完整性

包校驗:-V

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

       S file Size differs

       M Mode differs (includes permissions and file type)

       5 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 mTime differs

       P caPabilities differ

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

    來源合法性驗證:RSA

       數字簽名

    完整性驗正:SHA256

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

        導入所需要公鑰:

        rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    示例:

[root@centos7 Packages]# rpm --import /run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7                    
[root@centos7 Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm 
 Preparing...   ################################# [100%]
 Updating / installing...
 1:zsh-5.0.2-14.el7 ################################# [100%]
[root@centos7 Packages]# rpm -K zsh-5.0.2-14.el7.x86_64.rpm 
zsh-5.0.2-14.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[root@centos7 rpm-gpg]# ll
total 12
-rw-r--r--. 1 root root 1690 Dec  9  2015 RPM-GPG-KEY-CentOS-7
-rw-r--r--. 1 root root 1004 Dec  9  2015 RPM-GPG-KEY-CentOS-Debug-7
-rw-r--r--. 1 root root 1690 Dec  9  2015 RPM-GPG-KEY-CentOS-Testing-7

    手動驗證:rpm -K PACKAGE_FILE

    數據庫重建:

            [root@centos7 rpm]# ls 

Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5

Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

[root@centos7 rpm]# pwd

/var/lib/rpm

            rpm數據庫路徑

        查詢操作:通過此處的數據庫進行;

    rpm {–initdb|–rebuilddb}

    –initdb:事先無任何數據庫時可創建新的;有時不執行任何操作

    –rebuilddb:重新構建,通過讀取當前系統上的所有已安裝的程序包進行重新構建;

yum

  YUM被稱為 Yellow dog Updater, Modified,是一個在Shell前端軟件包管理器。YUM客戶端基于RPM包進行管理,可以通過HTTP服務器下載、FTP服務器下載、本地軟件池的等方式獲得軟件包,可以從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系。YUM在安裝RPM時,會從服務器下載相應包,且緩存在本地。

  yun repository:yum repo (yum倉庫)

    存儲眾多rpm包,以及相關的元數據文件(放置于目錄下:repodata);

文件服務器:

   ftp://

   http://

   nfs://

   file:///

yum客戶端:

[root@centos7 ~]# rpm -qc yum                                    
/etc/logrotate.d/yum        
/etc/yum.conf          主配置文件
/etc/yum/version-groups.conf     
/etc/yum.conf                 為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo        為倉庫的指向提供配置

倉庫指向的定義:

配置文件的說明:

082202.png

[main]        #main倉庫。[ ]中括號表示一個倉庫的定義。其中是倉庫的名稱。

cachedir=/var/cache/yum/$basearch/$releasever    #RPM包的緩存位置。

keepcache=0    #RPM包在本地是否需要長期保存。1表示yes,0表示no。

debuglevel=2    #日志級別。

logfile=/var/log/yum.log    #日志文件。

exactarch=1    #下載的RPM包是否需要與本地平臺完全匹配。1表示yes,0表示no。

obsoletes=1

gpgcheck=1    #是否需要自動來源合法性檢測。

plugins=1

installonly_limit=5

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bdistroverpkg=centos-release

CentOS-Base.repo配置文件:

[repositoryID]

name=Some name for this repository

baseurl=url://path/to/repository/

enabled={1|0}

gpgcheck={1|0}

gpgkey=URL

enablegroups={1|0}

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

cost=    默認為1000

對配置文件中的一些配置項作說明:

           [ … ]:倉庫的名稱。不能重復。

enabled  {1|0}   是否啟用倉庫,不寫默認啟用。

gpgcheck {1|0}   檢查合法性

repo_gpgcheck{1|0} 是否檢查倉庫元數據

gpgkey=URL  gpgkey:驗證RPM包的密鑰文件路徑。該文件可以在遠處服務器上,也可以在本地。

enablegroups {1|0}    是否允許在此倉庫使用組批量管理程序包

baseurl:配置倉庫的路徑。用于指定一個url??稍O置多個

baseurl=url://path/to/repository/

               url://server2/path/to/repository/

               url://server3/path/to/repository/

mirrorlist:指向一個鏡像列表,里面有多個url。

cost:代價,其本質是倉庫優先級的配置。

顯示倉庫列表:

repolist [all|enabled|disabled]

顯示程序包:list

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

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

yum list相關命令:

yum list all

082203.png

    最左邊第一列:軟件包名稱.平臺名稱;中間列:軟件版本號-release號;最右邊一列:安裝情況。

    若顯示@則表示該軟件已經通過倉庫安裝;如@anaconda表示已經通過naconda倉庫安裝;install,則表示系統已經安裝,未通過倉庫安裝。若無@或不是install,則表示尚未安裝。如base,表示未安裝,包位于base倉庫中。updates,表示未安裝,包位于updates倉庫中。

yum list installed  顯示已安裝

yum list available  只顯示沒有安裝,但可安裝的包

yum list updates    查看所有可更新的包。

yum list extras     顯示不屬于任何倉庫的,額外的包。

yum list obsoletes  顯示被廢棄的包

yum list recent     新添加進yum倉庫的包

顯示查詢某個文件是由哪個軟件包生成的

yum provides 文件

yum whatprovides 文件

                        [root@centos7 Packages]# yum whatprovides /etc/issue            
            Loaded plugins: fastestmirror, langpacks
            Loading mirror speeds from cached hostfile
            centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file
            Repo        : base
            Matched from:
            Filename    : /etc/issue
            centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file
            Repo        : @anaconda
            Matched from:
            Filename    : /etc/issue

安裝程序包:

install package1 [package2] […]

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

升級程序包:

update [package1] [package2] […]

                        [root@centos7 Packages]# yum update ftp-0.17-66.el7.x86_64.rpm                         
                        Loaded plugins: fastestmirror, langpacks
                        Examining ftp-0.17-66.el7.x86_64.rpm: ftp-0.17-66.el7.x86_64
                        ftp-0.17-66.el7.x86_64.rpm: does not update installed package.
                        No packages marked for update

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

檢查可用升級:

check-update 

卸載程序包:

remove | erase package1 [package2] […]

查看程序包information:

info […] 

示例:

[root@centos7 Packages]# yum info ftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Installed Packages
Name        : ftp
Arch        : x86_64
Version     : 0.17
Release     : 66.el7
Size        : 96 k
Repo        : installed
From repo   : base
Summary     : The standard UNIX FTP (File Transfer Protocol) client
URL         : ftp://ftp.linux.org.uk/pub/linux/Networking/netkit
License     : BSD with advertising
Description : The ftp package provides the standard UNIX command-line FTP (File
            : Transfer Protocol) client.  FTP is a widely used protocol for
            : transferring files over the Internet and for archiving files.
            : 
            : If your system is on a network, you should install ftp in order to do
            : file transfers.

搜索:

search string1 [string2] […] 以指定的關鍵字搜索程序包名及summary信息

[root@centos7 Packages]# yum search ftp
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
============================================================= N/S matched: ftp =====================
ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client
lftp-scripts.noarch : Scripts for lftp
syslinux-tftpboot.x86_64 : SYSLINUX modules in /var/lib/tftpboot, available for network booting
tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP)
tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP)
vsftpd.x86_64 : Very Secure Ftp Daemon
vsftpd-sysvinit.x86_64 : SysV initscript for vsftpd daemon
curl.x86_64 : A utility for getting files from remote servers (FTP, HTTP, and others)
lftp.i686 : A sophisticated file transfer program
lftp.x86_64 : A sophisticated file transfer program
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols

  Name and summary matches only, use "search all" for everything.

查看指定包所依賴的capabilities:

deplist package1 [package2] […]

查看yum事務歷史:

history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

[root@centos7 Packages]# yum history 
Loaded plugins: fastestmirror, langpacks
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     3 | root <root>              | 2016-08-21 23:17 | Install        |    5  <
     2 | root <root>              | 2016-08-19 05:57 | Install        |    1 > 
     1 | System <unset>           | 2016-07-20 05:39 | Install        | 1243   
history list

yum的命令行選項:

–nogpgcheck:禁止進行gpg check

-y: 自動回答為“yes”

-q:靜默模式

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

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

–noplugins:禁用所有插件

    rpm軟件包之間的依賴性問題往往會很繁瑣,尤其是軟件由多個rpm包組成時。Yum(全稱為 Yellow dog Updater, Modified)是Shell前端軟件包管理器?;禦PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。

原創文章,作者:zanghonglei,如若轉載,請注明出處:http://www.www58058.com/38856

(0)
zanghongleizanghonglei
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • 腳本練習

    注:以下腳本練習實驗都是以root用戶身份執行的,若普通用戶運行需要另加相應的權限 1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 [root@fengl bin]# vim systeminfo.sh [roo…

    Linux干貨 2016-08-15
  • Linux系統的軟硬連接的區別

    Linux系統的軟硬連接的區別 M21-陸東貴 CentOS 7.2 Linux鏈接分兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號鏈接(Symbolic Link)。默認情況下,ln命令產生硬鏈接。 一、  硬鏈接: 硬連接是指通過索引節點來進行連接Linux鏈接分兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號鏈接…

    Linux干貨 2016-10-19
  • 誤刪除centos6.8內核修復全過程

    關于誤刪除系統內核或內核損壞修復教程,本教程主要詳細描述系統內核或內核損壞修復過程中步驟詳解 一.操作環境 硬件:華碩筆記本 軟件:VMware Workstation Pro 12版本  Centos 6.8.iso鏡像 二,修復步驟 第一步,我們先要掛載centos6.8的鏡像,然后光盤啟動 進入系統救援模式 進入當前系統的根目錄 我們需要手動…

    Linux干貨 2016-09-05
  • 無痛之ext3升ext4[原創]

    一臺文件存儲服務器單目錄下子目錄已經突破31998數限制,造成無法繼續創建子目錄,服務器系統環境為CentOS5.4 內核版本為2.6.18。解決方案只能是升級到ext4文件系統,首先到https://ext4.wiki.kernel.org/index.php/Ext4_Howto查了一下資料,文中的第一句便是“Ext4 was released as a…

    Linux干貨 2015-03-27
  • Find小總結及應用

    Find總結及應用 搜索命令:     locate命令:         在文件系統上查找符合條件的文件         非實時查找( 數據庫查找)…

    Linux干貨 2016-08-16
  • ansible基礎應用

    Ansible基礎 ansible是一款自動化運維工具,基于Python開發,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基于模塊工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所運行的模塊,ansible只是提供一種框架。 Ansible架構簡介 ansible的核心就是ansible平臺,ansible是高度?!?/p>

    Linux干貨 2016-08-22
欧美性久久久久