自动化部署必备技能—定制化RPM包

回顾下安装软件的三种方式:

1、编译安装软件,优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长。 2、yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。 ===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。 3、编译源码,根据自己的需求做成定制RPM包–>搭建内网yum仓库–yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,只能适用于本公司的环境。另外一般人不会定制RPM包。这是中大型互联网企业运维自动化的必要技能。

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

这里也不介绍rpmbuild这个打包工具了,想了解的朋友自行谷歌百度。但我不建议大家花太多的时间去学习这个命令,比较晦涩,而且我会在下面介绍更简单的命令。

FPM打包工具

FPM的作者是jordansissel FPM的github:https://github.com/jordansissel/fpm FPM功能简单说就是将一种类型的包转换成另一种类型。

1. 支持的源类型包

  1. dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包
  2. rpm 对rpm进行转换
  3. gem 对rubygem包进行转换
  4. python 将python模块打包成相应的类型

2. 支持的目标类型包

  1. rpm 转换为rpm包
  2. deb 转换为deb包
  3. solaris 转换为solaris包
  4. puppet 转换为puppet模块

3. FPM安装

  1. fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。
  2. # 安装ruby模块
  3. yum -y install ruby rubygems ruby-devel
  4. # 查看当前使用的rubygems仓库
  5. gem sources list
  6. # 添加淘宝的Rubygems仓库,外国的源慢,移除原生的Ruby仓库
  7. gem sources --add https://ruby.taobao.org/ --remove http://rubygems.org/
  8. # 安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。
  9. gem install json -v 1.8.3
  10. gem install fpm -v 1.3.3
  11. # 上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即gem install fpm

4. FPM参数

详细使用见fpm –help

常用参数

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

使用实例–实战定制nginx的RPM包

1. 安装nginx

  1. yum -y install pcre-devel openssl-devel
  2. useradd nginx -M -s /sbin/nologin
  3. tar xf nginx-1.6.2.tar.gz
  4. cd nginx-1.6.2
  5. ./configure --prefix=/application/nginx-1.6.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
  6. make && make install
  7. ln -s /application/nginx-1.6.2/ /application/nginx

2. 编写脚本

  1. [root@oldboy ~]# cd /server/scripts/
  2. [root@oldboy scripts]# vim nginx_rpm.sh # 这是安装完rpm包要执行的脚本
  3. #!/bin/bash
  4. useradd nginx -M -s /sbin/nologin
  5. ln -s /application/nginx-1.6.2/ /application/nginx

