zoukankan      html  css  js  c++  java
  • 速成制作rpm包

    本节内容:

    • FPM介绍
    • 安装FPM
    • 打包示例
    • 卸载安装后的rpm包

    一、FPM介绍

    由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包。
    通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐。这就用到了FPM。
    FPM功能简单说就是将一种类型的包转换成另一种类型。FPM是Ruby模块,其实打包时也是调用rpmbuild命令。

    支持的源类型包:

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

    支持的目标类型包:

    • rpm 转换成rpm包
    • deb 转换成deb包
    • solaris 转换成solaris包
    • puppet 转换成puppet模块

    二、安装FPM

    1. 安装依赖包

    # yum -y install ruby rubygems ruby-devel gcc make
    

    2. 添加仓库

    # gem sources -a http://mirrors.aliyun.com/rubygems/
    

    3. 移除原有的仓库

    # gem sources --remove https://rubygems.org/
    # gem sources --remove http://rubygems.org/

    4. 查看仓库是不是只有自己添加的那个仓库地址  

    # gem sources -l 
    http://mirrors.aliyun.com/rubygems/
    

    5. 安装fpm  

    # gem install fpm

    如果遇到报错:

    Building native extensions.  This could take a while...
    ERROR:  Error installing fpm:
            ffi requires Ruby version >= 1.9.

    原因:安装fpm需要依赖包ruby的版本在1.9以上,那么升级ruby就可以了。

    解决:

    1. 使用rvm安装,首先需要安装rvm
    先查看你是否安装过rvm, 执行命令
    rvm -v
    
    2.yum -y update nss
       curl -L get.rvm.io | bash -s stable
    执行成功后,根据尾部的提示执行:source /etc/profile.d/rvm.sh (路径以尾部提示为准)
                
    3. 查看是否安装成功, 输入:rvm -v
    
    4. 列表显示都可以安装ruby的哪些版本
    rvm list known
    
    5. 更新ruby至版本2.3.0
    rvm install 2.3.0
    

      

    6. 如何查看fpm帮助  

    # fpm --help  

    常用参数:

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

    三、打包示例

    1. 打包MySQL

    事先安装好MySQL,MySQL安装过程这里不在详述。命令行终端输入以下命令,然后等待rpm包制作完成。

    # fpm -s dir -t rpm -n mysql -v 5.6.27 --description 'author: jkzhao' -d 'libaio' -d 'libaio-devel' --pre-install /usr/local/mysql/mysql_pre_init.sh --post-install /usr/local/mysql/mysql_post_init.sh  /usr/local/mysql /usr/local/mysql-5.6.27-linux-glibc2.5-x86_64 /data
    

    【注意】:默认打好的包是在当前目录下。

    命令说明:
    -s dir:指定源文件是目录的形式
    -t rpm:指定打包的格式
    -n:指定打包后名称
    -v:版本号
    --description:描述信息
    -d:指定需要依赖的包。安装MySQL前需要在系统上安装libaio、libaio-devel。当你安装fpm打包成的rpm包时,它会先去检测系统上是否安装了这两个包,如果没有安装会给出提示,并终止rpm的安装。
    --pre-install:安装rpm包前需要执行的脚本
    --post-install:安装rpm包后需要执行的脚本 

    • mysql_pre_init.sh的内容如下:
    #!/bin/bash
    
    user=mysql
    group=mysql
    
    # create group if not exists.
    egrep "^$group" /etc/group >& /dev/null
    if [ $? -ne 0 ]
    then
        groupadd -r -g 300 $group
    fi
    
    # create user if not exists.  
    egrep "^$user" /etc/passwd >& /dev/null
    if [ $? -ne 0 ]
    then
        useradd -g $group -r -s /sbin/nologin -u 300 $user
    fi
    
    • mysql_post_init.sh的内容如下:
    #!/bin/bash
    
    # cp my.cnf force.
    cp /usr/local/mysql/my.cnf /etc/
    
    # start/stop/restart script.
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    chkconfig --add mysqld
    
    # MySQL Client PATH.
    cp /usr/local/mysql/mysql.sh /etc/profile.d/
    
    cd /usr/local/mysql
    chown -R root.mysql .
    chown -R mysql.mysql /data
    

    打包完成后正常安装,如:  

    # rpm -ivh mysql-5.6.27-1.x86_64.rpm
    

    2. 打包openresty  

    事先安装好openresty。命令行终端输入以下命令,然后等待rpm包制作完成。

    # fpm -s dir -t rpm -n openresty -v 1.9.7.3 --description 'author: jkzhao' -d 'openssl-devel' -d 'readline-devel' -d 'pcre-devel' -d 'gcc' --post-install /usr/local/openresty/openresty_init.sh  /usr/local/openresty

    如果报如下错误:

    Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}

    解决:

    # yum install -y rpm-build
    • openresty_init.sh的内容如下:
    #!/bin/bash
    
    mv /usr/local/openresty/nginx.service /etc/systemd/system/
    systemctl enable nginx.service
    

      

    四、卸载安装后的rpm包

    如果重新安装rpm,必须先卸载rpm包,然后删除相应的目录及文件,否则再次安装时会报错。
    【注意】:卸载不要先直接删除目录和文件,否则你再次安装这个包时会说已安装,冲突了。

    # rpm -e --nodeps  mysql-5.6.27-1.x86_64.rpm
    

    然后再去删除各个目录和配置文件。  

      

  • 相关阅读:
    052-233(新增70题2018)
    052-232(新增70题2018)
    052-231(新增70题2018)
    052-230(新增70题2018)
    052-229(新增70题2018)
    052-228(新增70题2018)
    052-227(新增70题2018)
    052-226(新增70题2018)
    052-225(新增70题2018)
    进制之间的那点事(二进制、八进制、十进制、十六进制)
  • 原文地址:https://www.cnblogs.com/zhaojiankai/p/6744767.html
Copyright © 2011-2022 走看看