RPM包管理

程序以源代碼方式提供:

需要編譯成特有的格式:二進制的文件纔可以使用。

部分程序還有依賴關係。

程序的組成部分:

編譯前:源代碼。

編譯後:(應用程序的組成部分)

二進制程序

庫文件(項目裏面共享的代碼模塊或研發接口)

配置文件(命令行選項)

幫助文件(手冊或文檔)

位置:

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

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

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

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


特殊應用程序可執行位置於libexec目錄:

程序包管理器:

應用程序打包:有特定格式。對兼容格式程序包管理。

程序包:

源代碼的壓縮包(壓縮比依此大):appname-VERSION.tar.gz,appname-VERSINON.tar.bz2,appname-VERSION.tar.xz

常見的包管理器:

.deb :Debian

.rpm :Red hat Package Manager(RPM is Package Manager)

rpm 包命名格式:

appname-VERSION-RELEASE.APCH.rpm

VERSION:

major :主版本號

minor :次版本號

release:發行號

RELEASE:包自身修訂號(適用於的OS信息)

ARCH:適用的平臺

x86:i386,i486,i686

x86_64:amd64,x86_64

powerpc:ppc

noarch :跟平臺無關

場景:某程序30種功能,10種常用,其餘不常用。

解決思路:

分包機制。

核心包:主包:命名於源項目名稱一致

例如:

子包(支包):源項目名後附加描述功能。

rpm 是 Hed Hat的核心內容。其實:安裝過程就是調用並安裝這些程序包的過程。


rpm命令的作用:RPM Package Manager 對 linux 系統上的rpm程序包操作。

包括;安裝,卸載,升級,查詢,校驗等。

先查找rpm:

使用光盤鏡像:

掛載光盤:mkdir /media/cdrom(創建mount-point)

[root@172 cdrom]# mount -o ro -t iso9660 /dev/sr0 /media/cdrom/

[root@172 /]# mount  (檢驗是否掛載完成)

/dev/sr0 on /media/cdrom type iso9660 (ro)

安裝準備:查看掛載光盤裏的rpm

[root@172 /]# cd /media/cdrom/

[root@172 cdrom]# ls

CentOS_BuildTag  RELEASE-NOTES-en-US.html

EFI              repodata

EULA             RPM-GPG-KEY-CentOS-6

GPL              RPM-GPG-KEY-CentOS-Debug-6

p_w_picpaths           RPM-GPG-KEY-CentOS-Security-6

isolinux         RPM-GPG-KEY-CentOS-Testing-6

Packages         TRANS.TBL

[root@172 cdrom]# cd Packages/

[root@172 Packages]# ls

顯示一堆的rpm包,這裏以zsh-4.3.10-7.el6.x86_64.rpm爲例:

安裝:

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


還有就是:rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...(升級或安裝)

例子:(如安裝過。可使用 rpm -e PACKAGE_NAME卸載)

[root@172 Packages]# rpm -U -v zsh-4.3.10-7.el6.x86_64.rpm 

warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing packages for installation...

zsh-4.3.10-7.el6


[root@172 Packages]# rpm -i zsh-4.3.10-7.el6.x86_64.rpm(安裝)

[root@172 Packages]# which zsh (測試安裝與否)

/bin/zsh

常見選項:

-v 顯示安裝過程的詳情(v可以最多連用3個 例如:-ivvvh  v的次數多顯示過程越仔細。)

-h 以#開頭表示安裝進度

例子:安裝組合命令 -ivh

[root@172 Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 

warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...             ########################################### [100%]

  1:zsh                    ########################################### [100%]

--test 測試安裝,並非實際安裝   (主要用途報告依賴關係及衝突信息)

[root@172 Packages]# rpm -ivh --test zsh-4.3.10-7.el6.x86_64.rpm 

warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...                ########################################### [100%]

[root@172 Packages]# which zsh

/usr/bin/which: no zsh in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)


安裝前測試(顯示)依賴關係:

[root@172 Packages]# rpm -ivh --test php-5.3.3-38.el6.x86_64.rpm 

warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

error: Failed dependencies:

