X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/dd3fd89528fa5c21001bbec9048f1d2710d80689..HEAD:/lib/install/deps.go diff --git a/lib/install/deps.go b/lib/install/deps.go index 439289b588..9c5eeaccfd 100644 --- a/lib/install/deps.go +++ b/lib/install/deps.go @@ -31,16 +31,16 @@ import ( var Command cmd.Handler = &installCommand{} -const goversion = "1.20.6" +const goversion = "1.21.10" const ( defaultRubyVersion = "3.2.2" - defaultBundlerVersion = "2.2.19" + defaultBundlerVersion = "~> 2.4.0" defaultSingularityVersion = "3.10.4" pjsversion = "1.9.8" geckoversion = "0.24.0" gradleversion = "5.3.1" - defaultNodejsVersion = "12.22.12" + defaultNodejsVersion = "14.21.3" devtestDatabasePassword = "insecure_arvados_test" ) @@ -123,7 +123,7 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read fmt.Fprintf(stderr, "invalid argument %q for -ruby-version\n", inst.RubyVersion) return 2 } - if ok, _ := regexp.MatchString(`^\d`, inst.BundlerVersion); !ok { + if ok, _ := regexp.MatchString(`^ *(|~>|[<>!=]=) *\d`, inst.BundlerVersion); !ok { fmt.Fprintf(stderr, "invalid argument %q for -bundler-version\n", inst.BundlerVersion) return 2 } @@ -235,6 +235,10 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read } else { pkgs = append(pkgs, "firefox") } + if osv.Debian && osv.Major >= 11 { + // not available in Debian <11 + pkgs = append(pkgs, "s3cmd") + } } if dev || test { pkgs = append(pkgs, @@ -249,7 +253,7 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read pkgs = append(pkgs, "g++", "libcurl4", "libcurl4-openssl-dev") case osv.Debian || osv.Ubuntu: pkgs = append(pkgs, "g++", "libcurl3", "libcurl3-openssl-dev") - case osv.Centos: + case osv.RedHat: pkgs = append(pkgs, "gcc", "gcc-c++", "libcurl-devel", "postgresql-devel") } cmd := exec.CommandContext(ctx, "apt-get") @@ -273,8 +277,6 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read } else if osv.Debian { var codename string switch osv.Major { - case 10: - codename = "buster" case 11: codename = "bullseye" case 12: @@ -286,7 +288,7 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read 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' | \ +echo 'deb [arch=`+runtime.GOARCH+` 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 @@ -349,7 +351,7 @@ make install if [[ "$rubyversion" > "3" ]]; then /var/lib/arvados/bin/gem update --no-document --system 3.4.21 fi -/var/lib/arvados/bin/gem install bundler --no-document +/var/lib/arvados/bin/gem install --conservative --no-document --version '`+inst.BundlerVersion+`' bundler `, stdout, stderr) if err != nil { return 1 @@ -363,7 +365,7 @@ fi err = inst.runBash(` cd /tmp rm -rf /var/lib/arvados/go/ -wget --progress=dot:giga -O- https://storage.googleapis.com/golang/go`+goversion+`.linux-amd64.tar.gz | tar -C /var/lib/arvados -xzf - +wget --progress=dot:giga -O- https://storage.googleapis.com/golang/go`+goversion+`.linux-`+runtime.GOARCH+`.tar.gz | tar -C /var/lib/arvados -xzf - ln -sfv /var/lib/arvados/go/bin/* /usr/local/bin/ `, stdout, stderr) if err != nil { @@ -539,15 +541,23 @@ setcap "cap_sys_admin+pei cap_sys_chroot+pei" /var/lib/arvados/bin/nsenter } } + var njsArch string + switch runtime.GOARCH { + case "amd64": + njsArch = "x64" + default: + njsArch = runtime.GOARCH + } + if !prod { if havenodejsversion, err := exec.Command("/usr/local/bin/node", "--version").CombinedOutput(); err == nil && string(havenodejsversion) == "v"+inst.NodejsVersion+"\n" { logger.Print("nodejs " + inst.NodejsVersion + " already installed") } else { err = inst.runBash(` NJS=v`+inst.NodejsVersion+` -rm -rf /var/lib/arvados/node-*-linux-x64 -wget --progress=dot:giga -O- https://nodejs.org/dist/${NJS}/node-${NJS}-linux-x64.tar.xz | sudo tar -C /var/lib/arvados -xJf - -ln -sfv /var/lib/arvados/node-${NJS}-linux-x64/bin/{node,npm} /usr/local/bin/ +rm -rf /var/lib/arvados/node-*-linux-`+njsArch+` +wget --progress=dot:giga -O- https://nodejs.org/dist/${NJS}/node-${NJS}-linux-`+njsArch+`.tar.xz | sudo tar -C /var/lib/arvados -xJf - +ln -sfv /var/lib/arvados/node-${NJS}-linux-`+njsArch+`/bin/{node,npm} /usr/local/bin/ `, stdout, stderr) if err != nil { return 1 @@ -559,7 +569,7 @@ ln -sfv /var/lib/arvados/node-${NJS}-linux-x64/bin/{node,npm} /usr/local/bin/ } else { err = inst.runBash(` npm install -g yarn -ln -sfv /var/lib/arvados/node-v`+inst.NodejsVersion+`-linux-x64/bin/{yarn,yarnpkg} /usr/local/bin/ +ln -sfv /var/lib/arvados/node-v`+inst.NodejsVersion+`-linux-`+njsArch+`/bin/{yarn,yarnpkg} /usr/local/bin/ `, stdout, stderr) if err != nil { return 1 @@ -793,7 +803,7 @@ rsync -a --delete-after "$tmp/build/" "$dst/" type osversion struct { Debian bool Ubuntu bool - Centos bool + RedHat bool Major int } @@ -831,10 +841,24 @@ func identifyOS() (osversion, error) { osv.Ubuntu = true case "debian": osv.Debian = true - case "centos": - osv.Centos = true default: - return osv, fmt.Errorf("unsupported ID in /etc/os-release: %q", kv["ID"]) + idLikeMatched := false + for _, idLike := range strings.Split(kv["ID_LIKE"], " ") { + switch idLike { + case "debian": + osv.Debian = true + idLikeMatched = true + case "rhel": + osv.RedHat = true + idLikeMatched = true + } + if idLikeMatched { + break + } + } + if !idLikeMatched { + return osv, fmt.Errorf("no supported ID found in /etc/os-release") + } } vstr := kv["VERSION_ID"] if i := strings.Index(vstr, "."); i > 0 { @@ -877,7 +901,6 @@ func prodpkgs(osv osversion) []string { "curl", "fuse", "git", - "gitolite3", "graphviz", "haveged", "libcurl3-gnutls", @@ -895,7 +918,7 @@ func prodpkgs(osv osversion) []string { return append(pkgs, "mime-support", // keep-web ) - } else if osv.Centos { + } else if osv.RedHat { return append(pkgs, "fuse-libs", // services/fuse "mailcap", // keep-web