home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / live / usr / sbin / mkboot < prev    next >
Text File  |  1998-08-16  |  4KB  |  147 lines

  1. #!/bin/bash
  2. # mkboot: make the system bootable
  3. # Debian GNU/Linux
  4. # Copyright 1996-1997 Guy Maor <maor@debian.org>
  5. # This is free software; see the GNU General Public License version 2
  6. # or later for copying conditions.  There is NO warranty.
  7.  
  8. PATH=$PATH:/sbin:/usr/sbin
  9.  
  10. # root partition
  11. rootpart=$(rdev | cut -d ' ' -f 1)
  12.  
  13.  
  14. # check whether LILO is installed
  15. function lilocheck {
  16.     echo -en "\nChecking for LILO..."
  17.     if [ $(whoami) != root ] ; then
  18.     echo "Only root can check for LILO"
  19.         return 1;
  20.     fi
  21.     if [ ! -f /etc/lilo.conf -o ! -x /sbin/lilo ] ; then
  22.     echo "No"
  23.     return 1;
  24.     fi
  25.     bootpart=$(perl -ne 'print $1 if /^\s*boot\s*=\s*(\S*)/' /etc/lilo.conf)
  26.     if [ -z "$bootpart" ] ; then
  27.     # lilo defaults to current root when 'boot=' is not present
  28.     bootpart=$rootpart
  29.     fi
  30.     lilosig=$(dd if=$bootpart ibs=2 skip=1 count=2 2>&-)
  31.     if [ "$lilosig" != "LILO" ] ; then
  32.     echo "\nYes, but I couldn't find a LILO signature on $bootpart"
  33.     echo "Check your /etc/lilo.conf, or run /sbin/lilo by hand."
  34.     return 1;
  35.     fi
  36.     echo "Yes, on $bootpart"
  37.     return 0;
  38. }
  39.  
  40.  
  41. # make a lilo boot disk
  42. function makelilo {
  43. bash <<- EOF
  44.     set -e
  45.     trap "set +e; cd /; umount /dev/fd0; rmdir /tmp/boot$$" 0
  46.     set -v
  47.     mkdir /tmp/boot$$
  48.     mke2fs -q /dev/fd0
  49.     mount -t ext2 /dev/fd0 /tmp/boot$$
  50.     cd /tmp/boot$$
  51.     cp $1 /boot/boot.b .
  52.     lilo -C - <<- EOF2
  53.     boot = /dev/fd0
  54.     install = boot.b
  55.     map = map
  56.     compact
  57.     prompt
  58.     timeout = 50
  59.     read-only
  60.     image = $kernel
  61.         label = linux
  62.         root = $rootpart
  63.     EOF2
  64. EOF
  65. }
  66.  
  67.  
  68. # make a simple boot disk
  69. function makesimple {
  70. bash <<- EOF
  71.     set -ev
  72.     dd if=$1 of=/dev/fd0
  73.     rdev /dev/fd0 $rootpart
  74.     rdev -R /dev/fd0 1
  75. EOF
  76. }    
  77.  
  78.  
  79.  
  80. # make a boot disk
  81. function makedisk {
  82.     kernel=${1:-/boot/vmlinuz}
  83.     if [ ! -r $kernel ] ; then
  84.     echo "Error: Can't read $kernel."
  85.     exit 1
  86.     fi
  87.  
  88.     boottype="lilo"
  89.     if [ $(whoami) != root ] ; then
  90.     echo "Since you don't have root permissions, I can't put LILO on the diskette."
  91.     echo "I will make a non-LILO diskette instead, but it won't be as useful.  You"
  92.     echo "can hit <Ctrl-C> to cancel."
  93.     boottype="simple"
  94.     fi
  95.  
  96.     echo -en "\nInsert a floppy diskette into your boot drive, and press <Return>. "
  97.     read input
  98.     diskok=0
  99.     while [ "$diskok" != 1 ] ; do
  100.     echo -e "\nCreating a $boottype bootdisk..."
  101.     make$boottype $kernel
  102.     if [ $? -eq 0 ] ; then
  103.         diskok=1
  104.     else
  105.         echo -e "\nThere was a problem creating the boot diskette.  Please make sure that"
  106.         echo "you inserted the diskette into the correct drive and that the diskette"
  107.         echo "is not write-protected."
  108.         echo -en "\nWould you like to try again? (y/n) "
  109.         read input
  110.         if [ "$input" != "y" ] ; then
  111.         return 1
  112.         fi
  113.     fi
  114.     done
  115.     echo "...Success."
  116.     return 0
  117. }
  118.  
  119. if [ "$1" = "-installkernel" ] ; then
  120.     shift
  121.     echo "In order to use the new kernel image you have just installed, you"
  122.     echo "will need to reboot the machine.  First, however, you will need to"
  123.     echo "either make a bootable floppy diskette or re-run LILO."
  124.  
  125.     lilocheck
  126.     if [ $? -eq 0 ] ; then
  127.     echo -en "\nShould I run /sbin/lilo? (y/n) "
  128.     read input
  129.     if [ "$input" = "y" ] ; then
  130.         /sbin/lilo && exit 0
  131.             echo "There was a problem running /sbin/lilo."
  132.     fi
  133.     fi
  134.  
  135.     echo -en "\nShould I make a bootdisk? (y/n) "
  136.     read input
  137.     if [ "$input" = "y" ] ; then
  138.     makedisk $1 && exit 0
  139.     fi
  140.  
  141.     echo -e "\nWARNING: Your system is probably unbootable now.  After correcting any"
  142.     echo "problems, rerun this script with the command \`mkboot -installkernel'."
  143.     exit 1
  144. fi
  145.  
  146. makedisk $1
  147.