fixed timeouts, dependancy checks, dhcp conf, etc 25/225/3
authordavidplunkett <dp7642@att.com>
Tue, 21 Aug 2018 06:25:30 +0000 (06:25 +0000)
committerDavid Plunkett <dp7642@att.com>
Tue, 21 Aug 2018 20:59:30 +0000 (20:59 +0000)
Change-Id: Ibc7c99efc69f1bd27c2f211840bf8b22ef185b91
Signed-off-by: davidplunkett <dp7642@att.com>
apply_dellxml.sh
install_server_os.sh
serverrc.template
setup_tools.sh
update_webroot.sh

index e881af0..a9ac87c 100755 (executable)
@@ -74,11 +74,14 @@ if [ -n "$RCFILE" ] && [ -f "$RCFILE" ]; then
 fi
 
 # CHECK A FEW REQUIRED VARIABLES - BUT NOT ALL
-if [ -z "$SRV_NAME" ] || [ -z "$SRV_OOB_IP" ] || [ -z "$SRV_OOB_USR" ] || [ -z "$SRV_OOB_PWD" ]; then
-    echo "ERROR:  Invalid or missing variables in rcfile [$RCFILE]"
-    echo "usage:  ./apply_dellxml.sh [--rc settingsfile] --template templatefile [--no-confirm] [--no-apply-hw] [--help]"
-    exit 1
-fi
+CHECKLIST="SRV_NAME SRV_OOB_IP SRV_OOB_USR SRV_OOB_PWD BUILD_WEBIP BUILD_WEBPORT"
+for VAR in $CHECKLIST; do
+    if [ -z "${!VAR}" ] ; then
+        echo "ERROR:  Invalid or missing variable [$VAR] = [${!VAR}] in rcfile [$RCFILE]"
+        echo "usage:  ./apply_dellxml.sh [--rc settingsfile] --template templatefile [--no-confirm] [--no-apply-hw] [--help]"
+        exit 1
+    fi
+done
 
 # CHECK IF TEMPLATE PASSED AND EXISTS
 if [ -z "$TEMPLATE" ] || ! [ -f "$TOOLS_ROOT/$TEMPLATE" ]; then
index 157a0c8..e23ccbe 100755 (executable)
@@ -244,9 +244,16 @@ subnet $SRV_SUBNET netmask $SRV_NETMASK {
 }
 EOF
 
+## CHECK THAT SRV_BLD_SCRIPT EXISTS
+if [ ! -f "$WEB_ROOT/$SRV_BLD_SCRIPT" ]; then
+    echo "ERROR: Missing SRV_BLD_SCRIPT [$SRV_BLD_SCRIPT] from web root [$WEB_ROOT]"
+    exit 1
+fi
+
 echo "Updating dhcp configuration [$DHCP_ROOT/dhcpd.conf] with server [$SRV_NAME]"
-## DELETE ANY HOST ENTRY WITH THE SAME MAC ADDRESS (IGNORING THE NAME WHICH COULD CHANGE)
+## DELETE ANY HOST ENTRY WITH THE SAME MAC ADDRESS OR NAME
 perl -i -p0e "s/^host.*?$SRV_MAC.*?\n\}\n//gms" $DHCP_ROOT/dhcpd.conf
