Linux程序包管理:node
包管理器功能:打包,包管理(安裝,升級,卸載,查詢,校驗)python
目前Linux中最多見有兩種經常使用工具linux
deb:debian Linux使用 包括ubuntu
git
rpm:Redhat Package Manager ,Centos等在使用數據庫
程序包的組成:ubuntu
二進制程序:/bin, /sbin, /usr/bin, /usr/sbincentos
庫文件: /lib64, /usr/64tomcat
配置文件:/etc安全
幫助文件:manual, infobash
包管理器:
打包:將源文件,一個一個單一的歸檔文件中
安裝:將文件釋放到相應路徑下
卸載:收集全部相關文件刪除
升級:更新相關文件
查詢:查詢程序包相關信息
校驗:程序包的來源合法性,完整性
rpm數據庫/var/lib/rpm
rpm經過數據庫記錄rpm文件的相關參數,用於軟件的升級,刪除,查詢和驗證;若數據庫損壞,可經過命令rpm --rebuilddb 重建數據庫
rpm包:
rpm打包:打包rpmbuild工具 基於specs文件按照各類規則完成打包。
分包機制:一個程序包含各類功能,其中可能只有幾種功能經常使用,幾種功能偶爾用,幾種功能不多用,將程序功能分開打包,分爲核心包和支包。
核心包:software-Version
支包:software-devel-Version
rpm包命名機制:
name-Version-Release.ARCH.rpm
5個字段
name:包名
Version:版本信息
major.minor 主版本號.次版本號
Release:發佈版本次數
ARCH:適合的硬件平臺 i386, i586, i686, x86_64
包與包之間:有可能存在依賴關係 例如安裝A以前須要先安裝B,安裝B以前須要先安裝C等等。rpm數據庫:/var/lib/rpm
記錄包名,安裝生成文件,校驗信息,依賴關係等等。
如何獲取rpm包
發行版提供的程序包,在光盤中通常在Packages目錄中
fedora-EPEL ,組織收入rpm包,正式,權威,安全
項目的官方站點, 好比tomcat,SVN官方站點
搜索引擎:第三方提供,注意安全問題
rpm命令實現程序包管理
安裝
rpm {-i|--install} [install-options] PACKAGE_FILE ...
-i :install
-v:查看詳細的安裝信息;-vv,-vvv更加詳細的安裝信息
-h:顯示安裝進度
install-options [--allfiles] [--badreloc] [--excludepath OLDPATH] [--excludedocs] [--force] [-h,--hash] [--ignoresize] [--ignorearch] [--ignoreos] [--includedocs] [--justdb] [--nocollections] [--nodeps] [--nodigest] [--nosignature] [--noorder] [--noscripts] [--notriggers] [--oldpackage] [--percent] [--prefix NEWPATH] [--relocate OLDPATH=NEWPATH] [--replacefiles] [--replacepkgs] [--test]
--nodeps:忽略依賴關係,強制安裝
--replacefiles:當某程序已經安裝了,使用該命令直接覆蓋安裝
--replacepkgs:從新安裝某個軟件
--test:測試軟件是否能夠安裝到系統中
示例:
#安裝一個軟件 [root@localhost Packages]# rpm -ivh NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:NetworkManager-adsl-1:1.0.0-14.gi################################# [100%] #安裝openstack 存在依賴關係,不能安裝 [root@localhost packages]# rpm -ivh openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY error: Failed dependencies: openstack-ceilometer-common = 2014.2.2-1.fc22 is needed by openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch python-ceilometerclient is needed by openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch # #使用--nodeps選項 忽略依賴關係,能夠安裝,可是不能使用 [root@localhost packages]# rpm -ivh openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm --nodeps warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:openstack-ceilometer-alarm-2014.2################################# [100%] #同時安裝多個軟件 [root@localhost packages]# rpm -ivh 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm --nodeps warning: 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:openstack-ceilometer-alarm-2014.2################################# [ 50%] 2:2048-cli-0.9-4.git20141214.723738################################# [100%] #經過網絡安裝 [root@localhost packages]# rpm -ivh ftp://rpmfind.net/linux/centos/5.11/os/x86_64/CentOS/centos-release-notes-5.11-0.x86_64.rpm Retrieving ftp://rpmfind.net/linux/centos/5.11/os/x86_64/CentOS/centos-release-notes-5.11-0.x86_64.rpm warning: /var/tmp/rpm-tmp.he2qSD: Header V3 DSA/SHA1 Signature, key ID e8562897: NOKEY Preparing... ################################# [100%] Updating / installing... 1:centos-release-notes-5.11-0 ################################# [100%]
升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-Uvh:若是安裝過舊版本程序包,則更新至新版本;若是沒有,則直接安裝
-Fvh:若是安裝過舊版本程序包,則更新至新版本;若是沒有,則不安裝
此處選擇[install-options] 同安裝時的選項
--oldpackage:對程序進行降級安裝
查詢
rpm {-q|--query} [select-options] [query-options]
-qa:查詢本機已經安裝的全部軟件
-q :只查詢指定軟件是否安裝
-qi : 查詢指定軟件的詳細信息,開發商,版本等
-ql:查詢軟件安裝生成的全部文件列表
-qc:查詢指定程序包安裝生成的配置文件
-q --scripts:查詢程序包相關的腳步
preinstall:安裝前腳本
postinstal:安裝後腳本
preuninstall:卸載前腳本
postuninstall:卸載後腳本
-qp[icdl] :查詢未安裝軟件的信息,參數做用和上面同樣
示例:
#確認軟件是否安裝成功 [root@localhost Packages]# rpm -q NetworkManager-adsl NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64 #查詢已安裝軟件的詳細信息 [root@localhost Packages]# rpm -qi NetworkManager-adsl Name : NetworkManager-adsl Epoch : 1 Version : 1.0.0 Release : 14.git20150121.b4ea599c.el7 Architecture: x86_64 Install Date: Wed 16 Sep 2015 06:24:35 PM CST Group : System Environment/Base Size : 28480 License : GPLv2+ Signature : RSA/SHA256, Sat 14 Mar 2015 04:19:28 PM CST, Key ID 24c6a8a7f4a80eb5 Source RPM : NetworkManager-1.0.0-14.git20150121.b4ea599c.el7.src.rpm Build Date : Fri 06 Mar 2015 12:19:16 PM CST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://www.gnome.org/projects/NetworkManager/ Summary : ADSL device plugin for NetworkManager Description : This package contains NetworkManager support for ADSL devices. #查詢安裝相關腳本 [root@localhost Packages]# rpm -q --scripts zlib postinstall program: /sbin/ldconfig postuninstall program: /sbin/ldconfig
卸載
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
[--notriggers] [--test] PACKAGE_NAME ...
示例
[root@localhost packages]# rpm -ivh 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm warning: 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:2048-cli-0.9-4.git20141214.723738################################# [100%] #卸載軟件 Package_name 軟件名 [root@localhost packages]# rpm -e 2048-cli [root@localhost packages]# rpm -q 2048-cli package 2048-cli is not installed
校驗
rpm {-V|--verify} [select-options] [verify-options]
-V:後面加軟件名,若該軟件中文件被修改了,就會被列出
-Va:列出系統上全部被改動過的文件
-Vf:勒出某個文件是否被改動過
S file Size differs 文件大小被修改
M Mode differs 權限和文件類型被修改
5 digest (formerly MD5 sum) differs MD5內容發生變化
D Device major/minor number mismatch 設備的主/次代碼已經改變
L readLink(2) path mismatch Link路徑發生變化
U User ownership differs 文件屬主被修改
G Group ownership differs 文件屬組被修改
T mTime differs 文件建立時間被修改
P caPabilities differ 依賴關係發生改變
示例
#查詢/etc/fstab的變化 [root@localhost Packages]# rpm -Vf /etc/fstab S.5....T. c /etc/bashrc
包校驗
驗證:
來源合法性校驗:非對稱加密 (公鑰)
完整性驗證:單向加密
#該路徑下存放了密鑰 公鑰文件 [root@localhost Packages]# ls /etc/pki/rpm-gpg/ RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Debug-7 RPM-GPG-KEY-CentOS-Testing-7
導入密鑰命令:
rpm --import /path/to/Key_file
[root@localhost Packages]#rpm --import RPM-GPG-KEY-CentOS-7
手動校驗:
rpm -K /path/to/rpm_file
[root@localhost Packages]# rpm -K zlib-1.2.7-13.el7.x86_64.rpm zlib-1.2.7-13.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
#此時再次安裝時 就沒有了警告消息 [root@localhost Packages]# rpm -ivh NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:NetworkManager-adsl-1:1.0.0-14.gi################################# [100%]
注意:
使用rpm管理軟件,不管是安裝,卸載總要面臨包依賴關係問題,忽略依賴關係安裝軟件,安裝後的軟件不能使用,忽略依賴關係的卸載,形成其餘相關軟件不能使用。
YUM:Yellowdog Updater Modified
若有錯誤,敬請指正!
謝謝!