17344: Silence misleading warning during gem install.
[arvados.git] / cmd / arvados-package / fpm.go
index a862320360e94bc79e0c8faf2008e12ef3dd37c0..c337d8563ba53e8d3156bc47f9471132519ecae9 100644 (file)
@@ -5,6 +5,7 @@
 package main
 
 import (
+       "bytes"
        "context"
        "fmt"
        "io"
@@ -33,17 +34,28 @@ func fpm(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writ
                return fmt.Errorf("arvados-server install failed: exit code %d", exitcode)
        }
 
-       cmd := exec.Command("/var/lib/arvados/bin/gem", "install", "--user", "--no-document", "fpm")
+       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"))
+
+       cmd = exec.Command("/var/lib/arvados/bin/gem", "install", "--user", "--no-document", "fpm")
        cmd.Stdout = stdout
        cmd.Stderr = stderr
-       err := cmd.Run()
+       // Avoid "WARNING: You don't have [...] in your PATH, gem
+       // executables will not run"
+       cmd.Env = append(os.Environ(), "PATH="+os.Getenv("PATH")+":"+gempath)
+       err = cmd.Run()
        if err != nil {
                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 {
+       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()
@@ -55,21 +67,26 @@ func fpm(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writ
        // Remove unneeded files. This is much faster than "fpm
        // --exclude X" because fpm copies everything into a staging
        // area before looking at the --exclude args.
-       cmd = exec.Command("bash", "-c", "cd /var/www/.gem/ruby && rm -rf */cache */bundler/gems/*/.git */bundler/gems/arvados-*/[^s]* */bundler/gems/arvados-*/s[^d]* */bundler/gems/arvados-*/sdk/[^cr]* */gems/passenger-*/src/cxx* ruby/*/gems/*/ext /var/lib/arvados/go")
+       cmd = exec.Command("bash", "-c", "cd /var/www/.gem/ruby && rm -rf */cache */bundler/gems/*/.git */bundler/gems/arvados-*/[^s]* */bundler/gems/arvados-*/s[^d]* */bundler/gems/arvados-*/sdk/[^cr]* */gems/passenger-*/src/cxx* ruby/*/gems/*/ext /var/lib/arvados/go /var/lib/arvados/arvados-workbench2 /var/lib/arvados/node-*")
        cmd.Stdout = stdout
        cmd.Stderr = stderr
        err = cmd.Run()
        if err != nil {
-               return fmt.Errorf("rm -rf [...]: %w", err)
+               return fmt.Errorf("%v: %w", cmd.Args, err)
        }
 
        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,
+               "--url", "https://arvados.org",
+               "--maintainer", opts.Maintainer,
+               "--vendor", opts.Vendor,
+               "--license", "GNU Affero General Public License, version 3.0",
+               "--description", "platform for managing, processing, and sharing genomic and other large scientific and biomedical data",
                "--input-type", "dir",
                "--output-type", format)
        deps, err := install.ProductionDependencies()
@@ -83,6 +100,14 @@ func fpm(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writ
                "--verbose",
                "--deb-use-file-permissions",
                "--rpm-use-file-permissions",
+               "--deb-systemd", "/lib/systemd/system/arvados.service",
+               "--deb-systemd-enable",
+               "--no-deb-systemd-auto-start",
+               "--no-deb-systemd-restart-after-upgrade",
+               "/usr/bin/arvados-client",
+               "/usr/bin/arvados-server",
+               "/usr/bin/arv",
+               "/usr/bin/arv-tag",
                "/var/lib/arvados",
                "/var/www/.gem",
                "/var/www/.passenger",