文档章节

rpm包制作

_sylee
 _sylee
发布于 2013/10/10 11:59
字数 961
阅读 630
收藏 1
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


© 著作权归作者所有

上一篇: centos定制
_sylee
粉丝 2
博文 4
码字总数 2300
作品 0
郑州
运维
私信 提问
使用rpm-build制作nginx的rpm包

一、RPM包的分类 RPM有五种基本的操作功能:安装、卸载、升级、查询和验证。 linux软件包分为两大类: (1)二进制类包,包括rpm安装包(一般分为i386和x86等几种) (2)源码类包,源码包和...

nmshuishui
2014/11/27
0
0
Centos RPM包制作原理

有时候为了部署自己的包更方便一些,我们会制作自己的RPM包,制作RPM包都有哪些步骤呢,学习这些步骤就是本文的目的。在Centos下制作RPM包依赖rpm-build这个包,所以需要提前安装好该软件包。...

China_OS
2013/12/07
0
2
Centos6.4制作Tengine的rpm包

最近又在centos6.4下折腾tengine了,刚好不久前看了rpm包的制作方法,所以又有了搞个rpm包的想法。 1 安装centos的开发环境集成包及tengine的依赖包 yum groupinstall "Development Tools"yu...

China_OS
2013/12/07
0
15
制作PHP的RPM包实例

有时候为了方便源码包的安装,我们需要自己订制软件包的需求,我们会把一些源码包按照我们的需求来做成rpm包,当有了源码包就可以直接编译得到二进制安装包和其他任意包,spec file是制作rpm...

linuxprobe16
2016/11/25
6
0
利用fpm制作rpm包

支持的源类型包: dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包 rpm: 对rpm进行转换 gem: 对rubygem包进行转换 python: 将Python模块打包成相应的类型 支持的目标类型包: ...

collglle_cx
2017/03/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL build

https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=lumpsucker&dt=2019-06-23%2020%3A57%3A27...

MtrS
今天
3
0
八、Docker Swarm

Docker Swarm有两件事:一个企业级的Docker主机安全集群,另一个是用于协调微服务应用程序的引擎。 在集群方面,它将一个或多个Docker节点组合在一起,并允许你将他们作为一个集群来管理。开...

倪伟伟
昨天
7
0
Fragment懒加载其实很简单

前言 记得去年面试的时候, 面了一家小公司, 那个面试官问我, fragment的懒加载做过吗?我说没做过(确实没做过).后来面试快结束了, 又问我, 懒加载没做过是吗?后来可想而知也没收到offer, (ಥ_...

天王盖地虎626
昨天
5
0
聊聊dubbo的TimeoutFilter

序 本文主要研究一下dubbo的TimeoutFilter ListenableFilter dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/ListenableFilter.java public abstract class Liste......

go4it
昨天
9
0
方法与数组

方法 方法就是完成特定功能的代码块;在很多语言里面都有函数的定义,函数在Java中被称为方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) throw 异常{ 函数体;...

凹凸凸
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部