寫在前面:
博客書寫牢記5W1H法則:What,Why,When,Where,Who,How。
本篇主要內容:
● 源碼安裝軟件
● RPM軟件包管理
● YUM前端工具使用
Linux軟件包管理:
源碼安裝軟件
RPM程序包管理
yum前端工具使用
源碼安裝:
源代碼需要進行以下操作以轉換爲操作系統能夠識別的二進制程序文件:
源代碼-->預處理-->編譯-->彙編-->鏈接-->二進制
開源程序源代碼的獲取:
官方自建站點:
apache.org (ASF)
mariadb.org
...
代碼託管:
SourceForge
Github.com
code.google.com
源代碼命名規則:
NAME-VERSION.tar.gz
VERSION:major.minor.release
編譯環境:
(1)手動安裝編譯軟件環境
make gcc 等
glibc 標準庫
(2)直接安裝開發工具組“Development Tools”
源碼包安裝建議:
(1)最好將源碼包放入到/usr/local/src/
(2)最好將軟件安裝到/usr/local/。爲方便卸載,最好爲每個軟件建立獨立目錄。
(3)編譯完成後完成善後操作:
a.導出二進制程序到PATH環境變量中:/etc/profile.d/NAME.sh
b.導出庫文件路徑,/etc/ld.so.conf.d/NAME.conf
ldconfig [-v]:系統重新生成緩存
c.導出頭文件,以鏈接的方式ln -sv ...
d.導出幫助手冊。在/etc/man.config文件中添加一個MANPATH
編譯安裝步驟:
(1)./configure
在運行之前應查看軟件包的README或INSTALL文件,根據需要使用特定參數。此操作會檢查系統環境是否滿足軟件安裝要求,並生成makefile文件
--help
--prefix=DIR:程序包安裝目錄
--sysconfdir=DIR:配置文件安裝目錄
Optional Features: 可選特性
--disable-FEATURE
--enable-FEATURE[=ARG]
Optional Packages: 可選包
--with-PACKAGE[=ARG]
--without-PACKAGE
(2)make
make會搜索目錄下makefile的文本文件(文件中記錄瞭如何編譯的詳細信息)進行編譯過程簡化操作。
(3)make install
完成安裝操作
RPM程序包管理
不同linux發行版使用不同的程序包管理工具,大致分爲三類:
debian:dpt、dpkg,“.dep”格式
redhat:rpm(redhat package manager),“.rpm”
S.u.S.E:rpm
Gentoo:ports
Archlinux:
rpm包命名規則:
name-VERSION-RELEASE.ARCH[.src].rpm
VERSION:major.manor
RACH:OS.平臺
如:dhcp-4.2.5-42.el7.centos.x86_64.rpm
dhcp爲軟件名;
4.2.5爲軟件版本,其中4爲主版本號,2.5爲次版本號;
42爲發佈次數
el7.centos.x86_64意爲能夠在rhel7版本或centos7版本的64爲系統上運行。
依賴關係:
爲了重複利用既有的軟件功能,因此很多軟件會以庫的方式共享部分功能,以便其他程序進行調用。但如果安裝某軟件的時候,它所依賴的軟件在系統上並未安裝,就需要先安裝依賴軟件。
軟件安裝注意事項:
(1)軟件文件的安裝環境必須與打包時的環境需求一致或相當;
(2)需要滿足軟件的依賴關係;
(3)卸載時需要特別注意,儘量只卸載不需要的軟件,而不卸載與其有依賴關係的其他軟件,防止因依賴關係造成的系統故障。
軟件包相關信息數據庫:
/var/lib/rpm目錄
srpm:
srpm的擴展名爲.src.rpm,即Source RPM,是沒有經過編譯的源碼包文件。其安裝方法爲:
將.src.rpm的軟件包編譯爲rpm文件;
安裝rpm文件到系統。
前端工具:能夠自動解決依賴關係。
yum:rhel系列rpm包管理器的前段工具。
apt-get:dep包管理器的前段工具。
zypper:suse的rpm管理器前端工具。
dnf:fedora22+系統上的rpm包管理器的前端工具。
獲取程序包的途徑:
(1) 系統發行版的光盤或官方的文件服務器(或鏡像站點):
http://mirrors.aliyun.com,
http://mirrors.sohu.com,
http://mirrors.163.com
(2) 項目的官方站點
(3) 第三方組織:
(a) EPEL
(b) 搜索引擎
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
(4) 自動動手,豐衣足食
安裝前建議:
檢查其合法性
來源合法性;
程序包的完整性;
rpm:
RPM Package Manager
rpm [OPTIONS] [軟件包|已安裝的包名|軟件安裝後產生的文件]
安裝:{-i|--install}
升級;{-U|--upgrade}或{-F|--freshen}
卸載:{-e|--erase}
查詢:{-q|--query}
校驗:{-V|--verify}(軟件安裝後是否有修改配置文件等)
驗證:{-K|--checksig}(檢查軟件包是否有篡改)
重建數據庫:--rebuilddb
安裝與升級:
安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
升級或安裝:未安裝則安裝,已安裝老版本則升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
僅升級:僅對已安裝老版本的軟件進行升級
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
[install-options]
-v:verbose,顯示詳細信息
-vv:更加信息的信息
-h, --hash
--nodeps:不檢查依賴關係
--test:不安裝,僅測試
--nosignature:不檢查包簽名信息,不檢查來源合法性
--nodigest:不檢查包完整性信息
--replacepkgs:替換系統上已安裝軟件,即重裝
--oldpackage:指明允許舊版本替換新版本
注意:如果原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)後提供。
卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
-v:verbose,顯示詳細信息
-vv:更加信息的信息
--test
--allmatches:一般情況下,當給出的程序文件名可匹配到多個程序時,會報錯,而這個參數允許卸載所有匹配到的程序,而不是報錯。
--nodeps:卸載前不檢查依賴關係,即只卸載對應包,而不卸載依賴於此包的程序
查詢:
rpm {-q|--query} [select-options] [query-options] --qf|--queryformat FILE
[select-options]
-a, --all:查找所有已安裝的包
-f, --file FILE:查找FILE文件是由那個軟件安裝的
-p, --package PACKAGE_FILE:查詢非已安裝的軟件包中的內容
--whatprovides CAPABILITY:查詢某功能或文件是由那個包提供的
--whatrequires CAPABILITY:查詢已安裝的某包被誰依賴
[query-options]
--changelog
-c, --configfiles
-d, --docfiles
-i, --info:詳細信息
--last:按照安裝順序排序已安裝軟件,最後安裝在最上方
-l, --list:查詢文件列表
--provides:查詢包提供的功能
-R, --requires:查詢包依賴關係
--scripts:查看軟件包自帶的腳本片段
校驗:
rpm {-V|--verify} [select-options] [verify-options]
查詢軟件安裝後,那些文件做了修改(非初始狀態)
輸出釋意:
變動類型 文件類型 文件名
如:S.5....T. c /etc/dhcp/dhcpd.conf
變動類型:
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
文件類型:
c %config configuration file.
d %doc documentation file.
g %ghost file (i.e. the file contents are not included in the package payload).
l %license license file.
r %readme readme file.
驗證:
檢查軟件包簽名信息
YUM
Yellow dog Update Modifier
YUM是C/S結構的,服務器端的yum repository存儲了諸多的rpm包,以及包的相關元數據文件(repodata),通常以ftp、http/https、nfs或本地文件的方式分享到客戶端。
yum客戶端配置:
配置文件:
/etc/yum.conf:爲倉庫提供公共配置
/etc/yum.repo.d/*.repo:設置倉庫具體信息
*.repo文件格式解析:
(man 5 yum.conf 700行左右可見)
[repositoryid] name=Some name for this repository baseurl=http://path/to/repository/ ftp://path/to/repository/ file:///path/to/repository/ (這裏的url應該指定到repodata的上級目錄) mirrorlist=url://path/to/repository enabled={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} failovermethod={roundrobin|priority} 指定URL的使用順序,默認爲roundrobin,隨機,priority爲順序 可用變量: $releasever:當前發行版主版本號,如7 $arch:平臺,如ia32e $basearch:基礎平臺,如x86_64 $YUM0-$YUM9:替換系統已定義變量。
yum命令
常用參數:
-y, --assumeyes
--nogpgcheck:禁止檢查
-q:靜默模式
安裝:
* install package1 [package2] [...]
* localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install)
* reinstall package1 [package2] [...]
升級:
* update [package1] [package2] [...]
--downloadonly:只下載,不安裝
* update-to [package1] [package2] [...]
* localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install)
* check-update
* update
卸載:
* remove | erase package1 [package2] [...]
軟件組:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
查詢:
* list [...]
available:只可用與安裝的,即本地未安裝的
updates:只可更新的
installed:已安裝的
extras:列出僅本地已安裝,而其他yum源中沒有的軟件包
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* search string1 [string2] [...]
降級:
* downgrade package1 [package2] [...]
yum倉庫:
* repolist [all|enabled|disabled]
歷史記錄:
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]
緩存:
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache
依賴關係:
* deplist package1 [package2] [...]
顯示所有package1...所依賴的文件及提供這些文件的其他包名
檢查:
* check [dependencies|duplicates|obsoletes|provides|all]
會檢查當前系統上已安裝的軟件包的依賴關係異常、重複包、無用包、廢棄包。
其他:
* distribution-synchronization [package1] [package2] [...]
* shell [filename]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* load-transaction [txfile]
* help [command]
補充:
(1)install,會選擇多個源中的最新版本並安裝,如果給定的是一個文件而不是軟件包名,會安裝提供此文件的軟件包。
(2)update,後不跟軟件名,會更新所有已安裝的軟件!!!
yum源配置:
createrepo [options] <Packages_DIR>
-o --outputdir <url>:將生成的repodata目錄指定到其他目錄,默認爲Packages_DIR目錄內。