#!/bin/bash #(C)DatuX 2005 - all rights reserved rm /INSTALLOK 2>/dev/null . dialoglib.sh || exit 1 PRODUCT=`cat /proc/cmdline | sed 's/.*theme://g' | cut -c1` BRAND="Syn-3" PKGPATH=../packages TARGETPATH=/mnt/instroot #open a few vt's for debugging openvt bash openvt bash openvt bash #################################### Set background when in X if [ "$DISPLAY" ]; then xv -root -quit -max -smooth /etc/splash/S/800x600.jpg fi #################################### Select langauge TITLE="Language selection" QUERY="`_SelectLanguage`" LANGS= for ID in `ls lang_*|sort -r|sed s/lang_//|sed 's/.sh//'`; do LANGS="$LANGS '$ID' '`_Lang_$ID`' " done export LANG LANG= while [ "$LANG" = "" ]; do LANG=`menu $LANGS` || abort done #reload with new language . dialoglib.sh || exit 1 #################################### STEP 1 #language, license and installmode TITLE="`_Step1License`" if [ $DISPLAY ]; then license license.txt || abort else license license.txt accept "`_DoYouAcceptTheLicense`" || abort fi ## Select install mode MODES="NORMAL '`_NormalMode`' ADVANCED '`_AdvancedMode`' SECONDARY '`_SlaveMode`' " #disabled, we hebben nu een hybride image die ook makkelijk naar usb kan #COPY '`_CopyInstaller`' TITLE="`_SelectInstallMode`" QUERY="`_SelectInstallMode`" MODE= while [ "$MODE" = "" ]; do MODE=`menu $MODES` || abort #copy installer will return to this menu if [ "$MODE" == "COPY" ]; then sh copyinstallerask.sh /mnt/cdrom MODE="" fi done #################################### STEP 2 TITLE="`_Step2Configuration`" ########### check system progress "`_CheckingSystem`" DISCS=`unuseddisks` if [ "$DISCS" == "" ]; then abort "`_ErrorNoDisksDetected`" fi if [ "$MODE" != "ADVANCED" ]; then if ! ifconfig eth0 &>/dev/null; then abort "`_ErrorNoNetworkCards`" fi fi ########### select discs to use for DISC in $DISCS; do #get extra info for use to regonize disc SELECT="$SELECT $DISC '`getdiskinfo $DISC`' 0"; done QUERY=`_SelectDiscsToUse` DISCS= while ! [ "$DISCS" ]; do DISCS=`checklist $SELECT` || abort done #disabled, working on this #if yesno `_AutomaticPartitioning`; then if true; then #automatic partitioning ########## confirmation for discs QUERY="`_WarningDisksWillBeErased` `echo $DISCS|sed 's/ /\n/g'` `_DoYouWantToContinue` " QUERY="`quote "$QUERY"`"; if ! nextcancel $QUERY; then abort fi; else shell 'Dit is nog niet af, fix nu zelf de partities en gebruik initboot.sh en initdata.sh voor de data en boot partities' fi #Specifify the default settings for autopart.sh here: #default sizes for partitions export SIZE_BOOT=128M export SIZE_ROOT=10G export SIZE_SWAP=4G export SIZE_HOME= export SIZE_FREE=10G export USE_GPT=1 export USE_MD=1 if [ "$MODE" != "NORMAL" ]; then if ! yesno "Do you want to use GPT partioning? (select NO to use legacy msdos paritioning)"; then USE_GPT= fi if ! yesno "Do you want to use software RAID? (Linux MD)\nChoose NO if you have a hardware RAID controller or a single disk thats >2TB.\n(If you selected multple disks, the disks will be combined in logical volume.)"; then USE_MD= fi QUERY="Enter boot partition size. Default: $SIZE_BOOT" SIZE_BOOT=`inputbox $SIZE_BOOT` QUERY="Enter root partition size. Default: $SIZE_ROOT" SIZE_ROOT=`inputbox $SIZE_ROOT` QUERY="Enter swap partition size. Default: $SIZE_SWAP Leave blank for no swap." SIZE_SWAP=`inputbox $SIZE_SWAP` QUERY="Enter home partition size. Leave blank to use all free space." SIZE_HOME=`inputbox $SIZE_HOME` if [ "$SIZE_HOME" == "" ]; then QUERY="How much snapshot space do you want? Default: $SIZE_FREE" SIZE_FREE=`inputbox $SIZE_FREE` fi fi #secondary server network configuration if [ "$MODE" == "SECONDARY" ] ; then if [ "$DISPLAY" ]; then xterm ./redundancy_status.sh & sleep 1 fi export COUNT COUNT=0 CARDS="`linkbeep -l|cut -f3-4|while read CARD; do echo "'eth$COUNT' '$CARD'";(( COUNT++ ));done`" QUERY="`_SelectNetworkCard`" CARD= while [ "$CARD" = "" ]; do CARD=`menu $CARDS` || abort done MAC=`cat /sys/class/net/$CARD/address` ZONES="`cat zones.txt`" QUERY="`_SelectNetworkZone`" ETH= while [ "$ETH" = "" ]; do ETH=`menu $ZONES` || abort done QUERY="`_EnterPrimaryIP`" while ! ./checkip.sh "$LOCAL_IP"; do LOCAL_IP=`inputbox 169.254.13.1` done QUERY="`_EnterSecondaryIP`" while ! ./checkip.sh "$REMOTE_IP"; do REMOTE_IP=`inputbox 169.254.13.2` done if yesno "Is auto split-brain recovery enabled on the other server?"; then AUTO_RECOVER="--after-sb-0pri discard-least-changes --after-sb-1pri discard-secondary" else AUTO_RECOVER="" fi #normal network configuration #not for certain products and slaves elif [ "$PRODUCT" != "P" ] && [ "$PRODUCT" != "K" ]; then while true; do QUERY="`_EnterIP`" IP= while ! ./checkip.sh "$IP"; do IP=`inputbox` done QUERY="`_EnterNetmask`" NETMASK= while ! ./checkip.sh "$NETMASK"; do NETMASK=`inputbox` done QUERY="`_EnterGateway`" GATEWAY=bla while ! ./checkip.sh "$GATEWAY" && [ "$GATEWAY" ]; do GATEWAY=`inputbox` done QUERY="`_CheckNetworkSettings $IP $NETMASK $GATEWAY`" QUERY="`quote "$QUERY"`"; nextcancel $QUERY && break done fi ############ ASK IF USER WANTS TO STRESS TEST if [ "$MODE" == "ADVANCED" ] && ! yesno "`_RunStressTest`"; then STRESS=1 fi ############################### STEP 3 TITLE="`_Step3Installation`" #prepare logfile with additional info: _InstallationFailedCheckThisInfo > /tmp/initdisk.log progress "`_InitializingDisks`" ./autopart.sh $DISCS >> /tmp/initdisk.log CODE=$? #we need a reboot? if [ $CODE == "2" ]; then abort "`_RebootRequiredForPartioning`" fi #failed some other way? if [ $CODE == "1" ]; then showfile /tmp/initdisk.log abort fi ################################################ if [ "$MODE" == "SECONDARY" ]; then ############################### prepare for slavemode progress "Preparing for secondary server installation..." #The only thing we need for a drbd slave is a drbd config. #The rest will get here automaticly after #the current boot continues and the drbd syncronisation is started. #mount our boot partition mkdir -p $TARGETPATH/boot &>/dev/null if ! mount /dev/md0 $TARGETPATH/boot 2>/dev/null; then abort "`_ErrorMountingDisk`" fi #temporary drbd configuration to bootstrap the system #it will be overwritten during syncronisation. echo -e "$MAC\t$ETH\n" > $TARGETPATH/boot/if-assign.conf echo -e "CLUSTER_ID=all\nDRBD=1\nETH=$ETH\nRATE=10000\nLOCAL_IP=$LOCAL_IP\nREMOTE_IP=$REMOTE_IP\nREBUILD=1\nAUTO_RECOVER='$AUTO_RECOVER'\t" > $TARGETPATH/boot/drbd.conf umount $TARGETPATH/boot else ############################### normale mode, install packages progress "`_MountingDisks`" mkdir -p $TARGETPATH &>/dev/null if ! mount -o inode32 /dev/syn3/root $TARGETPATH 2>/dev/null; then abort "`_ErrorMountingDisk`" fi mkdir $TARGETPATH/home &>/dev/null if ! mount -o inode32 /dev/syn3/home $TARGETPATH/home 2>/dev/null; then abort "`_ErrorMountingDisk`" fi mkdir $TARGETPATH/boot &>/dev/null if ! mount /dev/md0 $TARGETPATH/boot 2>/dev/null; then abort "`_ErrorMountingDisk`" fi # make sure /var/log is stored in /home: mkdir -p $TARGETPATH/home/system/log mkdir -p $TARGETPATH/var ln -s ../home/system/log $TARGETPATH/var/log #run stresstest if [ "$STRESS" ]; then progress "`_RunningStresstestPressEnterToExit`" swapon /dev/syn3/swap cd $TARGETPATH/home ifconfig eth0 $IP $NETMASK &>/dev/null if ! execute syn3-stress $GATEWAY 1>&2; then msgbox "`_WarningStresstestFailed`" fi swapoff /dev/syn3/swap fi #install packages LIST="$PKGPATH/install.list" TOTAL=`cat $LIST|wc -l`; COUNT=0 for SHORTPKG in `cat $LIST`; do # packagename-version-arch-build.tgz PKG="$PKGPATH/$SHORTPKG-*.tgz" echo "XXX"; BASENAME=`basename $PKG` echo -e "`_InstallingPackage \"$SHORTPKG ($BASENAME)\"` ..." echo "XXX"; ROOT=$TARGETPATH installpkg $PKG &> /tmp/insterr.log || exit 1 (( COUNT++ )) (( PERC=99*COUNT/TOTAL )) #voorkom vroegtijdige exit van dialog: if [ $PERC -gt 99 ]; then PERC=99 fi echo $PERC done | gauge "`_InstallingPackages`" INSTERR=$PIPESTATUS #something went wrong? if [ $INSTERR != "0" ]; then _InstallationFailedCheckThisInfo > /tmp/error.log cat /tmp/insterr.log >> /tmp/error.log showfile /tmp/error.log abort "`_InstallationHasFailed`" fi ############################### STEP 4 TITLE="`_Step4FinishInstallation`" mkdir -p $TARGETPATH/etc/network touch $TARGETPATH/etc/network/adaptor.conf if [ "$IP" ]; then echo "0,$IP,$NETMASK,0" > $TARGETPATH/etc/network/adaptor.conf fi echo "$GATEWAY" > $TARGETPATH/etc/network/gateway.conf cp version $TARGETPATH/etc/syn3-version || exit 1 chmod 644 $TARGETPATH/etc/syn3-version progress "`_PreparingSystem`" _ErrorWhilePreparing > /tmp/preproot.log if ! ./preproot.sh $TARGETPATH $IP >> /tmp/preproot.log 2>&1; then showfile /tmp/preproot.log abort fi fi #non-slave sync ############################# cleanup progress "`_FinishedSystemWillStart`" sleep 5 #ruim de zooi op, zodat we verder kunnen booten alsof #het een normaal systeem is cd / umount $TARGETPATH/home umount $TARGETPATH/boot umount $TARGETPATH #important, otherwise rest of the boot procedure might get confused vgchange -an mdadm -S /dev/md0 mdadm -S /dev/md1 #markeer installatie als zijnde gelukt touch /INSTALLOK #cleanup debugging terminals pkill -t tty2 bash pkill -t tty3 bash pkill -t tty4 bash #exit backbox, continue bootprocess killall blackbox &>/dev/null