rpm程序包管理

程序的組成的部分:

編譯之前:源代碼

編譯之後:

二進制程序

庫文件

配置文件

幫助文件(手冊、文檔)

 

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

庫文件:/lib, /lib64, /usr/lib,/usr/lib64, /usr/local/lib, /usr/local/lib64

配置文件:/etc, /etc/DIR,/usr/local/{etc,conf}

幫助文件:/usr/share/man,/usr/share/doc, /usr/local/share/man

注意:有些特殊的應用程序可能會將可執行文件放置於libexec目錄;

 

常見的包管理器:

發行商

軟件管理機制

使用命令

在線升級機制(命令)

Red  Hat/Fedora/CentOS/SuSE

RPM

rpm

YUM(yum)

Debian/Ubuntu

DRKG

dpkg

APT(apt-get)

 

 

RPM是什麼?

 

RPM就是將你要安裝的軟件先編譯過,並且打包成爲RPM機制的安裝包,通過安裝好的軟件裏頭默認的數據庫(/var/lib/rpm)記錄這個軟件要安裝時必須具有的依賴屬性軟件,當安裝時,RPM會先去查詢數據庫(/var/lib/rpm)中的依賴關係是否滿足,若滿足則安裝,若不滿足,怎不予安裝。

 

RPM包的命名格式:

appname-VERSION-RELEASE.ARCH.rpm

VERSION:

major: 主版本號

minor: 次版本號

release: 發行號

 

RELEASE: 包自身的修訂號;有時候還會包含適用於的OS信息;比如bash-4.3.2-2.centos6.x86_64.rpm中的2.centos6

ARCH: 適用的平臺

x86:i386, i486, i586, i686

x86_64:x86_64, amd64

powerpc:ppc

noarch: 跟平臺無關;

 

分包機制:

核心包,主包:命名與源項目名稱一致;

bash-4.3.2-2.centos6.x86_64.rpm

子包(支包):命令爲源項目名稱後附加支包中的文件提供的功能組成

bash-devel-4.3.2-2.centos6.x86_64.rpm

 

 

python-2.6.6-52.el6.x86_64.rpm

軟件名-主版本號.次版本號.發行號-發佈次數.適用平臺.rpm

 

 

獲取程序包的途徑:

官方站點,鏡像:

mirrors.sohu.com

mirrors.163.com

mirrors.aliyun.com

 

rpm命令用法:

 

安裝:

rpm -ivh 包名

-i  安裝

-v 查看詳細安裝信息

-h 以安裝信息欄顯示安裝信息

例:rpm -ivh zsh

[root@localhost Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

例:一次安裝多個

[root@localhost Packages]# rpm -ivh php-common-5.3.3-38.el6.x86_64.rpm php-cli-5.3.3-38.el6.x86_64.rpm php-5.3.3-38.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:php-common             ########################################### [ 33%]
   2:php-cli                ########################################### [ 67%]
   3:php                    ########################################### [100%]

例:從網絡上直接安裝 rpm -ivh ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.e16.x86_64.rpm

 

--nodeps : 忽略依賴關係安裝,可能會導致該軟件無法正常使用

--replacefiles: 覆蓋安裝,覆蓋安裝的文件無法復原的

--repiacepkgs:重新安裝某個已經安裝的軟件

--force:--replacefiles--repalcepkgs 的綜合

--test:測試一下該軟件是否能安裝在當前環境下,可以找出依賴關係

例:

[root@localhost ~]# rpm -ivh ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.el6.x86_64.rpm --test
Retrieving ftp://192.168.1.104/pub/zsh/zsh-4.3.10-9.el6.x86_64.rpm
Preparing...                ########################################### [100%]

 

升級與降級:

-Uvh

後面接的軟件即使沒有安裝過,直接安裝;安裝過舊版,直接更新至新版

-Fvh

後面接的軟件沒有安裝過,就不安裝;安裝過舊版,纔會升級至新版

--oldpackage

降級到舊版本

注意:一定不要對內核執行升級;Linux允許多內核共存,所以,可以直接安裝多個不同版本內核;

 

注意:如果程序包的配置文件安裝後曾被修改,升級時,新版本的文件不會覆蓋老版本的配置文件,而把新版本的配置文件重命名(加後綴.rpmnew)後保存;

 

查詢:

RPM在查詢時,其實就是在查詢/var/lib/rpm/這個目錄下的數據庫文件

 

rpm -q 軟件名

查詢指定包是否已經安裝

rpm -q zsh

rpm -qa

查詢已經安裝的所有包

rpm -qa  |grep "^z"

rpm -qi 包名

查詢指定包的說明信息


rpm -ql 包名

查詢指定包安裝後生成的文件列表


rpm -qf 文件路徑

查詢指定文件是有哪個rpm包安裝生成的


rpm -qc 包名

查詢指定包的配置文件


rpm -qd 包名

查詢指定包安裝的幫助文件


rpm -q --scirpts 包名

查詢指定包中包含的腳本


rpm -qpi 包名

未安裝時查詢安裝後會生成的文件


rpm -qR 軟件名

查詢指定包還要什麼文件的幫忙

rpm -qR php

 

腳本有四類:

preinstall: 安裝過程開始之前執行的腳本;

postinstall: 安裝過程完成之後執行的腳本;

preuninstall: 卸載開始之前執行的腳本

postuninstall: 卸載過程完成之後執行的腳本;

校驗:

rpm -V 已安裝的軟件名

查看該軟件所含的文件是否改動過

rpm -Va

列出當前系統上所有可能被改變的文件

rpm -Vf 在系統上的某個文件

列出文件是否被改動過

rpm -Vf /etc/crontab

[root@localhost ~]# rpm -Vf /etc/crontab
S.5....T.  c /etc/crontab

 

常見用法:rpm -V PACKAGE_NAME

 

        S (file Size differs)

 文件的容量大小是否被改變

        M (Mode differs)

文件的類型或文件的屬性(rwx)是否被改變了

        5 (MD5 sum differs)

MD5這一種指紋碼的內容是否已經不同

        D (Device major/minor number mis-match)

設備的主/次代碼已經改變

        L (readLink(2) path mis-match)

Link路徑已經被改變

        U (User ownership differs)

文件的屬主已經改變

        G (Group ownership differs)

文件的屬組已經改變

        T (mTime differs)

文件的創建時間已經改變

 

c

配置文件(config file)

d

文檔文件(documentation)

l

授權文件(license file)

r

自述文件(read me)

 

程序包的合法性驗正:

來源合法:

由我們信任的製作者提供

依賴於:製作者的數字簽名;簽名是作者使用自己的私鑰加密程序包的特性碼進行的;

內容合法:

包未被二次修改;完整性校驗成功

依賴於:製作者提供的程序特徵碼;

驗正方式:安裝者用同樣的特徵碼提取算法提取程序包的特徵碼,並與原作者提供的相比較;

 

驗正其光盤中程序包的來源及完整性:

rpm--import /path/to/RPM-GPG-KEY-FILE

例如:# rpm --import RPM-GPG-KEY-CentOS-6

 

CentOS的數字證書位於:/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

 

驗正:rpm {-K|--checksig} PACKAGE_FILE

--nosignature: 不檢查來源合法性

--nodigest: 不檢查完整性

 

卸載:

rpm -e 軟件名

rpm -e zsh

 

注意:卸載要從最上層向下卸載

 

重建數據庫:

數據庫在/var/lib/rpm/目錄下

 

rpm --rebuildbd   無論當前數據存在與否,都會直接重建此庫

 

rpm --initdb: 初始化數據庫,即數據庫完全不存在時,可新建之


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