文章目录
  1. 1. 准备工作
    1. 1.1. 安装打包工具
    2. 1.2. 创建打包目录
    3. 1.3. 设置环境
  2. 2. 打包
    1. 2.1. 编写源码
      1. 2.1.1. 创建hello包目录
      2. 2.1.2. 编写spec文件
    2. 2.2. 打包
  3. 3. 结语
  4. 4. 参考资料:

本文为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
2
3
4
5
6
7
8
$ mkdir ~/rpm
$ mkdir -p ~/rpm/BUILD
$ mkdir -p ~/rpm/BUILDROOT
$ mkdir -p ~/rpm/RPMS/i386
$ mkdir -p ~/rpm/RPMS/x86_64
$ mkdir -p ~/rpm/SOURCES
$ mkdir -p ~/rpm/SPECS
$ mkdir -p ~/rpm/SRPMS

其中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
2
3
4
5
6
7
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("Hello World!\n");
return 0;
}

将上述文件保存为 hello.c,并使用gcc进行编译:

1
$ gcc hello.c -o hello

创建hello包目录

使用终端进入BUILDROOT目录,并创建hello包目录:

1
2
$ mkdir hello-1.0-1.i386
$ mkdir -p hello-1.0-1.i386/usr/local/bin

将之前生成的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
2
$ cd ~/rpm/SPEC
$ rpmbuild -bb --target=i386 hello.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官方最新打包手册。

参考资料:

文章目录
  1. 1. 准备工作
    1. 1.1. 安装打包工具
    2. 1.2. 创建打包目录
    3. 1.3. 设置环境
  2. 2. 打包
    1. 2.1. 编写源码
      1. 2.1.1. 创建hello包目录
      2. 2.1.2. 编写spec文件
    2. 2.2. 打包
  3. 3. 结语
  4. 4. 参考资料: