一、FPM介绍
由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包。
通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐。这就用到了FPM。
FPM功能简单说就是将一种类型的包转换成另一种类型。FPM是Ruby模块,其实打包时也是调用rpmbuild命令。
支持的源类型包:
l dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包
l rpm 对rpm进行转换
l gem 对rubygem包进行转换
l python 将python模块打包成相应的类型
支持的目标类型包:
l rpm 转换成rpm包
l deb 转换成deb包
l solaris 转换成solaris包
l puppet 转换成puppet模块
二、安装FPM
# yum -y install ruby rubygems ruby-devel
1. 安装依赖包
1
# yum -y install ruby rubygems ruby-devel
2. 添加仓库
1
# gem sources -a http://gems.ruby-china.org/
3. 移除原有的仓库
1
# gem sources --remove https://rubygems.org/
4. 查看仓库是不是只有自己添加的那个仓库地址
1
2
# gem sources -l
https://gems.ruby-china.org
5. 安装fpm
1
# gem install fpm
6. 如何查看fpm帮助
1
# 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
实验:
-C 指在哪个目录下搜索
后面的/usr/local/mysql /data 是我二进制安装完成后的basedir和datadir
打包完成后类似快照效果 里面的数据也一并打包
l mysql_pre_init.sh的内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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
l mysql_post_init.sh的内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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