RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。使用rpm安装软件和管理软件非常的方便。而这节我们不是介绍如何使用rpm安装或管理软件,而是如何把源码制作成rpm包。

我们日常工作一般会使用源码包安装软件,因为源码包相对灵活多变,操作自由,唯一的问题就是容易编译出错。rpm包安装简单方便,唯一问题就是不能自定义参数且更新的速度相对于源码慢很多。


rpm软件包制作

yum -y install gcc* rpm-build pcre-devel

mkdir -p /root/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}


SOURCES存放源代码,补丁,图标等文件

BUILD解压后的文件存放在这里

SPECS存放用于管理rpm制作进程的spec文件

RPMS存放由rpmbuild制作好的二进制包

SRPMS存放由rpmbuild制作好的源码包


cd rpmbuild/SOURCES/

wget http://nginx.org/download/nginx-1.4.4.tar.gz


cd rpmbuild/SPECS/


例如:

vim nginx.spec


#软件包简要介绍

Summary: hellorpm is a test program。

#软件包的名字

Name: hellorpm        

#软件包的主版本号          

Version: 2.2.6          

#软件包的次版本号            

Release: 1  

#源代码包,默认将在上面提到的SOURCES目录中寻找                        

Source0: %{name}-%{version}.tar.gz  

#授权协议

License: GPL    


#定义临时构建目录,这个地址将作为临时安装目录在后面引用

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root

#软件分类

Group: Development/Tools  

#软件包的内容介绍              

%description                        

The hellorpm program is a test.

#表示预操作字段,后面的命令将在源码代码BUILD前执行

%prep                    

#构建BUILD环境,将解压源码压缩包到BUILD目录

%setup -q      

#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作        

%build      

#调用源码目录中的configure命令            

./configure        

#在源码目录中执行自动构建命令make    

make            

#安装字段        

%install    

#调用源码中安装执行脚本            

make DESTDIR=$RPM_BUILD_ROOT install

#文件说明字段,声明多余或者缺少都将可能出错

%files              

#设置文件权限属性      

%defattr(-,root,root)      

#声明/usr/local/bin/hellorpm将出现在软件包中      

/usr/local/bin/hellorpm      

#声明并设置文件属性  

%doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1  

#同上,声明文档文件

%doc README  


例如:vim nginx.spec

Name:nginx

Version:1.4.4

Release:1%{?dist}

Summary:nginx-1.4.4 from wenji


Group:Development/Tools

License:GPL

URL:http://nginx.org

Source0:%{name}-%{version}.tar.gz

Source1: nginx

BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root


#BuildRequires:

#Requires:


%description

Nginx is a http server


%prep

%setup -q



%build

./configure \

               --user=daemon --group=daemon --prefix=%{_prefix} --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-md5=/usr/lib --with-sha1=/usr/lib  --with-http_gzip_static_module

make %{?_smp_mflags}



%install

%{__rm} -rf $RPM_BUILD_ROOT

%{__make} DESTDIR=$RPM_BUILD_ROOT install

test -z %{buildroot}/etc/init.d/ || /bin/mkdir -p %{buildroot}/etc/init.d/

%{__install} -m 655 -p %{SOURCE1} $RPM_BUILD_ROOT/etc/init.d/nginx


%clean

%{__rm} -rf $RPM_BUILD_ROOT


%files

%defattr(-,root,root)

%{_prefix}

/etc/init.d/nginx


%postun

#if [ $1 -eq 0  ]

#then

rm -rfv %{_prefix}

rm -rfv /etc/init.d/nginx

#fi


%changelog



cd rpmbuild/SPECS/

rpmbuild -bb nginx.spec


###rpmbuild -ba ‘spec文件路径’

###(rpmbuild常用参数: -bb 只编译二进制rpm包 -bs 只编译源码rpm包 -ba 同时编译二进制和源码rpm包)