Linux之RPM

一、前言

二、軟件包及軟件包管理工具

三、安裝程序的方式

四、rpm命令及常用選項

五、其他

 

一、前言

 

主流發行版的軟件包管理工具

Debian:dpt(debian package tools), ----->爲了解決程序複雜的文件依賴關係,建立在dpt基礎上,開發了依賴於dpt的前端工具apt-get

RedHat:rpm,早期爲Redhat Package Manager,後來做爲Linux軟件包管理工業標準,爲RPM is Package Manager;受debian的apt-get啓發,RedHat開發了基於rpm的前端管理工具----->yum(Yellowdog Updater Modified)


yum源鏡像網站:

    http://mirrors.sohu.com

rpm包搜索網站:

    http://rpmfind.net/

    http://rpm.pbone.net/

 

二、軟件包及軟件包管理工具

 

    1. Linux軟件包的組成部分:

        二進制程序安裝路徑:/bin, /sbin | /usr/bin, /usr/sbin | /usr/local/bin, /usr/local/sbin   

        庫文件安裝路徑:/lib, /usr/lib, /usr/local/lib    #庫文件也是可執行程序,但是其本身不能單獨執行

        配置文件安裝路徑:/etc

        幫助文件安裝路徑: /usr/share/doc, /usr/share/man    #路勁中有man手冊,README,INSTALL;man的配置文件/etc/man .config,可定義默認搜索路徑

 

    2.rpm包名含義

        bash-4.1.2-15.el6_4.x86_64

        bash:程序名

        4.1.2:4爲主版本號,1是次版本號,2是發行號

        15.el6:rpm包的發行號

        el6:適用的操作系統;el6爲Red Hat Enterprise Linux,rehl6的縮寫

        x86_64:適用的cpu架構

        注:程序有時不止一個安裝包,由主包和分包組成,rpm主包命名遵循上述格式如bind-9.8.2-0.17.rc1.el6.x86_64.rpm,分包命名時則類似bind-chroot-9.8.2-0.17.rc1.el6.x86_64.rpm,

 

    3.軟件包管理工具的功能:打包、安裝、查詢、升級、卸載、校驗、數據庫管理(重建)

        其中rpm程序的打包過程是根據spec文件來完成的

 

    4.軟件包管理工具打包程序的管理規則:

        (1).提供文件清單

        (2).提供文件安裝路徑

        (3).提供程序功能說明

        (4).提供文件依賴關係

    以上規則的遵循,爲程序的部署安裝提供了極大的便利

 

三、安裝程序的方式

   

    1.通用二進制文件

    2.軟件包管理器,例如rpm

    3.軟件包管理器的前端工具,例如yum

    4.源代碼編譯安

 

四、rpm命令及常用選項

 

rpm

    -i或--install:安裝

    -v:顯示詳細信息;-vv,-vvv,v越多,表示詳細級別越高,越來越詳細

    -h:以井號顯示安裝進度,一個井號表示2%

    -l或--list:

    -d或--docfiles:

  

1.安裝

常用安裝選項組合:rpm -ivh packages_name    #以下的packages_name都表示rpm安裝包

忽略依賴關係安裝:rpm -ivh packages_name --nodeps    #安裝、卸載程序時都可以使用--nodeps忽略依賴關係

測試安裝:rpm -ivh packages_name --test

重新安裝:rpm -ivh packages_name --replacepkgs

有時安裝程序時有警告信息

warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew

此前可能已經有同樣名字的配置文件,文件也是我們需要的,這時這種機制的存在則會創建一個新的配置文件而不覆蓋設定好的配置文件

 

2.卸載rpm -e packages_name

 

卸載時,可能產生警告

warning: /etc/sysconfig/named saved as /etc/sysconfig/named.rpmsave

這是由於我們修改過程序的配置文件,這種機制的存在讓我們卸載程序時保留了我們可能已經設定好的配置文件

 

3.查詢rpm -q packages_name 或者 rpm --quare packages_name

[root@TESTHOST ~]# rpm -q apache
package apache is not installed    #顯示未安裝
[root@TESTHOST ~]# rpm -q bash
bash-4.1.2-15.el6_4.x86_64    #顯示程序版本等信息

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

[root@TESTHOST ~]# rpm -qa | grep "^bas"    #支持grep,但不支持globbing
basesystem-10.0-4.el6.noarch
bash-4.1.2-15.el6_4.x86_64
[root@TESTHOST ~]# rpm -qa | grep "^bin"
binutils-2.20.51.0.2-5.42.el6.x86_64
[root@TESTHOST ~]#

              rpm -qi packages_name    查詢軟件包摘要信息    #此處的i亦可爲--info

