reorganized Config file
[hdw-linux/hdw-linux.git] / scripts / Create-FAI
index 1b3366e..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 $3 }' | 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 ..."
@@ -27,34 +40,36 @@ if [ ! -f ./Config ] ; then
 fi
 . ./Config
 
-if [ ! -d ./fai ] ; then
-       echo "creating fai directory"
-       mkdir ./fai
-fi
-
 if [ ! -f ./fai/nfsroot-packages ] ; then
        echo "storing $hdw_target as original target"
        hdw_orig_target=$hdw_target
 
        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..."
@@ -67,24 +82,41 @@ else
        echo "(del $fairoot/packages_installed to recreate it)"
 fi
 
-
-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
-
-for i in sysklogd network inetd nscd; do
-       rm -f etc/init.d/rc2.d/*${i}
-done
-
-cd $home_dir
-
-echo "done"
+if [ ! -f $fairoot/prepared_nfsroot ] ; then
+       echo "preparing nfsroot for automated install routine ..."
+       cd $fairoot
+       # 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
+       # 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
+       # 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 ..."
 mkdir -p /tftpboot
@@ -96,17 +128,20 @@ 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 \\" >> \
-       /tftpboot/pxelinux.cfg/fai
-echo -e "\tip=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 "mounting configuration dir to nfsroot export ..."
-mkdir -p $fairoot/fai-config
-mount --bind $PWD/fai $fairoot/fai-config
+echo -e "$home_dir/fai\tfoobar(async,ro,no_root_squash)" >> /etc/exports
 
 echo "everything should work now. now do the following:"
 echo "1) edit /etc/exports to allow your clients to mount the nfsroot"
@@ -114,8 +149,9 @@ 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 "note: tftp must support tsize option (use e.g. tftp-hpa package)"
 echo
 
 echo "done"