#!/bin/bash set -e DISTROLIST=() ISOLIST=() ROOTPATH= DEVNAME= KERNELDIR= DATADIR= INSTALL_GRUB=1 . functions.sh msg() { echo -e "$1" >&2 } fatalerror() { msg "\x1b[1;31m$1\x1b[0m" exit 1 } usage() { msg "$0 --root= --dev= [--no-grub] [distro 1] [distro 2] ..." msg "use $0 -L to list available distros" } while [[ -n "$1" ]] do case "$1" in -L) exec ./listisos.sh ;; --root=*) ROOTPATH=${1/--root=} UUID="$(findmnt -o UUID --raw --noheadings $ROOTPATH \ || fatalerror "UUID of $ROOTPATH not found, not a mountpoint?")" KERNELDIR="$ROOTPATH/liveusb-kernel" DATADIR="$ROOTPATH/liveusb-data" GRUBCFG="$ROOTPATH/grub/grub.cfg" install -d "$KERNELDIR" "$DATADIR" msg "Files will be copy to $ROOTPATH" ;; --dev=*) DEVNAME=${1/--dev=} msg "Boot sector will be written to $DEVNAME" ;; --no-grub) INSTALL_GRUB=0 ;; *=*|-*) usage exit 1 ;; *) if [ -d "distro/$1" ] then DISTROLIST=(${DISTROLIST[@]} "$1") else fatalerror "directory distro/$1 not found" fi ;; esac shift done if [[ "${#DISTROLIST[@]}" == 0 || -z "$ROOTPATH" ]]; then usage exit 1 fi for i in ${DISTROLIST[@]} do process_isoinfo "$i" ISOLIST=("${ISOLIST[@]}" "$ISOFILE") if [ -f "isofiles/$ISOFILE" ] && checksum_verify; then true else download_iso fi done install -d "$ROOTPATH/grub" echo '# The live USB grub.cfg file' > "$GRUBCFG" if [ -z "$TXTMODE" ]; then cat >> "$GRUBCFG" << 'EOF' insmod all_video insmod font if loadfont /grub/fonts/unicode.pf2 then insmod gfxterm set gfxmode=auto set gfxpayload=keep terminal_output gfxterm fi EOF fi for i in `seq 1 ${#DISTROLIST[@]}` do ISOFILE="${ISOLIST[$i-1]}" DISTRO="${DISTROLIST[$i-1]}" process_distro "$DISTRO" install_live gen_grubcfg "$DISTRO" >> "$GRUBCFG" done if [ "$INSTALL_GRUB" == 1 ]; then read -p 'Answer Y to install GRUB.[Y/n] ' if [[ "$REPLY" =~ ^[Yy]|^$ ]]; then as-root grub-install --boot-directory="$ROOTPATH" --target=i386-pc "$DEVNAME" as-root grub-install --boot-directory="$ROOTPATH" --efi-directory="$ROOTPATH" --bootloader-id=grub --target=x86_64-efi --removable --no-nvram "$DEVNAME" fi fi