X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/374072472b1480983051cab25221518e08f1e35a..857f9369b549d1d9dfef4d941a6aecbf747334f1:/lib/install/deps.go diff --git a/lib/install/deps.go b/lib/install/deps.go index ff00ee1e35..b4f110e3cd 100644 --- a/lib/install/deps.go +++ b/lib/install/deps.go @@ -28,7 +28,19 @@ import ( var Command cmd.Handler = &installCommand{} -const devtestDatabasePassword = "insecure_arvados_test" +const goversion = "1.17.7" + +const ( + rubyversion = "2.7.5" + bundlerversion = "2.2.19" + singularityversion = "3.9.9" + pjsversion = "1.9.8" + geckoversion = "0.24.0" + gradleversion = "5.3.1" + nodejsversion = "v12.22.11" + devtestDatabasePassword = "insecure_arvados_test" + workbench2version = "5e020488f67b5bc919796e0dc8b0b9f3b3ff23b0" +) type installCommand struct { ClusterType string @@ -57,17 +69,11 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read flags.StringVar(&inst.SourcePath, "source", "/arvados", "source tree location (required for -type=package)") flags.StringVar(&inst.PackageVersion, "package-version", "0.0.0", "version string to embed in executable files") flags.BoolVar(&inst.EatMyData, "eatmydata", false, "use eatmydata to speed up install") - err = flags.Parse(args) - if err == flag.ErrHelp { - err = nil - return 0 - } else if err != nil { - return 2 + + if ok, code := cmd.ParseFlags(flags, prog, args, "", stderr); !ok { + return code } else if *versionFlag { return cmd.Version.RunCommand(prog, args, stdin, stdout, stderr) - } else if len(flags.Args()) > 0 { - err = fmt.Errorf("unrecognized command line arguments: %v", flags.Args()) - return 2 } var dev, test, prod, pkg bool @@ -128,7 +134,6 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read pkgs = append(pkgs, "dpkg-dev", "eatmydata", // install it for later steps, even if we're not using it now - "rsync", ) } @@ -177,15 +182,15 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read "r-cran-markdown", "r-cran-roxygen2", "r-cran-xml", + "rsync", "sudo", "uuid-dev", "wget", "xvfb", ) if dev || test { - pkgs = append(pkgs, - "squashfs-tools", // for singularity - ) + pkgs = append(pkgs, "squashfs-tools") // for singularity + pkgs = append(pkgs, "gnupg") // for docker install recipe } switch { case osv.Debian && osv.Major >= 10: @@ -208,6 +213,37 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read } } + if dev || test { + if havedockerversion, err := exec.Command("docker", "--version").CombinedOutput(); err == nil { + logger.Printf("%s installed, assuming that version is ok", bytes.TrimSuffix(havedockerversion, []byte("\n"))) + } else if osv.Debian { + var codename string + switch osv.Major { + case 10: + codename = "buster" + case 11: + codename = "bullseye" + default: + err = fmt.Errorf("don't know how to install docker-ce for debian %d", osv.Major) + return 1 + } + err = inst.runBash(` +rm -f /usr/share/keyrings/docker-archive-keyring.gpg +curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian/ `+codename+` stable' | \ + tee /etc/apt/sources.list.d/docker.list +apt-get update +DEBIAN_FRONTEND=noninteractive apt-get --yes --no-install-recommends install docker-ce +`, stdout, stderr) + if err != nil { + return 1 + } + } else { + err = fmt.Errorf("don't know how to install docker for osversion %v", osv) + return 1 + } + } + os.Mkdir("/var/lib/arvados", 0755) os.Mkdir("/var/lib/arvados/tmp", 0700) if prod || pkg { @@ -245,7 +281,6 @@ make install } if !prod { - goversion := "1.17.1" if havegoversion, err := exec.Command("/usr/local/bin/go", "version").CombinedOutput(); err == nil && bytes.HasPrefix(havegoversion, []byte("go version go"+goversion+" ")) { logger.Print("go " + goversion + " already installed") } else { @@ -268,7 +303,7 @@ ln -sf /var/lib/arvados/go/bin/* /usr/local/bin/ } else { err = inst.runBash(` PJS=phantomjs-`+pjsversion+`-linux-x86_64 -wget --progress=dot:giga -O- https://bitbucket.org/ariya/phantomjs/downloads/$PJS.tar.bz2 | tar -C /var/lib/arvados -xjf - +wget --progress=dot:giga -O- https://cache.arvados.org/$PJS.tar.bz2 | tar -C /var/lib/arvados -xjf - ln -sf /var/lib/arvados/$PJS/bin/phantomjs /usr/local/bin/ `, stdout, stderr) if err != nil { @@ -343,6 +378,14 @@ make -C ./builddir install } } + err = inst.runBash(` +install /usr/bin/nsenter /var/lib/arvados/bin/nsenter +setcap "cap_sys_admin+pei cap_sys_chroot+pei" /var/lib/arvados/bin/nsenter +`, stdout, stderr) + if err != nil { + return 1 + } + // The entry in /etc/locale.gen is "en_US.UTF-8"; once // it's installed, locale -a reports it as // "en_US.utf8".