定制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 编译安装软件

优点:定制优化安装目录;按需开启功能;可定制(定制安装目录和软件功能),一般情况下不需要网络,可选择软件版本

缺点:需要查找并誓言出适合的编译参数;很多人碰到软件版本升级,某些参数已经取消掉了,并且报错提示非常明显,但还是有很多人无所适从;mysql、php等软件编译耗时较长;慢、复杂,需要查找编译参数(文多了大神们讨厌),找依赖很麻烦,纯编译一开就比较复杂;

2 YUM安装软件

优点:全自动化安装;简单,c便捷;不需要为依赖问题发愁了;

缺点:自主性太差;网络太差,网络不好下载速度慢;没有办法定制、软件的功能,存放位置都已经固定好了,不易变更;

3 二进制安装

优点:简单、快;

缺点:不能定制、包容量大(mysql的二进制包近200M)

2. 定制RPM包

根据自己的需求编译软件è制作RPM包è搭建内网yum仓库èyum安装

结合前两者的优点,暂未发现说明缺点,可能的缺点就是RPM包的通用型差,只能适用于本公司的环境,另外一般人不会定制RPM包。

缺点:第一步编译安装复杂,打包不能再再次更改,一般人不会这个方法。

这是互联网企业运维自动化的必备技能,è自动化运维的基石

2.1 RPM简介

1. RPM的全称是Red Hat PackageManager(red hat包管理器)

2. 几乎所有的Linux发行版本都使用这种形式的软件包管理安装、更新和卸载软件。

3. rpm命令有五种基本功能(不包括创建软件包);安装、卸载、升级、查询和验证。

4. 关于rpm命令的使用我们可以使用rpm –help来获得。

5. rpmbuild是redhat系的原生打包命令,这个命令的使用难点主要在于spec文件的编写,语法复杂。

6. 参考定制nginx的spec文件

2.2 fpm工具介绍

  • FPM的作者是iordansissel
  • FPM功能简单说就是将一种类型的包转换成另一种类型

 

支持的源类型包

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

l  rpm        对rpm进行转换

l  gem        对rubygem包进行转换

l  python       将python模块打包成响应的类型

支持的目标类型包

ü  rpm       转换为rpm包

l  deb           转换为deb包

l  solaris       转换为salaris包

l  puppet         转换为puppet模块

2.3 FPM安装 *****

1 fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5

yum -y install ruby rubygems ruby-devel     #<== 安装ruby依赖

rpm -qa ruby rubygems ruby-devel

2 安装fpm工具

gem sources -a http://mirrors.aliyun.com/rubygems/

#<== 换成阿里云的rubygems仓库,外国的源慢

gem sources --remove http://rubygems.org/      #<== 移除原生的ruby仓库

gem sources --list     #<== 查看软件源,会显示aliyun.的

gem install fpm -v 1.3.3

#<== -v参数指定安装fpm-1.3.3版本的软件,fpm这个工具升级平凡,而且在每次升级后会出现各种样的问题,但是老版本的fpm工具能够满足我们的需求,因此使用此版本了。如果后面不加-v参数,默认会下载最新版本(如果安装不成功可以先下载最新版本然后再尝试下载1.3.3版本)

fpm --help               #<==只要能使用,就表示安装成功

如果以上下载不成功执行第二种方法,如下

gem sources -a https://ruby.taobao.org/    #<== 添加淘宝的 rubygems仓库

gem sources --remove http://rubygems.org/   #<== 移除原生的ruby仓库

gem sources –list

gem install fpm -v 1.3.3

fpm --help                   #<==只要能使用,就表示安装成功

-----------------关于fpm安装时出现错误的解决方法--------------------
解决方法1:

不指定版本安装一次  gem install fpm

指定版本安装一次 gem install fpm -v 1.3.3

解决办法2:

gem install json -v 1.8.3

gem install fpm -v 1.3.3

3. FPM常用参数—>详细使用见fpm --help


fpm参数


解释说明


-s


指定源类型       ***


-t


指定目标类型,即想要制作为什么包   ***


-n


指定包的名字      ***


-v


指定包的版本号     ***


-C


指定打包的相对路径


-d


指定依赖于那些包    ***


-f


第二次打包时目录如果有同名安装包存在,则覆盖它  **


-p


输出的安装包的目录,不想放在当前目录下就需要指定


-post-install


软件包安装完之后所要运行的脚本;同-after-install   ***


-pre-install


软件包安装完成之前所要运行的版本;同-before-install  **


-post-uninstall


软件包卸载完成之后所要运行的版本,同-after-remove


-pre-uninstall


软件包卸载完成之前所要运行的脚本,同-before-remove

2.4 yum安装时如何解决依赖问题的

  • 在使用yum安装软件a时,yum会在下载完A的rpm包后,对该rpm包进行检查(rpm包中会给出安装rpm包依赖的基础库和软件),如果检查出A的安装还要依赖软件B,那么此时yum就会自动下载并安装B,B安装完毕后,就会继续安装A,如果是内网yum源的话,我们只需要把B放在内网yum网即可,如果检查出A的安装不需要其他软件的支持,那么yum会自动安装A
  • 因此使用fpm打包使用-d参数添加依赖关系。
  • 实战定制nginx的RPM包  *****

