RPM包管理——運維必備技能之一

軟件運行環境:

API:Application Programming Interface

    POSIX :Portable OS

程序源代碼 –> 預處理 –> 編譯 –> 匯編 –> 鏈接

     靜態編譯:

     共享編譯:.so

ABI:Application Binary Interface

     Windows 與Linux 不兼容

             ELF(Executable and Linkable Format)

             PE(Portable Executable)

     庫級別的虛擬化:

             Linux: WINE

             Windows: Cywin

包管理器:

二進制應用程序的組成部分:

    二進制文件、庫文件、配置文件、幫助文件

程序包管理器:

         debian :deb 文件, dpkg 包管理器

         redhat: rpm 文件, rpm 包管理器

         rpm: Redhat Package Manager

         RPM Package Manager

包命名:

源代碼:name-VERSION.tar.gz|bz2|xz

    VERSION: major.minor.release

rpm包命名方式:

     name-VERSION-release.arch.rpm

     例:bash-4.2.46-19.el7.x86_64.rpm

         VERSION: major.minor.release

         release:release.OS

         常見的arch:

                 x86: i386, i486, i586, i686

                 x86_64: x64, x86_64, amd64

                 powerpc: ppc

                 跟平臺無關:noarch

拆包:主包和支包

主包:Application-VERSION-ARCH.rpm:

支包:

     開發子包:Application-devel-VERSION-ARCH.rpm

     庫文件子包:Application-libs-VERSION-ARHC.rpm

     其它子包:Application-utils-VERSION-ARHC.rpm

依賴關系:包之間可能存在依賴關系,甚至循環依賴

X,Y,Z :3個包

     安裝X————>依賴與Y,Z

     安裝Y————>依賴與A,B,C

     安裝C————>依賴與Y

解決依賴關系包管理工具:

     yum:rpm包管理器的前端工具

     apt-get:deb包管理器前端工具

     zypper: suse上的rpm前端管理工具

     dnf: Fedora 18+ rpm包管理器前端管理工具

庫文件:

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

    ldd /PATH/TO/BINARY_FILE

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

     ldconfig

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

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

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

程序包管理器:

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

1、包文件組成 (每個程序包都單獨實現)

     RPM包內的文件

     RPM的元數據,如名稱,版本,依賴性,描述等

     安裝或卸載時運行的腳本

2、數據庫(公共)

     程序包名稱及版本

     依賴關系

     功能說明

     包安裝后生成的各文件路徑及校驗碼信息

管理程序包的方式:

使用包管理器:rpm

使用前端工具:yum, dnf

獲取程序包的途徑:

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

     CentOS鏡像:

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

     http://mirrors.aliyun.com

     http://mirrors.sohu.com

     http://mirrors.163.com

(2)項目官方站點

     www.apache.com

     www.zabbix.com

(3)第三方組織:

     (a)Fedora-EPEL

          Extra Packages for Enterprise Linux

     (b)Rpmforge:RHEL 推薦,包很全

(c)搜索引擎:

     http://pkgs.org

     http://rpmfind.net

     http://rpm.pbone.net

     https://sourceforge.net

(4)自己制作

注意:網絡上獲取的包檢查其合法性:來源合法性,完整性

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

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

安裝:

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

    rpm -ivh PACKAGE_FILE …

GENERAL OPTINONS:

-v:verbose

-vv:


[install-options]:

-h:以#顯示程序包管理執行進度

– -test:測試安裝,但不真正執行安裝;dry run 模式

– -nodeps:忽略依賴關系

– -replacepkgs | replacefiles:重新安裝,前1個選擇是有重復直接覆蓋包,后1個選項是有重復的文件才覆蓋

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

– -nodigest:不檢查包完整性

注意rpm包可以自帶腳本:共4類:

– -noscipts:不執行程序包腳本片斷

     preinstall:安裝過程前運行的腳本;%pre,- – nopre

     postinstall:安裝過程完成后運行的腳本;%post,- – nopost

     preuninstall:安裝卸載前運行的腳本;%preun,- – nopreun

     postuninstarll:安裝卸載完成后運行的腳本:%postun,- – nopostun

[root@CentOS6 bin]# rpm -ivh /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]

升級:

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

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

-U:安裝有舊版程序包,則“升級”,如果不存在舊版程序包,則“安裝”

-F:安裝有舊版程序包,則“升級”,如果不存在舊版程序包,則什么都不做

      rpm -Uvh PACKAGE_FILE …

     rpm -Fvh PACKAGE_FILE …


[install-options]:

選項信息同-i(安裝)

新選項:

     –oldpackage:降級

     –force:強行升級

注意:

(1)不要對內核做升級操作;Linux 支持多內核版本并存,因此,可以直接安裝新版本內核

(2)如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)

查詢:

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

[select-options]:

PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本

-a:所有包

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

-p rpmfile:針對尚未安裝的程序包文件做查詢操作;

– -whatprovides CAPABILITY :查詢指定的CAPABILITY由哪個包所提供

– -whatrequires CAPABILITY :查詢指定的CAPABILITY被哪個包所依賴

