自动化部署必备技能―定制化RPM包
回顾下安装软件的三种方式:
1、编译安装软件,优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MysqL之类的软件编译耗时过长。
2、yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。
===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。
3、编译源码,根据自己的需求做成定制RPM包�C>搭建内网yum仓库�Cyum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是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. 支持的源类型包
dir将目录打包成所需要的类型,可以用于源码编译安装的软件包rpm对rpm进行转换gem对rubygem包进行转换python将python模块打包成相应的类型
2. 支持的目标类型包
rpm转换为rpm包deb转换为deb包solaris转换为solaris包puppet转换为puppet模块
3. FPM安装
fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。#安装ruby模块yum-yinstallrubyrubygemsruby-devel#查看当前使用的rubygems仓库gemsourceslist#添加淘宝的Rubygems仓库,外国的源慢,移除原生的Ruby仓库gemsources--addhttps://ruby.taobao.org/--removehttp://rubygems.org/#安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。geminstalljson-v1.8.3geminstallfpm-v1.3.3#上面的2步安装仅适合CentOS6系统,CentOS7系统一步搞定,即geminstallfpm
4. FPM参数
详细使用见fpm �Chelp
常用参数
-s指定源类型-t指定目标类型,即想要制作为什么包-n指定包的名字-v指定包的版本号-C指定打包的相对路径Changedirectorytoherebeforesearchingforfiles-d指定依赖于哪些包-f第二次打包时目录下如果有同名安装包存在,则覆盖它-p输出的安装包的目录,不想放在当前目录下就需要指定--post-install软件包安装完成之后所要运行的脚本;同--after-install--pre-install软件包安装完成之前所要运行的脚本;同--before-install--post-uninstall软件包卸载完成之后所要运行的脚本;同--after-remove--pre-uninstall软件包卸载完成之前所要运行的脚本;同--before-remove
使用实例�C实战定制Nginx的RPM包
1. 安装Nginx
yum-yinstallpcre-developenssl-develuseraddNginx-M-s/sbin/nologintarxfNginx-1.6.2.tar.gzcdNginx-1.6.2./configure--prefix=/application/Nginx-1.6.2--user=Nginx--group=Nginx--with-http_ssl_module--with-http_stub_status_modulemake&&makeinstallln-s/application/Nginx-1.6.2//application/Nginx
2. 编写脚本
[root@oldboy~]#cd/server/scripts/[root@oldboyscripts]#vimNginx_rpm.sh#这是安装完rpm包要执行的脚本#!/bin/bashuseraddNginx-M-s/sbin/nologinln-s/application/Nginx-1.6.2//application/Nginx
3. 打包
[root@oldboy~]#fpm-sdir-trpm-nNginx-v1.6.2-d'pcre-devel,openssl-devel'--post-install/server/scripts/Nginx_rpm.sh-f/application/Nginx-1.6.2/novalueforepochisset,defaultingtonil{:level=>:warn}novalueforepochisset,defaultingtonil{:level=>:warn}Createdpackage{:path=>"Nginx-1.6.2-1.x86_64.rpm"}[root@oldboy~]#ll-hNginx-1.6.2-1.x86_64.rpm-rw-r--r--1rootroot6.7MNov110:02Nginx-1.6.2-1.x86_64.rpm
4. 安装rpm包
安装rpm包的三种方法:
rpm命令安装
[root@LB-Nginx-01~]#rpm-ivhNginx-1.6.2-1.x86_64.rpmerror:Faileddependencies:pcre-develisneededbyNginx-1.6.2-1.x86_64openssl-develisneededbyNginx-1.6.2-1.x86_64但会报如上依赖错误,需要先yum安装依赖才能安装rpm包。
yum命令安装rpm包
yum-ylocalinstallNginx-1.6.2-1.x86_64.rpm这个命令会自动先安装rpm包的依赖,然后再安装rpm包。
搭建内网yum仓库
YUM仓库搭建
注意事项
1. 相对路径问题
#相对路径[root@oldboyNginx]#fpm-sdir-trpm-nNginx-v1.6.2.novalueforepochisset,defaultingtonil{:level=>:warn}Createdpackage{:path=>"Nginx-1.6.2-1.x86_64.rpm"}[root@oldboyNginx]#rpm-qplNginx-1.6.2-1.x86_64.rpm/client_body_temp/conf/extra/dynamic_pools/conf/extra/static_pools…………#绝对路径[root@oldboy~]#fpm-sdir-trpm-nNginx-v1.6.2/application/Nginx-1.6.2/novalueforepochisset,defaultingtonil{:level=>:warn}Createdpackage{:path=>"Nginx-1.6.2-1.x86_64.rpm"}[root@oldboy~]#rpm-qplNginx-1.6.2-1.x86_64.rpm/application/Nginx-1.6.2/client_body_temp/application/Nginx-1.6.2/conf/extra/dynamic_pools/application/Nginx-1.6.2/conf/extra/static_pools/application/Nginx-1.6.2/conf/fastcgi.conf/application/Nginx-1.6.2/conf/fastcgi.conf.default…………使用rpm-qpl命令可以查看rpm包的内容。注:fpm类似tar打包一样,只是fpm打的包能够被yum命令识别而已。
2. 软链接问题
[root@oldboy~]#fpm-sdir-trpm-nNginx-v1.6.2/application/Nginxnovalueforepochisset,defaultingtonil{:level=>:warn}Filealreadyexists,refusingtocontinue:Nginx-1.6.2-1.x86_64.rpm{:level=>:fatal}#报错是因为当前目录存在同名的rpm包,可以使用-f参数强制覆盖。[root@oldboy~]#fpm-sdir-trpm-nNginx-v1.6.2-f/application/Nginxnovalueforepochisset,defaultingtonil{:level=>:warn}Forceflaggiven.OverwritingpackageatNginx-1.6.2-1.x86_64.rpm{:level=>:warn}novalueforepochisset,defaultingtonil{:level=>:warn}Createdpackage{:path=>"Nginx-1.6.2-1.x86_64.rpm"}打包看似成功,但查看包的内容,只是这一个软链接文件。[root@oldboy~]#rpm-qplNginx-1.6.2-1.x86_64.rpm/application/Nginx原因:目录结尾的/问题,类似rm删除软链接目录
定制LNMP的RPM包思路
编译安装好Nginx,MysqL,PHP,此处有个问题,就是PHP的大部分依赖环境是通过yum安装的,但有一个libiconv-1.14.tar.gz包需要编译安装,安装时已经指定了安装目录,只需一同打包即可。
还有一个问题,就是MysqL这个目录比较大,用fpm打包耗时长。平时我们有可能需要对Nginx或PHP做优化,这样又得重新打包。因此我们可以将MysqL分离出来,分别打包。只需在制作Nginx+PHP的rpm包时添加MysqL的依赖即可。
#参考命令[root@web2~]#fpm-sdir-trpm-nweb2-v1.1\--description'lnmp.cms,bbs.blog'\-d‘libxslt-devel,nfs-utils,rpcbind,MysqL,libmcrypt-devel,mhash,mhash-devel,mcrypt'\--post-install/server/scripts/lnmp-init.sh\/application/usr/local/libiconv//app/logs//data0//server/原文链接:https://www.f2er.com/bash/392817.html