1 查看系统环境

[[email protected] ~]# cat /etc/redhat-release       #<== 查看系统版本

CentOS release 6.7 (Final)

[[email protected] ~]# uname -r                #<== 查看系统内核

2.6.32-573.el6.x86_64

[[email protected] ~]# getenforce                 #<== SELinux为关闭状态

Disabled

[[email protected] ~]# /etc/init.d/iptables stop       #<== 防火墙确认为关闭

2. 准备环境

mkdir -p /home/oldboy/tools             #<== 软件包统一存放目录(规范)

mkdir -p /application/                       #<== 软件统一安装目录

sed -i ‘s#keepcache=0#keepcache=1#g‘ /etc/yum.conf     #<== 开启yum缓存

find /var/cache/ -type f -name ‘*rpm‘|xargs rm -f     #<== 清空本机yum缓存,排除rpm包干扰

3. 编译安装web服务软件nginx

yum -y install pcre pcre-devel opensslopenssl-devel

cd /home/oldboy/tools

wget -q https://nginx.org/download/nginx-1.6.3.tar.gz

tar xf nginx-1.6.3.tar.gz

useradd -M -u504 -s /sbin/nologin nginx

cd/home/nginx/tools/nginx-1.6.3

./configure  --user=nginx --group=nginx --prefix=/application/nginx-1.6.3/ --with-http_stub_status_module  --with-http_ssl_module

make && make install

4. 将以上安装nginx的依赖包进行打包

find /var/cache/ -type f -name ‘*rpm‘   #<== 使用该命令,查找nginx安装后的依赖包并进行打包

我进行打包时,收缩到的依赖包都在这两个目录下(/var/cache/yum/x86_64/6/base/packages/ 和 var/cache/yum/x86_64/6/updates/packages/),然后使用mv命令将其移动到一起,在相对路径下打包,命令如下:

cd/var/cache/yum/x86_64/6/updates/packages

mv */var/cache/yum/x86_64/6/base/packages/

cd/var/cache/yum/x86_64/6/base/

