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包)