$ 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,主要工作內容為何?