亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

RPM包制作

系統(tǒng) 1836 0
? ? ? ? ? ? ?原創(chuàng)作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。 http://mumaren.blog.51cto.com/4180778/971507

在實際的應用之中,二進制包的使用顯得有些麻煩,最好的辦法還是將源碼包制作成為RPM包,放進yum倉庫,再使用類似于puppet來進行管理工作。這樣會方便許多,做運維的,你懂的。

其實,制作RPM軟件包并不是一件復雜的工作,其中的關鍵在于編寫SPEC軟件包描述文件。下面我詳細說明一下RPM軟件包的制作過程。

一個RPM 包的制作主要有這幾個步驟:

1 計劃好你想做什么。有的rpm包是一個軟件,但有的例如cacti是一大堆的網(wǎng)頁文件。是純粹的文件還是庫文件還是軟件源碼。

2 獲取軟件包原材料。例如二進制包等,要最原始的

3 給需要的軟件打補丁

4 制作一個可以指定安裝路徑的rpm包(較麻煩,不講)

5 考慮升級關系

6 規(guī)劃好依賴關系 寫SPEC文件,整體過程寫進去

7 制作開始。有的還有證書簽署:使用GPG密鑰簽署RPM軟件包??梢允褂胷pmbuild -ba -sign name.spec一步完成構建和簽署軟件包。使用rpm --resign name-version.rpm添加或更改GPG簽名

8 測試

其中的重點是SPEC文件的書寫

######################################

