首页 > 其他分享 >go打包成rpm

go打包成rpm

时间:2022-11-11 17:01:22浏览次数:42  
标签:bin name json VERSION go rpm 打包

# 1. 环境准备

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

yum install -y gcc make rpm-build redhat-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-rpm sh -xe

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

$ go-bin-rpm --version
go-bin-rpm version 1.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.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 请对应替换
go-bin-rpm generate -o rpms/xxxx-$(VERSION)-$(RELEASE).rpm

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

# 3. 使用 Makefile

go-bin-rpm 的命令还是比较长,我习惯写一个 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 就可以直接一步实现 编译 + 打包 ,使用上更加顺手。

标签:bin,name,json,VERSION,go,rpm,打包
From: https://www.cnblogs.com/cheyunhua/p/16881050.html

相关文章

  • Go_day05
    Go基础语法OOP面向对象Go语言本身不是面向对象的语言,但是可以通过一些方法来模拟对象面向对象的思维就是分类思维继承//定义一个父类结构体typePersonstruct{......
  • Gogs
    Gogs是一款极易搭建的自助Git服务。项目愿景Gogs(/gɑgz/)项目旨在打造一个以最简便的方式搭建简单、稳定和可扩展的自助Git服务。使用Go语言开发使得Gogs能够通......
  • 《Go 语言并发之道》读书笔记(一)
    已经把《Go语言并发之道》通读了一遍,非常不错的一本书,对于理解掌握Go语言的并发知识有很大的帮助,接下来我会把书中有用的知识通过代码示例出来,把一些比较好的知识点记录下......
  • OS rpm包下载地址
    在做操作系统适配的时候提示缺对应的rpm包银河麒麟OSrpm包下载地址https://update.cs2c.com.cn/NS/V10/V10SP1.1/os/adv/lic/base/aarch64/Packages/ openeuler的rpm......
  • mongoDB大数据查询遇到的问题
    有一个30亿量级数据的库,如何全量爬取并分析?因为量级过大无法一次性爬取至本地再分析,考虑使用limit().skip()混合的方法,一次读取1万条数据进行分析存储,30亿数据分成30万份后......
  • 聊聊Go语言中的数组与切片
    1.数组数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,因此在Go语言中很少直接使用数组。和数组对应的类型是......
  • Django的简单使用
    Django基础简介基础简介1.软件框架一个公司是由公司中的各部部门来组成的,每一个部门拥有特定的职能,部门与部门之间通过相互的配合来完成让公司运转起来。一个软件框......
  • 【MongoDB】复制集 相关 (bully算法)
    复制集技术相比较传统的Master-Slave模式好处在于多了容错机制。所以MongoDB的复制集技术主要为用户解决了两大问题:第一就是primary节点挂了,其余的secondary节点会自动选举......
  • 【Go】协程
    今天主要学习了一下go语言的多线程,也写了一些例子,最开始还是很困惑。比如下面这个例子:packagemainimport"fmt"funcloop(){fori:=0;i<10;i++{fmt.Printf("......
  • Django APIView
    defget(self,request):print("================用户行为列表")dictionary_key=self.request.query_params.get('data_point_app_id')print('---------445-......