1.Rpm打包程序

1.1为什么要使用rpm打包

1、编译安装软件,优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长。

2、yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。

===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。

3、编译源码,根据自己的需求做成定制RPM包-->搭建内网yum仓库--yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,只能适用于本公司的环境。另外一般人不会定制RPM包。这是中大型互联网企业运维自动化的必要技能。

rpm的概念,想了解的朋友可以查看http://www.ibm.com/developerworks/cn/linux/l-rpm/

2   fpm工具打包详解

FPM的作者是jordansissel

FPM的github:https://github.com/jordansissel/fpm

FPM功能简单说就是将一种类型的包转换成另一种类型。

2.1 支持的源类型包

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

rpm        #对rpm进行转换

gem        #对rubygem包进行转换

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

2.2支持的目标类型包

rpm        #转换为rpm包

deb        #转换为deb包

solaris      #转换为solaris包

puppet     #转换为puppet模块

2.3 fpm安装

[root@student ~]# yum -y install ruby rubygems ruby-devel        ß安装ruby模块

[root@student ~]# gem sources -a http://mirrors.aliyun.com/rubygems/            ß添加阿里云的Rubygems仓库,国外资源会影响下载速度

http://mirrors.aliyun.com/rubygems/ added to sources

[root@student ~]# gem sources --remove http://rubygems.org/  ß移除原生的ruby仓库

http://rubygems.org/ removed from sources

[root@student ~]# gem install fpm        ß安装fpm

3.fpm常用参数

-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

4.实战定制Nginx的Rpm包

编写脚本

[root@oldboy ~]# cd /server/scripts/     ß进入到/server/scripts

[root@oldboy scripts]# vim nginx_rpm.sh     ß这是安装完rpm包要执行的脚本

#!/bin/bash

useradd nginx -M -s /sbin/nologin

ln -s /application/nginx-1.6.2/ /application/nginx

[root@student scripts]# fpm -s dir -t rpm -n nginx -v 1.6.3 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3/                ß打包

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=>"nginx-1.6.3-1.x86_64.rpm"}

[root@student scripts]# rpm -qpl nginx-1.6.3-1.x86_64.rpm                ß查看包内容

[root@student scripts]#  rpm -qp --scripts nginx-1.6.3-1.x86_64.rpm                 ß查看脚本

postinstall scriptlet (using /bin/sh):

#!/bin/sh

useradd nginx -M -s /sbin/nologin

ln -s /application/nginx/nginx-1.6.3/ /application/nginx

5.实战定制LNMP的Rpm包

如果是rpm包 直接依赖---然后替换配置文件,启动即可。

如果是源码直接打包目录。

Rpm安装报错

安装制作好的rpm包报错:Error:cpio: Digest mismatch

解决:yum remove prelink -y

自动化利器-RPM自定义打包的更多相关文章

  1. maven-使用assembly自定义打包

    用maven管理项目引用依赖很方便,但是打包的时候如果是web包还好,会直接把依赖的jar包打到lib目录中,如果是jar包的话,依赖默认是不打入进去的 这样如果运行环境中没有依赖的jar包,就麻烦了 ...

  2. 自动化利器-Zabbix

    1.1为何需要监控系统 在一个IT环境中会存在各种各样的设备,例如:硬件设备.软件设备.其系统的构成也是非常复杂的. 多种应用构成负载的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责. ...

  3. 云原生之旅 - 7)部署Terrform基础设施代码的自动化利器 Atlantis

    前言 前面有几篇文章讲述了如何使用Terraform创建资源 (基础设施即代码 Terraform 快速入门, 使用 Terraform 创建 Kubernetes) 以及 Kubernetes时代的 ...

  4. Android studio 自定义打包apk名

    Android Studio打包应用默认生成的apk名称是:app-release.apk .如果我们要让生成的apk名跟我们版本包名有联系的话,那我们就要自定义生成的apk名了 需要在build.g ...

  5. Android studio 自定义打包APK名称

    Android Studio打包应用默认生成的apk名称是:app-release.apk .如果我们要让生成的apk名跟我们版本包名有联系的话,那我们就要自定义生成的apk名了,要怎么做呢. 我们只 ...

  6. 使用Maven的assembly插件实现自定义打包

    一.背景 最近我们项目越来越多了,然后我就在想如何才能把基础服务的打包方式统一起来,并且可以实现按照我们的要求来生成,通过研究,我们通过使用maven的assembly插件完美的实现了该需求,爽爆了有 ...

  7. FAutoTest-微信小程序 / 公众号H5 自动化利器

    X5内核H5自动化背景 近来有很多童靴咨询如何做微信小程序/公众号等H5页面来做自动化,之前写了一篇文章微信小程序自动化测试实践 https://www.cnblogs.com/yyoba/p/945 ...

  8. 在基于vue-cli的项目自定义打包环境

    在工作当中,遇到了下面这个问题: 测试环境与生产环境中的用户权限不一样,因此,就需要根据测试环境打一个包,生产环境又打一个包.可是,如果每次打包都需要更改权限的配置文件的话,会很麻烦,而且,体现不出一 ...

  9. Maven学习总结(27)——Maven自定义打包插件maven-assembly-plugin详解

    Assembly插件会生成 "assemblies", 此特性等同于的Maven 1 distribution plug-in..该插件不仅支持创建二进制归档文件,也支持创建源码归 ...

随机推荐

  1. Jquery 文字上下滚动效果示例代码

      <!doctype html>   <html>   <head>   <meta charset="utf-8">       ...

  2. layer弹出层中H5播放器全屏出错解决 & 属性poster底图占满<video>的方法

    1. 在layer弹窗组件中 如果使用了flash播放器,全屏是正常的 但若使用了HTML5的播放器,全屏失效 举个栗子 <!DOCTYPE html> <html> < ...

  3. Odd Numbers of Divisors

    给出一个正奇数K,两个正整数low,high. 有多少整数属于[low, high],且包含K个因子. 数据 C(0 < C < 1e5),测试样例数. (1 < K < 10 ...

  4. Win7配置IIS7

    1.安装 控制面板\程序\程序和功能\打开或关闭Windows功能  选择Internet信息服务勾选相应的内容 2.打开iis信息服务管理器  点击菜单\运行(WIN+R) 输入iis 如图所示 可 ...

  5. JVM 堆和栈的区别

      栈内存:   程序在栈内存中运行   栈中存的是基本数据类型和堆中对象的引用   栈是运行时的单元   栈解决程序的运行问题,即程序如何执行,或者说如何处理数据   一个线程一个独立的线程栈   ...

  6. C#中运算符的使用

    通过学习知道了知道了运算符的分类及使用方法 运算符用于执行程序代码运算,会针对一个或一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是“+”. C#语言把除了控制语句和输入输出 ...

  7. Redis实战与 Session缓存

    C#操作Redis的库有很多,比如C# Redis Client就很好用, 在NuGet上搜索 ServiceStack.Redis  安装到项目中,将会添加以下引用 ServiceStack.Red ...

  8. Python字典详解

    转载请注明出处 Python字典(dict)是一个很常用的复合类型,其它常用符合类型有:数组(array).元组(touple)和集合(set).字典是一个key/value的集合,key可以是任意可 ...

  9. 1682: [Usaco2005 Mar]Out of Hay 干草危机

    1682: [Usaco2005 Mar]Out of Hay 干草危机 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 391  Solved: 258[ ...

  10. iOS 获取手机型号,系统版本

    新添加判断iPhone 7.iPhone 7 Plus ,我手里没有7,判断不对表打我~ FQ找的资料:http://www.iphonehacks.com/download-iphone-ios-f ...