首頁 > 軟體

Linux RPM軟體包管理

2020-06-16 17:06:05

目錄

1.軟體包的介紹
2.rpm包管理
3.rpm包管理前端工具

1.軟體包的介紹

在我們在對軟體包管理前,先對軟體包有個很好的了解,這樣更方便我們來對其進行管理。
軟體包:是具有特定功能,用來完成某一任務的特定程式或一組程式,其由基本設定和若干可選部件構成,其形式可以是原始檔碼形式也可以是目標碼形式的。
包檔案:包檔案中包含RPM包內檔案、RPM包的後設資料、安裝或解除安裝時執行的指令碼。
包的公共資料庫:包含有程式包的名稱及版本、依賴關係、功能說明、包安裝後生成的各檔案路徑以及校驗碼資訊,其位於/var/lib/rpm目錄下。
包管理器:是將編譯好的應用程式的各組成檔案打包一個或幾個程式包檔案,從而方便快捷地實現程式包的安裝、解除安裝、查詢、升級和校驗等操作。常用到的管理器有rpm包管理器,rpm包管理器的前端工具yum。

2.rpm包管理

CentOS系統上使用rpm命令管理程式包,進行安裝、解除安裝、升級、查詢、校驗和資料庫維護。

rpm - RPM Package Manager
Usage: rpm [OPTION...]

common options:

-D, --define='MACRO EXPR':定義宏表示式
--undefine=MACRO:不定義宏
-E, --eval='EXPR':列印宏表示式
--rcfile=<FILE:...>,--macros=<FILE:...>:讀取檔案來代替預設檔案
--noplugins:不啟用任何外掛
--nodigest:不檢查包完整性
--nosignature:不檢查來源合法性,忽略簽名
-r, --root=ROOT:使用ROOT作為最高階的目錄,預設‘/’
--dbpath=DIRECTORY:在目錄中使用資料庫
--querytags:顯示所知的標籤
--showrc:顯示最終的rpmrc和macro設定
--quiet:提供簡約的過程列印
-v, --verbose :列印詳細過程

1)rpm包安裝、升級和解除安裝

rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
rpm {-e|--erase} [--allmatches] [--justdb] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
--allfiles:安裝所有檔案
--test:測試安裝,但不真正 執行安裝,即dry run 模式
--allmatches:移除所有匹配的包
--badreloc:在不可定位的包上重定位檔案
-e,--erase:解除安裝包
--excludedocs:不安裝檔案
--excludepatth=<path>:跳過帶有領導的path內容的檔案
--force:代表--replacepakgs --replacefiles,為強制安裝
-F,--freshen=<packagefile>:升級已經安裝的包
-h,--hash:與-v一起,在安裝包時列印安裝過程
--ignorearch:不檢查包的結構
--ignoreps:不檢查包的作業系統
--ignoresize:在安裝前不檢查磁碟空間
-i,--install:安裝包
--justdb:更新資料庫但不修改檔案系統
--nodeps:忽略依賴關係
--nofiledigest:不檢查檔案的完整性
--nocontexts:不安裝檔案的安全環境
--noorder:do not reorder package installation to satisfy dependencies
--noscripts:不執行程式包指令碼
--notriggers:不執行任何被這個包觸發的指令碼
--nocollections:不執行任何收集行為
--oldpackage:降級安裝(慎用)
--percent:列印包安裝的百分比
--replacepkgs | replacefiles:替代安裝,覆蓋安裝
-U,--upgrade=<packagefile>:升級包

注意
(1)不要對核心做升級操作;Linux支援多核心版本並存,因此,可以直接安裝新版本核心
(2)如果原程式包的組態檔安裝後曾被修改,升級時,新版本提供的同一個組態檔並不會直接覆蓋老版本的組態檔,而把新版本的檔案重新命名(FILENAME.rpmnew) 後保留
(3)upgrade :安裝有舊版程式包,則“升級”,如果不存在舊版程式包,則“安裝”;freshen :安裝有舊版程式包,則“升級”,如果不存在舊版程式包,則不執行升級操作。

