tmpfiles: Copy `/usr/share/factory/var` to `/var`
authorColin Walters <walters@verbum.org>
Thu, 30 Nov 2023 20:33:42 +0000 (15:33 -0500)
committerColin Walters <walters@verbum.org>
Thu, 30 Nov 2023 23:11:33 +0000 (18:11 -0500)
This is a pattern we want to encourage.  It's honestly just
way simpler than what rpm-ostree is doing today in auto-synthesizing
individual tmpfiles.d snippets.

src/boot/ostree-tmpfiles.conf
src/libostree/ostree-sysroot-deploy.c
tests/kolainst/destructive/var-tmpfiles.sh [new file with mode: 0755]

index 69c2d3f385e3fa23f3bb68a794b071ce84a73316..1877e44d13d1c073e5fdab11586c53b6a91a9d06 100644 (file)
@@ -17,3 +17,7 @@
 d /run/ostree 0755 root root -
 # https://github.com/ostreedev/ostree/issues/393
 R! /var/tmp/ostree-unlock-ovl.*
+# Automatically propagate all /var content from /usr/share/factory/var;
+# the ostree-container stack is being changed to do this, and we want to
+# encourage ostree use cases in general to follow this pattern.
+C+! /var - - - - -
index 2a554e9caa732b70e22566644486a5562551d007..284a32f6ac26746e209289bcb366feff4780b8ed 100644 (file)
@@ -3039,10 +3039,10 @@ lint_deployment_fs (OstreeSysroot *self, OstreeDeployment *deployment, int deplo
       if (dent == NULL)
         break;
 
-      fprintf (
-          stderr,
-          "note: Deploying commit %s which contains content in /var/%s that will be ignored.\n",
-          ostree_deployment_get_csum (deployment), dent->d_name);
+      fprintf (stderr,
+               "note: Deploying commit %s which contains content in /var/%s that should be in "
+               "/usr/share/factory/var\n",
+               ostree_deployment_get_csum (deployment), dent->d_name);
     }
 
   return TRUE;
diff --git a/tests/kolainst/destructive/var-tmpfiles.sh b/tests/kolainst/destructive/var-tmpfiles.sh
new file mode 100755 (executable)
index 0000000..3ce9e35
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash
+set -xeuo pipefail
+
+. ${KOLA_EXT_DATA}/libinsttest.sh
+
+require_writable_sysroot
+prepare_tmpdir
+
+case "${AUTOPKGTEST_REBOOT_MARK:-}" in
+  "")
+    factory_var=rootfs/usr/share/factory/var
+    mkdir -p ${factory_var}
+    cd "${factory_var}"
+    mkdir -p home/someuser
+    echo bashrc > home/someuser/.bashrc
+    chown -R 1000:1000 home/someuser
+    mkdir -m 01777 -p tmp
+    cd -
+    ostree commit -b testlint --no-bindings --selinux-policy-from-base --tree=ref="${host_refspec}" --consume --tree=dir=rootfs
+    ostree admin deploy testlint 2>err.txt
+    assert_not_file_has_content err.txt 'contains content in /var'
+
+    /tmp/autopkgtest-reboot "2"
+    ;;
+  2)
+    assert_file_has_content /home/someuser/.bashrc bashrc
+    ;;
+  *) fatal "Unexpected AUTOPKGTEST_REBOOT_MARK=${AUTOPKGTEST_REBOOT_MARK}" ;;
+esac