系列文章目录
提示:这篇文章用于学习构建rpm包的基本过程和命令,可以结合该文章来看本文章中的RPM包的构建过程
rpmbuild教程
文章目录
前言
其实,在生产环境中安装部署minio单点或者集群非常容易,只需要在官网下载对应的二进制minio程序文件,然后配置账密启动即可,但这个过程不太优雅。从一个交付运维团队的角度出发,不管是提供的中间件安装包还是服务部署包,都肯定是要以繁化简,做到极致的封装来实现自己简单且维护性高的交付安装包,让客户能快速上手运维。因此本篇文章就针对常用的中间件minio进行一次x86_64架构服务器下的RPM包构建,其中封装进去了自己写的minio的启停脚本及数据目录的维护等过程。
至于为什么不直接使用官网封装好的rpm包,那是因为每个公司都有自己单独的一套部署路径和手册,不能趋向于大众化。
一、资源准备
关于rpmbuild环境的安装在本篇文章中不再做描述,详细文章可查看顶部的rpmbuild教程文章即可
注意事项:新老版本minio的区别
1、minio的数据目录不允许使用服务器系统盘根目录下的文件夹作为数据文件。下方的data是新的一块数据盘
2、老版本的minio账密使用的是MINIO_ACCESS_KEY和MINIO_SECRET_KEY,新版本使用的是 MINIO_ROOT_USER和 MINIO_ROOT_PASSWORD
1、minio二进制文件下载并移除后缀
[root@python2 SOURCE]# wget https://dl.minio.io/server/minio/release/linux-amd64/archive/minio.RELEASE.2023-05-18T00-05-36Z
[root@python2 SOURCE]# mv minio.RELEASE.2023-05-18T00-05-36Z minio
2、minio client二进制文件下载并移除后缀
mc版本要和minio版本保持一致
[root@python2 SOURCE]# wget http://dltest.minio.org.cn/client/mc/release/linux-amd64/archive/mc.RELEASE.2023-05-18T16-59-00Z
[root@python2 SOURCE]# mv mc.RELEASE.2023-05-18T16-59-00Z mc
3、上传minio启动脚本
将编写好的minio启动脚本上传到rpmbuild服务器下的SOURCE目录下
单节点minio启动脚本single_run.sh
#!/bin/sh
export MINIO_ROOT_USER=OpsMinIO
export MINIO_ROOT_PASSWORD=OpsAdmin081524
TIME=`date +%Y-%m-%d_%T`
MINIO_OPTS="--console-address :9001 --address :8021" #指定minio-ui的访问端口和minio服务端口.其他参数的使用参考官网文档即可
nohup /export/server/minio/minio server $MINIO_OPTS /data/minio_data > /export/server/minio/minio_server_"$TIME".log 2>&1 &
echo $! > /export/server/minio/minio.pid
minio集群启动脚本cluster_run.sh
#!/bin/sh
export MINIO_ROOT_USER=OpsMinIO
export MINIO_ROOT_PASSWORD=OpsAdmin081524
TIME=`date +%Y-%m-%d_%T`
MINIO_OPTS="--console-address :9001 --address :8021" #指定minio-ui的访问端口和minio服务端口
nohup /export/server/minio/minio server $MINIO_OPTS http://ip1/data/minio_data http://ip2/data/minio_data http://ip3/data/minio_data > /export/server/minio/minio_server_"$TIME".log 2>&1 &
echo $! > /export/server/minio/minio.pid
4、上传minio停止脚本
将编写好的minio启动脚本上传到rpmbuild服务器下的SOURCE目录下
minio停止脚本stop.sh
#!/bin/bash
pid=`cat /export/server/minio/minio.pid`
if [[ -n $pid ]];then
kill -9 $pid
rm -f /export/server/minio/minio.pid
else
ps -ef |grep minio |grep -v grep | awk '{print $2}' | xargs -i -t kill {}
rm -rf /export/server/minio/minio.pid
fi
5、上传minio重启脚本
将编写好的minio启动脚本上传到rpmbuild服务器下的SOURCE目录下
minio重启脚本restart.sh
#!/bin/bash
stop(){
cd /export/server/minio
/bin/bash stop.sh
}
stop
start (){
cd /export/server/minio
/bin/bash single_run.sh
#/bin/bash cluster_run.sh #此处自行判断是采用哪个脚本即可
}
start
6、SOURCE目录下源码文件查看
-rw-r--r-- 1 root root 26128384 Aug 14 16:11 mc
-rw-r--r-- 1 root root 100065280 Aug 14 16:10 minio
-rw-r--r-- 1 root root 230 Aug 15 14:59 minio_restart.sh
-rw-r--r-- 1 root root 435 Aug 15 15:01 single_run.sh
-rw-r--r-- 1 root root 265 Aug 15 15:00 stop.sh
至此,源文件准备完毕,下一步开始编写spec文件
二、minio.spec文件
1、spec文件
文件如下(示例):
#自定义宏,相当于Linux中"Key-Value"变量形式
#--->名称
%define Name1 minio
%define Name2 mc
#--->版本
%define Version RELEASE_2023_05_18
#--->本rpm包默认安装的路径
%define InstallPath /export/server/minio
#-->rpm包封装进去的脚本
%define singlerunSh single_run.sh
%define clusterrunSh cluster_run.sh
%define stopSh stop.sh
%define restartSh minio_restart.sh
# Be sure buildpolicy set to do nothing
%define __spec_install_post %{nil}
# Something that need for rpm-4.1
%define _missing_doc_files_terminate_build 0
%define _build_id_links none
# 软件包的名称
Name: %{Name1}
# 软件包的版本
Version: %{Version}
# 软件包的概要信息,不要超过50个
# 软件授权方式
License: GNU AGPLv3
Release: 1
Summary: The minio for centos 7 x86_64.
# 软件分类
Group:System Middleware
AutoProv: no
AutoReq: no
# 源代码软件包的官方地址或源码包的下载地址
URL: http://dltest.minio.org.cn/server/minio/release/linux-amd64/archive/
# 源代码软件包的名字
Requires: /bin/sh
Source0: %{Name1}
Source1: %{Name2}
Source2: %{singlerunSh}
Source3: %{clusterrunSh}
Source4: %{stopSh}
Source5: %{restartSh}
%description
This is %{Name1} %{Version}
#此处的for循环灵感来自于官网,感觉简单美观,比自己写的第一版可读性更高
#安装前操作
%prep
for i in {%SOURCE0,%SOURCE1,%SOURCE2,%SOURCE3,%SOURCE4,%SOURCE5};do
cp -rp $i .
done
#安装操作
%install
mkdir -p %{buildroot}%{InstallPath}
for i in {%SOURCE0,%SOURCE1,%SOURCE2,%SOURCE3,%SOURCE4,%SOURCE5};do
cp -rp $i %{buildroot}%{InstallPath}/
done
%files
%attr(0755, root, root) %{InstallPath}/mc
%attr(0755, root, root) %{InstallPath}/minio
%attr(0755, root, root) %{InstallPath}/single_run.sh
%attr(0755, root, root) %{InstallPath}/cluster_run.sh
%attr(0755, root, root) %{InstallPath}/stop.sh
%attr(0755, root, root) %{InstallPath}/minio_restart.sh
#安装minio rpm包后的操作
%post -p /bin/sh
#!/bin/sh
mkdir -p /export/data/minio_data
#删除minio前的操作
%preun
#!/bin/sh
%{InstallPath}/stop.sh
#删除后的操作
%postun
rm -rf %{InstallPath}
%changelog
* Fri Aug 15 2024 15:09:39 +0800
- Initial minio 20230518 RPM release
2、执行spec文件构建
[root@python2 SPECS]# rpmbuild -bb minio.spec #参数 -bb: 只构建出二进制包
三、结果验证
1、安装构建成功的RPM包
[root@python1 export]# rpm -ivh minio-RELEASE_2023_05_18-1.x86_64.rpm
2、启动单节点minio
集群在此处不验证,没有多余的机器。保证100%没有问题。
[root@python1 minio]# sh single_run.sh
3、访问minio-console控制台
因为脚本中指定了minio-console的端口为9001,因此访问ip+9001即可,账密也在脚本中记录
4、RPM包卸载验证
[root@python1 minio]# rpm -qa |grep minio
minio-RELEASE_2023_05_18-1.x86_64
[root@python1 minio]# rpm -e minio-RELEASE_2023_05_18-1.x86_64
`
由卸载验证可知,minio的卸载正如我们spec文件中%preun和%postun所写的一致。删除了安装目录,保留了数据目录
至此,minio-2023518版本的RPM包构建完成!!!
总结
以上就是今天针对rpmbuild构建二进制程序文件所做的练习。之前几篇文章都是针对源码包进行的编译构建。多一个技能,多一条活路,加油奥里给!!!