ubuntu linux/arm64 image contains linux/arm binary
Summary
Trying to run the docker image on an AWS T4g instance fails because the binary is 32bit
Steps to reproduce
[root@git-runner-01 ~]# docker run -it --rm gitlab/gitlab-runner:bleeding
/entrypoint: line 22: /usr/bin/gitlab-runner: cannot execute binary file: Exec format error
/entrypoint: line 22: /usr/bin/gitlab-runner: Success
Environment description
It's an AWS Graviton2 T4g instance
[root@git-runner-01 ~]# uname -rmo
4.18.0-193.6.3.el8_2.aarch64 aarch64 GNU/Linux
[root@git-runner-01 ~]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46
Built: Wed Sep 16 17:03:06 2020
OS/Arch: linux/arm64
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46
Built: Wed Sep 16 17:01:46 2020
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
Compared to golang:latest image which includes the proper 64bit binary
[root@git-runner-01 ~]# docker run -it --rm golang:latest go version
go version go1.15.2 linux/arm64
[root@git-runner-01 ~]# file /opt/local/docker/overlay2/c3ee533f2efc96c947d776de8c497ddc42d20dd3439f0687093c8bb50b5440ad/diff/usr/local/go/bin/go
/opt/local/docker/overlay2/c3ee533f2efc96c947d776de8c497ddc42d20dd3439f0687093c8bb50b5440ad/diff/usr/local/go/bin/go: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, not stripped
Used GitLab Runner version
Tried the bleeding docker image
[root@git-runner-01 ~]# docker manifest inspect gitlab/gitlab-runner:bleeding
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1996,
"digest": "sha256:4dd89a3c45411f8769586f44d4c3052422acb12fac735ab46fad0e6e05f86b03",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1996,
"digest": "sha256:77d10491331a6bd738fbea76eb0731766c475ad86c081cd47088e1af71beca32",
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1996,
"digest": "sha256:ec7711219d0abdd9477eaa47ff75c158a8767a5d2c26a6b6176fe88dc17e7eed",
"platform": {
"architecture": "s390x",
"os": "linux"
}
}
]
}
[root@git-runner-01 ~]# file /opt/local/docker/overlay2/d79c40da6dd513ebb560bd9964eeccc9244cc8cfecd7a3c62e46285419d9a389/diff/usr/bin/gitlab-runner
/opt/local/docker/overlay2/d79c40da6dd513ebb560bd9964eeccc9244cc8cfecd7a3c62e46285419d9a389/diff/usr/bin/gitlab-runner: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped
Possible fixes
Just use the same arm64 binary as exists on S3, which works just fine.
[root@git-runner-01 ~]# curl -s https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm64 -o gitlab-runner-linux-arm64
[root@git-runner-01 ~]# file gitlab-runner-linux-arm64
gitlab-runner-linux-arm64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, stripped
[root@git-runner-01 ~]# chmod 700 gitlab-runner-linux-arm64
[root@git-runner-01 ~]# ./gitlab-runner-linux-arm64 -version
Version: 13.3.1
Git revision: 738bbe5a
Git branch: 13-3-stable
GO version: go1.13.8
Built: 2020-08-25T12:29:06+0000
OS/Arch: linux/arm64
Do not label the arm32 as arm64:
[root@git-runner-01 ~]# curl -s https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-arm -o gitlab-runner-linux-arm
[root@git-runner-01 ~]# file gitlab-runner-linux-arm
gitlab-runner-linux-arm: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped
[root@git-runner-01 ~]# chmod 700 gitlab-runner-linux-arm
[root@git-runner-01 ~]# ./gitlab-runner-linux-arm -version
-bash: ./gitlab-runner-linux-arm: cannot execute binary file: Exec format error
Edited by Toomas Pelberg