# 1. 环境准备
首先是 rpmbuild 的相关依赖,无论是什么语言写的程序,只要是打包成 rpm 包,就都需要这些
yuminstall-ygccmakerpm-buildredhat-rpm-config
rpmbuild 的使用,需要你写不少的配置,非常繁琐,有研究过的人自然知道其中的泪。
但大多数情况下,一个简单的 rpm 包可能就只是执行一个二进制文件而已,完全没有去花费大量的时间去系统学习它们。
于是乎,有人就编写了一个开源工具 go-bin-rpm
,用它可以很方便的将二进制文件打包成 rpm 包。
go-bin-rpm
的作者提供了多种安装方式
个人认为比较方便的是下面这条命令
wget-O-https://raw.githubusercontent.com/mh-cbon/latest/master/bintray.sh
|GH=mh-cbon/go-bin-rpmsh-xe
执行完成后,可以使用 --version
命令查看是否安装成功
$go-bin-rpm--version
go-bin-rpmversion1.0.0
# 2. 配置文件
go-bin-rpm
的配置文件是 rpm.json
,当然你也可以用其他文件名,我这里直接使用默认的,这样后面打包时就不用指定配置文件的名字。
rpm.json
的内容相当精简,且直观易懂,模板如下
{
"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 文件的模板,这边也给出来
[Unit]
Description=
After=syslog.targetnetwork.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
一切准备好了,就可以使用如下命令
#VERSION和RELEASE请对应替换
go-bin-rpmgenerate-orpms/xxxx-$(VERSION)-$(RELEASE).rpm
如果在不同的平台或系统有不同的二进制,则可以准备多个 rpm.json
,然后在打包时,使用 -f rpm.json
来指定配置文件。
# 3. 使用 Makefile
go-bin-rpm 的命令还是比较长,我习惯写一个 Makefile 来方便编译
VERSION=1.0.0
RELEASE=$(shelldate+"%Y%m%d")
.PHONY:build-go
build-go:
gobuild-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-prpms
go-bin-rpmgenerate-orpms/hellp-$(VERSION)-$(RELEASE).rpm
后面只要使用 make build
就可以直接一步实现 编译
+ 打包
,使用上更加顺手。
-
Go
+关注
关注
0文章
43浏览量
12255 -
编译
+关注
关注
0文章
657浏览量
32872 -
RPM
+关注
关注
0文章
44浏览量
17715
原文标题:Go 程序打成 rpm 包,也太简单了
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论