[root@TESTHOST ~]# rpm -qi bash
Name        : bash                         Relocations: (not relocatable)
Version     : 4.1.2                             Vendor: CentOS
Release     : 15.el6_4                      Build Date: 2013年07月18日 星期四 21時21分24秒
Install Date: 2015年04月10日 星期五 04時49分29秒      Build Host: c6b10.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: bash-4.1.2-15.el6_4.src.rpm
Size        : 3139291                          License: GPLv3+
Signature   : RSA/SHA1, 2013年07月18日 星期四 21時46分10秒, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.

 

查詢包安裝生成的文件清單:rpm -ql packages_name

查詢某文件是由哪個rpm安裝生成的:rpm -qf /path/to/some_file

查詢包安裝生成的配置文件:rpm -qc packages_name

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

 

-------------------------------------------------------------

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

[root@TESTHOST ~]# rpm -q --scripts bash
postinstall scriptlet (using <lua>):
bashfound = false;
shfound = false;
 
f = io.open("/etc/shells", "r");
if f == nil
then
  f = io.open("/etc/shells", "w");
else
  repeat
    t = f:read();
    if t == "/bin/bash"
    then
      bashfound = true;
    end
    if t == "/bin/sh"
    then
      shfound = true;
    end
  until t == nil;
end
f:close()
 
f = io.open("/etc/shells", "a");
if not bashfound
then
  f:write("/bin/bash\n")
end
if not shfound
then
  f:write("/bin/sh\n")
end
f:close()
postuninstall scriptlet (using /bin/sh):
if [ "$1" = 0 ]; then
    /bin/grep -v '^/bin/bash$' < /etc/shells | \
      /bin/grep -v '^/bin/sh$' > /etc/shells.new
    /bin/mv /etc/shells.new /etc/shells
fi

以上腳本信息中關鍵詞意思如下

preinstall:安裝前腳本

postinstall:安裝後腳本

preuninstall:卸載前腳本

postuninstall:卸載後腳本

-------------------------------------------------------------

查詢尚未安裝的包的相關信息:

rpm -qpi /path/to/rpm_file

 

4.升級

    -U:升級+安裝,常用-Uvh

    -F:升級,常用-Fvh,與Uvh不同的是,如果不存在早期版本,程序將不會安裝

    rpm -Uvh packages_name

    rpm -Fvh packages_name

強行升級、安裝時可加如下選項   

    --force 強行升級

    --nodeps    忽略依賴關係

注意:內核不應該升級,應該儘可能安裝,它允許多版本並存

 

5.校驗rpm -V packages_name    或者--verify

[root@TESTHOST ~]# rpm -V zsh    #程序相關文件未修改時,執行命令後沒有任何提示
[root@TESTHOST ~]# vim /etc/zlogin    #修改文件
[root@TESTHOST ~]# rpm -V zsh
S.5....T.  c /etc/zlogin    #執行命令後,出現相關提示信息,提示程序被改變過

提示信息能提示管理員,程序被改變的一些相關信息

      S file Size differs:文件大小改變  
      M Mode differs (includes permissions and file type):權限改變  
      5 digest (formerly MD5 sum) differs:MD5碼改變  
      D Device major/minor number mismatch:設備的主次號改變  
      L readLink(2) path mismatch:readlink路徑不匹配  
      U User ownership differs:屬主改變  
      G Group ownership differs:屬組改變  
      T mTime differs:最近一次的修改時間改變  
      P caPabilities differ:能力改變

 

6.rpm數據庫重建

    --initdb:新建,舊檔不會被覆蓋

    --rebuilddb:重建,舊檔不會保存    #此選項常用

[root@TESTHOST ~]# rpm --rebuilddb

rpm包的數據庫文件路徑:/var/lib/rpm/

 

五、其他

rpm –K zsh-4.3.10-5.el6.x86_64.rpm    #檢測來源合法和文件完整性    或者使用--checksig

--nodigest    #不檢測完整性

--nosignature    #不檢測合法性

-------------------------------------------------------------

rpm --improt /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6    #導入公共祕鑰,RedHat系列官方公鑰路徑/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

-------------------------------------------------------------

:有時用yum安裝程序時,會產生如下警告

warning: rpmts_HdrFromFdno: Header V3RSA/SHA1 Signature, key ID c105b9de: NOKEY

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

 

解決辦法:

1.添加參數 --nogpgcheck    #如果確認安裝文件無問題,可以忽略檢測來源合法性

2.到yum源網站更新gpg-key後導入,例如

[root@TESTHOST rpm-gpg]# wget http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6

[root@TESTHOST rpm-gpg]# rpm --improt /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章