我是靠谱客的博主 自信高山,这篇文章主要介绍Go 程序打成 rpm 包1. 环境准备2. 配置文件3. 使用 Makefile,现在分享给大家,希望可以做个参考。

Go 程序打成 rpm 包

  • 1. 环境准备
  • 2. 配置文件
  • 3. 使用 Makefile

1. 环境准备

首先是 rpmbuild 的相关依赖,无论是什么语言写的程序,只要是打包成 rpm 包,就都需要这些

复制代码
1
2
yum install -y gcc make rpm-build redhat-rpm-config

rpmbuild 的使用,需要你写不少的配置,非常繁琐,有研究过的人自然知道其中的泪。

但大多数情况下,一个简单的 rpm 包可能就只是执行一个二进制文件而已,完全没有去花费大量的时间去系统学习它们。

于是乎,有人就编写了一个开源工具 go-bin-rpm,用它可以很方便的将二进制文件打包成 rpm 包。

go-bin-rpm 的作者提供了多种安装方式

个人认为比较方便的是下面这条命令

复制代码
1
2
3
wget -O - https://raw.githubusercontent.com/mh-cbon/latest/master/bintray.sh | GH=mh-cbon/go-bin-rpm sh -xe

执行完成后,可以使用 --version 命令查看是否安装成功

复制代码
1
2
3
$ go-bin-rpm --version go-bin-rpm version 1.0.0

2. 配置文件

go-bin-rpm 的配置文件是 rpm.json ,当然你也可以用其他文件名,我这里直接使用默认的,这样后面打包时就不用指定配置文件的名字。

rpm.json 的内容相当精简,且直观易懂,模板如下

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{ "name": "you-service-name", # rpm 包名称 "version": "0.0.1", "release": "20221110", "arch": "x86_64", "summary": "", "description": "", "license": "iswbm.com", "url": "https://gtihub.com/iswbm/!name!", # !name! 相当于变量,会取前面 rpm 包名称 "files": [ { "from": "./bin/!name!", "to": "/usr/local/!name!/", "base": "", "type": "" }, { "from": "./!name!.service", "to": "/usr/lib/systemd/system/", "base": "", "type": "" } ] }

如果你的 rpm 安装后是以 service 运行的,那 files 要包含如下几项内容:

  • 二进制文件
  • service 文件
  • 配置文件(如果需要的话)

其中 service 文件的模板,这边也给出来

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit] Description= After=syslog.target network.target [Service] Environment=key=value Type=simple NotifyAccess=all TimeoutStartSec=0 Restart=always User=root ExecStart=/usr/local/xxxx/bin/xxxx [Install] WantedBy=multi-user.target

一切准备好了,就可以使用如下命令

复制代码
1
2
3
# VERSION 和 RELEASE 请对应替换 go-bin-rpm generate -o rpms/xxxx-$(VERSION)-$(RELEASE).rpm

如果在不同的平台或系统有不同的二进制,则可以准备多个 rpm.json,然后在打包时,使用 -f rpm.json 来指定配置文件。

3. 使用 Makefile

go-bin-rpm 的命令还是比较长,我习惯写一个 Makefile 来方便编译

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
VERSION = 1.0.0 RELEASE = $(shell date +"%Y%m%d") .PHONY: build-go build-go: go build -o ./bin/hello . .PHONY: build build: build-go sed -i "s/VERSION/$(VERSION)/g" rpm.json sed -i "s/RELEASE/$(RELEASE)/g" rpm.json mkdir -p rpms go-bin-rpm generate -o rpms/hellp-$(VERSION)-$(RELEASE).rpm

后面只要使用 make build 就可以直接一步实现 编译 + 打包 ,使用上更加顺手。

最后

以上就是自信高山最近收集整理的关于Go 程序打成 rpm 包1. 环境准备2. 配置文件3. 使用 Makefile的全部内容,更多相关Go内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部