一、前言

在企业中我们有事安装软件包。部分都是源码安装,如nginx安装路径都已经固化了,但实际业务中,我们都是把软件包安装到固定目录下,不满足需要,这是其一、其二,编译安装很耗时,比如mysql,特别是一些公司推行自动化,编译安装也不方便,容易出错。这是rpm包就很有用,废话少说,开始制作rpm包之旅吧。

二、rpm制作工具-fpm

FPM功能简单说就是将一种类型的包转换成另一种类型。对!就是简单易懂,不废话。

三、fpm软件的参数介绍

1、支持的源类型包

dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包

rpm 对rpm进行转换

gem 对rubygem包进行转换

python 将python模块打包成相应的类型

2、支持的目标类型包

rpm 转换为rpm包

deb 转换为deb包

solaris 转换为solaris包

puppet 转换为puppet模块

3、常用参数

-s 指定源类型
-t 指定目标类型,即想要制作为什么包
-n 指定包的名字
-v 指定包的版本号
-C 指定打包的相对路径 Change directory to here before searching forfiles
-d 指定依赖于哪些包
-f 第二次打包时目录下如果有同名安装包存在,则覆盖它
-p 输出的安装包的目录,不想放在当前目录下就需要指定
--post-install 软件包安装完成之后所要运行的脚本;同--after-install
--pre-install 软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall 软件包卸载完成之后所要运行的脚本;同--after-remove
--pre-uninstall 软件包卸载完成之前所要运行的脚本;同--before-remove

四、fpm安装

fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。
# 安装ruby模块
yum -y install ruby rubygems ruby-devel  gcc  rpm-build 
# 查看当前使用的rubygems仓库
gem sources list
# 添加淘宝的Rubygems仓库,外国的源慢,移除原生的Ruby仓库
gem sources  --add https://ruby.taobao.org/ && gem sources  --remove https://rubygems.org/

# 安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。
gem install json -v 1.8.3
gem install fpm -v 1.3.3
# 上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即gem install fpm

五、制作rpm包

以nginx为例

1、下载nginx的源码包

wget http://nginx.org/download/nginx-1.14.0.tar.gz

2、安装nginx依赖

yum  install  openssl openssl-devel  pcre  pcre-devel  zlib  zlib-devel   gcc  -y

3、解压

tar  -zxvf nginx-1.14.0.tar.gz

4、进入目录预编译[root@localhost opt]# cd nginx-1.14.0

[root@localhost nginx-1.14.0]#
[root@localhost nginx-1.14.0]# ./configure \
 --prefix=/opt/pmo/nginx \
--user=nginx \
--group=nginx \
--with-pcre \
--with-stream \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_realip_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_addition_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-debug \

5、编译

make -j24 //使用多核编译

6、创建目录

mkdir -p /temp/fpm_install/

7、安装到制定的目录中

make -j24 install DESTDIR=/temp/fpm_install/

8、脚本

[root@localhost nginx-1.6.2]# cat install_after.sh

#!/bin/bash

source /etc/rc.d/init.d/functions

groupadd -r nginx

useradd -r -g nginx

nginx exit $?

[root@localhost nginx-1.6.2]# cat remove_after.sh

#!/bin/bash

source /etc/rc.d/init.d/functions

rm -rf /usr/local/nginx

rm -rf /etc/nginx userdel

nginx exit $?

9、制作nginx的rpm包

fpm -f -s dir \
-t rpm \
-n nginx \
-v 1.14.0 \
--iteration 1.el6 \
-C /opt/nginx-1.14.0/ \
-p /temp/nginx_rpm/ \
--description 'nginx1.14.0_rpm' \
--url 'http://nginx.org/en/' \
--after-install /opt/fpm_install/install_after.sh \
--after-remove /opt/fpm_install/remove_after.sh

8、出现的错误:

1、创建缺少的目录

mkdir -p /temp/nginx_rpm

2、安装rpm-build

yum   install  rpm-build -y

