bastille icon indicating copy to clipboard operation
bastille copied to clipboard

[BUG] rename doesn't consider custom MOUNT

Open gahr opened this issue 1 year ago • 1 comments

[MANDATORY] Describe the bug [MANDATORY] The rename command contains a update_fstab routine to update the fstab file of the jail to the new name. However, this is not applied to custom mounts, e.g., those initiated by a MOUNT command in a template.

[MANDATORY] Bastille and FreeBSD version (paste bastille -v && freebsd-version -kru output) 0.10.20231125 14.0-RELEASE-p3 14.0-RELEASE-p3 14.0-RELEASE-p4

[MANDATORY] How did you install bastille? (port/pkg/git) pkg

[optional] Steps to reproduce?

  1. create a jail named foo
  2. apply a template that contains a MOUNT command, e.g., MOUNT /root/bastille/data data nullfs rw 0 0
  3. rename the jail: bastille rename foo bar
  4. see how the custom entry in the jail fstab file still points to the old path: /root/bastille/data /usr/local/bastille/jails/foo/root/data nullfs rw 0 0

[optional] Expected behavior The rename command takes care of updating all entries in fstab, so my entry would be updated to /root/bastille/data /usr/local/bastille/jails/bar/root/data nullfs rw 0 0

gahr avatar Jan 06 '24 13:01 gahr

This might be simplistic but works for me :)

From 0be4428682c272d4bff2fcf23f3a1898b86b0483 Mon Sep 17 00:00:00 2001
From: Pietro Cerutti <[email protected]>
Date: Sat, 6 Jan 2024 13:28:02 +0000
Subject: [PATCH] rename: adjust all mount points

---
 usr/local/share/bastille/rename.sh | 19 +------------------
 1 file changed, 1 insertion(+), 18 deletions(-)

diff --git a/usr/local/share/bastille/rename.sh b/usr/local/share/bastille/rename.sh
index 08ebe10..9caf7e8 100644
--- a/usr/local/share/bastille/rename.sh
+++ b/usr/local/share/bastille/rename.sh
@@ -81,24 +81,7 @@ update_fstab() {
     # Update fstab to use the new name
     FSTAB_CONFIG="${bastille_jailsdir}/${NEWNAME}/fstab"
     if [ -f "${FSTAB_CONFIG}" ]; then
-        # Skip if fstab is empty, e.g newly created thick or clone jails
-        if [ -s "${FSTAB_CONFIG}" ]; then
-            FSTAB_RELEASE=$(grep -owE '([1-9]{2,2})\.[0-9](-RELEASE|-RC[1-9])|([0-9]{1,2}-stable-build-[0-9]{1,3})|(current-build)-([0-9]{1,3})|(current-BUILD-LATEST)|([0-9]{1,2}-stable-BUILD-LATEST)|(current-BUILD-LATEST)' "${FSTAB_CONFIG}")
-            FSTAB_CURRENT=$(grep -w ".*/releases/.*/jails/${TARGET}/root/.bastille" "${FSTAB_CONFIG}")
-            FSTAB_NEWCONF="${bastille_releasesdir}/${FSTAB_RELEASE} ${bastille_jailsdir}/${NEWNAME}/root/.bastille nullfs ro 0 0"
-            if [ -n "${FSTAB_CURRENT}" ] && [ -n "${FSTAB_NEWCONF}" ]; then
-                # If both variables are set, update as needed
-                if ! grep -qw "${bastille_releasesdir}/${FSTAB_RELEASE}.*${bastille_jailsdir}/${NEWNAME}/root/.bastille" "${FSTAB_CONFIG}"; then
-                    sed -i '' "s|${FSTAB_CURRENT}|${FSTAB_NEWCONF}|" "${FSTAB_CONFIG}"
-                fi
-            fi
-
-            # Update linuxjail fstab name entries
-            # Search for either linprocfs/linsysfs, if true assume is a linux jail
-            if grep -qwE "linprocfs|linsysfs" "${FSTAB_CONFIG}"; then
-                sed -i '' "s|.${bastille_jailsdir}/${TARGET}/|${bastille_jailsdir}/${NEWNAME}/|" "${FSTAB_CONFIG}"
-            fi
-        fi
+        sed -i '' "s|${bastille_jailsdir}/${TARGET}|${bastille_jailsdir}/${NEWNAME}|g" "${FSTAB_CONFIG}"
     fi
 }
 
-- 
2.43.0

gahr avatar Jan 06 '24 13:01 gahr