随着互联网的发展,一些互联网企业,甚至于传统企业的服务器也是越来越多。将面临的挑战其中之一就是自动化运维管理。假设我们需要自动化部署很多的应用,而这些应用又很复杂,过程多,需要源码安装。就算你能够用自动化来完成这些工作,但配置起来也是相当的麻烦。那么现在就有一种技术可以将源码安装的应用封装成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方案
指定RPM打包的目录为/usr/local/mysql
指定安装依赖包perl-Module-Install
指定安装前执行脚本:创建用户组,创建目录,配置权限
指定安装后执行脚本:初始化,修改配置文件,配置启动服务,配置环境变量
指定卸载后执行脚本:删除安装目录,删除环境变量,删除服务
制作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包的制作介绍已经完毕,如果你喜欢的文章或者博客可以收藏或关注,会不定期更新一些技术博文