?? rpm-howto-6.html
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
<TITLE>RPM HOWTO (RPM at Idle): Building RPMs</TITLE>
<LINK HREF="RPM-HOWTO-7.html" REL=next>
<LINK HREF="RPM-HOWTO-5.html" REL=previous>
<LINK HREF="RPM-HOWTO.html#toc6" REL=contents>
</HEAD>
<BODY>
<A HREF="RPM-HOWTO-7.html">Next</A>
<A HREF="RPM-HOWTO-5.html">Previous</A>
<A HREF="RPM-HOWTO.html#toc6">Contents</A>
<HR>
<H2><A NAME="s6">6. Building RPMs</A></H2>
<P>
<P>如果您可以自個兒取得所需的軟體,那麼建造 RPM 檔案也是非常簡單的。
<P>建造 RPM 檔案的基本步驟如下:
<UL>
<LI>確定您的 <CODE>/etc/rpmrc</CODE> 已經符合系統所需, 完成設定。</LI>
<LI>取回所要建造的 source code。</LI>
<LI>進行所需的 source 檔案 patch 動作, 以使得我們能順利地
build 整個程式。</LI>
<LI>為程式套件撰寫一份 spec 檔案。</LI>
<LI>確認每個檔案都在正確的目錄位置。</LI>
<LI>使用 RPM 來 build 整個程式套件。</LI>
</UL>
<P>如果一切操作正確, RPM 便能順利 build 完成 binary 與 source 程式套件。
<P>
<P>
<P>
<H2><A NAME="ss6.1">6.1 The rpmrc File</A>
</H2>
<P>
<P>目前為止, RPM 系統唯一的設定檔, 是透過 <CODE>/etc/rpmrc</CODE> 檔案來管理。
其內容□例如下:
<BLOCKQUOTE><CODE>
<PRE>
require_vendor: 1
distribution: I roll my own!
require_distribution: 1
topdir: /usr/src/me
vendor: Mickiesoft
packager: Mickeysoft Packaging Account <packages@mickiesoft.com>
optflags: i386 -O2 -m486 -fno-strength-reduce
optflags: alpha -O2
optflags: sparc -O2
signature: pgp
pgp_name: Mickeysoft Packaging Account
pgp_path: /home/packages/.pgp
tmppath: /usr/tmp
</PRE>
</CODE></BLOCKQUOTE>
<P>檔案中的 <CODE>require_vendor</CODE> 這一行敘述, 用以控制 RPM
是否須要找尋 vendor 那一行敘述, 而 verdor 的資訊可能來自
<CODE>/etc/rpmrc</CODE> 或是 spec 檔案的 header 處。 如果您把上述的號碼改為
<CODE>0</CODE>, 便能把這項尋找功能關閉。 這樣的設定方式,
同樣適用於 <CODE>require_distribution</CODE> 與 <CODE>require_group</CODE> 的敘述上。
<P>接下來, 我們看到 <CODE>distribution</CODE> 這一行, 您可以在此設定, 或是日後在
spec 檔案的 header 處設定。 當我們在某個 distribution 上 build 程式套件時,
就算不需要查詢設定, 此行內容的設定正確, 也是能夠帶來許多便利。
<CODE>vendor</CODE> 那一行的作用, 和上述的 distribution 非常相似,
但其內容并不限定 ( 例如是 Joe's Software 或 Rock Music Emporium )。
<P>RPM 目前支援「多平臺架構」的程式套件 build 功能, 我們可以在 <CODE>rpmrc</CODE>
檔案里指定 ``optflags'' 變數, 當進行程式套件 build 動作時,
便可依據所需的平臺類型, 應用特定的變數內容。 我們將會在接下去的章節里,
說明如何使用這些變數。
<P>除了上述的 macro 設定外, 還有許多其他的設定方式, 您可以使用:
<BLOCKQUOTE><CODE>
<PRE>
rpm --showrc
</PRE>
</CODE></BLOCKQUOTE>
來查看系統的 tag 與可供使用的 flag 有哪些。
<P>
<H2><A NAME="ss6.2">6.2 The Spec File</A>
</H2>
<P>在此我們將討論 spec 檔案的設定。 build 一個程式套件時, 我們需要使用到
spec 檔案, 其內容為該程式套件的說明, 額外還包括一些指令,
用以指示整個 build 的過程, 還有一份檔案列表, 用以表示程式套件中的檔案,
分別被安裝到哪里。
<P>spec 檔案的命名方式, 最好是遵循標準的慣例, 其格式應該為
package name-dash-version number-dash-release number-dot-spec。
<P>這里我們舉一個小型的 spec 檔案為例 (vim-3.0-1.spec):
<BLOCKQUOTE><CODE>
<PRE>
Summary: ejects ejectable media and controls auto ejection
Name: eject
Version: 1.4
Release: 3
Copyright: GPL
Group: Utilities/System
Source: sunsite.unc.edu:/pub/Linux/utils/disk-management/eject-1.4.tar.gz
Patch: eject-1.4-make.patch
Patch1: eject-1.4-jaz.patch
%description
This program allows the user to eject media that is autoejecting like
CD-ROMs, Jaz and Zip drives, and floppy drives on SPARC machines.
%prep
%setup
%patch -p1
%patch1 -p1
%build
make RPM_OPT_FLAGS="$RPM_OPT_FLAGS"
%install
install -s -m 755 -o 0 -g 0 eject /usr/bin/eject
install -m 644 -o 0 -g 0 eject.1 /usr/man/man1
%files
%doc README COPYING ChangeLog
/usr/bin/eject
/usr/man/man1/eject.1
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.3">6.3 The Header</A>
</H2>
<P>檔案 header 的部份, 有幾個特定的欄位內容, 您必須加以設定完成,
另外還有幾點注意事項。 您必須設定完成的欄位內容如下:
<UL>
<LI><CODE>Summary:</CODE> 以一行長度的描述, 來說明程式套件的內容。</LI>
<LI><CODE>Name:</CODE> 這個檔案名稱必須與您準備使用的 rpm 檔名一致。</LI>
<LI><CODE>Version:</CODE> 這個版本名稱必須與您準備使用的 rpm 檔名一致。</LI>
<LI><CODE>Release:</CODE> 這個發行序號必須與您準備使用的 rpm 檔名一致。
( 也就是說, 如果我們完成一個程式套件, 但事後發現它有些小小的問題,
必須重新 build 一次, 此時新的程式套件, 其發行序號便是 2 號 )。</LI>
<LI><CODE>Icon:</CODE> 如果您使用了其他高階的安裝工具程式
( 像是 Red Hat 的 ``glint'' 程式 ), 那麼這里可以指定其相對應的圖示檔,
它必須是一個 gif 檔案, 而且必須位於 SOURCES 目錄。</LI>
<LI><CODE>Source:</CODE> 這里指定了那些「未經處理過的 source 檔案」的
HOME 目錄, 當您想要重新取得 source 檔案, 或是檢察是否有新版本時,
就需要用到這個設定。 注意事項: 這里的檔名, 「務必」與您系統上的檔案名稱一致
( 也就是說, 下載 source 檔案後, 不要去變更其檔案名稱 )。
同時, 您可以指定一個以上的 source 檔案, 方式如下:
<BLOCKQUOTE><CODE>
<PRE>
Source0: blah-0.tar.gz
Source1: blah-1.tar.gz
Source2: fooblah.tar.gz
</PRE>
</CODE></BLOCKQUOTE>
這些檔案都會到 <CODE>SOURCES</CODE> 目錄底下 ( 相關的目錄結構說明,
會在後面的 "The Source Directory Tree" 章節里加以討論 )。</LI>
<LI><CODE>Patch:</CODE> 如果您需要重新下載 patch 檔案,
那麼其目錄位置設定於此。
注意事項: 這里的檔名, 必須與您系統上使用的 patch 檔案名稱相符,
另一方面, 和前述多個 source 檔案的設定一樣, 您也可以指定多個
patch 檔案名稱。 其格式□例如下:
<BLOCKQUOTE><CODE>
<PRE>
Patch0: blah-0.patch
Patch1: blah-1.patch
Patch2: fooblah.patch
</PRE>
</CODE></BLOCKQUOTE>
這些檔案都會到 <CODE>SOURCES</CODE> 目錄底下。</LI>
<LI><CODE>Copyright:</CODE> 這里的設定, 用以說明程式套件采用何種版權聲明。
像 GPL、 BSD、 MIT、 public domain、 distributable、 commercial 等,
都是您可以指定的。</LI>
<LI><CODE>BuildRoot:</CODE> 您可以指定一個目錄,
它會被當作是 build 與 install 新程式套件的 ``root'' 目錄,
如果您想在實際安裝之前, 先行測試程式內容, 可以善用此項設定。</LI>
<LI><CODE>Group:</CODE> 這里的設定, 用於高階的安裝工具程式 ( 例如
Red Hat 的 ``glint'' 程式 ) 當中, 用以說明程式所屬的群組位置。
目前的群組架構, 大致如下所述:
<BLOCKQUOTE><CODE>
<PRE>
Applications
Communications
Editors
Emacs
Engineering
Spreadsheets
Databases
Graphics
Networking
Mail
Math
News
Publishing
TeX
Base
Kernel
Utilities
Archiving
Console
File
System
Terminal
Text
Daemons
Documentation
X11
XFree86
Servers
Applications
Graphics
Networking
Games
Strategy
Video
Amusements
Utilities
Libraries
Window Managers
Libraries
Networking
Admin
Daemons
News
Utilities
Development
Debuggers
Libraries
Libc
Languages
Fortran
Tcl
Building
Version Control
Tools
Shells
Games
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI><CODE>%description</CODE> 這個并非真的是 header 項目,
但您應該連同上述的項目一同填寫, 每個「程式套件」或「子程式套件」,
都應該有一個 description tag。 這里允許您輸入多行內容,
使得程式套件能夠具有一份完整詳盡的說明。
</LI>
</UL>
<P>
<H2><A NAME="ss6.4">6.4 Prep</A>
</H2>
<P>這里是 spec 檔案的另一個段落章節, 用以設定讓 source 檔案就緒,
以供下一步的 build 動作。 平常我們必須經過 setup, 才能實際進行 <CODE>make</CODE>
動作, 因此在本段落章節中, 我們將視需要進行 source 檔案的 patch 與 setup。
<P>有件事值得注意的: 接下來的段落設定, 實際上只是指明某段 shell scripts
的位置, 您可以將 shell scripts 的內容, 另外以 <CODE>sh</CODE> script
的方式加以存檔, 并將 script 程式名稱置於 <CODE>%prep</CODE> tag 之後,
用以執行 source 檔案的 unpack 與 patch 動作。 當然, 以原有之 macro
型式來做, 應該是方便許多的。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -