X-Git-Url: https://iankelling.org/git/?p=automated-distro-installer;a=blobdiff_plain;f=chboot;h=b311a15959954bc2009672eb35470417c0beed0d;hp=925becc55a95ffc3ddc2f3f1816643ef3474e50c;hb=45578de750fb07f7a7f64181e6b3b749ef727725;hpb=1a5548031efc4a1fa88ca94237eac3033cf97ef1 diff --git a/chboot b/chboot deleted file mode 100755 index 925becc..0000000 --- a/chboot +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/bash -# Copyright (C) 2016 Ian Kelling - -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# 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 $?" >&2' ERR - -[[ $EUID == 0 ]] || exec sudo "$BASH_SOURCE" "$@" - - -###### begin command line parsing ##### -reboot=true -while [[ $1 == -* ]]; do - case $1 in - -d) set -x; shift ;; - -r) reboot=false; shift ;; - --) break ;; - esac -done - - -distro=$1 - -if [[ ! $distro ]]; then - echo "available distros:" - btrfs subvolume list /boot | sed -rn 's/^.*boot_(.*)/\1/p' - exit 0 -fi - -###### end command line parsing ##### - - -#### 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 - exit 1 -fi - -#### end initial error checking ##### - -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 - touch /tmp/keyscript-off - 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