• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • RPM(Redhat Package Management)詳解

    發表于:2007-05-26來源:作者:點擊數: 標簽:
    1)RPM(Redhat Package Management)是由RedHat 開發 的,在 Linux 系統下的系統包管理工具。 RPM包的產生目的:使包的安裝和卸載過程更容易,它能夠證實一個包是否已經正確安裝了,可以簡化包的建立過程,可以從源代碼建立整個包,它能用于不同的體系結構

     




    1)RPM(Redhat Package Management)是由RedHat開發的,在Linux系統下的系統包管理工具。

    RPM包的產生目的:使包的安裝和卸載過程更容易,它能夠證實一個包是否已經正確安裝了,可以簡化包的建立過程,可以從源代碼建立整個包,它能用于不同的體系結構。RPM系統已經成為現在Linux系統下包管理工具事實上的標準,并且它也移植到很多商業的unix系統之下。

    RPM包組成:由包標簽對它標識,包標簽包含軟件名,軟件版本,包的發行版本幾部分。在包的內部還包含包的建立時間,包的內容描述,安裝包的所有文件的大小,數字簽名以證實包的完整性等信息。RMP包還包含包內的文件信息,其中包括:每個文件的文件名,每個文件的權限,文件的屬組和擁有者,每個文件的md5校驗和,文件的內容等。

    RPM包名的組成:rpm包的名字都包含一個后綴“arch.rpm”,arch 指的是體系結構,對于Intel平臺的有i386、i586、i686等,你所安裝的包必須要與機器上的共享庫的版本相匹配。如果你發現某個RPM包沒有安裝,你可以自己安裝。任何時候,你都可以(必須是root用戶)安裝RPM包。

    RPM包管理系統提供的功能:安裝新的包,卸載舊的包,將一個舊包升級為新的包,獲得已經安裝包的信息等。

    詳細講述RPM源碼包的構成:

    RPM需要一系列目錄完成建立的工作。正常的目錄結構通常由一個頂級目錄/usr/src/redhat/和五個子目錄構成。這五個子目錄分別是:

    SOURCES------包含原始的源文件和補丁文件。
    SPECS--------包含控制RPM包建立過程的spec文件。
    BUILD--------包含源碼解包和軟件建立的目錄。
    RPMS---------包含建立過程創建的二進制包文件。
    SRPMS--------包含建立過程創建的源碼包文件。
    (在RPMS或SRPMS目錄下通常還會有關于RPM包目標平臺的目錄。例如,i386、i586、i686等代表與Intel兼容cpu的平臺,noarch目錄下的RPM包代表可以在任何平臺下執行。)

    SPEC文件
    spec文件是整個RPM包建立過程的中心,它的作用就如同編譯程序時的Makefile文件。spec文件包含建立一個RPM包必需的信息,包括哪些文件是包的一部分以及它們安裝在哪個目錄下。這個文件一般分為如下的幾節:

    (1) Preamle(序言)

    序言包含用戶請求包的信息時所顯示的內容。它可以包含包的功能描述、包的軟件版本、版權信息和所屬的包組等。Summary 是一行關于該軟件包的描述,Name 是該軟件包的基名,Version 是該軟件的版本號,Release 是 RPM 本身的版本號,如果修復了 spec 文件中的一個錯誤并發布了該軟件同一版本的新 RPM,就應該增加發行版號。License 應該給出一些許可術語(如:"GPL"、"Commercial"、"Shareware"),Group 標識軟件類型。那些試圖幫助人們管理 RPM 的程序通常按照組列出 RPM。您可以在usr/share/doc/rpm-4.0.4/GROUPS 文件看到一個 Red Hat 使用的組列表(假設您安裝的 RPM 版本是 4.0.4)。但是您還可以使用那些組名以外的名稱。Source0、Source1等等給這些源文件命名(通常為 tar.gz 文件)。% 和 % 是 RPM 宏,它們擴展成為頭中定義的 rpm 名稱和版本。

    要注意的是,你不要在 Source 語句中包含任何路徑。缺省情況下,RPM 會在 /usr/src/redhat/SOURCES 中尋找文件,請將您的源文件復制或鏈接到那里。(要使 spec 文件盡量可移植的話,應當盡量避免嵌入自己開發機器上的假想路徑。其他開發人員就可以指示 RPM 在別的目錄下查找源文件,而不用修改您的 spec 文件。)

    接下來的部分從 %description 行開始。您應該在這里提供該軟件更多的描述,這樣任何人使用 rpm -qi 查詢您的軟件包時都可以看到它。您可以解釋這個軟件包做什么,描述任何警告或附加的配置指令,等等。

    (2) Prep節

    Prep節進行實際的打包準備工作,它是使用節前綴%prep表示的。一般而言,這一節的主要工作是檢查標簽語法是否正確,刪除舊的軟件源程潁?園??闖絳虻膖ar文件進行解碼。如果包含補?。╬atch)文件,將補丁文件應用到解開的源碼中。它一般包含%setup與%patch兩個命令。%setup用于將軟件源碼包解開,執行%patch可將補丁文件加入解開的源程序中。

    %setup
    -n newdir---------將壓縮的軟件源程序在newdir目錄下解開。
    -c ---------------在解開源程序之前先創建目錄。
    -b num------------在包含多個源程序時,將第num個源程序解壓縮。
    -T----------------不使用缺省的解壓縮操作。

    例如:

    %setup -T -b 0
    /*解開第一個源程序文件。*/
    %setup -c -n newdir
    /*創建目錄newdir,并在此目錄之下解開源程序。*/
    %patch
    %patchN-------這里N是數字,表示使用第N個補丁文件,等價于%patch -P N
    -p0-----------指定使用第一個補丁文件,-p1指定使用第二個補丁文件。 -s------------在使用補丁時,不顯示任何信息。
    -b name-------在加入補丁文件之前,將源文件名上加入name。若為指定此參數,則缺省源文件加入.orig。
    -T------------將所有打補丁時產生的輸出文件刪除。

    (3) Build節

    這一節主要用于編譯源碼,它是使用節前綴%build表示的。這一節一般由多個make命令組成。

    (4) Install節

    這一節主要用于完成實際安裝軟件必須執行的命令,它是使用節前綴%install表示的。這一節一般是由make install指令構成,但是有時也會包含cp、mv、install等指令。

    這一節還能指定在用戶安裝的系統上,包安裝時運行的腳本。這樣的腳本稱為安裝(卸載)腳本。它可以指定包安裝前、包安裝后、包除去前、包除去后的系統必須運行的外殼程序段。在用戶安裝的系統上,為了驗證一個包是否已經成功安裝的驗證腳本也可由這一節指定。

    (5) Clean節

    這一節所描述的內容表示在完成包建立的工作之后,自動執行此節下的腳本進行附加的清除工作,它是使用節前綴%clean表示的。一般而言,這一節的內容是簡單地使用rm -rf $RPM_BUILD_ROOT命令,不需要指定此節的其它內容。

    (6) 文件列表

    這一節指定構成包的文件的列表,它是使用節前綴%files表示的。此外,它還包含一系列宏控制安裝后的文件屬性和配置信息。

    %files 列出應該捆綁到 RPM 中的文件,并能夠可選地設置許可權和其它信息。在 %files 中,您可以使用 %defattr 來定義缺省的許可權、所有者和組;%defattr(-,root,root) 會安裝 root 用戶擁有的所有文件,使用當 RPM 從構建系統捆綁它們時它們所具有的任何許可權。

    可以用 %attr(permissions,user,group) 覆蓋個別文件的所有者和許可權??梢栽?%files 中用一行包括多個文件??梢酝ㄟ^在行中添加 %doc 或 %config 來標記文件。%doc 告訴 RPM 這是一個文檔文件,因此如果用戶安裝軟件包時使用 --excludedocs,將不安裝該文件。您也可以在 %doc 下不帶路徑列出文件名,RPM 會在構建目錄下查找這些文件并在 RPM 文件中包括它們,并把它們安裝到 /usr/share/doc/%-%。以 %doc 的形式包括 README 和 ChangeLog 這樣的文件是個好主意。

    %config 告訴 RPM 這是一個配置文件。在升級時,RPM 將會試圖避免用 RPM 打包的缺省配置文件覆蓋用戶仔細修改過的配置。

    注意:如果在 %files 下列出一個目錄名,RPM 會包括該目錄下的所有文件。通常這不是您想要的,特別對于 /bin 這樣的目錄。

    (7) 改動日志

    這一節主要描述軟件的開發記錄,它是使用節前綴%changlog表示的。這個段的內容是為了開發人員能詳細的了解該軟件的開發過程,對于包的維護極有好處。

    如何創建一個RPM包:

    如果我們需要對RPM包作修改,那么我們首先需要將源碼包取來,比如我們要修改內核,那么我們可以從網上或光盤中取到內核的源代碼RPM包,如kernel-2.6.5-1.358.src.rpm,將源碼包解開:rpm -i kernel-2. 6.5-1.358.src.rpm,則該RPM中的內容將存放在目錄/usr/src/redhat/SOURCES和/usr/src/redhat/SPEC目錄中,前者存放的是源碼、補丁以及一些配置文件等,后者存放的是包對應的spec文件,如kernel-2.6.spec,現在你就可以對內核進行修改。假定我們想另外再對內核打一個補丁,比如說:mypatch-2.6.5.patch,你需要將這個補丁文件復制到/usr/src/redhat/SOURCES/目錄下,然后編輯kernel-2.6.spec文件。你需要先在定義補丁文件的最后加入對你補丁文件的初始定義,如:

    …………
    Patch10000: linux-2.6.0-compile.patch
    # Patch10010: linux-2.6.0-module-license.patch
    Patch10030: mypatch-2.6.5.patch /*新加入的補丁文件的定義*/

    # END OF PATCH DEFINITIONS
    …………

    然后在文件的后面加入對內核打補丁命令:

    …………
    %patch10000 -p1
    %patch10030 -p1   /*新加入的打補丁命令*/
    # END OF PATCH APPLICATIONS
    …………

    如果你還想對內核做其它的修改,你可以修改相應的文件或添加相應的文件,然后修改kernel-2.6.spec文件。當spec文件修改完成之后,你只需要執行 rpmbuild -ba kernel-2.6.spec 就可以生成所需要的RPM包了。另外需要注意的是,以生成內核包為例,假如我們想生成kernel-smp-2.6.5-1.358.i686.rpm包,在kernel-2.6.spec文件中包含有一些開關選項,比如,在文件的開頭需要定義創建哪些內核的RPM包,如:

    %define buildup 1
    %define buildsmp 0
    %define buildsource 1

    在通常情況下,在執行rpmbuild -ba kernel-2.6.spec 命令后,會創建一個kernel-2.6.5-1.358.i386.rpm、kernel-source-2.6.5-1.358.i386.rpm和源碼RPM包kernel-2.6.5-1.358.src.rpm。因此,當你需要創建支持SMP的內核的RPM包時,需要修改kernel-2.6.spec文件開頭時的定義為:

    %define buildup 1
    %define buildsmp 1
    %define buildsource 1
    %define -target_cpu i686

    此外,在文件的開頭還需要定義-target_cpu 為i686,從而創建i686的內核RPM包,并且需要對/usr/lib/rpm目錄下面的一些宏重新定義,比如當前目錄下面的macros文件,需要重新定義arch 和build_arch為i686。最后,執行命令 rpmbuild -ba kernel-2.6.spec --with smp 就可以。當然,如果對內核進行了相應的修改,就必須生成多個內核RPM包,以適用于多個arch,如kernel-2.4.18-3-i586-smp.rpm, kernel-2.4.18-3-athlon.rpm等。

    如何安裝以.src.rpm結尾的源碼RPM包:

    這類軟件包是包含了源代碼的rpm包,在安裝時需要進行編譯。這類軟件包有兩種安裝方法:

    方法一:
    1. 執行rpm -i your-package.src.rpm
    2. cd /usr/src/redhat/SPECS
    3. rpmbuild -bp your-package.specs 一個和你的軟件包同名的specs文件
    4. cd /usr/src/redhat/BUILD/your-package/ 一個和你的軟件包同名的目錄
    5. ./configure 這一步和編譯普通的源碼軟件一樣,可以加上參數
    6. make
    7. make install

    方法二:
    1. 執行rpm -i you-package.src.rpm
    2. cd /usr/src/redhat/SPECS (前兩步和方法一相同)
    3. rpmbuild -bb your-package.specs 一個和你的軟件包同名的specs文件

    (這時,在/usr/src/redhat/RPM/i386/ (根據具體包的不同,也可能是i686,noarch等等) 在這個目錄下,有一個新的rpm包,這個是編譯好的二進制文件。)

    4.    rpm -i new-package.rpm即可安裝完成。

    注:rpmbuild的一些用法如下

    [root@test SOURCES]# rpmbuild -ts redhat-config-cluster-1.0.7.tar.gz      -ts是將.tar.gz文件轉成.src.rpm包文件。
    Wrote: /usr/src/redhat/SRPMS/redhat-config-cluster-1.0.7-1.src.rpm

    [root@test SOURCES]# rpmbuild -tb redhat-config-cluster-1.0.7.tar.gz      -tb是將.tar.gz文件轉成二進制文件。生成的文件位置是/usr/src/redhat/BUILD/redhat-config-cluster-1.0.7/

    [root@test SOURCES]# rpmbuild -ta redhat-config-cluster-1.0.7.tar.gz      -ta是將.tar.gz文件同時轉成源碼包和二進制包兩個文件,其中源碼包生產位置是Wrote: /usr/src/redhat/SRPMS/redhat-config-cluster-1.0.7-1.src.rpm及/usr/src/redhat/RPMS/noarch/redhat-config-cluster-1.0.7-1.noarch.rpm。二進制文件位置在/usr/src/redhat/BUILD/redhat-config-cluster-1.0.7/。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>