Go 程序打成 rpm 包( go-bin-rpm 将二进制文件打包成 rpm 包)
创始人
2025-05-28 09:51:15

Go 程序打成 rpm 包( go-bin-rpm 将二进制文件打包成 rpm 包)

如果使用 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包中的文件,from to 把 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、成功!

相关内容

热门资讯

难忘的毕业露营夜 5月15日,湖北省武昌实验中学沙湖学校在武汉光谷为即将毕业的300余名六年级学生举办毕业露营夜活动,...
三亚海边捡贝壳,遇到了当年一起... 浪尖上的重逢 一、被贝壳叫醒的清晨 三亚的风总带着咸湿的甜味,我踩着细沙往海边走时,脚趾缝里还嵌着昨...
2026年室内游乐设备行业服务... 行业背景与趋势洞察 室内游乐设备行业正处于结构性升级的关键节点。随着“儿童友好城市”建设的持续推进、...
遇见美洲|锦江丽笙酒店携手锦江... (中国上海,2026年5月16日)延续“海外主厨共创计划”对“餐饮+文旅”融合场景的探索,锦江丽笙酒...
泰州非标定制游乐设备 在儿童游乐领域,标准化的滑梯、秋千和攀爬架固然常见,但越来越多的地方开始追求更具独特性、主题性和贴合...