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

    文章

    40

    浏览量

    12178
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32392
  • RPM
    RPM
    +关注

    关注

    0

    文章

    44

    浏览量

    17642

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    如何将Go程序编译到ELF 1开发板

    ElfBoard组建的共创社是嵌入式科技创新与学习实践的前沿阵地,我们有幸见证着每一位共创官积极投身于嵌入式技术的热潮中,用实际行动诠释着探索精神。今天就跟各位小伙伴分享一下共创官是怎样将Go程序
    的头像 发表于 01-29 10:42 208次阅读
    如何将<b class='flag-5'>Go</b><b class='flag-5'>程序</b>编译到ELF 1开发板

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

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

    NI Package Manager创建程序包

    NI Package Manager创建程序包 要使用PackageManager创建程序包,即把相关的组件都放在一个目录下,使用命令行创建程序包程序包是一个压缩文件,包含要安装
    发表于 11-19 20:11

    Go语言比Python强多少

    1.都说Go语言性能非常强大,那么到底比Python强多少? 为了比较Go语言和Python语言在单线程性能上的差距,我们可以做一个简单实验,从1亿减到1: Python代码(以下均分别提供图片和文
    的头像 发表于 11-02 14:05 281次阅读
    <b class='flag-5'>Go</b>语言比Python强多少

    如何让Python和Go互相调度

    我们曾经研究过如何让Python和Go互相调度,当时发现,将Go语言写的模块打包成动态链接库,就能在Python中进行调度: 优劣互补! Python+Go结合开发的探讨 Go的优势很
    的头像 发表于 11-02 11:24 247次阅读
    如何让Python和<b class='flag-5'>Go</b>互相调度

    Go在单线程计算性能上的优势

    ,将计算和保存的过程保存在本地的redis缓存中,然后使用Celery来调度这些任务。 问题在于,从这些网址中获取数据的步骤,写在Go Worker里是否合适?Go进行网络请求是否比Python更稳定、速度更快?今天我们就来简单
    的头像 发表于 11-02 11:16 217次阅读
    <b class='flag-5'>Go</b>在单线程计算性能上的优势

    基于小华HC32F460的10万RPM高速风筒方案

    基于小华HC32F460的10万RPM高速风筒方案
    的头像 发表于 10-27 09:28 575次阅读
    基于小华HC32F460的10万<b class='flag-5'>RPM</b>高速风筒方案

    OpenHarmony应用程序包整体说明

    用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。一个应用所对应的软件文件,称为“应用程序包”。 OpenHarmony提供
    发表于 09-20 15:34

    以太网驱动程序包——二进制RPM

    电子发烧友网站提供《以太网驱动程序包——二进制RPM.txt》资料免费下载
    发表于 08-09 14:32 0次下载
    以太网驱动<b class='flag-5'>程序</b>包——二进制<b class='flag-5'>RPM</b>

    Go 1.21的PGO正式GA,性能提升,更快更猛!

    Go 语言中,最初关于 PGO 的提案是建议向 Go GC 工具链增加对配置文件引导优化 (PGO) 的支持,以便工具链能根据运行时信息执行特定于应用程序和工作负载的优化。
    的头像 发表于 06-28 16:47 759次阅读
    <b class='flag-5'>Go</b> 1.21的PGO正式GA,性能提升,更快更猛!

    如何启动go-admin并优雅的添加api呢?

    go-admin 针对 api 项目的启动提供server指令,在程序启动时使用;
    的头像 发表于 06-02 17:36 894次阅读

    想要构建一个简单的wifi温度计,在哪里可以找到这样简单的工具和源代码?

    我们正计划构建一个简单的 wifi 温度计。内置热电偶。可充电电池。Android 应用程序以 F 和 C 显示温度。电池百分比。任何演示套件随时可用?请告诉我们在哪里可以找到这样简单的工具
    发表于 06-01 09:15