RPM包定制

概述

问题:当领导给你 100 台已经安装好系统的服务器,然后让优化,让你提出一个快速部署方案。
解答:
  1.tar 打包 先编译安装 打包--》分发--》解包(比如 mysql 打包后直接就可以使用
  2.SaltStack,puppet
  3.定制 rpm yum 仓库 yum 安装
  4.openstack 虚拟机镜像和 docker 容器分发

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

一:YUM 安装
  优点:简单,便捷,解决源码包安装依赖问题,全自动化安装
  缺点:没有办法定制,需要网络,网络环境差的情况话,下载速度慢
二:编译安装
  优点:可以定制软件包(定制安装目录和软件功能),一定情况下不需要网络,可自由选择软件版本 
  缺点:安装过程慢,安装复杂,需要查找编译参数(对于一些编译错误,找人求助也讨人嫌),软件编译依赖性强
三:二进制安装
  优点:简单,快捷
  缺点:不能定制,包容量大(mysql 的二进制包 200M 左右)
四:定制 rpm 包 yum 仓库 yum 安装
  优点:可以根据自己的需求编译软件>>制作 rpm 包>>搭建 yum 仓库>>上传 rpm 包到 yum仓库>>客户端安装软件  
  缺点:第一步编译安装复杂,打包完成以后无法更改,一般人不会这个方法

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

rpmbuild 是 redhat 系统原生打包命令,这个命令的使用复杂不推荐使用此方法打包 rpm 包,太复杂啦,有想了解到的朋友可以参考:http://dreamway.blog.51cto.com/1281816/1110874或者自行百度,我们这里使用一个简单的FPM工具定制RPM包

FPM的安装与使用

主机环境:CentOS 6.5

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 --help 查看更多帮助)

-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.安装FPM工具

fpm 是 ruby 写的,因此系统环境需要 ruby,且 ruby 版本号大于 1.8.5。
# 安装 ruby 模块
yum -y install ruby ruby-devel rubygems
rpm -qa ruby rubygems ruby-devel
# 添加阿里云的 Rubygems 仓库,外国的源慢
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources  查看 Rubygems 仓库信息
# 移除原生的 Ruby 仓库
gem sources --remove http://rubygems.org/
# 安装 fpm
gem install fpm

***在安装ruby包时,可能无法使用yum的方式安装上rubygems包,只能下载rubygems的rpm包进行安装***

下载地址:http://rpmfind.net/linux/rpm2html/search.php?query=rubygems

rpm -ivh rubygems-1.3.7-5.el6.noarch.rpm  --nodeps或者yum -y localinstall rubygems-1.3.7-5.el6.noarch.rpm

安装 fpm 打包工具时提示以下错误:

ERROR: Error installing fpm:
ruby-xz requires Ruby version >= 1.9.3.

上面的提示表示您 Ruby 版本过低,需要安装 1.9.3 的版本,解决思路只需安装低版本的 fpm工具即可

解决方法:

gem install json -v 1.8.3
gem install fpm -v 1.3.3或者gem install fpm    //先直接安装一次,再安装一个低版本的gem install fpm -v 1.3.3

案例:Nginx服务定制RPM

1. 编译安装Nginx服务

