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
}
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;
## 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 [$?]"
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
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)
# 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
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
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
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