您好,登錄后才能下訂單哦!
Linux系統程序包管理之rpm
==============================================================================
概述:
本章內容:軟件的運行環境,軟件包基礎,rpm包管理,yum管理,定制yum倉庫,編譯安裝
==============================================================================
★API:Application Programming Interface (應用程序開發接口)
☉POSIX:Portable OS(國際標準)
程序源代碼--> 預處理--> 編譯--> 匯編--> 鏈接
★ABI:Application Binary Interface(應用二進制程序接口)
☉Windows與Linux不兼容
linux:文件格式:ELF(Executable and Linkable Format)
win:文件格式:exe,msl PE(Portable Executable)
☉庫級別虛擬化
Linux:WINE(提供模擬windows的庫,運行win環境)
Windows:Cywin(提供linux的運行環境)
★開發語言:
☉系統級開發:
C/C++(依賴于c庫);
httpd,nginx,vsftpd,go
☉應用級開發:
java(依賴于jvm虛擬機)
Python(openstack云站),php,perl(依賴于per解釋器),ruby
★程序格式
☉c/c++
源代碼:文本格式的程序代碼;
編譯開發環境:編譯器,頭文件,開發庫
二進制格式:文本格式的程序代碼-->編譯器-->二進制格式(二進制程序、庫文件、配置文件、幫助文件)、
☉java/Python
源代碼:編譯能夠在其虛擬機(jvm/pvm)運行的格式;
開發環境:編譯器、開發庫;
二進制
★項目構建工具
c/c++:make
jave:maven
1.概述:
★二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
★程序包管理:
源代碼-->目標二進制格式(二進制程序、庫文件、配置文件、幫助文件)-->組織成為一個或有限幾個“包文件”(安裝,升級,卸載,查詢,校驗)
☉程序包管理器:
deblan:dpt,dpkg 以".deb"后綴;
redhat:rpm (redhat package manager) 以 ".rpm"后綴 ;
S.u.S.E:rpm, ".rpm"命令
★包命名格式
☉源代碼:name-VERSION.tar.gz|bz2|xz
ERSION: major(主版本號).minor(次版本號).release(發行號)
☉rpm包命名格式:name-VERSION-release.arch.rpm
VERSION:major.minor.release.arc
release:rpm包發行號
changelog文檔(內容修復改進的相關文檔)
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64powerpc: ppc
跟平臺無關:noarch (適用于所有平臺)
示例:
bash-4.2.46-19.el7.x86_64.rpm
release:release.OS
★包:分類和拆包
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包管理器前端管理工具
2.庫文件:
★查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
★管理及查看本機裝載的庫文件:
ldconfig;
/sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
3.包管理器:
★程序包管理器:
☉功能:
將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
☉程序包的組成清單:(每個程序包單獨實現)
RPM包內的文件清單
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
☉數據庫(公共)
路徑:/var/lib/rpm
程序包名稱及版本;
依賴關系;
功能說明;
包安裝后生成的各文件路徑及校驗碼信息
3.程序包的來源:
★管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
★獲取程序包的途徑:
☉系統開發版的光盤或官方的服務器(或CentOS鏡像站點)
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
☉項目官方站點
☉第三方組織:
Fedora-EPEL:Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org;
http://rpmfind.net;
http://rpm.pbone.net;
https://sourceforge.net/
☉自己制作
注意:檢查其合法性:來源合法性,程序包的完整性
1.rpm語法及選項概述:
★rpm:
安裝、升級、卸載、查詢和校驗、數據庫維護(都是通過rpm命令來實現的)
☉語法:
rpm [OPTIONS] [PACKAGE_FILE]
☉選項:
-i,--install:安裝
-U,--update,-F,--freshen:升級
-e,--erase:卸載
-q,--query:查詢
-V,--verify:校驗
--builddb,--initdb:數據庫維護
2.安裝及子選項:
★語法:
rpm {-i|--install} [install-options] PACKAGE_FILE…
☉選項:
-v:verbose 顯示詳細信息;
-vv:更詳細的輸出;
-h: hash marks 輸出進度條;每個#號表示2%的進度
--test:測試安裝,檢查并報告依賴關系及沖突關系,但不真正執行安裝;稱為dry run(干跑)模式;
--nodeps:忽略依賴關系,不建議;
--replacepkgs:替代原來的包,重新安裝(先把由原來的配置文件刪除再重裝)
--nosignature:不檢查包簽名信息,不檢查來源合法性
--nodigest:不檢查包完整性
注意:rpm自帶四類腳本(--noscripts)
%pre:安裝前腳本; --nopre
%post:安裝后腳本; --nopost
%preun:卸載前腳本; --nopreun
%postun:卸載后腳本;--nopostun
☉真正安裝執行操作使用的命令
rpm -ivh PACKAGE_FILE
3.升級及子選項:
★語法:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
rpm {-F|--freshen} [install-options] PACKAGE_FILE...
注意:
-U(upgrade):安裝有舊版程序包,則“升級”如果不存在舊版程序包,則“安裝”
-F(freshen):安裝有
舊版程序包,則“升級”如果不存在舊版程序包,則不執行升級操作
★升級命令:
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降級(回滾操作)
--force: 強行升級
注意:
不要對內核做升級操作;Linux支持多內核版本并存,因此,可以直接安裝新版本內核;
如果源程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留。
4.卸載及子選項:
★作用:
移除已安裝的程序包
★語法:
rmp {-e|--erase}[--allmatches][--nodeps][--test] PACKAGE_NAME
注意:
卸載和查詢是包的名,因為包已經存在了;而安裝和升級,包是不存在的,所以是包的文件路徑
★簡單用法
rpm -e PACKAGE_NAME...
☉選項:
--allmatches:卸載所有匹配名稱的程序包各版本
--nodeps:忽略依賴關系
--test:測試卸載,dry run 模式
5.查詢:
★語法:
rpm {-q|--query} [select-options] [query-options]
☉[select-options] 挑選選項
-q PACKAGE_NAME:查詢某包或某些包是否安裝
-qa:查詢已安裝的所有包
-qf FILE:查看指定的文件由哪個程序包安裝生成
-p PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;
--whatprovides CAPABILITY(能力):查詢指定的CAPABILITY由哪個包所提供
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
rpm2cpio 包文件|cpio–itv預覽包內文件
rpm2cpio 包文件|cpio–id “*.conf”釋放包內文件
☉[query-options] 查詢選項
--changelog:查詢rpm包的changelog(變更記錄)
-c:查詢指定的程序包的配置文件
-d:查詢程序包安裝完成后所生成的幫助文檔
-qi,-info:程序包相關的信息,版本號,大小,所屬的包組等
-l,--list:查看指定的程序包安裝后生成的所有文件列表;
--scripts:查看程序包自帶的腳本片斷
-R,--requires:查詢指定的程序包所依賴的CAPABILITY;
--provides:列出指定程序包所提供的CAPABILITY
☉常用組合用法:
-qi PACKAGE;-qf FILE;-qc PACJAGE;-ql PACKAGE;-qd PACKAGE ;-qpi PACKAGE_FILE;-qpl PACKAGE_FILE;-qpc PACKAGE_FILE,..
演示:
[root@centos7 ~]# rpm -q tree tree-1.6.0-10.el7.x86_64 [root@centos7 ~]# rpm -ql tree /usr/bin/tree /usr/share/doc/tree-1.6.0 /usr/share/doc/tree-1.6.0/LICENSE /usr/share/doc/tree-1.6.0/README /usr/share/man/man1/tree.1.gz [root@centos7 ~]# rpm -qf /etc/fstab setup-2.8.71-6.el7.noarch [root@centos7 ~]# rpm -qc bash /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc [root@centos7 ~]# rpm -qi bash Name : bash Version : 4.2.46 Release : 19.el7 Architecture: x86_64 Install Date: 2016年11月06日 星期日 18時31分30秒 Group : System Environment/Shells Size : 3663618 License : GPLv3+ Signature : RSA/SHA256, 2015年11月25日 星期三 22時14分53秒, Key ID 24c6a8a7f4a80eb5 Source RPM : bash-4.2.46-19.el7.src.rpm Build Date : 2015年11月20日 星期五 13時04分53秒 Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS 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. [root@centos7 ~]# rpm -qc httpd /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.modules.d/00-base.conf /etc/httpd/conf.modules.d/00-dav.conf /etc/httpd/conf.modules.d/00-lua.conf /etc/httpd/conf.modules.d/00-mpm.conf /etc/httpd/conf.modules.d/00-proxy.conf /etc/httpd/conf.modules.d/00-systemd.conf /etc/httpd/conf.modules.d/01-cgi.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic /etc/logrotate.d/httpd /etc/sysconfig/htcacheclean /etc/sysconfig/httpd [root@centos7 ~]# rpm -qd httpd /usr/share/doc/httpd-2.4.6/ABOUT_APACHE /usr/share/doc/httpd-2.4.6/CHANGES /usr/share/doc/httpd-2.4.6/LICENSE /usr/share/doc/httpd-2.4.6/NOTICE /usr/share/doc/httpd-2.4.6/README /usr/share/doc/httpd-2.4.6/VERSIONING /usr/share/doc/httpd-2.4.6/httpd-dav.conf /usr/share/doc/httpd-2.4.6/httpd-default.conf /usr/share/doc/httpd-2.4.6/httpd-info.conf /usr/share/doc/httpd-2.4.6/httpd-languages.conf /usr/share/doc/httpd-2.4.6/httpd-manual.conf /usr/share/doc/httpd-2.4.6/httpd-mpm.conf /usr/share/doc/httpd-2.4.6/httpd-multilang-errordoc.conf /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /usr/share/doc/httpd-2.4.6/proxy-html.conf /usr/share/man/man8/apachectl.8.gz /usr/share/man/man8/fcgistarter.8.gz /usr/share/man/man8/htcacheclean.8.gz /usr/share/man/man8/httpd.8.gz /usr/share/man/man8/rotatelogs.8.gz /usr/share/man/man8/suexec.8.gz
6.校驗:
★語法:
rpm {-V|--verify} [select-options] [verify-options]
☉常見用法:
rpm -V PACHAGE_NAME
當沒有輸出結果時表示軟件包完整ok,當有相應的結果輸出表明對應的內容有修改,及具體如下:
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:mTimediffers 文件的創建時間已被改變;
P:capabilities differ
★包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
☉獲取并導入信任的包制作者的秘鑰
對于CentOS發行版來說:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
◆驗證:
安裝此組織簽名的程序時,會自動執行驗證;
手動驗證:rpm -K PACKAGE_FILE
◆加密方法:
公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的
public key:公鑰,公開所有人
secret key:私鑰, 不能公開
◆導入所需要的公鑰:
rpm -K |checksigrpmfile:檢查包的完整性和簽名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qagpg-pubkey*
演示:
[root@centos7 ~]# rpm -V httpd 遺漏 c /etc/httpd/conf.d/welcome.conf S.5....T. c /etc/httpd/conf/httpd.conf
7.數據庫重建:
★rpm數據庫路經:
/var/lib/rpm
查詢操作:通過此處得到數據庫進行
★用法:
rpm {--initdb|--rebuilddb}
☉選項:
--initdb: 初始化數據庫。當前無任何數據庫,則新建之;當前有時不執行任何操作。
--rebuilddb:重新構建。無論當前存在與否,都會直接重新創建數據庫。
☉獲取幫助
CentOS6 man rpm
CentOS7 man rpmdb
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。