亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
樓主: duanjigang
打印 上一主題 下一主題

Linux平臺軟件管理系統(tǒng)設(shè)計與規(guī)劃-進階篇(2)-rpm生成:rpmbuild 和 spec文件剖析 [復(fù)制鏈接]

論壇徽章:
0
21 [報告]
發(fā)表于 2012-12-21 13:55 |只看該作者
但是/usr/lib/rpm/macro中也有使用%define,這又是怎么回事呢?

論壇徽章:
0
22 [報告]
發(fā)表于 2012-12-22 11:58 |只看該作者
回復(fù) 21# lofeng410
這個文件是最早查找的文件,后面的文件中的定義可以把前面文件中的定義覆蓋掉。


   

論壇徽章:
0
23 [報告]
發(fā)表于 2012-12-22 12:02 |只看該作者
回復(fù) 19# lofeng410

  1. % __debug_package 1
復(fù)制代碼
這樣試下


   

論壇徽章:
0
24 [報告]
發(fā)表于 2012-12-22 13:43 |只看該作者
本帖最后由 duanjigang 于 2012-12-22 14:49 編輯

Macros (宏)

這里是根據(jù)自己的理解寫點,如果有錯誤之處請指出。

RPM 不提供那種像C語言一樣格式的對過程的宏定義,我們在spec 文件中能看到的都是單個變量的定義,比如:

  1. %define version         1.14
復(fù)制代碼
但是卻很少或者說基本看不到類似于:

  1. #define TR_HLEN         (sizeof(struct trh_hdr)+sizeof(struct trllc))
復(fù)制代碼
這樣定義過程代碼的寫法。

不過在RPM的 build 過程中有兩個動作對于大多數(shù)包來說基本上都是一樣的操作,因此 RPM 為它們設(shè)置了兩個宏定義:源代碼的解壓縮代碼的 patch 過程

  1.      The %setup macro, which is used to unpack the original sources.
  2.     The %patch macro, which is used to apply patches to the original sources.
復(fù)制代碼
%setup 宏在使用時大多數(shù)情況都是不加任何選項的,比如:

  1. Source: ftp://ftp.gnomovision.com/pub/cdplayer/cdplayer-1.0.tgz
  2. %prep
  3. %setup
復(fù)制代碼
這個過程,解釋成執(zhí)行腳本,內(nèi)容如下:

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  4. if [ $? -ne 0 ]; then
  5.   exit $?
  6. fi
  7. cd cdplayer-1.0
  8. cd /usr/src/redhat/BUILD/cdplayer-1.0
  9. chown -R root.root .
  10. chmod -R a+rX,g-w,o-w .
復(fù)制代碼
我們能看到,就是目錄切換,代碼解壓縮,檢測解壓縮結(jié)果,進入目錄,修改屬主/組和mode.
在這里需要注意幾點,在 %setup 不加任何參數(shù)時,rpm 命令執(zhí)行時默認了幾個咚咚:
第一個:build 目錄是,cdplayer-1.0,并且路徑是 /usr/src/redhat/BUILD/cdplayer-1.0
第二:刪除了原來的build 目錄
第三:對源代碼進行了解壓縮。
第四:修改屬性時需要進入cdplayer-1.0目錄。


看到這里你可能會感覺到比較迷惑,難道這些不應(yīng)該嗎?呵呵。是的,不過 rpm 在 %setup 的宏定義中提供了幾個執(zhí)行選項,可以修改默認執(zhí)行動作中的操作流程。
下來我們一一看下.

-n <name> : 設(shè)置build 目錄的名字。

因為默認的build 目錄名字是 <name>-<version>的方式,但是你也可以通過 -n name 來指定,比如:

  1. %setup -n cd-player
復(fù)制代碼
執(zhí)行的腳本過程如下:

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cd-player
  3. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  4. if [ $? -ne 0 ]; then
  5.   exit $?
  6. fi
  7. cd cd-player
  8. cd /usr/src/redhat/BUILD/cd-player
  9. chown -R root.root .
  10. chmod -R a+rX,g-w,o-w .
復(fù)制代碼
我們能看到,默認的build 名稱,是被 -n 選項修改了。

-c 創(chuàng)建build目錄,并且在解壓縮前進入該目錄