從上面可以看出,選項真不是一般多,實際上我們只是用些一般的操作
安裝用:rpm -ivh Package_file
升級用:rpm -Uvh Package_filerpm -Fvh Package_file
解除安裝用:rpm -evh Package_file
實際上只有在剛安裝的系統上我們才會用到rpm命令來安裝、解除安裝、升級,系統基礎設定好後,就一般不用rpm,因為很多軟體包都是帶有依賴關係的,rpm安裝的時候會很麻煩,後期我們會用到yum包管理工具,下面會說到。

2)rpm包查詢和校驗

rpm {-q|--query} [select-options] [query-options]
rpm {-V|--verify} [select-options] [verify-options]

[select-options]:

-a, --all :所有檔案
-f, --file:檢視指定的檔案由哪個程式包安裝生成
-g, --group:包所在組
-p, --package:針對尚未安裝的程式包檔案做查詢操作
--pkgid:包id
--hdrid :包頭識別
--triggeredby:查詢觸發包
--whatrequires:查詢指定的 CAPABILITY 被哪個包所依賴
--whatprovides:查詢指定的 CAPABILITY(能力)由哪個包所提供
--nomanifest:do not process non-package files as manifests

[query-options]:

--changelog:查詢rpm 包的changelog
-c:查詢程式的組態檔
-d:查詢程式的文件
-i:information
-l:檢視指定的程式包安裝後生成的所有檔案
--scripts:程式包自帶的指令碼
--provides:列出指定程式包所提供的CAPABILITY
-R:查詢指定的程式包所依賴的CAPABILITY

[verify-options]:

--nofiledigest:不校驗檔案完整性
--nofiles:不校驗包內檔案
--nodeps :不校驗包的依賴性
--noscript:不執行校驗指令碼

查詢結果所代表的意義:

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

總的來說查詢用的還挺多的,-qa,-qf,-qp,-q --whatprovides 等挺使用的,而校驗的話,我沒怎麼用過。
rpm除了上面提到的還有其他選項功能,大家可以用幫助檢視。實際上,上面也提到了,一般我們也就用rpm來做查詢用,其他的功能有更好的工具來做,例如使用yum來管理安裝包。

3.rpm包管理的前端工具:yum

YUM: Yellowdog Update Modifier ,rpm的前端程式,可解決軟體包相關依賴性,可在多個庫之間定位軟體包,up2date的替代工具。
要想使用yum工具,需要進行相關的設定。

1)yum repository設定

yum repository:yum repo,儲存了眾多的rpm包,以及包相關的後設資料檔案,放置於特定目錄repodata下。
yum 相關的檔案:

