Fixup kernel detection during upgrade process to ensure someone can't end up with a kernel that doesn't exist any more.

This commit is contained in:
jim-p 2012-11-20 09:41:01 -05:00
parent 6acfbc6f49
commit f16a622038
3 changed files with 87 additions and 51 deletions

View File

@ -155,25 +155,17 @@ function check_for_kernel_file() {
}
if(!file_exists("/boot/kernel/pfsense_kernel.txt")) {
echo "\nPlease select which kernel you would like to use:\n";
echo "\n1. Non SMP kernel";
echo "\n2. SMP kernel";
echo "\n3. Embedded kernel (no video or keyboard)";
echo "\n4. Developers kernel (slower performing, more debugging)\n";
echo "\nPlease enter a number [1-4]: ";
echo "\n1. Standard Kernel";
echo "\n2. Embedded Kernel (no video or keyboard)";
echo "\nPlease enter a number [1-2]: ";
$selection = strtoupper(chop(fgets($fp)));
switch ($selection) {
case "1":
exec("echo UP > /boot/kernel/pfsense_kernel.txt");
break;
case "2":
exec("echo SMP > /boot/kernel/pfsense_kernel.txt");
break;
case "3":
case "2":
exec("echo wrap > /boot/kernel/pfsense_kernel.txt");
break;
case "4":
exec("echo Developers > /boot/kernel/pfsense_kernel.txt");
break;
}
echo "\n";
}

View File

@ -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

View File

@ -51,10 +51,8 @@ require_once("guiconfig.inc");
$curcfg = $config['system']['firmware'];
$kerneltypes = array(
'SMP' => gettext("Multiprocessor kernel"),
'single' => gettext("Uniprocessor kernel"),
'wrap' => gettext("Embedded kernel"),
'Developers' => gettext("Developers kernel")
'SMP' => gettext("Standard Kernel"),
'wrap' => gettext("Embedded Kernel"),
);
require_once("xmlrpc_client.inc");