# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-[[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@"
+[[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
-x="$(readlink -f "$BASH_SOURCE")"
-f="${x%/*}/bash-trace"
-if [[ -e $f ]]; then
- source $f
-else
- source ${x%/*}/../bash-trace/DEFAULT
-fi
-
+if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi
+shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4
+set -eE -o pipefail
+trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR
usage() {
- cat <<EOF
-Usage: ${0##*/} [OPTIONS] DISTRO_NAME
+ cat <<'EOF'
+Usage: chboot [OPTIONS] DISTRO_NAME
Set grub to boot into a different distro, and reboot unless -r
With no argument, print available distros
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
+mp=/mnt/boot_debiantesting # the subvol i want to chboot to
boot_disk=/dev/sdd
-grub-bios-setup -d $mount_point/grub/i386-pc -s -m $mount_point/grub/device.map $boot_disk
+grub-bios-setup -d $mp/grub/i386-pc -s -m $mp/grub/device.map $boot_disk
reboot
todo: figure out if it's possible to make a multi-distro grub like I have with libreboot
}
-grub_extn=4
###### begin command line parsing #####
reboot=true
case $1 in
-d) set -x; shift ;;
-r) reboot=false; shift ;;
- -h|--help) usage ;;
+ -h|--help) usage 0 ;;
--) shift; break ;;
*) echo "$0: Internal error!" ; exit 1 ;;
esac
e() { echo "$@"; "$@"; }
-for boot_dev in $(s btrfs fil show $mnt | sed -nr 's#.*path\s+(\S+)$#\1#p'); do
+for boot_dev in $(btrfs fil show $mnt | sed -nr 's#.*path\s+(\S+)$#\1#p'); do
mount_point=$(mktemp -d)
e umount $mount_point
done
-e mount $boot_disk$grub_extn $mount_point
+if [[ $(blockdev --getsize64 ${boot_disk}4) == 8388608 ]]; then
+ # old partition scheme
+ grub_dev=${boot_disk}4
+elif [[ $(blockdev --getsize64 ${boot_disk}5) == 8388608 ]]; then
+ grub_dev=${boot_disk}5
+else
+ grub_dev=${boot_disk}7
+fi
+
+e mount $grub_dev $mount_point
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
-y
if $reboot; then
touch /tmp/keyscript-off
reboot now