如何把sh文件打包成rpm包_使用 FPM 工具构建 RPM 包

af1e63e729c4cfba84fe81a16bb48e62.gif

什么是 FPM ?

fpm 是一个命令行程序,旨在帮助您构建软件包。fpm 的目标是使构建软件包(如rpm,deb,OSX 软件包等)变得轻松快捷。

1. 安装 FPM

安装依赖和语言包

yum -y install ruby rubygems ruby-devel gcc

添加阿里云的 Rubygems 仓库,外国的源慢

gem sources -a http://mirrors.aliyun.com/rubygems/

移除原生的 Ruby 仓库

gem sources --remove http://rubygems.org/

安装 fpm

gem install fpm

此时报错:

[root@ops-rpmbuild01 ~]# gem install fpm
Building native extensions.  This could take a while...
Building native extensions.  This could take a while...
ERROR:  Error installing fpm:
ruby-xz requires Ruby version >= 1.9.3.

解决办法是 先安装 rvm,再把 ruby 版本提升至 2.3.3

$ gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
$ curl -L get.rvm.io | bash -s stable 

$ source /usr/local/rvm/scripts/rvm
$ rvm list known 
$ rvm install 2.7.0
$ rvm use 2.7.0
$ . /etc/profile
$ ruby -v
1. *# 查看gcc版本是否在5.3以上,centos7.6默认安装4.8.5*
2. gcc -v
3. *# 升级gcc到5.3及以上,如下:*
4. 升级到gcc 9.3:
5. yum -y install centos-release-scl
6. yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
7. scl enable devtoolset-9 bash
8. 需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
9. 如果要长期使用gcc 9.3的话:
10.  
11. echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
12. 这样退出shell重新打开就是新版的gcc了
13. 以下其他版本同理,修改devtoolset版本号即可。

再次安装fpm

  gem install fpm 
#    fpm -h #查看命令的帮助,下面对常用的参数进行简单的说明
#    -s:指定源类型
#    -t:指定目标类型
#    -n:指定名字
#    -v:指定版本号
#    -C:指定打包的相对路径
#    -d:指定依赖于哪些包
#    -f:第二次打包时目录下如果有同名安装包存在,则覆盖它
#    -p:输出的安装包的目录,不想放在当前目录下就需要指定
#    --post-install  软件包安装完成之后所要运行的脚本;同--after-install
#    --pre-install  软件包安装完成之前所要运行的脚本;同--before-install

2. 实战案例

  • 构建 redis RPM 包
tar xf redis-6.0.6.tar.gz
cd redis-6.0.6/
make PREFIX=/tmp/redis install
mkdir /tmp/redis/etc/{redis,systemd/system} -p
cp redis.conf sentinel.conf /tmp/redis/etc

# redis 服务启动脚本
echo '[Unit]
Description=redis server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="REDIS_CONF=/etc/redis/redis.conf"
ExecStart=/usr/bin/redis-server ${REDIS_CONF}
ExecStop=/bin/kill ${MAINPID}
Restart=on-failure
[Install]
WantedBy=multi-user.target'>/tmp/redis/etc/systemd/system/redis.service


cd /tmp

$ cat redis-post-uninstall.sh 
#!/bin/bash
#
pidof redis-server && kill $(pidof redis-server)
systemctl daemon-reload

# 构建 RPM 包
fpm -s dir -t rpm -n redis -v 6.0.6 -C ./redis/ --post-uninstall redis-post-uninstall.sh -p redis-VERSION_ARCH.rpm -f
  • 构建 jdk RPM 包
tar xf jdk-8u201-linux-x64.tar.gz -C /tmp
cd /tmp/jdk1.8.0_201/
mkdir usr/local/jdk1.8.0_201 -p
mv * usr/local/jdk1.8.0_201/
$ pwd
/tmp/jdk1.8.0_201/usr/local/jdk1.8.0_201

$ cd /tmp/jdk1.8.0_201/
$ mkdir etc/profile.d -p
$ cd etc/profile.d/
$ echo '
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
'>jdk.sh
$ chmod +x jdk.sh
$ cd /tmp/jdk1.8.0_201/usr/local
$ ln -s jdk1.8.0_201/ jdk 

$ cat jdk-post-uninstall.sh 
#!/bin/bash
#
[ -e /usr/local/jdk1.8.0_201 ] && rm -rf /usr/local/jdk1.8.0_201

$ fpm -s dir -t rpm -n jdk -v 8u201 -C /usr/local/jdk1.8.0_201 -p jdk-VERSION_ARCH.rpm --post-uninstall jdk-post-uninstall.sh -f 
  • 构建 Tomcat RPM 包
tar xf apache-tomcat-9.0.37.tar.gz -C /tmp
cd /tmp/apache-tomcat-9.0.37/
mkdir usr/local/apache-tomcat-9.0.37 -p
mv * usr/local/apache-tomcat-9.0.37/
mkdir etc/systemd/system/  -p
cd usr/local/
ln -s apache-tomcat-9.0.37/ tomcat9
cd apache-tomcat
$ cat etc/systemd/system/tomcat.service
[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/usr/local/jdk"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat9/bin/startup.sh
ExecStop=/usr/local/tomcat9/bin/shutdown.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

$ cd /tmp
$ cat tomcat-post-uninstall.sh 
#!/bin/bash
#
#[ -e /usr/local/apache-tomcat-9.0.37 ] && rm -rf /usr/local/apache-tomcat-9.0.37
#kill $(ps -ef | grep  "apache-tomcat" | grep -v grep | awk '{print $2}')
systemctl stop tomcat 2>/dev/null
systemctl daemon-reload 
[ -e /usr/local/apache-tomcat-9.0.37 ] && rm -rf /usr/local/apache-tomcat-9.0.37

$ fpm -s dir -t rpm -n apache-tomcat -v 9.0.37 -C ./apache-tomcat-9.0.37/ --post-uninstall tomcat-post-uninstall.sh -p apache-tomcat-VERSION_ARCH.rpm -d jdk -f 

7418e82dae2bed7698bc46143693e204.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值