yum -y install pcre-devel openssl-devel            //安装Nginx依赖包
useradd -M -s /sbin/nologin nginx            //添加Nginx运行用户
tar zxvf nginx-1.8.1.tar.gz -C /usr/src/        //编译安装Nginx
cd /usr/src/nginx-1.8.1/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
make && make install
ln -s /usr/local/nginx/sbin/* /usr/local/sbin/        //优化Nginx程序执行路径
nginx                //启动Nginx服务,并验证

2.开始定制Nginx服务的RPM包

(1)停止Nginx服务

[[email protected] ~]# lsof -i :80
 COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
 nginx   8439  root    6u  IPv4  38775      0t0  TCP *:http (LISTEN)
 nginx   8440 nginx    6u  IPv4  38775      0t0  TCP *:http (LISTEN)
[[email protected] ~]# killall -9 nginx
[[email protected] ~]# lsof -i :80

(2)编写脚本,用来 nginx 打包完成后,安装后自动执行的脚本

[[email protected] ~]# mkdir -p /server/scripts
[[email protected] ~]# vim /server/scripts/nginx.sh
 #!/bin/bash
 useradd -M -s /sbin/nologin nginx
 ln -s /usr/local/nginx/sbin/* /usr/local/sbin/

(3)将 nginx 服务打包成 rpm 包,并指定需要安装的依赖包

[[email protected] ~]# fpm -s dir -t rpm -n nginx -v 1.8.1 -d ‘pcre-devel,openssl-devel‘ --post-install /server/scripts/nginx.sh -f /usr/local/nginx/
 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.8.1-1.x86_64.rpm"}

(4)将打包完成的 rpm 包下载下来,上传到需要安装的服务器上即可实现 yum 安装,或者是上传到 yum 仓库中提供给 yum 客户端安装

安装 RPM包的三种方法

1) rpm命令安装

[[email protected] ~]# rpm -ivh nginx-1.8.1-1.x86_64.rpm
error: Failed dependencies:
    pcre-devel is needed by nginx-1.8.1-1.x86_64

但会报如上依赖错误,需要先 yum 安装依赖才能安装 rpm 包

2) yum命令安装

yum -y localinstall nginx-1.8.1-1.x86_64.rpm

这个命令会自动先安装 rpm 包的依赖,然后再安装 rpm 包。

3)我们可以将打包完成的 rpm 上传 YUM 仓库。然后进行 yum 安装即可

YUM仓库搭建参考:http://www.cnblogs.com/zhichaoma/p/7581957.html

#服务端
[[email protected] ~]# cp nginx-1.8.1-1.x86_64.rpm /yum_source/   //将nginx的rpm包放到yum仓库中
[[email protected] ~]# createrepo --update /yum_source/      //更新域名仓库

#客户端
[[email protected] ~]# yum clean all            //清除 yum 以前的缓存
[[email protected] ~]# yum makecache            //更新 YUM 缓存
[[email protected] ~]# yum list | grep nginx        //检查是否可以从yum源中找到Nginx的rpm包
nginx.x86_64                           1.8.1-1                           @inside
[[email protected] ~]# yum -y install nginx        //安装Nginx
[[email protected] ~]# nginx                 //启动Nginx服务
[[email protected] ~]# lsof -i :80            //检查 Nginx服务是否启动
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   3900  root    6u  IPv4  29101      0t0  TCP *:http (LISTEN)
nginx   3901 nginx    6u  IPv4  29101      0t0  TCP *:http (LISTEN)

最后使用客户机验证客户机的服务是否可以访问(关闭客户机的iptables)

时间: 2024-11-14 12:27:13

RPM包定制的相关文章

Fpm 之 tomcat-7.0.88 rpm 包定制

Fpm 之 tomcat-7.0.88 rpm 包定制 一.tomcat-7.0.88编译包安装 1.编译包下载 [[email protected] software]wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.88/bin/apache-tomcat-7.0.88.tar.gz 2.解压,并重定向到指定的安装存放路路 [[email protected] software]tar -zxvf apa

Fpm 之 Apache2 rpm 包定制

Fpm 之 Apache2 rpm 包定制 一.下载Apache2 的所需的安装编译包 apr包下载:(/app/software) wget http://mirror.bit.edu.cn/apache//apr/apr-1.6.3.tar.gz arp-util包下载:(/app/software) http://mirror.bit.edu.cn/apache//apr/apr-util-1.6.1.tar.gz httpd-2.4.33包下载:(/app/software) wget

rpm包定制+yum仓库搭建

1.实验环境 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [[email protected] ~]# uname -r 2.6.32-696.el6.x86_64 [[email protected] ~]# uname -m x86_6 [[email protected] ~]# hostname -I 10.0.0.61 172.16.1.61 2.实验中所涉及到的目录 mkdir -

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

这里也不介绍rpmbuild这个打包工具了,想了解的朋友自行谷歌百度.但我不建议大家花太多的时间去学习这个命令,比较晦涩,而且我会在下面介绍更简单的命令. FPM打包工具 FPM的作者是jordansissel FPM的github:https://github.com/jordansissel/fpm FPM功能简单说就是将一种类型的包转换成另一种类型. 安装fpm依赖: yum install -y  openssl* yum install -y gcc* yum install -y r

定制RPM包

目录 1. 安装软件的方式... 1 2. 定制RPM包... 1 2.1 RPM简介... 2 2.2 fpm工具介绍... 2 2.3 FPM安装  *****. 3 2.4 yum安装时如何解决依赖问题的... 4 3. 实战定制nginx的RPM包  *****. 4 3. 安装rpm包  *****. 7 4. 定制LNMP的RPM包思路... 8 1. 安装软件的方式 1 编译安装软件 优点:定制优化安装目录:按需开启功能:可定制(定制安装目录和软件功能),一般情况下不需要网络,可选

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

回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能.存放位置都已经固定好了,不易变更. ===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了. 3.编译源码,根据自己的需求做成定制RPM包–>搭建内网yum仓库–yum安装.结合前两者的优点,暂未发现什么缺点.

一键自动化部署(定制rpm包,yum仓库)

部署--前篇 上午将MySQL多实例部署完成,由于有公司特定一些需求,需要源码安装,现在需要批量部署,如果一台台部署,就太过麻烦,而且浪费时间,这个时候自动化部署 就体现出价值了 我们将MySQL制作定制化rpm包,然后放到我们的yum仓库中,在将yum所有客户端,都指向yum源,之后就是喝喝茶,看看片,轻松批量部署了,废话不多说,开干. 如果MySQL多实例还没配置的,或不了解软件的安装方式 的 请参考:http://qiuyt.blog.51cto.com/1229789/1920686 一

Linux 定制rpm包

 定制rpm包 说明:这些操作全部在管理服务器内操作. 定制rpm包,搭建内网yum仓库,通过kickstart批量系统安装,这是互联网企业运维自动化的必要技能,自动化运维的基石. 1.1 面试题 有100台服务器想安装系统.你有什么方案快速部署并优化吗?需要多少时间搞定? 1.1.1 解决方案 (1) tar打包:先编译安装.打包.批量分发.解包: (2) saltstack.puppet.ansible批量部署: (3) 定制rpm所.搭建yum仓库.yum安装: (4) openstack

如何搭建yum仓库与定制rpm包

当我们自动仳部署集群的时候,想要快速的安装所有服务,搭建yum仓库与定制rpm包是我们首先要做的 原创作品,转载请注明出处.http://www.cnblogs.com/Csir/  本人导师---悠久之翼 #服务端1.#先保留平常下载下来的rpm包 sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf 这样当我们yum安装软件的时候,文件就是被保存下来: /var/cache/yum/ #部署nginx,提供80端口服务#安装依赖包 yum in