rpm包的制作

简介:

系统环境redhat 5.7

软件:nginx-1.4.5 + nginx_upstream_check_module


1,安装打包工具及软件环境

# yum install gcc rpm-build pcre-devel pcre rpmdevtools

2,创建所需要的目录

BUILD          #编译之前,如解压包后存放的路径

BUILDROOT #编译后存放的路径

RPMS           #打包完成后rpm包存放的路径

SOURCES     #源包所放置的路径

SPECS          #spec文档放置的路径

SPRMS         #源码rpm包放置的路径

其实以上参数值都是在/usr/lib/rpm/macros文件中定义的,这些目录默认路径都在/usr/src/redhat/目录中。笔者在第一次制作rpm包时直接修改的该文件的值,其实最好不要修改该文件的值,只需要在家目录定义自己需要的值即可。 可以在当前用户目录下的.rpmmacros文件(如果没有,则创建)中修改,格式为:

% _topdir pathname

创建命令自动创建需要的目录:

# rpmdev-setuptree

# tree rpmbuild/

rpmbuild/

├── BUILD

├── RPMS

├── SOURCES

├── SPECS

└── SRPMS


查看配置是否生效:

# rpmbuild --showrc | grep topdir
-14: _builddir     %{_topdir}/BUILD
-14: _rpmdir     %{_topdir}/RPMS
-14: _sourcedir     %{_topdir}/SOURCES
-14: _specdir     %{_topdir}/SPECS
-14: _srcrpmdir     %{_topdir}/SRPMS
-14: _topdir     /root/rpmbuild

3,下载相关源码包及解压

# wget http://nginx.org/download/nginx-1.4.7.tar.gz -O /root/rpmbuild/SOURCES/nginx-1.4.7.tar.gz

# wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.zip -O /root/rpmbuild/SOURCES/nginx_upstream_check_module.zip

# cd /root/rpmbuild/SOURCES/

# unzip nginx_upstream_check_module.zip

4,创建spec文件

spec文件是制作rpm包的关键,定义了rpmbuild命令生成时需要遵循的一些规则。

# vim /root/rpmbuild/SPECS/nginx.spec

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 这个区域定义的Name、Version这些字段对应的值可以在后面
# 通过%{name},%{version}这样的方式来引用,类似于C语言中的宏
# Name制定了软件的名称
Name:       nginx
# 软件版本
Version:     1.4 . 7
# 释出号,也就是第几次制作rpm,dist这个宏变量一般在/etc/rpm/macros.dist文件中定义
Release:     1 %{?dist}
# 软件的介绍,必须设置,最好不要超过 50 个字符
Summary:    Nginx from lishengjia
# 软件的分组,可以通过/usr/share/doc/rpm- 4.8 . 0 /GROUPS文件中选择,也可以
# 在相应的分类下,自己创建一个新的类型,例如这里的Server
Group:      Application/Server
# 许可证类型
License:    GPL
# 软件的源站
URL:        http: //nginx.org
# 制作rpm包的人员信息
Packager:   lishengjia < 825137600 @qq.com>
# 源码包的名称,在%_topdir/SOURCE下,如果有多个源码包的话,可以通过
# Source1、Source2这样的字段来指定其他的源码包
Source0:    %{name}-%{version}.tar.gz
Source1:    nginx_upstream_check_module.zip
# BuildRoot指定了make install的测试安装目录,通过这个目录我们可以观察
# 生成了哪些文件,方便些files区域。如果在files区域中写的一些文件报
# 不存在的错误,可以查看%_topdir/BUILDROOT目录来检查有哪些文件。
buildroot:  %_topdir/BUILDROOT
Prefix:     /opt/apps_install/nginx- 1.4 . 7
# 制作过程需要的工具或软件包
BuildRequires:  gcc,make
# 安装时依赖的软件包
Requires: pcre,pcre-devel,openssl
# 软件的描述,这个可以尽情地写
%description
Nginx  is  a http server
%prep
cd %_topdir/SOURCES/
tar xf nginx- 1.4 . 7 .tar.gz
cd nginx- 1.4 . 7
patch -p1 < %_topdir/SOURCES/nginx_upstream_check_module-master/check_1. 2.6 +.patch
# 编译阶段,和直接编译源代码类似,具体的操作或指定的一些参数由configure文件决定。
%build
cd $RPM_SOURCE_DIR/nginx- 1.4 . 7
pwd
./configure --prefix=%{prefix} -- with -mail -- with -mail_ssl_module \
-- with -http_realip_module -- with -http_stub_status_module -- with -http_ssl_module \
-- with -pcre --add-module=../nginx_upstream_check_module-master
# make后面的意思是:如果是多处理器,则并行编译
make %{?_smp_mflags}
# 安装阶段
%install
# 先删除原来的测试安装的,只有在制作失败了%{buildroot}目录才会有内容,
# 如果成功的话,目录下会被清除。
# %{buildroot}指向的目录不是BuildRoot(%_topdir/BUILDROOT)指定的目录,
# 而是该目录下名称与生成的rpm包名称相同的子目录。
# 指定安装目录,注意不是真实的安装目录,是在制作rpm包的时候指定的
# 安装目录,如果不指定的话,默认就会安装到configure命令中指定的prefix路径,
# 所以这里一定要指定DESTDIR
rm -rf %{buildroot}
cd $RPM_SOURCE_DIR/nginx- 1.4 . 7
make DESTDIR= "%{buildroot}"  install
# 安装前执行的脚本,语法和shell脚本的语法相同
%pre
# 安装后执行的脚本
%post
# 卸载前执行的脚本,我这里的做的事情是在卸载前将nginx服务器停掉
%preun
     MSG=`ps aux | grep nginx | grep -v  "grep" `
     if  [ -z  "$MSG"  ];then
         killall nginx  1 >/dev/ null  2 >/dev/ null
     fi
# 卸载完成后执行的脚本
%postun
# 清理阶段,在制作完成后删除安装的内容
%clean
rm -rf %{buildroot}
#指定要包含的文件
%files
#设置默认权限,如果没有指定,则继承默认的权限
%defattr  (-,root,root, 0755 )
%{prefix}

5,制作rpm

# rpmbuild -bb nginx.spec

如果命令执行没有报错,则会在如下目录产生rpm包

# ls RPMS/x86_64/nginx-1.4.7-1.x86_64.rpm 
RPMS/x86_64/nginx-1.4.7-1.x86_64.rpm











本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/1400706,如需转载请自行联系原作者
目录
相关文章
|
SQL 存储 大数据
某互联网大厂亿级大数据服务平台的建设和实践
某互联网大厂亿级大数据服务平台的建设和实践
666 0
|
存储 算法 Linux
打破常规,Linux内核新的数据结构上场maple tree(下)
打破常规,Linux内核新的数据结构上场maple tree
|
8月前
|
人工智能 vr&ar
PSHuman:开源单图像3D人像重建技术,一张照片就能生成3D人像模型
PSHuman 是一种先进的单图像3D人像重建技术,仅需一张照片即可生成高度逼真的3D模型,支持面部细节、全身姿态和纹理恢复,适用于影视、游戏、虚拟现实等多个领域。
766 4
PSHuman:开源单图像3D人像重建技术,一张照片就能生成3D人像模型
|
Kubernetes Java Linux
轻量级日志系统Loki原理简介和使用(3)
轻量级日志系统Loki原理简介和使用(3)
1125 0
轻量级日志系统Loki原理简介和使用(3)
|
10月前
|
缓存 安全 网络安全
静态代理IP访问失败的问题解释?
本文介绍了在浏览器中使用静态代理IP访问失败的多种可能原因,包括代理设置错误、代理服务器问题、站点策略限制、网络连接问题、浏览器设置问题、代理类型不支持及认证问题等,并提供了相应的解决建议。
363 1
|
8月前
|
缓存 Linux 数据库
CentOS 8中 更新或下载时报错:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal
通过以上步骤,您可以有效地解决 CentOS 8 中“为仓库 ‘appstream’ 下载元数据失败 : Cannot prepare internal”问题。关键在于检查网络连接、更新和切换仓库配置、清理缓存、重建 RPM 数据库以及在必要时临时禁用有问题的仓库。通过这些方法,可以确保系统能够正常进行软件包的更新和下载操作。
2367 20
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之delete主键删除源表一条记录,目标表未删除数据问题如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
495 1
|
11月前
|
数据可视化 数据处理 数据库
【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇一)
904 2
|
JavaScript
vue 组件封装 -- 添加【呼吸】动画效果(两种: 淡入>>淡入,淡入>>淡出>>淡入)
vue 组件封装 -- 添加【呼吸】动画效果(两种: 淡入>>淡入,淡入>>淡出>>淡入)
208 0
|
缓存 网络协议 JavaScript
【面试题】前端面试复习6---性能优化
【面试题】前端面试复习6---性能优化
277 1