X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2cfb41d14010e26d97df93c4cf8ad00f0ac01701..7822d4d431284d0912ba40d288da81a1eac68a3e:/cmd/arvados-package/install.go diff --git a/cmd/arvados-package/install.go b/cmd/arvados-package/install.go index 719258a9b8..38efae0461 100644 --- a/cmd/arvados-package/install.go +++ b/cmd/arvados-package/install.go @@ -6,7 +6,6 @@ package main import ( "context" - "errors" "fmt" "io" "io/ioutil" @@ -15,37 +14,18 @@ import ( "path/filepath" "strings" + "git.arvados.org/arvados.git/lib/crunchrun" "github.com/docker/docker/api/types" "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) + absPackageDir, err := filepath.Abs(opts.PackageDir) + if err != nil { + return fmt.Errorf("error resolving PackageDir %q: %w", opts.PackageDir, err) + } _, prog := filepath.Split(os.Args[0]) tmpdir, err := ioutil.TempDir("", prog+".") @@ -54,12 +34,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 { @@ -71,22 +45,31 @@ func testinstall(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr cmd := exec.CommandContext(ctx, "docker", "run", "--name", depsCtrName, "--tmpfs", "/tmp:exec,mode=01777", - "-v", opts.PackageDir+":/pkg:ro", - "-v", sourcesFile+":/etc/apt/sources.list.d/arvados-local.list:ro", + "-v", absPackageDir+":/pkg:ro", "--env", "DEBIAN_FRONTEND=noninteractive", opts.TargetOS, "bash", "-c", ` -set -e -apt-get update -apt-get install -y eatmydata +set -e -o pipefail +apt-get --allow-releaseinfo-change update +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 --allow-releaseinfo-change 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 err = cmd.Run() if err != nil { - return fmt.Errorf("docker run: %w", err) + return fmt.Errorf("%v: %w", cmd.Args, err) } cmd = exec.CommandContext(ctx, "docker", "commit", depsCtrName, depsImageName) @@ -94,37 +77,67 @@ eatmydata apt-get remove -y arvados-server-easy cmd.Stderr = stderr err = cmd.Run() if err != nil { - return fmt.Errorf("docker commit: %w", err) + return fmt.Errorf("%v: %w", cmd.Args, err) } } + 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", + "--tmpfs=/tmp:exec,mode=01777", + "--volume="+absPackageDir+":/pkg:ro", + "--env=DEBIAN_FRONTEND=noninteractive") + if opts.Live != "" { + cmd.Args = append(cmd.Args, + "--env=domain="+opts.Live, + "--env=initargs=-tls=/var/lib/acme/live/"+opts.Live, + "--env=bootargs=", + "--publish=:443:443", + "--publish=:4440-4460:4440-4460", + "--publish=:9000-9020:9000-9020", + "--add-host="+opts.Live+":0.0.0.0", + "--volume=/var/lib/acme:/var/lib/acme:ro") + } else { + cmd.Args = append(cmd.Args, + "--env=domain=localhost", + "--env=initargs=-tls=insecure", + "--env=bootargs=-shutdown") + } + cmd.Args = append(cmd.Args, 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 --allow-releaseinfo-change update +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 --allow-releaseinfo-change 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 +arvados-server init -cluster-id x1234 -domain=$domain -login=test -start=false $initargs +exec arvados-server boot -listen-host=0.0.0.0 $bootargs `) cmd.Stdout = stdout cmd.Stderr = stderr err = cmd.Run() if err != nil { - return fmt.Errorf("docker run: %w", err) + return fmt.Errorf("%v: %w", cmd.Args, err) } return nil } func dockerImageExists(ctx context.Context, name string) (bool, error) { - cli, err := client.NewEnvClient() + cli, err := client.NewClient(client.DefaultDockerHost, crunchrun.DockerAPIVersion, nil, nil) if err != nil { return false, err }