這一點,個人很有感觸,有時候在制作rpm前壓制源碼文件時,經(jīng)常會

  1. tar -czf mycode.tar.gz mycode
復(fù)制代碼
把整個目錄打包成一個壓縮文件,而有時候則會直接把源代碼壓縮,而不包括目錄

  1. cd mycode
  2. tar -czf mycode.tar.gz *

復(fù)制代碼
,這時,-c 選項就能幫上忙了,替你建立目錄,然后在目錄里面解壓縮文件。
在該例中,加上 -c 后,解釋執(zhí)行的腳本過程如下:

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. mkdir -p cdplayer-1.0
  4. cd cdplayer-1.0
  5. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  6. if [ $? -ne 0 ]; then
  7.   exit $?
  8. fi
  9. cd /usr/src/redhat/BUILD/cdplayer-1.0
  10. chown -R root.root .
  11. chmod -R a+rX,g-w,o-w .
復(fù)制代碼
如果你的壓縮包解壓縮后就是白花花的代碼,那就應(yīng)該用上這個選項。

-D: 在解壓縮前不刪除目錄

這種情況的應(yīng)用場景就是你新解壓縮的代碼是要被加入到新的目錄樹中,因此以前的目錄不能刪除。
對應(yīng)的解釋腳本執(zhí)行過程如下:

  1. cd /usr/src/redhat/BUILD
  2. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  3. if [ $? -ne 0 ]; then
  4.   exit $?
  5. fi
  6. cd cdplayer-1.0
  7. cd /usr/src/redhat/BUILD/cdplayer-1.0
  8. chown -R root.root .
  9. chmod -R a+rX,g-w,o-w .
復(fù)制代碼
-T: 不進行默認壓縮文件的解壓縮

有人可能會問:不解壓縮代碼,那還搞毛?先不要著急,我們會接后著后面的 option 一起來看這個 選項的應(yīng)用場景.
首先看下加上 -T 時 %setup 執(zhí)行的動作:

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. cd cdplayer-1.0
  4. cd /usr/src/redhat/BUILD/cdplayer-1.0
  5. chown -R root.root .
  6. chmod -R a+rX,g-w,o-w
復(fù)制代碼
-b <n>: 在進入目錄前解壓縮第 n 個源碼包

看下 openssl 中的source 定義片段:

  1. Source: openssl-fips-%{version}-usa.tar.bz2
  2. Source1: hobble-openssl
  3. Source2: Makefile.certificate
復(fù)制代碼
RPM 對 Source 的解釋是 編號是0的Source,也就是 Source0,然后我們看下在spec 中,如下寫的執(zhí)行結(jié)果:

  1. %setup -b 0
復(fù)制代碼
根據(jù) -b 的解釋,它的執(zhí)行過程如下:

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  4. if [ $? -ne 0 ]; then
  5.   exit $?
  6. fi
  7. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  8. if [ $? -ne 0 ]; then
  9.   exit $?
  10. fi
  11. cd cdplayer-1.0
  12. cd /usr/src/redhat/BUILD/cdplayer-1.0
  13. chown -R root.root .
  14. chmod -R a+rX,g-w,o-w .
復(fù)制代碼
可以看到對 Source0 的解壓縮進行了兩次,重復(fù)了。
我想這下你應(yīng)該理解了 -T 的作用了,是為了避免不必要的冗余解壓縮,當然這個場景是你直接想用Source0 以后的源碼,而不用第一個Source.
然后看下 %setup -T -b 0 結(jié)合使用的效果:

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  4. if [ $? -ne 0 ]; then
  5.   exit $?
  6. fi
  7. cd cdplayer-1.0
  8. cd /usr/src/redhat/BUILD/cdplayer-1.0
  9. chown -R root.root .
  10. chmod -R a+rX,g-w,o-w
復(fù)制代碼
這樣就對了,當然重點是 -b 后面的參數(shù)你可以自己設(shè)置。

-a n: 在進入目錄后解壓縮第 n 個源碼
這個跟 -b 有些像,不過 -b 是在進入目錄前解壓縮。反正他們都是跟目錄相關(guān)的,具體場景自己應(yīng)該可以去想了,我們只看下執(zhí)行的動作:

%setup -T -a 0

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. cd cdplayer-1.0
  4. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  5. if [ $? -ne 0 ]; then
  6.   exit $?
  7. fi
  8. cd /usr/src/redhat/BUILD/cdplayer-1.0
  9. chown -R root.root .
  10. chmod -R a+rX,g-w,o-w .
復(fù)制代碼
可以看到?jīng)]有創(chuàng)建目錄直接就 cd 了,因此,它大多與 -c 一起結(jié)合使用:
%setup -c -T -a 0

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. mkdir -p cdplayer-1.0
  4. cd cdplayer-1.0
  5. gzip -dc /usr/src/redhat/SOURCES/cdplayer-1.0.tgz | tar -xvvf -
  6. if [ $? -ne 0 ]; then
  7.   exit $?
  8. fi
  9. cd /usr/src/redhat/BUILD/cdplayer-1.0
  10. chown -R root.root .
  11. chmod -R a+rX,g-w,o-w .
復(fù)制代碼
然后把這些結(jié)合起來,看下 %setup 處理多個source 源碼包的一個例子:

  1. %setup
  2. %setup -T -D -a 1
  3. mkdir database
  4. cd database
  5. gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf -
復(fù)制代碼
按照上面的規(guī)范,它解釋后的動作是:

  1. cd /usr/src/redhat/BUILD
  2. rm -rf cdplayer-1.0
  3. gzip -dc /usr/src/redhat/SOURCES/source-zero.tar.gz | tar -xvvf -
  4. if [ $? -ne 0 ]; then
  5.   exit $?
  6. fi
  7. cd cdplayer-1.0
  8. cd /usr/src/redhat/BUILD/cdplayer-1.0
  9. chown -R root.root .
  10. chmod -R a+rX,g-w,o-w .
  11. cd /usr/src/redhat/BUILD
  12. cd cdplayer-1.0
  13. gzip -dc /usr/src/redhat/SOURCES/source-one.tar.gz | tar -xvvf -
  14. if [ $? -ne 0 ]; then
  15.   exit $?
  16. fi
  17. mkdir database
  18. cd database
  19. gzip -dc /usr/src/redhat/SOURCES/source-two.tar.gz | tar -xvvf -
復(fù)制代碼
我們能夠看到是把 0 代碼和 1代碼解壓縮到同一個目錄下,然后在build 目錄下建立 database 目錄,把 2 代碼解壓縮到 database 目錄下。

上面所有參數(shù)結(jié)合起來使用使得這個過程以最簡潔的方式執(zhí)行了。

得瑟點個人的感覺:spec 中這樣去增加%setup 的多個選項來控制腳本執(zhí)行的過程有些得不償失,開發(fā)人員有記住這些選項的時間,自己會去研究原始的腳本怎么樣寫更合適。
不過也算是一種機制,其目的就在于你在使用它時,為用戶提供能用實現(xiàn)功能的接口,至于接口的好壞,可能并沒做太多考慮,有些爛,呵呵。

論壇徽章:
0
25 [報告]
發(fā)表于 2012-12-22 14:59 |只看該作者
本帖最后由 duanjigang 于 2012-12-22 15:10 編輯

%patch 宏:調(diào)用patch 命令來給解壓縮后的源碼打patch

patch 和 Source 的定義和使用格式基本上一致。這里只看下幾個option 和對用的行為.

我們看下 openssl 中的用法:

  1. Patch0: openssl-fips-0.9.8e-redhat.patch
  2. Patch1: openssl-0.9.8a-defaults.patch
  3. Patch2: openssl-0.9.8a-link-krb5.patch
  4. Patch3: openssl-0.9.8b-soversion.patch
  5. Patch4: openssl-0.9.8a-enginesdir.patch
  6. Patch5: openssl-0.9.8a-no-rpath.patch

  7. %patch0 -p1 -b .redhat
  8. %patch1 -p1 -b .defaults
  9. # Fix link line for libssl (bug #111154).
  10. %patch2 -p1 -b .krb5
  11. %patch3 -p1 -b .soversion
  12. %patch4 -p1 -b .enginesdir
  13. %patch5 -p1 -b .no-rpath
復(fù)制代碼
然后看 patch 的 option.

