17776: Merge branch 'master' into 17776-more-throttling
[arvados.git] / cmd / arvados-package / install.go
index 719258a9b89ad0831fb0df4c5f89beb6cf282058..85c64b867e2b7abfd69af14f78aad431ca61e185 100644 (file)
@@ -6,7 +6,6 @@ package main
 
 import (
        "context"
-       "errors"
        "fmt"
        "io"
        "io/ioutil"
@@ -19,31 +18,7 @@ import (
        "github.com/docker/docker/client"
 )
 
-// sourcesfile=/tmp/sources.conf.d-arvados
-// echo >$sourcesfile "deb [trusted=yes] file:///pkg ./"
-
-// installimage="arvados-installpackage-${osbase}"
-// if [[ "${opts[force-installimage]}" || -z "$(docker images --format {{.Repository}} "${installimage}")" ]]; then
-//     echo >&2 building ${installimage}...
-//     installctr=${installimage/:/-}
-//     docker rm "${installctr}" || true
-//     docker run -it \
-//            --name "${installctr}" \
-//            --tmpfs /tmp \
-//            -v /tmp/pkg:/pkg:ro \
-//            -v ${sourcesfile}:/etc/apt/sources.list.d/arvados-local.list:ro \
-//            --env DEBIAN_FRONTEND=noninteractive \
-//            "${osbase}" \
-//            bash -c 'apt update && apt install -y eatmydata && eatmydata apt install -y arvados-server-easy postgresql && eatmydata apt remove -y arvados-server-easy'
-//     docker commit "${installctr}" "${installimage}"
-//     docker rm "${installctr}"
-//     installctr=
-// fi
-
 func testinstall(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writer) error {
-       if opts.PackageVersion != "" {
-               return errors.New("not implemented: package version was specified, but I only know how to test the latest version in pkgdir")
-       }
        depsImageName := "arvados-package-deps-" + opts.TargetOS
        depsCtrName := strings.Replace(depsImageName, ":", "-", -1)
 
@@ -54,12 +29,6 @@ func testinstall(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr
        }
        defer os.RemoveAll(tmpdir)
 
-       sourcesFile := tmpdir + "/arvados-local.list"
-       err = ioutil.WriteFile(sourcesFile, []byte("deb [trusted=yes] file:///pkg ./\n"), 0644)
-       if err != nil {
-               return fmt.Errorf("Write %s: %w", sourcesFile, err)
-       }
-
        if exists, err := dockerImageExists(ctx, depsImageName); err != nil {
                return err
        } else if !exists || opts.RebuildImage {
@@ -72,15 +41,24 @@ func testinstall(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr
                        "--name", depsCtrName,
                        "--tmpfs", "/tmp:exec,mode=01777",
                        "-v", opts.PackageDir+":/pkg:ro",
-                       "-v", sourcesFile+":/etc/apt/sources.list.d/arvados-local.list:ro",
                        "--env", "DEBIAN_FRONTEND=noninteractive",
                        opts.TargetOS,
                        "bash", "-c", `
-set -e
+set -e -o pipefail
 apt-get update
-apt-get install -y eatmydata
+apt-get install -y --no-install-recommends dpkg-dev eatmydata
+
+mkdir /tmp/pkg
+ln -s /pkg/*.deb /tmp/pkg/
+(cd /tmp/pkg; dpkg-scanpackages --multiversion . | gzip > Packages.gz)
+echo >/etc/apt/sources.list.d/arvados-local.list "deb [trusted=yes] file:///tmp/pkg ./"
+apt-get update
+
 eatmydata apt-get install -y --no-install-recommends arvados-server-easy postgresql
+eatmydata apt-get remove -y dpkg-dev
+SUDO_FORCE_REMOVE=yes apt-get autoremove -y
 eatmydata apt-get remove -y arvados-server-easy
+rm /etc/apt/sources.list.d/arvados-local.list
 `)
                cmd.Stdout = stdout
                cmd.Stderr = stderr
@@ -98,18 +76,31 @@ eatmydata apt-get remove -y arvados-server-easy
                }
        }
 
+       versionsuffix := ""
+       if opts.PackageVersion != "" {
+               versionsuffix = "=" + opts.PackageVersion
+       }
        cmd := exec.CommandContext(ctx, "docker", "run", "--rm",
                "--tmpfs", "/tmp:exec,mode=01777",
                "-v", opts.PackageDir+":/pkg:ro",
-               "-v", sourcesFile+":/etc/apt/sources.list.d/arvados-local.list:ro",
                "--env", "DEBIAN_FRONTEND=noninteractive",
                depsImageName,
                "bash", "-c", `
-set -e
+set -e -o pipefail
 PATH="/var/lib/arvados/bin:$PATH"
 apt-get update
-eatmydata apt-get install --reinstall -y --no-install-recommends arvados-server-easy
-apt-get -y autoremove
+apt-get install -y --no-install-recommends dpkg-dev
+mkdir /tmp/pkg
+ln -s /pkg/*.deb /tmp/pkg/
+(cd /tmp/pkg; dpkg-scanpackages --multiversion . | gzip > Packages.gz)
+apt-get remove -y dpkg-dev
+echo
+
+echo >/etc/apt/sources.list.d/arvados-local.list "deb [trusted=yes] file:///tmp/pkg ./"
+apt-get update
+eatmydata apt-get install --reinstall -y --no-install-recommends arvados-server-easy`+versionsuffix+`
+SUDO_FORCE_REMOVE=yes apt-get autoremove -y
+
 /etc/init.d/postgresql start
 arvados-server init -cluster-id x1234
 exec arvados-server boot -listen-host 0.0.0.0 -shutdown