FPM几个步骤轻松打包RPM

fpm -s dir -t rpm -n php -d "freetype,libjpeg-turbo,libpng" -v 5.6.36 --post-install=postinstall.sh --post-uninstall=postremove.sh -f /usr/local/php/
fpm -s dir -t rpm -n zabbix_agent -d "依赖包1,依赖包2" -v 4.2.0_rhel7 --post-install=install.sh --post-uninstall=remove.sh -f /usr/local/zabbix_agent/

post
#! /bin/bash
id zabbix &> /dev/null || useradd -s /sbin/nologin zabbix &>/dev/null
cd /usr/local/ && chown -R zabbix:zabbix zabbix_agent

remove
#! /bin/bash
cd /usr/local/ && rm -fr zabbix_agent

 

使用-f是绝对路径,安装后也是绝对路径,使用-C指定相对路径有点问题

-s:指定源类型:    
           dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包    
           rpm: 对rpm进行转换    
           gem: 对rubygem包进行转换  
           python: 将Python模块打包成相应的类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字 -v:指定包的版本号
 -C:指定打包的相对路径
-d:指定依赖于哪些包,格式为-d 'name'
-f:第二次包时目录下如果有同名安装包存在,则覆盖它
 -p:输出的安装包的目录,不想放在当前目录下就需要指定
--post-install:软件包安装完成之后所要运行的脚本;同--offer-install
--pre-install:软件包安装完成之前所要运行的脚本; 同--before-install
--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall:软件包卸载完成之前所要运行的脚本; 同—before-remove

https://blog.csdn.net/beyondlee2011/article/details/85345622

http://www.ttlsa.com/linux/how-to-use-fpm-rpm/

https://blog.51cto.com/yanconggod/2059521

https://www.cnblogs.com/panwenbin-logs/p/7822087.html

工作中有如下情况需要将文件打包rpm:

  1. 避免重复工作,将源码程序打包为rpm
  2. 使用yum发布项目,项目打包为rpm
  3. 将自己写好的程序打包为rpm,提供给用户下载
  4. 其他

以前打包rpm是一个非常复杂的一件事情,自从有了fpm,打包rpm就和tar打包文件一样简单。

安装FPM

准备需要打包目录

今天拿打包一个html文件为例子。实现用户安装rpm将会把index.html放到/data/site/www.ttlsa.com/index.html.

使用fpm打包目录

先拿一个最简单的例子将大家带入成功,后续在介绍相对复杂的例子。

打包rpm

查看rpm内文件

安装rpm

查看安装信息

后续

fpm打包非常简单,更多的fpm使用方法,大家可以百度/谷歌一下。或者等凉白开后续介绍吧!

 


1.1 编译安装
编译:将源代码变为机器可执行的代码文件。 安装:将可执行文件安装到操作系统里,才可以使用。
编译安装的优缺点如下:

优点
可以定制化安装目录
按需开启功能
缺点
需要查找并试验出适合的编译参数
编译时间过长
依赖包需要单独安装
1.2 yum安装
yum安装顾名思义,就是使用yum工具进行程序的安装。

优点
自动处理依赖关系
自动化帮我们直接安装在操作系统中
缺点
不能定制化选择我们需要的功能模块
不能自定义安装目录
依赖于网络,网络不通,则无法安装
1.3 rpm安装
rpm,Redhat Packages Manager,红帽包管理工具,使用rpm工具(-i)进行软件程序的安装。

优点
本地安装
强大的查询以及软件包验证的功能
yum安装方式,实质上安装的就是一个个rpm包
缺点
安装软件时,需要首先获取软件包依赖的所有包
无法直接处理依赖关系(需要制定—aid)参数
1.4 rpm定制+yum安装
综合了rpm的优点和yum的优点,定制化rpm包,自定义yum仓库,启用我们自己的yum源,这样可以使用yum帮我们一键安装软件,并执行某些操作,这在批量安装多台服务器的时候是非常有用的。

2 RPM包定制
在linux环境下时,总是需要进行大量的软件安装和软件测试,如果从源码编译,可能要花费大量的编译时间,在确保包依赖关系正常的情况下,将安装好的软件打包成rpm包,可以很快的安装部署。打成rpm包有两种方式

使用rpmbuild
使用fpm打包
第一种方式我没有尝试过,太繁琐,一点一点写spec文件的参数,各种出错,一不留神就花费大半个小时;软件的产生就是为了方便系统管理员管理,减少不必要的时间浪费,,学会软件使用需要花费太多的时间掌握,实在是有点惨不忍睹。

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

3.1 支持的源类型的包
名称 含义
dir 将目录打包成需要的类型,可以用于源码编译安装的软件包
rpm 对rpm进行转换
gem 对rubygem包进行转换
python 对python模块打包成响应的类型
3.2 支持的目标类型的包
名称 含义
rpm 转换为rpm包
deb 转换成deb包
solaris 转换为solaris包
puppet 转换为puppet模块
3.3 安装FPM工具
由于fpm工具是ruby写的,因此系统环境需要安装ruby,且ruby版本号大于1.8.5。

安装ruby模块
[root@centos7 ~]# yum install –y ruby rubygems ruby-devel
1
添加ruby源(默认是国外的的,速度比较慢)
[root@centos7 ~]#gem sources -a http://mirrors.aliyun.com/rubygems/
1
移出原生的Ruby仓库
[root@centos7 ~]#gem sources –remove http://rubygems.org/
1
安装fpm
[root@centos7 ~]#gem install fpm -v 1.3.3
1
3.4 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
4 实例
我们打包前需要首先安装先安装该软件(保存依赖包)

