]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
dashboard: ensure nodeenv downloaded content is owned by current user
authorJohn Mulligan <jmulligan@redhat.com>
Fri, 2 May 2025 15:17:53 +0000 (11:17 -0400)
committerJohn Mulligan <phlogistonjohn@asynchrono.us>
Fri, 22 Aug 2025 15:09:14 +0000 (11:09 -0400)
When testing ceph builds in a container we discovered that certain files
could not be deleted by jenkins after a build. This was due to the way
the container maps IDs - files owned by the root user in the container
become owned by the "real" user/jenkins user on the "host".
However, the node tarball that is fetched and unpacked by nodeenv has
a different owner name/uid that is preserved in the tree and this id
gets mapped to something that can be managed by the "fake root" of the
container but not by the "regular" user outside the container.

The simplest workaround I can think of is to chown the tree back
to the current user and avoid leaving files on disk with uncleanly
mapped uids.

Conflicts:
src/pybind/mgr/dashboard/frontend/CMakeLists.txt

Signed-off-by: John Mulligan <jmulligan@redhat.com>
(cherry picked from commit 24dbfb5da4813c6588f9cd199b9f527bb67f1e88)

src/pybind/mgr/dashboard/frontend/CMakeLists.txt

index 2527ef23e85e5cd2d83e38ef475e23a96fd11431..4ec009712ffda40ffb5215fa6ff8b3cffd8792d7 100644 (file)
@@ -65,6 +65,11 @@ else(WITH_SYSTEM_NPM)
     COMMAND ${CMAKE_SOURCE_DIR}/src/tools/setup-virtualenv.sh --python=${MGR_PYTHON_EXECUTABLE} ${mgr-dashboard-nodeenv-dir}
     COMMAND ${mgr-dashboard-nodeenv-dir}/bin/pip install nodeenv
     COMMAND ${mgr-dashboard-nodeenv-dir}/bin/nodeenv --verbose ${node_mirror_opt} -p --node=18.17.0
+    # ensure that the files that nodeenv unpacks from tarballs are owned by
+    # the current user. This can be an issue due to the node tarball using
+    # uid 1000 and running the unpack in a id-mapped namespace (container)
+    # that lets tar set the uid to a "bad" uid outside the namespace
+    COMMAND bash -c "chown -R $$(id -u):$$(id -g) ${mgr-dashboard-nodeenv-dir}/src"
     COMMAND mkdir ${mgr-dashboard-nodeenv-dir}/.npm
     WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
     COMMENT "dashboard nodeenv is being installed")