概述:
眾所周知,Linux操作系統本身,必須要借助額外的一些軟件,才能完成某些應用的,操作系統如果沒有應用程序的填充,就無法創造出生產力,這樣即使再完美的操作系統,也毫無用處。那么本章就簡要介紹一下Linux系統上對程序包的管理,分為以下三個部分:
1、程序包的基礎理論
2、rpm包管理器的使用
3、yum詳解
4、源碼包編譯安裝
5、軟件包管理實例演示
第一章 程序包的基礎理論
1、二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件
2、程序包的命名:
源碼包:name-VERSION.tar.gz
VERSION:major.minor.release
組版本號.次版本號.發行號
RPM包:name-VERSION-release.arch.rpm
VERSION:major.minor.release
release.arch:rpm包的發行號
release.os:例如2.el7.i386.rpm(el7表示支持centos7)
常見的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 其它子包
3、獲取程序包的途徑:
<1>系統發行版的光盤或官方的文件服務器(或鏡像站點)
<2>項目的官方站點
<3>第三方組織制作的包
EPEL:除發行光盤中的包外,將一些額外的常用的包發布在此
專用來搜索rpm包的站點,如:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
<4>自己制作rpm包
注意:獲取到其軟件后,要檢查其完整性,根據官方提供的校驗碼進行校驗
4、程序包管理器:
源代碼–>目標二進制格式(二進制程序、庫文件、配置文件、幫助文件)–>組織成為一個或有限幾個包文件
程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作
1、包文件組成 (每個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本
2、數據庫(公共)
程序包名稱及版本
依賴關系
功能說明
包安裝后生成的各文件路徑及校驗碼信息
….
常見程序包管理器
debian:dpt,dpkg 后綴名為.deb
ubantu屬于debian系,包管理工具與debian相同
redhat:rpm 后綴名為.rpm
S.u.S.E:rpm,但是與redhat系列不兼容,后綴為.rpm
Gentoo:ports
5、包的依賴關系:包之間可能存在依賴關系,甚至循環依賴
解決依賴包管理工具:
yum: rpm包管理器的前端工具
apt-get: deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具
第二章 rpm包管理器的使用
CentOS系統上使用rpm命令管理程序包:安裝、卸載、升級、查詢、校驗、數據庫維護
1、安裝 rpm -ivh /PATH/TO/rpm包全名
-i表示安裝
-h:以#顯示安裝過程;每個#表示2%
-v:顯示詳細過程
-vv:顯示更詳細的過程
–nodeps:忽略依賴關系(可以裝上去,但可能軟件沒法正常使用)
–replacepkgs:重新安裝,替換原有安裝
–force:強行安裝,可以實現重裝或降級
–test:測試是否能夠安裝,檢查并報告依賴關系及沖突消息,實際是沒有裝的
–nosignature:不檢查包的簽名信息,即不檢查來源合法性
–nodigest:不檢查包完整性信息(md5之類的信息)
–noscripts:安裝時不運行自帶的4類腳本
–nopre:安裝時不運行pre腳本
–nopost:安裝時不運行post腳本
–nopreun:安裝時不運行preun腳本
–nopostun:安裝時不運行postun腳本
注意:rpm可以自帶腳本,有4類腳本
preinstall:安裝之前運行的腳本,標記為%pre
postinstall:安裝完成后運行的腳本,標記為%post
preuninstall:卸載之前運行的腳本,標記為%preun
postuninstall:卸載之后運行的腳本,標記為%postun
2、升級:(選項與安裝時的選項一樣)
rpm -Uvh /PATH/TO/新的包全名 如果裝有老版本,則升級;否則,則安裝
rpm -Fvh /PATH/TO/新的包全名 如果裝有老版本,則升級;否則,退出
–oldpackage 表示降級
–force 強制升級
–test 測試升級
注意:
<1>不要對內核做升級操作,linux支持多內核版本并存,因此,直接安裝新版本內核
<2>如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本程序提供的同一個配置文件不會覆蓋原有配置文件,而是把新版本的配置文件重命名后(類似FILENAME.rpmnew樣式)存放
3、卸載:rpm -e 包名 (注意,卸載的包不能被其他包所依賴,不然其他包會不正常)
–nodeps:忽略依賴關系卸載
–almatches:卸載所有匹配指定名稱的程序包的各版本
–test 測試卸載
4、查詢:
rpm -q 包名 查詢指定包名是否已安裝
rpm -qa 查詢所有已經安裝的包
rpm -qi 包名 查詢指定包的說明信息
rpm -ql 包名 查詢指定包安裝后生成的文件列表
rpm -qc 包名 查詢指定軟件包安裝的配置文件
rpm -qd 包名 查詢指定包安裝的幫助文件
rpm -qf /PATH/TO/SOMEFILE 查詢指定的文件是由哪個RPM包安裝生成的
rpm -q –scripts 包名 查詢指定包中包含的腳本
rpm -q –provides 包名 查詢指定包的依賴關系
rpm -q –whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
rpm -q –whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
如果某個rpm包尚未安裝,我們需要查詢其相關信息:
rpm -qpi /PATH/TO/包全名 查詢未安裝的指定包的說明信息
rpm -qpl /PATH/TO/包全名 查詢未安裝的指定包要生成的文件列表
也就是在之前查詢已安裝的選項中加 -p
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件
5、校驗:檢查包安裝的文件改變信息
rpm -V 包名
如果沒有改動,則不會顯示任何信息,如果發生了變化,則顯示出9位的一個提示信息,如:
S.5….T.
每一位的意義是:(未變化的顯示為.)
S 文件大小發生變化
M 文件權限發生變化
5 文件的MD5值發生變化
D 主、次設備號發生改變
L readlink路徑發生改變
U 屬主發生改變
G 屬組發生改變
T 文件最近一次修改時間發生改變
P 性能發生改變
6、包來源合法性驗證和完整性驗證:
來源合法性驗證
數字簽名:利用非對稱加密(公鑰-私鑰),用自己的私鑰對文件的校驗碼(利用單向加密(MD5、SHA)得出文件的特征碼)進行加密
包完整性驗證
centos的公鑰在/etc/pki/rpm-gpg目錄下
/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供: RPM-GPG-KEY-CentOS-7
rpm -qa gpg-pubkey*
在安裝程序包時,可以先導入公鑰,然后再安裝,就不會再提示包的完整性無法驗證的提示信息了,導入方法為:
rpm –import /PATH/TO/公鑰路徑
導入成功后,安裝時會自動驗證
如果想手動驗證,可以利用 rpm -K 包全名 即可驗證
7、重建數據庫(rpm管理器數據庫路徑/var/lib/rpm/):
查詢、安裝、卸載、校驗操作,就是通過此處的數據庫進行
如果該數據庫壞了,就得進行數據庫重建:
rpm –rebuilddb 重建數據庫,一定會重新建立
rpm –initdb 初始化數據庫,當前無任何數據庫才建立,有就不建立
第三章 yum詳解
1、rpm程序包管理器的前端工具yum的功能:
yum服務端的功能:能夠利用文件服務器(主要是共享rpm包):通過yum支持的文件共享機制,將各rpm包通過文件服務共享,自動解決依賴關系
repository:倉庫
<1>各rpm包;
<2>依賴關系、程序包安裝后所能夠生成的文件等元數據文件(放置于特定目錄repodata下);
yum客戶端:
<1>配置文件:指定各個可用的yum倉庫
<2>緩存元數據:yum客戶端會到各可用yum倉庫獲取元數據,并緩存至本地
<3>分析元數據:分析依賴關系的包的安裝和未安裝情況,以及具體的操作請求完成元素分析,可能包括檢查依賴關系,文件列表等信息
<4>根據元數據的分析結果,執行具體操作(安裝、卸載、查看)
2、客戶端配置文件指定對應服務器的訪問方式:
根據文件服務的協議,指定服務和路徑
如果是ftp 則ftp://server/path/to/repo
如果http 則http://server/path/to/repo
如果是本地文件 則file:///path/to/repo
3、yum客戶端配置
要使用yum管理應用程序,首先要配置其可用的yum倉庫,保存在配置文件中/etc/yum.conf(保存核心配置) /etc/yum.repo.d/*.repo(保存各倉庫的信息)
配置文件格式:由兩段組成
[main] 主配置段
[repo_name] 倉庫配置段
配置repo:
[repo_ID]
name=STRING
baseurl=倉庫的訪問路徑 只需指向repodata目錄的上一級目錄即可
enabled={1|0} 是否啟用該倉庫,如果不指定,默認是啟用狀態
gpgcheck={1|0} 是否啟用gpg檢查包的完整性
gpgkey=公鑰路徑 可以在本地,也可以是服務器端路徑
enablegroups={1|0} 該倉庫是否支持程序包組的安裝
cost= 定義此倉庫的開銷,默認為1000,取值越小,越優先使用
例如:
[TEST]
name=testyum
baseurl=http://10.1.0.1/cobbler/ks_mirror/CentOS-6-x86_64/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
配置文件中可用的4個宏:
$releasever:程序的版本,對yum而言,指的是centos-release版本;只替換為主版本號,如CentOS 6.8則替換為6
$arch :平臺架構
$basearch:基礎平臺,如i686,i586等的基本架構為i386 64位系統為X86_64
$YUM0-9:在系統中定義的環境變量,可以在yum中使用
利用命令配置客戶端repo:
yum-config-manager –add-repo=http://10.1.0.1/cobbler/ks_mirror/CentOS-Xx86_64/
yum-config-manager –disable “倉庫名" 禁用倉庫
yum-config-manager –enable “倉庫名” 啟用倉庫
4、客戶端命令yum:
語法:yum [選項] 子命令
常見選項:
–nogpgcheck 安裝時不進行gpg檢查
-y 自動回答為yes
-q 靜默模式,不輸出內容
–disablerepo=REPO_ID 臨時禁用此處的repo源
–enablerepo=REPO_ID 臨時啟用此處的repo源
–noplugins 表示禁用所有插件
yum常見子命令:
install PACKAGE_NAME… 安裝指定包,可以同時安裝多個
reinstall PACKAGES_NAME… 重新安裝指定包,可以同時安裝多個
check-update 檢查可升級的包
update PACKAGE_NAME… 升級指定的程序包,可多個
技巧:如果檢查出來可用升級的版本有多個,例如有X-1.2.1 X-1.2.2 X-1.2.3想要升級到指定的版本,則可以用yum update PACK_NAME X-1.2.2 (也就是指定版本)
downgrade PACKAGE_NAME 降級指定程序包
erase|remove PACKAGE_NAME。。。 卸載指定的包,可以同時卸載多個。
注意,用yum卸載的時候,會同時卸載依賴的包,故一般用rpm命令進行卸載
whatprovides|provides /PATH/TO/SOMEFILE 查詢某文件是由哪個包安裝生成的(功能類似于rpm -qf)
repolist [all|enabled|disabled] 顯示可用的yum倉庫列表,all表示所有的倉庫信息,enabled表示可用的倉庫信息,disabled表示不可用的倉庫信息,如果不指定,默認顯示可用的倉庫信息
clean all|packages|metadata|expire-cache|rpmdb|plugins 可以指定清除本地緩存的all所有緩存信息,packages包的信息,metadate元數據信息,expire-cache過期的包的信息,rpmdb rpm數據的信息,plugins插件信息(訪問yum服務器時會緩存一些數據到本地/var/cache/yum下)
list 列出所有已安裝,和倉庫中所有未安裝的包,后面顯示為@….或installed表示已經安裝了的
list installed 表示只顯示已安裝的包的信息
list available 表示只顯示可用的,未安裝的包的信息
list “通配符風格的表達式” 列出滿足條件的包
info PACKAGE_NAME 表示顯示出指定包的信息
groupinfo "PACKAGE_GROUP_NAME" 表示顯示指定包組的信息
三個跟開發相關的常用包組
Desktop Platform Development:桌面平臺開發環境
Server Platform Development:服務器平臺開發環境
Development Tools:開發工具包
grouplist 列出所有包組信息
groupinstall “PACKAGE_GROUP_NAME” 安裝指定包組
groupremove “PACKAGE_GROUP_NAME” 卸載指定包組
history 可以顯示yum命令的使用歷史,誰、做了什么操作
yum history 表示顯示yum歷史
yum history info 6 顯示yum歷史中第6條歷史的詳細信息
yum history undo 6 撤銷yum歷史中第6條歷史所做出的改變,相當于還原
install /PATH/TO/PACKAGE_FILE 不從yum倉庫安裝包,而是從本地安裝,從本地安裝的時候,有時候會安裝不上去,因為yum會默認檢查包的完整性,要想安裝,要在包路徑后加上選項–nogpgcheck
makecache 構建緩存
search STRING 根據提供的關鍵字,搜索程序的包名及summary信息
5、yum日志:/var/log/yum.log
6、創建服務端yum倉庫
先下載倉庫中諸多的rpm包到某個目錄
創建yum倉庫:
要創建yum倉庫,必須要先安裝createrepo程序,該程序能夠自動創建repodata目錄文件
使用createrepo命令創建repodata目錄:
語法:createrepo [OPTIONS] <DIRECTORY>
基本不用加選項,直接后面跟上包的路徑,代表直接在包路徑里面生成repodata目錄
步驟:
1、下載相應的rpm包到某個目錄,本實驗為/testdir/repotest/目錄
2、切換到該rpm包目錄
3、利用createrepo命令,針對當前目錄創建repo倉庫repodate文件
4、驗證倉庫是否可用
第四章 源碼包編譯安裝
1、源碼包的相關介紹
有些包的格式為XXXXX.src.rpm這類包雖然是rpm的格式,但是包里面的內容并沒有真正編譯,對于這類包,需要利用rpmbuild命令制作成二進制格式的rpm包,而后再安裝;
還有些包直接就是src的源碼包,這樣需要編譯安裝了,另外有些時候,現有編譯過后的rpm包在有些特性上不能滿足我們的使用時,也需要手動下載源碼包,然后進行編譯安裝
開源程序源代碼的獲?。?/p>
官方自建站點:appache.org、mariadb.db
代碼托管站點:SourceForge、Github.com、code.google.com
2、源代碼組織格式:
多文件:文件中的代碼之間,很可能存在跨文件依賴關系
C、 C++: make (項目管理器, configure –>Makefile.in –> makefile)
3、C、C++編譯安裝的三步驟:
<1>./configure:
功能:
<a>通過選項傳遞參數、指定啟用特性、安裝路徑等、執行時會參考用戶指定以及Makefile.in生成makefile;
<b>檢查依賴到的外部環境,
<2>make
功能:根據makefile 文件,構建應用程序
<3>make install
功能:將文件利用install命令復制到指定路徑
在安裝前,應該查看源碼包內的INSTALL、README文檔
4、編譯C源代碼:(注意:./configure、make、make install都要cd切換到源碼包解壓展開后的目錄里面進行)
前提:提供開發工具及開發環境
開發工具:make、gcc等
開發環境:開發庫、頭文件
glibc:標準庫
以上的條件在Linux系統上通過安裝包組來提供:
centos 6:“Development Tools” “Server Platform Development”
centos 7: “Development Tools
Development” “Creative Workstation”
第一步:./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
5、編譯安裝完成后的相關操作:(假設編譯安裝的目錄在/usr/local/http2/目錄下)
<1>導出二進制程序(bin)目錄至PATH環境變量中,否則需要用絕對路徑使用編譯安裝的文件生成的二進制程序
導出方法:
在/etc/profile.d/目錄下新建一個該程序的文件名.sh的文件
在文件里面添加二進制程序路徑
export PATH=$PATH:/usr/local/http2/bin/
<2>導出庫文件路徑(lib)
新建文件/etc/ld.so.conf.d/NAME.conf,在文件中添加:/usr/local/http2/lib
讓系統重新生成緩存:ldconfig [-v]
<3>導出頭文件(include)
可以將安裝路徑下的include的cp到/usr/include目錄下
也可以創建軟連接到該目錄下
ln -sv /usr/local/http2/include/ /usr/include/http2/
<4>導出幫助手冊
編輯/etc/man.conf文件
將安裝目錄下的man路徑添加一個MANPATH條目:
MANPATH /usr/local/http2/man
第五章 軟件包管理實例演示
1、刪除kernel包后,無法啟動,并恢復之
步驟:
<1>刪除kernel并重啟
<2>插入系統安裝光盤,修改BIOS中BOOT啟動項為從光盤啟動
<3>進入rescue救援模式
<4>在救援模式下,利用光盤自帶的微型系統,運行rpm安裝命令,安裝kernel。因為進入救援模式下的系統為光盤的系統,如果用rpm安裝,則默認安裝位置是光盤上的系統,而我們希望的是安裝到本機的系統,利用df命令可以看到本機的系統被掛載到/mnt/sysimage路徑下,因此在利用rpm來安裝kernel軟件包時,需要利用–root=/mnt/sysimage
<5>安裝完成后重啟,進入本地系統進行驗證
2、源碼安裝apache
步驟:
<1>下載源碼包并解壓至某目錄
<2>cd切換到解壓目錄并查看相關編譯安裝幫助和選項信息
<3>執行./configure
<4>執行make
<5>執行make install
<6>導入二進制程序文件路徑到PATH環境變量
<7>導入庫文件
<8>導入頭文件
<9>導入man幫助文件路徑
<10>啟動服務,驗證是否安裝成功
原創文章,作者:M20-1倪文超,如若轉載,請注明出處:http://www.www58058.com/37768