速成制作rpm包

Posted 暴走小骚年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了速成制作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

2. 添加仓库

# gem sources -a http://gems.ruby-china.org/

3. 移除原有的仓库

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

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

# gem sources -l 
https://gems.ruby-china.org

5. 安装fpm  

# gem install fpm

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
  • openresty_init.sh的内容如下:
#!/bin/bash

mv /usr/local/openresty/nginx.service /etc/systemd/system/
systemctl enable nginx.service

  

卸载FPM打包好的rpm包

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

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

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

  

以上是关于速成制作rpm包的主要内容,如果未能解决你的问题,请参考以下文章

制作RPM包

制作MySQL RPM安装包Spec

将源码包制作成RPM包

通过nginx源码包制作rpm包

把脚本制作成RPM包

制作rpm包