#!/bin/sh # Vector Linux First Time Configuration # # This script is a bit complicated, because there are many scenarios # during the SETUP (stage1) and the FIRST BOOT (stage2) # # 1. STAGE 1 # For stage1, this script is called by setup-install (in the initrd) # There are two possible cases: NORMAL and SHORT # # 1.a. NORMAL STAGE 1 # This happen during normal setup from CDROM, or Windows loadlin # The setup-install calls this script like this: # chroot /mnt/target /sbin/config-stage1 vector-virgin [$KEYMAP] # # Then, there are 3 possible scenarios: # # 1.a.1 NORMAL STAGE 1 - CORRECT KERNEL # If the running kernel is present on the installed system, # do FULL config then prepare the LIGHT stage2 # # 1.a.2 NORMAL STAGE 1 - SKIP # The kernel is correct, but user choose SKIP # do SHORT config then prepare the HEAVY stage2 # # 1.a.3. NORMAL STAGE 1 - INCORRECT KERNEL # The kernel is not present on the installed system. # do SHORT config then prepare the HEAVY stage2 # Note: this feature allows the floppy install using small 2.4 kernel # although the installed system has the big 2.6 kernel # # 1.b. SHORT STAGE 1 # This is the case during direct ISO install by vinstall # The setup-install calls this script like this: # chroot /mnt/target /sbin/config-stage1 vector-virgin-short # # Because the running Linux environment is a stranger, safe option is # do the SHORT config then prepare the HEAVY stage2 # # # 2. STAGE 2 # Stage 2 is prepared by STAGE-1 by making an auto-init script # /var/log/setup/init/config-stage2 # That auto-init script will be called by rc.S during the boot. # According on how it is prepared by STAGE-1, the config-stage2 may # call this script as LIGHT or HEAVY # # 2.a. STAGE 2 HEAVY # Called like this by config-stage2 # config-stage1 vector-virgin-heavy [$KEYMAP] # This will do the FULL config # # 2.b. STAGE 2 LIGHT # Called like this by config-stage2 # config-stage1 vector-virgin-light [$KEYMAP] # This only setup the basic service and congratulates user # # Hah ... I can't believe I made this script. # # (c) Eko M. Budi, 2004 # (c) Vector Linux, 2004 # # Released under GNU GPL export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/opt/bin" ##################################################### # Init some variables RUN_MODE=$1 ROOT_DEVICE=$2 KEYMAP=$3 KERNEL_VERSION=`uname -r` SETUP_DIR="/var/log/setup" INIT_DIR="$SETUP_DIR/init" TMP_DIR="$SETUP_DIR/tmp" ACTION_LIST="" # Ok, now get the functions vdir=$(dirname $0) . $vdir/vasm-functions check_root ##################################################### # check stage if [ -x $INIT_DIR/config-stage2 ]; then CONFIG_STAGE=2 rm -f $INIT_DIR/config-stage2 fi ## Making config-stage2 set_stage2_light() { mkdir -p $INIT_DIR chmod 700 $INIT_DIR cat < $INIT_DIR/config-stage2 #!/bin/sh exec /sbin/config-stage1 vector-virgin-light $ROOT_DEVICE $KEYMAP EOF chmod a+x $INIT_DIR/config-stage2 } set_stage2_heavy() { mkdir -p $INIT_DIR chmod 700 $INIT_DIR cat < $INIT_DIR/config-stage2 #!/bin/sh exec /sbin/config-stage1 vector-virgin-heavy $ROOT_DEVICE $KEYMAP EOF chmod a+x $INIT_DIR/config-stage2 } # Set default boot mode set_bootmode() { finit=/etc/inittab cat $finit \ | sed "s/^id:[0-9]:initdefault:/id:$1:initdefault:/" > ${finit}.new \ && mv -f ${finit}.new $finit } # Set default boot mode get_bootmode() { BOOT_MODE=2 finit=/etc/inittab LINE=`grep "^id:[0-9]:initdefault:"` if [ $LINE ]; then BOOT_MODE=`echo $LINE | cut -f2 -d:` fi } # Initializing & set keymap mk_keymap() { MAPNAME=$1 cat < /etc/rc.d/rc.keymap chmod +x /etc/rc.d/rc.keymap sleep 2 else KMAPSET="on" KEYMAP="us" fi else KEYMAP="us" fi } # detect RAID harddisk, # then change the default vmlinuz to vmlinuz-raid or vmlinuz-sata set_vmlinuz() { if grep -qe "^md.*:" /proc/mdstat 2>/dev/null; then VMOLD=`readlink /boot/vmlinuz` VMVERSION=${VMOLD##*-} if [ -f /boot/vmlinuz-raid-$VMVERSION ]; then (cd /boot; rm -rf vmlinuz; ln -sf vmlinuz-raid-$VMVERSION vmlinuz) elif [ -f /boot/vmlinuz-sata-$VMVERSION ]; then (cd /boot; rm -rf vmlinuz; ln -sf vmlinuz-sata-$VMVERSION vmlinuz) fi fi } ################################################################## # INDIVIDUAL DIALOGS #--------------------------------------------- menu_keymap() { echo $ACTION_LIST | grep -qw "KEYMAP" || return $1 if [ -d /etc/X11/xkb ]; then $vdir/vxkbset else $vdir/vkmapset fi } #---------------------------------------------------------------- # Set the zone first, so every time stamp will be right after this menu_zone() { echo $ACTION_LIST | grep -qw "ZONE" || return $1 $vdir/vzoneset } #--------------------------------------------- menu_restore() { echo $ACTION_LIST | grep -qw "RESTORE" || return $1 $vdir/vbackupsys --install } #--------------------------------------------- menu_autosetup() { echo $ACTION_LIST | grep -qw "AUTOSETUP" || return $1 if [ $1 = 0 ]; then $vdir/vhwconf ## Update kernel modules depmod -A > /dev/null 2>&1 else return $1 fi return 0 } #--------------------------------------------- menu_net() { ifconfig -s|grep -v Iface|grep -v lo|cut -d " " -f 1 >>/etc/sysconfig/nics nics=`cat /etc/sysconfig/nics|wc -l` if [ $nics -gt 1 ]; then INTERFACES=$( perl -we 'print join(q( ), map { chomp $_; $_ } <>), "\n";' /etc/sysconfig/nics) sed "s/eth0/$INTERFACES/g" /etc/ifplugd/ifplugd.conf.new mv /etc/ifplugd/ifplugd.conf /etc/ifplugd/ifplugd.conf.bak mv /etc/ifplugd/ifplugd.conf.new /etc/ifplugd/ifplugd.conf fi echo $ACTION_LIST | grep -qw "NETWORK" || return $1 if grep eth0 /etc/modprobe.conf &>/dev/null || \ grep eth0 /etc/modules.conf &>/dev/null || \ grep NETCARD0 /etc/sysconfig/vector &>/dev/null ; then # Setup loopback # ifconfig lo 127.0.0.1 netmask 255.255.255.0 up # setup networking $vdir/vnetconf --no-start return $? else if [ $1 = 0 ]; then infobox "Network card is not present. Skipping" sleep 2 fi return $1 fi return 0 } #--------------------------------------------- menu_x() { echo $ACTION_LIST | grep -qw "XWINDOW" || return $1 if [ -x /usr/X11R6/bin/XFree86 ]; then $vdir/vmkfx86cfg || return $? elif [ -x /usr/X11R6/bin/Xorg ]; then $vdir/vxconf || return $? else if [ $1 = 0 ]; then infobox "X-Windows is not present. Skipping" sleep 2 fi return $1 fi set_bootmode 4 $vdir/vbootset if [ "$RUN_MODE" = "vector-virgin-heavy" ]; then telinit Q fi return 0 } #--------------------------------------------- menu_alsa() { echo $ACTION_LIST | grep -qw "SOUND" || return $1 chmod +x /etc/rc.d/rc.alsa $vdir/valsaconf } #--------------------------------------------- menu_hw() { echo $ACTION_LIST | grep -qw "HWINIT" || return $1 $vdir/vhwset } #--------------------------------------------- menu_srv() { echo $ACTION_LIST | grep -qw "SRVINIT" || return $1 $vdir/vsrvset --default } #--------------------------------------------- menu_admin() { echo $ACTION_LIST | grep -qw "ADMIN" || return $1 DEF_ITEM="ROOT" while [ 0 ]; do TITLE="USER ADMINISTRATION" TEXT="\n Linux is a secure system, thus every user must have an account for logging into the system. The first and the most powerful account is called a 'root'. You should login as root on special occasions only such as administering the system. For normal every day work, it is safer to login as an ordinary user.\n\n The following menu allows you to change the root password and to create some ordinary users." $WCMD --backtitle "$BACKTITLE" --title "$TITLE" \ --default-item $DEF_ITEM --menu "$TEXT" 18 68 3 \ "ROOT" "change root password" \ "USER" "add a new user" \ "DONE" "finish administering the users" \ 2>$freply || return $? case `cat $freply` in ROOT) $vdir/vpasswd root DEF_ITEM="USER" ;; USER) $vdir/vuseradd DEF_ITEM="DONE" ;; DONE) return 0 ;; esac done } #--------------------------------------------- menu_finish1_nokernel() { TEXT="\n Vector Linux has been installed successfully.\n However, we have to reboot for proper configuration." $DCMD --backtitle "$BACKTITLE" --title "REBOOT FOR PROPER KERNEL" \ --msgbox "$TEXT" 9 58 2> /dev/null clean_exit 0 } #--------------------------------------------- menu_finish1_short() { TEXT="\n Vector Linux has been installed successfully.\n Let's reboot and continue with the configuration." $DCMD --backtitle "$BACKTITLE" --title "REBOOT IS NEEDED" \ --msgbox "$TEXT" 9 54 2> /dev/null clean_exit 0 } #--------------------------------------------- menu_finish1() { infobox "Vector Linux has been installed and configured" "SUCCESS" set_stage2_light sleep 3 clean_exit 0 } #--------------------------------------------- menu_finish2_light() { TEXT="\n Vector Linux is now ready for you.\n Enjoy and happy Vectoring ..." $DCMD --backtitle "$BACKTITLE" --title "CONGRATULATIONS" \ --msgbox "$TEXT" 8 40 2> /dev/null clear echoc "Vector Linux will be ready on the road in a moment ..." green echo "Backing up system files .." # copy a new skeleton for root #cd /root; cp -a /etc/skel/. .) &> /dev/null touch /etc/fstab &> /dev/null touch /etc/lilo.conf &> /dev/null # Backup backupsys &> /dev/null #echo "Updating database .." #updatedb &> /dev/null sleep 2 clean_exit 0 } #--------------------------------------------- menu_finish2_heavy() { TEXT="\n Vector Linux is ready at your service.\n You may use VASM for further configuration.\n Enjoy and happy Vectoring !!!" $DCMD --backtitle "$BACKTITLE" --title "CONGRATULATIONS" \ --msgbox "$TEXT" 11 48 2> /dev/null clear echoc "Final finishing touch ..." green # copy a new skeleton for root #(cd /root; cp -a /etc/skel/. .) &> /dev/null echo "Backing up system files .." touch /etc/fstab &> /dev/null touch /etc/lilo.conf &> /dev/null backupsys &> /dev/null #echo "Updating database for the first time ..." #updatedb &> /dev/null sleep 2 # Reboot for first time install if [ "$CONFIG_STAGE" = "2" ]; then clear echo "For stability, we have to reboot. Please be patient ... " telinit 6 clean_exit 0 fi } menu_finish_auto() { TEXT="\n Vector Linux has been reconfigured.\n Keep happy vectoring ..." TITLE="DONE" $DCMD --backtitle "$BACKTITLE" --title "$TITLE" \ --msgbox "$TEXT" 8 40 2> /dev/null clean_exit 0 } ################################################################### # Wizard utilities confirm_exit() { TEXT="\n Configuration has not finished yet.\n Are you sure to quit now ?" $DCMD --title "CANCEL CONFIGURATION" --yesno "$TEXT" 7 40 2> /dev/null if [ $? = 0 ]; then clean_exit 1 fi } wizard1() { if [ -z "$1" ]; then # reaching here mean the wizard was a success clean_exit 0; fi local STATUS=0 local PROG=$1 shift # Invoke the menu while [ 0 ]; do dbug $PROG $PROG $STATUS STATUS=$? dbug $PROG result=$STATUS case $STATUS in 0) # OK wizard1 "$@" STATUS=$? ;; 2|3|255) # BACK return 3 ;; 1) # Cancel confirm_exit ;; esac done } ############################################################# # Here we go the main configuration menu_config() { FINISH=$1 TITLE="VECTOR LINUX CONFIGURATION" TEXT="\n So far so good. Now we are going configure this puppy.\n The steps are quick and easy, because we will use auto-detect.\n However, you may skip some steps if you like.\n Please use [space] bar to toggle the steps then hit :" if ls /home/backupsys/*.tar.bz2 &>/dev/null; then DIMENSION="20 74 9" $DCMD --backtitle "$BACKTITLE" --title "$TITLE" \ --checklist "$TEXT" $DIMENSION \ "KEYMAP" "set keyboard map (default="$KEYMAP")" $KMAPSET \ "ZONE" "set time zone (essential)" on \ "RESTORE" "restore backupsys found on /home (optional)" off \ "AUTOSETUP" "detect and set basic hardware (essential)" on \ "NETWORK" "set networking (recommended)" on \ "SOUND" "set sound system (recommended)" on \ "XWINDOW" "set X-Window GUI system (recommended)" on \ "HWINIT" "trimmed down hardware initialization (optional)" on \ "ADMIN" "set root password and add users (recommended)" on \ 2>$freply || return $? ACTION_LIST=`cat $freply` wizard1 menu_keymap menu_zone menu_restore menu_autosetup menu_net \ menu_alsa menu_x menu_hw menu_admin $FINISH else DIMENSION="19 74 8" $DCMD --backtitle "$BACKTITLE" --title "$TITLE" \ --checklist "$TEXT" $DIMENSION \ "KEYMAP" "set keyboard map (default="$KEYMAP")" $KMAPSET \ "ZONE" "set time zone (essential)" on \ "AUTOSETUP" "set basic hardware (essential)" on \ "NETWORK" "set networking (optional)" on \ "SOUND" "set sound system (optional)" on \ "XWINDOW" "set X-Window GUI system (optional)" on \ "HWINIT" "trimmed down hardware initialization (optional)" on \ "ADMIN" "set root password and add users (recommended)" on \ 2>$freply || return $? ACTION_LIST=`cat $freply` wizard1 menu_keymap menu_zone menu_autosetup menu_net \ menu_alsa menu_x menu_hw menu_admin $FINISH fi } ############################################################# # Here we go the main procedures for STAGE 1 stage1_init() { # Do something to impress infobox "Checking and initializing ..." "Wait a moment please" # check if we are running in a correct chroot directory CHECK_FILES="/boot/vmlinuz /etc/vector-version" for cfile in $TEST_FILES; do if [ ! -f $cfile ]; then errorbox "Cannot find $cfile. This is not me. Bailing out ...!" clean_exit 1 fi done # Setup stage2-heavy as the default set_stage2_heavy # Load libraries ldconfig &> /dev/null depmod -A &> /dev/null # make standard directories mkdir -p /mnt/cdrom /mnt/win /mnt/linux /mnt/pendrive /mnt/floppy # initial settings set_vmlinuz set_keymap set_bootmode 2 # Setting up services #service -b &> /dev/null # Cleanup KDE menu kmenucleanup &> /dev/null } menu_lilo() { while [ 0 ]; do $vdir/vliloconf / $ROOT_DEVICE && return 0 confirm_exit done } ##----------------------------------- stage1_short() { stage1_init menu_lilo menu_finish1_short sleep 2 } ##------------------------------------ stage1() { # go long only if we have the correct kernel modules if [ -d /lib/modules/$KERNEL_VERSION ] || [ -d /lib/modules/${KERNEL_VERSION}n ] ; then stage1_init menu_lilo check_xwindow while [ 0 ]; do menu_config menu_finish1 confirm_exit done else stage1_init menu_lilo menu_finish1_nokernel sleep 2 fi return $? } ############################################################# # STAGE 2 stage2_init() { # Do something to impress infobox "Continuing first time configuration ..." "Almost there" # check if we are running in a correct system CHECK_FILES="/boot/vmlinuz /etc/vector-version" for cfile in $TEST_FILES; do if [ ! -f $cfile ]; then errorbox "Cannot find $cfile. This is not me. Bailing out ...!" clean_exit 1 fi done sleep 2 } ##------------------------------------ stage2_light() { stage2_init menu_finish2_light } ##------------------------------------ stage2_heavy() { stage2_init ldconfig &> /dev/null depmod -A &> /dev/null set_keymap check_xwindow while [ 0 ]; do menu_config menu_finish2_heavy confirm_exit done } ######################################################## auto_setup() { check_xwindow TITLE="VECTOR LINUX AUTOSETUP" TEXT="\n The autosetup walks you through a series of essential configurations as listed below.\n Please use [space] bar to toggle the steps then hit :" DIMENSION="18 74 6" $DCMD --backtitle "$BACKTITLE" --title "$TITLE" \ --checklist "$TEXT" $DIMENSION \ "AUTOSETUP" "set basic hardware (essential)" on \ "NETWORK" "set networking (optional)" on \ "SOUND" "set sound system (optional)" on \ "XWINDOW" "set X-Window GUI system (optional)" on \ "HWINIT" "enable hardware initialization (optional)" on \ "SRVINIT" "enable services initialization (optional)" on \ 2>$freply || return $? ACTION_LIST=`cat $freply` #echo $ACTION_LIST wizard1 menu_autosetup menu_net \ menu_alsa menu_x menu_hw menu_srv menu_finish_auto } ################################################################### # Here we go the main menu case $RUN_MODE in vector-virgin) stage1 ;; vector-virgin-short) stage1_short ;; vector-virgin-heavy) stage2_heavy ;; vector-virgin-light) stage2_light ;; *) # normal autosetup auto_setup ;; esac clean_exit 0