$ cp myapp-1.0.tar.gz /usr/src/rpm/SOURCES
#
為行首的資料。在 spec 檔中加入註解,例如:
# spec file for package myapp (Version 1.0)
<something>:<something-else>
Vendor: Wrox Press #發展的廠商 Distribution: Any # Name: myapp #套件的名稱 Version: 1.0 #套件的版本資訊 Release: 1 #版本打包的次數說明 Packager: neil@provider.com #套件打包者 License: Copyright 2003 by Wrox Press #套件的授權模式 Group: Applications/Media #套件的發展團體名稱 Provides: goodness #系統提供的功能 Requires: mysql >= 3.23 #套件之相依套件 Buildroot: %{_tmppath}/%{name}-%{version}-root Source: %{name}-%{version}.tar.gz #套件的來源 Summary: Trivial application #主要的套件說明
%description
標籤:提供相關說明,不同於上述格式,其以 %
開頭,且可展開成多行。例如:
%description MyApp Trivial Application A trivial application used to demonstrate development tools. This version pretends it requires MySQL at or above 3.23. Authors: Neil Matthew and Richard Stones
Source: %{name}-%{version}.tar.gz # %{name} 與 %{version} 為 RPM 的巨集,分別表示套件名稱及版本; # 在本例中 rpmbuild 命令會將 %{name} 展開成為 myapp,而 %{version} 展開為 1.0;
Buildroot: %{_tmppath}/%{name}-%{version}-root # %{_tmppath} 巨集內容可以 rpm --showrc 查詢。
%prep
: build 前的準備( prepare ) 動作,主要是執行套件解打包壓縮。由於準備動作幾乎是公式化的動作,故已寫成巨集 %setup
。例如:
%prep %setup -q # 選項 -q 代表設定為安靜模式。
%build
:建立用應用程式。例如:
%build make
%install
:安裝應用程式、使用手冊和支援的檔案。例如:
%install mkdir -p $RPM_BUILD_ROOT%{_bindir} mkdir -p $RPM_BUILD_ROOT%{_mandir} install -m755 myapp $RPM_BUILD_ROOT%{_bindir}/myapp install -m755 myapp.1 $RPM_BUILD_ROOT%{_mandir}/myapp.1 # %RPM_BUILD_ROOT 環境變數紀錄 Buildroot 的位置。 # %{bindir} 和 %{_mandir} 巨集,分別展開為二進位執行檔案目錄和使用手冊目錄。
%clean
:清除 rpmbuild 命令產生的檔案。例如:
%clean rm -rf $RPM_BUILD_ROOT
%files
:列出套件包含的檔案。例如:
%files %{_bindir}/myapp %{_mandir}/myapp.1
%post
:套件安裝後執行的腳本。例如:
%post mail root -s "myapp installed - please register" </dev/null
# # spec file for package myapp (Version 1.0) # Vendor: Wrox Press Distribution: Any Name: myapp Version: 1.0 Release: 1 Packager: neil@provider.com License: Copyright 2003 by Wrox Press Group: Applications/Media Provides: goodness Requires: mysql >= 3.23 Buildroot: %{_tmppath}/%{name}-%{version}-root source: %{name}-%{version}.tar.gz Summary: Trivial application %description MyApp Trivial Application A trivial application used to demonstrate development tools. This version pretends it requires MySQL at or above 3.23. Authors: Neil Matthew and Richard Stones %prep %setup -q %build make %install mkdir -p $RPM_BUILD_ROOT%{_bindir} mkdir -p $RPM_BUILD_ROOT%{_mandir} install -m755 myapp $RPM_BUILD_ROOT%{_bindir}/myapp install -m755 myapp.1 $RPM_BUILD_ROOT%{_mandir}/myapp.1 %clean rm -rf $RPM_BUILD_ROOT %post mail root -s "myapp installed - please register" </dev/null %files %{_bindir}/myapp %{_mandir}/myapp.1
rpmbuild -bBuildStage spec_file
選項 bBuildStage | 意義 |
-ba | 建立所有,包含二進位和原始碼 RPM。 |
-bb | 建立一個二進位 RPM。 |
-bc | 建立(編譯)程式,但是不會建立整個 RPM。 |
-bp | 準備建立一個二進位 RPM。 |
-bi | 產生一個二進位 RPM,並且安裝它。 |
-bl | 檢查 RPM 的檔案列表。 |
-bs | 只建立一個原始碼 RPM。 |
$ rpmbuild -ba myapp.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.71108 + umask 022 + cd /usr/src/redhat/BUILD + LANG=C + export LANG + cd /usr/src/redhat/BUILD + rm -rf myapp-1.0 + /usr/bin/gzip -dc /usr/src/redhat/SOURCES/myapp-1.0.tar.gz + tar -xf - + STATUS=0 + '[' 0 -ne 0 ']' + cd myapp-1.0 ++ /usr/bin/id -u + '[' 0 = 0 ']' + /bin/chown -Rhf root . ++ /usr/bin/id -u + '[' 0 = 0 ']' + /bin/chgrp -Rhf root . + /bin/chmod -Rf a+rX,g-w,o-w . + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.43788 + umask 022 + cd /usr/src/redhat/BUILD + cd myapp-1.0 + LANG=C + export LANG + make gcc -g -Wall -ansi -c -o main.o main.c gcc -g -Wall -ansi -c -o 2.o 2.c ar rv mylib.a 2.o a - 2.o gcc -g -Wall -ansi -c -o 3.o 3.c ar rv mylib.a 3.o a - 3.o gcc -o myapp main.o mylib.a + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.90688 + umask 022 + cd /usr/src/redhat/BUILD + cd myapp-1.0 + LANG=C + export LANG + mkdir -p /var/tmp/myapp-1.0-root/usr/bin + mkdir -p /var/tmp/myapp-1.0-root/usr/share/man + install -m755 myapp /var/tmp/myapp-1.0-root/usr/bin/myapp + install -m755 myapp.1 /var/tmp/myapp-1.0-root/usr/share/man/myapp.1 + /usr/lib/rpm/find-debuginfo.sh /usr/src/redhat/BUILD/myapp-1.0 extracting debug info from /var/tmp/myapp-1.0-root/usr/bin/myapp 1 block + /usr/lib/rpm/redhat/brp-compress + /usr/lib/rpm/redhat/brp-strip /usr/bin/strip + /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump Processing files: myapp-1.0-1 Provides: goodness Requires(interp): /bin/sh Requires(rpmlib): rpmlib(CompressedFileNames) %*<== 3.0.4-1*) rpmlib(PayloadFilesHavePrefix) %*<== 4.0-1*) Requires(post): /bin/sh Requires: libc.so.6 libc.so.6(GLIBC_2.0) mysql >= 3.23 Processing files: myapp-debuginfo-1.0-1 Requires(rpmlib): rpmlib(CompressedFileNames) %*<== 3.0.4-1*) rpmlib(PayloadFilesHavePrefix) %*<== 4.0-1*) Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/myapp-1.0-root Wrote: /usr/src/redhat/SRPMS/myapp-1.0-1.src.rpm Wrote: /usr/src/redhat/RPMS/i386/myapp-1.0-1.i386.rpm Wrote: /usr/src/redhat/RPMS/i386/myapp-debuginfo-1.0-1.i386.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.17422 + umask 022 + cd /usr/src/redhat/BUILD + cd myapp-1.0 + rm -rf /var/tmp/myapp-1.0-root + exit 0
myapp-1.0-1.i386.rpm
myapp-1.0-1.src.rpm
#
開頭。
%{_tmppath}/%{name}-%{version}-root
,意義為何?
%{_tmppath}/%{name}-%{version}-root
%{name}-%{version}.tar.gz
,意義為何?
%{name}-%{version}.tar.gz
%description
,與其他資料定義標籤,主要不同為何?
%
開頭,且可展開成多行,可提供套件相關說明。
%{name}-%{version}.tar.gz
,其中 %{name}-%{version}
意義為何?
%{name}
與 %{version}
為 RPM 的巨集;rpmbuild 命令會將其展開為套件名稱及版本。
%{_tmppath}/%{name}-%{version}-root
,其中 %{_tmppath}
意義為何?
%{_tmppath}
為 RPM 的巨集;rpmbuild 命令會將其展開為:建立 rpm 套件的暫存工作目錄。
%prep
,主要工作內容為何?
%prep
,通常是執行那個巨集?為什麼?
%setup
。
%setup -q
,其中選項 -q 代表意義為何?
%build
,主要工作內容為何?
%RPM_BUILD_ROOT
,代表意義為何?
%RPM_BUILD_ROOT
為環境變數,紀錄 Buildroot 的位置。
%{_bindir}
,代表意義為何?
%{_bindir}
為 RPM 的巨集;rpmbuild 命令會將其展開為二進位執行檔案目錄。
%{_mandir}
,代表意義為何?
%{_mandir}
為 RPM 的巨集;rpmbuild 命令會將其展開為使用手冊目錄。
%clean
,主要工作內容為何?
%file
,主要工作內容為何?
%post
,主要工作內容為何?