X-Git-Url: https://iankelling.org/git/?p=automated-distro-installer;a=blobdiff_plain;f=chboot;h=b311a15959954bc2009672eb35470417c0beed0d;hp=0e3b506ebc7cdabe40c0cb3bd8d90eec41a93e3c;hb=6ca069946c8ff88d79d1ae421e0eda60ae1c514c;hpb=d3d495af167adba91b190e8dcb95649c34fa04c7 diff --git a/chboot b/chboot deleted file mode 100755 index 0e3b506..0000000 --- a/chboot +++ /dev/null @@ -1,60 +0,0 @@ -#!/bin/bash - -# Set grub to boot into a different distro, and reboot unless -r -# $0 [DISTRO_NAME] -# with no argument, print available distros - -# DISTRO_NAME is based on the partition names in /boot. eg boot_debianjessie - -set -eE -o pipefail -trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?"' ERR - -[[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@" - -reboot=true -while [[ $1 == -* ]]; do - case $1 in - -d) set -x; shift ;; - -r) reboot=false; shift ;; - --) break ;; - esac -done - - -distro=$1 - -###### end command line parsing ##### - -if [[ ! $distro ]]; then - echo "available distros:" - btrfs subvolume list /boot | sed -rn 's/^.*boot_(.*)/\1/p' - exit 0 -fi - -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 - exit 1 -fi - -e() { echo "$@"; "$@"; } - -boot_dev=$(mount | sed -rn "s#^(\S+) on /boot .*#\1#p") - -mount_point=$(mktemp -d) - -e mount -o subvol=boot_$distro $boot_dev $mount_point - -boot_disk=${boot_dev%%[0-9]*} - -# arch doesn't have $mount_point/grub/device.map, accoring to the grub manual, -# it just generates one if the file doesn't exist. -# https://www.gnu.org/software/grub/manual/html_node/Device-map.html -e grub-bios-setup -d $mount_point/grub/i386-pc -s -m $mount_point/grub/device.map $boot_disk - -e umount $mount_point -e rmdir $mount_point - -if $reboot; then - reboot now -fi diff --git a/chboot b/chboot new file mode 120000 index 0000000..b311a15 --- /dev/null +++ b/chboot @@ -0,0 +1 @@ +fai/config/files/boot/chboot/DEFAULT \ No newline at end of file