rpm與yum的初步學習
我們在使用linux系統時需要安裝和卸載軟件,我們這節就先來看一下rpm和yum的初步簡單實用。
linux軟件安裝:
安裝程序的方式:
通用二進制格式:直接解壓壓縮文件,就可以使用。但一定要注意安裝平臺。
軟件包管理器:如RPM。
軟件包管理器的前端工具:如YUM。
源代碼編譯。
軟件包的組成:
二進制程序,位于 /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bin, /usr/local/sbin 等目錄中。
庫文件,位于 /lib, /usr/lib, /usr/local/lib 等目錄中。Linux中庫文件以 .so(動態鏈接庫)或 .a(靜態鏈接庫)作為文件后綴名。
配置文件,位于 /etc 目錄中。
幫助文件:手冊, README, INSTALL (/usr/share/doc/)
了解安裝方式和軟件包組成之后我們用什么來安裝和卸載軟件呢? 這里我們就需要用到軟件包管理器來實現,要知道在沒有軟件包管理器之前,安裝程序,卸載程序是非常繁雜的。
軟件包管理工具的特性:
文件清單
文件放置路徑
提供的功能說明
依賴關系
軟件包管理器內部有一個數據庫,其中記載著程序的基本信息,校驗信息,程序路徑信息等。
軟件包管理器:
debian:deb文件, dpkg包管理器
redhat: rpm文件, rpm包管理器
rpm: Redhat Package Manager
RPM Package Manager
RPM
RPM早期被稱為RedHat Package Manager,但由于目前RPM非常流行,且已經成為Linux工業標準。所以RPM現在又被稱為RPM is Package Manager。RPM管理支持事務機制。增強了程序安裝卸載的管理。RPM的功能:打包、安裝、查詢、升級、卸載、校驗、數據庫管理。
RPM包的命名規范:
源程序的命名規范:
name-version.tar.{gz|bz2|xz}
版本號:major.minor.release
例:bash-4.3.1.tar.xz
RPM包的命名規范:name-version-release.os.arch.rpm
name:程序名稱。
version:程序版本號。
release(發行號):用于標識RPM包本身的發行號,與源程序的release號無關。
os:即說明RPM包支持的操作系統版本。如el6(即rhel6)、centos6、el5、suse11。
arch:主機平臺。如i686、x86_64、amd64、ppc(power-pc)、noarch(即不依賴平臺)
例:bash-4.3.2-5.el6.x86_64.rpm
RPM分包:
包:分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
這里需要注意的是:包之間可能存在依賴關系,甚至循環依賴。
解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
這里我們稍后會簡單介紹yum的使用,先來把RPM講完。
上面我們說過的包的組成有二進制程序、庫文件、配置文件和幫助文檔,我們說說庫文件。
庫文件:
查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
示例:
[root@centos6 Packages]# ldd /bin/ls linux-vdso.so.1 => (0x00007ffcfbd95000) libselinux.so.1 => /lib64/libselinux.so.1 (0x000000359f400000) librt.so.1 => /lib64/librt.so.1 (0x000000359e400000) libcap.so.2 => /lib64/libcap.so.2 (0x00000035a4800000) libacl.so.1 => /lib64/libacl.so.1 (0x00000035a8800000) libc.so.6 => /lib64/libc.so.6 (0x000000359dc00000) libdl.so.2 => /lib64/libdl.so.2 (0x000000359d800000) /lib64/ld-linux-x86-64.so.2 (0x000000359d400000) libpthread.so.0 => /lib64/libpthread.so.0 (0x000000359e000000) libattr.so.1 => /lib64/libattr.so.1 (0x00000035a8400000)
管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
示例:
[root@centos7 Packages]# /sbin/ldconfig -p 922 libs found in cache `/etc/ld.so.cache' p11-kit-trust.so (libc6,x86-64) => /lib64/p11-kit-trust.so libzapojit-0.0.so.0 (libc6,x86-64) => /lib64/libzapojit-0.0.so.0 libz.so.1 (libc6,x86-64) => /lib64/libz.so.1 libyelp.so.0 (libc6,x86-64) => /lib64/libyelp.so.0 libyajl.so.2 (libc6,x86-64) => /lib64/libyajl.so.2 ...
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個 程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、 升級和校驗等管理操作
1、包文件組成(每個包獨有)RPM包內的文件 RPM的元數據,如名稱,版本,依賴性,描述等 安裝或卸載時運行的腳本
2、數據庫(公共) 程序包名稱及版本 依賴關系 功能說明 包安裝后生成的各文件路徑及校驗碼信息
獲取程序包的途徑:
(1) 系統發版的光盤或官方的服務器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項目官方站點
(3) 第三方組織
Fedora-EPEL
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net
(4) 自己制作
rpm包管理:
CentOS系統上使用rpm命令管理程序包:
安裝、卸載、升級、查詢、校驗、數據庫維護
安裝:-i
rpm {-i|–install} [install-options] PACKAGE_FILE …
[install-options]:
-v:詳細信息
-vv:更詳細信息
-h:輸出進度條 (hash marks)每個#代表2%
–test:測試安裝,檢查并報告以來關系及沖突消息
–nodeps:忽略依賴關系
–justdb:只升級數據庫
–relpacepkgs:重新安裝
-F:升級
rpm -Fvh PACKAGE FILE
-U:升級或安裝
rpm -Uvh PACKAGE FILE
–oldpackage:降級
–force:強制升級
-e:卸載
–allmatches:卸載所有匹配指定名稱的程序包的個版本
–nodeps:忽略依賴關系
–test:測試卸載
-q:查詢
rpm {-q|–query} [select-options] [query-options]
[select-options]:
PACKAGE——NAME:查詢指定程序包是否已經安裝,及其版本
-a –all:查詢已安裝的所有程序包
-f FILE:查詢指定的文件由哪個程序包安裝生成
[root@centos7 Packages]# rpm -qf /usr/sbin/httpd httpd-2.4.6-40.el7.centos.x86_64
–whatprovides CAPBILITY:查詢指定的CAPBILITY由哪個程序包提供
–whatrequires CAPBILITY:查詢指定的CAPBILITY被哪個包依賴
[query-options]:
–changelog:查詢rpm包的changelog
-l –list:安裝程序包生成了多少個文件
rpm -ql 包名
[root@centos7 Packages]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README ... [root@centos7 Packages]# rpm -ql httpd | wc -l 496
-i –info:查詢程序包information(版本號,大小等)
rpm -qi 包名
[root@centos7 Packages]# rpm -qi httpd Name : httpd Version : 2.4.6 Release : 40.el7.centos Architecture: x86_64 Install Date: Sun 21 Aug 2016 11:17:05 PM EDT Group : System Environment/Daemons Size : 9806197 License : ASL 2.0 Signature : RSA/SHA256, Wed 25 Nov 2015 09:41:23 AM EST, Key ID 24c6a8a7f4a80eb5 Source RPM : httpd-2.4.6-40.el7.centos.src.rpm Build Date : Thu 19 Nov 2015 04:45:11 PM EST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://httpd.apache.org/ Summary : Apache HTTP Server Description : The Apache HTTP Server is a powerful, efficient, and extensible web server.
-c –configfiles:程序包配置文件
-d:查詢指定的程序包提供的文檔
–provides:列出指定的程序包所提供的CAPBILITY
-R –requires:查詢指定程序包依賴關系
–scripts:查詢程序包自帶的腳本
[root@centos7 Packages]# rpm -q --scripts httpd preinstall scriptlet (using /bin/sh): # Add the "apache" user /usr/sbin/useradd -c "Apache" -u 48 \ -s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || : postinstall scriptlet (using /bin/sh): if [ $1 -eq 1 ] ; then # Initial installation /usr/bin/systemctl preset httpd.service htcacheclean.service >/dev/null 2>&1 || : fi preuninstall scriptlet (using /bin/sh): if [ $1 -eq 0 ] ; then # Package removal, not upgrade /usr/bin/systemctl --no-reload disable httpd.service htcacheclean.service > /dev/null 2>&1 || : /usr/bin/systemctl stop httpd.service htcacheclean.service > /dev/null 2>&1 || : fi postuninstall scriptlet (using /bin/sh): /usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : # Trigger for conversion from SysV, per guidelines at: # https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd posttrans scriptlet (using /bin/sh): test -f /etc/sysconfig/httpd-disable-posttrans || \ /bin/systemctl try-restart httpd.service htcacheclean.service >/dev/null 2>&1 || :
rpm包自帶腳本:
自帶的腳本分為4類:
preinstall:安裝之前運行的
postinstall:安裝完成之后運行的
preuninstall:卸載真正開始執行之前運行
postuninstall:卸載過程執行完成之后執行
安裝程序包時加上下面的參數命令:
–noscrips : 不執行腳本
–nosidnature:不檢查包簽名信息,不檢查來源合法性
–nodigest: 不檢查程序包完整性
包校驗:-V
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
包來源合法性驗證和完整性驗證:
來源合法性驗證:RSA
數字簽名
完整性驗正:SHA256
rpm -K|checksig rpmfile 檢查包的完整性和簽名
導入所需要公鑰:
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
示例:
[root@centos7 Packages]# rpm --import /run/media/root/CentOS\ 7\ x86_64/RPM-GPG-KEY-CentOS-7 [root@centos7 Packages]# rpm -ivh zsh-5.0.2-14.el7.x86_64.rpm Preparing... ################################# [100%] Updating / installing... 1:zsh-5.0.2-14.el7 ################################# [100%] [root@centos7 Packages]# rpm -K zsh-5.0.2-14.el7.x86_64.rpm zsh-5.0.2-14.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK [root@centos7 rpm-gpg]# ll total 12 -rw-r--r--. 1 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-7 -rw-r--r--. 1 root root 1004 Dec 9 2015 RPM-GPG-KEY-CentOS-Debug-7 -rw-r--r--. 1 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-Testing-7
手動驗證:rpm -K PACKAGE_FILE
數據庫重建:
[root@centos7 rpm]# ls
Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5
Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername
[root@centos7 rpm]# pwd
/var/lib/rpm
rpm數據庫路徑
查詢操作:通過此處的數據庫進行;
rpm {–initdb|–rebuilddb}
–initdb:事先無任何數據庫時可創建新的;有時不執行任何操作
–rebuilddb:重新構建,通過讀取當前系統上的所有已安裝的程序包進行重新構建;
yum
YUM被稱為 Yellow dog Updater, Modified,是一個在Shell前端軟件包管理器。YUM客戶端基于RPM包進行管理,可以通過HTTP服務器下載、FTP服務器下載、本地軟件池的等方式獲得軟件包,可以從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系。YUM在安裝RPM時,會從服務器下載相應包,且緩存在本地。
yun repository:yum repo (yum倉庫)
存儲眾多rpm包,以及相關的元數據文件(放置于目錄下:repodata);
文件服務器:
ftp://
http://
nfs://
file:///
yum客戶端:
[root@centos7 ~]# rpm -qc yum /etc/logrotate.d/yum /etc/yum.conf 主配置文件 /etc/yum/version-groups.conf /etc/yum.conf 為所有倉庫提供公共配置 /etc/yum.repos.d/*.repo 為倉庫的指向提供配置
倉庫指向的定義:
配置文件的說明:
[main] #main倉庫。[ ]中括號表示一個倉庫的定義。其中是倉庫的名稱。
cachedir=/var/cache/yum/$basearch/$releasever #RPM包的緩存位置。
keepcache=0 #RPM包在本地是否需要長期保存。1表示yes,0表示no。
debuglevel=2 #日志級別。
logfile=/var/log/yum.log #日志文件。
exactarch=1 #下載的RPM包是否需要與本地平臺完全匹配。1表示yes,0表示no。
obsoletes=1
gpgcheck=1 #是否需要自動來源合法性檢測。
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bdistroverpkg=centos-release
CentOS-Base.repo配置文件:
[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository/
enabled={1|0}
gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority} 默認為:roundrobin意為隨機挑選
cost= 默認為1000
對配置文件中的一些配置項作說明:
[ … ]:倉庫的名稱。不能重復。
enabled {1|0} 是否啟用倉庫,不寫默認啟用。
gpgcheck {1|0} 檢查合法性
repo_gpgcheck{1|0} 是否檢查倉庫元數據
gpgkey=URL gpgkey:驗證RPM包的密鑰文件路徑。該文件可以在遠處服務器上,也可以在本地。
enablegroups {1|0} 是否允許在此倉庫使用組批量管理程序包
baseurl:配置倉庫的路徑。用于指定一個url??稍O置多個
baseurl=url://path/to/repository/
url://server2/path/to/repository/
url://server3/path/to/repository/
mirrorlist:指向一個鏡像列表,里面有多個url。
cost:代價,其本質是倉庫優先級的配置。
顯示倉庫列表:
repolist [all|enabled|disabled]
顯示程序包:list
# yum list [all | glob_exp1] [glob_exp2] […]
# yum list {available|installed|updates} [glob_exp1]
yum list相關命令:
yum list all
最左邊第一列:軟件包名稱.平臺名稱;中間列:軟件版本號-release號;最右邊一列:安裝情況。
若顯示@則表示該軟件已經通過倉庫安裝;如@anaconda表示已經通過naconda倉庫安裝;install,則表示系統已經安裝,未通過倉庫安裝。若無@或不是install,則表示尚未安裝。如base,表示未安裝,包位于base倉庫中。updates,表示未安裝,包位于updates倉庫中。
yum list installed 顯示已安裝
yum list available 只顯示沒有安裝,但可安裝的包
yum list updates 查看所有可更新的包。
yum list extras 顯示不屬于任何倉庫的,額外的包。
yum list obsoletes 顯示被廢棄的包
yum list recent 新添加進yum倉庫的包
顯示查詢某個文件是由哪個軟件包生成的
yum provides 文件
yum whatprovides 文件
[root@centos7 Packages]# yum whatprovides /etc/issue Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file Repo : base Matched from: Filename : /etc/issue centos-release-7-2.1511.el7.centos.2.10.x86_64 : CentOS Linux release file Repo : @anaconda Matched from: Filename : /etc/issue
安裝程序包:
install package1 [package2] […]
reinstall package1 [package2] […] (重新安裝)
升級程序包:
update [package1] [package2] […]
[root@centos7 Packages]# yum update ftp-0.17-66.el7.x86_64.rpm Loaded plugins: fastestmirror, langpacks Examining ftp-0.17-66.el7.x86_64.rpm: ftp-0.17-66.el7.x86_64 ftp-0.17-66.el7.x86_64.rpm: does not update installed package. No packages marked for update
downgrade package1 [package2] […] (降級)
檢查可用升級:
check-update
卸載程序包:
remove | erase package1 [package2] […]
查看程序包information:
info […]
示例:
[root@centos7 Packages]# yum info ftp Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Installed Packages Name : ftp Arch : x86_64 Version : 0.17 Release : 66.el7 Size : 96 k Repo : installed From repo : base Summary : The standard UNIX FTP (File Transfer Protocol) client URL : ftp://ftp.linux.org.uk/pub/linux/Networking/netkit License : BSD with advertising Description : The ftp package provides the standard UNIX command-line FTP (File : Transfer Protocol) client. FTP is a widely used protocol for : transferring files over the Internet and for archiving files. : : If your system is on a network, you should install ftp in order to do : file transfers.
搜索:
search string1 [string2] […] 以指定的關鍵字搜索程序包名及summary信息
[root@centos7 Packages]# yum search ftp Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile ============================================================= N/S matched: ftp ===================== ftp.x86_64 : The standard UNIX FTP (File Transfer Protocol) client lftp-scripts.noarch : Scripts for lftp syslinux-tftpboot.x86_64 : SYSLINUX modules in /var/lib/tftpboot, available for network booting tftp.x86_64 : The client for the Trivial File Transfer Protocol (TFTP) tftp-server.x86_64 : The server for the Trivial File Transfer Protocol (TFTP) vsftpd.x86_64 : Very Secure Ftp Daemon vsftpd-sysvinit.x86_64 : SysV initscript for vsftpd daemon curl.x86_64 : A utility for getting files from remote servers (FTP, HTTP, and others) lftp.i686 : A sophisticated file transfer program lftp.x86_64 : A sophisticated file transfer program wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols Name and summary matches only, use "search all" for everything.
查看指定包所依賴的capabilities:
deplist package1 [package2] […]
查看yum事務歷史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
[root@centos7 Packages]# yum history Loaded plugins: fastestmirror, langpacks ID | Login user | Date and time | Action(s) | Altered ------------------------------------------------------------------------------- 3 | root <root> | 2016-08-21 23:17 | Install | 5 < 2 | root <root> | 2016-08-19 05:57 | Install | 1 > 1 | System <unset> | 2016-07-20 05:39 | Install | 1243 history list
yum的命令行選項:
–nogpgcheck:禁止進行gpg check
-y: 自動回答為“yes”
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enablerepo=repoidglob:臨時啟用此處指定的repo
–noplugins:禁用所有插件
rpm軟件包之間的依賴性問題往往會很繁瑣,尤其是軟件由多個rpm包組成時。Yum(全稱為 Yellow dog Updater, Modified)是Shell前端軟件包管理器?;禦PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
原創文章,作者:zanghonglei,如若轉載,請注明出處:http://www.www58058.com/38856