0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Go程序打成rpm包,也太简单了

马哥Linux运维 来源:go语言中文网 2023-01-05 11:32 次阅读

# 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 要包含如下几项内容:

  1. 二进制文件

  2. service 文件

  3. 配置文件(如果需要的话)

其中 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
    Go
    +关注

    关注

    0

    文章

    43

    浏览量

    12241
  • 编译
    +关注

    关注

    0

    文章

    654

    浏览量

    32812
  • RPM
    RPM
    +关注

    关注

    0

    文章

    44

    浏览量

    17700

原文标题:Go 程序打成 rpm 包,也太简单了

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    在学习go语言的过程踩过的坑

    作为一个5年的phper,这两年公司和个人都在顺应技术趋势,新项目慢慢从php转向go语言,从2021年到现在,笔者手上先后开发了两个go项目。在学习
    的头像 发表于 11-11 09:22 114次阅读

    go语言如何解决并发问题

    GO快很多。现在工作中还是有一些老项目在使用PHP,但21年之后的新项目基本上就都是用GO。那为什么PHP那么香,还要转战使用GO呢,下
    的头像 发表于 10-23 13:38 113次阅读
    <b class='flag-5'>go</b>语言如何解决并发问题

    【米尔NXP i.MX 93开发板试用评测】4、使用golang搭建Modbus 服务器

    golang程序。我们可以在官网上下载aarch64,也就是arm64平台的压缩 使用以下的指令 wget https://golang.google.cn/dl
    发表于 09-21 22:51

    三十分钟入门基础Go Java小子版

    前言 Go语言定义 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态、强类型、编译型语言。Go 语言
    的头像 发表于 08-12 14:32 682次阅读
    三十分钟入门基础<b class='flag-5'>Go</b> Java小子版

    env工具生成的mdk工程 ,头文件路径怎么解决?

    使用env工具 生成的mdk工程 中的 头文件路径
    发表于 07-05 08:13

    简单的C程序设计

    电子发烧友网站提供《最简单的C程序设计.pptx》资料免费下载
    发表于 05-28 16:41 9次下载

    使用Docker部署Go Web应用程序步骤

    大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版和配置文件。而当一个项目中有很多文件的时候,由于很多文件没有同步就会导致错误的发生并且产生很多的问题。
    发表于 04-20 09:33 476次阅读
    使用Docker部署<b class='flag-5'>Go</b> Web应用<b class='flag-5'>程序</b>步骤

    Profile电机的时候转速显示NaN RPM是什么意思?

    Profile电机的时候转速显示NaN RPM,什么意思?
    发表于 04-12 07:28

    学习笔记|如何用Go程序采集温湿度传感器数据

    整个利用Go语言从AHT20温湿度传感器获取数据的完整步骤和实现方法。一、C程序获取AHT20温湿度1、参考ElfBoard官方例程:03-例程源码\03-1命令
    的头像 发表于 03-21 11:46 647次阅读
    学习笔记|如何用<b class='flag-5'>Go</b><b class='flag-5'>程序</b>采集温湿度传感器数据

    嵌入式学习-ElfBoard ELF 1开发板-共创官学习笔记分享|将Go程序编译到ELF 1开发板

    ElfBoard组建的共创社是嵌入式科技创新与学习实践的前沿阵地,我们有幸见证着每一位共创官积极投身于嵌入式技术的热潮中,用实际行动诠释着探索精神。今天就跟各位小伙伴分享一下共创官是怎样将Go程序
    发表于 02-21 10:22

    塑料单端通孔封装SOT8071-1程序包信息

    电子发烧友网站提供《塑料单端通孔封装SOT8071-1程序包信息.pdf》资料免费下载
    发表于 02-21 10:15 0次下载
    塑料单端通孔封装SOT8071-1<b class='flag-5'>程序包</b>信息

    MiniProg4在POWER_DRILL2GO周期后失去与PC的连接的原因?

    再次检索它。 发生这种情况时,编程器甚至没有显示在 CYPRESS™ 编程器中,并且插拔编程器也无济于事。 在我的 Python 代码中,我在 POWER_DRILL2GO 循环芯片之前关闭程序员的端口,尽管我认为这应该无关紧
    发表于 01-19 07:55

    红帽发布AI新工具:利用AI模型解析RPM构建失败原因

    对Linux操作系统有所了解的人应该清楚,RPM(Red Hat Package Manager)作为互联网下载的打包与安装工具,能产生.RPM后缀的文件。Red Hat用户可通过此工具如Windows用户安装exe文件一般自
    的头像 发表于 01-18 10:12 581次阅读

    路由器MTU是什么意思?路由器mtu最佳值

    MTU是Maximum Transmission Unit的缩写,意思是网络上传送的最大数据简单来说,网络上的数据在传输的时候会被打成一个一个的“”,网络设备的端口默认设置
    的头像 发表于 12-19 17:46 9774次阅读

    Go编程语言-你应该知道的一切

    Go 编程语言的故事始于 Google,当时三位工程师 Robert Griesemer、Rob Pike 和 Ken Thompson 对 C++ 的复杂性以及缺乏提供高效编译和执行的简单语言感到厌倦。
    的头像 发表于 12-11 17:37 620次阅读