17344: Add arv-mount and python tools to package.
authorTom Clegg <tom@curii.com>
Tue, 12 Jul 2022 14:25:28 +0000 (10:25 -0400)
committerTom Clegg <tom@curii.com>
Thu, 14 Jul 2022 13:21:41 +0000 (09:21 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

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

index c26cbe8875292fd64c7ae099afa2f24719b32c9d..465901fa43238afadbc80cc144f2d27cf3b01665 100644 (file)
@@ -110,6 +110,16 @@ func fpm(ctx context.Context, opts opts, stdin io.Reader, stdout, stderr io.Writ
                "/usr/bin/arv-ruby",
                "/usr/bin/arv-tag",
                "/var/lib/arvados",
+               "/usr/bin/arv-copy",
+               "/usr/bin/arv-federation-migrate",
+               "/usr/bin/arv-get",
+               "/usr/bin/arv-keepdocker",
+               "/usr/bin/arv-ls",
+               "/usr/bin/arv-migrate-docker19",
+               "/usr/bin/arv-normalize",
+               "/usr/bin/arv-put",
+               "/usr/bin/arv-ws",
+               "/usr/bin/arv-mount",
                "/var/www/.gem",
                "/var/www/.passenger",
                "/var/www/.bundle",
index a9fb874e2d7f95ae7f840132c0ba1687e0161711..a5c428d0a01f5c0bf8dba738737543c3164dc280 100644 (file)
@@ -586,6 +586,33 @@ yarn install
                        return 1
                }
 
+               // Install python SDK and arv-mount in
+               // /var/lib/arvados/lib/python.
+               //
+               // setup.py writes a file in the source directory in
+               // order to include the version number in the package
+               // itself.  We don't want to write to the source tree
+               // (in "arvados-package" context it's mounted
+               // readonly) so we run setup.py in a temporary copy of
+               // the source dir.
+               if err = inst.runBash(`
+v=/var/lib/arvados/lib/python
+tmp=/var/lib/arvados/tmp/python
+python3 -m venv "$v"
+. "$v/bin/activate"
+pip3 install --no-cache-dir 'setuptools>=18.5' 'pip>=7'
+export ARVADOS_BUILDING_VERSION="`+inst.PackageVersion+`"
+for src in "`+inst.SourcePath+`/sdk/python" "`+inst.SourcePath+`/services/fuse"; do
+  rsync -a --delete-after "$src/" "$tmp/"
+  cd "$tmp"
+  python3 setup.py install
+  cd ..
+  rm -rf "$tmp"
+done
+`, stdout, stderr); err != nil {
+                       return 1
+               }
+
                // Install Rails apps to /var/lib/arvados/{railsapi,workbench1}/
                for dstdir, srcdir := range map[string]string{
                        "railsapi":   "services/api",
@@ -693,22 +720,40 @@ rsync -a --delete-after build/ /var/lib/arvados/workbench2/
                        }
                }
 
-               // Symlink user-facing programs /usr/bin/x ->
-               // /var/lib/arvados/bin/x
+               // Add symlinks in /usr/bin for user-facing programs
                for _, srcdst := range [][]string{
-                       {"arvados-client", "arvados-client"},
-                       {"arvados-client", "arv"},
-                       {"arvados-server", "arvados-server"},
-                       {"arv", "arv-ruby"},
-                       {"arv-tag", "arv-tag"},
+                       // go
+                       {"bin/arvados-client"},
+                       {"bin/arvados-client", "arv"},
+                       {"bin/arvados-server"},
+                       // sdk/cli
+                       {"bin/arv", "arv-ruby"},
+                       {"bin/arv-tag"},
+                       // sdk/python
+                       {"lib/python/bin/arv-copy"},
+                       {"lib/python/bin/arv-federation-migrate"},
+                       {"lib/python/bin/arv-get"},
+                       {"lib/python/bin/arv-keepdocker"},
+                       {"lib/python/bin/arv-ls"},
+                       {"lib/python/bin/arv-migrate-docker19"},
+                       {"lib/python/bin/arv-normalize"},
+                       {"lib/python/bin/arv-put"},
+                       {"lib/python/bin/arv-ws"},
+                       // services/fuse
+                       {"lib/python/bin/arv-mount"},
                } {
-                       src := srcdst[0]
-                       dst := srcdst[1]
-                       err = os.Remove("/usr/bin/" + dst)
+                       src := "/var/lib/arvados/" + srcdst[0]
+                       if _, err = os.Stat(src); err != nil {
+                               return 1
+                       }
+                       dst := srcdst[len(srcdst)-1]
+                       _, dst = filepath.Split(dst)
+                       dst = "/usr/bin/" + dst
+                       err = os.Remove(dst)
                        if err != nil && !errors.Is(err, os.ErrNotExist) {
                                return 1
                        }
-                       err = os.Symlink("/var/lib/arvados/bin/"+src, "/usr/bin/"+dst)
+                       err = os.Symlink(src, dst)
                        if err != nil {
                                return 1
                        }