linux軟件包管理
簡介
在Linux系統中,軟件包的安裝和管理是很重要的知識,而linux/unix一個麻煩的地方就是軟件安裝程序比較麻煩和復雜,尤其是當所安裝的軟件包要處理較多的包依賴關系,這就更讓人頭疼了,最常見linux軟件安裝方式有三種:
本文主要介紹Linux中RedHat或CentOS發行版的軟件包管理。
一、軟件包的表現形式:
(1)、軟件的源代碼,需要自己動手編譯它。這種軟件安裝包通常是用gzip壓縮過的tar包(后綴為.tar.gz)。
源碼安裝的好處是不會受到平臺的限制,而且能夠根據自己的系統和平臺自己優化一些選項,所以這個是比較推薦的一種安裝方式,缺點是對于軟件的依賴關系只能靠自己的經驗來解決了。
(2)軟件的可執行程序,也是二進制軟件包。
其實可以細分為rpm包與yum包安裝。RPM為最常見的兩類軟件包管理工具,他們的安裝的時候不要需要網絡,只要下載下來在系統上安裝即可。rpm包的使用容易受平臺和系統的限制,所以要根據自己的linux的分支版本以及cpu平臺等來決定下載和使用何種軟件包。而且需要自己處理軟件的依賴關系。
redhat系列軟件安裝包通常被是一個RPM包(Redhat Linux Packet Manager,就是Redhat的包管理器),后綴是.rpm。
二進制更方便的一種安裝形式就是yum。這種方式的安裝軟件的時候需要聯網,好處是能自動處理軟件間的依賴關系,比較推薦。
Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器?;赗PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝. [百度百科]
(3)腳本安裝,其實就是安裝命令的堆積,當然也要對系統比較了解才能寫出好的腳本,既可以包含yum這類,也可以使用rpm這類命令。如lnmp一鍵安裝腳本。
二、軟件軟件安裝:
第一部分:搞定rpm
RPM是Red Hat公司隨Redhat Linux推出了一個軟件包管理器,通過它能夠更加輕松容易地實現軟件的安裝、卸載、升級、查詢、校驗、數據庫維護。
1.安裝軟件:
命令:rpm {-i|–install} [install-options] PACKAGE_FILE …
選項:-v: verbose表示顯示附加信息 [可選]
-h: 以#顯示程序包管理執行進度;每個#表示2%的進度 [可選]
-i:install 不能省略,表示安裝
[install-options]
–-test: 測試安裝,但不真正執行安裝過程;dry run模式;
–-nodeps:忽略依賴關系;(這樣比較麻煩,而且通常無法使用)
–-replacepkgs: 重新安裝;
–-nosignature: 不檢查來源合法性;
–-nodigest:不檢查包完整性;
–-noscipts:不執行程序包腳本片斷;
%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
2.軟件包升級:
命令:rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
或 rpm {-F|–freshen} [install-options] PACKAGE_FILE …
-U:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”;
-F:安裝有舊版程序包,則“升級”;如果不存在,則不執行升級操作;
–-oldpackage:降級;
–-force: 強行升級;
3.卸載rpm包:
命令:rpm {-e|–-erase} [–-nodeps] [–-noscripts] [–-notriggers] [–-test] PACKAGE_NAME …
選項:-e: earse表示從系統中刪除軟件,軟件包必須是已安裝的軟件包名稱,不是軟件包的文件名
4.安裝軟件:
命令:rpm {-q|–query} [select-options] [query-options]
[select-options]
–a: 所有包;
–f: 查看指定文件是由哪個包安裝生成;
–p:不檢查包完整性;
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
[query-options]
–c: 查詢程序包的配置文件;
–d: 查詢程序包的幫助文檔;
–i:程序包的詳細信息;
–l:指定程序安裝完成后生成的所有文件;
-R:查詢指定的程序包所依賴的CAPABILITY;
–provides:列出指定程序包所提供的CAPABILITY;
5.校驗:
命令: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
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
導入所需要公鑰:
命令:rpm –import /PATH/FROM/GPG-PUBKEY-FILE
CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7
軟件依賴關系:
由于開源的多態性,Linux 操作系統中的軟件之間的依賴性關系處理一直令人感到頭疼。如果 package_a 依賴于 package_b,那么在一個沒有安裝 package_b 的系統中,package_a 是不被系統推薦安裝的,強制安裝很可能會導致軟件無法正常工作。基于以上 package_a 和 package_b 的關系,在一個干凈的系統中 ( 未安裝 package_a 或 package_b),欲安裝 package_a,錯誤通常會表現為:
[root@vm227 Packages]# rpm -ivh php-5.3.3-26.el6.x86_64.rpm
error: Failed dependencies:
httpd is needed by php-5.3.3-26.el6.x86_64
httpd is needed by php-5.3.3-26.el6.x86_64
php-cli(x86-64) = 5.3.3-26.el6 is needed by php-5.3.3-26.el6.x86_64
php-common(x86-64) = 5.3.3-26.el6 is needed by php-5.3.3-26.el6.x86_64
嵌套的依賴關系:
如上示例為最理想的依賴關系,實際應用中往往最令人頭疼的是 package_a 依賴于 package_b/c/d/e/f 等多個包 , 而 package_b/c/d/e/f 等包又依賴于 package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 … … 為保證軟件的正常使用,必須找到所有依賴包以及子依賴包并且安裝。過多的依賴關系大大降低了 Linux 軟件安裝的用戶友好性。所以針對此類問題,使用了更高級的包管理策略去解決 – Yum 。
第二部分:搞定YUM
YUM:RPM包的前端管理工具,解決包依賴性,可以在多個庫中定位軟件包。
1.YUM命令的使用:
命令:rpm {-i|–install} [install-options] PACKAGE_FILE …
顯示倉庫列表:repolist [all|enabled|disabled]
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] […]
清理本地緩存:
# yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
構建緩存:
# yum makecache
搜索:以指定的關鍵字搜索程序包名及summary信息;
# yum search string1 [string2] […]
查看指定包所依賴的capabilities:
# yum deplist package1 [package2] […]
查看yum事務歷史:
# yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
包組管理的相關命令:
* groupinstall group1 [group2] […]
* groupupdate group1 [group2] […]
* grouplist [hidden] [groupwildcard] […]
* groupremove group1 [group2] […]
* groupinfo group1 […]
2、配置額外YUM庫(客戶端):
方法一:在/etc/yum.repos.d目錄下新建.repo結尾的文件或者修改原有的repo文件,更方便的是直接下載第三方的yum源的配置文件,如網易163的源文件。
方法二:用光盤搭建本地yum源,但是你會發現很多光盤包含的軟件包都比較舊。
yum客戶端:
配置文件:
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.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(默認)
第三部分:搞定linux源碼安裝
程序包編譯安裝:
源代碼 –> 預處理 –> 編譯(gcc) –> 匯編 –> 鏈接 –> 執行
源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關系;
C、C++: make (configure –> Makefile.in –> makefile)
java: maven
C代碼編譯安裝三步驟:
./configure:
(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile;
(2) 檢查依賴到的外部環境;
make:
根據makefile文件,構建應用程序;
make install
開發工具:
autoconf: 生成configure腳本
automake:生成Makefile.in
建議:安裝前查看INSTALL,README
第一步:configure腳本
選項:指定安裝位置、指定啟用的特性
–help: 獲取其支持使用的選項
選項分類:
安裝路徑設定:
–prefix=/PATH/TO/SOMEWHERE: 指定默認安裝位置;默認為/usr/local/
–sysconfdir=/PATH/TO/SOMEWHERE:配置文件安裝位置;
System types:
Optional Features: 可選特性
–disable-FEATURE
–enable-FEATURE[=ARG]
Optional Packages: 可選包
–with-PACKAGE[=ARG]
–without-PACKAGE
第二步:make
第三步:make install
安裝后的配置:
(1) 導出二進制程序目錄至PATH環境變量中;
編輯文件/etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導出庫文件路徑
編輯/etc/ld.so.conf.d/NAME.conf
添加新的庫文件所在目錄至此文件中;
讓系統重新生成緩存:
ldconfig [-v]
(3) 導出頭文件
基于鏈接的方式實現:
ln -sv
(4) 導出幫助手冊
編輯/etc/man.config文件
添加一個MANPATH
如果遇到錯誤提示,也別急,通常是十分簡單的問題:
1)沒有安裝C或C++編譯器;
確診方法:執行命令gcc(C++則為g++),提示找不到這個命令。
解決方法:將Linux安裝光盤mount上來,然后進入RPMS目錄,執行命令:
#rpm -ivh gcc* (哈哈,我們用到了第二種安裝方式)
2)沒有安裝make工具;
確診方法:執行命令make,提示找不到這個命令。
解決方法:將Linux安裝光盤mount上來,然后進入RPMS目錄,執行命令:
#rpm -ivh make*
3)沒有安裝autoconf工具;
確診方法:執行命令make,提示找不到這個命令。
解決方法:將Linux安裝光盤mount上來,然后進入RPMS目錄,執行命令:
#rpm -ivh autoconf*
4)缺少某些鏈接庫;
確診方法:在make時,提示需要某些文件。
解決方法:安裝包含這個文件的包,這就需要積累了。
5)軟件依賴;
這時候只有安裝軟件的依賴關系,按照先后順序安裝軟件。
第四部分:搞定bin文件安裝
1.以bin結尾的安裝包,這種包類似于RPM包,安裝也比較簡單
2.給文件加上可執行屬性:chmod +x ******.bin
3.執行命令:./******.bin
4.ok:
總結
本文linux下,程序包的幾種形式以及安裝方法水平有限, 如果有錯誤及時指出;
作者:chrony
感謝: MageEdu
原創文章,作者:chrony,如若轉載,請注明出處:http://www.www58058.com/15839