[debian-lan-devel] [SCM] Debian-LAN development and packaging branch, squeeze, updated. 0.6-26-gfb6030f

Andreas B. Mundt andi at debian.org
Sat Sep 22 12:17:42 UTC 2012


The following commit has been merged in the squeeze branch:
commit fb6030f6b90aeeb84618b94324514c032d7f228b
Author: Andreas B. Mundt <andi at debian.org>
Date:   Sat Sep 22 13:00:06 2012 +0200

    Rewrite setup script for FAI and diskless machines' chroots.
    
    Cherry-picked from master and merged:  Cleanup.  Move git
    initialization for the config space to the FAISERVER script.

diff --git a/fai/config/files/etc/rc.local/FAISERVER b/fai/config/files/etc/rc.local/FAISERVER
index 04ec58b..ec6972b 100755
--- a/fai/config/files/etc/rc.local/FAISERVER
+++ b/fai/config/files/etc/rc.local/FAISERVER
@@ -3,39 +3,28 @@
 set -e
 
 ## Setup script run at boot time.
-## Moved after successful execution.
 
 ############################
 TIMEOUT=120
-cat <<EOF
-================================================================================
-The nfsroot for FAI may be created by executing $0.
-This can be done now, later or manually.
-Internet access is needed to download packages.
-If unanswered, this script will exit after $TIMEOUT seconds.
-
-EOF
-read -e -t $TIMEOUT -n 1 -p "Install the nfsroot for FAI now? [y|N]: " inp
-inp=${inp:-N}
-case $inp in
-    y)
-	;;
-    *)
-	exit 0
-	;;
-esac
+URL="http.debian.net"
+URLIMGi386="http://http.us.debian.org/debian/dists/squeeze/main/installer-i386/current/images/netboot/netboot.tar.gz"
+URLIMGamd64="http://http.us.debian.org/debian/dists/squeeze/main/installer-amd64/current/images/netboot/netboot.tar.gz"
 
+DLROOT="/opt/live"
 . /etc/fai/fai.conf
 . /etc/fai/make-fai-nfsroot.conf
 
