Linux的各個release版本開發商,在發布各種應用程序,以及一些團體發布應用程序時,通常會根據發布的程序所適應的開發語言,使用環境,預設參數等,事先編譯完成一個可以在相應平臺上安裝的程序包供使用者直接使用,該程序包含有安裝前(preinstall)操作系統環境檢測的腳本,程序包中所有文件的相關信息,程序預定義的配置參數文件,程序運行時的解釋器庫文件,程序的二進制文件,以及程序安裝后(postinstall)把相應信息寫入程序管理平臺的預設腳本,以方便于后續程序自身升級,卸載等,最終上述一個完整的程序包被release發布。
針對此類發布的程序包目前常見有兩種管理方式:
1、DPKG方式:主要由Debian系列的release版本使用,如Ubuntu;
2、RPM方式:主要由RedHat系列,如RHEL,CentOS,Fedora以及Slackware系列的S.u.S.E等等;
此外由于程序包在preinstall時會根據腳本檢查是否滿足安裝條件,例如安裝本程序前需要預先存在其他一個或多個程序(程序的相互依賴性),如果滿足則進行后續安裝過程,如果不滿足則退出安裝過程;所以,為了簡化方便程序包的安裝,Linux的開發商同時提供了一種面向使用者的程序包管理的前端工具,目的就是為了解決程序的依賴性安裝,以及程序的更新升級,卸載,查詢等日常管理使用。針對上述兩種方式分別使用1、apt-get工具;2、yum工具。
RPM和SRPM區別
1、RPM(RedHat Packages Manager):是由Distribution廠商預先根據release版本已編譯打包完成的程序包;
2、SRPM(Source RPM):是由Distribution廠商提供的未編譯的,含有原始碼的程序包;
程序包的命名定義格式
程序名-主版本號.次版本號.修正號-release發布號.Distribution版本.arch架構(i386/i586/i686/x86_64等)
YUM工具
由于RPM程序包在安裝前會檢查程序依賴性,如果不符合,則無法正常安裝,此時,其前端工具YUM程序應運而生。YUM原理機制如下:
1、YUM服務器端,含有全部或者大部分RPM程序包,并生成所有程序包的清單列表(repository倉庫清單);
2、客戶端主機安裝指定程序包時,首先根據RPM包中的preinstall腳本檢查主機硬件以及OS內核是否滿足安裝環境要求,其次檢查安裝程序的其他軟件依賴性要求,從YUM服務器下載程序包清單列表,對照依賴性要求檢查主機是否滿足,如果存在未安裝的依賴性程序包軟件,則向YUM服務器提交下載相應程序包的請求,并安裝完成,通過依賴性檢查后,正式安裝指定的程序包,安裝完成以后,把該程序包的相應信息記錄在主機本地的RPM數據庫中,供日后查詢,升級,卸載等操作使用;
YUM服務器保存清單列表的路徑:…./repodata/
主機保存本地清單的路徑:/var/cache/yum/
主機RPM程序包管理數據庫路徑
RPM管理程序
一、RPM安裝
rpm {-i|–install} [install-options] PACKAGE_FILE …
-i:install 安裝
-v:verbose 詳細過程信息
-vv:更詳細的過程信息,類似debug信息
-h:hash 以hash進度條的方式顯示安裝進行,默認是2%一個進度步長
–nodeps:忽略程序包依賴性檢查
–test:測試性安裝,dry run模式,并非實際的真實安裝
–noscripts:安裝時不執行預設置的腳本,更細化的腳本(禁用)
–nopre
–nopost
–nopreun
–nopostun
–nosignature:忽略數字簽名檢查
–justdb:RPM數據庫破壞或者有錯誤存在,可以利用此選項來更新程序包在RPM數據庫中的信息
–percent:如果程序包是被打包壓縮的形式提供,則此選項可以在安裝時顯示解包的進度百分比信息
–force:強制安裝,如果已存在相應文件或者程序包則覆蓋安裝,同時包含replacefiles以及replacepkgs兩個選項功能
–replacefiles:如果已存在需安裝的文件,則直接覆蓋原文件
–replacepkgs:如果存在需安裝的程序,則直接覆蓋原程序
–prefix NEWPATH:安裝程序到指定的路徑(而非程序包預先配置的默認路徑)
二、RPM更新與升級
rpm {-U|–upgrade} [install-options] PACKAGE_FILE …
rpm {-F|–freshen} [install-options] PACKAGE_FILE …
upgrade:無則安裝,有則更新
freshen:無則錯誤,有則更新
option可選項基本與install操作相同
三、RPM查詢,如果是已經被安裝過的程序包,實際就是查詢/var/lib/rpm下的數據庫;如果是尚未安裝的程序包,則是查詢repository倉庫中的數據庫
rpm {-q|–query} [select-options] [query-options] PACKAGE_NAME
-q:僅查詢package_name指定的程序
-qa:查詢package_name指定的所有程序
-qf:查詢后面指定的file是屬于哪個已經安裝的程序
-qi:列出查詢程序的詳細信息(information),包括Distribution,release,說明等等
-ql:列出程序中完整的文件與目錄信息(list)
-qc:列出程序包的所有配置文件(configure files),主要就是/etc下的配置文件
-qd:列出程序包的所有幫助文件(doc files)
-qR:列出程序包相依賴性的程序文件(Requires)
-q –scripts:列出程序包安裝或者卸載進程指定的腳本
-q –provides:列出程序包自身能提供的功能
-qp[iflcdR….]:查詢未安裝的程序包
四、RPM驗證與數字簽名
rpm {-V|–verify} [select-option] [verify-option] PACKAGE_NAME
-V Package_Name:驗證指定的程序包所包含的文件是否被改動過
-Va 不加任何參數:驗證所有可能被改動的程序包
-Vp Package_File_Name:驗證指定的程序包是否被改動過
-Vf file_Name:驗證指定的文件是否被改動過
如果相應的程序或者文件發生改變,通過Verify驗證后,會提示如下改變的參數:
S:size-文件大小
M:Mode-文件類型或者文件的屬性
5:MD5-文件內容
D:Device的Major/Minor改變
L:Link路徑改變
U:owner改變
G:group改變
T:modify Time改變
P:caPabilities功能改變
c:configure文件
d:document文件
l:license文件
r:read me文件
g:ghost文件,鬼文件,通常指該文件不被某個程序所包含,較少見的一種情況
數字簽名:
GNU Privacy Guard(GPG)系統,使用不對稱技術實現,RPM發布者擁有私鑰,RPM使用者利用發布者提供的公鑰來驗證數字簽名的有效性,并信任其發布的程序包;
數字簽名驗證步驟:
1、從正規途徑獲得發布者的公鑰
途徑:官網,授權鏡像站點,DVD光盤等
2、導入(安裝)公鑰到本地主機操作系統
導入命令:rpm –import /PATH/……GPG-KEY…..(GPG-KEY關鍵字)
查詢導入的公鑰:rpm -qi | grep *pubkey*(pubkey關鍵字)
3、利用導入的公鑰驗證數字簽名的有效性
4、通過數字簽名驗證,接受其發布的RPM程序包,執行后續的安裝,升級等操作
五、RPM刪除或者卸載
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
RPM數據庫重建:用戶本地/var/lib/rpm下數據庫的重建
rpm –rebuilddb
YUM前端程序管理工具
一、安裝與升級操作
yum {install|update|upgrade}
-y:yes,安裝時不需要交互式確認
–installroot=/path:指定程序包安裝的路徑,而非默認的程序路徑
update (空):后面未指定任何程序包或者文件,則升級更新當前所有已安裝的程序包
update PACKAGES_NAME:更新指定的程序包
upgrade 除了更新升級已安裝的程序包之外,連陳舊的淘汰程序包也升級
二、查詢操作
yum {list|info|search|provides|whatprovides}
list:顯示已安裝的程序包信息,類似rpm -qa
search:以某個程序包或者描述的關鍵字搜索程序包
info:顯示指定程序包的詳細信息,類似rpm -qi
provides:以文件為關鍵字搜索程序包,類似rpm -qf
三、刪除卸載操作
yum remove PACKAGES_NAME
四、YUM倉庫
yum工具使用倉庫清單方式找到所需的程序包,對于YUM服務而言,清單主要是指repodata目錄中的數據,對于客戶端主機而言,安裝,升級,卸載程序包以后,會在本地/var/cache/yum目錄下保存記錄本地的程序包清單;
此外,如果使用rpm方式安裝,升級,卸載程序包,會在主機/var/lib/rpm目錄下生成一個rpm的數據庫,供rpm方式進行程序包的管理(查詢,升級,卸載等操作);
創建YUM倉庫步驟:
1、在yum程序配置文件目錄下,增加或者新建.repo后綴的倉庫名錄(可以在系統原有的repo倉庫中新增或者完全新建一個.repo后綴的倉庫)
2、通過vim編輯倉庫清單配置文件
3、清空主機原有倉庫清單信息
4、重新生成最新的清單
通過上述步驟配置,后續就可以直接通過YUM方式進行程序包的安裝,升級,查詢,卸載操作了,通過YUM方式很好的解決了程序包相互依賴性的問題,對于不需要額外自定義配置參數的程序包生成并安裝的使用者大大方便了RPM程序包的管理操作。
有時候,源倉庫的可靠性對系統而言是非常重要的,一般我們都使用官方或者可信任的第三方所提供的倉庫鏡像點進行在線方式的YUM管理使用,但是針對臨時性的第三方或者自定義的倉庫資源,我們可以采用臨時啟用生效的模式進行操作,例如,上文中我通過臨時掛載DVD光盤方式制定了一個repo程序包倉庫資源,如果不希望其永久生效的話,可以采用如下方式進行操作:
1、首先掛載DVD設備
2、創建repo臨時性的倉庫資源配置文件
3、臨時使用時通過yum命令選項啟用
SRPM程序包如何使用
當我們從受信任的站點資源獲得含有原始代碼的SRPM程序包后,如何重新編譯?
1、首先,通過受信任的站點資源下載src.rpm程序包
2、通過rpm -ivh xxxx.src.rpm解開程序包(并非實際意義上的安裝),命令執行之后解開(安裝)的路徑默認是指向/root/rpmbuild
一般在此路徑下會存在如下幾個目錄,分別代表不同的含義
SOURCES:主要存放原始碼的tar包,補丁包patch,以及config配置文件等
SPECS:主要存放程序包的相應信息文件
BUILD:主要存放源代碼編譯過程中生成的文件
RPMS:主要存放編譯完成以后生成的.rpm程序包
SRPMS:主要存放編譯完成以后生成的.srpm程序包
3、SPECS下的.spec文件主要是該程序包的詳細信息文件
[root@localhost rpmbuild]# cat ~/rpmbuild/SPECS/cloud-utils-growpart.spec
Name: cloud-utils-growpart
Version: 0.27
Release: 13%{?dist}
License: GPLv3
Group: System Environment/Base
Source0: https://launchpad.net/cloud-utils/trunk/%{version}/+download/cloud-utils-%{version}.tar.gz
URL: https://launchpad.net/cloud-utils
Source1: LICENSE
BuildArch: noarch
Summary: Script for growing a partition
Group: System Environment/Base
———上述說明此程序包的基本信息————–
Requires: gawk
Requires: util-linux
———此程序包的依賴性信息————
# gdisk is only required for resizing GPT partitions and depends on libicu
# (25MB). We don't make this a hard requirement to save some space in non-GPT
# systems.
#Requires: gdisk
# patches_base=0.27
Patch0001: 0001-suppress-partx-usage-error.patch
———-下面以%開始的分段落信息表示在編譯過程中的處理腳本—————
%description
This package provides the growpart script for growing a partition. It is
primarily used in cloud images in conjunction with the dracut-modules-growroot
package to grow the root partition on first boot.
%prep
%setup -q -n cloud-utils-%{version}
%patch0001 -p1
%build
%install
cp %{SOURCE1} LICENSE
# Create the target directories
mkdir -p $RPM_BUILD_ROOT/%{_bindir}
mkdir -p $RPM_BUILD_ROOT/%{_mandir}/man1
# Install the growpart binary and man page
cp bin/growpart $RPM_BUILD_ROOT/%{_bindir}/
cp man/growpart.* $RPM_BUILD_ROOT/%{_mandir}/man1/
————該程序生成的文件—————
%files
%doc ChangeLog LICENSE
%{_bindir}/growpart
%doc %{_mandir}/man1/growpart.*
———–該程序的日志改變記錄————
%changelog
* Tue Mar 18 2014 Lars Kellogg-Stedman <lars@redhat.com> – 0.27-13
– suppress partx usage error
* Tue Jan 14 2014 Lars Kellogg-Stedman <lars@redhat.com> – 0.27-11
– import into RHEL
[root@localhost rpmbuild]#
4、編譯過程
命令 rpmrebuild [ba|bb] xxxx.spec
-ba:編譯并同時生成rpm以及srpm程序包
-bb:編譯并僅生成rpm程序包
原創文章,作者:N24_shishen,如若轉載,請注明出處:http://www.www58058.com/61605