如何恢復數據包中某個文件(不是使用重新安裝的方式):

     rpm2cpio  包文件 | cpio –itv

     預覽包內文件

     rpm2cpio  包文件 | cpio –id “*.conf”

     把包內某個或多個文件單獨拷貝到當前目錄下

[root@CentOS6 bin]# rpm -ql tree   //查詢tree包的文件
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@CentOS6 bin]# rm /usr/bin/tree    //刪除tree包的一個配置文件
rm: remove regular file `/usr/bin/tree'? y
[root@CentOS6 bin]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@CentOS6 bin]# tree     //命令已經無法使用了,但這個時候我又不想安裝這個包,只想安裝這個文件怎么辦?
-bash: tree: command not found
[root@CentOS6 bin]# rpm2cpio /media/cdrom/Packages/tree-1.5.3-3.el6.x86_64.rpm | cpio -itv    //查詢包內文件
-rwxr-xr-x   1 root     root        41136 Jan 14  2015 ./usr/bin/tree
drwxr-xr-x   2 root     root            0 Jan 14  2015 ./usr/share/doc/tree-1.5.3
-rw-r--r--   1 root     root        18009 Aug 13  2004 ./usr/share/doc/tree-1.5.3/LICENSE
-rw-r--r--   1 root     root         4167 Oct 20  2009 ./usr/share/doc/tree-1.5.3/README
-rw-r--r--   1 root     root         3375 Jan 14  2015 ./usr/share/man/man1/tree.1.gz
132 blocks
[root@CentOS6 bin]# rpm2cpio /media/cdrom/Packages/tree-1.5.3-3.el6.x86_64.rpm | cpio -id ./usr/bin/tree    //把包內的tree文件提出到當前目錄
132 blocks
[root@CentOS6 bin]# ls
usr
[root@CentOS6 bin]# ll ./usr/bin/tree
-rwxr-xr-x. 1 root root 41136 Aug 19 16:47 ./usr/bin/tree
[root@CentOS6 bin]# cp ./usr/bin/tree /usr/bin/       //拷貝二進制文件到/usr/bin/目錄下去
[root@CentOS6 bin]# tree     //tree命令可以使用了
.
└── usr
    └── bin
        └── tree
2 directories, 1 file

[query-options]:

–changelog:查詢rpm包的changelog

-c,-configfiles:查詢程序的配置文件

-d,-docfiles:查詢程序的文檔

-i,information:程序包相關信息,版本號,大小,所屬的包組等

-l,- -list:查看指定的程序包安裝后生成的所有文件

– -scripts:程序包自帶的腳本片斷

-R:查詢指定的程序包所依賴的CAPABILITY

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



查詢用法:

-qa,-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE,-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …

[root@CentOS6 bin]# rpm -qa | less
usermode-1.102-3.el6.x86_64
gstreamer-tools-0.10.29-1.el6.x86_64
printer-filters-1.1-4.1.el6.noarch
python-markupsafe-0.9.2-4.el6.x86_64
yajl-1.0.7-3.el6.x86_64
xml-common-0.6.3-33.el6.noarch
kdepimlibs-4.3.4-4.el6.x86_64
portreserve-0.0.4-11.el6.x86_64
control-center-extra-2.28.1-40.el6.x86_64
python-krbV-1.0.90-3.el6.x86_64
xen-licenses-4.4.2-4.el6.x86_64
tzdata-2016c-1.el6.noarch
kpartx-0.4.9-93.el6.x86_64
m17n-db-punjabi-1.5.5-1.1.el6.noarch
......
[root@CentOS6 bin]# rpm -qi tree
Name        : tree                         Relocations: (not relocatable)
Version     : 1.5.3                             Vendor: CentOS
Release     : 3.el6                         Build Date: Wed 14 Jan 2015 08:21:02 PM CST
Install Date: Mon 25 Jul 2016 05:29:20 PM CST      Build Host: c6b9.bsys.dev.centos.org
Group       : Applications/File             Source RPM: tree-1.5.3-3.el6.src.rpm
Size        : 66687                            License: GPLv2+
Signature   : RSA/SHA1, Wed 14 Jan 2015 10:12:21 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://mama.indstate.edu/users/ice/tree/
Summary     : File system tree viewer
Description :
The tree utility recursively displays the contents of directories in a
tree-like format.  Tree is basically a UNIX port of the DOS tree
utility.
[root@CentOS6 bin]# rpm -qf /etc/passwd
setup-2.8.14-20.el6_4.1.noarch
[root@CentOS6 bin]# rpm -qc bash
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc
[root@CentOS6 bin]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@CentOS6 bin]# rpm -qd tree
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@CentOS6 bin]# rpm -qpc /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm
/etc/skel/.zshrc
/etc/zlogin
/etc/zlogout
/etc/zprofile
/etc/zshenv
/etc/zshrc

卸載:

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

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

– -nodeps:忽略依賴性卸載

– -test;測試卸載,是否有依賴性,不是真的卸載

[root@CentOS6 bin]# rpm -e zsh
[root@CentOS6 bin]# rpm -qa | grep zsh   //已經查詢不到包了,說明被卸載了

校驗:

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

[root@CentOS6 bin]# rpm -ql tree
/usr/bin/tree
/usr/share/doc/tree-1.5.3
/usr/share/doc/tree-1.5.3/LICENSE
/usr/share/doc/tree-1.5.3/README
/usr/share/man/man1/tree.1.gz
[root@CentOS6 bin]# echo xx >> /usr/share/man/man1/tree.1.gz
[root@CentOS6 bin]# rpm -V tree    //請對照理解  S  5  T 的信息
.......T.    /usr/bin/tree
S.5....T.  d /usr/share/man/man1/tree.1.gz

包來源合法性驗正及完整性驗正:

     完整性驗正:SHA256

     來源合法性驗正:RSA

公鑰加密:

對稱加密:加密、解密使用同一密鑰;

非對稱加密:密鑰是成對兒的

     public key:公鑰,公開所有人

     secret key:私鑰,不能公開

不導入公鑰如何檢查包簽名和完整性:

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

如何導入所需要公鑰:

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

     CentOS 7 發行版光盤提供: RPM-GPG-KEY-CentOS-7

     rpm -qa gpg-pubkey*


[root@CentOS6 ~]# rpm -K /media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm 
/media/cdrom/Packages/zsh-4.3.11-4.el6.centos.2.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

數據庫重建:

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

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

獲取幫助:(重建數據庫)

     centos6:man rpm

     centos7:man rpmdb

rpm {–initdb|–rebuilddb}

–initdb初始化:如果事先不存在數據庫,則新建之,否則,不執行任何操作

–rebuilddb :重建,無論當前存在與否,直接重新創建數據庫


[root@CentOS6 bin]# cd /var/lib/rpm
[root@CentOS6 rpm]# pwd
/var/lib/rpm
[root@CentOS6 rpm]# ls   //rpm的數據庫
Basenames     __db.002  Dirnames     Installtid    Packages        Pubkeys         Sha1header
Conflictname  __db.003  Filedigests  Name          Providename     Requirename     Sigmd5
__db.001      __db.004  Group        Obsoletename  Provideversion  Requireversion  Triggername
[root@CentOS6 rpm]# rpm -q bash     //可以查詢包信息
bash-4.1.2-40.el6.x86_64
[root@CentOS6 rpm]# rm -f *     //刪除數據庫內所有文件
[root@CentOS6 rpm]# ls
[root@CentOS6 rpm]# rpm -q bash    //無法查詢包信息
package bash is not installed
[root@CentOS6 rpm]# rpm --initdb //新間數據庫
[root@CentOS6 rpm]# ls
__db.001  __db.002  __db.003  __db.004  Name  Packages
[root@CentOS6 rpm]# rpm -q bash     //重新建立了數據庫依舊無法查詢,上述操作請慎重
package bash is not installed


·

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

(0)
megedugaomegedugao
上一篇 2016-08-21 20:47
下一篇 2016-08-21 20:47

相關推薦

  • Linux系統啟動流程初識

    centos系統啟動流程 本篇僅僅講解centos5和6 centos7并不適用 Linux系統的組成部分:內核+根文件系統 內核功能: 進程管理 內存管理 網絡管理 驅動程序 文件系統 安全功能 有以下目錄結構的文件系統可以被識別為根文件系統,但根文件系統本身不存在 rootfs:/bin/ /sbin /etc/ /sys/…

    Linux干貨 2016-09-11
  • 馬哥教育網絡19期+第四周練習博客

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。  cp /etc/skel /home/tuser1  chmod -R  700 /home/tuser1 2、編輯/etc/group文件,…

    Linux干貨 2016-06-19
  • Linux正則表達式及文件查找

    1、顯示當前系統上root、fedora或者user1用戶的默認shell. #? ?grep? -E? ?“^(root|fedora|user1)”? ?/etc/passwd | cut -d: -f1,7     2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,…

    2017-10-22
  • Linux用戶與組之權限管理

    權限(rwx、sst、umask) chown chmod ACL(見下篇) 試驗環境:CentOS 7.2 與CentOS 6.8,具體會在應用場景明確指出 權限 Linux系統對用戶與組的管理,其具體操作手段就是對于權限的分配,而常見的權限分配工具有 rwx, sst, umask, ACL. 跟用戶與組有uid和gid一樣,權限也有…

    Linux干貨 2016-08-07
  • Linux的用戶組和權限(一)

    導讀:本章主要內容如下       1.解釋Linux的安全模型      2.解釋用戶賬號和組群賬號的目的      3.用戶和組管理命令      4.理解并設置文件權限 &n…

    Linux干貨 2016-08-04
  • 文件查找locate 和 find

    大綱 一、前言 二、locate 三、find 一、前言 在windows下,我們查找文件,可以在搜索里面,輸入文件名或通配符就可以進行搜索。在Linux下,要查找文件可以找locate 或 find命令進行查找,而且這些命令還有其他特別的功能。 二、locate 特點:此命令是非實時查找命令,依賴于索引,因此搜索速度快。但是索引的構建是當系統空閑時由系統自…

    Linux干貨 2015-05-11
欧美性久久久久