4.1 打开yum保存yum包参数
[root@centos7 ~]#sed -i ‘s#keepcache=0#keepcache=1#g’ /etc/yum.conf
1
因为yum每次安装完毕后,会自动清理安装包,所以开启yum的cache功能后,下载的包会保存并存放(默认)在/var/cache/yum/x86_64/6/base/packages。

4.2 编译安装nginx
下载安装依赖包

[root@centos7 ~]#yum install -y pcre pcre-devel openssl openssl-devel
1
创建运行nginx的用户

[root@centos7 ~]#useradd -M -s /sbin/nologin nginx
1
配置nginx(上传nginx安装包,并解压)

[root@centos7 ~]#cd nginx-1.6.2
[root@centos7 ~]#./configure –prefix=/application/nginx-1.6.2 –user=nginx –group=nginx –with-http_ssl_module –with-http_stub_status_module
1
2
编译安装

[root@centos7 ~]#make && make install
[root@centos7 ~]#ln -s /application/nginx-1.6.2/ /application/nginx
1
2
4.2 使用fpm工具进行打包
4.2.1 创建rpm安装完毕后要执行的脚本
[root@centos7 ~]#cd /server/scripts/
[root@centos7 ~]#vim nginx_rpm.sh
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.2/ /application/nginx
# 这个脚本就是安装完rpm包要执行的脚本
1
2
3
4
5
6
4.2.2 打包
[root@beyond ~]# 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/
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.2-1.x86_64.rpm”}
[root@beyond ~]# ll -h nginx-1.6.2-1.x86_64.rpm
-rw-r–r– 1 root root 6.7M Nov 1 10:02 nginx-1.6.2-1.x86_64.rpm
1
2
3
4
5
6
附录:(php打包参数)

fpm -s dir -t rpm -n php -v 5.5.32 -d ‘zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libiconv libmcrypt-devel mhash mcrypt ‘ –post-install /server/scripts/php_rpm.sh -f /application/php5.5.32/
[root@centos7 ~]#vim /server/scripts/php_rpm.sh
#!/bin/bash
useradd -M -s /sbin/nologin www
ln -s /application/php-5.5.32/ /application/php
/application/php/sbin/php-fpm &
1
2
3
4
5
6
4.2.3 安装定制好的包
使用rpm安装打好的包

[root@web02 tmp]# rpm -ivh php-5.5.32-1.x86_64.rpm
error: Failed dependencies:
libiconv-devel is needed by php-5.5.32-1.x86_64
fr is needed by php-5.5.32-1.x86_64
eetype-devel is needed by php-5.5.32-1.x86_64
libiconv is needed by php-5.5.32-1.x86_64
mhash is needed by php-5.5.32-1.x86_64
mcrypt is needed by php-5.5.32-1.x86_64
[root@web02 tmp]#
# 提示缺少依赖关系包
1
2
3
4
5
6
7
8
9
10
使用yum安装,它会检测本地rpm包依赖的包,然后通过yum源下载安装。

5 YUM仓库搭建
5.1 安装createrepo 软件
[root@centos7 ~]#yum -y install createrepo
[root@centos7 ~]#cd /application/tools/
[root@centos7 ~]#rz 之前打包好的两个包
[root@centos7 ~]#tar xf nginx_yum.tar.gz # nginx的依赖包(keepcache=1,缓存的包)
[root@centos7 ~]#mkdir -p /application/yum/centos6/x86_64/ # 创建yum目录
[root@centos7 ~]#cd /application/yum/centos6/x86_64/
[root@centos7 ~]#cp /application/tools/*rpm .
1
2
3
4
5
6
7
5.2 初始化repodata目录并提供yum仓库服务
初始化

[root@centos7 ~]#createrepo -pdo /application/yum/centos6/x86_64/ /application/yum/centos6/x86_64/
# 会在/application/yum/centos6/x86_64/目录下生成repodata文件夹,里面存放的是索引文件
1
2
每加入一个rpm包就要更新一下

[root@centos7 ~]#createrepo –update /application/yum/centos6/x86_64/
1
启动一个简单的http服务,测试yum仓库(也可以用httpd服务或者nginx服务,这里用自带的模块启动)

[root@centos7 ~]#python -m SimpleHTTPServer 80 &>/dev/null &
# 在yum仓库的路径下执行,例如(/application/yum/centos6/x86_64/)
1
2
5.3 客户端配置
[root@centos7 ~]#cd /etc/yum.repos.d
[root@centos7 ~]#mkdir yum_bak && mv *repo yum_bak # 移出其他yum源
[root@centos7 ~]#vim beyondedu.repo # 创建yum源
[beyondedu]
name=Server #源名称
baseurl=http://10.0.0.61 # 自行指定yum源地址(服务端定义的/application/yum/centos6/x86_64/)
enable=1 # 启用源
gpgcheck=0 # 是否进行安全性检查,0表示不启动(一般用来效验包)
[root@centos7 ~]#yum clean all # 清空本机已有yum缓存
[root@centos7 ~]#yum list # 列表显示yum仓库(在列表末尾会显示创建的源里面的包,@anaconda-ks表示的是本机已经安装的包)
1
2
3
4
5
6
7
8
9
10
5.4 测试
客户端直接下载nginx,由于我们之前已经打包了nginx所需的依赖包,所以所有包都是在本地指定的yum中下载,速度非常快~!
———————
作者:while True:
来源:CSDN
原文:https://blog.csdn.net/beyondlee2011/article/details/85345622
版权声明:本文为博主原创文章,转载请附上博文链接!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注