如果使用 rpmbuild 打包,需要你编写很多配置文件,非常繁琐,一个简单的 rpm 包可能就只是执行一个二进制文件而已,完全没必要花费大量的时间去系统学习它们,于是乎,有人就编写了一个开源工具 go-bin-rpm,用它可以很方便的将二进制文件打包成 rpm 包;
1、环境准备
(1)rpmbuild 的相关依赖安装
yum install -y gcc make rpm-build redhat-rpm-config
(2)go-bin-rpm 安装,项目地址:https://github.com/mh-cbon/go-bin-rpm
wget -O - https://raw.githubusercontent.com/mh-cbon/latest/master/bintray.sh \
| GH=mh-cbon/go-bin-rpm sh -xe
验证是否安装成功
$ go-bin-rpm --version
go-bin-rpm version 1.0.0
2、配置文件编写:
(1)go 编译的二进制文件为:BSMonitorClientGo
(2)go-bin-rpm 的配置文件是 rpm.json
- “name”: “bsmgo” 服务名(可以使用
rpm -e bsmgo直接卸载它)- “arch”: “amd64” 内核:x86_64,也可以用其他内核
- files 要拷贝到
rpm包中的文件,fromto把 BSMonitorClientGo 文件拷贝到 /usr/local/bin/ 下面- “postinst”: “systemctl daemon-reload” 安装完要执行的脚本内容
{"name": "bsmgo","version": "1.0.1","release": "20230316","arch": "amd64","summary": "","description": "","license": "sunkaiyuan.com","url": "http://sunkaiyuan.com","postinst": "systemctl daemon-reload","files": [{"from": "BSMonitorClientGo","to": "/usr/local/bin/","base": "","type": ""},{"from": "!name!.service","to": "/usr/lib/systemd/system/","base": "","type": ""},{"from": "config.yaml","to": "/etc/bsmgo/","base": "","type": ""}]
}
(3)我打算把这个服务用systemctl托管起来
- 上面已经写了拷贝后的路径
/usr/lib/systemd/system/- !name!.service # !name! 相当于变量,会取前面 rpm 包名称 bsmgo(bsmgo.service)
bsmgo.service 文件内容如下:
[Unit]
Description=bsmgo
After=network.target[Service]
Environment=
User=root
Group=root
PermissionsStartOnly=true
ExecStart=/usr/local/bin/BSMonitorClientGo default
Restart=always
LimitNOFILE=65535
WorkingDirectory=/[Install]
WantedBy=multi-user.target
4、一切准备完毕,开始编译
将 go编译的二进制文件BSMonitorClientGo,go-bin-rpm的配置文件是 rpm.json,bsmgo.service文件,放在同一目录下:
BSMonitor|____BSMonitorClientGo|____rpm.json|____bsmgo.service|____config.yaml
开始编译:
$ go-bin-rpm generate -f rpm.json -o ./rpms/name-version-release.Linux版本.内核架构.rpm
$ go-bin-rpm generate -f rpm.json -o ./rpms/bsmgo-1.0.1-20230316.el7.x86_64.rpm
对应替换
name 服务名
version 版本号
Linux版本 x86_64 架构
内核架构 Linux 7 (el7)
5、成功!