軟體包管理
-----------------------------------------------------------------------------------------------------------------------------------------------
rpm篇
ABI:Application Binary Interface
Windows與Linux不相容
ELF(Executable and Linkable Format)
PE(Portable Executable)
庫級别的虛拟化:
Linux: WINE
Windows: Cygwin
API:Application Programming Interface
POSIX:Portable OS
程式源代碼--> 預處理--> 編譯--> 彙編--> 連結
靜态編譯:.a
動态編譯:.so
靜态和動态連結
連結主要作用是把各個子產品之間互相引用的部分處理好,使得各個子產品之間能夠正确地銜接,分為靜态連結和動态連結
靜态連結
把程式對應的依賴庫複制一份到包
libxxx.a
嵌入程式包
更新難,需重新編譯
占用較多空間,遷移容易
動态連結
隻把依賴加做一個動态連結
libxxx.so
連接配接指向
占用較少空間,更新友善
開發語言
系統級開發:C、C++
應用級開發:java、Python、go、php、perl、delphi、ruby
包管理器
二進制應用程式的組成部分:
二進制檔案、庫檔案、配置檔案、幫助檔案
程式包管理器:
debian:deb檔案, dpkg包管理器
redhat:rpm檔案, rpm包管理器
rpm:RedhatPackage Manager
RPM Package Manager
包命名
源代碼:name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包命名方式:
name-VERSION-release.arch.rpm
例:bash-4.2.46-19.el7.x86_64.rpm
release:release.OS
常見的arch:
x86: i386, i486, i586, i686
x86_64: x64, x86_64, amd64
powerpc: ppc
跟平台無關:noarch
包命名和工具
包:分類和拆包
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包管理器前端管理工具
庫檔案
檢視二進制程式所依賴的庫檔案
ldd/PATH/TO/BINARY_FILE
管理及檢視本機裝載的庫檔案
ldconfig加載庫檔案
/sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫檔案名及檔案路徑映射關系
配置檔案:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存檔案:/etc/ld.so.cache
功能:将編譯好的應用程式的各組成檔案打包一個或幾個程式封包件,進而友善快捷地實作程式包的安裝、解除安裝、查詢、更新和校驗等管理操作
封包件組成(每個包獨有)
RPM包内的檔案
RPM的中繼資料,如名稱,版本,依賴性,描述等
安裝或解除安裝時運作的腳本
資料庫(公共):/var/lib/rpm(需要備份)
程式包名稱及版本
依賴關系
功能說明
包安裝後生成的各檔案路徑及校驗碼資訊
程式包的來源
管理程式包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
擷取程式包的途徑:
(1) 系統發版的CD光牒或官方的伺服器
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項目官方站點
(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜尋引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:第三方包建議要檢查其合法性
來源合法性,程式包的完整性
rpm包管理
CentOS系統上使用rpm指令管理程式包:
安裝、解除安裝、更新、查詢、校驗、資料庫維護
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose顯示進度
-vv:顯示更詳細的資訊
-h: 以#顯示程式包管理執行進度
rpm -ivhPACKAGE_FILE …
安裝CD光牒位置:
[install-options]
--test: 測試安裝,但不真正執行安裝,即dry run模式
--nodeps:忽略依賴關系
--replacepkgs:替換以前的檔案,強制安裝| replacefiles:安裝時覆寫一樣的檔案
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程式包腳本
%pre: 安裝前腳本--nopre
%post: 安裝後腳本--nopost
%preun: 解除安裝前腳本--nopreun
%postun: 解除安裝後腳本--nopostun
解除安裝包不用寫路徑,rpm -e memcached
rpm--import rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 導入公鑰,用來檢查包的完整性和來源
rpm -i 安裝後新版本舊版本都在,
rpm -U 安裝有舊版程式包,則“更新”,如果不存在舊版程式包,則“安裝”
rpm -F 安裝有舊版程式包,則“更新”,如果不存在舊版程式包,則不執行更新操作
rpm -UvhPACKAGE_FILE ...
rpm -FvhPACKAGE_FILE ...
--oldpackage:降級
--force: 強制安裝
rpm2cpio 安裝包 | cpio -t 預覽包内檔案
rpm -qpl 查詢安裝包裡的檔案
rpm -qi 查詢已安裝包的詳細資訊
rpm -q --script cmd 檢視指令的腳本
包查詢
rpm {-q|--query} [select-options] [query-options]
[select-options]
-a: 所有包
-f: 檢視指定的檔案由哪個程式包安裝生成
-p rpmfile:針對尚未安裝的程式封包件做查詢操作
--whatprovidesCAPABILITY:查詢指定的CAPABILITY由哪個包所提供
--whatrequiresCAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
rpm -q 軟體名: 詢問系統是不是安裝了該軟體包,比如說rpm -q httpd
rpm -qa : 查詢已安裝的所有軟體包,查找某個軟體包用rpm -qa | grep 軟體名提取
rpm -qc 軟體名: 查詢已安裝軟體的配置檔案
rpm -qd 軟體名: 查詢已安裝軟體的文檔安裝位置
rpm -qf 檔案名: 查詢已安裝的檔案屬于哪個軟體包,比如說rpm -qf /usr/lib/libacl.la
rpm -qi 軟體包名:查詢一個已經安裝軟體包的資訊
rpm -ql 軟體包名:查詢已安裝的軟體包安裝到哪個目錄
rpm -qp 軟體包名:查詢目前目錄下rpm包相關資訊,配合rpm -qpi、rpm -qpR等需要轉到有軟體包的目錄下
rpm -qR 軟體名: 查詢已安裝軟體所依賴的軟體包及檔案
rpm2cpio 封包件|cpio–itv預覽包内檔案
rpm2cpio 封包件|cpio–id “*.conf”釋放包内檔案
--changelog:查詢rpm包的changelog
-qc: 查詢程式的配置檔案
-qd: 查詢程式的文檔
-qi: information
-ql: 檢視指定的程式包安裝後生成的所有檔案
-q --scripts:程式包自帶的腳本
-q --provides: 列出指定程式包所提供的CAPABILITY
-qR: 查詢指定的程式包所依賴的CAPABILITY
常用查詢用法:
-qi PACKAGE, -qfFILE, -qc PACKAGE, -qlPACKAGE, -qdPACKAGE
-qpiPACKAGE_FILE, -qplPACKAGE_FILE, ...
-qa\
包解除安裝:
rpm {-e|--erase}
[--allmatches] 所有比對
[--nodeps]不理會包依賴直接解除安裝
[--noscripts] 沒有腳本
[--notriggers]不用觸發器
[--test] PACKAGE_NAME測試
rpm -a -ql -qf -qi -qp
包校驗
rpm -V檢測包完整性
rpm {-V|--verify} [select-options] [verify-options]
提示語中:
S 檔案大小不同
M 檔案類型不同(包括權限和未見類型)
5 哈希值不同
D Device major/minor number mismatch
L readLink(2) path mismatch
U 所有者發生變化
G Group ownership differs
T 檔案修改時間不同
P capabilities differ
rpm資料庫
資料庫重建:
/var/lib/rpm,此檔案夾保護好
rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在資料庫,則建立之
否則,不執行任何操作
rebuilddb:重建已安裝的標頭的資料庫索引目錄
yum篇
CentOS: yum, dnf
YUM: YellowdogUpdate Modifier,rpm的前端程式,可解決軟體包相關依賴性,可在多個庫之間定位軟體包,up2date的替代工具,底層依賴于rpm
yum repository: yum repo,存儲了衆多rpm包,以及包的相關的中繼資料檔案(放置于特定目錄repodata下)
檔案伺服器:
http://
https://
ftp://
file://
yum基于python 2.7,不要亂裝python,以免無法使用yum
yum配置檔案/etc/yum.conf,配置檔案中:
keepcache=1,保留緩存,安裝後保留安裝包,友善多台機器安裝某個安裝包;
gpgcheck=0,不導入公鑰就設為0,不檢查安裝包相關,設為1就需要導入公鑰。
repodata在哪,哪就可以當作用來配置yum倉庫的位置
寫倉庫位置:/etc/yum.repos.d/任意字元.repo
作為遠端伺服器時連結CD光牒挂載點 :/var/www/html/CentOS
檔案内格式:
[自己起名]:
name=test(自己起)
baseurl=file:///misc/cd (CD光牒路徑),路徑包括http://、https://、ftp://、file://
gpgcheck=0 或者
gpgkey=公鑰位置
enabled=0 禁用
yum info 查詢安裝包資訊
yum list 查詢yum倉庫資訊
systemctl start …service 啟動服務指令,CentOS7才有
yum的repo配置檔案中可用的變量:
$releasever: 目前OS的發行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基礎平台;i386, x86_64
$YUM0-$YUM9:自定義變量
執行個體:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
yum remove 無依賴性解除安裝
yum histrory 記錄安裝資訊
yum history redo 9重做yumyum曆史第九步操作
yum history undo 9 撤銷yum曆史第九步操作
yum clean all清除yum倉庫緩存,倉庫變化後需要清楚緩存
yum裝包組大小寫不敏感,裝包大小寫敏感
yum install 安裝包 -q 靜默安裝
yum info 安裝包資訊
yum groupinfo 安裝包組資訊:
不帶符合表示包已經安裝,不帶包組獨自安裝;
=随着包組一起裝好
+表示沒有安裝,更新時會自動安裝
-表示沒有安裝,包組安裝時也不會自動安裝
yum search
yum history undo
yum repolist 檢查yum的倉庫
yum-untils工具可以查詢一個沒有安裝的包裡的檔案,requery -ql指令,基于yum倉庫
createrepo 目錄:自制yum源
yum groupinstall "development tools"
生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
yum-config-manager --add-repo=
http://172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable “倉庫名" 禁用倉庫
yum-config-manager --enable “倉庫名” 啟用倉庫
yum指令的用法:
yum [options] [command] [package ...]
顯示倉庫清單:
yum repolist[all|enabled|disabled]
顯示程式包:
yum list
yum list [all | glob_exp1] [glob_exp2] [...]
yum list {available|installed|updates} [glob_exp1] [...]
安裝程式包:
yum install package1 [package2] [...]
yum reinstall package1 [package2] [...] (重新安裝)
更新程式包:
yum update [package1] [package2] [...]
yum downgrade package1 [package2] [...] (降級)
檢查可用更新:
yum check-update
解除安裝程式包:
yum remove | erase package1 [package2] [...]
yum provides 檢視指定的特性由哪個程式包提供
yum deplist 檢視包的依賴性
yum的指令行選項:
--nogpgcheck:禁止進行gpgcheck
-y: 自動回答為“yes”
-q:靜默模式
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啟用此處指定的repo
--noplugins:禁用所有插件
系統安裝CD光牒作為本地yum倉庫:
(1) 挂載CD光牒至某目錄,例如/mnt/cdrom
mount /dev/cdrom/mnt/cdrom
(2) 建立配置檔案
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
建立yum倉庫:createrepo[options] <directory>