1 准备打包环境nginx
执行以下命令安装rpmbuild和rpmdevtoolsweb
#yum install rpm-build
#yum install rpmdevtoolscentos
#yum install rpm-develide
执行以下命令来生成rpmbuild的工做目录工具
#rpmdev-setuptree测试
工做目录结构以下,ui
~/rpmbuild
~/rpmbuild/SOURCES #放置打包资源,包括源码打包文件和补丁文件等
~/rpmbuild/SPECS #放置SPEC文档
~/rpmbuild/BUILD #打包过程当中的工做目录
~/rpmbuild/RPMS #存放生成的二进制包
~/rpmbuild/RPMS/i386 #存放生成的i386结构包
~/rpmbuild/SRPMS #存放生成的源码包spa
提示:rpmdev-setuptree命令默认将再当前用户主目录下建立一个RPM构建根目录结构,若是须要改变次默认位置,能够修改配置文件:~/.rpmmacros中变量_topdir对应的值便可。orm
二、载源码包到SOURCES目录,不须要解压server
cd SOURCES/
wget http://nginx.org/download/nginx-1.2.1.tar.gz
三、撰写Spec文件
SPEC撰写是打包RPM的核心,也算是最难的一步,好在咱们能够从参照一个简单的模板文件开始,在能够实现基本功能的基础上再一步一步的扩充文档内容,直至彻底达到要求。下面是一个简单的SPEC文档,其中包括了一些说明信息(注:#后面的内容为说明信息),该SPEC文档是对一个测试的软件项目hellorpm写的,hellorpm软件包编译后仅有一个执行文件、一个手册文件和一个项目说文件。
nginx.spec文档的内容以下:
#
# Example spec file for nginx
#
#软件包简要介绍
Summary: high performance web server
#软件包的名字
Name: nginx
#软件包的主版本号
Version: 1.2.1
#软件包的次版本号
Release: 1.el5.ngx
#受权协议
License: 2-clause BSD-like license
#软件分类
Group: Applications/Server
Source: http://nginx.org/download/nginx-1.2.1.tar.gz
URL: http://nginx.org/
Distribution: Linux
Packager: Kevinli
#软件包的内容介绍
%description
nginx [engine x] is a HTTP and reverse proxy server, as well as
a mail proxy server
#表示预操做字段,后面的命令将在源码代码BUILD前执行
%prep
rm -rf $RPM_BUILD_DIR/nginx-1.2.1
zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf -
#BUILD字段,将经过直接调用源码目录中自动构建工具完成源码编译操做
%build
cd nginx-1.2.1
#调用源码目录中的configure命令
./configure --prefix=/usr/local/nginx
#在源码目录中执行自动构建命令make
make
#安装字段
%install
cd nginx-1.2.1
#调用源码中安装执行脚本
make install DESTDIR=%{buildroot}
%preun
if [ -z "`ps aux | grep nginx | grep -v grep`" ];then
killall nginx >/dev/null
exit 0
fi
#文件说明字段,声明多余或者缺乏都将可能出错
%files
#声明/usr/local/nginx将出如今软件包中
/usr/local/nginx
四、构建RPM包
开始构建操做,首先进入到当前用户的rpmbuild根目录
#cd ~/rpmbuild/
#rpmbuild -ba SPECS/nginx.spec
提示:-ba表示build all,即生成包括二进制包和源代码包的全部RPM包,若是正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。
问题:
系统 centos6.0 x86_64
在centos 6.0上使用rpmbuild制做rpm包会出现File not found: /root/rpmbuild/BUILDROOT/…的错误,看是centos 6中的rpmbuild topdir已经改变,为了能兼容centos 5的spec文件,须要对topdir进行修改:
编辑/usr/lib/rpm/macros文件:
%_topdir %{getenv:HOME}/rpmbuild
修改成:
%_topdir %{_usrsrc}/redhat
另外还须要定义buildroot
在spec文件中的make install后面加上DESTDIR=%{buildroot},即:
make install DESTDIR=%{buildroot}
参考文档: