RPM包制作方法--nginx.rpm包制作

一、RPM介绍

RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;现在应为RPM Package Manager的缩写。在Fedora、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用; RPM包中除了包括程序运行时所需要的文件,也有其它的文件;一个RPM包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系。

RPM可以让用户直接以binary方式安装软件包,并且可替用户查询是否已经安装了有关的库文件;在用RPM删除程序时,它又会聪明地询问用户是否要删除有关的程序。如果使用RPM来升级软件,RPM会保留原先的配置文件,这样用户就不用重新配置新的软件了。RPM保留一个数据库,这个数据库中包含了所有的软件包的资料,通过这个数据库,用户可以进行软件包的查询。RPM虽然是为Linux而设计的,但是它已经移值到SunOS、Solaris、AIX、Irix等其它UNIX系统上了。RPM遵循GPL版权协议,用户可以在符合GPL协议的条件下自由使用及传播RPM。

二、RPM包分类

rpm分为两大类,

1 二进制类包,包括rpm安装包(一般分为i386和x86等几种)和调式信息包等

2 源码类包,源码包和开发包应该归位此类

它们之间的关系是,最先我们按rpm打包要求改造软件项目源码,当符合要求之后就可以使用rpmbuild命令来生成不同的rpm包,同时生成的包之间版本是直接对应的,比如相同的源码包将生成完全相同的二进制rpm包。当你在网上查找rpm包时,一般你可以在RPMS目录中找到预编译的二进制包,而源码包则会在SRPMS目录内。

我们这里提到的RPM制作就是指改造软件源代码使之符合RPM打包要求的过程,这也可以等价为RPM源码包的制作过程,因为当你有了源码包就可以直接编译得到二进制安装包和其他任意包。

三、RPM包制作介绍

RPM包的制作,即是RPM源码包的制作。

RPM包工作的原理

RPM是为解决源码包不易安装(需要编译)和软件包相互之间依赖(是RPM包管理器可以一定程度解决依赖问题)问题,它通过在探测源码包在build和install阶段的动作获得最终生成的需要安装的系统里的文件,并记录下一些必要的操作(比如安装完成后执行某项操作),然后把此组成为一个整体,当在用户安装此包时把前面获得的所有问题和记录的所有操作原原本本的作用的实际系统上。

把一个普通的源码打成RPM包,需要下面一些操作

1、先需要对项目的Makefile作必要的改造以支持RPM打包操作(实际上此操作不是绝对的,SPEC文档和Makefile的是协调统一工作的,只要他们之间配合好了其他都无所谓,我们一般只是推荐大家尽量按行业标准规范操作而已)

2、次是针对当前项目撰写SPEC文档,SPEC文档包括了RPM打包过程的操作内容和新生成的RPM包的基本信息等,它的作用对象是打包程序rpmbuild。

四、RPM包制作过程

4.1 准备打包环境

执行如下命令安装rpmbuild和rpmdevtools

#yum install rpmbuild
#yum install rpmdevtools

生成rpm目录文件执行命令:rpmdev-setuptree,就会在当前目录下生成以下几个目录

[root@knightlai01 ~]# cd rpmbuild/
[root@knightlai01 rpmbuild]# ls
BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS


~/rpmbuild
~/rpmbuild/SOURCES              #放置打包资源,包括源码打包文件和补丁文件等
~/rpmbuild/SPECS                #放置SPEC文档
~/rpmbuild/BUILD                #打包过程中的工作目录
~/rpmbuild/RPMS                 #存放生成的二进制包
~/rpmbuild/RPMS/i386            #存放生成的i386结构包
~/rpmbuild/SRPMS                #存放生成的源码包

注意:提示:rpmdev-setuptree命令默认将再当前用户主目录下创建一个RPM构建根目录结构,如果需要改变次默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应的值即可。

4.2 切换源码包到SOURCES目录,不需要解压

//如果我们已经有编译好了的二进制包也可以直接拷贝到这个目录
cd SOURCES/
wget http://nginx.org/download/nginx-1.8.0.tar.gz


[root@knightlai01 SOURCES]# ls
nginx-1.8.0  

4.3 编写spec文件

