rpmbuild制作rpm包

简介:

 最近在做puppet 中间件 部署,之前一直使用rpm安装系统的一些常用包(ntp,ssh等),于是想到把nginx源码包编译后做成rpm来用puppet进行大规模自动部署,这样就省去了不少时间,也简化了puppet编写配置的步骤。

系统 centos5.4  x86_64

1.yum install -y rpm-build

mkdir -p /usr/src/redhat/{RPMS,SOURCES,SPECS}

mkdir -p /root/rpmbuild/RPMS/

2.编辑spec文件(此文件用来进行制作rpm时对源码包进行编译等)

3.rpmbuid  -bb  xx.spec,生成rpm成功后会提示xx.rpm的存放目录.

以下是我制作nginx的rpm的一个简单示例:

1)

   yum install -y rpm-build

   mkdir -p /usr/src/redhat/{RPMS,SOURCES,SPECS}

   mkdir -p /root/rpmbuild/{RPMS,BUILD}

   cp nginx-1.2.0.tar.gz /root/rpmbuild/BUILD/

2)

   vim /usr/src/redhat/SPECS/nginx.spec

 

   Name:nginx

   Version:1.2.0

   Release:        1%{?dist}

   Summary:        test

   Group:Applications

   License:Share

   BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

   %description

   %prep

   tar zxf $RPM_SOURCES_DIR/nginx-1.2.0.tar.gz  #解压缩源码包

   %build

   cd $RPM_BUILD_DIR/nginx-1.2.0

   ./configure --prefix=/usr/nginx_test --without-pcre  --without-http_rewrite_module  #设定编译参数

   make

   %install

   cd $RPM_BUILD_DIR/nginx-1.2.0

   make install

   %clean

   rm -rf $RPM_BUILD_DIR/nginx-1.2.0

   %files

   %defattr(-,root,root,-)

   %doc

   %changelog

 

3)制作rpm包

   rpmbuild  -bb  /usr/src/redhat/SPECS/nginx.spec

制作成功后提示我的rpm包生成的路径为/root/rpmbuild/RPMS/x86_64/nginx-1.2.0-1.el6.x86_64.rpm

 

系统 centos6.0  x86_64

在centos 6.0上使用rpmbuild制作rpm包会出现File not found: /root/rpmbuild/BUILDROOT/…的错误,看是centos 6中的rpmbuild topdir已经改变,为了能兼容centos 5的spec文件,需要对topdir进行修改:

编辑/usr/lib/rpm/macros文件:

%_topdir                %{getenv:HOME}/rpmbuild

修改为:

%_topdir                %{_usrsrc}/redhat

另外还需要定义buildroot

在spec文件中的make install后面加上DESTDIR=%{buildroot},即:

make install  DESTDIR=%{buildroot}

这里是一个简单的nginx.spec实例:

#cat  nginx.spec 

Summary: High performance web server

Name: Nginx

Version: 1.2

Release: 0.el5.ngx

License: 2-clause BSD-like license

Group: Applications/Server

Source: /usr/src/redhat/SOURCES/nginx-1.2.0.tar.gz

URL: http://nginx.org

Distribution: Centos/Redhat

Packager: zhaohaihua <zhaohh@chanjet.com>


%description

Nginx ("engine x") is a high performance HTTP and reverse proxy server

%prep

tar zxf $RPM_SOURCE_DIR/nginx-1.2.0.tar.gz

%build

cd nginx-1.2.0

./configure --prefix=/opt/nginx

make

%install

cd nginx-1.2.0

make install DESTDIR=%{buildroot}

%preun

%files

/opt/nginx





本文转自 baiying 51CTO博客,原文链接:http://blog.51cto.com/baiying/987403,如需转载请自行联系原作者
目录
相关文章
|
安全 IDE 开发工具
SGX入门:如何开发第一个最简单的 SGX 应用 HelloWorld
本文将向大家展示如何基于 Intel SGX SDK 开发一个最简单 SGX 应用:HelloWorld,这个程序在可信区生产 &quot;Hello world&quot;并传递给不可信代码(缓冲区)打印输出到终端。 虽然 Intel SGX SDK 安装目录中默认提供了数个 Sample,但每个 Sample 对于初学者来说非常复杂和难以理解。 关于 SGX 开发运行环境的搭建可参考:[《SGX入门:
|
机器学习/深度学习 人工智能 自然语言处理
【AI 生成式】什么是生成式 AI,它与判别式 AI 有何不同?
【5月更文挑战第4天】【AI 生成式】什么是生成式 AI,它与判别式 AI 有何不同?
【AI 生成式】什么是生成式 AI,它与判别式 AI 有何不同?
|
人工智能 大数据 程序员
一文看懂开源图化框架中的循环设计逻辑!
相信大家在日常工作中,已经精通各种循环逻辑的实现。就拿我来说吧,多年的工作经验,已经让我可以熟练的使用 C++,Python,英语等多种语言,循环多次输出“hello word”。不过大家有没有想过一个这样的问题:如何在一个有向无环图(Directed Acyclic Graph,简称dag)中实现循环呢?
922 0
一文看懂开源图化框架中的循环设计逻辑!
|
SQL 网络安全 数据库
[网络安全]sqli-labs Less-26a 解题详析
[网络安全]sqli-labs Less-26a 解题详析
214 0
《C++避坑神器·十三》保留多少位小数和去掉小数位后面的零
《C++避坑神器·十三》保留多少位小数和去掉小数位后面的零
510 0
|
关系型数据库 MySQL Shell
一文掌握EOF在Shell脚本中的妙用
一文掌握EOF在Shell脚本中的妙用
336 0
|
Linux
CentOS7下配置Supervisor自启动的两种方法
很多网友留言问如何配置Supervisor 自启动,本文介绍了CentOS7下配置Supervisor自启动的两种方法,推荐使用第二种方式。
773 0
|
安全 应用服务中间件 Linux
Linux系统设置服务自启,实操nginx开机自启
Linux系统设置服务自启,实操nginx开机自启
|
Kubernetes 安全 Cloud Native
带你读《云原生机密计算最佳实践白皮书》——海光CSV:海光安全虚拟化技术
带你读《云原生机密计算最佳实践白皮书》——海光CSV:海光安全虚拟化技术
3458 0