various fixes and improvements
[automated-distro-installer] / fai / config / files / boot / chboot / DEFAULT
index 4dda460dbae5d3117860495dc940159b8ccdfe54..ed65c80595ca871327046cb5866b2dd9459406cc 100755 (executable)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 
-set -eE -o pipefail
-trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR
+x="$(readlink -f "$BASH_SOURCE")"
+f="${x%/*}/bash-trace"
+if [[ -e $f ]]; then
+    source $f
+else
+    source ${x%/*}/../bash-trace/DEFAULT
+fi
 
 [[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@"
 
@@ -28,15 +33,15 @@ Set grub to boot into a different distro, and reboot unless -r
 
 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:
 # arch-pxe had been run previously
-pxe-server treetowl arch
-# reboot treetowl into arch live env
+pxe-server some_hostname arch
+# reboot some_hostname into arch live env
 pxe-server # disable pxe server
-ssh root@treetowl
+ssh root@some_hostname
 lsblk # identify boot dev. if boot dev is a raid, this could be repeated on all boot devs.
 mount /dev/sdd3 /mnt
 mount_point=/mnt/boot_debiantesting # the subvol i want to chboot to
@@ -76,10 +81,15 @@ done
 
 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
 
@@ -88,9 +98,9 @@ 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
 
@@ -98,11 +108,11 @@ 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]*}
 
@@ -114,7 +124,7 @@ e grub-bios-setup -d $mount_point/grub/i386-pc -s -m $mount_point/grub/device.ma
 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