Merge branch '19454-cwl-output-json' refs #19454
[arvados.git] / lib / install / deps.go
index 483ce9c933a87814bc0ada4e6252a06d6d269f7e..b4f110e3cd1115ac82730cf76351ca2abd9b14a8 100644 (file)
@@ -28,8 +28,19 @@ import (
 
 var Command cmd.Handler = &installCommand{}
 
-const devtestDatabasePassword = "insecure_arvados_test"
-const goversion = "1.17.1"
+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
@@ -123,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",
                )
        }
 
@@ -172,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:
@@ -203,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 {
@@ -337,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".