-
-
- 指定新的工作區_topdir
- 在工作區建立工作目錄
- 建立SPEC檔案
- 建立源檔案
- 編譯RPM包
- 檢視生成的RPM包類容
- 安裝和解除安裝生成的RPM包
- 再次檢視一下到底都裝了些什麼東西
- SPEC檔案中的一些重要字段
- 參考
-
指定新的工作區 _topdir
_topdir
預設的工作區為
/usr/src/redhat
;通過配置檔案
rpmmacros
指定:
cat>>~/.rpmmacros<<end
> %_topdir /root/helloworld
> end
這個配置也可以用
指令行
來指定:
在工作區建立工作目錄
mkdir -p /root/helloworld/{RPMS,SRPMS,BUILD,SOURCES,SPECS}
工作目錄解釋:
- helloworld/BUILD: 指令rpmbuild将在這個目錄下解壓源檔案,并在這個目錄下編譯程式
- helloworld/SPECS: 存放spec檔案spec files
- helloworld/SOURCES: 存放源碼包source files
- helloworld/SRPMS: 存放包含源碼的rpm檔案
- helloworld/RPMS: 存放包含二進制的rpm封包件
建立SPEC檔案
helloworld/SPECS/hello.spec
:
Summary: hello world rpm package
Name: hello
Version: 0.1
Release: 1
Source: %{name}-%{version}.tar.gz
License: GPL
Packager: amoblin
Group: Application/System
BuildRoot: %{_topdir}/root/
%description
This is a software for making your life more beautiful!
%prep
rm -rf $RPM_BUILD_DIR/%{name}-%{version}
zcat $RPM_SOURCE_DIR/%{name}-%{version}.tar.gz | tar -xv
%build
cd %{name}-%{version}
gcc -o hello hello.c
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}/usr/local/bin/
cd %{name}-%{version}
cp hello %{buildroot}/usr/local/bin/hello
%files
/usr/local/bin/hello
建立源檔案
hello.c
:
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return ;
}
把源檔案打包放到
SOURCES
目錄下
mkdir -p hello-
mv hello.c hello-
tar czvf hello-.tar.gz hello-
mv hello-.tar.gz /root/helloworld/SOURCES/
編譯RPM包
#編譯rpm
rpmbuild -vv -ba helloworld/SPECS/hello.spec
#或者通過指令行指定topdir編譯
rpmbuild --define "_topdir /root/helloworld" -vv -ba helloworld/SPECS/hello.spec
#驗證SPEC
rpmbuild --define "_topdir /root/helloworld" -vv -bl helloworld/SPECS/hello.spec
檢視生成的RPM包類容:
安裝和解除安裝生成的RPM包
[root@localhost ~]# rpm -iv helloworld/RPMS/i386/hello-0.1-1.i386.rpm
Preparing packages for installation...
hello-.-
[root@localhost ~]# hello
Hello, World!
[root@localhost ~]# rpm -ev hello-0.1-1
再次檢視一下到底都裝了些什麼東西
[root@localhost ~]# rpm -ql hello
/usr/local/bin/hello
SPEC檔案中的一些重要字段:
- Group: 需要需先定義[
]less /usr/share/doc/rpm-*/GROUPS
- BuildRoot: 安裝階段
的根目錄(在install
階段之後). 預設的根目錄是%build
%{_topdir}/BUILDROOT/
- %prep:
準備階段調用的shell腳本prepare
- %build:
編譯階段調用的shell腳本build
- %install:
install
安裝階段候調用的shell腳本
注意: 執行%prep, %build, %install 的shell腳本的
目錄為/root/helloworld/BUILDpwd
- %files: 指定生成的二進制RPM包中包含哪些檔案,這些檔案必須在
目錄下存在BuildRoot
參考:
- How to create an RPM package
- How to create a GNU Hello RPM package
- RPM打包 step by step
- Maximum RPM