From ddab0f21f037311468a05b28b79c2a21690c4ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?= Date: Sat, 26 Feb 2022 19:00:42 +0100 Subject: [PATCH] Support building templates with BTRFS as rootfs QubesOS/qubes-issues#7310 --- Makefile | 1 + prepare_image | 26 ++++++++++++++++++++++++-- qubeize_image | 11 ++++++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 4442b31..a0b48e9 100644 --- a/Makefile +++ b/Makefile @@ -18,6 +18,7 @@ TEMPLATE_ENV_WHITELIST += \ TEMPLATE_FLAVOR_DIR TEMPLATE_OPTIONS APPMENUS_DIR \ VERBOSE DEBUG PATH BUILDER_DIR SRC_DIR DISCARD_PREPARED_IMAGE \ TEMPLATE_ROOT_WITH_PARTITIONS TEMPLATE_ROOT_SIZE \ + TEMPLATE_ROOT_FSTYPE \ USE_QUBES_REPO_VERSION USE_QUBES_REPO_TESTING \ BUILDER_TURBO_MODE REPO_PROXY FEDORA_MIRROR \ CENTOS_MIRROR EPEL_MIRROR QUBES_MIRROR \ diff --git a/prepare_image b/prepare_image index 76c306d..a85939a 100755 --- a/prepare_image +++ b/prepare_image @@ -32,6 +32,10 @@ if [ -z "$TEMPLATE_ROOT_SIZE" ]; then TEMPLATE_ROOT_SIZE=10G fi +if [ -z "$TEMPLATE_ROOT_FSTYPE" ]; then + TEMPLATE_ROOT_FSTYPE=ext4 +fi + # ------------------------------------------------------------------------------ # Make sure INSTALLDIR exists # ------------------------------------------------------------------------------ @@ -82,10 +86,28 @@ EOF udevadm settle --exit-if-exists="$IMG_DEV" echo "-> Creating filesystem..." - /sbin/mkfs.ext4 -q -F "${IMG_DEV}" || exit 1 + case "$TEMPLATE_ROOT_FSTYPE" in + ext4) + /sbin/mkfs.ext4 -q -F "${IMG_DEV}" || exit 1 + ;; + btrfs) + /sbin/mkfs.btrfs -q -f "${IMG_DEV}" || exit 1 + mount "${IMG_DEV}" "${INSTALLDIR}" || exit 1 + btrfs subvolume create "${INSTALLDIR}/root" || exit 1 + umount "${INSTALLDIR}" || exit 1 + ;; + *) + echo "Unsupported filesystem $TEMPLATE_ROOT_FSTYPE" >&2 + exit 1 + ;; + esac fi -mount "${IMG_DEV}" "${INSTALLDIR}" || exit 1 +if [ "$TEMPLATE_ROOT_FSTYPE" = "btrfs" ]; then + mount -o subvol=/root "${IMG_DEV}" "${INSTALLDIR}" || exit 1 +else + mount "${IMG_DEV}" "${INSTALLDIR}" || exit 1 +fi trap "umount_kill $(readlink -m ${INSTALLDIR})" EXIT "${SCRIPTSDIR}/01_install_core.sh" diff --git a/qubeize_image b/qubeize_image index 97e6156..4791804 100755 --- a/qubeize_image +++ b/qubeize_image @@ -79,7 +79,11 @@ else IMG_DEV=${IMG_LOOP} fi udevadm settle --exit-if-exists="$IMG_DEV" -mount "$IMG_DEV" mnt || exit 1 +if [ "$TEMPLATE_ROOT_FSTYPE" = "btrfs" ]; then + mount -o subvol=/root "${IMG_DEV}" mnt || exit 1 +else + mount "${IMG_DEV}" mnt || exit 1 +fi export INSTALLDIR=mnt # ------------------------------------------------------------------------------ @@ -87,6 +91,11 @@ export INSTALLDIR=mnt # ------------------------------------------------------------------------------ "$SCRIPTSDIR/04_install_qubes.sh" +if [ "$TEMPLATE_ROOT_FSTYPE" = "btrfs" ]; then + # patch fstab + sed -i -e 's:dmroot.*ext4.*:dmroot / btrfs defaults,discard,noatime,subvol=/root 1 1:' mnt/etc/fstab +fi + # ------------------------------------------------------------------------------ # Create App Menus # ------------------------------------------------------------------------------