From f75d4ff4ab70eab63d48229bcb7e226086a88909 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Sun, 19 Nov 2023 08:58:35 -0800 Subject: [PATCH] docker: allow specifying version and channel to install (#892) --- environment/vm/lima/deb/docker.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/environment/vm/lima/deb/docker.go b/environment/vm/lima/deb/docker.go index 8b784852c..349e3158f 100644 --- a/environment/vm/lima/deb/docker.go +++ b/environment/vm/lima/deb/docker.go @@ -2,6 +2,7 @@ package deb import ( "fmt" + "os" "strings" "github.com/abiosoft/colima/environment" @@ -30,8 +31,12 @@ func (d *Docker) PreInstall() error { // Install implements URISource. func (d *Docker) Install() error { + args := []string{"--channel", dockerChannel()} + if v := os.Getenv("DOCKER_INSTALL_VERSION"); v != "" { + args = append(args, "--version", v) + } return d.Guest.Run("sh", "-c", - `curl -fsSL https://get.docker.com -o /tmp/get-docker.sh && sudo sh /tmp/get-docker.sh`, + `curl -fsSL https://get.docker.com -o /tmp/get-docker.sh && sudo sh /tmp/get-docker.sh `+strings.Join(args, " "), ) } @@ -63,7 +68,7 @@ func (d *Docker) URIs(arch environment.Arch) ([]string, error) { } func (d Docker) pkgFiles(arch environment.Arch) ([]string, error) { - script := fmt.Sprintf(`curl -sL https://download.docker.com/linux/ubuntu/dists/mantic/stable/binary-%s/Packages | grep '^Filename: ' | awk -F'/' '{print $NF}'`, arch.Value().GoArch()) + script := fmt.Sprintf(`curl -sL https://download.docker.com/linux/ubuntu/dists/mantic/%s/binary-%s/Packages | grep '^Filename: ' | awk -F'/' '{print $NF}'`, dockerChannel(), arch.Value().GoArch()) filenames, err := d.Host.RunOutput("sh", "-c", script) if err != nil { return nil, fmt.Errorf("error retrieving deb package filenames: %w", err) @@ -75,3 +80,10 @@ func (d Docker) pkgFiles(arch environment.Arch) ([]string, error) { func (d Docker) debPackageBaseURI(arch environment.Arch) string { return fmt.Sprintf("https://download.docker.com/linux/ubuntu/dists/mantic/pool/stable/%s/", arch.GoArch()) } + +func dockerChannel() string { + if v := os.Getenv("DOCKER_INSTALL_CHANNEL"); v != "" { + return v + } + return "stable" +}