RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。使用rpm安装软件和管理软件非常的方便。而这节我们不是介绍如何使用rpm安装或管理软件,而是如何把源码制作成rpm包。 下面我们以制作nginx的rpm开始介绍其制作方法。以下操作在centos-5 32系统进行。 制作nginx的rpm例子 1、建立目录结构 /usr/src/redhat/SOURCES — 存放源代码,补丁,图标等文件。 /usr/src/redhat/SPECS — 存放用于管理rpm制作进程的spec文件。 /usr/src/redhat/BUILD — 解压后的文件存放在这里。 /usr/src/redhat/RPMS — 存放由rpmbuild制作好的二进制包。 /usr/src/redhat/SRPMS —存放由rpmbuild制作好的源码包。 1.mkdir -p /usr/src/redhat 2.cd /usr/src/redhat 3.mkdir SOURCES SPECS BUILD RPMS SRPMS 2、下载源码包 下载源码包到SOURCES目录,不需要解压。 1.cd /usr/src/redhat/SOURCES 2.wget http://nginx.org/download/nginx-1.2.1.tar.gz 3、创建Spec文件 1.cd /usr/src/redhat/SPECS 2.vi nginx.spec 内容如下: 1.# 2.# Example spec file for nginx 3.# 4.Summary: high performance web server 5.Name: nginx 6.Version: 1.2.1 7.Release: 1.el5.ngx 8.License: 2-clause BSD-like license 9.Group: Applications/Server 10.Source: http://nginx.org/download/nginx-1.2.1.tar.gz 11.URL: http://nginx.org/ 12.Distribution: Linux 13.Packager: zhumaohai <admin@www.centos.bz> 14. 15.%description 16.nginx [engine x] is a HTTP and reverse proxy server, as well as 17.a mail proxy server 18.%prep 19.rm -rf $RPM_BUILD_DIR/nginx-1.2.1 20.zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf - 21.%build 22.cd nginx-1.2.1 23../configure --prefix=/usr/local/nginx 24.make 25.%install 26.cd nginx-1.2.1 27.make install 28.%preun 29.if [ -z "`ps aux | grep nginx | grep -v grep`" ];then 30.killall nginx >/dev/null 31.exit 0 32.fi 33.%files 34./usr/local/nginx 4、开始RPM制作 在制作RPM包之前需要安装必要的工具,如rpmbuild,gcc等。 1.yum install gcc rpm-build pcre-devel 1.cd /usr/src/redhat/SPECS/ 2.rpmbuild -bb nginx.spec 一切顺利的话,会生成nginx的rpm包,/usr/src/redhat/RPMS/i386/nginx-1.2.1-1.el5.ngx.i386.rpm。 5、测试rpm包 1.rpm -ivh /usr/src/redhat/RPMS/i386/nginx-1.2.1-1.el5.ngx.i386.rpm spec文件解释 从以上的简单例子可以看出,制作rpm包最重要的还是spec文件,下面解释一下例子所用到的指令。 #:以#开头是注释,rpm会忽略它。 Summary:简单描述软件。 Name :定义rpm的名称。 Version: 定义软件版本 Release: 发行版本 License: 定义许可证 Group: 软件分类 Source: ×××地址 URL: 源码相关网站 Distribution: 发行版系列 Packager: 打包人的信息 %description:软件详细描述,可多行 %prep :软件编译之前的处理,如解压。 %build :开始编译软件,如make %install :开始安装软件,如make install %files :指定哪些文件需要被打包,如/usr/local/nginx %preun :定义卸载之前的动作,如杀掉进程。 这里只介绍了几个常用的tag,更详细的请参考:http://www.rpm.org/max-rpm/ch-rpm-inside.html
系统 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}