Linux對包管理闡述
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對包管理闡述