reorganized Config file
[hdw-linux/hdw-linux.git] / scripts / Create-FAI
index 046b1d3..b013db4 100755 (executable)
@@ -5,19 +5,32 @@
 # script creating a minimal system nfsroot for automated installation of hdw
 #
 
-fairoot="$1"
-myip="`ifconfig eth0 | grep inet\ addr | awk '{ print $2 }' | awk -F: '{ print $2 }'`"
 home_dir=$PWD
+fairoot="$1"
+iface="eth0"
+
+[ "$2" ] && iface="$2"
+
+myip="`ifconfig $iface | grep inet\ addr | awk '{ print $2 }' | awk -F: '{ print $2 }'`"
+
+if [ -z $myip ] ; then
+       echo "unable to figure out your ip addr."
+       echo "pls specify the network interface."
+       echo
+       echo "example: $0 $1 br0"
+       echo
+       exit
+fi
 
 usage()        {
        echo
        echo "usage:"
-       echo "$0 <fai-root>"
+       echo "$0 <fai-root> [<network interface>]"
        echo
        exit
        }
 
-[ "$#" != "1" ] && usage
+[ "$#" -lt "1" ] && usage
 [ ! -d $fairoot ] && usage
 
 echo "reading config ..."
@@ -33,23 +46,30 @@ if [ ! -f ./fai/nfsroot-packages ] ; then
 
        echo "pretending default target for nfsroot install now"
        export hdw_target=default
+       echo "hdw_target=default # FAI_WAS_HERE" >> Config # dirty!
 
        ./scripts/Helper -create_dist_files
 
        export hdw_target=$hdw_orig_target
+       grep -v '# FAI_WAS_HERE' Config > tmp~
+       mv tmp~ Config
        echo "orig target restored to $hdw_target"
 
        cp ./distro/default ./fai/nfsroot-packages
-fi
 
-echo "deleting some packages from list now"
-del="linux-libc-headers man-pages binutils gcc m4 autoconf automake"
-del="$del man make patch bin86 nasm lilo cvs"
-del="$del bootdisk" # just by now - may contain kernel image later
-for package in $del; do
-       grep -v ^$package ./fai/nfsroot-packages > ./fai/tmp~
-       mv ./fai/tmp~ ./fai/nfsroot-packages
-done
+       echo "deleting some packages from list now"
+       del="linux-libc-headers man-pages binutils gcc m4 autoconf automake"
+       del="$del man make patch bin86 nasm lilo cvs devfsd"
+       del="$del bootdisk" # just by now - may contain kernel image later
+       for package in $del; do
+               grep -v ^$package ./fai/nfsroot-packages > ./fai/tmp~
+               mv ./fai/tmp~ ./fai/nfsroot-packages
+       done
+       echo "adding needed packages to list now"
+       echo "portmap" >> ./fai/nfsroot-packages
+       echo "tcp_wrappers" >> ./fai/nfsroot-packages
+       [ "$hdw_arch" = "ia32" ] && echo "lilo" >> ./fai/nfsroot-packages
+fi
 
 if [ ! -f $fairoot/packages_installed ] ; then
        echo "creating nfsroot..."
@@ -65,23 +85,37 @@ fi
 if [ ! -f $fairoot/prepared_nfsroot ] ; then
        echo "preparing nfsroot for automated install routine ..."
        cd $fairoot
-       mknod -m 0666 dev/null c 1 3
-       mknod -m 0600 dev/console c 5 1
-       grep -v swap etc/fstab > tmp~
-       mv tmp~ etc/fstab
+       # special files (null & console)
+       [ ! -c dev/null ] && mknod -m 0666 dev/null c 1 3
+       [ ! -c dev/console ] && mknod -m 0600 dev/console c 5 1
+       # fstab
+       cp $home_dir/misc/sysfiles/etc/fstab ./etc
+       # the target directory
        mkdir -p ./trg
+       # dir for mounting fai config
+       mkdir -p fai
+       # removing some services
        for i in sysklogd network inetd nscd; do
                rm -f etc/init.d/rc2.d/*${i}
        done
-       sed "s%^exit\ 0%mount -tnfs $myip:/$home_dir/fai /fai%" \
-               etc/init.d/rc > tmp~
-       mv tmp~ etc/init.d/rc
+       # modified inittab, rc and bootscript
+       sed "s%| /sbin/btee .*%%g" $home_dir/packages/base/sysvinit/inittab > \
+               etc/inittab
+       cp $home_dir/misc/fai/fai_boot ./etc/init.d/boot
+       sed "s%^FAI_MOUNT_LINE%mount -tnfs $myip:/$home_dir/fai /fai%" \
+               $home_dir/misc/fai/fai_rc > etc/init.d/rc
        chmod 755 etc/init.d/rc
-       echo "/fai/scripts/rc_fai.sh" >> etc/init.d/rc
-       echo "shutdown -r now" >> etc/init.d/rc
+       # modify hdw-get.conf
+       sed "s%hdw_arch_opt=.*%hdw_arch_opt=$hdw_arch_opt%" etc/hdw-get.conf > \
+               tmp~
+       mv tmp~ etc/hdw-get.conf
+       # get to home_dir again
        cd $home_dir
        echo "done"
        touch $fairoot/prepared_nfsroot
+else
+       echo "nfsroot seems to be prepared already"
+       echo "(del $fairoot/prepared_nfsroot to recreate it)"
 fi
 
 echo "checking pxe/nfs environment ..."
@@ -94,11 +128,18 @@ if [ ! -f /tftpboot/pxelinux.0 ] ; then
        cp /usr/lib/syslinux/pxelinux.0 /tftpboot
 fi
 mkdir -p /tftpboot/pxelinux.cfg
-echo -e "LABEL fai" > /tftpboot/pxelinux.cfg/fai
-echo -e "\tKERNEL vmlinuz_hdw" >> /tftpboot/pxelinux.cfg/fai
-echo -e "\tAPPEND root=/dev/nfs nfsroot=$myip:$fairoot ip=dhcp" >> \
-       /tftpboot/pxelinux.cfg/fai
-echo -e "\tPROMPT 1" >> /tftpboot/pxelinux.cfg/fai
+cat > /tftpboot/pxelinux.cfg/fai << EOF
+PROMPT 1
+DEFAULT disk
+TIMEOUT 200
+
+LABEL fai
+       KERNEL vmlinuz_hdw
+       APPEND root=/dev/nfs nfsroot=$myip:$fairoot ip=dhcp
+
+LABEL disk
+       LOCALBOOT 0
+EOF
 echo -e "$fairoot\tfoobar(async,ro,no_root_squash)" >> /etc/exports
 echo -e "$home_dir/fai\tfoobar(async,ro,no_root_squash)" >> /etc/exports
 
@@ -108,6 +149,7 @@ echo "2) link the ipaddr in hex of the client to fai in pxe config dir"
 echo "3) tell your dhcpd (see syslinux docs for more help)"
 echo "4) make sure inetd/nfs/dhcpd are up running"
 echo "5) do the configuration stuff (see doc/FAI)"
+echo "6) adapt the hdw-get.conf file in the fai nfsroot tree"
 echo
 echo "note: tftp must support tsize option (use e.g. tftp-hpa package)"
 echo