With no argument, print available distros
DISTRO_NAME is based on the partition names in /boot.
-For example debianjessie for the partitionn boot_debianjessie.
+For example, boot_debianjessie.
For a system without libreboot, which is failing completely to
boot on one distro, here is how I did a chboot for it:
distro=$1
+mnt=/boot
+if ! mountpoint $mnt &>/dev/null; then
+ mnt=/
+fi
+
if [[ ! $distro ]]; then
echo "available distros:"
- cur=$(btrfs subvol show /boot| sed -rn 's/^.*Name:\s*(\S*).*/\1/p')
- btrfs subvolume list /boot | awk '{print $9}' | sed "s/$cur/$cur (current)/"
+ cur=$(btrfs subvol show $mnt| sed -rn 's/^.*Name:\s*(\S*).*/\1/p')
+ btrfs subvolume list $mnt | awk '{print $9}' | sed "s/$cur/$cur (current)/"
exit 0
fi
#### begin initial error checking #####
-if ! btrfs subvolume list /boot | grep "_$distro$" &>/dev/null; then
- echo "$0: error: _$distro$ not found in btrfs subvolume list /boot:"
- btrfs subvolume list /boot
+if ! btrfs subvolume list $mnt | grep "_$distro$" &>/dev/null; then
+ echo "$0: error: _$distro$ not found in btrfs subvolume list $mnt:"
+ btrfs subvolume list $mnt
exit 1
fi
e() { echo "$@"; "$@"; }
-boot_dev=$(mount | sed -rn "s#^(\S+) on /boot .*#\1#p")
+boot_dev=$(mount | sed -rn "s#^(\S+) on $mnt .*#\1#p")
mount_point=$(mktemp -d)
-e mount -o subvol=boot_$distro $boot_dev $mount_point
+e mount -o subvol=$distro $boot_dev $mount_point
boot_disk=${boot_dev%%[0-9]*}
e umount $mount_point
e mount $boot_disk$grub_extn $mount_point
-e grub-editenv $mount_point/grubenv set last_boot=/boot_$distro
+e grub-editenv $mount_point/grubenv set last_boot=$distro
e grub-editenv $mount_point/grubenv set did_fai_check=true
e umount $mount_point
e rmdir $mount_point