-if [ ! -d "$FAI_CONFIGDIR/class" ] ; then
-    mkdir -p $FAI_CONFIGDIR
-    cp -a /usr/share/doc/fai-doc/examples/simple/* $FAI_CONFIGDIR
-fi
+##########
+
+check_network () {
+    ## Check if package repository is accessible:
+    if ! wget --quiet --output-document=/tmp/fai-setup $URL ; then
+	echo "Error accessing '$URL', check network and internet access."
+	exit 1
+    fi
+}
 
-URL=`echo $FAI_DEBOOTSTRAP | awk '{print $2}'`
-## Check if package repository is accessible:
-if wget --quiet --output-document=/tmp/fai-setup $URL ; then
+setup_nfsroot () {
     echo "Creating the nfsroot for FAI."
     fai-setup -e -v
     ## Create pxelinux boot configuration for workstationXX.
@@ -48,25 +37,123 @@ if wget --quiet --output-document=/tmp/fai-setup $URL ; then
 	NUM=$(($NUM+1))
     done
 
-    ## Use git to track modifications of the config space:
-    cd $FAI_CONFIGDIR
-    HOME="/root"
-    git config --global user.name  root
-    git config --global user.email root@`hostname --fqdn`
-    git config --global color.ui auto
-    git init
-    git add .
-    git commit -m "Initial commit"
-    cd -
-
-    if [ "$0" = "/etc/rc.local" ] ; then
-        ## things are prepared now, keep script for reference:
-	mv -v $0 $0_setup
-	mv -v /etc/rc.local.pre_fcopy $0
+    ## create default configuration (sysinfo):
+    fai-chboot -Svu $FAI_CONFIG_SRC default
+}
+
+setup_PXEinstaller () {
+    ## Add Debian PXE Installer:
+    wget --output-document=$TFTPROOT/netboot_i386.tar.gz $URLIMGi386 && \
+	tar xvf $TFTPROOT/netboot_i386.tar.gz -C $TFTPROOT ./debian-installer/
+    wget --output-document=$TFTPROOT/netboot_amd64.tar.gz $URLIMGamd64 && \
+	tar xvf $TFTPROOT/netboot_amd64.tar.gz -C $TFTPROOT ./debian-installer/
+    append2PXEmenu
+}
+
+append2PXEmenu () {
+    if [ -d $TFTPROOT/debian-installer/i386 ] ; then
+	## add installer menu
+	cat >> $TFTPROOT/pxelinux.cfg/default <<EOF
+menu label Debian-LAN/FAI live system
+
+menu title Boot menu
+menu background debian-installer/i386/boot-screens/splash.png
+menu color title        * #FFFFFFFF *
+menu color border       * #00000000 #00000000 none
+menu color sel          * #ffffffff #76a1d0ff *
+menu color hotsel       1;7;37;40 #ffffffff #76a1d0ff *
+menu color tabmsg       * #ffffffff #00000000 *
+menu color help         37;40 #ffdddd00 #00000000 none
+menu vshift 16
+menu rows 7
+menu helpmsgrow 12
+menu cmdlinerow 12
+menu tabmsgrow 13
+default debian-installer/i386/boot-screens/vesamenu.c32
+timeout 150
+ontimeout fai-generated
+prompt 0
+noescape 1
+
+label Debian Installer i386
+        config debian-installer/i386/pxelinux.cfg/default
+
+label Debian Installer amd64
+        config debian-installer/amd64/pxelinux.cfg/default
+EOF
     fi
-    ## The following message is activated if diskless machines
-    ## are to be served.  Do not change the following line:
-    exit 0  ##DISKLESS_SERVER##
+}
+
+
+setup_diskless () {
+    export LC_ALL=C
+    fai -vNu diskless dirinstall /opt/live/filesystem.dir/
+
+    TEMPLATE=$TFTPROOT/pxelinux.cfg/diskless.tmpl
+    if [ ! -e $TEMPLATE ]; then
+	KERNEL=`basename $(ls $TFTPROOT/vmlinuz*)`
+	INITRD=`basename $(ls $TFTPROOT/initrd.img*)`
+
+	echo "Creating template with $KERNEL and $INITRD."
+	cat > $TEMPLATE <<EOF
+# template for diskless
+default fai-generated
+
+label fai-generated
+kernel $KERNEL
+append initrd=$INITRD ip=dhcp root=/dev/nfs nfsroot=/opt boot=live
+EOF
+    else
+	echo "The template $TEMPLATE exists already!"
+    fi
+
+    ## Create pxelinux boot configuration for disklessXX.
+    ## The seq range is sed from the corresponding variable
+    ## when fcopy'd:
+    NUM=0
+    for i in `seq DL_RANGE` ; do
+	NUMSTR=`printf "%02d" $NUM`
+	fai-chboot -vc diskless.tmpl diskless$NUMSTR  2>&1 | tee -a /var/log/fai/fai-chboot.log
+	NUM=$(($NUM+1))
+    done
+
+    ## Boot unknown machines as diskless:
+    fai-chboot -vc diskless.tmpl default
+    append2PXEmenu
+}
+
+#########################
+
+## Setup nfsroot for FAI:
+if [ ! -d $NFSROOT ] ; then
+    cat <<EOF
+================================================================================
+The nfsroot for FAI may be created by executing $0.
+This can be done now, later or manually.
+Internet access is needed to download packages.
+If unanswered, this script will exit after $TIMEOUT seconds.
+
+EOF
+    read -e -t $TIMEOUT -n 1 -p "Install the nfsroot for FAI now? [y|N]: " inp
+    inp=${inp:-N}
+    case $inp in
+	y)
+	    check_network
+	    setup_nfsroot
+	    setup_PXEinstaller
+	    ;;
+	*)
+	    exit 0
+	    ;;
+    esac
+fi
+
+## The following code is activated if diskless machines
+## are to be served.  Do not change the following line:
+exit 0  ##DISKLESS_SERVER##
+
+## Setup chroot for diskless machines:
+if [ ! -d $DLROOT ] ; then
     cat <<EOF
 ================================================================================
 To install the chroot for diskless clients execute:
@@ -80,14 +167,11 @@ EOF
     inp=${inp:-N}
     case $inp in
 	y)
-	    export LC_ALL=C
-	    fai -vNu diskless dirinstall /opt/live/filesystem.dir/
+	    check_network
+	    setup_diskless
 	    ;;
 	*)
 	    exit 0
 	    ;;
     esac
-else
-    echo "Error accessing '$URL', check network and internet access."
-    exit 0
 fi
diff --git a/fai/config/scripts/DISKLESS_CLIENT/20-server b/fai/config/scripts/DISKLESS_CLIENT/20-server
deleted file mode 100755
index ef2131e..0000000
--- a/fai/config/scripts/DISKLESS_CLIENT/20-server
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-#
-# modifications needed on the server to boot the diskless client
-#
-
-set -e
-
-if [ $FAI_ACTION == "dirinstall" ] ; then
-    TEMPLATE=/srv/tftp/fai/pxelinux.cfg/diskless.tmpl
-
-    if [ ! -e $TEMPLATE ]; then
-	KERNEL=`basename $(ls /srv/tftp/fai/vmlinuz*)`
-	INITRD=`basename $(ls /srv/tftp/fai/initrd.img*)`
-
-	echo "Creating template with $KERNEL and $INITRD."
-	cat > $TEMPLATE <<EOF
-# template for diskless
-default fai-generated
-
-label fai-generated
-kernel $KERNEL
-append initrd=$INITRD ip=dhcp root=/dev/nfs nfsroot=/opt boot=live
-EOF
-    else
-
-	echo "The template $TEMPLATE exists already!"
-    fi
-    fai-chboot -vc diskless default
-fi
diff --git a/fai/config/scripts/FAISERVER/10-config b/fai/config/scripts/FAISERVER/10-config
index 14abc8b..1bcaafe 100755
--- a/fai/config/scripts/FAISERVER/10-config
+++ b/fai/config/scripts/FAISERVER/10-config
@@ -4,12 +4,11 @@ set -e
 
 fcopy -r /etc/fai
 
-if [ $FAI_ACTION == "install" ]; then
-    ## fetch template and seed 'number' of workstations:
-    fcopy  /etc/rc.local
-    sed -i "s/WS_RANGE/$WS_RANGE/" $target/etc/rc.local
-
-    if ifclass DISKLESS_SERVER ; then
-	sed -i "s%\(^.*\#\#DISKLESS_SERVER\#\#\)%\#\1%"  $target/etc/rc.local
-    fi
+## fetch template and insert 'number' of workstations:
+fcopy  /etc/rc.local
+sed -i "s/WS_RANGE/${WS_RANGE}/g" $target/etc/rc.local
+sed -i "s/DL_RANGE/${DL_RANGE}/g" $target/etc/rc.local
+
+if ifclass DISKLESS_SERVER ; then
+    sed -i "s%\(^.*\#\#DISKLESS_SERVER\#\#\)%\#\1%"  $target/etc/rc.local
 fi
diff --git a/fai/config/scripts/FAISERVER/20-configspace b/fai/config/scripts/FAISERVER/20-configspace
index a3c2b6c..4870b5f 100755
--- a/fai/config/scripts/FAISERVER/20-configspace
+++ b/fai/config/scripts/FAISERVER/20-configspace
@@ -2,14 +2,26 @@
 
 set -e
 
+CONFDIR="/srv/fai/config"
+
 if [ $FAI_ACTION == "install" ] ; then
     ## Copy the config space to the faiserver:
     echo -n "Cleaning config space ... "
-    rm -rf $target/srv/fai/config
+    rm -rf $target/$CONFDIR
     echo "done."
 
-    cp -a /var/lib/fai/config $target/srv/fai/
-    chmod 770 $target/srv/fai/config/
-    chown root:adm $target/srv/fai/config/
+    mkdir -p $target/$CONFDIR
+    cp -a /var/lib/fai/config/* $target/$CONFDIR
+    chmod 770 $target/$CONFDIR
+    chown root:adm $target/$CONFDIR
     echo "New config space copied to faiserver."
+
+    ## Use git to track modifications of the config space:
+    export HOME="/root"
+    $ROOTCMD git config --global user.name  root
+    $ROOTCMD git config --global user.email root@$HOSTNAME
+    $ROOTCMD git config --global color.ui auto
+    $ROOTCMD git init $CONFDIR
+    $ROOTCMD git --git-dir=$CONFDIR/.git --work-tree=$CONFDIR add .
+    $ROOTCMD git --git-dir=$CONFDIR/.git commit -m "Initial commit"
 fi

-- 
Debian-LAN development and packaging



More information about the debian-lan-devel mailing list