diff options
Diffstat (limited to 'sys-boot/elilo/files/elilo-3.4')
-rw-r--r-- | sys-boot/elilo/files/elilo-3.4 | 806 |
1 files changed, 0 insertions, 806 deletions
diff --git a/sys-boot/elilo/files/elilo-3.4 b/sys-boot/elilo/files/elilo-3.4 deleted file mode 100644 index a7a1280ecf74..000000000000 --- a/sys-boot/elilo/files/elilo-3.4 +++ /dev/null @@ -1,806 +0,0 @@ -#! /bin/sh - -############################################################################### -## -## elilo installs efi bootloader onto a bootstrap partition (based on ybin) -## Copyright (C) 2001 Ethan Benson -## -## 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -## -############################################################################### - -PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" -## allow to run out of /target in boot-floppies -if [ -n "$PATH_PREFIX" ] ; then - PATH="${PATH}:${PATH_PREFIX}/sbin:${PATH_PREFIX}/bin:${PATH_PREFIX}/usr/sbin:${PATH_PREFIX}/usr/bin:${PATH_PREFIX}/usr/local/sbin:${PATH_PREFIX}/usr/local/bin" -fi -PRG="${0##*/}" -SIGINT="$PRG: Interrupt caught ... exiting" -VERSION=3.4-4 -DEBUG=0 -VERBOSE=0 -TMP="${TMPDIR:-/tmp}" -TARGET= -# Beware, /EFI/gentoo occurs with double backslashes in the script too -# so change those as well as EFIROOT, if need be. -EFIROOT=/EFI/gentoo -export LC_COLLATE=C - -## catch signals, clean up junk in /tmp. -trap "cleanup" 0 -trap "cleanup; exit 129" 1 -trap "echo 1>&2 $SIGINT ; cleanup; exit 130" 2 -trap "cleanup; exit 131" 3 -trap "cleanup; exit 143" 15 - -## define default config file -CONF=/etc/elilo.conf -bootconf=$CONF -ERR=" Error in $CONF:" - -## define default configuration -boot=unconfigured - -## allow default to work on packaged and non-packaged elilo. -if [ -f /usr/local/lib/elilo/elilo.efi ] ; then - install=/usr/local/lib/elilo/elilo.efi -elif [ -f /usr/lib/elilo/elilo.efi ] ; then - install=/usr/lib/elilo/elilo.efi -fi - -## defaults -efiboot=0 -autoconf=0 -fstype=vfat -umountproc=0 - -## elilo autoconf defaults -label=Linux -timeout=20 -root=/dev/sda3 - -# image default is controlled by /etc/kernel-img.conf, if it exists -if [ -f /etc/kernel-img.conf ] && - egrep -q "^(image|link)_in_boot *= *yes" /etc/kernel-img.conf; then - image=/boot/vmlinuz -else - image=/vmlinuz -fi - -## make fake `id' if its missing, outputs 0 since if its missing we -## are probably running on boot floppies and thus are root. -if (command -v id > /dev/null 2>&1) ; then - true -else - id() - { - echo 0 - } -fi - -## --version output -version() -{ -echo \ -"$PRG $VERSION -Written by Richard Hirst, based on work by Ethan Benson - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." -} - -## --help output. -usage() -{ -echo \ -"Usage: $PRG [OPTION]... -Update/install bootloader onto a bootstrap partition. - - -b, --boot set bootstrap partition device [ -b /dev/sda1 ] - -i, --install pathname to the actual bootloader binary - default: /usr/{local/}lib/elilo/elilo.efi - -C, --config use alternate configuration file [ -C config_file ] - --autoconf auto-generate a /etc/elilo.conf - --efiboot elilo auto configuration: create an efi boot - manager entry for elilo - --timeout elilo auto configuration: sets the time elilo - will wait for user input before booting default - image default: 20 (2 seconds) - --image elilo auto configuration: sets the path to the - kernel image. default: /vmlinuz - --label elilo auto configuration: sets the image label - default: Linux - --root elilo auto configuration: sets the root device - default: /dev/sda3 - --format create a new FAT filesystem on the boot partition - -v, --verbose make $PRG more verbose - --debug print boring junk only useful for debugging - -h, --help display this help and exit - -V, --version output version information and exit" -} - -## we have to do some things differently with a retarded devfs name. -ckdevfs() -{ - case "$1" in - /dev/ide/*|/dev/scsi/*|/dev/discs/*) - return 0 - ;; - *) - return 1 - ;; - esac -} - -## the SmartArray RAID controllers use /dev/cciss/c0d0p1 kinds of names... -ckcciss() -{ - case "$1" in - /dev/cciss/*) - return 0 - ;; - *) - return 1 - ;; - esac -} - - -## configuration file parsing. FIXME: need a method which can parse -## image= sections. -parseconf() -{ -case "$1" in - str) - v=`grep "^$2[\ ,=]" "$CONF"` ; echo "${v#*=}" - ;; - flag) - grep "^$2\>" "$CONF" > /dev/null && echo 0 || echo 1 - ;; - ck) - grep "^$2[\ ,=]" "$CONF" > /dev/null && echo 0 || echo 1 - ;; -esac -} - -## check for existence of a configuration file, and make sure we have -## read permission. -confexist() -{ - if [ ! -e "$CONF" ] ; then - echo 1>&2 "$PRG: $CONF: No such file or directory" - return 1 - elif [ ! -f "$CONF" ] ; then - echo 1>&2 "$PRG: $CONF: Not a regular file" - return 1 - elif [ ! -r "$CONF" ] ; then - echo 1>&2 "$PRG: $CONF: Permission denied" - return 1 - else - return 0 - fi -} - -## check to make sure the configuration file is sane and correct. -## maybe this is an insane ammount of error checking, but I want to -## make sure (hopefully) nothing unexpected ever happens. and i just -## like useful errors from programs. every error just marks an error -## variable so we give the user as much info as possible before we -## abandon ship. -checkconf() -{ - if [ ! -e "$boot" ] ; then - echo 1>&2 "$PRG: $boot: No such file or directory" - local CONFERR=1 - elif [ ! -b "$boot" -a ! -f "$boot" ] ; then - echo 1>&2 "$PRG: $boot: Not a regular file or block device" - local CONFERR=1 - elif [ ! -w "$boot" -o ! -r "$boot" ] ; then - echo 1>&2 "$PRG: $boot: Permission denied" - CONFERR=1 - fi - - ## sanity check, make sure boot=bootstrap and not something dumb - ## like /dev/hda - case "$boot" in - *hda) - echo 1>&2 "$PRG:$ERR \`boot=$boot' would result in the destruction of all data on $boot" - local CONFERR=1 - ;; - *sda) - echo 1>&2 "$PRG:$ERR \`boot=$boot' would result in the destruction of all data on $boot" - local CONFERR=1 - ;; - *disc) - echo 1>&2 "$PRG:$ERR \`boot=$boot' would result in the destruction of all data on $boot" - local CONFERR=1 - ;; - esac - - ## now make sure its not something dumb like the root partition - local ROOT="$(v=`df / 2> /dev/null | grep ^/dev/` ; echo ${v%%[ ]*})" - local BOOT="$(v=`df /boot 2> /dev/null | grep ^/dev/` ; echo ${v%%[ ]*})" - if [ "$boot" = "$ROOT" ] ; then - echo 1>&2 "$PRG:$ERR \`boot=$boot' would result in the destruction of the root filesystem" - local CONFERR=1 - elif [ "$boot" = "$BOOT" ] ; then - echo 1>&2 "$PRG:$ERR \`boot=$boot' would result in the destruction of the /boot filesystem" - local CONFERR=1 - fi - - ## Make sure boot is not already mounted - mount | grep "^$boot " > /dev/null - if [ $? = 0 ] ; then - echo 1>&2 "$PRG: $boot appears to be mounted" - local CONFERR=1 - fi - - if [ ! -e "$install" ] ; then - echo 1>&2 "$PRG: $install: No such file or directory" - local CONFERR=1 - elif [ ! -f "$install" ] ; then - echo 1>&2 "$PRG: $install: Not a regular file" - local CONFERR=1 - elif [ ! -r "$install" ] ; then - echo 1>&2 "$PRG: $install: Permission denied" - local CONFERR=1 - fi - - if [ ! -e "$bootconf" ] ; then - echo 1>&2 "$PRG: $bootconf: No such file or directory" - local CONFERR=1 - elif [ ! -f "$bootconf" ] ; then - echo 1>&2 "$PRG: $bootconf: Not a regular file" - local CONFERR=1 - elif [ ! -r "$bootconf" ] ; then - echo 1>&2 "$PRG: $bootconf: Permission denied" - local CONFERR=1 - fi - - if [ ! -d /proc/efi/vars ] && [ ! -d /sys/firmware/efi/vars ] && [ "$efiboot" = 1 ] && ! modprobe -q efivars; then - echo 1>&2 "$PRG: no efi/vars under /proc or /sys/firmware, boot menu not updated" - efiboot=0 - fi - - if [ "$efiboot" = 1 ] ; then - ## see if efibootmgr exists and is executable - if (command -v efibootmgr > /dev/null 2>&1) ; then - [ -x `command -v efibootmgr` ] || MISSING=1 ; else MISSING=1 - fi - - if [ "$MISSING" = 1 ] ; then - efiboot=0 - echo 1>&2 "$PRG: Warning: \`efibootmgr' could not be found, boot menu not updated" - fi - - if [ -f "$boot" ] ; then - echo 1>&2 "$PRG: $boot is a regular file, disabling boot menu update" - efiboot=0 - fi - fi - - if [ "$CONFERR" = 1 ] ; then - return 1 - else - return 0 - fi -} - - -mnt() -{ - ## we can even create bootstrap filesystem images directly if you - ## ever wanted too. - if [ -f "$boot" ] ; then - local loop=",loop" - else - local loop='' - fi - - if [ -e "$TMP/bootstrap.$$" ] ; then - echo 1>&2 "$PRG: $TMP/bootstrap.$$ exists, aborting." - return 1 - fi - - mkdir -m 700 "$TMP/bootstrap.$$" - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: Could not create mountpoint directory, aborting." - return 1 - fi - - mount | grep "^$boot " > /dev/null - if [ $? = 0 ] ; then - echo 1>&2 "$PRG: $boot appears to be mounted! aborting." - return 1 - fi - - [ "$VERBOSE" = 1 ] && echo "$PRG: Mounting $boot..." - mount -t "$fstype" -o rw,noexec,umask=077$loop "$boot" "$TMP/bootstrap.$$" - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured mounting $boot" - return 1 - fi - - TARGET="$TMP/bootstrap.$$" - return 0 -} - -copyfiles() -{ - local BTFILE=elilo.efi - local CFFILE=elilo.conf - local imagefiles=`grep '^image[[:space:]]*=' $bootconf | \ - sed 's/^image[[:space:]]*=[[:space:]]*//' | grep -v ':'` - local initrdfiles=`grep '^[[:space:]]*initrd[[:space:]]*=' $bootconf | \ - sed 's/.*=[[:space:]]*//' | grep -v ':'` - - ## Point of no return, removing the old EFI/gentoo tree - rm -rf $TARGET/$EFIROOT - if [ $? != 0 ]; then - echo 2>&1 "$PRG: Failed to delete old boot files, aborting" - return 1 - fi - mkdir -p $TARGET/$EFIROOT - - ## Add a README to warn that this tree is deleted every time elilo is run - echo -ne "\ -This directory tree is managed by /usr/sbin/elilo, and is deleted and\n\ -recreated every time elilo runs. Any local changes will be lost.\n\ -" > $TARGET/$EFIROOT/README.TXT - - ## this is probably insecure on modern filesystems, but i think - ## safe on crippled hfs/dosfs. - [ "$VERBOSE" = 1 ] && echo "$PRG: Installing primary bootstrap $install onto $boot..." - cp -f "$install" "$TARGET/$EFIROOT/$BTFILE" - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured while writing to $boot" - return 1 - fi - - [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $bootconf on $boot..." - ## we comment out boot= and install=, because they are only really - ## needed in the /etc/elilo.conf file, and elilo.efi currently - ## doesn't understand them. We also need to add /EFI/gentoo on to - ## the front of any paths that don't contain colons (device paths). - sed -e "s|^boot[[:space:]]*=|# &|" -e "s|^install[[:space:]]*=|# &|" \ - -e "s|\(^image[[:space:]]*=[[:space:]]*\)\([^:]*\)$|\1$EFIROOT\2|" \ - -e "s|\(^[[:space:]]*initrd[[:space:]]*=[[:space:]]*\)\([^:]*\)$|\1$EFIROOT\2|" \ - < "$bootconf" > "$TARGET/$EFIROOT/$CFFILE" - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured while writing to $boot" - return 1 - fi - - [ "$DEBUG" = 1 ] && echo "----" && cat "$TARGET/$EFIROOT/$CFFILE" && echo "----" - - for i in $imagefiles $initrdfiles; do - [ "$VERBOSE" = 1 ] && echo "$PRG: Installing $i on $boot..." - if [ -f $i ]; then - mkdir -p `dirname "$TARGET/$EFIROOT/$i"` - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured creating directory `dirname $EFIROOT/$i` on $boot" - return 1 - fi - cp -f "$i" "$TARGET/$EFIROOT/$i" - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured writing $i to $boot" - return 1 - fi - else - echo "$PRG: Warning: $i not found" - fi - done - - sync ; sync - - ## update the boot-device variable in EFI. - if [ "$efiboot" = 1 ] ; then - [ "$VERBOSE" = 1 ] && echo "$PRG: Updating EFI boot-device variable..." - efiquiet="-q" - [ "$VERBOSE" = 1 ] && efiquiet="" - if ckdevfs "$boot" ; then - local BOOTDISK="${boot%/*}/disc" - local BOOTPART="${boot##*part}" - elif ckcciss "$boot" ; then - local BOOTDISK="${boot%p[0-9]*}" - local BOOTPART="${boot##*[a-z]}" - else - local BOOTDISK="${boot%%[0-9]*}" - local BOOTPART="${boot##*[a-z]}" - fi - if [ -z "$BOOTDISK" -o -z "$BOOTPART" ] ; then - echo 2>&1 "$PRG: Could not determine boot disk, aborting..." - return 1 - fi - - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: boot-disk = $BOOTDISK" - [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: boot-partition = $BOOTPART" - # delete other entries with name "Gentoo Linux" - for b in `efibootmgr | grep "Gentoo Linux" | awk '{print substr($1,5,4) }'`; do - efibootmgr $efiquiet -b $b -B - done - # Add a new entry for this installation - efibootmgr $efiquiet -c -d $BOOTDISK -p $BOOTPART -w -L "Gentoo Linux" \ - -l \\EFI\\gentoo\\elilo.efi -u -- elilo -C \\EFI\\gentoo\\elilo.conf - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured while updating boot menu, we'll ignore it" - fi - # Now, if 2nd and 3rd boot entries are for floppy and CD/DVD, - # move them up to 1st and 2nd, making our entry the 3rd. - bootorder=$(efibootmgr | sed -n 's/^BootOrder: \(.*\)$/\1/p') - boot1st=$(echo $bootorder | sed -n "s/\(....\).*$/\1/p") - boot2nd=$(echo $bootorder | sed -n "s/....,\(....\).*$/\1/p") - boot3rd=$(echo $bootorder | sed -n "s/....,....,\(....\).*$/\1/p") - boot456=$(echo $bootorder | sed -n "s/....,....,....\(.*\).*$/\1/p") - name2nd=$(efibootmgr | sed -n "s/^Boot$boot2nd[\*] \(.*\)$/\1/p") - name3rd=$(efibootmgr | sed -n "s/^Boot$boot3rd[\*] \(.*\)$/\1/p") - name23="@$name2nd@$name3rd" - if ( echo $name23 | grep -qi "@floppy" ); then - if ( echo $name23 | grep -qi "@cd") || ( echo $name23 | grep -qi "@dvd"); then - efibootmgr $efiquiet -o $boot2nd,$boot3rd,$boot1st$boot456 - fi - fi - fi - - return 0 -} - -## mkefifs function. -mkefifs() -{ - mount | grep "^$boot\>" > /dev/null - if [ $? = 0 ] ; then - echo 1>&2 "$PRG: $boot appears to be mounted! aborting." - return 1 - fi - - if (command -v mkdosfs > /dev/null 2>&1) ; then - [ -x `command -v mkdosfs` ] || FAIL=1 ; else FAIL=1 ; fi - if [ "$FAIL" = 1 ] ; then - echo 1>&2 "$PRG: mkdosfs is not installed or cannot be found" - return 1 - fi - - [ "$VERBOSE" = 1 ] && echo "$PRG: Creating DOS filesystem on $boot..." - mkdosfs -n bootstrap "$boot" > /dev/null - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: DOS filesystem creation failed!" - return 1 - fi - return 0 -} - -mkconf() -{ -## defaults for this are defined at the beginning of the script with -## other variables. - -# We want to create an append= line from the current /proc/cmdline, -# so things like console=ttyS0 get picked up automatically. -# We also want to filter out bits of cmdline we are not interested in. - -if [ -f /proc/cmdline ]; then - cmdline=`cat /proc/cmdline` -else - echo 1>&2 "$PRG: Warning: couldn't read /proc/cmdline, may need to add append=... to elilo.conf" - cmdline="" -fi - -append=`echo $cmdline | tr ' ' '\n' | grep -v "^BOOT_IMAGE=" | grep -v "^root=" | grep -v "^ro$" | tr '\n' ' '` -if [ ! -z "$append" ]; then append="append=\"$append\""; fi - -echo \ -"## elilo configuration file generated by elilo $VERSION - -install=$install -boot=$boot -delay=$timeout -default=$label -$append - -image=$image - label=$label - root=$root - read-only - -image=${image}.old - label=${label}OLD - root=$root - read-only -" > "$TMPCONF" || return 1 - - ## Copy the new elilo.conf to /etc - if [ -f $CONF ]; then - echo 1>&2 "$PRG: backing up existing $CONF as ${CONF}-" - rm -f ${CONF}- - mv $CONF ${CONF}- - fi - cp -f "$TMPCONF" "$CONF" - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured while writing to $conf" - return 1 - fi - -return 0 -} - -# check partition will be big enough for all we want to add to it - -chkspace() -{ - local imagefiles=`grep '^image[[:space:]]*=' $bootconf | \ - sed 's/^image[[:space:]]*=[[:space:]]*//' | grep -v ':'` - local initrdfiles=`grep '^[[:space:]]*initrd[[:space:]]*=' $bootconf | \ - sed 's/.*=[[:space:]]*//' | grep -v ':'` - local bytesneeded=`cat $imagefiles $initrdfiles $install $bootconf 2>/dev/null | wc -c` - # convert to KB, allowing 5% overhead - local kbneeded=$(( bytesneeded / 1024 + bytesneeded / 20480 )) - local kbavailable=$(df -k $TARGET | sed -n "s|^$boot[[:space:]]\+[0-9]\+[[:space:]]\+[0-9]\+[[:space:]]\+\([0-9]\+\).*$|\1|p") - if [ -z $kbavailable ]; then - echo 2>&1 "$PRG: unable to determine space on $boot, aborting" - return 1 - fi - if [ -d $TARGET/$EFIROOT ]; then - local kbused=$(du -ks $TARGET/$EFIROOT | sed -n "s/[ ].*$//p") - else - local kbused=0 - fi - [ "$VERBOSE" = 1 ] && echo "$PRG: ${kbneeded}KB needed, ${kbavailable}KB free, ${kbused}KB to reuse" - kbavailable=$(( kbavailable + kbused )) - if [ "$kbavailable" -lt "$kbneeded" ] ; then - echo 1>&2 "$PRG: Insufficient space on $boot, need ${kbneeded}KB, only ${kbavailable}KB available" - return 1 - fi -return 0 -} - - -## take out the trash. -cleanup() -{ - if [ -n "$TARGET" ]; then - TARGET= - [ "$VERBOSE" = 1 ] && echo "$PRG: Unmounting $boot" - umount "$boot" - [ $? != 0 ] && echo 2>&1 "$PRG: Warning, failed to unmount $TARGET" - fi - if [ -n "$TMPCONF" ] ; then rm -f "$TMPCONF" ; fi - if [ -d "$TMP/bootstrap.$$" ] ; then rmdir "$TMP/bootstrap.$$" ; fi - if [ "$umountproc" = 1 ] ; then umount /proc ; fi - return 0 -} - -########## -## Main ## -########## - -## absurdly bloated case statement to parse command line options. -if [ $# != 0 ] ; then - while true ; do - case "$1" in - -V|--version) - version - exit 0 - ;; - -h|--help) - usage - exit 0 - ;; - --debug) - DEBUG=1 - shift - ;; - -v|--verbose) - VERBOSE=1 - shift - ;; - --force) - # allow --force for now, boot-floppies 3.0.20 and - # systemconfigurator use that instead of --format - echo 1>&2 "$PRG: Warning: --force is now deprecated. Use --for\mat." - echo 1>&2 "Try \`$PRG --help' for more information." - FORMAT=yes - shift - ;; - --format) - FORMAT=yes - shift - ;; - --autoconf) - autoconf=1 - shift - ;; - -b|--boot) - if [ -n "$2" ] ; then - boot="$2" - ARGBT=1 - shift 2 - else - echo 1>&2 "$PRG: option requires an argument $1" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - fi - ;; - -i|--install) - if [ -n "$2" ] ; then - install="$2" - ARGBF=1 - shift 2 - else - echo 1>&2 "$PRG: option requires an argument $1" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - fi - ;; - -C|--config) - if [ -n "$2" ] ; then - CONF="$2" - bootconf="$2" - ERR=" Error in $CONF:" - shift 2 - else - echo 1>&2 "$PRG: option requires an argument $1" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - fi - ;; - --efiboot) - efiboot=1 - ARGNV=1 - shift - ;; - --timeout) - if [ -n "$2" ] ; then - timeout="$2" - bootconf=auto - shift 2 - else - echo 1>&2 "$PRG: option requires an argument $1" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - fi - ;; - --image) - if [ -n "$2" ] ; then - image="$2" - bootconf=auto - shift 2 - else - echo 1>&2 "$PRG: option requires an argument $1" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - fi - ;; - --label) - if [ -n "$2" ] ; then - label="$2" - bootconf=auto - shift 2 - else - echo 1>&2 "$PRG: option requires an argument $1" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - fi - ;; - --root) - if [ -n "$2" ] ; then - root="$2" - bootconf=auto - shift 2 - else - echo 1>&2 "$PRG: option requires an argument $1" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - fi - ;; - "") - break - ;; - *) - echo 1>&2 "$PRG: unrecognized option \`$1'" - echo 1>&2 "Try \`$PRG --help' for more information." - exit 1 - ;; - esac - done -fi - -## check that are root -if [ `id -u` != 0 ] ; then - echo 1>&2 "$PRG: requires root privileges, go away." - exit 1 -fi - -## check that autoconf options are only specified with --autoconf -if [ "$bootconf" = "auto" -a "$autoconf" = "0" ] ; then - echo 1>&2 "$PRG: Auto-config options specified without --autoconf." - exit 1; -fi - -## check that specified config file exists, unless we are to generate it, -## which case we assume all options are done on the command line. -if [ "$autoconf" = "0" ] ; then - confexist || exit 1 -fi - -## /proc is needed to parse /proc/partitions, etc. -if [ ! -f /proc/uptime ]; then - [ "$VERBOSE" = 1 ] && echo "$PRG: Mounting /proc..." - mount -t proc proc /proc 2> /dev/null - if [ $? != 0 ]; then - echo 1>&2 "$PRG: Failed to mount /proc, aborting." - exit 1 - fi - umountproc=1 -fi - -## elilo.conf autogeneration. MUST have secure mktemp to -## avoid race conditions. GNU's mktemp qualifies. -if [ "$autoconf" = "1" ] ; then - TMPCONF=`mktemp -q "$TMP/$PRG.XXXXXX"` - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: Could not create temporary file, aborting." - exit 1 - fi - mkconf - if [ $? != 0 ] ; then - echo 1>&2 "$PRG: An error occured generating elilo.conf, aborting." - exit 1 - fi - - bootconf="$TMPCONF" -fi - -## Checks if each option was defined on the command line, and if so -## don't read it from the configuration file. this avoids -## configuration options from being set null, as well as command line -## options from being clobbered. -[ "$ARGBT" != 1 -a $(parseconf ck boot) = 0 ] && boot=`parseconf str boot` - -## ffs!! rtfm! foad! -if [ "$boot" = unconfigured ] ; then - echo 1>&2 "$PRG: You must specify the device for the bootstrap partition. (ie: -b /dev/hdaX)" - echo 1>&2 "$PRG: Try \`$PRG --help' for more information." - exit 1 -fi - -## validate configuration for sanity. -checkconf || exit 1 - -if [ "$FORMAT" = "yes" ]; then - mkefifs || exit 1 -fi - -[ "$VERBOSE" = 1 ] && echo "$PRG: Checking filesystem on $boot..." -dosfsck $boot > /dev/null -if [ $? != 0 ]; then - echo 1>&2 "$PRG: Filesystem on $boot is corrupt, please fix that and rerun $PRG." - exit 1 -fi - -mnt || exit 1 -chkspace || exit 1 -copyfiles || exit 1 - -umount $TARGET -if [ $? != 0 ]; then - echo 1>&2 "$PRG: Failed to unmount $boot" - exit 1 -fi -TARGET= - -[ "$VERBOSE" = 1 ] && echo "$PRG: Installation complete." - -exit 0 |