FPM 制作RPM 安装包 — Jevic

FPM 制作RPM 安装包

2017/03/11 Linux
  • 支持的源类型包:
    • dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包
    • rpm: 对rpm进行转换
    • gem: 对rubygem包进行转换
    • python: 将Python模块打包成相应的类型
  • 支持的目标类型包:
    • rpm: 转换为rpm包
    • deb: 转换为deb包
    • solaris: 转换为solaris包
    • puppet: 转换为puppet包

FPM的安装:

安装ruby环境和gem命令: gem命令是从rubygem仓库安装软件类似yum从yum仓库安装软件

# yum -y install ruby rubygems ruby-devel
# gem source list
# gem sources -a http://mirrors.aliyun.com/rubygems/
# gem sources --remove http://rubygems.org/
# gem install fpm
# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf    //开启yum缓存
  • 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
  • 安装遇到问题:
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打包实例:

  • 1.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"}
  • 2.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"}
  • 3.使用fpm将生成包指定到/tmp下:
[root@ ~]# fpm -s dir -t rpm -n ansible-v 1.1.1.1 -d 'gcc,gcc+' -f ansible-p /tmp/
 
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=>"/tmp/ansible-1.1.1.1-1.x86_64.rpm"}

查看rpm包信息:

  • 1.查看rpm执行的脚本
[root@localhost opt]# rpm -qp --scripts nginx-1.6.1-1.x86_64.rpm       
postinstallscriptlet (using /bin/sh):
#!/bin/bash
useraddnginx -M -s /sbin/nologin
  • 2.查看rpm包的依赖
[root@localhost opt]# rpm -qpR nginx-1.6.1-1.x86_64.rpm 
openssl-devel
/bin/sh
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1

Search

    Post Directory