bug fix
[automated-distro-installer] / fai / config / files / boot / chboot / DEFAULT
index 4abb48683a7f0794107198d18c2bd397df0c2fa2..6b0e964440c6621f274fbadd42d41eede2767f9f 100755 (executable)
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 
 # 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() {
 
 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
 Set grub to boot into a different distro, and reboot unless -r
 
 With no argument, print available distros
@@ -64,7 +60,6 @@ EOF
 }
 
 
 }
 
 
-grub_extn=4
 
 ###### begin command line parsing #####
 reboot=true
 
 ###### begin command line parsing #####
 reboot=true
@@ -74,7 +69,7 @@ while true; do
   case $1 in
     -d) set -x; shift ;;
     -r) reboot=false; shift ;;
   case $1 in
     -d) set -x; shift ;;
     -r) reboot=false; shift ;;
-    -h|--help) usage ;;
+    -h|--help) usage ;;
     --) shift; break ;;
     *) echo "$0: Internal error!" ; exit 1 ;;
   esac
     --) shift; break ;;
     *) echo "$0: Internal error!" ; exit 1 ;;
   esac
@@ -125,7 +120,16 @@ for boot_dev in $(btrfs fil show $mnt | sed -nr 's#.*path\s+(\S+)$#\1#p'); do
   e umount $mount_point
 done
 
   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
 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