FPM打包工具

FPM打包工具

支持的源类型包:

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

支持的目标类型包:

  • rpm: 转换为rpm包
  • deb: 转换为deb包
  • solaris: 转换为solaris包
  • puppet: 转换为puppet包

将源码包打成rpm包:
开启yum缓存

[root@db02 ~]# vim /etc/yum.conf
keepcache=1

安装fpm

fpm-1.3.3.x86_64.tar.gz

有epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装fpm的依赖(ruby环境和gem命令)

[root@db04 ~]# yum install -y ruby-devel rubygems

查看当前源

[root@db04~]# gem source list
			  *** CURRENT SOURCES ***
			  http://rubygems.org/

添加华为的ruby源

[root@db04 ~]# gem sources --add https://mirrors.huaweicloud.com/repository/rubygems/

[root@db04 ~]# gem source --list
*** CURRENT SOURCES ***

https://rubygems.org/
https://mirrors.huaweicloud.com/repository/rubygems/


移除国外源

[root@db04 ~]# gem source --remove https://rubygems.org/
https://rubygems.org/ removed from sources

移动fpm安装包,解压

[root@db04 ~]# mv fpm-1.3.3.x86_64.tar.gz /server/tools/

[root@db04 ~]# cd /server/tools/

[root@db04 tools]# tar xf fpm-1.3.3.x86_64.tar.gz 

安装gem,以及依赖

[root@db04 tools]# gem install *.gem

11 gems installed

[root@db04 tools]# yum install -y gcc-c++ gcc glibc zlib-devel pcre-devel openssl-devel automake

安装遇到问题:

1.Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}
解决方法:
[root@localhost]``# yum install -y rpm-build

2.如果里面有gcc make的错误.
解决方法:
yum install -y gcc 

FPM常用参数:

-s:指定源类型

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

-n:指定包的名字

-v:指定包的版本号

-C:指定打包的相对路径

-d:指定依赖于哪些包

-f:第二次包时目录下如果有同名安装包存在,则覆盖它

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

--post-install:软件包安装完成之后所要运行的脚本;同--offer-install

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

--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove

--pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove

fpm使用示例:

fpm打包Nginx

[root@localhost opt]# fpm -s dir -t rpm -n nginx -v 1.6.1 -d 'pcre-devel,openssl-devel' --post-install /opt/nginx_rpm.sh -f /opt/nginx/ <br>
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.1-1.x86_64.rpm"}

fpm相对路径打包

[root@localhost~]# fpm -s dir -t rpm -n opt -v 1.1.1.1 -d 'gcc,gcc+' -C ../opt/   
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=>"opt-1.1.1.1-1.x86_64.rpm"}

保存nignx的依赖包

[root@db04 tools]# mkdir /nginx

[root@db04 tools]# find /var/cache/yum/ -name '*.rpm'|grep -v ruby|xargs cp -t /nginx/

解压

[root@db04 ~]# tar xf nginx-1.16.0.tar.gz

[root@db04 ~]# mkdir /app -p

[root@db04 nginx-1.16.0]# ./configure --prefix=/app/nginx-1.16.0

[root@db04 nginx-1.16.0]# echo $?
0

[root@db04 nginx-1.16.0]# make && make install

make[1]: Leaving directory `/root/nginx-1.16.0'

原文地址:https://www.cnblogs.com/longren/p/11936010.html