RPM包制作与实战

1、安装RPM软件

yum install rpm-build

2、建立目录结构

mkdir /usr/src/RedHat/{SOURCES,SPECS,BUILD,RPMS,SRPMS} -p

相关目录介绍:

/usr/src/redhat/SOURCES    #存放源代码、补丁等文件 

/usr/src/redhat/SPECS      #存放用于管理rpm制作进程的spec文件 

/usr/src/redhat/BUILD      #解压后的文件存放目录 

/usr/src/redhat/RPMS       #存放由rpmbuild制作好的二进制包 

/usr/src/redhat/SRPMS      #存放由rpmbuild制作好的源码包 

3、把源码包放在SOURCES目录下

cd /usr/src/redhat/SOURCES
wget http://nginx.org/download/nginx-1.2.0.tar.gz

4、生成nginx.spec文件

cd /usr/src/redhat/SPECS 
cat nginx.spec 
# 
# spec file for nginx 
# Build 2012-07-17 
# By opsren 
# 
Summary: High performance web server 
Name: Nginx 
Version: 1.2
Release: 0.el5.ngx 
License: 2-clause BSD-like license 
Group: Applications/Server 
Source: http://nginx.org/download/nginx-1.2.0.tar.gz 
URL: http://nginx.org 
Distribution: Centos/Redhat 
Packager: qiuzhijun <250621008@qq.com> 
  
%description 
Nginx ("engine x") is a high performance HTTP and reverse proxy server, as well as a mail(IMAP/POP3/SMTP) proxy server. 
%prep 
tar zxf $RPM_SOURCE_DIR/nginx-1.2.0.tar.gz 
%build 
cd nginx-1.2.0 
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre
make 
%install 
cd nginx-1.2.0 
make install 
%preun 
if [ -z "`ps aux | grep nginx | grep -v grep`" ];then 
pkill nginx >/dev/null 
exit 0 
fi 
%files 
/usr/local/webserver/nginx 

5、

RPM包制作
首先系统要安装好必备的制作工具:gcc、rpmbuild等
yum -y install gcc rpm-build pcre-devel 
cd /usr/src/redhat/SPECS/ 
rpmbuild -bb nginx.spec 

通过上面这条命令,会在/usr/src/redhat/RPMS/x86_64/下面生成nginx-1.2.0-1.el5.ngx.x86_64.rpm这个文件

-bb 这个选项就是制作二进制包(build binary package only from <specfile>)
 
对spec文件内容进行简单说明:
spec文件是制作rpm包的核心!
  1. 以#开头的是注释信息; 
  2. Summary:对相关软件进行简单描述说明 
  3. Name:定义rpm包的名称 
  4. Version:定义软件的版本号 
  5. Release:发行版本 
  6. License:定义许可证 
  7. Group:说明软件属于哪种应用类型 
  8. Source:软件源码下载地址 
  9. URL:软件相关官方站点 
  10. Distribution: 发行版系列 
  11. Packager: 制作人的简单信息 
  12.   
  13. %description:软件详细描述信息 
  14. %prep:软件编译之前的处理 
  15. %build:编译软件 
  16. %install:安装软件 
  17. %preun:定义卸载之前的动作 
  18. %files:指定要打包的软件包,这里是/usr/local/nginx 

下面是一个经典的事例:

vi .rpmmacros 

%_topdir /home/wb-liqiu/rpm
%packager  wb-liqiu
%vendor TaoBao Inc.
%_svn_path Unknown_path
%_svn_revision Unknown_revision
%_version 0.0.1
%_release 6
%_crondir /etc/cron.d
%_crontab .//etc/cron.d/%{name}
%_unpackaged_files_terminate_build 0
%build_root %{_topdir}/BUILDROOT

然后

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

spec事例:

Name:       gearmand
Version:    0.14
Release:    1
Summary:    --

Group:      Productivity/Networking
License:    BSD
Url:        http://launchpadlibrarian.net/51244438/gearmand-0.14.tar.gz
Vendor:     公司
Packager:   姓名 <邮箱>

Source:     gearmand-%{version}.tar.gz

BuildRoot:  %{_tmppath}/{%name}-%{version}
BuildArch:  x86_64

Requires: lz-libdrizzle>=1.0
Requires: boost libevent
BuildRequires: gcc libevent-devel

%description
---


%prep
%setup -q

%build
./configure PREFIX=%{buildroot} --disable-libmemcached --disable-libsqlite3
make
%install
make install DESTDIR=$RPM_BUILD_ROOT
cur_dir=`pwd`
cd $RPM_BUILD_ROOT && (find . -type f | sed -e 's|^./|/|g' > $cur_dir/%{name}.manifest)
cd $RPM_BUILD_ROOT && (find . -type l | sed -e 's|^./|/|g' >> $cur_dir/%{name}.manifest)
%clean
rm -rf %{buildroot}

%files -f %{name}.manifest
%defattr(-,admin,users,-)

%changelog
原文地址:https://www.cnblogs.com/liqiu/p/2759146.html