summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjim-p <jimp@pfsense.org>2012-11-20 09:41:01 -0500
committerjim-p <jimp@pfsense.org>2012-11-20 09:42:14 -0500
commitf16a622038244e1324f0cc2952d8d1f3981296df (patch)
tree702616ac334f53e31d061c287be4e26cd61ac420
parent6acfbc6f4942c0eedb60678e20fa0abfeb7d21e3 (diff)
downloadpfsense-f16a622038244e1324f0cc2952d8d1f3981296df.zip
pfsense-f16a622038244e1324f0cc2952d8d1f3981296df.tar.gz
Fixup kernel detection during upgrade process to ensure someone can't end up with a kernel that doesn't exist any more.
-rwxr-xr-xetc/rc.initial.firmware_update16
-rwxr-xr-xtmp/post_upgrade_command116
-rwxr-xr-xusr/local/www/system_firmware.php6
3 files changed, 87 insertions, 51 deletions
diff --git a/etc/rc.initial.firmware_update b/etc/rc.initial.firmware_update
index f4363c6..0b600e2 100755
--- a/etc/rc.initial.firmware_update
+++ b/etc/rc.initial.firmware_update
@@ -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";
}
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
diff --git a/usr/local/www/system_firmware.php b/usr/local/www/system_firmware.php
index dfcd8d6..072bfb9 100755
--- a/usr/local/www/system_firmware.php
+++ b/usr/local/www/system_firmware.php
@@ -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");
OpenPOWER on IntegriCloud