Linux程序包管理

  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廠商提供的未編譯的,含有原始碼的程序包;

Linux程序包管理 image.png

       程序包的命名定義格式

     Linux程序包管理 image.png

     Linux程序包管理   

程序名-主版本號.次版本號.修正號-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/

Linux程序包管理 image.png

主機保存本地清單的路徑:/var/cache/yum/

Linux程序包管理 image.png

主機RPM程序包管理數據庫路徑

Linux程序包管理 image.png

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驗證后,會提示如下改變的參數:

Linux程序包管理 image.png

      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后綴的倉庫)

Linux程序包管理image.png

2、通過vim編輯倉庫清單配置文件

Linux程序包管理 image.png

3、清空主機原有倉庫清單信息

Linux程序包管理 image.png

4、重新生成最新的清單

Linux程序包管理 image.png

image.png

Linux程序包管理 

Linux程序包管理

通過上述步驟配置,后續就可以直接通過YUM方式進行程序包的安裝,升級,查詢,卸載操作了,通過YUM方式很好的解決了程序包相互依賴性的問題,對于不需要額外自定義配置參數的程序包生成并安裝的使用者大大方便了RPM程序包的管理操作。


有時候,源倉庫的可靠性對系統而言是非常重要的,一般我們都使用官方或者可信任的第三方所提供的倉庫鏡像點進行在線方式的YUM管理使用,但是針對臨時性的第三方或者自定義的倉庫資源,我們可以采用臨時啟用生效的模式進行操作,例如,上文中我通過臨時掛載DVD光盤方式制定了一個repo程序包倉庫資源,如果不希望其永久生效的話,可以采用如下方式進行操作:

1、首先掛載DVD設備

Linux程序包管理 image.png

2、創建repo臨時性的倉庫資源配置文件

Linux程序包管理 image.png

Linux程序包管理 image.png

Linux程序包管理 image.png

3、臨時使用時通過yum命令選項啟用

Linux程序包管理 image.png


SRPM程序包如何使用

當我們從受信任的站點資源獲得含有原始代碼的SRPM程序包后,如何重新編譯?

1、首先,通過受信任的站點資源下載src.rpm程序包


2、通過rpm -ivh xxxx.src.rpm解開程序包(并非實際意義上的安裝),命令執行之后解開(安裝)的路徑默認是指向/root/rpmbuild

Linux程序包管理 image.png

一般在此路徑下會存在如下幾個目錄,分別代表不同的含義

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

(0)
N24_shishenN24_shishen
上一篇 2016-11-29
下一篇 2016-11-30

相關推薦

  • Linux基礎知識——SHELL之循環

    1、寫一個腳本,判斷當前系統用戶shell是否都為可登陸shell(即非/sbin/nologin),分別計算兩類用戶的個數(通過比較字符串實現) #!/bin/bash #       check the user could login&nbsp…

    Linux干貨 2016-12-13
  • 筆記整理:權限管理2-特殊權限(sst)和隱藏屬性

    特殊權限 進程訪問文件時的權限,取決于進程的發起者和其所在的屬組。還有其他權限,包括SST(Suid【可以更改進程發起者】,Sgid【可以更改進程發起者屬組】,Sticky) 查詢SUID/SGID文件   find / -perm +6000 SUID 使用特點 SUID只能作用在二進制文件上。 執行者需要對該文件具有可執行權限 只在程序運行過程…

    Linux干貨 2016-08-05
  • Linux文件類型及顏色標識整理

    Linux文件類型及顏色標識整理 Linux文件系統中有如下的文件類型: 類型1:普通文件—-à白色 類型2:目錄文件—à藍色 類型3:鏈接文件—à淺藍色 類型4:字符設備文件—à黃色 類型5:塊設備文件—-à黃色 類型6:管道文件—à青黃色 類型7:套接字文件—à粉紅色 為…

    Linux干貨 2016-10-19
  • 在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件

    在/tmp目錄下創建以tfile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。 ~]# touch /tmp/tfile-$(date +%Y-%m-%d-%H-%M-%S) ~]# tree /tmp 查看輸出結果 復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。 …

    Linux干貨 2016-11-06
  • IO重定向和管理及管道

    IO重定向   通常對程序來講,輸入輸出數據可以是鍵盤、鼠標、顯示器等;IO重定向就是將原來系統命令的默認執行方式進行改變,比如說簡單的我不想看到在顯示器輸出而是希望輸入到某以文件中的可以通過Linux重定向進行這項工作。  IO重定向和FD(File Descriptor)有關。      標準輸入(std…

    Linux干貨 2016-08-05
  • Homework Week-6 vim使用、腳本編程

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; cp /etc/rc.d/rc.sysinit /tmp/ vim /tmp/rc.sysinit 轉換為末行模式: :%s@^[[:s…

    Linux干貨 2016-09-19
欧美性久久久久