%patch2 就是調(diào)用patch 去應(yīng)用第二個path: Patch2
等同于

  1. %patch -P 2
復(fù)制代碼

-p 過濾 #注釋行
-b name 設(shè)置備份文件的擴展名為 name
-E 刪除輸出的空文件


當然,對于壓縮文件格式的patch文件,默認的動作會進行解壓縮,比如
Patch: bother-3.5-hack.patch.gz
執(zhí)行時的動作是:

  1. echo "Patch #0:"
  2. gzip -dc /usr/src/redhat/SOURCES/bother-3.5-hack.patch.gz | patch -p1  -s

復(fù)制代碼
到此,spec 中的 宏,介紹結(jié)束。

論壇徽章:
0
26 [報告]
發(fā)表于 2012-12-22 18:04 |只看該作者
本帖最后由 duanjigang 于 2012-12-22 19:11 編輯

%filelist

%filelist 這個section 下面列舉的所有文件(目錄,以及目錄內(nèi)的所有文件)是都會被封裝進 rpm 的文件和目錄列表。
filelist 段的數(shù)據(jù)每行表示一個文件或者目錄,針對于這個文件/目錄,會有一個指令,設(shè)置這個文件/目錄在被安裝機器上將會是什么樣子,具有什么屬性,最常見的就是
設(shè)置文件的數(shù)組,屬主和模式,還有這個文件是普通文件,還是文檔文件,還是配置文件,更新時是否替換等指令。
下面我們一一列舉。


文件相關(guān)的指令:

文件相關(guān)的指令有:

  1. %doc  文檔指令
  2. %config 配置文件指令
  3. %attr 文件屬性指令
  4. %verify 校驗指令
復(fù)制代碼
%doc 標注一個文件是文檔文件(doc),安裝后會在rpm的安裝機器的db中記錄起來。默認的doc 安裝目錄是 /usr/doc
可以通過修改 rpmrc 文件 中的變量 defaultdocdir  的值來修改此路徑。

%config 標注該文件是一個配置文件,如果你設(shè)置noreplace 屬性的話,包在升級時,不會用新的配置文件覆蓋原來包中的配置文件,如果要卸載包的話,配置文件會被保存為 "文件名".save,保留該文件。
看下一個例子
SPEC 文件:

  1. %install
  2. mkdir -p $RPM_BUILD_ROOT/etc
  3. install baby.conf  $RPM_BUILD_ROOT/etc
  4. %files
  5. %defattr(-,root,root)
  6. /usr/bin/test_baby
  7. %config(noreplace) /etc/baby.conf
復(fù)制代碼
RPM 生成后,我們看下配置文件列表:

  1. rpm -qp RPMS/i386/test-baby-1.1-1.i386.rpm --configfiles
  2. /etc/baby.conf
復(fù)制代碼
我們進行包安裝,查看配置文件:

  1. cat  /etc/baby.conf
  2. this is the origin config file installed
復(fù)制代碼
然后修改此文件內(nèi)容為:

  1. this is the origin config file installed
  2. modified by jigang.djg for package 'test-baby-1.1-1'
復(fù)制代碼
然后,只是修改release 號,重新生成rpm: RPMS/i386/test-baby-1.1-2.i386.rpm
進行軟件包升級:

  1. sudo rpm -Uvh RPMS/i386/test-baby-1.1-2.i386.rpm
復(fù)制代碼
再看下文件內(nèi)容,發(fā)現(xiàn)還是 test-baby-1.1-2.i386.rpm 中自帶的配置經(jīng)過修改后的內(nèi)容。說明配置文件確實為 "noreplace"狀態(tài)。
而且有一點注意下:采用 rpm -qf /etc/baby.conf
看到該文件所歸屬的包,是最新的 rpm .

%attr 指令用來設(shè)置文件默認 mode,屬主,數(shù)組。例如:

  1. %attr(755, root, root) foo.bar
復(fù)制代碼
%verify 校驗指令:

RPM 的 verify 能力能夠校驗被安裝文件的 9 個屬性,如下:

   1  Owner (owner) 屬主

   2 Group (group) 屬組

    3 Mode (mode) 模式

   4  MD5 Checksum (md5) md5和

    5 Size (size) 大小

    6 Major Number (maj) 主設(shè)備號

    7 Minor Number (min) 從設(shè)備號

    8 Symbolic Link String (symlink) 符號鏈接

    9 Modification Time (mtime)  修改時間


