1,438 瀏覽數

RPM 套件管理

RPM(Red Hat Package Manager) 套件安裝和移除管理

RedHat Linux 採用 RPM(Red Hat Package Manager) 檔的方式來管理軟體的安裝和維護.

關於 RPM 的相關資訊可以參考他的官方網站 http://www.rpm.org,我們可以在這http://fedora.redhat.com/download/mirrors.html 找到我們想要的 rpm 檔,而 RPM 的資料庫存放在 /var/lib/rpm 目錄下.RPM 檔名命名方式如下:
name-version-release.architecture.rpm
ex: zip-2.3-16.i386.rpm

name 就是套件的名稱 .
version 套件的版本 .
release 前面的版本是經過第幾次的修定.
而其中的 architecture 指出適用哪一種機器平台來使用
i386,i486,i586,i686:Intel x86 Compatible
x86_64:Intel EM64T & AMD AMD 64 Compatible
alpha:Digital Alpha/AXP
ia64:IA-64(Itanium)
s390:S/390
noarch:architecture-independent code(scripts,documentation,image,sounds,etc.)
src:source code(原始程式碼)

  1. 安裝RPM套件 
    # rpm -ivh xxx.rpm
  2. 移除RPM套件
    # rpm -e xxx
  3. 升級RPM套件
    # rpm -Uvh xxx.rpm
    or
    # rpm -Fvh xxx.rpm
  4. 查詢已安裝的RPM套件
    # rpm -q xxx
    or
    # rpm -qa | grep -i xxx
  5. 查詢檔案屬於哪個RPM套件
    # rpm -qf xxx
  6. 查詢 library 屬於哪個RPM套件
    # rpm -ivh samba-………rpm
  7. 查詢RPM套件所安裝的檔案放置何處
    # rpm -ql xxxx
  8. 檢查 RPM 檔的 GPG private signature 是否正確
    # rpm -K /mnt/cdrom/RedHat/RPMS/zip-2.3-16.i386.rpm
  9. 驗證已安裝的 RPM 檔案是否和原先安裝時不同
    # rpm -Va
  10. X-Window 下的 RPM 管理程式
    # system-config-packages
  1. 安裝RPM套件

    [root@benjr ~]# rpm -ivh xxx.rpm
    

    #-i , –install 表示安裝套件
    #-v, –verbose 在安裝過程會顯示較多的資訊如軟體名稱
    #-h, –hash 安裝過程會有#顯示安裝中

    #安裝 samba package

    [root@benjr ~]# rpm -ivh samba-………rpm
    warning: samba-2.2.5-10.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    error: Failed dependencies:
    samba-common = 2.2.5 is needed by samba-2.2.5-10
    perl(CGI) is needed by samba-2.2.5-10
    

    #
    安裝 package 時有相依性的問題,在上面就有提示要先安裝 samba-common-……rpm,perl-CGI-……..rpm 等套件

    [root@benjr ~]# rpm -ivh perl-CGI-……………….rpm
    [root@benjr ~]# rpm -ivh samba-common-………rpm
    [root@benjr ~]# rpm -ivh samba-………rpm
    

    note:除了本地的裝置(硬碟/光碟…)外,還可以透過 ftp / http 網路的方式來安裝套件.

    [root@benjr ~]# rpm -ivh ftp://root:password@10.6.116.84/root/gkrellm-2.1.5-3.i386.rpm
    Retrieving ftp://root:password@10.6.116.84/root/gkrellm-2.1.5-3.i386.rpm
    warning: /var/tmp/rpm-xfer.3L8g0L: V3 DSA signature: NOKEY, key ID db42a60e
    Preparing… ########################################### [100%]
    1:gkrellm ########################################### [100%]
    

    其中指定 ftp 時的參數為 ftp:username:password@ip address/folder/rpm file 在這邊你會看到 warning: /var/tmp/rpm-xfer.3L8g0L: V3 DSA signature: NOKEY, key ID db42a60e ,這是由於你尚未安裝適當的金鑰來驗證簽章,關於驗證請參考後面的說明.
    透過 ftp 來安裝套件(vsftp 預設 root 無法登入 ftp ,需要修改 PAM)

  2. 移除RPM套件

    [root@benjr ~]# rpm -e xxx
    

    這裡的xxx是軟體名稱,而不是套件的名稱
    -e , –erase 表示移除套件
    可以用以下指令來查詢所有關於 samba 的套件名稱

    [root@benjr ~]# rpm -aq | grep -i samba 
    samba-client-2.2.5-10
    samba-common-2.2.5-10
    samba-2.2.5-10
    

    移除 RPM 套件就是要使用以上的套件名稱,可以不用指定版本名稱,試著移除 samba Package

    [root@benjr ~]# rpm -e samba-common
    error: Failed dependencies
    samba-common = 2.2.5-10 is needed by (installed) samba-client-2.2.5-10
    samba-common = 2.2.5-10 is needed by (installed) samba-2.2.5-10
    

    #如同安裝 package 時,移除軟體也是有相依性,在上面就有提示要先移除 samba-client-2.2.5-10 , samba-2.2.5-10 等軟體

    [root@benjr ~]# rpm -e samba
    [root@benjr ~]# rpm -e samba-client
    [root@benjr ~]# rpm -e samba-common
    
  3. 升級RPM套件

    [root@benjr ~]# rpm -Uvh xxx.rpm
    

    or

    [root@benjr ~]# rpm -Fvh xxx.rpm
    

    -U , –upgrade 會先移除舊版套件,再安裝新套件
    -F , –freshen 除非套件已存在,才會做更新的動作
    II.RPM(Red Hat Package Manager) 套件查詢管理

  4. 查詢已安裝的RPM套件

    [root@benjr ~]# rpm -q xxx
    

    or

    [root@benjr ~]# rpm -qa | grep -i xxx
    

    -q , –query 用來查詢套件
    -a, –all 會顯示所有已安裝的套件,此時就不用指定套件名稱
    grep xxx 會依 rpm -aq 顯示結果來篩選出每行中包含此 xxx 字串的,參數 -i 代表不管大小寫.
    # 找出 samba server 相關的套件

    [root@benjr ~]# rpm -aq | grep -i samba
    redhat-config-samba-1.0.16-1
    samba-common-3.0.0-14.3E
    samba-3.0.0-14.3E
    samba-client-3.0.0-14.3E
    

    這樣只能知道套件的名稱以及他的版本,如果想知道更詳細的套件內容,你可以用 #rpm -qi packagename 來查看,如下:

    [root@benjr ~]# rpm -qi xxx
    

    -i, –info 顯示 package 的資訊,包括名稱版本和一些相關資訊的描述.
    # 查 samba package 的相關套件資訊

    [root@benjr ~]# rpm -qi samba
    Name : samba Relocations: (not relocateable)
    Version : 3.0.0 Vendor: Red Hat, Inc.
    Release : 14.3E Build Date: Thu 25 Sep 2003 11:10:13 PM CST
    Install Date: Fri 27 Feb 2004 11:27:25 AM CST Build Host: porky.devel.redhat.com
    Group : System Environment/Daemons Source RPM: samba-3.0.0-14.3E.src.rpm
    Size : 21060324 License: GNU GPL Version 2
    Signature : DSA/SHA1, Fri 26 Sep 2003 12:13:05 AM CST, Key ID 219180cddb42a60e
    Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
    URL : http://www.samba.org/
    Summary : The Samba SMB server.
    Description :
    Samba is the protocol by which a lot of PC-related machines share
    files, printers, and other information (such as lists of available
    files and printers). The Windows NT, OS/2, and Linux operating systems
    support this natively, and add-on packages can enable the same thing
    for DOS, Windows, VMS, UNIX of all kinds, MVS, and more. This package
    provides an SMB server that can be used to provide network services to
    SMB (sometimes called “Lan Manager") clients. Samba uses NetBIOS over
    TCP/IP (NetBT) protocols and does NOT need the NetBEUI (Microsoft Raw
    NetBIOS frame) protocol.
    
  5. 查詢檔案屬於哪個RPM套件

    [root@benjr ~]# rpm -qf xxx
    

    -q , –query 用來顯示查詢的套件
    -f , –file 查檔案屬於哪個套件
    # 查詢 ls 檔案屬於哪個RPM套件

    [root@benjr ~]# rpm -qf /bin/ls
    fileutils-…….
    

    # 通常會使用下列的指令來取代

    [root@benjr ~]# rpm -qf `which ls`
    fileutils-…….
    

    註:which ls 指令為找出 ls 所存放的位址,其執行結果為 /bin/ls ` ` 為反引號(通常是在數字 1 的旁邊的按鍵),主要是在指令中再執行指令.請參考 Shell

    note:有些檔案不屬於於任何套件,所以不是每個檔案都能夠查到結果,如 /etc/fstab

    [root@benjr ~]# rpm -qf /etc/fstab
    file /etc/fstab is not owned by any package
    
  6. 查詢 library 屬於哪個RPM套件

    安裝套件有所謂的相依性問題,再安裝套件時大多都能得到足夠的資訊,如下所示.

    [root@benjr ~]# rpm -ivh samba-………rpm
    warning: samba-2.2.5-10.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    error: Failed dependencies:
    samba-common = 2.2.5 is needed by samba-2.2.5-10
    perl(CGI) is needed by samba-2.2.5-10
    

    在上面就有提示要先安裝 samba-common-……rpm,perl-CGI-……..rpm 等套件

    但有時系統沒有提供足夠的訊息時,如 library 屬於哪些套件,此時我們就該手動來查詢.

    [root@benjr ~]# rpm -ivh /mnt/RedHat/RPMS/httpd-2.0.46-38.ent.i386.rpm
    warning: /mnt/RedHat/RPMS/httpd-2.0.46-38.ent.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    error: Failed dependencies:
    libpcre.so.0 is needed by httpd-2.0.46-38.ent
    libpcreposix.so.0 is needed by httpd-2.0.46-38.ent
    

    可以看到我們在安裝 httpd 時需要 libpcre.so.0 和 libpcreposix.so.0 ,而這個 library 套件屬於哪個套件,此時就需要手動來查詢.

    在使用這項功能前要先安裝 rpmdb-redhat-……..rpm 套件
    # 查詢 libpcre.so.0 屬於哪個RPM套件

    [root@benjr ~]# rpm -ivh rpmdb-redhat-xxx.rpm
    [root@benjr ~]# rpm -q –redhatprovides libpcre.so.0
    pcre.xxxx
    

    這樣就可以直接看出需要另外再安裝那些 rpm 來滿足相依性

  7. 查詢RPM套件所安裝的檔案放置何處

    [root@benjr ~]# rpm -ql xxxx
    

    note: 此處適用於已安裝的 rpm,xxxx 是套件的名稱,不用指定套件版本.
    -q , –query 用來顯示查詢的套件
    -l (List) 列出 rpm 所安裝的檔案放置何處
    # 查詢gzip RPM套件所安裝的檔案放置何處

    [root@benjr ~]# rpm -ql gzip
    /bin/gunzip
    /bin/gzip
    .
    .
    /usr/share/man/man1/zmore.1.gz
    /usr/share/man/man1/znew.1.gz
    

    # 此處適用於已安裝的 rpm,xxxx 是套件的名稱,不用指定套件版本.

    [root@benjr ~]# rpm -qlp xxxx.rpm
    

    note: 此處適用於未安裝的 rpm , gzip-xxxx.rpm 是套件的完整名稱
    -q , –query 用來顯示查詢的套件
    -l (list) 列出 rpm 所安裝的檔案放置何處
    -p(package)
    # 查詢gzip RPM套件所安裝的檔案放置何處

    [root@benjr ~]# rpm -qlp gzip-xxxx.rpm
    /bin/gunzip
    /bin/gzip
    ……………略………………….
    /usr/share/man/man1/znew.1.gz
    

    # 此處適用於未安裝的 rpm , gzip-xxxx.rpm 是套件的完整名稱
    如果你只是單純的想查詢套件的設定檔在哪,你可以用參數 -qc

    [root@benjr ~]# rpm -qc xxx
    

    -c, –configfiles 查設定檔
    # 查詢dhcp 設定檔放置何處

    [root@benjr ~]# rpm -qc dhcp
    /etc/rc.d/init.d/dhcpd
    /etc/rc.d/init.d/dhcrelay
    ……略…….
    

    這邊你只會看到關於 dhcp 的設定檔.

    除了查詢設定檔外還可以查該程式提供的相關說明文件

    [root@benjr ~]# rpm -qdf xxx
    

    -d , –docfiles 查詢該程式提供的相關說明文件
    -q , –query 用來顯示查詢的套件
    -f , –file 查檔案屬於哪個套件
    # 查詢相關說明文件

    [root@benjr ~]# rpm -qdf /etc/samba/smb.conf
    /usr/share/man/man1/ntlm_auth.1.gz
    ……略…….
    

    III.RPM(Red Hat Package Manager) 套件驗證管理

  8. 檢查 RPM 檔的 GPG private signature 是否正確

    GPG private signature 主要用意是檢查使用者下載的 RPM 檔是否遭到修改或已經毀壞.

    當你尚未安裝適當的金鑰來驗證簽章,安裝或升級套件時你會看到下面的錯誤
    warning: V3 DSA signature: NOKEY, key ID db42a60e
    當你的檔案有損毀時,數位簽章的驗證失敗就會有下面的錯誤訊息發生
    error:V3 DSA signature: BAD, key ID db42a60e

    首先建立 RPM 檔的 GPG 資料庫,先將 CDROM 放入 RedHat Linux 光碟片第一片

    [root@benjr ~]# mount /mnt/cdrom
    

    我們需要光碟片中的 RPM-GPG-KEY 檔,才能建立資料庫

    [root@benjr ~]# rpm –import /mnt/cdrom/RPM-GPG-KEY
    

    –import 匯入 RPM-GPG-KEY 值
    測試一下

    [root@benjr ~]# rpm -K /mnt/cdrom/RedHat/RPMS/zip-2.3-16.i386.rpm
    /mnt/cdrom/RedHat/RPMS/zip-2.3-16.i386.rpm:(sha1) dsa sha1 md5 gpg OK
    

    -K ,–checksig 檢查 rpm 檔的 GPG-KEY 是否和 GPG 資料庫相同

    關於 GPG 請參考…..(還沒寫 !_!)

  9. 驗證已安裝的 RPM 檔案是否和原先安裝時不同

    [root@benjr ~]# rpm -Va
    S.5….T c /etc/hotplug/usb.usermap
    

    -V , –verify 驗證已安裝的 RPM 檔案是否和原先安裝時不同
    -a , -all 檢查所有的 RPM 檔

    [root@benjr ~]# rpm -Vf /etc/passwd
    

    -V , –verify 驗證已安裝的 RPM 檔案是否和原先安裝時不同
    -f , -file 針對檔案來檢查

    RPM 進行驗證時,會檢查下列九個屬性資料
    S 是「檔案的大小」
    M 是「檔案的存取模式」 ,也就是 rwx 的屬性修改了或檔案類型.
    5 是「檔案的 MD5 值」
    D 是「檔案的主要與次要號碼(major/minor number),也就是裝置」
    L 是「檔案的符號連結內容」
    U 是「檔案的擁有者」
    G 是「檔案所屬的群組名稱」
    T 是「檔案的修改時間」
    c 的出現,代表其為「設定檔案」

    而 RPM 依不同的檔案類型來進行下列的檢查動作。
    檔案類型 大小 存取模式 MD5 值 主號 次號 連結內容 擁有者 群組 修改時間
    目錄檔案 X X X
    連結檔案 X X X X
    FIFO檔案 X X X
    設備檔案 X X X X X
    一般檔案 X X X X X X

    檢查 /etc/passwd 是否被修改過,先找出 /etc/passwd 屬於哪一個套件

    [root@benjr ~]# rpm -qf /etc/passwd
    setup-2.5.25-1
    

    /etc/passwd 屬於 setup 這個套件,檢查 /etc/passwd 是否被修改過

    [root@benjr ~]# rpm -V setup
    …….T c /etc/printcap
    

    只有檔案的修改時間和安裝的時候不一樣,可能之前有新增過使用者,所以基本上 /etc/passwd 是沒被修改過,現在我們自己手動偷偷修改 /etc/passwd 的群組擁有者,看系統是否檢查到.

    [root@benjr ~]# chgrp :user1 /etc/passwd
    [root@benjr ~]# rpm -V setup
    ……G. c /etc/passwd
    

    除了可以針對套件來檢查外還可以直接針對檔案來驗證.

    [root@benjr ~]# rpm -Vf /etc/passwd
    ……G. c /etc/passwd
    

    系統檢測出 /etc/passwd 的群組擁有者已經和安裝時不同了,記的要將群組擁有者改回來

    [root@benjr ~]# chgrp :root /etc/passwd
    
  10. X-Window 下的 RPM 管理程式

    [root@benjr ~]# redhat-config-packages
    

    note: RedHat 8.0 以上的版本所使用的指令

    [root@benjr ~]# system-config-packages
    

    note: RHEL4 以上的版本所使用的指令

2 個網友的想法 “RPM 套件管理

  1. 自動參照通知: Package Manager | Benjr.tw

  2. 自動參照通知: 檔案壓縮與包裝 | Benjr.tw

發表迴響