+perl -i -p0e "s/^host *$SRV_NAME *{.*?\n\}\n//gms" $DHCP_ROOT/dhcpd.conf
 cat >>$DHCP_ROOT/dhcpd.conf <<EOF
 host $SRV_NAME {
     hardware ethernet $SRV_MAC;
@@ -275,7 +282,7 @@ fi
 ## CREATE CONFIG FILES AND APPLY UNLESS CALLED WITH --no-apply-hw
 . $TOOLS_ROOT/apply_dellxml.sh --template $SRV_BIOS_TEMPLATE
 echo "Completed update with status [$?]"
-sleep 20
+sleep 80
 
 . $TOOLS_ROOT/apply_dellxml.sh --template $SRV_BOOT_TEMPLATE
 echo "Completed update with status [$?]"
@@ -287,8 +294,9 @@ if [ -z "$NO_APPLY_HW" ]; then
     echo "Waiting for server [$SRV_IP] to download [$SRV_NAME.firstboot.sh] from web container at" `date`
     echo "This step could take up to 15 minutes"
     WEBLOG_START=$(date +%FT%T)
+    WSTART=$(date +%s)
     # ONLY CHECK ENTRIES AFTER WEBLOG_START TO AVOID PAST BUILDS, CHECK UP TO LAST 10 ENTRIES TO AVOID MISSING MESSAGES AFTER RESTART
-    while ( ! (docker logs --since "$WEBLOG_START" --tail 10 -f akraino-httpboot &) | awk "{print \$0; fflush();} /^$SRV_IP.*GET \/$SRV_NAME.firstboot.sh/ {exit;}" ); do
+    while [ $(date +%s) -lt $[$WSTART + 900] ] && ( ! (timeout 900s docker logs --since "$WEBLOG_START" --tail 10 -f akraino-httpboot &) | awk "{print \$0; fflush();} /^$SRV_IP.*GET \/$SRV_NAME.firstboot.sh/ {exit;}" ); do
         echo "WARNING:  Web server was restarted..."
     done
 
@@ -344,14 +352,13 @@ if [ "$?" -ne 0 ]; then
 fi
 
 ## DELETE HOST ENTRY FROM DHCP
-echo "Removing dhcp configuration for server [$SRV_NAME] from [$DHCP_ROOT/dhcpd.conf]"
+echo "Removing dhcp configuration for server [$SRV_NAME] [$SRV_MAC] from [$DHCP_ROOT/dhcpd.conf]"
 perl -i -p0e "s/^host.*?$SRV_MAC.*?\n\}\n//gms" $DHCP_ROOT/dhcpd.conf
+perl -i -p0e "s/^host *$SRV_NAME *{.*?\n\}\n//gms" $DHCP_ROOT/dhcpd.conf
 
-## START/RESTART DHCP SERVICE
+## RESTART DHCP SERVICE
 echo "Restarting dhcp server using folder [$DHCP_ROOT] on interface [$BUILD_INTERFACE]"
-docker stop akraino-dhcp &> /dev/null
-docker rm akraino-dhcp &> /dev/null
-docker run -dit --name akraino-dhcp --rm --net=host -v "$DHCP_ROOT":/data networkboot/dhcpd $BUILD_INTERFACE
+docker restart akraino-dhcp &> /dev/null
 
 ## DONE
 ENDTIME=$(date +%s)
index 0e54679..2b36042 100644 (file)
 # export https_proxy=http://your.proxy.com:8080/
 #
 
-# Set the ip and port to use when creating the web server
-BUILD_WEBIP=192.168.2.5
-BUILD_WEBPORT=8090
-
 # host name for server
 SRV_NAME=aknode44
 
@@ -48,8 +44,8 @@ SRV_BLD_INF=enp94s0f0
 SRV_BOOT_DEVICE=sda
 
 # ipxe script to use - based on the os version and kernel to install
-# valid options are script-hwe-16.04.4-amd64.ipxe or script-16.04.4-amd64.ipxe
-SRV_BLD_SCRIPT=script-hwe-16.04.4-amd64.ipxe
+# valid options are script-hwe-16.04.5-amd64.ipxe or script-16.04.5-amd64.ipxe
+SRV_BLD_SCRIPT=script-hwe-16.04.5-amd64.ipxe
 
 # template xml file to set bios and raid configuration settings
 SRV_BIOS_TEMPLATE=dell_r740_g14_uefi_base.xml.template
index 3356de7..d8619d3 100755 (executable)
@@ -63,11 +63,17 @@ mkdir -p $WEB_ROOT
 mkdir -p $DHCP_ROOT
 mkdir -p $BUILD_ROOT
 
-## CHECK XORRISO INSTALLED
-if ! dpkg -l | grep xorriso >>/dev/null; then
-    echo "FAILED:  required package xorriso not found.  try sudo 'apt-get install xorriso -y'"
-    exit 1
-fi
+## CHECK THAT REQUIRED PACKAGES ARE INSTALLED
+PACKAGES="xorriso sshpass python-requests coreutils"
+for PKG in $PACKAGES ; do
+    if ! dpkg -l | grep $PKG >>/dev/null; then
+        echo "Attempting to install missing package $PKG"
+        if ! apt-get install -y $PKG; then
+            echo "FAILED:  required package $PKG not found.  try sudo 'apt-get install $PKG -y'"
+            exit 1
+        fi
+    fi
+done
 
 ## DOWNLOAD TOOLS TO TOOLS_ROOT IF TOOLS FOLDER MISSING
 if [ ! -d "$TOOLS_ROOT" ]; then
index ba6ad29..c02147d 100755 (executable)
@@ -75,7 +75,7 @@ if [ -z $UBUNTU_ISO ] || ! xorriso --indev $UBUNTU_ISO --check-media &>/dev/null
     echo "WARNING:  ISO file [$UBUNTU_ISO] appears to be missing or corrupt.  Downloading instead."
     xorriso --indev $UBUNTU_ISO --check-media 2>&1 | sed -e "s/^/    /g"
     export UBUNTU_ISO=${UBUNTU_URL##*/}
-    echo "WARNING:  Attempting to us [$UBUNTU_ISO] instead."
+    echo "WARNING:  Attempting to use [$UBUNTU_ISO] instead."
     if ! [ -f $WEB_ROOT/$UBUNTU_ISO ]; then 
         echo "Downloading Ubuntu iso from [$UBUNTU_URL] to [$UBUNTU_ISO]"
         curl -Lo $WEB_ROOT/$UBUNTU_ISO $UBUNTU_URL