3. 打包

  1. [root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.2/
  2. no value for epoch is set, defaulting to nil {:level=>:warn}
  3. no value for epoch is set, defaulting to nil {:level=>:warn}
  4. Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
  5. [root@oldboy ~]# ll -h nginx-1.6.2-1.x86_64.rpm
  6. -rw-r--r-- 1 root root 6.7M Nov 1 10:02 nginx-1.6.2-1.x86_64.rpm

4. 安装rpm包

安装rpm包的三种方法:

  • rpm命令安装
  1. [root@LB-nginx-01 ~]# rpm -ivh nginx-1.6.2-1.x86_64.rpm
  2. error: Failed dependencies:
  3. pcre-devel is needed by nginx-1.6.2-1.x86_64
  4. openssl-devel is needed by nginx-1.6.2-1.x86_64
  5. 但会报如上依赖错误,需要先yum安装依赖才能安装rpm包。
  • yum命令安装rpm包
  1. yum -y localinstall nginx-1.6.2-1.x86_64.rpm
  2. 这个命令会自动先安装rpm包的依赖,然后再安装rpm包。

注意事项

1. 相对路径问题

  1. # 相对路径
  2. [root@oldboy nginx]# fpm -s dir -t rpm -n nginx -v 1.6.2 .
  3. no value for epoch is set, defaulting to nil {:level=>:warn}
  4. no value for epoch is set, defaulting to nil {:level=>:warn}
  5. Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
  6. [root@oldboy nginx]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
  7. /client_body_temp
  8. /conf/extra/dynamic_pools
  9. /conf/extra/static_pools
  10. …………
  11. # 绝对路径
  12. [root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 /application/nginx-1.6.2/
  13. no value for epoch is set, defaulting to nil {:level=>:warn}
  14. no value for epoch is set, defaulting to nil {:level=>:warn}
  15. Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
  16. [root@oldboy ~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
  17. /application/nginx-1.6.2/client_body_temp
  18. /application/nginx-1.6.2/conf/extra/dynamic_pools
  19. /application/nginx-1.6.2/conf/extra/static_pools
  20. /application/nginx-1.6.2/conf/fastcgi.conf
  21. /application/nginx-1.6.2/conf/fastcgi.conf.default
  22. …………
  23. 使用rpm -qpl 命令可以查看rpm包的内容。
  24. 注:fpm类似tar打包一样,只是fpm打的包能够被yum命令识别而已。

2. 软链接问题

  1. [root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 /application/nginx
  2. no value for epoch is set, defaulting to nil {:level=>:warn}
  3. File already exists, refusing to continue: nginx-1.6.2-1.x86_64.rpm {:level=>:fatal}
  4. # 报错是因为当前目录存在同名的rpm包,可以使用-f参数强制覆盖。
  5. [root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -f /application/nginx
  6. no value for epoch is set, defaulting to nil {:level=>:warn}
  7. Force flag given. Overwriting package at nginx-1.6.2-1.x86_64.rpm {:level=>:warn}
  8. no value for epoch is set, defaulting to nil {:level=>:warn}
  9. Created package {:path=>"nginx-1.6.2-1.x86_64.rpm"}
  10. 打包看似成功,但查看包的内容,只是这一个软链接文件。
  11. [root@oldboy ~]# rpm -qpl nginx-1.6.2-1.x86_64.rpm
  12. /application/nginx
  13. 原因:目录结尾的/问题,类似rm删除软链接目录

定制LNMP的RPM包思路

编译安装好nginx,mysql,php,此处有个问题,就是php的大部分依赖环境是通过yum安装的,但有一个libiconv-1.14.tar.gz包需要编译安装,安装时已经指定了安装目录,只需一同打包即可。

还有一个问题,就是mysql这个目录比较大,用fpm打包耗时长。平时我们有可能需要对nginx或php做优化,这样又得重新打包。因此我们可以将mysql分离出来,分别打包。只需在制作nginx+php的rpm包时添加mysql的依赖即可。

  1. # 参考命令
  2. [root@web2 ~]# fpm -s dir -t rpm -n web2 -v 1.1 \
  3. --description 'lnmp.cms,bbs.blog' \
  4. -d ‘libxslt-devel,nfs-utils,rpcbind,mysql,libmcrypt-devel,mhash,mhash-devel,mcrypt' \
  5. --post-install /server/scripts/lnmp-init.sh \
  6. /application /usr/local/libiconv/ /app/logs/ /data0/ /server/

定制LNMP的RPM包的更多相关文章

  1. Red Hat 系列如何快速定制二进制内核 RPM 包?

    随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(roo ...

  2. 自动化部署必备技能—定制化RPM包[转载]

    回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化 ...

  3. 自动化部署必备技能—定制化RPM包

    回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化 ...

  4. linux系统之定制rpm包

    FPM打包工具 FPM的作者是jordansissel FPM的github:https://github.com/jordansissel/fpm FPM功能简单说就是将一种类型的包转换成另一种类型 ...

  5. FPM简介(定制rpm包)

    FPM简介 fpm是生成rpm包的工具.rpm包的制作,采用fpm工具完成,FPM非常易用,此命令可以把rpm包的安装.卸载做得更加优雅,在安装前可以做一些准备工作,安装后可以做一些收尾工作,在卸载前 ...

  6. 96、linux之rpm包定制

    96.1.rpm包定制介绍: 编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. yum安装软件,优点是全自动化安装, ...

  7. FPM定制RPM包实践

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

  8. 自动化部署必备技能—部署yum仓库、定制rpm包

    部署yum仓库.定制rpm包 目录 第1章 扩展 - yum缓存 1.1 yum缓存使用步骤... 1 1.1.1 导言... 1 1.1.2 修改配置文件... 1 1.1.3 使用缓存... 1 ...

  9. 定制化rpm包及本地yum仓库搭建

    为方便本地yum的管理,一般都是在公司局域网内搭建本地yum仓库,实现公司内部快速安装常用软件. 步骤如下: 1.搭建要实现本地yum管理的软件,测试该软件搭建成功与否: 2.定制rpm包及其相关依赖 ...

随机推荐

  1. ORM轻量级框架---ActiveAndroid

    ORM即Object-Relational Mapping,对象关系映射.简单理解就是把我们Java的对象与数据库里面的记录进行映射,可以把实体对象持久化到数据库中,也能把查询到的记录映射成Java对 ...

  2. imageNamed 、imageWithContentsOfFile、 initWithContentsFile区别

    [UIImage imageNamed:]只适合与UI界面中的贴图的读取,较大的资源文件应该尽量避免使用 用UIImage加载本地图像最常用的是下面三种: 1.用imageNamed方法 [UIIma ...

  3. [Python]网络爬虫(五):urllib2的使用细节与抓站技巧(转)

    1.Proxy 的设置 urllib2 默认会使用环境变量 http_proxy 来设置 HTTP Proxy. 如果想在程序中明确控制 Proxy 而不受环境变量的影响,可以使用代理. 新建test ...

  4. Linux命令-下载文件的工具:wget

    Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...

  5. centos7 搭建go环境

    下载go #cd /home #mkdir app #cd app #wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar. ...

  6. Spring.net(二)----初探IOC容器

    我在上一篇关于Spring.net的文章“Spring.NET框架简介及模块说明 ”中很详细的介绍了,本文就不旧话从提.我门就直奔主题吧. 1.首先了解两个接口.  IObjectFactory接口和 ...

  7. mysql-5.7中innodb_buffer_pool页面淘汰算法

    一. 什么是innodb_buffer_pool: innodb_buffer_pool是一块内存区域,innodb用它来缓存数据,索引,undo,change buffer ... : 这块区域又被 ...

  8. mysqldump使用大全

    普通备份 C:\Program Files\MySQL\MySQL Server 5.6\bin>mysqldump -uroot -p test > f:\test_bak_1009.s ...

  9. oracle递归层级查询 start with connect by prior

    递归层级查询:start with connect by prior  以部门表作为解析 表结构:dept{id:'主键',name:'部门名称',parent_id:'父亲id'} select * ...

  10. shu_1232 老王赛马

    http://202.121.199.212/JudgeOnline/problem.php?cid=1078&pid=2 分析:贪心. 用我方最好的马去解决可以解决的对方的最好的马,如是才干 ...