CLI to get binaries from a docker image with multi arch support

have a look at the README.md to see how it works.

Bootstrap a CLI program to copy binaries from multi arch images

Signed-off-by: Gianluca Arbezzano <gianarb92@gmail.com>
This commit is contained in:
Gianluca Arbezzano
2020-11-16 17:42:54 +01:00
parent 4790ba4871
commit 45f593449a
8 changed files with 487 additions and 447 deletions

View File

@@ -16,3 +16,44 @@ that will may change a bit how Tinkerbell works.
We are keeping the number of bc break as low as possible but in the current
state they are expected.
## Binary release
As part of a new release for sandbox we want to push binaries to GitHub Release
in this way the community will be able to use them if needed.
We build Docker images across many architectures, each of them in its own
repository: boots, hegel, tink and so on.
Sandbox is just a collection of those services and we follow the same pattern
for getting binaries as well.
There is a go program available in `./cmd/getbinariesfromquay/main.go`. You can
run it with `go run` or build it with `go build`:
```terminal
$ go run cmd/getbinariesfromquay/main.go -h
-binary-to-copy string
The location of the binary you want to copy from inside the image. (default "/usr/bin/hegel")
-image string
The image you want to download binaries from. It has to be a multi stage image. (default "docker://quay.io/tinkerbell/hegel")
-out string
The directory that will be used to store the release binaries (default "./out")
-program string
The name of the program you are extracing binaries for. (eg tink-worker, hegel, tink-server, tink, boots) (default "hegel")
```
By default it uses the image running on Quay for Hegel and it gets the binary
`/usr/bin/hegel` from there. The directory `./out` is used to store images and
binaries inside `./out/releases`.
To get the binaries for example for boots you can run:
```terminal
$ go run cmd/getbinariesfromquay/main.go \
-binary-to-copy /usr/bin/boots \
-image docker://quay.io/tinkerbell/boots:sha-9625559b \
-program boots
```
You will find them in `./out/release`