1. 程式人生 > >Linux對包管理闡述

Linux對包管理闡述

ant 公測 否則 ida eas ability 過程 sel 詳細

  Centos/Redhat/Fedora的軟件包,都是rpm後綴的文件。包管理器rpm(Redhat packages manager)

   linux的哲學思想是簡單命令解決復雜任務,因此每個軟件的功能較單一,所以各種包之間有著復雜的依賴關系,為了解決這種可以使用前端工具:

前端管理工具,自動解決依賴關系。

01、rpm包命名格式

二進制格式  name-VERSION.tar.gz

VERSION的格式: major.minor.release.os.arch

arch:i386,x64(amd64),ppc(power pc),noarch(java編寫的,可以跨平臺)

os:e17(紅帽七) os:el6(紅帽6)

eg:

主版本號為3,次版本號為0,發行號為2,編譯次數為1,系統為centos7,平臺為x64的rpm包

redis-3.0.2-1.centos7.x64.rpm

02、版本類型

fc final candidate 最終版

alpha 內測版

beta 公測版

rc 發布候選版

release 正式版


程序包管理器:

源代碼---> 目標二進制格式----> 組織成為一個或有限幾個“包”文件,實現軟件的安裝,升級,卸載,查詢,校驗

後端管理工具:

debian:dpt,dpkg,".deb"

redhat: rpm,".rpm" yum

S.u.S.E:rpm ,".rpm" 源於rpm但是組織結構不同,並不能和redhat兼容

Ubantu:是debian的分支,包管理機制一樣

Gentoo;parts

Archlinux:linux界的新貴(極簡哲學思想)


yum:rhel系列系統上的rpm包管理器的前端工具

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

zypper:suse的rpm包管理工具

dnf:Fedora20+系統上的rpm包管理器的前端工具,功能更強大,未來centos中也可能使用

03、常見的Mirrors

程序包組成包管理器的功能,將編譯好的應用程序的各組成文件打包成一個或幾個程序包文件

1.系統發行版的光盤或官方的文件服務器(或鏡像站點)

http://mirrors.aliyun.com

http://mirrors.sohu.com

EPEL(較為可靠的組織):阿裏雲等中的epel目錄

2.對rpm單個包下載

http://pkgs.org

http://rpm.pbone.net

http://rpmfind.net

04、RPM參數含義

CentOS系統上的rpm命令管理程序包,安裝,升級,卸載,查詢和校驗,數據庫維護

rpm命令: rpm [OPTIONS] [PACKAGE_FILE]

安裝: -i,--install

升級:-U,--updata,-F,freshen

卸載:-e,--erase

查詢:-q,--query

校驗: -V,--verify

數據庫維護:--builddb,--initdb

1.安裝


rpm -ivh PACKAGE_FILE

通用選項:

-v:verbose 顯示詳細信息,

-vv:更詳細的輸出

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

[install-options]:

-h:hash marks 輸出進度條,每個#表示2%的進度

--test:僅是測試,並不真的安裝

--nodeps:忽略依賴關系,可以讓你安裝,但是不一定可以用。你建議使用

--force 強制安裝

--replacepkgs;重新安裝

如果自己不小心錯誤修改了某些配置文件,想要安裝的初始文件,可以通過這個命令但是要把改變過的文件刪除,否則重新安裝不會替換它

--nodigest:不檢查程序包的完整性

--nosignature:不檢查包簽名信息,不檢查來源合法性

註意: rpm可以自帶腳本;

四類:--noscripts,不執行任何腳本

preinstall:安裝過程開始之前運行的腳本,%pre

postinstall:安裝過程完成之後運行的腳本,%post

peruninstall:卸載過程真正開始執行之前運行的腳本,

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

2.升級:


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

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

-U:升級或安裝,有則升級,無則安裝

-F : 升級,如果事先沒有也不會安裝

--oldpackage:降級;

--force:強制升級

常見用法:

rpm -Uvh PACKAGE_FILE....

rpm -Fvh PACKAGE_FILE

註意:

1.不要對內核做升級操作;linux支持多內核版本共存,因此,直接安裝新版本內核

2.如果某源程序的配置文件安裝後被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名

