随着互联网的发展,一些互联网企业,甚至于传统企业的服务器也是越来越多。将面临的挑战其中之一就是自动化运维管理。假设我们需要自动化部署很多的应用,而这些应用又很复杂,过程多,需要源码安装。就算你能够用自动化来完成这些工作,但配置起来也是相当的麻烦。那么现在就有一种技术可以将源码安装的应用封装成rpm包,或者deb包等,完成一键安装,此方法运用得当可谓是如虎添翼

  关于rpm包的封装制作方法有好多,我这里介绍的是一种相对简单的方法使用ruby的fpm模块来实现。学习成本低,方便,快捷


实验环境:最小化安装CentOS7系统

实现目标:将二进制部署的MySQL打包为RPM包,实现一键安装


ruby环境准备:

安装ruby环境

yum -y install rubygems ruby-devel rubygems-devel

添加taobao的gem源,删除默认源(安装模块速度快)

查看gem源

gem sources -l

添加新源,并删除默认源

gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/

更新gem软件

gem install json_pure
gem update --system

安装fpm模块

查看已安装的模块

gem list

安装fpm模块

gem install fpm

安装模块时指定版本号,和输出详细信息

例:

gem install json -v 1.8.3 –V

小v为指定版本号,大V输出详细安装信息


fpm常用选项介绍

-C          #指定fpm去哪个目录查找打包的文件
-s          #指定源的类型,如dir
-t          #指定目标类型,如rpm包,或者deb包等
--vendor       #指定包的vendor名字
-n          #指定包的名字
-v          #指定包的版本号
-d          #指定依赖包
--prefix       #指定安装路径
--post-install    #包安装后要运行的脚本,等同于--before-install
--pre-install     #包安装前要运行的脚本,等同于--after-install
--post-uninstall   #包卸载后要运行的脚本,等同于--before-remove
--pre-uninstall    #包卸载前要运行的脚本,等同于--after-remove

二进制安装MySQL5.6步骤

创建MySQL用户组

groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql

创建MySQL数据目录

mkdir -p /data/mysql

解压二进制包,并复制到/usr/local/mysql

tar -xvzf mysql-5.6.31-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.31-linux-glibc2.5-x86_64 /usr/local/mysql

设置权限

chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /usr/local/mysql

初始化和安装依赖包:

yum -y install perl-Module-Install
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql

修改配置文件

sed -i '/^datadir=/s@datadir=@datadir=/data/mysql@' /usr/local/mysql/support-files/mysql.server

/bin/cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

 配置启动服务

ln /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld

配置环境变量

echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh

制作RPM方案

  1. 指定RPM打包的目录为/usr/local/mysql

  2. 指定安装依赖包perl-Module-Install

  3. 指定安装前执行脚本:创建用户组,创建目录,配置权限

  4. 指定安装后执行脚本:初始化,修改配置文件,配置启动服务,配置环境变量

  5. 指定卸载后执行脚本:删除安装目录,删除环境变量,删除服务

制作RPM包目步骤

安装前执行脚本:install_mysql_post.sh

#!/bin/bash

group=mysql
user=mysql

#create group if not exists
egrep "^$group" /etc/group >& /dev/null
if [ $? -ne 0 ];then
    groupadd $group
fi

#create user if not exists
egrep "^$user" /etc/passwd >& /dev/null
if [ $? -ne 0 ];then
    useradd -g $group -M -s /sbin/nologin $user
fi

#create datadir if not exists
if [ ! -d /data/mysql ];then
    mkdir -p /data/mysql
else
    echo "/data/mysql dir is exists"
    exit 2
fi
if [ -d /usr/local/mysql ];then
    echo "/usr/local/mysql directory is exists"
    exit 2
fi

安装后执行脚本:install_mysql_pre.sh

#!/bin/bash

homedir=/usr/local/mysql
datadir=/data/mysql

#Set permissions
chown -R mysql:mysql $datadir
chown -R mysql:mysql $homedir

#Add my.cnf
/bin/cp $homedir/support-files/my-default.cnf /etc/my.cnf

#Add service
chkconfig --add mysqld

卸载后执行脚本:uninstall_mysql_pre.sh

#!/bin/bash

rm -rf /usr/local/mysql
echo "delete complete, but my.cnf and datadir is not delete"

执行下面命令创建RPM包

先安装制作软件包需要依赖包:

yum -y install rpm-build

fpm -s dir -t rpm -v 5.6.31 -n mysql --before-install install_mysql_post.sh --after-install install_mysql_pre.sh --after-remo
ve uninstall_mysql_pre.sh -d 'perl-Module-Install' /usr/local/mysql /data/mysql /etc/init.d/mysqld /etc/profile.d/mysql.sh

命令执行过程有点长,完成后会在当前目录下生成mysql-5.6.31-1.x86_64.rpm的包,这时候就可以将此包复制到其它CentOS7系统上进行测试,如果是CentOS6系统的话,只是一些依赖包不一样,其它都一样

关于其它的一些选项,比如作者,平台等信息可以查找更多资料,使用以下命令可以查看rpm执行脚本的信息:

rpm -qp --scripts mysql-5.6.31-1.x86_64.rpm


至此对RPM包的制作介绍已经完毕,如果你喜欢的文章或者博客可以收藏或关注,会不定期更新一些技术博文