注意部FPM时的环境一定要跟生产环境的系统版本最好是保持一至,我第一次测试没通过,(我在CENTOS7和部属FPM打好的包在Centos6.x和安装,结果失败)

1:安装 FPM打包工具的依赖包:

[root@DB apps]# yum install gcc* rpm-build

2:源码安装ruby

https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.4.tar.bz2
在安装Ruby之前先安装openssl源码

修改Makefile:增加 CFLAG -fPIC,如:CFLAG= -fPIC -DOPENSSL

如下:

    修改之前:
CFLAG= -O
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS
修改之后
CFLAG= -fPIC
DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_SSL2 -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST -DOPENSSL_NO_WEAK_SSL_CIPHERS
查看目录:
[root@DB openssl-1.0.2j]# pwd
/data/ok/openssl-1.0.2j
[root@DB openssl-1.0.2j]# vim Makefile
修改后就可以编译和安装了!!!
[root@DB openssl-1.0.2j]# ./config --prefix=/data/apps/openssl-1.0.2j
[root@DB openssl-1.0.2j]# make && make install
增加openssl的lib目录到系统里并生效
[root@DB openssl-1.0.2j]# echo '/data/apps/openssl-1.0.2j/lib/'>>/etc/ld.so.conf.d/server.conf
[root@DB openssl-1.0.2j]# ldconfig

增加openssl的bin目录到系统里并生效

[root@DB openssl-1.0.2j]# echo 'export PATH=/data/apps/openssl-1.0.2j/bin/:${PATH}'>>/etc/profile
[root@DB openssl-1.0.2j]# source /etc/profile

接下来源码安装:RUBY

[root@DB ruby-2.3.4]# ./configure --prefix=/data/apps/ruby-2.3.4 --with-openssl-dir=/data/apps/openssl-1.0.2j/ssl
[root@DB ruby-2.3.4]# make && make install echo 'export PATH=/data/apps/ruby-2.3.4/bin/:${PATH}' >>/etc/profile
source /etc/profile

# 添加淘宝的Rubygems仓库,外国的源慢,移除原生的Ruby仓库

[root@DB ~]# gem sources --add https://ruby.taobao.org/ --remove https://rubygems.org/
source https://ruby.taobao.org/ already present in the cache
https://rubygems.org/ removed from sources
[root@DB ~]# gem sources list
*** CURRENT SOURCES *** https://ruby.taobao.org/

首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。

[root@DB ~]# gem install json -v 1.8.3
Fetching: json-1.8.3.gem (100%)
Building native extensions. This could take a while...
Successfully installed json-1.8.3
Parsing documentation for json-1.8.3
Installing ri documentation for json-1.8.3
Done installing documentation for json after 1 seconds
1 gem installed
[root@DB ~]# gem install fpm -v 1.3.3
Fetching: ffi-1.9.18.gem (100%)
Building native extensions. This could take a while...
Successfully installed ffi-1.9.18
Fetching: clamp-0.6.5.gem (100%)
Successfully installed clamp-0.6.5
Fetching: childprocess-0.7.1.gem (100%)
Successfully installed childprocess-0.7.1
Fetching: cabin-0.9.0.gem (100%)
Successfully installed cabin-0.9.0
Fetching: backports-3.8.0.gem (100%)
Successfully installed backports-3.8.0
Fetching: arr-pm-0.0.10.gem (100%)
Successfully installed arr-pm-0.0.10
Fetching: fpm-1.3.3.gem (100%)
Successfully installed fpm-1.3.3
Parsing documentation for ffi-1.9.18
Installing ri documentation for ffi-1.9.18
Parsing documentation for clamp-0.6.5
Installing ri documentation for clamp-0.6.5
Parsing documentation for childprocess-0.7.1
Installing ri documentation for childprocess-0.7.1
Parsing documentation for cabin-0.9.0
Installing ri documentation for cabin-0.9.0
Parsing documentation for backports-3.8.0
Installing ri documentation for backports-3.8.0
Parsing documentation for arr-pm-0.0.10
Installing ri documentation for arr-pm-0.0.10
Parsing documentation for fpm-1.3.3
Done installing documentation for ffi, clamp, childprocess, cabin, backports, arr-pm, fpm after 15 seconds
7 gems installed
# 上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即gem install fpm

制做RPM包的流程是:

先源码安装软件包,然后写脚本,然后通过FPM接合脚本完RPM包的制做:

下面以TENGINE为例:

在TENGINE以源码的方法安装成功后为前题:

查看却本:

[root@DB scripts]# cat tengine_rpm.sh
#!/bin/bash
useradd www -M -s /sbin/nologin
ln -s /data/apps/tengine-2.1.0 /data/apps/tengine

下面就开始制做RPM包了:

[root@DB scripts]# fpm -s dir -t rpm -n tengine -v 2.1.0 -d 'gcc gcc-c++ autoconf automake' --post-install /data/scripts/tengine_rpm.sh -f /data/apps/tengine-2.1.0
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"tengine-2.1.0-1.x86_64.rpm"}

查看生成的RPM包:

[root@DB scripts]# ls
tengine-2.1.0-1.x86_64.rpm tengine_rpm.sh

经过测试生成的RPM包可以成功安装!!!!

FPM打包工具 可以把源码包制定为rpm包 是自动化部署的环节的更多相关文章

  1. 利用src.rpm包修改源码后重新制作rpm包

    1. 下载 .src.rpm包.例:https://repos.fedorapeople.org/repos/openstack/EOL/openstack-grizzly/epel-6/openst ...

  2. 使用FPM打包工具打rpm包

    使用FPM打包工具打rpm包 一:安装ruby环境和gem命令 fpm 是 ruby写的,因此系统环境需要ruby且版本必须大于1.8.5 # yum -y install ruby rubygems ...

  3. XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译

    XJar: Spring-Boot JAR 包加/解密工具,避免源码泄露以及反编译 <?xml version="1.0" encoding="UTF-8" ...

  4. IPerf——网络测试工具介绍与源码解析(4)

    上篇随笔讲到了TCP模式下的客户端,接下来会讲一下TCP模式普通场景下的服务端,说普通场景则是暂时不考虑双向测试的可能,毕竟了解一项东西还是先从简单的情况下入手会快些. 对于服务端,并不是我们认为的直 ...

  5. 将源码包制作成rpm包

    Linux系统中一般安装软件有两种方法,源码安装和yum安装或者rpm包安装,由于光盘中的rpm包都是几年前制作成的,所以软件版本都很低,同时yum安装对软件的可定制性很低,所以为了使用最新的软件,一 ...

  6. Java并发工具类CountDownLatch源码中的例子

    Java并发工具类CountDownLatch源码中的例子 实例一 原文描述 /** * <p><b>Sample usage:</b> Here is a pai ...

  7. fpm定制化RPM包之nginx rpm包的制作

    fpm定制化RPM包之nginx rpm包的制作 1.安装ruby模块 # yum -y install ruby rubygems ruby-devel 2.添加阿里云的Rubygems仓库,国外资 ...

  8. CentOS使用yum源中自带的rpm包安装LAMP环境

    CentOS使用yum源中自带的rpm包安装LAMP环境.这是Linux下安装LAMP的环境一种最基本最简便的方式.新手可以从容安装使用. 1. 安装基础包(可选安装)yum install -y w ...

  9. ceph-csi组件源码分析(1)-组件介绍与部署yaml分析

    更多ceph-csi其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi组件源码分析(1)-组件介绍与部署yaml分析 基于tag v3.0.0 ht ...

随机推荐

  1. Jquery 获取对象的几种方式(转载)

    1.先讲讲JQuery的概念 JQuery首先是由一个 America 的叫什么 John Resig的人创建的,后来又很多的JS高手也加入了这个团队.其实 JQuery是一个JavaScript的类 ...

  2. where 1=1和 0=1 的作用

    where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where 1=1 在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有 ...

  3. 转:修改ETM,用Ogre实现《天龙八部》地形与部分场景详解

    本文主要讲的是<天龙八部>游戏的地形和一部分场景的具体实现,使用C++, Ogre1.6,我摸索了段时间,可能方法用的并不是最好的,但好歹实现了.文章可能讲得有点罗嗦,很多简单的东西都讲了 ...

  4. 一个成功的 Git 分支模型

    在这篇文章中介绍的开发模型在大约一年前已经在我的私有项目和工作引入的,而且已经被证明是非常成功的.我想写一些关于这个模型的东西已经好一段时间了,但是一直苦于没有时间,不过现在可以了.我不想探讨任何项目 ...

  5. Retrofit2完全教程

    本文注目录: Retrofit入门 Retrofit注解详解 Gson与Converter RxJava与CallAdapter 自定义Converter 自定义CallAdapter 其它说明 前言 ...

  6. 解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题

    如题,相信大家都会遇到这个问题,那么为什么会触发多次呢?其实当你用jquery绑定onchange事件的时候你就无形中给每个radio绑定了事件,所以才会出现执行多少次的问题了,那么如何解决呢,其实这 ...

  7. Linux-socket的close和shutdown区别及应用场景

    shutdown的定义 #include<sys/socket.h> int shutdown(int sockfd,int how); how的方式有三种分别是: SHUT_RD(0): ...

  8. 【RS】Local Collaborative Ranking - LCR: 局部协同排序

    [论文标题]Local Collaborative Ranking   (WWW '14 23rd WWW ) [论文作者]Joonseok [论文链接]Paper(11-pages // Doubl ...

  9. DHCP工作过程的六个主要步骤

    对于学习DHCP来说,很重要的一部分就是对于DHCP工作过程的理解. DHCP分为两个部分:一个是服务器端,另一个是客户端. 所有客户机的IP地址设定资料都由DHCP服务器集中管理,并负责处理客户端的 ...

  10. shiro过滤器过滤属性含义

    securityManager:这个属性是必须的. loginUrl :没有登录的用户请求需要登录的页面时自动跳转到登录页面,不是必须的属性,不输入地址的话会自动寻找项目web项目的根目录下的”/lo ...