(FILENAME.rpmnew)後提供(刪除舊的,新的自動生成)

3.卸載:

rpm {-e|--erase} [--allmatchs][--nodeps][--noscripts][--test]PACKAGE_NAME

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

--nodeps: 忽略依賴關系,即使該文件被依賴,也會卸載

--test: 僅是測試,並不真的卸載

4.查詢:

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

[select-options]:

-a,-all:查詢所有已經安裝的包

-f FILE:查詢指定的文件由那個程序安裝生成

-p,--package PACKAGE_FILE:用於實現對未安裝的程序包執行查詢操作

eg: rpm -qpi PACKAGE.NAME: 不安裝包查看包的具體信息

rpm -qlp PACKAGE.NAME:不安裝包直接查看生成的文件

rpm -qcp PACKAGE.NAME:不安裝包查看包會生成的配置文件

--whatprovides CAPABILITY:查看指定的CAPABLITY由哪個程序包提供

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

[query-options]

--changlog;查詢rpm包的changlog;

-l,--list:列出該安裝包生成的文件列表

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

-c,--configure:查詢指定的程序包提供的配置文件

-d,--docfiles:查詢指定的程序包提供的文檔

--provides:列出指定的程序包提供的所有的CAPABLITY,提供了某個文件也是能力

-R,--requires:查詢指定包的依賴關系

--scripts:查看程序包自帶的腳本程序

eg:

[[email protected] ~]# rpm -q --provides bash bash提供的能力

config(bash) = 4.1.2-40.el6

bash = 4.1.2-40.el6

bash(x86-64) = 4.1.2-40.el6

[[email protected] ~]# rpm -q --whatprovides ‘config(bash)‘ ;‘config(bash)‘ 這個能力是誰提供的

bash-4.1.2-40.el6.x86_64

[[email protected] ~]# rpm -q --whatrequires ‘config(bash)‘ ;‘config(bash)‘ 這個能力被誰依賴

bash-4.1.2-40.el6.x86_64

05、RPM常見用法

rpm -qi PACKAGE.NAME: 查詢安裝包的具體信息

rpm -ql PACKAGE.NAME:列出安裝包生成的文件

rpm -qf FILE:查詢某個文件是由那個安裝包提供的

eg:[[email protected] ~]# rpm -qf /usr/share/man/man1/wait.1.gz

bash-4.1.2-40.el6.x86_64

rpm -qc PACKAGE.NAME:查看安裝包生成的配置文件

rpm -qa :已經安裝的所有包

不安裝包直接查看:

eg: rpm -qpi PACKAGE.NAME: 不安裝包查看包的具體信息

rpm -qlp PACKAGE.NAME:不安裝包直接查看生成的文件

rpm -qcp PACKAGE.NAME:不安裝包查看包會生成的配置文件

06、RPM效驗

校驗務必保證公鑰是安全的,合法的

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

eg: rpm -Va

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

eg:

[[email protected] ~]# rpm -V zsh

S.5....T. /usr/share/zsh/4.3.11/scripts/newuser 這裏對應的就是上面的信息,.表示沒有變化

包來源合法性驗證和完整性驗證:

合法性:一個包制作者利用單向加密數據,然後利用私鑰對數據的MD5加密,這樣大家獲得公鑰後就可以驗證這個包的來源了

完整性:自己利用單向加密方法計算數據的MD5,然後比對md5碼比對,如果一致,說明數據內容沒有被修改。

[[email protected] ~]# 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

[[email protected] ~]# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6

查看導入的秘鑰文件

[[email protected] ~]# rpm -qa gpg-pubkey*

gpg-pubkey-c105b9de-4e0fd3a3

刪除導入的文件:

[[email protected] ~]# rpm -e gpg-pubkey-c105b9de-4e0fd3a3

數據庫的重建:

rpm {--initdb|--rebuilddb}[--depath DIRECTORY][--root DIRECTORY]

--initdb:初始化數據庫,當前無任何數據庫可實驗化創建一個新的;當前有時不執行任何操作,不要輕易操作

--rebuilddb:重新構建,讀取當前系統上所有已經安裝過的程序包進行重新創建

--depath:指定數據庫的路徑

--root:指定根的路徑

Linux對包管理闡述