From f16a622038244e1324f0cc2952d8d1f3981296df Mon Sep 17 00:00:00 2001 From: jim-p Date: Tue, 20 Nov 2012 09:41:01 -0500 Subject: Fixup kernel detection during upgrade process to ensure someone can't end up with a kernel that doesn't exist any more. --- tmp/post_upgrade_command | 116 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 81 insertions(+), 35 deletions(-) (limited to 'tmp/post_upgrade_command') diff --git a/tmp/post_upgrade_command b/tmp/post_upgrade_command index b497ccd..634afb0 100755 --- a/tmp/post_upgrade_command +++ b/tmp/post_upgrade_command @@ -3,34 +3,78 @@ /etc/rc.conf_mount_rw PFSENSETYPE=`cat /etc/platform` -KERNELTYPE=`cat /boot/kernel/pfsense_kernel.txt` -if [ $KERNELTYPE = "wrap" ]; then - if [ -f /kernels/kernel_wrap.gz ]; then - tar xzpf /kernels/kernel_wrap.gz --exclude loader.conf -C /boot/ - cp /etc/ttys_wrap /etc/ttys - fi +# check in two places for the old kernel type, since it could have been moved elsewhere in the upgrade process. +if [ -f /boot/kernel/pfsense_kernel.txt ]; then + OLDKERNEL=`cat /boot/kernel/pfsense_kernel.txt` +else + OLDKERNEL=`cat /tmp/pfsense_kernel.txt` fi -if [ $KERNELTYPE = "wrap_vga" ]; then - if [ -f /kernels/kernel_wrap_vga.gz ]; then - tar xzpf /kernels/kernel_wrap_vga.gz --exclude loader.conf -C /boot/ - fi -fi -if [ $KERNELTYPE = "Developers" ]; then - if [ -f /kernels/kernel_Dev.gz ]; then - tar xzpf /kernels/kernel_Dev.gz --exclude loader.conf -C /boot/ - cp /boot/kernel/kernel.gz - fi -fi -if [ $KERNELTYPE = "SMP" ]; then - if [ -f /kernels/kernel_SMP.gz ]; then - tar xzpf /kernels/kernel_SMP.gz --exclude loader.conf -C /boot/ - fi -fi -if [ $KERNELTYPE = "UP" ]; then - if [ -f /kernels/kernel_SMP.gz ]; then - tar xzpf /kernels/kernel_uniprocessor.gz --exclude loader.conf -C /boot/ - fi + +# Massage the existing kernel into one that actually exists. +# Leaving old entries so we can bring back other kernels later if desired. +case "$OLDKERNEL" in + "wrap") + KERNELTYPE=wrap + ;; + "wrap_vga") + KERNELTYPE=wrap_vga + ;; + "Developers") + KERNELTYPE=SMP + ;; + "UP") + KERNELTYPE=SMP + ;; + "SMP") + KERNELTYPE=SMP + ;; + *) + KERNELTYPE=SMP + ;; +esac + +# Overwrite the old kernel type with what we're using now to reflect what is about to be written out. +echo ${KERNELTYPE} > /boot/kernel/pfsense_kernel.txt +HAVE_KERNEL=false + +case "${KERNELTYPE}" in + "wrap") + if [ -f /kernels/kernel_wrap.gz ]; then + HAVE_KERNEL=true + tar xzpf /kernels/kernel_wrap.gz --exclude loader.conf -C /boot/ + cp /etc/ttys_wrap /etc/ttys + fi + ;; + "wrap_vga") + if [ -f /kernels/kernel_wrap_vga.gz ]; then + HAVE_KERNEL=true + tar xzpf /kernels/kernel_wrap_vga.gz --exclude loader.conf -C /boot/ + fi + ;; + "Developers") + if [ -f /kernels/kernel_Dev.gz ]; then + HAVE_KERNEL=true + tar xzpf /kernels/kernel_Dev.gz --exclude loader.conf -C /boot/ + fi + ;; + "UP") + if [ -f /kernels/kernel_uniprocessor.gz ]; then + HAVE_KERNEL=true + tar xzpf /kernels/kernel_uniprocessor.gz --exclude loader.conf -C /boot/ + fi + ;; + "SMP") + if [ -f /kernels/kernel_SMP.gz ]; then + HAVE_KERNEL=true + tar xzpf /kernels/kernel_SMP.gz --exclude loader.conf -C /boot/ + fi + ;; +esac + +if [ ${HAVE_KERNEL} = "false" ]; then + echo "ERROR: Unable to locate a kernel upgrade file!" + sleep 5 fi if [ $PFSENSETYPE = "pfSense" ] || [ $PFSENSETYPE = "nanobsd" ]; then @@ -38,17 +82,19 @@ if [ $PFSENSETYPE = "pfSense" ] || [ $PFSENSETYPE = "nanobsd" ]; then fi # Detect interactive logins and display the shell -echo "if [ \`env | grep SSH_TTY | wc -l\` -gt 0 ] || [ \`env | grep cons25 | wc -l\` -gt 0 ]; then" > $CVS_CO_DIR/root/.shrc -echo " /etc/rc.initial" >> $CVS_CO_DIR/root/.shrc -echo " exit" >> $CVS_CO_DIR/root/.shrc -echo "fi" >> $CVS_CO_DIR/root/.shrc -echo "if [ \`env | grep SSH_TTY | wc -l\` -gt 0 ] || [ \`env | grep cons25 | wc -l\` -gt 0 ]; then" >> $CVS_CO_DIR/root/.profile -echo " /etc/rc.initial" >> $CVS_CO_DIR/root/.profile -echo " exit" >> $CVS_CO_DIR/root/.profile -echo "fi" >> $CVS_CO_DIR/root/.profile +detect_command='[ -n "$SSH_TTY" -o "$TERM" = "cons25" ] && exec /etc/rc.initial' +echo "$detect_command" > $CVS_CO_DIR/root/.shrc +echo "$detect_command" >> $CVS_CO_DIR/root/.profile # Now turn on or off serial console as needed -/tmp/post_upgrade_command.php +echo "Checking for /tmp/$1/tmp/post_upgrade_command.php... " >> /conf/upgrade_log.txt +if [ -x /tmp/$1/tmp/post_upgrade_command.php ]; then + echo "Running /tmp/$1/tmp/post_upgrade_command.php $1" >> /conf/upgrade_log.txt + /tmp/$1/tmp/post_upgrade_command.php $1 >> /conf/upgrade_log.txt 2>&1 +elif [ -f /tmp/post_upgrade_command.php ]; then + echo "Running /tmp/post_upgrade_command.php $1" >> /conf/upgrade_log.txt + /tmp/post_upgrade_command.php $1 +fi # Remove any previous MD5 sum files rm -f /root/*.md5 -- cgit v1.1