自己编译gitlab-runner X86, arm64, mips64le等版本

自己编译gitlab-runner X86, arm64, mips64le等版本

总体说明

曾经下载过gitlab-runner源码,尝试在arm64、mips64le架构下进行编译,网上查了很多资料,都不可行,也没有找到现成可用的可执行文件,折腾了很久。最后发现go语言可以在某一个平台,编译出别的平台的可执行程序,于是转变思路,尝试在Ubuntu下编译各个平台的gitlab-runner,最终成功。下面进行介绍。

1. 安装操作系统

操作系统版本:Ubuntu 16.04

2. 安装go编译环境

下载链接:https://gomirrors.org/
下载版本:go1.15.2.linux-amd64.tar.gz,也可用尝试最新版本

解压:

sudo tar -C /usr/local -xzf go1.15.2.linux-amd64.tar.gz

创建home目录创建工作文件夹,命令示范如下:

cd /home
sudo mkdir gopath
sudo chmod 777 -R gopath
cd gopath
mkdir src
mkdir pkg
mkdir bin
sudo chmod 777 -R *

配置环境变量:

sudo gedit ~/.bashrc

文件最后添加:

export PATH=$PATH:/usr/local/go/bin
export GOPATH=/home/gopath

更新:

source ~/.bashr

检查一下是否正常:

go version

显示结果:

go version go1.15.2 linux/amd64

3. 编译gitlab-runner

下载代码https://gitlab.com/gitlab-org/gitlab-runner/
下载版本:master最新版,大概是写此博客的时间。
放置目录:解压后一定要按此目录放置,需要将压缩包内的文件夹改名,下面是大致的目录结构。

/home/gopath/src/gitlab.com/gitlab-org/gitlab-runner
/home/gopath/src/gitlab.com/gitlab-org/gitlab-runner/main.go
/home/gopath/src/gitlab.com/gitlab-org/gitlab-runner//

编译X86版本:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go install gitlab.com/gitlab-org/gitlab-runner/

编译arm64版本:

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go install gitlab.com/gitlab-org/gitlab-runner/

编译mips64le版本:

CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go install gitlab.com/gitlab-org/gitlab-runner/

特别说明
上述编译的所有文件都会生成到如下目录:

/home/gopath/bin

编译mips64le版本时会报错:

gitlab.com/gitlab-org/gitlab-runner/vendor/github.com/docker/docker/pkg/system
gitlab.com/gitlab-org/gitlab-runner/vendor/github.com/docker/docker/pkg/system/stat_linux.go:11:3: cannot use s.Rdev (type uint32) as type uint64 in field value

在报错文件的对应位置添加uint64()即可,不清楚这样添加是否有问题,反正可以运行。

文件位置:

/home/gopath/src/gitlab.com/gitlab-org/gitlab-runner/vendor/github.com/docker/docker/pkg/system/stat_linux.go

修改前:

// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
func fromStatT(s *syscall.Stat_t) (*StatT, error) {
return &StatT{size: s.Size,
mode: s.Mode,
uid: s.Uid,
gid: s.Gid,
rdev: s.Rdev,
mtim: s.Mtim}, nil
}

修改后:

// fromStatT converts a syscall.Stat_t type to a system.Stat_t type
func fromStatT(s *syscall.Stat_t) (*StatT, error) {
return &StatT{size: s.Size,
mode: s.Mode,
uid: s.Uid,
gid: s.Gid,
rdev: uint64(s.Rdev),
mtim: s.Mtim}, nil
}

4. PS:

可以用如下命令查看go支持的操作系统和架构,在编译的时候使用。
命令:

go tool dist list

显示结果:

aix/ppc64
android/386
android/amd64
android/arm
android/arm64
darwin/amd64
darwin/arm64
dragonfly/amd64
freebsd/386
freebsd/amd64
freebsd/arm
freebsd/arm64
illumos/amd64
js/wasm
linux/386
linux/amd64
linux/arm
linux/arm64
linux/mips
linux/mips64
linux/mips64le
linux/mipsle
linux/ppc64
linux/ppc64le
linux/riscv64
linux/s390x
netbsd/386
netbsd/amd64
netbsd/arm
netbsd/arm64
openbsd/386
openbsd/amd64
openbsd/arm
openbsd/arm64
plan9/386
plan9/amd64
plan9/arm
solaris/amd64
windows/386
windows/amd64
windows/arm

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值