一、前言
二、軟件包及軟件包管理工具
三、安裝程序的方式
四、rpm命令及常用選項
五、其他
一、前言
主流發行版的軟件包管理工具
Debian:dpt(debian package tools), ----->爲了解決程序複雜的文件依賴關係,建立在dpt基礎上,開發了依賴於dpt的前端工具apt-get
RedHat:rpm,早期爲Redhat Package Manager,後來做爲Linux軟件包管理工業標準,爲RPM is Package Manager;受debian的apt-get啓發,RedHat開發了基於rpm的前端管理工具----->yum(Yellowdog Updater Modified)
yum源鏡像網站:
http://mirrors.sohu.com
rpm包搜索網站:
http://rpmfind.net/
http://rpm.pbone.net/
二、軟件包及軟件包管理工具
1. Linux軟件包的組成部分:
二進制程序安裝路徑:/bin, /sbin | /usr/bin, /usr/sbin | /usr/local/bin, /usr/local/sbin
庫文件安裝路徑:/lib, /usr/lib, /usr/local/lib #庫文件也是可執行程序,但是其本身不能單獨執行
配置文件安裝路徑:/etc
幫助文件安裝路徑: /usr/share/doc, /usr/share/man #路勁中有man手冊,README,INSTALL;man的配置文件/etc/man .config,可定義默認搜索路徑
2.rpm包名含義
bash-4.1.2-15.el6_4.x86_64
bash:程序名
4.1.2:4爲主版本號,1是次版本號,2是發行號
15.el6:rpm包的發行號
el6:適用的操作系統;el6爲Red Hat Enterprise Linux,rehl6的縮寫
x86_64:適用的cpu架構
注:程序有時不止一個安裝包,由主包和分包組成,rpm主包命名遵循上述格式如bind-9.8.2-0.17.rc1.el6.x86_64.rpm,分包命名時則類似bind-chroot-9.8.2-0.17.rc1.el6.x86_64.rpm,
3.軟件包管理工具的功能:打包、安裝、查詢、升級、卸載、校驗、數據庫管理(重建)
其中rpm程序的打包過程是根據spec文件來完成的
4.軟件包管理工具打包程序的管理規則:
(1).提供文件清單
(2).提供文件安裝路徑
(3).提供程序功能說明
(4).提供文件依賴關係
以上規則的遵循,爲程序的部署安裝提供了極大的便利
三、安裝程序的方式
1.通用二進制文件
2.軟件包管理器,例如rpm
3.軟件包管理器的前端工具,例如yum
4.源代碼編譯安
四、rpm命令及常用選項
rpm
-i或--install:安裝
-v:顯示詳細信息;-vv,-vvv,v越多,表示詳細級別越高,越來越詳細
-h:以井號顯示安裝進度,一個井號表示2%
-l或--list:
-d或--docfiles:
1.安裝:
常用安裝選項組合:rpm -ivh packages_name #以下的packages_name都表示rpm安裝包
忽略依賴關係安裝:rpm -ivh packages_name --nodeps #安裝、卸載程序時都可以使用--nodeps忽略依賴關係
測試安裝:rpm -ivh packages_name --test
重新安裝:rpm -ivh packages_name --replacepkgs
有時安裝程序時有警告信息
warning: /etc/sysconfig/named created as /etc/sysconfig/named.rpmnew
此前可能已經有同樣名字的配置文件,文件也是我們需要的,這時這種機制的存在則會創建一個新的配置文件而不覆蓋設定好的配置文件
2.卸載:rpm -e packages_name
卸載時,可能產生警告
warning: /etc/sysconfig/named saved as /etc/sysconfig/named.rpmsave
這是由於我們修改過程序的配置文件,這種機制的存在讓我們卸載程序時保留了我們可能已經設定好的配置文件
3.查詢:rpm -q packages_name 或者 rpm --quare packages_name
[root@TESTHOST ~]# rpm -q apache package apache is not installed #顯示未安裝 [root@TESTHOST ~]# rpm -q bash bash-4.1.2-15.el6_4.x86_64 #顯示程序版本等信息
rpm -qa 查詢所有已安裝的包
[root@TESTHOST ~]# rpm -qa | grep "^bas" #支持grep,但不支持globbing basesystem-10.0-4.el6.noarch bash-4.1.2-15.el6_4.x86_64 [root@TESTHOST ~]# rpm -qa | grep "^bin" binutils-2.20.51.0.2-5.42.el6.x86_64 [root@TESTHOST ~]#
rpm -qi packages_name 查詢軟件包摘要信息 #此處的i亦可爲--info
[root@TESTHOST ~]# rpm -qi bash Name : bash Relocations: (not relocatable) Version : 4.1.2 Vendor: CentOS Release : 15.el6_4 Build Date: 2013年07月18日 星期四 21時21分24秒 Install Date: 2015年04月10日 星期五 04時49分29秒 Build Host: c6b10.bsys.dev.centos.org Group : System Environment/Shells Source RPM: bash-4.1.2-15.el6_4.src.rpm Size : 3139291 License: GPLv3+ Signature : RSA/SHA1, 2013年07月18日 星期四 21時46分10秒, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.gnu.org/software/bash Summary : The GNU Bourne Again shell Description : The GNU Bourne Again shell (Bash) is a shell or command language interpreter that is compatible with the Bourne shell (sh). Bash incorporates useful features from the Korn shell (ksh) and the C shell (csh). Most sh scripts can be run by bash without modification.
查詢包安裝生成的文件清單:rpm -ql packages_name
查詢某文件是由哪個rpm安裝生成的:rpm -qf /path/to/some_file
查詢包安裝生成的配置文件:rpm -qc packages_name
查詢包安裝生成的幫助文檔 :rpm -qd packages_name
-------------------------------------------------------------
查詢包相關的腳本:rpm –q --scripts packages_name
[root@TESTHOST ~]# rpm -q --scripts bash postinstall scriptlet (using <lua>): bashfound = false; shfound = false; f = io.open("/etc/shells", "r"); if f == nil then f = io.open("/etc/shells", "w"); else repeat t = f:read(); if t == "/bin/bash" then bashfound = true; end if t == "/bin/sh" then shfound = true; end until t == nil; end f:close() f = io.open("/etc/shells", "a"); if not bashfound then f:write("/bin/bash\n") end if not shfound then f:write("/bin/sh\n") end f:close() postuninstall scriptlet (using /bin/sh): if [ "$1" = 0 ]; then /bin/grep -v '^/bin/bash$' < /etc/shells | \ /bin/grep -v '^/bin/sh$' > /etc/shells.new /bin/mv /etc/shells.new /etc/shells fi
以上腳本信息中關鍵詞意思如下:
preinstall:安裝前腳本
postinstall:安裝後腳本
preuninstall:卸載前腳本
postuninstall:卸載後腳本
-------------------------------------------------------------
查詢尚未安裝的包的相關信息:
rpm -qpi /path/to/rpm_file
4.升級:
-U:升級+安裝,常用-Uvh
-F:升級,常用-Fvh,與Uvh不同的是,如果不存在早期版本,程序將不會安裝
rpm -Uvh packages_name
rpm -Fvh packages_name
強行升級、安裝時可加如下選項
--force 強行升級
--nodeps 忽略依賴關係
注意:內核不應該升級,應該儘可能安裝,它允許多版本並存
5.校驗:rpm -V packages_name 或者--verify
[root@TESTHOST ~]# rpm -V zsh #程序相關文件未修改時,執行命令後沒有任何提示 [root@TESTHOST ~]# vim /etc/zlogin #修改文件 [root@TESTHOST ~]# rpm -V zsh S.5....T. c /etc/zlogin #執行命令後,出現相關提示信息,提示程序被改變過
提示信息能提示管理員,程序被改變的一些相關信息
S file Size differs:文件大小改變
M Mode differs (includes permissions and file type):權限改變
5 digest (formerly MD5 sum) differs:MD5碼改變
D Device major/minor number mismatch:設備的主次號改變
L readLink(2) path mismatch:readlink路徑不匹配
U User ownership differs:屬主改變
G Group ownership differs:屬組改變
T mTime differs:最近一次的修改時間改變
P caPabilities differ:能力改變
6.rpm數據庫重建:
--initdb:新建,舊檔不會被覆蓋
--rebuilddb:重建,舊檔不會保存 #此選項常用
[root@TESTHOST ~]# rpm --rebuilddb
rpm包的數據庫文件路徑:/var/lib/rpm/
五、其他
rpm –K zsh-4.3.10-5.el6.x86_64.rpm #檢測來源合法和文件完整性 或者使用--checksig
--nodigest #不檢測完整性
--nosignature #不檢測合法性
-------------------------------------------------------------
rpm --improt /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 #導入公共祕鑰,RedHat系列官方公鑰路徑/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
-------------------------------------------------------------
注:有時用yum安裝程序時,會產生如下警告
warning: rpmts_HdrFromFdno: Header V3RSA/SHA1 Signature, key ID c105b9de: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
解決辦法:
1.添加參數 --nogpgcheck #如果確認安裝文件無問題,可以忽略檢測來源合法性
2.到yum源網站更新gpg-key後導入,例如
[root@TESTHOST rpm-gpg]# wget http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6
[root@TESTHOST rpm-gpg]# rpm --improt /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6