zoukankan      html  css  js  c++  java
  • Linux定制化RPM包

    定制化RPM包

    1.Linux安装软件方法

    • 1- rpm/yum安装

      简单、速度快,但是不能定制安装

      RPM RedHat Package Manager(RPM软件包管理器)

    • 2- 二进制安装

      解压软件,简单配置后就可以使用,不用安装,速度较快

    • 3- 源码编译安装

      可以定制安装,但是安装时间长

    • 4- 源码软件结合yum/rpm安装

      把源码软件制作成符合要求的rpm,放到yum仓库里,然后通过yum来安装
      特点:安装快速,可以任意制定参数,但是有些难度

    2.FPM工具介绍

      fpm作者:jordansissel

      github:https://github.com/jordansissel/fpm

      功能:快速构建安装包

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

    3. 安装FPM工具

    3.1 安装依赖关系

      fpm是使用ruby编写的,依赖安装ruby,fpm依赖rpm-build,否则定制包的时候会出现错误

           yum -y install ruby rubygems ruby-devel

           注意:如果使用本地镜像,需要上传everything的镜像,否则ruby-devel不能正确安装,使用gem安装的时候会出现如下错误

    [root@nginx home]# gem install fpm
    Building native extensions.  This could take a while...
    ERROR:  Error installing fpm:
    	ERROR: Failed to build gem native extension.
    
        /usr/bin/ruby extconf.rb
    mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h
    
    
    Gem files will remain installed in /usr/local/share/gems/gems/ffi-1.11.2 for inspection.
    Results logged to /usr/local/share/gems/gems/ffi-1.11.2/ext/ffi_c/gem_make.out
    

    3.2 安装fpm

    安装fpm使用gem安装工具

    Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包,非常的便捷。

    Ruby 1.9.2版本默认已安装Ruby Gem,如果你使用其它发行版本,请参考“如何安装Ruby Gem”。

    Ruby gem包的安装方式:

    所有的gem包,会被安装到 /[Ruby root]/lib/ruby/gems/[ver]/ 目录下,这其中包括了Cache、doc、gems、specifications 4个目录,cache下放置下载的原生gem包,gems下则放置的是解压过的gem包。

    当安装过程中遇到问题时,可以进入这些目录,手动删除有问题的gem包,然后重新运行 gem install [gemname] 命令即可。

    [root@nginx home]# gem install fpm
    Successfully installed fpm-1.11.0
    Parsing documentation for fpm-1.11.0
    1 gem installed
    [root@nginx home]# gem list |grep fpm
    fpm (1.11.0)

    3.3 gem常用参数

    // 更新Gem自身
    // 注意:在某些linux发行版中为了系统稳定性此命令禁止执行
    gem update --system
    
    // 从Gem源安装gem包
    gem install [gemname]
    
    // 从本机安装gem包
    gem install -l [gemname].gem
    
    // 安装指定版本的gem包
    gem install [gemname] --version=[ver]
    
    // 更新所有已安装的gem包
    gem update
    
    // 更新指定的gem包
    // 注意:gem update [gemname]不会升级旧版本的包,此时你可以使用 gem install [gemname] --version=[ver]代替
    gem update [gemname]
    
    // 删除指定的gem包,注意此命令将删除所有已安装的版本
    gem uninstall [gemname]
    
    // 删除某指定版本gem
    gem uninstall [gemname] --version=[ver]
    
    // 查看本机已安装的所有gem包
    gem list [--local]
    
    // gem sources镜像管理
    // 查看镜像
    gem sources list
    // 添加镜像
    gem sources -a http://mirrors.aliyun.com/rubygems/
    // 删除镜像
    gem sources -r https://rubygems.org/
    
    // gem sources 相关参数
    [root@Docker01 tools]# gem sources --help
    Usage: gem sources [options]
    
      Options:
        -a, --add SOURCE_URI             Add source
        -l, --list                       List sources
        -r, --remove SOURCE_URI          Remove source
        -c, --clear-all                  Remove all sources (clear the cache)
        -u, --update                     Update source cache
    
    
      Local/Remote Options:
        -p, --[no-]http-proxy [URL]      Use HTTP proxy for remote operations
    
    
      Common Options:
        -h, --help                       Get help on this command
        -V, --[no-]verbose               Set the verbose level of output
        -q, --quiet                      Silence commands
            --config-file FILE           Use this config file instead of default
            --backtrace                  Show stack backtrace on errors
            --debug                      Turn on Ruby debugging
    
    
      Summary:
        Manage the sources and cache file RubyGems uses to search for gems
    
      Defaults:
        --list
    

    4. FPM常用参数

    -s          指定源类型
    -t          指定目标类型,即想要制作为什么包
    -n          指定包的名字
    -v          指定包的版本号
    -C          指定打包的相对路径  Change directory to here before searching forfiles
    -d          指定依赖于哪些包
    -f          第二次打包时目录下如果有同名安装包存在,则覆盖它
    -p          输出的安装包的目录,不想放在当前目录下就需要指定
    -m          打包的作者
    --post-install      软件包安装完成之后所要运行的脚本;同--after-install
    --pre-install       软件包安装完成之前所要运行的脚本;同--before-install
    --post-uninstall    软件包卸载完成之后所要运行的脚本;同--after-remove
    --pre-uninstall     软件包卸载完成之前所要运行的脚本;同--before-remove

    5. 定制RPM包

    5.1 程序路径

    [root@nginx home]# find create_rpm | xargs ls -l
    -rwxr-xr-x 1 user01 user01  0 Dec 11 15:07 create_rpm/bin/start
    -rw-r--r-- 1 user01 user01  0 Dec 11 15:08 create_rpm/data/datafile
    -rw-r--r-- 1 user01 user01  0 Dec 11 15:07 create_rpm/log/logfile
    
    create_rpm:
    total 0
    drwxr-xr-x 2 user01 user01 19 Dec 11 15:07 bin
    drwxr-xr-x 2 user01 user01 22 Dec 11 15:08 data
    drwxr-xr-x 2 user01 user01 21 Dec 11 15:07 log
    
    create_rpm/bin:
    total 0
    -rwxr-xr-x 1 user01 user01 0 Dec 11 15:07 start
    
    create_rpm/data:
    total 0
    -rw-r--r-- 1 user01 user01 0 Dec 11 15:08 datafile
    
    create_rpm/log:
    total 0
    -rw-r--r-- 1 user01 user01 0 Dec 11 15:07 logfile

    5.2 安装前运行的脚本

    [root@nginx home]# cat create_rpm_before.sh 
    #!/bin/bash
    id user01 || useradd -M user01 -s /sbin/nologin

    5.3 安装后运行的脚本

    [root@nginx home]# cat create_rpm_after.sh 
    #!/bin/bash
    find /home/create_rpm

    5.4 定制rpm包

    [root@nginx home]# fpm -s dir -t rpm -n create_rpm -v 1.2.3.4 -d 'openssh' --pre-install create_rpm_before.sh --post-install create_rpm_after.sh -f /home/create_rpm
    Created package {:path=>"create_rpm-1.2.3.4-1.x86_64.rpm"}
    [root@nginx home]# ls create_rpm-1.2.3.4-1.x86_64.rpm 
    create_rpm-1.2.3.4-1.x86_64.rpm
    # 最后可以接程序的多个文件存放路径

    5.5 使用

    rpm:会因依赖关系提示报错

    yum:hui解决依赖关系问题

    6. rpm常见查看包内容的参数

    # 查看安装包的信息
    [root@nginx home]# rpm -qpi create_rpm-1.2.3.4-1.x86_64.rpm 
    Name        : create_rpm
    Version     : 1.2.3.4
    Release     : 1
    Architecture: x86_64
    Install Date: (not installed)
    Group       : default
    Size        : 0
    License     : unknown
    Signature   : (none)
    Source RPM  : create_rpm-1.2.3.4-1.src.rpm
    Build Date  : Wed 11 Dec 2019 03:25:10 PM CST
    Build Host  : nginx
    Relocations : / 
    Packager    : <root@nginx>
    Vendor      : root@nginx
    URL         : http://example.com/no-uri-given
    Summary     : no description given
    Description :
    no description given
    
    # 查看安装包的内容
    [root@nginx home]# rpm -qpl create_rpm-1.2.3.4-1.x86_64.rpm 
    /home/create_rpm/bin/start
    /home/create_rpm/data/datafile
    /home/create_rpm/log/logfile
    
    # 查看安装包的依赖
    [root@nginx home]# rpm -qpR create_rpm-1.2.3.4-1.x86_64.rpm 
    openssh
    /bin/sh
    /bin/sh
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    rpmlib(CompressedFileNames) <= 3.0.4-1

     参考:https://blog.oldboyedu.com/autodeploy-rpm

  • 相关阅读:
    Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密
    Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类
    Java后端开发-SSM框架的图片上传
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    my codestyle
    alibaba-java-style-guide
  • 原文地址:https://www.cnblogs.com/gongniue/p/12022688.html
Copyright © 2011-2022 走看看