From aacc1595bf1033248be2f5b823452d8d2a2defd5 Mon Sep 17 00:00:00 2001
From: Simon McVittie <smcv@collabora.com>
Date: Tue, 18 Oct 2022 12:44:53 +0100
Subject: [PATCH] pv-runtime: Log more details about how we change the mutable
 sysroot

Helps: steamrt/tasks#187, steam-runtime-tools#97
Signed-off-by: Simon McVittie <smcv@collabora.com>
---
 pressure-vessel/runtime.c | 39 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 36 insertions(+), 3 deletions(-)

diff --git a/pressure-vessel/runtime.c b/pressure-vessel/runtime.c
index 3ea7b12ea..70832e2bb 100644
--- a/pressure-vessel/runtime.c
+++ b/pressure-vessel/runtime.c
@@ -309,6 +309,8 @@ pv_runtime_make_symlink_in_container (PvRuntime *self,
     dest = alloc_dest = g_build_filename (PV_RUNTIME_PATH_INTERPRETER_ROOT,
                                           path, NULL);
 
+  g_debug ("Creating symlink \"${container}/%s\" -> \"%s\"", dest, target);
+
   if (_srt_get_path_after (path, "usr") != NULL)
     {
       if (self->mutable_sysroot_fd >= 0)
@@ -3762,7 +3764,13 @@ pv_runtime_take_from_provider (PvRuntime *self,
       if (!_srt_file_test_in_sysroot (self->provider->path_in_current_ns,
                                       self->provider->fd,
                                       source_in_provider, G_FILE_TEST_IS_DIR))
-        return TRUE;
+        {
+          g_debug ("Not replacing \"${container}/%s\" with \"%s/%s\": "
+                   "source is not a directory",
+                   dest_in_container,
+                   self->provider->path_in_current_ns, source_in_provider);
+          return TRUE;
+        }
     }
 
   if (flags & TAKE_FROM_PROVIDER_FLAGS_IF_REGULAR)
@@ -3770,7 +3778,13 @@ pv_runtime_take_from_provider (PvRuntime *self,
       if (!_srt_file_test_in_sysroot (self->provider->path_in_current_ns,
                                       self->provider->fd,
                                       source_in_provider, G_FILE_TEST_IS_REGULAR))
-        return TRUE;
+        {
+          g_debug ("Not replacing \"${container}/%s\" with \"%s/%s\": "
+                   "source is not a regular file",
+                   dest_in_container,
+                   self->provider->path_in_current_ns, source_in_provider);
+          return TRUE;
+        }
     }
 
   if (flags & TAKE_FROM_PROVIDER_FLAGS_IF_EXISTS)
@@ -3778,7 +3792,13 @@ pv_runtime_take_from_provider (PvRuntime *self,
       if (!_srt_file_test_in_sysroot (self->provider->path_in_current_ns,
                                       self->provider->fd,
                                       source_in_provider, G_FILE_TEST_EXISTS))
-        return TRUE;
+        {
+          g_debug ("Not replacing \"${container}/%s\" with \"%s/%s\": "
+                   "source does not exist",
+                   dest_in_container,
+                   self->provider->path_in_current_ns, source_in_provider);
+          return TRUE;
+        }
     }
 
   if (self->mutable_sysroot != NULL)
@@ -3801,6 +3821,8 @@ pv_runtime_take_from_provider (PvRuntime *self,
 
       base = glnx_basename (dest_in_container);
 
+      g_debug ("Removing \"${container}/%s\"", dest_in_container);
+
       if (!glnx_shutil_rm_rf_at (parent_dirfd, base, NULL, error))
         return FALSE;
 
@@ -3825,6 +3847,10 @@ pv_runtime_take_from_provider (PvRuntime *self,
               glnx_autofd int file_fd = -1;
               glnx_autofd int dest_fd = -1;
 
+              g_debug ("Creating \"${container}/%s\" by copying \"%s/%s\"",
+                       dest_in_container,
+                       self->provider->path_in_current_ns,
+                       source_in_provider);
               file_fd = _srt_resolve_in_sysroot (self->provider->fd,
                                                  source_in_provider,
                                                  SRT_RESOLVE_FLAGS_READABLE,
@@ -3880,6 +3906,9 @@ pv_runtime_take_from_provider (PvRuntime *self,
       g_return_val_if_fail (target != NULL, FALSE);
       g_return_val_if_fail (target[0] == '/', FALSE);
 
+      g_debug ("Creating symlink \"${container}/%s\" -> \"%s\"",
+               dest_in_container, target);
+
       if (TEMP_FAILURE_RETRY (symlinkat (target, parent_dirfd, base)) != 0)
         return glnx_throw_errno_prefix (error,
                                         "Unable to create symlink \"%s/%s\" -> \"%s\"",
@@ -3897,6 +3926,10 @@ pv_runtime_take_from_provider (PvRuntime *self,
        * a new version over the top */
       g_assert (bwrap != NULL);
 
+      g_debug ("Trying to replace \"${container}/%s\" with \"%s/%s\" via "
+               "bind mount",
+               dest_in_container, self->provider->path_in_current_ns,
+               source_in_provider);
       source_fd = _srt_resolve_in_sysroot (self->provider->fd,
                                            source_in_provider,
                                            SRT_RESOLVE_FLAGS_NONE,
-- 
GitLab