中间件

使用fpm打包rpm包

admin · 8月21日 · 2020年

1.安装ruby环境

#原作者:jordansissel
#https://github.com/jordansissel/fpm
#安装ruby及依赖
yum -y install ruby rubygems ruby-devel
yum install rpm-build -y
#自带的ruby版本过低,需要升级ruby
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
curl -sSL https://get.rvm.io | bash -s stable
#根据运行的报错下载相应证书
source /etc/profile.d/rvm.sh
rvm install 2.5

2.安装fpm

#添加阿里源,移除国外源
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove  https://rubygems.org/
gem source -u
gem install fpm 

3.使用fpm打包

#fpm参数说明
-s                 指定源类型
-t                 指定目标类型,即想要制作为什么包
-n                 指定包的名字
-v                 指定包的版本号
-C                 指定打包的相对路径
-d                 指定依赖于哪些包
-f                 第二次打包时目录下如果有同名安装包存在,则覆盖它
-p                 输出的安装包的目录,不想放在当前目录下就需要指定
--post-install     软件包安装完成之后所要运行的脚本;同--after-install
--pre-install      软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall   软件包卸载完成之后所要运行的脚本;同--after-remove
--pre-uninstall    软件包卸载完成之前所要运行的脚本;同--before-remove


#将源码文件编译好并放至指定目录
#以sersync为例

#rpm_install.sh
#!/bin/bash
ln -s /usr/local/sersync/bin/sersync /usr/local/bin
mkdir -p /etc/sersync
cp -a /usr/local/sersync/conf/confxml.xml /etc/sersync
cat > /usr/lib/systemd/system/sersync.service <<EOF
[Unit]
Description=sersync
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/sersync -d  -n 30 -o /etc/sersync/confxml.xml

[Install]
WantedBy=multi-user.target
EOF

##rpm_remove.sh
#!/bin/bash
rm -f /usr/local/bin/sersync
rm -rf /etc/sersync
rm -rf /usr/local/sersync
rm -f /usr/lib/systemd/system/sersync.service

#打包
fpm -s dir -t rpm -n {name} -v {version} --post-install {dir} --post-uninstall {dir} -f {file_dir}

fpm -s dir -t rpm -n sersync -v 3.1.2 \
--post-install /rpm_script/sersync/rpm_install.sh \
--post-uninstall /rpm_script/sersync/rpm_remove.sh \
-f /usr/local/sersync/