The personal website of Philip Mather

GRUB OOB

A little script that will replicate the GRUB settings for an HP DC7900 so that you can use LUKS and enter the password remotely using the Intel AMT SOL, specifically designed for the DC7900 box and AMT technology this script should be used with caution as it could make you machine un-bootable. Do not blindly trust it and don't expect any warranty if you destroy your machine/data.

#!/bin/bash
 
CUR_MENU="/var/tmp/menu.lst"
OLD_MENU="/var/tmp/menu.bak"
INT_MENU="/tmp/menu.tmp"
 
/bin/grep -nm 1 "title" ${CUR_MENU} | /bin/grep -oE "^[0-9]+" | /bin/awk '{ print $0 "-1" }' | /usr//bin/bc -l | /usr/bin/xargs -I{} /usr/bin/head -n {} ${CUR_MENU} > ${INT_MENU}
 
TTYS1_PORT=`/bin/dmesg | /bin/grep -m1 "ttyS1 at I/O" | /bin/grep -oE "[0-9]{1}x[0-9a-f]{1,}"`
 
echo "serial --port=${TTYS1_PORT} --speed=115200" >> ${INT_MENU}
echo "terminal --timeout=30 console serial" >> ${INT_MENU}
echo "" >> ${INT_MENU}
 
OLD_IFS=$IFS
IFS="@"
content=( $(/bin/awk 'BEGIN{RS=""; ORS="@"}/^title/' ${CUR_MENU} ) )
 
for STANZA in ${content[@]}
do
   echo "${STANZA}" | \
   /bin/awk '{
      if ( /kernel \/vmlinuz-/ ) {
         print $0 " console=ttyS1,115200n8 console=tty0";
      } else {
         print $0
      }
   }' >> ${INT_MENU}
   echo >> ${INT_MENU}
 
   echo "${STANZA}" | \
   /bin/awk '{
      if ( /^title CentOS / ) {
         print $0 " (LUKS via Console)";
      } else if ( /kernel \/vmlinuz-/ ) {
         print $0 " console=tty0 console=ttyS1,115200n8";
      } else {
         print $0
      }
   }' >> ${INT_MENU}
   echo >> ${INT_MENU}
done
 
mv -v ${CUR_MENU} ${OLD_MENU}
mv -v ${INT_MENU} ${CUR_MENU}