linux程序包管理之yum
yum:之前命名為:yellow dog ,后來因為及其好用,很多發行版都以此為默認rpm程序前端管理工具,故此更名為:yellowdog update modifier,更牛的還有一個基于redhat的二次發行版也叫yellow dog
功能:
yum解決程序包依賴性前端管理工具:
Centos:yum,dnf
suse:zyyer(rpm)
yum repository:yum repo (yum倉庫)
存儲了眾多rpm包,以及包的相關元數據文件(放置于特定目錄下:repodate):
repodate:目錄所在的位置就應該是倉庫應該指向的路徑,而這個路徑指向的叫做文件服務器,其中有ftp、http、file、nfs等
yum客戶端:
配置文件:
主配置文件:/etc/yum.conf
//為所有倉庫提供公共配置(如:在安裝程序包時是否要精確的平臺匹配(exactarch=1)、 裝某一個包時是否要檢查其合法性及其完整性(gpgcheck=1,1表示開啟)是否支持插件機制(plugins=1)等等………),此文件很少動用。
各倉庫的定義地址:/etc/yum.repos.d/*.repo
//此遵循linux把大配置文件分割為小文件進行管理風格,每個文件中以.repo結尾的可以配置一個至多個倉庫,用此方法便于管理
倉庫的定義:
[repository]倉庫名
name:描述
baseurl:yum倉庫地址(其中可同時指定多個)
enabled:{1|0}:默認開啟(1為開啟)
gpgcheck:對于此倉庫的所有程序包在安裝之前是否要檢查其來源合法性及其完整性
repo_gpgcheck:是否要檢查倉庫元數據文件的簽名信息。
gpgkey:指明一個url,系其秘鑰文件地址
mirrorlist:以鏡像方式指定baseurl地地址
enablegroups={1|0}:是否支持在此倉庫中使用組來批量管理程序包。
failovermethod {roundrobin(輪尋)|priority(優先級)}:baseurl指向多個時,默認為roundrobin(意為隨機挑選),而priority則是至上而下的故障轉移方法
cost:默認為1000,如果決定把某一個倉庫cost值變小,則此倉庫則會優先應用。
yum命令的用法:
yum [options] [command] [package …]
子命令:
* install package1 [package2] […]
安裝指定程序包
* reinstall package1 [package2] […]
重啟安裝==rpm -ivh –replacepkgs P-file
* update [package1] [package2] […]
升級的指定程序包:
* downgrade package1 [package2] […]
降級指定的程序包
* check-update
檢查有哪些升級包可用
* remove | erase package1 [package2] […]
卸載指定程序包(依賴于此刪除的程序包的所有包都會被卸載)
* info […]
用于列出可用的包的描述和匯總信息
#yum info gcc
* provides | whatprovides feature1 [feature2] […]
查看指定的特性(可以是某文件)是由那個程序包提供
相當于rpm -qf
#yum provides /bin/cat /bin/ls
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
清理本地緩存:
* makecache
生成、構建緩存
* search string1 [string2] […]
根據指定的關鍵字搜索包含指定的關鍵的所有信息(模糊匹配,匹配的是程序包的包名和summary(摘要總結))
* localinstall rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use install)
* localupdate rpmfile1 [rpmfile2] […]
(maintained for legacy reasons only – use update)
安裝及升級本地程序包(并非yum倉庫中的包)
//在網上download一個程序包,如果此包擁有依賴關系。則不能用rpm -ivh,則需使用yum 只帶的本地安裝命令。如遇發現需要解決依賴關系,yum會自動從倉庫中查找安裝。解決了依賴關系問題。
注:可直接使用install,功能相同
* deplist package1 [package2] […]
查看指定包所依賴的(capabilities)能力
顯示指定程序包的依賴關系
#yum deplist p-name
* history [info|list|packages-list|packages-info|summary|ad don -info|redo|undo|roll-back|new|sync|stats]
查看yum事務歷史
查看過去的事物中發生的什么事,查詢不觸發事物,只有安裝,升級、卸載等修改類的動作才會觸發事物
#yum history
summary:只顯示摘要
#yum history summary
list :默認動作
stats:顯示統計數據
顯示倉庫列表總量:(默認顯示啟用的)
repolist [all|enabled|disabled]
顯示所有:all,
啟用 :enabled,
未啟用:disabled
顯示程序包:
yum list available| updates |installed | [glob_exp1] […]
#yum list | less
#ConsoleKit.x86_64 0.4.1-6.el6 @anaconda-CentOS-201605220104.x86_64/6.8
顯示程序包后面為@anaconda時,表示已經安裝過,并且是操作系統安裝時直接裝上的。
yum list [all | glob_exp1] [glob_exp2] […]
all :顯示所有的
#yum list all
glob_exp1:顯示glob匹配到的程序包
#yum list php*
yum list available| updates |installed | [glob_exp1] […]
available:顯示倉庫中有但并為安裝的
updates:可用的升級包
installed:已安裝的包
都可用glob模糊匹配指定程序包
包組管理相關命令
* grouplist [hidden] [groupwildcard] […]
顯示包組
* groupinstall group1 [group2] […]
安裝包組(只能安裝顯示出來可用的組)
#yum groupinstall “development-toos”
* groupupdate group1 [group2] […]
升級包組
* groupremove group1 [group2] […]
移除指定包組
* groupinfo group1 […]
包組信息
# yum groupinfo "development-toos"
其中:Mandatory表示必須安裝的包
default:默認要安裝的包
options:可選的
yum的命令行選項:
用在命令行中執行安裝卸載程序包時的選項
--nogpgcheck:禁止做包校驗 --enablerepo=(repoid) :臨時禁用指定的某repo --disablerepo=repoidglob :臨時啟用指定的repo -y:自動回答為yes -q:靜默模式 -noplugins:禁用所有插件
yum的repo配置文件中可用的變量:
為什么會用到變量:
判斷獲取當前系統發行版本號
判斷平臺架構
$releasever:當前os的發行版的主版本號
$arch :平臺
$basearch:基礎平臺(只要是32位的通通認為是i3863 )
$YUM0-$YUM9 :如果需要,自己定義
定義:http://mirrors.magedu.com/centos/$releasever/$basharch/os
創建yum倉庫
如果多個倉庫中同時擁有一個程序包,會優先應用cost值低的倉庫
createrepo [options] <directory>
options:可省略
移動到rpm所在的文件目錄
[centos@root /yum/repo]#createrepo ./
//會嘗試讀取每一個rpm包的元數據,把原數據讀出來之后,分析創建一個repo。
創建之后保存名字為repodate,可進入查看
之后添加到/etc/yum.repos.d/*.repo文件內。即可使用
用repolist列出已經配置的所有可用倉庫
程序包編譯安裝:
編譯是真正將代碼編譯成為cpu可以執行的指令的過程,能夠編譯成為自己需要版本的過程。
1.找不到合適的rpm包
2.雖然有合適的,不滿足我們的需要的功能
testapp-VERSION-release.src.rpm
//使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝。
src=source :未經過編譯的源碼包,能夠編譯成為當前硬件架構適用的程序
源代碼組織格式:
源代碼–預處理–編譯(gcc)–匯編器–鏈接–執行
多文件:文件中的代碼之間。很可能存在跨文件依賴關系:
項目打包構建管理工具:
c、c++:make(會完成以上源代碼的所有過程)
(configure –》Makefile.in (模板)–》makefile)
java:maven
C代碼編譯安裝三步驟:
(1)./configure
1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成makefile
2)檢查依賴到的外部環境;
(2)make
根據makefile文件,構建應用程序
(3)make install
(使用install命令)
開發工具:
對于 不同的程序都是不同的
autoconf:生成configure腳本
//autofile需要結合額外的配置文件去生成configure腳本。
automake:生成Makefile.in
建議:安裝前查看(軟件里自帶的)INSTALL,README
開源程序源代碼的獲取
官方自建站點
apache.org(ASF)
mariadb.org
代碼托管:
SourceForge
Github.com
code.google.com
c/c++:gcc (GUN C complier GUN的組織c編譯器)
融合了很多其他編譯器
編譯C源代碼:
前提:提供開發工具及開發環境
開發工具:make,gcc等
開發環境:開發庫,頭文件
glibc:GUN的C標準庫
通過“包組”提供開發組件
#yum grouplist
Centos 6 :“Development Tools”,"Server Platfor Development"
第一步:configure腳本
選項:指定安裝位置,指定啟用的特性。
–help:獲取其支持的選項
[root@CentOs6 httpd-2.2.29]# ./configure –help
選項分類:
安裝路徑設定:
–prefix=/Path/to/somewhere:指定默認安裝位置
//如果其他很多文件安裝地址不指定自動在默認目錄下創建子目錄
–sysconfdir=/path/to/somewhere:配置文件安裝位置:
system type:
只有在交叉編譯時才會用到
可選特性:
disable feature:禁用某個特性
enable feature:啟用某個特性
optional Packages
可選程序包,依賴到的程序包
–with-PACKAGE[=ARG]
–without-PACHAGE
第二步:make
第三部:make insatll
第二第三部一般不需要用其他附加選項,直接執行就行。
步驟實現:
1、進入源碼包目錄:設置configure屬性
#./configure –prefix=/usr/local/apache2 –sysconfigdir=/etc/http2
2、屬性執行完成之后使用make命令執行編譯
# make
3、編譯完成之后執行安裝命令安裝即完成
# 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=/usr/local/apchach2/man //此為http服務源碼安裝時指定的文件地址
原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/38187