RPM 简易打包
本文为RPM打包简易指南,只讲解如何将二进制文件或脚本文件进行RPM打包。
准备工作
笔者的打包环境为Ubuntu 12.10,因此后续的打包过程只适用Ubuntu和Debian系统(openSuSE和Fedora等系统有所区别)。
安装打包工具
首先安装RPM打包工具,使用以下命令进行安装:
1 | $ sudo apt-get install rpm |
注:上述命令适用Ubuntu 12.04、Ubuntu 12.10以及Debian 6,其它发行版本未验证。
创建打包目录
接着自定义打包目录,使用以下命令创建打包目录:
1 | $ mkdir ~/rpm |
其中BUILD是存放编译过程中的临时文件,BUILDROOT存放打包文件(一般为打包二进制文件),RPMS存放根据不同架构生成的rpm包,SOURCES用来存放源码包,SPECS用来存放spec文件,SRPMS用来存放srpm包。
设置环境
创建完打包目录后,还需设置打包路径,可通过修改topdir宏的值来自定打包路径:
1 | $ echo %_topdir $HOME/rpm > ~/.rpmmacros |
设置完毕后,可以使用以下命令查看自定打包路径:
1 | $ rpm --showrc|grep _topdir |
-14: _builddir %{_topdir}/BUILD
-14: _buildrootdir %{_topdir}/BUILDROOT
-14: _rpmdir %{_topdir}/RPMS
-14: _sourcedir %{_topdir}/SOURCES
-14: _specdir %{_topdir}/SPECS
-14: _srcrpmdir %{_topdir}/SRPMS
-14: _topdir /home/yyhoo/rpm
打包
老生常谈,以Hello World为例,开始讲解二进制文件的打包过程。
编写源码
1 |
|
将上述文件保存为 hello.c,并使用gcc进行编译:
1 | $ gcc hello.c -o hello |
创建hello包目录
使用终端进入BUILDROOT目录,并创建hello包目录:
1 | $ mkdir hello-1.0-1.i386 |
将之前生成的hello移至hello-1.0-1.i386/usr/local/bin目录中。
编写spec文件
切换至SPEC目录下,并编写hello.spec文件,内容如下:
Summary: Hello World rpm package
Name: hello
Version: 1.0
Release: 1
License: GPL
Packager: mutse
Group: Application
URL: http://mutse.tk
BuildRoot: %{_builddir}/%{name}
AutoReqProv: no
%description
This is a software for rpm package.
%prep
%build
%install
%pre
%post
chmod 755 /usr/local/bin/hello
%files
/usr/local/bin/hello
打包
一切准备就绪,开始使用rpmbuild工具打包,操作如下:
1 | $ cd ~/rpm/SPEC |
输出内容如下:
构建目标平台:i386
构建目标 i386
正在执行 (%prep):/bin/sh -e /var/tmp/rpm-tmp.myHgCr
+ umask 022
+ cd /home/yyhoo/rpm/BUILD
+ exit 0
正在执行 (%build):/bin/sh -e /var/tmp/rpm-tmp.T5dlla
+ umask 022
+ cd /home/yyhoo/rpm/BUILD
+ exit 0
正在执行 (%install):/bin/sh -e /var/tmp/rpm-tmp.Wl7B4S
+ umask 022
+ cd /home/yyhoo/rpm/BUILD
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip /usr/bin/strip
+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
Processing files: hello-1.0-1.i386
正在检查未被打包的文件:/usr/lib/rpm/check-files
/home/yyhoo/rpm/BUILDROOT/hello-1.0-1.i386
已写入:/home/yyhoo/rpm/RPMS/i386/hello-1.0-1.i386.rpm
正在执行 (%clean):/bin/sh -e /var/tmp/rpm-tmp.1zLS0k
+ umask 022
+ cd /home/yyhoo/rpm/BUILD
+ /bin/rm -rf /home/yyhoo/rpm/BUILDROOT/hello-1.0-1.i386
+ exit 0
至此,打包过程结束。生成的rpm包存放在~/rpm/RPMS/i386目录下。
结语
本文档只作为RPM打包的简易指南,更详细内容请查阅RPM官方最新打包手册。