第一步:設定目錄(需大寫) 、工作目錄(紅帽6 中還有buildroot

1 設置制作目錄、需要的目錄結構 (注意: 一定不能使用root 用戶進行,至于為什么知道么?)

rpm包的制作(building)是在一個類似于工作空間的地方,這個工作空間的默認地址是 /usr/src/redhat,因為默認權限是root,所以一般自定義一個目錄。

這就是為 rpm-build 提供的目錄結構.?

  1. /usr/src/redhat/?
  2. ?
  3. |--?BUILD?
  4. ?
  5. |--?RPMS?
  6. ?
  7. |???|--?i386?
  8. ?
  9. |???`--?...?
  10. ?
  11. |--?SOURCES?
  12. ?
  13. |???|--?foo-1.2.tar.gz?
  14. ?
  15. |???|--?foo-1.2-add_feature.patch?
  16. ?
  17. |???`--?foo-1.2-change_default.patch?
  18. ?
  19. |--?SPECS?
  20. ?
  21. |???`--?foo.spec?
  22. ?
  23. `--?SRPMS?

BUILD: 源代碼解壓,編譯的車間,自己不用放東西,里面放什么不用管

RPMS: 里面還有不同的平臺的子目錄,生成的rpm包就在這里,可以用rpm交叉編譯編譯其他平臺的

SOURCES: 原材料的位置

SPECS:spec文件的存放位置

SRPMS:src格式的rpm包存放的位置,沒有平臺相關性了,沒有子目錄了

2 把源程序放在指定位置

即創(chuàng)建一個包含RPM文件的.tar.gz文件。這個 目錄還讓創(chuàng)建檔案文件更加簡單。該.tar.gz文件需要位于名為rpmbuild/SOURCES的目錄下。你還需要一個.specs文件,這個文件包 含所有建立RPM包的規(guī)范說明。該.specs文件是RPM包的核心組件,里面包括全部文件的 指示,RPM包中的文件按照這些指示進行安裝。該.specs文件應該放置在一個SPECS目錄下。

3 rpmbuild命令:

目錄結構知道之后就需要了解一下rpmbuild命令了

當spec文件創(chuàng)建好之后就是時候完成最終的工作了。請使用根目錄用戶身份安裝rpmbuild命令。在Red Hat中,請用yum install rpm-build完成這項工作。接下來,請確保所有的文件都呆在正確的地方。Tar存檔文件必須位于創(chuàng)建軟件包的當前用戶帳戶的~/rpmbuild /SOURCES 目錄下,demo.spec文件必須位于~/rpmbuild/SPECS目錄下?,F(xiàn)在你可以用rpmbuild -ba test.spec命令來創(chuàng)建軟件包了。這會在/usr/src/redhat/RPMS目錄下創(chuàng)建你的RPM文件。

--------------------------------------------------------------------------------------------------------------

#注釋:

如何更改rpmbuild的制作目錄:

rpmbuild --showrc | grep macrofiles

macrofiles這個宏定義這些宏到底在什么文件中設定,類似于profile等

這么多最后一個匹配的生效:家目錄下隱藏的rpmmacros文件

在家目錄重新定義一次即可不適用系統(tǒng)自帶的

實際上是_topdir定義

_usrsrc定義的又在_src下

更改的話在自己的家目錄下建一個.rpmmacros

里面直接寫:

%_topdir??? /home/xxx/rpmbuild

退出 再

mkdir -pv rpmbuild/{BUILD,RPMS,SOURCES,SPECSSRPMS}

-------------------------------------------------------------------------------------------

##########################################

第二步:創(chuàng)建spec 文件:這一步是最重要的!

一個spec 文件主要由幾個段落組成:

introduction section 介紹段:

prep section 準備階段:

build section 編譯階段:

build section 編譯階段:

install section 安裝階段:

clean section :清理段

files section :文件段

changelog section :改變段

每一個階段以% 加階段名開始

?

事先注意:

1注意,spec 文件很多信息都是取自宏指令,如果沒有明確指定,就會繼承 /usr/lib/rpm/macros 和其它相關宏指令的文件.

?

?

introduction section 介紹段:

就是rpm -qi可以查詢出來的那一段

先看看一個軟件包的信息: -qi查詢

?

  1. %define?name?foo?#?名字?
  2. ?
  3. %define?version?16?#version?
  4. ?
  5. Name:?%{name}?#name?就是使用的上面的宏指令?
  6. ?
  7. Version:?%{version}?#version?也是使用的上面的宏指令?
  8. ?
  9. Release:?1?
  10. ?
  11. License:?GPL?
  12. ?
  13. Group:?Applications/Productivity?#?軟件是哪個組的,更多信息查看?/usr/share/doc/rpm-version/GROUPS?
  14. ?
  15. URL:?http://www.mysqlops.com?
  16. ?
  17. Source:?ftp://www.mysqlops.com/pub/xxx.tar.gz?
  18. ?
  19. Patch0:?foo-1.2-change_default.patch?
  20. ?
  21. Patch1:?foo-1.2-add_feature.patch?
  22. ?
  23. PreReq:?unzip?#?安裝前需要什么?
  24. ?
  25. Requires:?pam?#?安裝后需要什么?
  26. ?
  27. BuildPreReq:?gcc? > =?2.96?#打包前需要什么?
  28. ?
  29. BuildRoot:?%{_tmppath}/%{name}-root?#?準備源碼文件的?chroot?的目錄?
  30. ?
  31. Summary:?A?fictional?open?source?package?for?the?offering.?#摘要?
  32. ?
  33. %description?#描述?

relocatable:是否可以更改安裝位置

summary:簡單的說明信息

Version:中間不能使用橫線

release后面還有關于平臺的宏:%{?dist},?帶判斷,只是rpm包制作者自己制作的次數(shù),rpm包的發(fā)行號

Group: 支持的可以 less? /usr/share/doc/rpm-xxx/GROUP 下查看 需要明確知道

Vendor:制作者的提供商

Source:也支持宏

BuildRoot:rpmbuild生成的文件在這個目錄之下,和chroot感覺類似

BuildRequires:依賴關系

prep section 準備階段:

%prep 這部分其它是由一些參數(shù)來組成一個 shell 腳本來從 SOURCES 中解壓源碼和應用補丁到 BUILD 目錄中來準備下面的編譯.
和 %prep 相關的宏指令
%setup
%patch

例:

?

  1. %prep??
  2. %setup?-q???#提取源碼到?BUILD?目錄;?-q?指不顯示輸出(quietly)??
  3. %patch0?-p1??#?應用?patch0??
  4. %patch1?-p1?-b?.orig???#?應用?Patch1?但是存下源文件成?.oring?的后綴??
  5. unzip?foo_data.zip???#?接下來解壓?zip?文件?

build section 編譯階段:

%build 是編譯和準備軟件,運行象一個 shell 腳本,它運行在上下文目錄指定的源碼目錄.在編譯過程中,調(diào)用腳本 .config 在本地的目錄(%configure 中配置的).
和 %build 相關的宏
%configure? # 可以通過運行 rpm -eval %configure 來看它的設置

例:

?

  1. %build??
  2. %configure?–enable-shared??
  3. CFLAGS =-O2?make?

或者直接用%configure來做,類似于%setup

?_smp_mflags 判斷是否是smp對稱多處理器

install section 安裝階段:

%install開頭:

先刪除,為了此前安裝的影響這一次

make DESTDIR指定安裝目錄

find_lang先不管

%install 是用來做 rpm 安裝所有需要的文件.這些打包的文件會復制到前面的講的 BuildRoot 中的目錄樹中.通常這個目錄是使用的 /var/tmp 中.
$RPM_BUILD_ROOT 參數(shù)來設置 BuildRoot.主要不能使用真實目錄來設置的主要原因是,在編譯的過程中有可能會有文件替換到你系統(tǒng)中的文件引起系統(tǒng)
和軟件問題.對其它的文件路徑象在 %{_mandir}, %{_bindir} , %{_sysconfdir} 等等,都是使用預先定義的宏來指定的.
默認都是跑在這個 RPM_BUILD_ROOT 目錄下的.
例:?

  1. %install?
  2. ?
  3. rm?-rf?$RPM_BUILD_ROOT???#?默認的$RPM_BUILD_ROOT?是?/var/tmp/%{name}-root?
  4. ?
  5. make? DESTDIR =$RPM_BUILD_ROOT?install???#?指定安裝文件的路徑?
  6. ?
  7. install?-m644?foo.8?${RPM_BUILD_ROOT}/%{_mandir}/man8/foo.8?

?

?

注釋:

腳本段:安裝之后有時候還有這一段 Scriptlets

這些選項可以讓你動態(tài)的使用 shell 腳本來控制安裝和刪除,
%pre,%post? 是用腳本運行在包安裝后,注意沒法交互
%preun,%postun? 用腳本運行在包刪除時
rpm -q –scripts packagename # 可以看到腳本的信息

例如:

  1. %pre?
  2. ?
  3. groupadd?-g?201?foo?
  4. ?
  5. useradd?-g?foo?-s?/bin/false?-d?/var/foo?-M?foo?
  6. ?
  7. %post?
  8. ?
  9. /sbin/ldconfig?
  10. ?
  11. chkconfig?--add?food?
  12. ?
  13. %preun?
  14. ?
  15. if?[??=?0?]?
  16. ?
  17. then?
  18. ?
  19. ?????service?food?stop? > ?/dev/null?2 > &1?
  20. ?
  21. ?????chkconfig?--del?food?
  22. ?
  23. fi?
  24. ?
  25. %postun?
  26. ?
  27. if?[??=?0?]?
  28. ?
  29. then?
  30. ?
  31. ?????userdel?foo?
  32. ?
  33. ?????groupdel?foo?
  34. ?
  35. else?
  36. ?
  37. ?????/sbin/ldconfig?
  38. ?
  39. ?????service?food?condrestart? > ?/dev/null?2 > &1?
  40. ?
  41. fi?

?

?

注意,在這個當中的數(shù)字,如果是 1 是指是第一次安裝,如果是 2 是指也許是升級.如果是 0 在 %postun , 是指被完全的刪除.

例如httpd在安裝后增加用戶等

有%pre安裝前

%post安裝后

%preun卸載前

%postun卸載后,不需要留空即可

旁注:install可以當做cp用

-----------------------------------------------------------------------------------------

clean section :清理段

%clean 是用來清理 build 后的臨時文件,主要是怕這些舊的文件影響以后編譯.主要是要刪除 $RPM_BUILD_ROOT 和運行 make clean .
例:


  1. %clean??
  2. rm?-rf?$RPM_BUILD_ROOT??
  3. make?clean??

files section :文件段

defattr 定義默認權限

%files 任何打包的文件,都需要在這個包的詳細的文件列表中,如果是目錄,包的所有者的全部目錄都在中間,%dir 來指定空目錄,可以用
%files -f /tmp/dyanmic_filelist 來指定一個文件列表.默認 %config 會替換掉配置,給原來的配置修改名字為 .rpmorig,
如果不想修改的話,就用%config(noreplace) 就會給新的配置文件名字命名為 .rpmnew.
%defattr(mode,user,group)
%attr(mode,user,group) filename
%config? 配置文件
%doc 文檔
例:?

  1. %files?
  2. %defattr(-,root,root)?
  3. %config?/etc/foo.conf?#?指定了才能在更新和刪除時有用?
  4. /usr/sbin/food?
  5. /usr/bin/foo?
  6. %doc?README?#?目錄是在?/usr/share/doc/%{name}-%{version}?
  7. %doc?/usr/share/man/man8/food.8?
  8. /usr/share/foo/?
  9. %dir?/var/lock/foo/??#?空的目錄?

?

?

changelog section :改變段

%changelog 是記錄包的修改,比如加入一個新的補丁,修改配置,日志使用 data +”%a %b %d %Y”,
需要顯示包的日志改變的信息可以使用 rpm-q –changelog.例:

%changelog
? Mon Aug 5 2002 Elvis Presley

#########################################

第三步:制作RPM

rpmbuild命令

過程可以分階段

-bb??? 制作成二進制

-bs??? 源碼形式

-ba??? 源碼和二進制兩種形式

-bl??? 制作后檢測buildroot生成但沒有包含到rpm包中的文件,注意如果生成未包含進去會出錯

-bc??? 只執(zhí)行到%

-bi??? 只執(zhí)行到%install段

-bp??? 只執(zhí)行到%prep段

本文出自 “ mumaren野豬地 ” 博客,請務必保留此出處 http://mumaren.blog.51cto.com/4180778/971507

RPM包制作


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 青青青青久久精品国产h | 国产九九在线观看播放 | 天天做天天爱天天综合网 | 成人婷婷 | 68久久久久欧美精品观看 | 国产l精品国产亚洲区久久 国产l精品国产亚洲区在线观看 | 国产精品一区二区三区四区五区 | 色天天综合网 | 日韩一区二区三区视频在线观看 | 国产日产欧产美一二三区 | 久久久久久免费精品视频 | 亚洲视频一区二区在线观看 | 福利一区在线观看 | 国模私拍视频在线观看 | 99在线免费观看 | 日韩欧美在线看 | 国产一区日韩二区欧美三 | 国产一二三区在线观看 | 日韩免费在线 | 色综合综合在线 | 青青青在线视频人视频在线 | 免费四虎永久在线精品 | 亚洲tv精品一区二区三区 | 久久这里有精品视频任我鲁 | 国产男女爽爽爽免费视频 | 欧美一级第一免费高清 | 色噜噜狠狠一区二区三区 | 妖精www视频在线观看高清 | 精品伊人 | 日本大蕉香蕉大视频在线观看 | 99视频在线精品免费 | 日韩免费影视 | 伊人伊狠亚洲综合影院 | 日韩一区二区视频 | 91热久久免费频精品黑人99 | 欧美一区二区在线观看 | 免费国产福利 | 嫩草影院麻豆久久视频 | 国产精品一区二区在线播放 | 神马我我不卡伦影视 | 免费看欧美毛片大片免费看 |