fpm制作rpm包的更多相关文章

  1. 利用fpm制作rpm包

    使用fpm制作rpm包 安装如下 [root@web01 ~]# yum install -y gcc zlib zlib-devel wget http://ruby.taobao.org/mirr ...

  2. fpm 制作rpm包

    使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...

  3. fpm 制作 rpm 包

    支持的 源类型包 ① dir : 将目录打包成所需要的类型, 可用于源码编译安装软件包 ② rpm : 对 rpm 包进行转换 ③ gem : 对 rubygem 包进行转换 ④ python : 将 ...

  4. Linux基于FPM制作RPM包(以Nginx为例)

    1.搭建Epel  Yum源  安装在线yum源 [root@localhost ~]# rpm -ivh epel-release-latest-.noarch.rpm //安装扩展源 [root@ ...

  5. linux制作RPM包

    制作rpm包 1.制作流程1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制 ...

  6. 制作RPM包

    RPM包制作过程 1.1 前期工作 1)创建打包用的目录rpmbuild/{BUILD,SPECS,RPMS, SOURCES,SRPMS} 建议使用普通用户,在用户家目录中创建 2)确定好制作的对象 ...

  7. fpm工具来制作rpm包软件

    第1章 rpm包的制作 1.1 fpm的概念介绍 FPM功能简单说就是将一种类型的包转换成另一种类型 1.1.1.支持的源类型 类型 说明 dir   将目录打包成所需要的类型,可以用于源码编译安装的 ...

  8. 速成制作rpm包

    FPM 由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包.通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐.这就用到了FP ...

  9. FPM定制RPM包实践

    1.1 快速部署方案 ✔ 问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案. 解答: 1.tar 打包 先编译安装 打包-->分发-->解包(比如 ...

随机推荐

  1. Strongly connected HDU - 4635(判断强连通图 缩点)

    找出强联通块,计算每个连通块内的点数.将点数最少的那个连通块单独拿出来,其余的连通块合并成一个连通分量. 那么假设第一个连通块的 点数是 x  第二个连通块的点数是 y 一个强连通图(每两个点之间,至 ...

  2. 【题解】 [HAOI2016]食物链 (拓扑排序)

    懒得复制,直接贴链接吧 Solution: 水题一道,注意单独一个点的不算在食物链中,也就是\(in[i]==0\) \(out[i]==0\)的点就不计算 Code: //It is coded b ...

  3. Spring点滴九:Spring bean的延迟初始化

    Spring bean延迟初始化: 官网API: By default, ApplicationContext implementations eagerly create and configure ...

  4. oracle存储过程批量插入测试数据

    前几天测试中债时,自定义资产有一级类型和二级类型,一级类型下有很多分类,每个分类下又有很多二级分类,而要做的是每种类型都要建立一个自定义资产,并做一笔交易,然后测试是否出值,于是写了一个存储过程批量插 ...

  5. Meshgrid函数的基本用法(转载)

    在Numpy的官方文章里,meshgrid函数的英文描述也显得文绉绉的,理解起来有些难度. 可以这么理解,meshgrid函数用两个坐标轴上的点在平面上画网格. 用法: [X,Y]=meshgrid( ...

  6. gulpfile.js不断更新中...

    Gulp压缩合并js/css文件,压缩图片,以及热更新教程 var gulp = require('gulp');var concat = require('gulp-concat');//- 多个文 ...

  7. Chapter 9 (排序)

    1.排序算法: //****************************Sort.h******************************************** #ifndef SOR ...

  8. Java基础-使用JAVA代码剖析MD5算法实现过程

    Java基础-使用JAVA代码剖析MD5算法实现过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  9. Python的常用内置函数介绍

    Python的常用内置函数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.取绝对值(abs) #!/usr/bin/env python #_*_coding:utf-8_ ...

  10. Spark记录-Scala shell命令

    1.scala shell命令 scala> :help All commands can be abbreviated, e.g., :he instead of :help. :edit & ...