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制作好的源码包。
/usr/src/redhat/SPECS — 存放用于管理rpm制作进程的spec文件。
/usr/src/redhat/BUILD — 解压后的文件存放在这里。
/usr/src/redhat/RPMS — 存放由rpmbuild制作好的二进制包。
/usr/src/redhat/SRPMS —存放由rpmbuild制作好的源码包。
- mkdir -p /usr/src/redhat
- cd /usr/src/redhat
- mkdir SOURCES SPECS BUILD RPMS SRPMS
2、下载源码包
下载源码包到SOURCES目录,不需要解压。
- cd /usr/src/redhat/SOURCES
- wget http://nginx.org/download/nginx-1.2.1.tar.gz
3、创建Spec文件
- cd /usr/src/redhat/SPECS
- vi 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: zhumaohai <admin@www.centos.bz>
- %description
- nginx [engine x] is a HTTP and reverse proxy server, as well as
- a mail proxy server
- %prep
- rm -rf $RPM_BUILD_DIR/nginx-1.2.1
- zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf -
- %build
- cd nginx-1.2.1
- ./configure --prefix=/usr/local/nginx
- make
- %install
- cd nginx-1.2.1
- make install
- %preun
- if [ -z "`ps aux | grep nginx | grep -v grep`" ];then
- killall nginx >/dev/null
- exit 0
- fi
- %files
- /usr/local/nginx
4、开始RPM制作
在制作RPM包之前需要安装必要的工具,如rpmbuild,gcc等。
- yum install gcc rpm-build pcre-devel
- cd /usr/src/redhat/SPECS/
- rpmbuild -bb nginx.spec
一切顺利的话,会生成nginx的rpm包,/usr/src/redhat/RPMS/i386/nginx-1.2.1-1.el5.ngx.i386.rpm。
5、测试rpm包
- 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: 打包人的信息
#:以#开头是注释,rpm会忽略它。
Summary:简单描述软件。
Name :定义rpm的名称。
Version: 定义软件版本
Release: 发行版本
License: 定义许可证
Group: 软件分类
Source: ×××地址
URL: 源码相关网站
Distribution: 发行版系列
Packager: 打包人的信息
%description:软件详细描述,可多行
%prep :软件编译之前的处理,如解压。
%build :开始编译软件,如make
%install :开始安装软件,如make install
%files :指定哪些文件需要被打包,如/usr/local/nginx
%preun :定义卸载之前的动作,如杀掉进程。
%prep :软件编译之前的处理,如解压。
%build :开始编译软件,如make
%install :开始安装软件,如make install
%files :指定哪些文件需要被打包,如/usr/local/nginx
%preun :定义卸载之前的动作,如杀掉进程。
转载于:https://blog.51cto.com/record/1017671