diff --git a/initramfs/ubuntu/hooks/grub-btrfs-overlay b/initramfs/ubuntu/hooks/grub-btrfs-overlay index 75d4644..f0676c1 100755 --- a/initramfs/ubuntu/hooks/grub-btrfs-overlay +++ b/initramfs/ubuntu/hooks/grub-btrfs-overlay @@ -12,3 +12,4 @@ esac . /usr/share/initramfs-tools/hook-functions manual_add_modules overlay +copy_exec /usr/bin/findmnt /usr/bin diff --git a/initramfs/ubuntu/scripts/local-bottom/grub-btrfs-overlay b/initramfs/ubuntu/scripts/local-bottom/grub-btrfs-overlay index 1481587..3049423 100755 --- a/initramfs/ubuntu/scripts/local-bottom/grub-btrfs-overlay +++ b/initramfs/ubuntu/scripts/local-bottom/grub-btrfs-overlay @@ -1,30 +1,32 @@ #!/bin/sh -e PREREQ= prereqs() { - echo "$PREREQ" + echo "$PREREQ" } case $1 in - prereqs) - prereqs - exit 0 - ;; + prereqs) + prereqs + exit 0 + ;; esac . /scripts/functions on_err() { - panic 'script error' + log_failure_msg 'error setting up overlay' } trap on_err ERR -if [ "$readonly" = y ] +if [ -x /usr/bin/btrfs -a -x /usr/bin/findmnt ] && + [ "$(findmnt -no FSTYPE -M "$rootmnt")" = btrfs ] && + [ "$(btrfs property get $rootmnt ro)" != ro=false ] then - log_begin_msg 'remount read-only root as read-only layer in non-persistent, writable overlay' - lower_dir="$(mktemp -d -p /)" - ram_dir="$(mktemp -d -p /)" + log_begin_msg 'remount read-only subvolume as read-only layer in non-persistent, writable overlay' + trap log_end_msg EXIT + lower_dir="$(mktemp -dp /)" + ram_dir="$(mktemp -dp /)" upper_dir="$ram_dir"/upper work_dir="$ram_dir"/work mount --move "$rootmnt" "$lower_dir" mount -t tmpfs cowspace "$ram_dir" mkdir -p "$upper_dir" "$work_dir" mount -t overlay -o lowerdir="$lower_dir",upperdir="$upper_dir",workdir="$work_dir" rootfs "$rootmnt" - log_end_msg fi