Go 程序打成 rpm 包,也太簡單了
# 1. 環(huán)境準備
首先是 rpmbuild 的相關(guān)依賴,無論是什么語言寫的程序,只要是打包成 rpm 包,就都需要這些
yum?install?-y?gcc?make?rpm-build?redhat-rpm-config
rpmbuild 的使用,需要你寫不少的配置,非常繁瑣,有研究過的人自然知道其中的淚。
但大多數(shù)情況下,一個簡單的 rpm 包可能就只是執(zhí)行一個二進制文件而已,完全沒有去花費大量的時間去系統(tǒng)學(xué)習(xí)它們。
于是乎,有人就編寫了一個開源工具 go-bin-rpm,用它可以很方便的將二進制文件打包成 rpm 包。
go-bin-rpm 的作者提供了多種安裝方式
個人認為比較方便的是下面這條命令
wget?-O?-?https://raw.githubusercontent.com/mh-cbon/latest/master/bintray.sh?\
|?GH=mh-cbon/go-bin-rpm?sh?-xe
執(zhí)行完成后,可以使用 --version 命令查看是否安裝成功
$?go-bin-rpm?--version
go-bin-rpm?version?1.0.0
# 2. 配置文件
go-bin-rpm 的配置文件是 rpm.json ,當(dāng)然你也可以用其他文件名,我這里直接使用默認的,這樣后面打包時就不用指定配置文件的名字。
rpm.json 的內(nèi)容相當(dāng)精簡,且直觀易懂,模板如下
{
??"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!?相當(dāng)于變量,會取前面?rpm?包名稱
??"files":?[
????{
??????"from":?"./bin/!name!",
??????"to":?"/usr/local/!name!/",
??????"base":?"",
??????"type":?""
????},
????{
??????"from":?"./!name!.service",
??????"to":?"/usr/lib/systemd/system/",
??????"base":?"",
??????"type":?""
????}
??]
}
如果你的 rpm 安裝后是以 service 運行的,那 files 要包含如下幾項內(nèi)容:
-
二進制文件
-
service 文件
-
配置文件(如果需要的話)
其中 service 文件的模板,這邊也給出來
[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
一切準備好了,就可以使用如下命令
#?VERSION?和?RELEASE?請對應(yīng)替換
go-bin-rpm?generate?-o?rpms/xxxx-$(VERSION)-$(RELEASE).rpm
如果在不同的平臺或系統(tǒng)有不同的二進制,則可以準備多個 rpm.json,然后在打包時,使用 -f rpm.json 來指定配置文件。
# 3. 使用 Makefile
go-bin-rpm 的命令還是比較長,我習(xí)慣寫一個 Makefile 來方便編譯
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 就可以直接一步實現(xiàn) 編譯 + 打包 ,使用上更加順手。
推薦閱讀
我為大家整理了一份 從入門到進階的Go學(xué)習(xí)資料禮包 ,包含學(xué)習(xí)建議:入門看什么,進階看什么。 關(guān)注公眾號 「polarisxu」,回復(fù)? ebook ?獲??;還可以回復(fù)「進群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。