php-cli(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64

php-common(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64

程序包之間的依賴關係:是最大的安裝難題。

由linux思想決定:衆多單一小程序,程序間存在相關性。

兩個程序間循環依賴的 。需要兩個程序一同安裝。


忽略依賴關係:有可能運行失敗。(如某些需要依賴文檔,可以忽略,只會降低用戶體驗不影響使用)


--nodeps :忽略依賴關係


root@172 Packages]# rpm -ivh --test --nodeps php-5.3.3-38.el6.x86_64.rpm 

warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...                ########################################### [100%]


覆蓋安裝: 重新安裝並覆蓋原有文件。(會破壞修改的配置文件)


--replacepkgs


package zsh-4.3.10-7.el6.x86_64 is already installed(確認程序已經安裝,下面覆蓋)

[root@172 Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm 

warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY

Preparing...                ########################################### [100%]

  1:zsh                    ########################################### [100%]


強制安裝(導致衝突時。或級別改變時,明確要安裝才用)

--force


改變目錄(允許改變路徑的包纔有此功能)

--relocate

雜項:

--replacefiles(安裝時只替換指定文件)

--oldpackage(程序包降級)後面跟低版本文件

--nopre(安裝前腳本不執行)

--nopost(安裝後腳本不執行)

--nopreun(卸載前腳本不執行)

--nopostun(卸載後腳本不執行)


升級:(操作和安裝相似)(沒有下載成功軟件。在yum完後在不上這個試驗過程)

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...(升級或安裝)

rpm {-F|--freshen} [install-options] PACKAGE_FILE ...(單純升級) 

常用組合:-Uvh   -Fvh    

支持:--test  --nodeps    --foce    --oldpackage


&& 不要對內核執行升級。(linux 允許多內核共存)

方法是:裝多個版本內核,啓動時要選擇需要的。&&

&&程序包的配置文件被修改,升級時:新版本的配置文件不會覆蓋老版本的文件。而是把新版本文件重命名後保存(.rpmnew)後綴名。

卸載:

移除已經安裝的工具包

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


--allmatches (如果一個程序安裝多個版本,一次全卸載)

--nodeps (如果一個程序包依賴,忽略依賴,卸載。)

(--test   | dry-run 模式)

卸載時:改變的配置文件會被保存。(以zsh爲例子:zshrc.rpmsave)

查詢:

是否安裝包及包的詳細信息。

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


[query-options]:

1.查詢某包的簡要信息  -i

[root@172 Packages]# rpm -qi zsh

Name        : zsh                          Relocations: (not relocatable)

Version     : 4.3.10                            Vendor: CentOS

Release     : 7.el6                         Build Date: Mon 25 Nov 2013 01:40:59 AM CST

Install Date: Wed 08 Apr 2015 09:36:26 AM CST      Build Host: c6b9.bsys.dev.centos.org

Group       : System Environment/Shells     Source RPM: zsh-4.3.10-7.el6.src.rpm

Size        : 5009102                          License: BSD

Signature   : RSA/SHA1, Mon 25 Nov 2013 03:33:46 AM CST, Key ID 0946fca2c105b9de

Packager    : CentOS BuildSystem <http://bugs.centos.org>

URL         : http://zsh.sunsite.dk/

Summary     : A powerful interactive shell

Description :

The zsh shell is a command interpreter usable as an interactive login

shell and as a shell script command processor.  Zsh resembles the ksh

shell (the Korn shell), but includes many enhancements.  Zsh supports

command line editing, built-in spelling correction, programmable

command completion, shell functions (with autoloading), a history

mechanism, and more.

2.查詢某包安裝生成的文件列表 -l

[root@172 Packages]# rpm -ql php

/etc/httpd/conf.d/php.conf

/usr/lib64/httpd/modules/libphp5.so

/var/lib/php/session

/var/www/icons/php.gif

3.查詢某包安裝完成後生成的配置文件 -c

[root@172 Packages]# rpm -qc zsh

/etc/skel/.zshrc

/etc/zlogin

/etc/zlogout

/etc/zprofile

/etc/zshenv

/etc/zshrc

4.查詢安裝生成的幫助文件(文檔) -d (rpm -qd RPM_NAME)

5.查看某包製作時隨版本變化的changelong信息

--changelog(rpm -q --changelog php)

6.查詢某包提供的capabilities:

rpm -q --provides php

7.查詢某包依賴的capabilities

--requires

8.查詢某包卸載和安裝時執行的腳本

rpm -q --scripts zsh

腳本分四類

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

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

preuninstall:卸載過程開始前執行腳本

postuninstall:卸載過程執行完成腳本


查詢所有的安裝包(-a)

(rpm -qa |wc -l)

可以使用glob 例如:顯示所有安裝的PHP的包

[root@172 Packages]# rpm -qa |grep "php.*"

php-common-5.3.3-38.el6.x86_64

php-cli-5.3.3-38.el6.x86_64

php-5.3.3-38.el6.x86_64


查詢某文件是由那個包安裝生成。(-f)

[root@172 Packages]# rpm -qf /etc/zshrc

zsh-4.3.10-7.el6.x86_64


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

可接[query-options]的所有選項

注意的是 後面查詢的是:PRM_FILE

校驗:

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


[root@172 Packages]# rpm -V zsh

S.5....T.  c /etc/zshrc


顯示改變後的屬性

  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


程序包合法性認證:

來源合法

由信任的製作者提供

依賴於:製作者的數字簽名(非對稱加密算法)

簽名是作者使用自己的私鑰加密程序包的特徵碼進行的

內容合法

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

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

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


[root@172 cdrom]# rpm --import RPM-GPG-KEY-CentOS-6(導入公鑰)

[root@172 cdrom]# cd Packages/

[root@172 Packages]# rpm -K zsh-4.3.10-7.el6.x86_64.rpm 

zsh-4.3.10-7.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK


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

--nodigest: 不檢查完整性

rpm 管理器數據庫: /var/lib/rpm

重建數據庫:

--initdb  初始化數據庫(數據庫完全不存在可以新建)

--rebuliddb 重建數據庫(無論數據存在與否)

















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