SPEC撰写是打包RPM的核心,也算是最难的一步,好在我们可以从参照一个简单的模板文件开始,在可以实现基本功能的基础上再一步一步的扩充文档内容,直至完全达到要求。下面是一个简单的SPEC文档,其中包括了一些说明信息(注:#后面的内容为说明信息),该SPEC文档是对一个测试的软件项目hellorpm写的,hellorpm软件包编译后仅有一个执行文件、一个手册文件和一个项目说文件。

#
# Example spec file for nginx
#
#软件包简要介绍
Summary: high performance web server

#软件包的名字
Name: nginx

#软件包的主版本号
Version: 1.8.0

#软件包的次版本号
Release: 1.el5.ngx

#授权协议
License: 2-clause BSD-like license

#软件分类
Group: Applications/Server
Source: /usr/local/src/nginx-1.8.0
URL: http://nginx.org/
Distribution: Linux
Packager:knightlai 
 
#软件包的内容介绍
%description
nginx [engine x] is a HTTP and reverse proxy server, as well as
a mail proxy server

#表示预操作字段,后面的命令将在源码代码BUILD前执行
%prep
#rm -rf $RPM_BUILD_DIR/nginx-1.2.1
#zcat $RPM_SOURCE_DIR/nginx-1.2.1.tar.gz | tar -xvf -

#BUILD字段,将通过直接调用源码目录中自动构建工具完成源码编译操作  
%build
cd /usr/local/src/nginx-1.8.0

#调用源码目录中的configure命令 
./configure --prefix=/usr/local/nginx

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

#安装字段
%install
cd /usr/local/src/nginx-1.8.0 

#调用源码中安装执行脚本  
make install
%preun
if [ -z "`ps aux | grep nginx | grep -v grep`" ];then
killall nginx >/dev/null
exit 0
fi

#文件说明字段,声明多余或者缺少都将可能出错
%files
#声明/usr/local/nginx将出现在软件包中/usr/local/nginx
#/usr/local/src/nginx-1.8.0	

4.4 构建RPM包

[root@knightlai01 SPECS]# rpmbuild -ba SPECS/nginx.spec
objs/src/core/ngx_hash.o \
objs/src/core/ngx_buf.o \
objs/src/core/ngx_queue.o \
objs/src/core/ngx_output_chain.o \
objs/src/core/ngx_string.o \
objs/src/core/ngx_parse.o \
objs/src/core/ngx_inet.o \
objs/src/core/ngx_file.o \
objs/src/core/ngx_crc32.o \
objs/src/core/ngx_murmurhash.o \
objs/src/core/ngx_md5.o \
objs/src/core/ngx_rbtree.o \
objs/src/core/ngx_radix_tree.o \
objs/src/core/ngx_slab.o \
objs/src/core/ngx_times.o \
objs/src/core/ngx_shmtx.o \
objs/src/core/ngx_connection.o \
objs/src/core/ngx_cycle.o \
objs/src/core/ngx_spinlock.o \
objs/src/core/ngx_cpuinfo.o \
......................................................................

4.5 测试RPM包

[root@knightlai01 rpmbuild]# rpm -ivh /root/rpmbuild/RPMS/x86_64/nginx-1.8.0-1.el5.ngx.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:nginx-1.8.0-1.el5.ngx            ################################# [100%]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Cenos 6.7 x86_64 yum安装 yum localinstal nginx-1.6.3-1.x86_64.rpm 定制安装过程 1: FPM工具安装 修改yum源: 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 安装阿里云yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo 安装依赖 yum -y install ruby rubygems ruby-devel 添加阿里云的Rubygems 仓库 gem sources -a http://mirrors.aliyun.com/rubygems/ #移除原生Ruby仓库 gem sources --remove http://rubygems.org/ 指定安装版本 gem install fpm -v 1.3.3 wget http://nginx.org/download/nginx-1.9.7.tar.gz wget http://nginx.org/download/nginx-1.6.3.tar.gz mkdir -p /application/tools cd /application/tools/ find /var/cache/yum/ -name "*rpm" yum install pcre-devel openssl-devel find /var/cache/ -type f -name '*rpm' find /var/cache/ -type f -name '*rpm'|xargs cp -t /tmp/ cd /tmp tar zcf nginx_yum.tar.gz *.rpm sz nginx_yum.tar.gz cd /application/tools/ useradd nginx -M -s /sbin/nologin tar zxf nginx-1.6.3.tar.gz ./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module make make install ln -s /application/nginx-1.6.3/ /application/nginx /application/nginx/sbin/nginx ss -lntup|grep nginx ps -ef|grep nginx|grep -v grep netstat -lntup|grep nginx|grep -v grep curl 127.0.0.1 mkdir -p /server/scripts cd /server/scripts/ fpm -s dir -t rpm -n nginx -v 1.6.3 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3/ 检查 rpm -qpl nginx-1.6.3-1.x86_64.rpm [root@nginx tools]# rpm -qpl nginx-1.6.3-1.x86_64.rpm /application/nginx-1.6.3/client_body_temp /application/nginx-1.6.3/conf/fastcgi.conf /application/nginx-1.6.3/conf/fastcgi.conf.default /application/nginx-1.6.3/conf/fastcgi_params /application/nginx-1.6.3/conf/fastcgi_params.default /application/nginx-1.6.3/conf/koi-utf /application/nginx-1.6.3/conf/koi-win /application/nginx-1.6.3/conf/mime.types /application/nginx-1.6.3/conf/mime.types.default /a
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值