16306: Update to Ruby 2.7.2.
authorTom Clegg <tom@curii.com>
Mon, 1 Feb 2021 15:02:12 +0000 (10:02 -0500)
committerTom Clegg <tom@curii.com>
Mon, 1 Feb 2021 15:02:12 +0000 (10:02 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

cmd/arvados-package/fpm.go
lib/boot/supervisor.go
lib/install/deps.go

index a862320360e94bc79e0c8faf2008e12ef3dd37c0..c143e46efe95d6d4b887fd85b3548323e7379c07 100644 (file)
@@ -5,6 +5,7 @@
 package main
 
 import (
+       "bytes"
        "context"
        "fmt"
        "io"
@@ -41,9 +42,17 @@ func fpm(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writ
                return fmt.Errorf("gem install fpm: %w", err)
        }
 
-       if _, err := os.Stat("/root/.gem/ruby/2.5.0/gems/fpm-1.11.0/lib/fpm/package/deb.rb"); err == nil {
+       cmd = exec.Command("/var/lib/arvados/bin/gem", "env", "gempath")
+       cmd.Stderr = stderr
+       buf, err := cmd.Output() // /root/.gem/ruby/2.7.0:...
+       if err != nil || len(buf) == 0 {
+               return fmt.Errorf("gem env gempath: %w", err)
+       }
+       gempath := string(bytes.TrimRight(bytes.Split(buf, []byte{':'})[0], "\n"))
+
+       if _, err := os.Stat(gempath + "/gems/fpm-1.11.0/lib/fpm/package/deb.rb"); err == nil {
                // Workaround for fpm bug https://github.com/jordansissel/fpm/issues/1739
-               cmd = exec.Command("sed", "-i", `/require "digest"/a require "zlib"`, "/root/.gem/ruby/2.5.0/gems/fpm-1.11.0/lib/fpm/package/deb.rb")
+               cmd = exec.Command("sed", "-i", `/require "digest"/a require "zlib"`, gempath+"/gems/fpm-1.11.0/lib/fpm/package/deb.rb")
                cmd.Stdout = stdout
                cmd.Stderr = stderr
                err = cmd.Run()
@@ -66,7 +75,7 @@ func fpm(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writ
        format := "deb" // TODO: rpm
        pkgfile := filepath.Join(opts.PackageDir, "arvados-server-easy_"+opts.PackageVersion+"_amd64."+format)
 
-       cmd = exec.Command("/root/.gem/ruby/2.5.0/bin/fpm",
+       cmd = exec.Command(gempath+"/bin/fpm",
                "--package", pkgfile,
                "--name", "arvados-server-easy",
                "--version", opts.PackageVersion,
index c75e7f146e3ce2b2734575804aa25c477839efdc..77504deb057f05a39d572679f3d0f55d5a926dff 100644 (file)
@@ -443,7 +443,7 @@ func (super *Supervisor) setupRubyEnv() error {
                cmd.Env = super.environ
                buf, err := cmd.Output() // /var/lib/arvados/.gem/ruby/2.5.0/bin:...
                if err != nil || len(buf) == 0 {
-                       return fmt.Errorf("gem env gempath: %v", err)
+                       return fmt.Errorf("gem env gempath: %w", err)
                }
                gempath := string(bytes.Split(buf, []byte{':'})[0])
                super.prependEnv("PATH", gempath+"/bin:")
index 504cdff8f2e4ab24f834761cb7b9558643f6914b..bb9949de7c23e2380be5d010fa4c258e9cf2806a 100644 (file)
@@ -218,21 +218,20 @@ func (inst *installCommand) RunCommand(prog string, args []string, stdin io.Read
                        return 1
                }
        }
-       rubyversion := "2.5.7"
+       rubyversion := "2.7.2"
+       rubymajorversion := rubyversion[:strings.LastIndex(rubyversion, ".")]
        if haverubyversion, err := exec.Command("/var/lib/arvados/bin/ruby", "-v").CombinedOutput(); err == nil && bytes.HasPrefix(haverubyversion, []byte("ruby "+rubyversion)) {
                logger.Print("ruby " + rubyversion + " already installed")
        } else {
                err = inst.runBash(`
 tmp="$(mktemp -d)"
 trap 'rm -r "${tmp}"' ERR EXIT
-wget --progress=dot:giga -O- https://cache.ruby-lang.org/pub/ruby/2.5/ruby-`+rubyversion+`.tar.gz | tar -C "${tmp}" -xzf -
+wget --progress=dot:giga -O- https://cache.ruby-lang.org/pub/ruby/`+rubymajorversion+`/ruby-`+rubyversion+`.tar.gz | tar -C "${tmp}" -xzf -
 cd "${tmp}/ruby-`+rubyversion+`"
 ./configure --disable-install-static-library --enable-shared --disable-install-doc --prefix /var/lib/arvados
 make -j8
 make install
-/var/lib/arvados/bin/gem install bundler --no-ri --no-rdoc
-# "gem update --system" can be removed when we use ruby ≥2.6.3: https://bundler.io/blog/2019/05/14/solutions-for-cant-find-gem-bundler-with-executable-bundle.html
-/var/lib/arvados/bin/gem update --system --no-ri --no-rdoc
+/var/lib/arvados/bin/gem install bundler --no-document
 `, stdout, stderr)
                if err != nil {
                        return 1