rpm包制作

rpm包制作
1、安装制作工具rpm-build
yum install rpm-build –y
2、rpm包制作原理
制作rpm需要制定制作目录rpmbuild,其中包含BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS目录:
BUILD:存放解压后的文件
BUILDROOT:虚拟根目录,编译安装后的程序存放在此目录
RPMS:存放封装后rpm包
SOURCES:存放源文件,包括tar.gz和需要封装的文件
SPECS:存放spec文件
SRPMS:存放生成的源rpm包
rpm包制作需要编写spec文件来控制包的制作,制作时会读取spec文件然后解压SOURCES目录中的源文件到BUILD目录,编译安装程序到BUILDROOT目录,最后生成rpm包到RPMS和SRPMS目录。
3、配置rpm包制作环境
建议使用普通用户制作rpm包,创建对应目录
[rpm@tst30 ~]$mkdir –p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
在用户根目录下创建.rpmmacros文件,指定rpm制作目录
[rpm@tst30 ~]$ vi .rpmmacros
%_topdir /home/rpm/rpmbuild
4、制作spec文件,以nginx为例
[rpm@tst30 SPECS]$ vi nginx.spec
#包介绍区域
Summary: nginx Web Server
Name: nginx
Version: 1.4.2
Release: v1
License: BSD
Group: System Environment/Daemons  #必须使用/usr/share/doc/rpm-4.8.0/GROUPS存在的组
URL: http://nginx.org/
Distribution: linux
Packager: sylee
#定义源文件,可以定义多个,如果需要将配置文件封装到rpm需要在此定义源文件
Source0: http://nginx.org/download/%{name}-%{version}.tar.gz
Source1: nginx.init
Source2: nginx.conf
#设定虚拟根目录、编译时用得到的程序及依赖包
BuildRoot: %{_buildrootdir}/%{name}-%{version}-root
BuildRequires: gcc,make,gcc-c++,pcre-devel
Requires: gcc,gcc-c++,autoconf,automake,make,zlib,zlib-devel,openssl,openssl-devel,pcre,pcre-devel
Requires(pre): shadow-utils   #安装前依赖包
Requires(post): chkconfig     #安装后依赖包


#描述信息
%description
nginx [engine x] is a HTTP and reverse proxy server, as well as a mail proxy server

#解压源文件
%prep
%setup -q

#编译程序
%build
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
make %{?_smp_mflags}

#安装程序
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
%{__install} -p -D -m 0755 %{SOURCE1} %{buildroot}/etc/init.d/nginx   #将配置文件封装到rpm包
%{__install} -p -D -m 0644 %{SOURCE2} %{buildroot}/usr/local/nginx/conf/nginx.conf

#封装rpm包后清空虚拟根目录
%clean
rm -rf %{buildroot}

#rpm安装前执行命令,$1==1其中1代表安装,0代表卸载
%pre
if [ $1==1 ]; then
    /usr/sbin/useradd -M -s /sbin/nologin www 2>/dev/null
fi

#rpm包安装后执行命令
%post
if [ $1==1 ]; then
    /sbin/chkconfig --add %{name}
fi

#rpm包卸载后执行命令
%preun
if [ $1==0 ]; then
    /sbin/service %{name} stop >/dev/null 2>&1
    /sbin/chkconfig --del %{name}
fi

#文件封装部分,在虚拟根目录中编译安装的所有文件全部都要列出来,否则封装rpm包时报错
%files
%defattr(-,root,root,-)   #指定文件的权限和所属用户,-代表默认权限
%config(noreplace) /usr/local/nginx/conf/fastcgi.conf
%config(noreplace) /usr/local/nginx/conf/fastcgi.conf.default
%config(noreplace) /usr/local/nginx/conf/fastcgi_params
%config(noreplace) /usr/local/nginx/conf/fastcgi_params.default
%config(noreplace) /usr/local/nginx/conf/koi-utf
%config(noreplace) /usr/local/nginx/conf/koi-win
%config(noreplace) /usr/local/nginx/conf/mime.types
%config(noreplace) /usr/local/nginx/conf/mime.types.default
%config(noreplace) /usr/local/nginx/conf/nginx.conf
%config(noreplace) /usr/local/nginx/conf/nginx.conf.default
%config(noreplace) /usr/local/nginx/conf/scgi_params
%config(noreplace) /usr/local/nginx/conf/scgi_params.default
%config(noreplace) /usr/local/nginx/conf/uwsgi_params
%config(noreplace) /usr/local/nginx/conf/uwsgi_params.default
%config(noreplace) /usr/local/nginx/conf/win-utf
/usr/local/nginx/html/50x.html
/usr/local/nginx/html/index.html
%dir /usr/local/nginx/logs
/usr/local/nginx/sbin/nginx
%attr(0755,root,root) /etc/init.d/nginx

#日志部分
%changelog
* Mon Sep 17 2013 zynews
- version 1
5、 rpmbuild命令生成rpm包
[rpm@tst30 SPECS]$ rpmbuild -bb nginx.spec
附:
rpmbuild命令参数:
-ba :rpm包和源rpm包
-bb :只生成rpm包
-bs :只生成源rpm包
-bc :对源文件进行编译,只执行到%build部分
-bp :解压源文件,只执行到%prep部分
-bi : 安装程序,只执行到%install部分
-bl :测试%files部分是否有遗漏的文件

spec文件中用的install命令:
-d 创建指定的目录
-D 递归创建目录,同mkdir –p
-p 保留原有文件时间戳
-m 设置文件权限

sepc文件中用的变量可查看rpmbuild --showrc


转载于:https://my.oschina.net/sylee/blog/167640

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值