舉一個例子,安裝完 test-baby-1.1-2.i386.rpm 后,先 verify 下:

  1. rpm -qvV test-baby
  2. ........ c /etc/baby.conf
  3. ........ d /usr/bin/test_baby
復(fù)制代碼
然后我們修改下配置文件的mode 為 777,再次 verify

  1. rpm -qvV test-baby
  2. .M...... c /etc/baby.conf
復(fù)制代碼
是MODE改變了,再次修改下內(nèi)容,verify

  1. rpm -qvV test-baby
  2. SM5....T c /etc/baby.conf
  3. ........ d /usr/bin/test_baby
復(fù)制代碼
MODE,SIZE,MD5SUM, mtime 都變了。

論壇徽章:
0
27 [報告]
發(fā)表于 2012-12-22 19:29 |只看該作者
本帖最后由 duanjigang 于 2012-12-22 21:39 編輯

目錄相關(guān)指令

%docdir  xxx
標注 xxx 為 doc 目錄,%docdir 默認包含了系統(tǒng)默認doc 目錄 :

  1. /usr/doc, /usr/info, and /usr/man
復(fù)制代碼
當你的doc 全部放在一個目錄下時,可以先安裝這個目錄,然后用:
%docdir 絕對路徑
設(shè)置這個目錄下的所有文件為doc.

比如:

  1. %docdir /usr/blather
  2. /usr/blather
復(fù)制代碼
設(shè)置 /usr/blather 為 doc 目錄。


%dir xxx 指令

之前我們知道,如果在 %files 段的某一行寫上一個目錄名稱,那么該目錄底下的所有目錄和文件都將會被打包到該 RPM 當中去,但是有時候,你確實只想要這個目錄,而不包含該目錄下
的其它東西,那么就可以用這個指令。

比如 make 之后, data 目錄下有一堆文件,如果你把 data 目錄列入 %files 中,那它里面的文件都會打包到rpm中。
但是類似于

  1. %dir /usr/local/data
復(fù)制代碼
這樣的寫法,卻知會把這個目錄打包進去。

-f 文件名: 從文件中讀取 %files 的內(nèi)容


-f myfile
記住兩點:
1:myfile 中一行一個文件/目錄
2:myfile 中支持%files 的所有指令,在 myfile 中寫數(shù)據(jù),就當字節(jié)碼在 %files 下即可。

這個機制能夠?qū)崿F(xiàn)那種動態(tài) file list.因為 myfile 完全可以在 build 的時候生成。

看一個例子,例子中 -f 文件名和 直接寫文件,能夠混合使用的。

  1. %files latex -f tetex-latex-skel
  2. /usr/bin/latex
  3. /usr/bin/pslatex
復(fù)制代碼

論壇徽章:
0
28 [報告]
發(fā)表于 2012-12-22 21:54 |只看該作者
本帖最后由 duanjigang 于 2012-12-22 22:03 編輯

%package string 子包創(chuàng)建

這個指令用來在一個spec 文件中來創(chuàng)建除了默認 rpm 包以外的其它rpm包,稱為子包。
看下 openssl.spec 中的例子:

  1. package devel
  2. Summary: Files for development of applications which will use OpenSSL
  3. Group: Development/Libraries
  4. Requires: %{name} = %{version}-%{release}, krb5-devel, zlib-devel

  5. %description devel
  6. OpenSSL is a toolkit for supporting cryptography. The openssl-devel
  7. package contains static libraries and include files needed to develop
  8. applications which support various cryptographic algorithms and
  9. protocols.

  10. %package perl
  11. Summary: Perl scripts provided with OpenSSL
  12. Group: Applications/Internet
  13. Requires: perl
  14. Requires: %{name} = %{version}-%{release}
復(fù)制代碼
表示在openssl.spec 除了定義openssl這個包外,還定義了它的子包 (注意名字是:基礎(chǔ)包-子包 構(gòu)成):

openssl-devel

openssl-perl