為所有repository提供公共的設定資訊:/etc/yum.conf
為repository 的指向提供設定資訊:/etc/yum.repos.d/*.repo
安裝紀錄檔:/var/log/yum.log
快取目錄:/var/cache/yum/$basearch/$releasever

yum的repository組態檔中可用的變數

$releasever:當前OS 的發行版的主版本號
$arch:平台,i386,i486,i586,x86_64等 等
$basearch:基礎平台;i386, x86_64
$YUM0-$YUM9:自定義變數

yum的repository組態檔中可選用的

http(s):// ;ftp://file://

/etc/yum.repos.d/*.repo中我們可以看到.repo檔案中所需的一些設定的資訊,這裡簡單說明下:

[repository id]:這個是repo id
name=:這個是repo 名字
baseurl=:這個就是源,你可以選擇使用http://、https://、ftp://、file://中的任何幾個
enabled=:這個表示是否要啟用這個repo,1代表啟用,0代表禁用。
gpgcheck=:這個表示是否要檢查公鑰,1表示需要公鑰,0表示不需要。
gpgkey=:這個就是公鑰所在的地址(上面填1就不用)
enablegroups=是否使用組,1要,0不要(一般不用)
failovermethod=:這個有倆個選項,roundrobin表示隨機挑釁也是預設設定,priority是按照順序存取。(一般不用)
cost=預設為1000(一般不用)

上面的就是yum repository的設定了,設定好後,yum就可以使用了,當然前提是先把yum安裝包安裝好,可以使用yum命令。

2)yum命令

yum [options] [command] [package ...]

[options]

--nogpgcheck:禁止進行gpg check(公鑰)
-y:自動回答為“yes”
-q:靜默模式
--disablerepo=repoidglob:臨時禁用此處指定的repo
--enablerepo=repoidglob:臨時啟用此處指定的repo
--noplugins:禁用所有外掛

常用命令:

顯示倉庫列表:yum repolist [all|enabled|disabled]
顯示程式包:yum list [all | glob_exp1 ...] {available|installed|updates} [glob_exp1][...]
安裝程式包:yum install/reinstall package1 [package2] [...]
升級程式包:yum update/downdate [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
搜尋: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]
安裝裝及升級本地程式包:yum localinstall/localupdate rpmfile1 [rpmfile2] [...](install/update可以代替之)
組管理的相關命令:
yum groupinstall group1 [group2] [...]
yum groupupdate group1 [group2] [...]
yum grouplist [hidden] [groupwildcard] [...]
yum groupremove group1 [group2] [...]
yum groupinfo group1 [...]

一些yum的命令我們也知道了,下面來建立所需repository吧。

3.建立系統光碟的yum repository
        系統安裝光碟作為本地yum 倉庫:
        (1)  掛載光碟至某目錄,例如/media/cdrom
            # mount /dev/cdrom /media/cdrom
        (2) 在 /etc/yum.repos.d/下建立組態檔,以".repo"結尾
            [base]
            name=local repository
            baseurl=file:///media/cdrom
            gpgcheck=0
            enabled=1
4.建立多系統網路的yum repository
    1)準備:
        1.關閉防火牆sys
            檢視防火牆是否開啟:iptables -vnL
            
            centos7上關閉
                systemctl disable firewalld.service (本次關閉)
                systemctl stop firewalld.service(永久關閉)
            centos6上關閉
                (本次關閉)
                service iptables stop(永久關閉)
        2.關閉SElinux
            檢視是否關閉:getenforce
            
            設定文件來關閉
                vim /etc/selinux/config
                SELINUX=permissive
                setenforce  0
    2)建立:
        1.安裝ftp服務包
            rpm -ivh /run/media/root/CentOS 7 x86_64/Packages/vsftpd-3.0.2-21.el7.x86_64.rpm 
            rpm -ql vsftpd(兩個重要的檔案)
                /usr/lib/systemd/system/vsftpd.service
                /var/ftp
            啟動ftp服務(21埠)
                檢視埠:ss -tnl 或 netstat -ntl
                啟動ftp服務:systemctl start vsftpd 
                設為開機自動啟動ftp服務:systemctl enable vsftpd 
        2.準備yum系統安裝包
            mkdir -p /var/ftp/pub/centos/{6,7} 
            cp -r /run/media/root/CentOS 7 x86_64/* /var/ftp/pub/centos/7
            cp -r /run/media/root/CentOS 6 x86_64/* /var/ftp/pub/centos/6
                
        3.用戶端設定
            vim /etc/yum.repos.d/*.repo
            [base]
            [ftpbase]
            name=ftp repository
            baseurl=ftp://172.18.253.34/pub/centos/7($releasever)
            enabled=1
            gpgcheck=1
            gpgkey=ftp://172.18.253.34/pub/centos/7/RPM-GPG-KEY-CentOS-7
5.建立第三方的yum repository
    1.安裝http服務包
        yum -y install httpd
        rpm -ql httpd(兩個重要的檔案)
            /usr/lib/systemd/system/httpd.service
            /var/www/html
        啟動http服務(80埠)
            檢視埠:ss -tnl 或 netstat -ntl
            啟動httpd服務:systemctl start httpd 
            設為開機自動啟動 httpd服務:systemctl enable httpd 
        http頁面編輯
            vim /var/www/html/index.html 
            <h1>welcome to Magedu.com </h1> 
        
    2.準備第三方rpm相關包
        mkdir /var/www/html/app
        cp *.rpm /var/www/html/app
        createrepo  /var/www/html/app
    3.建立用戶端
        vim /etc/yum.repos.d/*.repo
        [http]
        name=http repository
        baseurl=http://172.18.253.34/app
        enabled=1
        gpgcheck=0

上面設定yum repository的步驟,可能會不全面,這就需要根據自己系統的條件設定了。安裝是會出現些問題,一般情況有兩個方面:一個是看掛載路徑是否正確,看地址是否對;另一個就是看下是否是快取的原因,清下快取。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-10/147268.htm


IT145.com E-mail:sddin#qq.com