tar zcf nginx_yum.tar.gz./packages/*

5. 编写脚本

mkdir -p /server/scripts/

cd /server/scripts/

vim nginx_rpm.sh         #<== 这是安装完rpm包要执行的脚本

#!/bin/bash

useradd -u504 -M -s /sbin/nologinnginx

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

/application/nginx/sbin/nginx

cat >>/etc/rc.local<<EOF

#This is start nginx service Yes

/application/nginx/sbin/nginx

EOF

6. 打包(rpm包)

cd /server/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/

#<== -s:指定源类型;-n:指定包名字;-v:指定包版本号;-d:指定依赖包;多个依赖包以逗号分隔符;-post-install:安装完rpm包后执行的脚本;-f:如果下面有同名的话强制覆盖;

显示出来的内容暗黄色的表示正确的,红色的则代表作错误

sz nginx-1.6.3-1.x86_64.rpm     #<== 下载下来

fpm与rpmbuild命令关系:在第一个窗口执行打包命令,再另外打开一个窗口,使用top命令,可以看到rpmbuild进程,因此,fpm命令其实是对rpmbuild命令进行封装,其实底层还是rpmbuild命令,因此系统必须要有rpmbuild命令,如果没有,使用yum安装:yum -y installrpm-build


fpm打包注意事项

l  1. 相对路径问题不要使用相对路径,如果使用相对路径打包时打包就会从根开始,安装到根(/)下了,热不是指定的/application/nginx-1.6.3/目录。和tar打包类似,只是fpm能被yum命令识别而已。

l  2. 软连接问题:当删除一个软连接文件时(rm-f nginx)它可以删除,但是如果是(rm -f nginx/)后面机上路径符的话他代表一个目录,如果想rm -fr nginx/这样删除的话源目录和软连接目录都会存在,就是两者下面的都没有啦。

rpm常用命令组合


说明


rpm命令组合


查看rpm帮助


man rpm


查看rpm包信息


rpm -qpi nginx-1.6.3-1.x86_64.rpm


查看rpm包内容


rpm -qpl  nginx-1.6.3-1.x86_64.rpm


查看rpm包依赖


rpm -qpR  nginx-1.6.3-1.x86_64.rpm


查看rpm包带的执行脚本,

执行脚本不是以文件的形式存在rpm包中·


rpm -qp  --scripts  nginx-1.6.3-1.x86_64.rpm


安装rpm


rpm -lvh  nginx-1.6.3-1.x86_64.rpm


rpm -lvh --ald *.rpm


1. 自动安装或更新rpm包。

2. 如果自己找的依赖包少了,它还会自动帮我们到网上去下载


rpm -lvh --ald *.rpm  #<== --aid参数解决RPM包循环依赖的问题,即当前目录有所有相互依赖的rpm包,就可以用这种方法,就是说把所有的依赖包放在一个目录里面,然后通过这条命令,rpm就会自动把nginx软件的依赖包都安装好,然后再安装nginx包,自动解决依赖问题

3. 安装rpm包  *****

  • 首先确认Nginx的rpm包和依赖包的tar包已经下载到windows,如果没有问题就对当前状态做个快照,然后还原初始快照。
  • 还原完后,新的机器是没有Nginx的,上传rpm包和tar(nginx依赖)包

cd /home/oldboy/tools/

rz (nginx-1.6.3-1.x86_64.rpm和nginx_yum.tar.gz)

安装rpm包的三种方法

1.  yum命令安装rpm包(本地测试成功)

yum localinstallnginx-1.6.3-1.x86_64.rpm

# 这个命令会自动先从网络安装rpm包的依赖,然后再安装Nginx的rpm包

2.  fpm命令安装

[[email protected]]# rpm -ivh nginx-1.6.3-1.x86_64.rpm   #<== 啊喔!安装报错

error: Failed dependencies:

pcre-devel is neededby nginx-1.6.3-1.x86_64

openssl-devel isneeded by nginx-1.6.3-1.x86_64

以上报错是因为缺少软件包,必须手动安装(缺点)

rpm -ivhopenssl-devel-1.0.1e-42.el6.x86_64.rpm  #<== 必须手动先安装依赖包

rpm -ivh pcre-devel-7.8-7.el6.x86_64.rpm     #<== 必须手动先安装依赖包

解决方法:

1 yum安装依赖包

2以上报错是因为缺少软件依赖包,必须一个一个手动安装(缺点)

rpm -ivhopenssl-devel-1.0.1e-42.el6.x86_64.rpm  #<== 必须手动先安装依赖包

rpm -ivh pcre-devel-7.8-7.el6.x86_64.rpm  #<== 必须手动先安装依赖包

3如果本机已有所有的依赖包,就可以用下面的方法。

tar xfnginx_yum.tar.gz   #<== 解压nginx依赖包(将所有需要的rpm包放在一个目录)

rpm -ivh--aid *.rpm

执行命令如下

[[email protected] tools]# rpm -ivh --aid *rpm        #<== 报错--

Preparing...    ###########################################[100%]

file/usr/lib64/libkadm5clnt_mit.so.8.0 from install ofkrb5-libs-1.10.3-42z1.el6_7.x86_64 conflicts with file from packagekrb5-libs-1.10.3-42.el6.x86_64

………………

报错原因:rpm包冲突,使用U参数,因为有些包本地有,需要更新。

[[email protected] tools]# rpm -Uvh --aid *rpm     #<== 正确

Preparing...       ########################################### [100%]

1:krb5-libs      ########################################### [  9%]

--------------------------内容省略------------------------------------

10:openssl-devel    ########################################### [91%]

11:nginx        ########################################### [100%]


3. 搭建内网yum仓库

具体见yum仓库搭建----------

4. 定制LNMP的RPM包思路

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

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

时间: 2024-10-18 17:27:34

定制RPM包的相关文章

自动化部署必备技能——定制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

定制rpm包及搭建yum仓库

定制rpm包及搭建yum仓库 第1章 定制rpm包 1.FPM打包工具 FPM的作者是jordansisselFPM的github:https://github.com/jordansissel/fpmFPM功能简单说就是将一种类型的包转换成另一种类型. 支持的源类型包: dir         将目录打包成所需要的类型,可以用于源码编译安装的软件包 rpm         对rpm进行转换 gem         对rubygem包进行转换 python      将python模块打包成相应

定制rpm包、搭建yum仓库

一.定制rpm包 1.环境 [[email protected] ~]# cat /etc/redhat-release  CentOS release 6.9 (Final) [[email protected] ~]# uname -r2.6.32-696.el6.x86_64 [[email protected] ~]# /etc/init.d/iptables status iptables: Firewall is not running. [[email protected] ~]#

FPM定制RPM包

软件安装的常见方式: 1.编译安装: 优点:可以定制化安装目录,按需开启功能等. 缺点:需要查找并实验出合适的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件 优点:全自动化安装,不需要为依赖问题发愁. 缺点:自主性太差,软件的功能.存放位置都固定好了,不易变更(定制rpm包恰好解决这一问题) FPM打包工具: 1.简介: FPM的作者是Jordansissel FPM的GITHUB:https://github.com/jordansissel/fpm 官网:http://

yum仓库+fpm定制rpm包

试验环境: ip:yum 10.0.0.201 yum仓库 web 10.0.0.8 web(未安装nginx) yum端安装: 第一个里程碑:创建定制的rpm包 1.开启rpm包的缓存 sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf 2.清空已有缓存 find /var/cache/ -type f -name '*rpm'|xargs rm -f 3.编译安装nginx wget -O /etc/yum.repos.d/epel.repo

定制RPM包及yum仓库搭建(以安装nginx为例)

一.前提条件 #下面通过虚拟机准备了一台服务端,一台客户端,基于外网IP测试,以安装nginx为例. #两台机器公共配置 [[email protected] ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [[email protected] ~]# uname -m x86_64 [[email protected] ~]# uname -r 2.6.32-573.el6.x86_64 #服务端配置 [[email protect