• 使用FPM打包工具打rpm包


                                使用FPM打包工具打rpm包

    一:安装ruby环境和gem命令

    fpm 是 ruby写的,因此系统环境需要ruby且版本必须大于1.8.5
      # yum -y install ruby rubygems ruby-devel
    查看当前ruby源  
      # gem source -l  
    添加国内源
      # gem sources -a http://mirrors.aliyun.com/rubygems/
    删除国外源
      # gem sources --remove  https://rubygems.org/
    安装fpm 可能要失败
      gem source -u #更新源或者 不行就 -c 
      # gem install fpm
    我这里解决方法安装旧版本的fpm
      # gem install fpm -v 1.4.0
      # gem -v
    报错解决:

    解决:
    因为系统内json默认版本过高,导致ruby 1.8.7无法支持,需要降低json版本
      gem install json -v 1.8.3
    安装完json后再安装fpm即可
    另外,centos7.x中默认ruby版本就高,没有此问题
     
     

    二:打包 以git-2.9.4.tar.gz打包为例子:

     第1步:将git编译安装到:/tmp/installdir/Data/apps/git下

      # tar xf git-2.9.4.tar.gz # cd git-2.9.4
      # make prefix=/tmp/installdir/Data/apps/git all
      # make prefix=/tmp/installdir/Data/apps/git install
    /tmp/installdir/为fpm打包时指定的相对路径,rpm安装时会自动去掉这个目录,git会直接安装到生产环境的/Data/apps/git下,所以要保障这个/tmp/installdir 目录的纯净。
     
    第2步:建立rpm安装后需要执行脚本 在/tmp/installtarget/install_after.sh  #rpm安装后执行脚本

     #!/bin/bash
      /bin/cp -a /usr/bin/git /usr/bin/git.1.7.1  2> /dev/null
      /bin/rm -f /usr/bin/git
      /bin/ln -s /Data/apps/git/bin/git /usr/bin/git
      exit 0
    第3步:建立rpm卸载后需要的执行的脚本 在/tmp/installtarget/remove_after.sh

    #!/bin/bash
     unlink /usr/bin/git
     /bin/mv /usr/bin/git.1.7.1 /usr/bin/git 2> /dev/null
     /bin/rm -rf /Data/apps/git
     exit 0
    第4步打包

     fpm -s dir -t rpm -n hdf-git-client -v 2.9.4 -C /tmp/installdir/ --description 'git for haodf.com' --post-install /tmp/installtarget/install_after.sh --post-uninstall /tmp/installtarget/remove_after.sh -p /root/
    FPM:常用参数说明:
    -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
     

  • 相关阅读:
    Mysql第八天 分区与分表
    ios—项目开发需求文档
    spark资料下载
    网络爬虫:使用多线程爬取网页链接
    调用微信高级群发接口--视频群发接口出问题(微信官方文档错误纠正)
    享元模式
    在JAVA中怎样跳出当前的多重嵌套循环?
    获取个人借阅信息---图书馆client
    IOS 以随意点为圆心 旋转UIView
    ESP8266学习笔记4:ESP8266的SmartConfig
  • 原文地址:https://www.cnblogs.com/panwenbin-logs/p/7822087.html
走看看 - 开发者的网上家园