看下生成的rpm

  1. /usr/src/redhat/RPMS/x86_64/openssl-0.9.8v-22.1.x86_64.rpm
  2. /usr/src/redhat/RPMS/x86_64/openssl-devel-0.9.8v-22.1.x86_64.rpm
  3. /usr/src/redhat/RPMS/x86_64/openssl-perl-0.9.8v-22.1.x86_64.rpm
復(fù)制代碼
這下你應(yīng)該知道了,子包名字的生成規(guī)范了。
當然,還可以自己完全重新定義一個子包名稱,比如:

  1. %package -n openssl-devel
復(fù)制代碼
這樣也可以。



%package string
后面的所有tag 就都屬于 這個子包了,當然其它指令或者hook,只要你加上 string 或者 -n string,都會標識為屬于 string 這個子包,比如:

  1. %package perl
  2. Summary: Perl scripts provided with OpenSSL
  3. Group: Applications/Internet
  4. Requires: perl
  5. Requires: %{name} = %{version}-%{release}

  6. %description perl
  7. OpenSSL is a toolkit for supporting cryptography. The openssl-perl
  8. package provides Perl scripts for converting certificates and keys
  9. from other formats to the formats used by the OpenSSL toolkit.

  10. %prep
  11. %setup -q -n %{name}-fips-%{version}

  12. %{SOURCE1} > /dev/null
  13. %patch0 -p1 -b .redhat
  14. %patch1 -p1 -b .defaults
復(fù)制代碼


  1. %package -n bar

  2. %post -n bar

復(fù)制代碼

論壇徽章:
0
29 [報告]
發(fā)表于 2012-12-22 22:24 |只看該作者
本帖最后由 duanjigang 于 2012-12-22 22:38 編輯

SPEC 中另外一個組成塊就是:
Conditionals (條件)

我們在前面的 TAG 中都知道,通過 excludearch,exclusivearch,excludeos 和 exclusiveos
這些tag 可以標明這個包只能在或者不能在某些平臺或者OS上build,但是這個只是規(guī)定了能,或者不能,屬于比較粗糙的條件性build,我們需要更靈活的條件判斷,類似于
C語言的條件判斷語句:

  1. if (xxoo)
  2. {

  3. }else{

  4. }

復(fù)制代碼
還記得你寫的多平臺代碼嗎?

  1. if (defined(__WIN32))
  2. {

  3. }else{

  4. }
復(fù)制代碼
同樣,RPM 中也提供了這樣的SPEC語法,方便用一個 Spec,一套代碼來編譯多平臺的RPM,而不是采用多個spec 文件(每個平臺一個Spec)的方式。
SPEC 中支持的條件語句有:

%ifarch cond1 cond2 ..
%ifnarch cond1 cond2
%ifos os1 os2 ..
$ifnos os1 os2
$else
%endif

比如下面的代碼:

  1. %ifarch alpha
  2. make RPM_OPT_FLAGS="$RPM_OPT_FLAGS -I ."
  3. %else
  4. make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
  5. %endif
復(fù)制代碼

論壇徽章:
0
30 [報告]
發(fā)表于 2012-12-22 22:39 |只看該作者
本帖最后由 duanjigang 于 2012-12-22 22:45 編輯

到此為止,第二篇告一段落,想起來什么再補上吧,閱讀的朋友有什么意見和發(fā)現(xiàn)的問題歡迎與我交流。以下是參考的所有文章:
其中不免有參考,拷貝,抄襲之嫌,不管如何,先對原始作者標識敬意,然后希望我們能夠?qū)W習(xí)到別人總結(jié)的東西。

1 Taking the Red Hat Package Manager to the Limit
http://www.rpm.org/max-rpm/
2 RPM Guide
http://docs.fedoraproject.org/en ... PM_Guide/index.html
3 Packaging software with RPM, Part 1: Building and distributing packages
http://www.ibm.com/developerworks/library/l-rpm1/
4 Packaging software with RPM, Part 2: Upgrading and uninstalling software
Packaging software with RPM, Part 2: Upgrading and uninstalling software
5 Packaging software with RPM, Part 3: Accommodating software dependencies
https://www.ibm.com/developerworks/library/l-rpm3/
6:http://rpm5.org/docs/ 下載資源。



您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP