軟件包管理
鏈接主要作用是吧各個模塊之間互相引用的部分處理好,
使得各個模塊之間能夠正確的鏈接,分為靜態和動態
靜態鏈接 ?以.a為后綴 ?把程序對應的依賴庫復制到包
? ? ? ? ? 升級難 需重新編譯 ?占用空間多 遷移容易
動態鏈接 ?以.so為后綴 把依賴加做動態鏈接
? ?占用空間少 ?升級方便
? ? ? ? ? 若一個庫被刪,那么所有依賴此庫的命令都
?受影響(使用相對較多)
包命名
? ? ?name-VERSION.tar.gz|bz2|xz
? ? ?包名 ?版本
? ?例 bash-4.2.46-19.e17.x86_64.rpm
? ? noarch 根平臺無關
管理及查看本機裝載的庫文件
ldd ?/bin/ls 查看命令所調用的庫
ldconfig加載庫文件
/sbin/ldconfig -p 顯示本機已經緩存的所有可用庫文件名
? ? ? ? ? ? ? ? ? 及文件路徑映射關系
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache
****************************************************************
RPM包管理器
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE…
-i 安裝選項
-v 顯示過程
-h 以#顯示程序包管理執行進度
[install-options]
–test: 測試安裝,但不真正執行安裝,即dry run模式 操作走了一次但沒裝
例 ?rpm -i –test vsftab-2*
–nodeps:忽略依賴關系
例 rpm -ivh httpd* –nodeps 能安裝但是后期可能不能用
–replacepkgs | replacefiles
若刪掉了包中的文件重新裝包系統提示已經存在,此時可用此命令
例 rpm -ivh –replacepkgs tree*
replacefiles替代文件 即安裝兩個包,有同一個相同文件同時寫入同一路徑下
? ? ? ? ? ? ?此時系統提示不能安裝便可用此選項強制安裝并覆蓋
–nosignature: 不檢查來源合法性
–nodigest:不檢查包完整性
–noscripts:不執行程序包腳本
%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
rpm -ivh name1 name2… 一次安裝多個包
rpm -V packagesname 查看包屬性的變化
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers]
[–test] PACKAGE_NAME …
-e 卸載 后面直接跟包名就可以不用寫完整的名字
–allmatches 若一個包有多個版本使用此選項可將全部卸載
導入秘鑰光盤的根目錄下執行 rpm –import RPM-GPG-Centos-6
包升級(不建議使用)
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
freshen:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage:降級
–force: 強制安裝
/var/lib/rpm相當重要的文件數據庫不能動
包查詢
rpm {-q|–query} [select-options] [query-options]
例:rpm -ql tree 查詢tree包下的文件
[select-options]都需配合-P使用
-a: 所有包
-f: 查看指定的文件由哪個程序包安裝生成 ? 配合-P使用 后面跟磁盤上的某個文件(也可路徑)
-p rpmfile:針對尚未安裝的程序包文件做查詢操作 ? 后面跟文件名(包的完整名)而不是包名
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
–whatrequires CAPABILITY:查詢指定的CAPABILITY(相當于關鍵字)被哪個包所依賴
rpm2cpio 包文件|cpio –itv 預覽包內文件 ?相當于把rpm包轉化成cpio格式
rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件
[query-options]
–changelog:查詢rpm包的信息變化的過程配合-P使用
-c: 查詢程序的配置文件
-d: 查詢程序的文檔
-i: information
-l: 查看指定的程序包安裝后生成的所有文件
–scripts:程序包自帶的腳本
–provides: 列出指定程序包所提供的CAPABILITY(能力)
-R: 查詢指定的程序包所依賴的CAPABILITY
rpm -qR tree 查詢tree所依賴的能力
包卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers]
[–test] PACKAGE_NAME …
包校驗
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
導入所需要公鑰
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
rpm -qa “gpg-pubkey*”
rpm -K|checksig rpmfile 檢查包的完整性和簽名(若顯示not ok)則此文件存在
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一定的風險建議不裝
若執行-K檢查命令則必先執行以下命令
rpm –import /run/media/root/centos\7\x86_64/RPM-GPG-Centos-6
? ? ?rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
或 rpm –import /run/media/root/centos\7\x86_64/RPM-GPG-KEY-centos7
***********************************************************
YUM
createrepo是linux下的創建倉庫的軟件包。create是創建的意思,repo是repository的縮寫,是倉庫的意思。
yum(Yellow dog Updater,Modified)主要的功能是方便添加、刪除和更新rpm軟件包。
可以解決軟件包依存問題,更便于管理大量的系統更新問題。
它可以同時配置多個倉庫或叫資源庫(repository),就是存放更新和依存的軟件包的地方。
1. yum的由來
? ? 為了解決程序間的依賴關系,RedHat曾推出了一款名為update的工具。這款工具雖然達到了目的,但用戶體驗并不是很好。
后來一個基于RedHat的二次發行版yellowdog,由此也推出了一個工具:yellowdog update modifier,簡寫為yum. 由于比update好用,于是便流行開來。
后來導致RedHat也棄update不用而使用yum
2. yum的特性
? ? yum相對于rpm來說:rpm為基礎包管理器,yum則是rpm的前端工具。yum無法獨立存在
? ? 系統不允許有兩個yum命令同時運行,如果有兩個,第二次運行時會報錯。這是為了防止yum之間的沖突
3. yum的工作方式
? ? yum工作需要依賴C/S架構工作模式的文件服務器,服務器中存放了yum工作時所需的程序包。yum接收到需要安裝的程序包的名稱之后,通過文件共享協議(或者文件傳輸協議),在配置文件中指向的yum倉庫(可以是多個)中查詢需要的程序包。
找到之后,通過文件下載協議,將程序包下載至本地yum的緩存目錄中,當安裝完成后,緩存目錄便會被刪除
? ? 但如果yum每次到yum倉庫都需要遍歷,就會導致速度很慢。而yum倉庫中有兩類數據:程序和程序的元數據。yum倉庫在創建時,會將所有程序的名字、大小、版本以及依賴關系這類的屬性信息提取出來并保存至repodata目錄中。
所以在yum第一次訪問yum倉庫時,會獲取倉庫中元數據(repodata),并下載至本地。因此,下次需要安裝程序包時,只需從本地緩存中獲得信息,直接到倉庫下載即可
? ? 如何保持本地緩存repodata和服務器端的repodata實時同步呢?yum每次訪問倉庫都會先獲取repodata目錄中每個文件的特征碼,并與本地的進行比較,如果不相同,就重新下載并覆蓋
4. yum的配置文件
? ? 指向倉庫的位置以及相關的各種配置信息。每個yum命令行可以同時指向多個倉庫,倉庫間可以進行優先級等相關配置,優先級是由開銷決定的
? ? 配置文件有兩部分組成:主配置文件以及各倉庫的配置文件。因為如果所有的配置信息都放在一個文件中就顯得太臃腫、不方便。其中主配置文件所在路徑為/etc/yum.conf,它為各倉庫指向提供公共配置文件;
而各倉庫的配置文件所在路徑為:/etc/yum.repos.d/*.repo,里面都是以賦值的格式存在
yum客戶端配置文件:
vim /etc/yum.conf:為所有倉庫提供公共配置
[main]語句塊名稱
cachedir=/var/cache/yum/$basearch/$releasever 緩存文件夾
keepcache=0 ?1表示rpm包保存 0表示不保存
debuglevel=2 ?調試一般不用管
logfile=/var/log/yum.log ?yum的日志
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5 ?同時可裝5個包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
var/cache/yum緩存路徑可清理
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置 后綴必須為.repo
倉庫指向的定義:
[repositoryID] 第一行用一個單詞不允許出現空格名字可以隨意
name=Someame for this repository描述語句
baseurl=url://path/to/repository/第二行路徑repodata的父目錄就是路徑 可以自己創建文件夾讓后掛載光盤
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?例 mkdir /mnt/cdrom
掛載光盤 monut /dev/sr0 ?/mnt/cdrom
本機路徑 file:///mnt/cdrom
enabled={1|0}0表示禁用1表示啟用
gpgcheck={1|0} ?第三行是否檢查包的完整性0表示不檢查
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin|priority}
roundrobin:意為隨機挑選,默認值
priority:按順序訪問
cost= 默認為1000
自動生成倉庫
yum-config-manager ?–add-repo=路徑
默認存放在/etc/yum.repos.d/目錄下
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] […]
查看程序包information:
yum info […]
查看指定的特性(可以是某文件)是由哪個程序包所提供:
yum provides | whatprovides feature1 [feature2] […]
清理本地緩存:
清除/var/cache/yum/$basearch/$releasever緩存
yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:
yum makecache
搜索:yum search string1 [string2] […]
以指定的關鍵字搜索程序包名及summary信息
查看指定包所依賴的capabilities:
yum deplist package1 [package2] […]
查看yum事務歷史:
yum history [info|list|packages-list|packages-info|
summary|addon-info|redo|undo|
rollback|new|sync|stats]
yum history
yum history info 6
yum history undo 6
日志 :/var/log/yum.log
安裝及升級本地程序包:
yum localinstall rpmfile1 [rpmfile2] […]
(用install替代)
yum localupdate rpmfile1 [rpmfile2] […]
(用update替代)
包組管理的相關命令:
yum groupinstall group1 [group2] […]
yum groupupdate group1 [group2] […]
yum grouplist [hidden] [groupwildcard] […]
yum groupremove group1 [group2] […]
yum groupinfo group1 […]
yum的命令行選項:
–nogpgcheck:禁止進行gpg check
-y: 自動回答為“yes”
-q:靜默模式
–disablerepo=repoidglob:臨時禁用此處指定的repo
–enablerepo=repoidglob:臨時啟用此處指定的repo
–noplugins:禁用所有插件
適用于不能卸載依賴的包
yum history undo 12 撤銷yum的第12條歷史(反著來)
yum history redo 19 再次執行第19條命令
安裝包組
yum groupinstall groupname 若名字之間有空格需加引號
查看包組信息
yum grouplist 包組名 ?前面有等號的表示已經裝好隨著安裝包組時裝的
? ? ? ? ? ? ? ? ? ? ? 無等號的表示包已經裝好是隨著系統的安裝一起裝的
構建倉庫
createrepo [options] <directory>
例:createrepo ?/data
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96804