From: Ian Kelling Date: Sat, 11 Feb 2017 04:19:51 +0000 (-0800) Subject: make chboot work for bootstrap volume X-Git-Url: https://iankelling.org/git/?p=automated-distro-installer;a=commitdiff_plain;h=cf778f7a65037a2a54e2b6008511f0a584326ce9 make chboot work for bootstrap volume --- diff --git a/fai-kexec b/fai-kexec index dbf003b..b674d7e 100755 --- a/fai-kexec +++ b/fai-kexec @@ -17,6 +17,7 @@ set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" returned $?" >&2' ERR +[[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@" usage() { cat <<'EOF' @@ -35,7 +36,6 @@ case $1 in esac - if [[ $1 ]]; then prefix="ssh root@$1" fi diff --git a/fai/config/files/boot/chboot/DEFAULT b/fai/config/files/boot/chboot/DEFAULT index 4dda460..a8aa584 100755 --- a/fai/config/files/boot/chboot/DEFAULT +++ b/fai/config/files/boot/chboot/DEFAULT @@ -28,7 +28,7 @@ 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: @@ -76,10 +76,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 +93,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 +103,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 +119,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 diff --git a/pxe-server b/pxe-server index 9e74eeb..fb92d66 100755 --- a/pxe-server +++ b/pxe-server @@ -156,7 +156,9 @@ if $set; then e fai-redep fi else - e myfai-chboot + # This will fail if faiserver is not setup, so ignore any + # failure and don't bother us about it. + myfai-chboot &>/dev/null ||: fi fi diff --git a/wrt-setup b/wrt-setup index 981a290..aa34f67 100755 --- a/wrt-setup +++ b/wrt-setup @@ -247,8 +247,8 @@ EOF dnsmasq_restart=false v cedit /etc/hosts <