组内准备搭建内部yum源,在这之前需要规范软件的安装目录,并把现有的应用打包。

目前接触两种rpm打包工具,rpmbuild和fpm。

- rpmbuild

rpmbuild关键是spec文件编写。

环境搭建

yum -y install rpm-build rpmdevtools

useradd rpm; su rpm

注: rpm打包需要特定目录下,在近期版本下rpmbuild可以在非root账号家目录下创建打包目录:

rpmdev-setuptree

[rpm@vm-1-lz rpmbuild]$ ll

total 20

drwxrwxr-x. 2 rpm rpm 4096 Dec 22 14:46 BUILD

drwxrwxr-x. 2 rpm rpm 4096 Dec 22 14:46 RPMS

drwxrwxr-x. 2 rpm rpm 4096 Dec 22 15:06 SOURCES

drwxrwxr-x. 2 rpm rpm 4096 Dec 22 16:07 SPECS

drwxrwxr-x. 2 rpm rpm 4096 Dec 22 14:46 SRPMS

[rpm@vm-1-lz rpmbuild]$

注:这里是/home/rpm/rpmbuild, 这个默认目录可以修改,可以修改宏定义:

/usr/lib/rpm/macros:

    _topdir                %{getenv:HOME}/rpmbuild

然后在rpmbuild/SPECS 目录下创建spec文件:

cd ~/rpmbuild/SPECS

rpmdev-newspec -o example.spec

SPEC文件

打包过程是

1. %prep 解压source部分定义的压缩包到 %build目录下

注:Source需要是tar格式压缩文件,这样setup才能调用 (source 跟setup可以多条记录,并依序对应)

2  %build 可以调用%configure宏变量或是直接调用configure命令直接配置

3  %install 安装文件到%buildroot下 (rpmbuild/BUILDROOT), 在这部分,需要确保目录已经存在不然会报错,比如拷贝配置文件到/etc/下,需要建立%buildroot/etc 目录

注:%install 部分是用绝对路径的,所以最好引用%buildroot

4 %file 部分定义那些文件将被打包进rpm包里

注:%file部分是用相对路径,我们可以用宏变量 比如%_prefix 代表/usr  其绝对路径就是%buildroot/usr

参考 http://fedoraproject.org/wiki/Packaging:RPMMacros

- fpm 打包

这是一个开源的项目 https://github.com/jordansissel/fpm

环境搭建:

yum -y ruby ruby-devel rubygems rpm-build

gem install fpm

注: 这里有个坑。如果正常按照gem去安装 我们是没办法调用 fpm成功的,因为 cabin的版本有问题:

[root@vm-1-lz RPMS]# fpm

    /usr/lib/ruby/gems/1.8/gems/cabin-0.8.0/lib/cabin/mixins/logger.rb:12:in `included': undefined method               `options' for #<Cabin::Subscriber:0x7fad75e31b90> (NoMethodError)

     from /usr/lib/ruby/gems/1.8/gems/cabin-0.8.0/lib/cabin/channel.rb:105:in `call'

    ....

因此, 卸载当前cabin版本:

gem uninstall cabin

....

gem install cabin -v 0.7.2

用前一个版本的cabin才能正确启动fpm

构建rpm包

把之前编译好的nginx打包:

nginx 目录: /usr/local/nginx

fpm命令:

fpm -e -s dir -t rpm -n nginx -v 1.8.0 -C /usr/local/nginx --prefix=/opt/nginx

注: -e 可以让我们看到具体的spec文件,  如果没问题,保存退出就能在当前目录创建一个rpm包

但是fpm不能友好的按照规范路径打包

- SPEC例子

Name:           tengine
Version: 1.5.
Release: %{?dist}
Summary: tengine-1.5. Group: Application/System
License: GPL
URL: http://tengine.taobao.org/
Source0: tengine-1.5..tar.gz
Source1: LuaJIT-2.0..tar.gz
Source2: pcre-8.34.tar.gz
Source3:   openssl-1.0.2e.tar.gz
Source4:   zlib-1.2..tar.gz
Source5:   ngx_devel_kit-0.2..tar.gz
Source6:   jemalloc-3.4..tar.bz2
Source7:   nginx-bb-1.8..tar.gz Requires: zlib,pcre,openssl,LuaJIT %description
tengine-1.5. %prep
%setup -b
%setup -b
%setup -b
%setup -b
%setup -b
%setup -b
%setup -b
%setup -b %build
CFLAGS="${CFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic}" ; export CFLAGS ;
CXXFLAGS="${CXXFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic}" ; export CXXFLAGS ;
FFLAGS="${FFLAGS:--O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/lib64/gfortran/modules}" ; export FFLAGS ;
./configure \
--with-http_ssl_module \
--prefix=/opt/nginx \
--error-log-path=/opt/nginx/logs/ \
--http-log-path=/opt/nginx/logs/ \
--pid-path=/opt/nginx/run/ \
--lock-path=/opt/nginx/lock/ \
--user=www \
--group=www \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_lua_module \
--with-luajit-inc=/usr/local/include/luajit-2.0 \
--with-luajit-lib=/usr/local/lib \
--with-pcre=%{_builddir}/pcre-8.34 \
--with-openssl=%{_builddir}/openssl-1.0.2e \
--with-zlib=%{_builddir}/zlib-1.2. \
--with-http_concat_module \
--with-http_sysguard_module \
--with-http_realip_module \
--without-syslog \
--with-jemalloc \
--add-module=%{_builddir}/ngx_devel_kit-0.2. make %{?_smp_mflags} %install
rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT mv %{buildroot}/opt/nginx/conf %{buildroot}/opt/nginx/conf.default
install -d %{buildroot}/opt/nginx/conf
cp -r %{_builddir}/nginx-bb-1.8./conf/* %{buildroot}/opt/nginx/conf %clean
rm -rf $RPM_BUILD_ROOT %files
%defattr(-,root,root,-)
%doc
/opt/nginx/* %changelog

构建本地yum源之rpmbuild的更多相关文章

  1. 构建本地yum源之rpmbuild问题汇总

    - check-rpaths的问题 今天在编译varnish的时候,遇到几个问题,其中一个就是出现如下错误: ...+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/c ...

  2. 本地yum源构建以及Docker离线安装

    Docker离线安装以及本地yum源构建 在docker的使用过程中有时候会遇到一些私有化部署的问题,就是在一些无法上网的机器上面安装使用dokcer,这就引出了docker的离线安装的问题,dock ...

  3. Linux虚拟机配置本地yum源

    刚开始使用Linux,自己构建了一个Linux虚拟机之后,在使用yum install的时候,经常是出错,提示连接不上. 一直以为是自己构建的虚拟机的问题,后来在网上查找了一些资料,才发现:需要配置本 ...

  4. CentOS7利用本地yum源配置NBD

    一:CentOS7.0创建本地YUM源 (物理机:直接将刻录的CentOS7光盘利用光驱插入物理机上) (虚拟机: CD/DVD>>连接本地ISO) 针对物理机192.168.9.112进 ...

  5. 部署企业本地yum源及源码包安装

    YUM命令 yum list //列出每个软件包(包括未安装和已安装) rpm -q repolist //列出所以仓库名称 info //查看软件信息 rpm -qi install //安装 rp ...

  6. centos本地yum源安装

    1.为DVD或U盘创建一个用于挂载的目录 [root@localhost ~]# mkdir /media/CentOS/ 2.查看DVD或U盘所在的路径 [root@localhost ~]# fd ...

  7. redhat 配置本地yum源163yum源epel 源,无需卸载yum!无须拷贝ISO,愿网上少一点垃圾教程误人子弟

    都知道redhat不收费,但是其yum服务是要收费的,不想出钱那就自己配置yum源就好了. 首先,博主之前也没用过redhat,第一次用yum装包的时候提示什么没注册之类的,balaba一大堆,然后就 ...

  8. RedHat Linux RHEL6配置本地YUM源

    YUM是Yellow dog Updater Modified的简称,起初是由yellow dog这一发行版的开发者Terra Soft研发,用python写成,那时还叫做yup(yellow dog ...

  9. RHEL7.2和RHEL6.5的配置网络yum源和本地yum源

    RHEL7.2配置本地yum源 [root@localhost ~]#monut /dev/sr0 /mnt      #挂载光盘 [root@localhost ~]# rm -rf /etc/yu ...

随机推荐

  1. VJP1193 扫雷(状压)

    链接 保存当前行和前一行两行的状态 #include <iostream> #include<cstdio> #include<cstring> #include& ...

  2. poj炮兵阵地(状压)(25+10+20=55)

    http://poj.org/problem?id=1185 刚开始思路就错了 想着用保存这一行的状态 然后再去枚举前面两行的状态 这样不能保证前面两行的状态同时满足要求 正解:保存两行的状态 再依次 ...

  3. bzoj1443

    首先要思考的问题肯定是,什么点可以是ans, 不难想到对图黑白染色,假如一个棋子不管怎么走,都只能走到和它同色的点上时,这就是一个ans 再考虑,每次棋子的移动都是黑白相间的 再考虑,黑白染色是可以构 ...

  4. Linux Kernel ‘/bcm/Bcmchar.c’本地信息泄露漏洞

    漏洞名称: Linux Kernel ‘/bcm/Bcmchar.c’本地信息泄露漏洞 CNNVD编号: CNNVD-201311-053 发布时间: 2013-11-06 更新时间: 2013-11 ...

  5. 【转】VIRTUALBOX导入已有.VDI文件步骤

    原文网址:http://blog.csdn.net/wanghai__/article/details/6703923 1.安装SUN VIRTUALBOX 2.新建,进入到“新建虚拟电话”对话框,下 ...

  6. C# word开发

    c# 操作Word总结 在医疗管理系统中为保存患者的体检和治疗记录,方便以后的医生或其他人查看.当把数据保存到数据库中,需要新建很多的字段,而且操作很繁琐,于是想到网页的信息创建到一个word文本中, ...

  7. 韦东山yy公开课笔记(2)--汇编,段,栈,重定位/链接地址,位置无关吗

    1. 要不要学习汇编 可以只懂一点,工作中基本不用,一旦用就是出了大问题 ldr : load 读内存 ldr r0, [r1]  : r1里存放的是地址值, 去这个地址读取4字节的内容,存入r0 s ...

  8. node系列3

    网络操作 通过NodeJS,除了可以编写一些服务端程序来协助前端开发和测试外,还能够学习一些HTTP协议与Socket协议的相关知识 开门红 使用NodeJS内置的http模块简单实现一个HTTP服务 ...

  9. HIbernate学习笔记(一) 了解hibernate并搭建环境建立第一个hello world程序

    Hibernate是一个开放源代码的ORM(对象关系映射)框架,它对JDBC进行了轻量级的封装,Java程序员可以使用面向对象的编程思维来操纵数据库,它通过对象属性和数据库表字段之间的映射关系,将对象 ...

  10. linux内核系列(一)编译安装Linux内核 2.6.18

    1.配置环境 操作系统:CentOS 5.2 下载linux-2.6.18版本的内核,网址:http://www.kernel.org 说明:该编译文档适合2.6.18以上的Linux内核版本,只需所 ...