From 73c7a229c1649dd3c17aed367a88872be8a39ee2 Mon Sep 17 00:00:00 2001 From: Scott Ullrich Date: Fri, 3 Jul 2009 18:38:00 -0400 Subject: Sync with master --- etc/rc.firmware | 234 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 137 insertions(+), 97 deletions(-) (limited to 'etc') diff --git a/etc/rc.firmware b/etc/rc.firmware index 2a5d5da..d9aee98 100755 --- a/etc/rc.firmware +++ b/etc/rc.firmware @@ -6,7 +6,10 @@ # Copyright (C) 2003 Manuel Kasper . # All rights reserved. -exec 3>&2 2>>/cf/firmware_update_misc.log +# mount /cf +/etc/rc.conf_mount_rw + +exec 3>&2 2>>/conf/firmware_update_misc.log export ACTION=$1 export IMG=$2 @@ -29,36 +32,36 @@ ENDOFF } output_env_to_log() { - date >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt - ls -lah /dev/ >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + ls -lah /dev/ >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt - ls -lah $IMG >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + ls -lah $IMG >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt - md5 $IMG >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + md5 $IMG >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt - mount >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + mount >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt - top >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + top >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt } backup_chflags() { TOPROCESS="bin lib libexec sbin usr" for files in $TOPROCESS; do - /usr/sbin/mtree -Pcp /${files} | bzip2 -9 > /tmp/chflags.dist.${files}.bz2 >> /cf/upgrade_log.txt 2>&1 + /usr/sbin/mtree -Pcp /${files} | bzip2 -9 > /tmp/chflags.dist.${files}.bz2 >> /conf/upgrade_log.txt 2>&1 done } restore_chflags() { TOPROCESS="bin lib libexec sbin usr" for files in $TOPROCESS; do - cd / && /usr/bin/bzcat /tmp/chflags.dist.${files}.bz2 | /usr/sbin/mtree -PU -p /${files} >> /cf/upgrade_log.txt 2>&1 + cd / && /usr/bin/bzcat /tmp/chflags.dist.${files}.bz2 | /usr/sbin/mtree -PU -p /${files} >> /conf/upgrade_log.txt 2>&1 done } @@ -110,11 +113,11 @@ binary_update() { case $ACTION in enable) - touch /cf/upgrade_log.txt - echo "" > /cf/upgrade_log.txt + touch /conf/upgrade_log.txt + echo "" > /conf/upgrade_log.txt ;; auto) - touch /var/run/firmware.lock + touch /var/run/firmwarelock.dirty backup_chflags remove_chflags /etc/rc.firmware_auto @@ -122,12 +125,9 @@ auto) ;; pfSenseNanoBSDupgrade) - # mount /cf - /etc/rc.conf_mount_rw - # Sanity check - bail early if there's no firmware file! if [ ! -r $IMG ]; then - echo "2nd parameter has not been passed or file does not exist. Exiting." >> /cf/upgrade_log.txt 2>&1 + echo "2nd parameter has not been passed or file does not exist. Exiting." >> /conf/upgrade_log.txt 2>&1 /etc/rc.conf_mount_ro exit 1 fi @@ -140,20 +140,20 @@ pfSenseNanoBSDupgrade) exit 1 fi - touch /var/run/firmware.lock + touch /var/run/firmwarelock.dirty - echo "NanoBSD Firmware upgrade in progress..." >> /cf/upgrade_log.txt 2>&1 + echo "NanoBSD Firmware upgrade in progress..." >> /conf/upgrade_log.txt 2>&1 echo "NanoBSD Firmware upgrade in progress..." | wall # backup config /bin/mkdir -p /tmp/configbak cp -p /conf/* /tmp/configbak 2>/dev/null - touch /cf/upgrade_log.txt - echo "" > /cf/upgrade_log.txt + touch /conf/upgrade_log.txt + echo "" > /conf/upgrade_log.txt - echo "Installing $IMG." >> /cf/upgrade_log.txt 2>&1 - echo "Installing $IMG." >> /cf/upgrade_log.txt + echo "Installing $IMG." >> /conf/upgrade_log.txt 2>&1 + echo "Installing $IMG." >> /conf/upgrade_log.txt # resolve glabel label that we booted from BOOT_DEVICE=`/sbin/mount | /usr/bin/grep pfsense | /usr/bin/cut -d'/' -f4 | /usr/bin/cut -d' ' -f1` @@ -181,50 +181,76 @@ pfSenseNanoBSDupgrade) fi # Output specifc information that this script is using - echo "SLICE $SLICE" >> /cf/upgrade_log.txt - echo "OLDSLICE $OLDSLICE" >> /cf/upgrade_log.txt - echo "TOFLASH $TOFLASH" >> /cf/upgrade_log.txt - echo "COMPLETE_PATH $COMPLETE_PATH" >> /cf/upgrade_log.txt - echo "GLABEL_SLICE $GLABEL_SLICE" >> /cf/upgrade_log.txt + echo "SLICE $SLICE" >> /conf/upgrade_log.txt + echo "OLDSLICE $OLDSLICE" >> /conf/upgrade_log.txt + echo "TOFLASH $TOFLASH" >> /conf/upgrade_log.txt + echo "COMPLETE_PATH $COMPLETE_PATH" >> /conf/upgrade_log.txt + echo "GLABEL_SLICE $GLABEL_SLICE" >> /conf/upgrade_log.txt # Output environment information to log file output_env_to_log - + + # Grab a before upgrade look at fdisk + echo "" >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs1 >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs1a >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs2 >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs2a >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs3 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs1 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs2 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs3 >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + # Log that we are really doing a NanoBSD upgrade - echo "" >> /cf/upgrade_log.txt - echo "NanoBSD upgrade starting" >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + echo "NanoBSD upgrade starting" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt # Foot shooting is fun! - echo "" >> /cf/upgrade_log.txt - echo "/sbin/sysctl kern.geom.debugflags=16" >> /cf/upgrade_log.txt - /sbin/sysctl kern.geom.debugflags=16 >> /cf/upgrade_log.txt 2>&1 + echo "" >> /conf/upgrade_log.txt + echo "/sbin/sysctl kern.geom.debugflags=16" >> /conf/upgrade_log.txt + /sbin/sysctl kern.geom.debugflags=16 >> /conf/upgrade_log.txt 2>&1 # Remove TOFLASH and get ready for new flash image - echo "" >> /cf/upgrade_log.txt - echo "dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1" >> /cf/upgrade_log.txt - dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1 >> /cf/upgrade_log.txt 2>&1 + echo "" >> /conf/upgrade_log.txt + echo "dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1" >> /conf/upgrade_log.txt + dd if=/dev/zero of=/dev/${TOFLASH} bs=1m count=1 >> /conf/upgrade_log.txt 2>&1 # Stream gzipped image to dd and explode image to new area - echo "" >> /cf/upgrade_log.txt - echo "/usr/bin/gzcat $IMG | /bin/dd of=/dev/${TOFLASH} bs=16k" >> /cf/upgrade_log.txt - /usr/bin/gzcat $IMG | /bin/dd of=/dev/${TOFLASH} bs=16k >> /cf/upgrade_log.txt 2>&1 + echo "" >> /conf/upgrade_log.txt + echo "/usr/bin/gzcat $IMG | /bin/dd of=/dev/${TOFLASH} bs=16k" >> /conf/upgrade_log.txt + /usr/bin/gzcat $IMG | /bin/dd of=/dev/${TOFLASH} bs=16k >> /conf/upgrade_log.txt 2>&1 + + # Grab a after upgrade look at fdisk + echo "" >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs1 >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs1a >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs2 >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs2a >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs3 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs1 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs2 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs3 >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt # Ensure that our new system is sound and bail if it is not and file a notice - echo "" >> /cf/upgrade_log.txt - echo "/sbin/fsck_ffs -y /dev/$COMPLETE_PATH" >> /cf/upgrade_log.txt - /sbin/fsck_ffs -y /dev/$COMPLETE_PATH >> /cf/upgrade_log.txt 2>&1 + echo "" >> /conf/upgrade_log.txt + echo "/sbin/fsck_ffs -y /dev/$COMPLETE_PATH" >> /conf/upgrade_log.txt + /sbin/fsck_ffs -y /dev/$COMPLETE_PATH >> /conf/upgrade_log.txt 2>&1 if [ $? != 0 ]; then file_notice "UpgradeFailure" "{\$g['product_name']} upgrade has failed. Your system has been left in a usable state." - rm /var/run/firmware.lock + rm /var/run/firmwarelock.dirty /etc/rc.conf_mount_ro exit 1 fi # Add back the corresponding glabel - echo "" >> /cf/upgrade_log.txt - echo "/sbin/tunefs -L ${GLABEL_SLICE} /dev/$COMPLETE_PATH" >> /cf/upgrade_log.txt - /sbin/tunefs -L ${GLABEL_SLICE} /dev/$COMPLETE_PATH >> /cf/upgrade_log.txt 2>&1 + echo "" >> /conf/upgrade_log.txt + echo "/sbin/tunefs -L ${GLABEL_SLICE} /dev/$COMPLETE_PATH" >> /conf/upgrade_log.txt + /sbin/tunefs -L ${GLABEL_SLICE} /dev/$COMPLETE_PATH >> /conf/upgrade_log.txt 2>&1 # restore config cp -p /tmp/configbak/* /conf 2>/dev/null @@ -239,7 +265,7 @@ pfSenseNanoBSDupgrade) # If /tmp/$GLABEL_SLICE/tmp/post_upgrade_command exists # after update then execute the command. if [ -f /tmp/$GLABEL_SLICE/tmp/post_upgrade_command ]; then - sh /tmp/$GLABEL_SLICE/tmp/post_upgrade_command >> /cf/upgrade_log.txt 2>&1 + sh /tmp/$GLABEL_SLICE/tmp/post_upgrade_command >> /conf/upgrade_log.txt 2>&1 fi # Update fstab @@ -248,60 +274,71 @@ pfSenseNanoBSDupgrade) if [ $? != 0 ]; then echo "Something went wrong when trying to update the fstab entry. Aborting upgrade." file_notice "UpgradeFailure" "Something went wrong when trying to update the fstab entry. Aborting upgrade." - rm /var/run/firmware.lock + rm /var/run/firmwarelock.dirty umount /tmp/$GLABEL_SLICE /etc/rc.conf_mount_ro exit 1 fi - echo "" >> /cf/upgrade_log.txt - cat /tmp/$GLABEL_SLICE/etc/fstab >> /cf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + cat /tmp/$GLABEL_SLICE/etc/fstab >> /conf/upgrade_log.txt # Unmount newly prepared slice umount /tmp/$GLABEL_SLICE # Set active mount slice in fdisk - echo "" >> /cf/upgrade_log.txt - echo "gpart set -a active -i ${SLICE} ${BOOT_DRIVE}" >> /cf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + echo "gpart set -a active -i ${SLICE} ${BOOT_DRIVE}" >> /conf/upgrade_log.txt gpart set -a active -i ${SLICE} ${BOOT_DRIVE} # Set active boot source - echo "" >> /cf/upgrade_log.txt - echo "/usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE}" >> /cf/upgrade_log.txt - /usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE} >> /cf/upgrade_log.txt 2>&1 + echo "" >> /conf/upgrade_log.txt + echo "/usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE}" >> /conf/upgrade_log.txt + /usr/sbin/boot0cfg -s ${SLICE} -v /dev/${BOOT_DRIVE} >> /conf/upgrade_log.txt 2>&1 + + # Grab a final look at fdisk + echo "" >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVE >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs1 >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs1a >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs2 >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs2a >> /conf/upgrade_log.txt + fdisk $BOOT_DRIVEs3 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs1 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs2 >> /conf/upgrade_log.txt + bsdlabel -A $BOOT_DRIVEs3 >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt # Remove extra stuff rm -rf /etc/rc.conf rm -rf /etc/motd rm -rf /usr/savecore/* - date >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt # Trigger a package reinstallation on reobot touch /conf/needs_package_sync + # Enough fun for now. + echo "" >> /conf/upgrade_log.txt + echo "/sbin/sysctl kern.geom.debugflags=0" >> /conf/upgrade_log.txt + /sbin/sysctl kern.geom.debugflags=0 >> /conf/upgrade_log.txt 2>&1 + # remount /cf ro /etc/rc.conf_mount_ro /bin/sync - echo "Done." >> /cf/upgrade_log.txt 2>&1 - # Enough fun for now. - echo "" >> /cf/upgrade_log.txt - echo "/sbin/sysctl kern.geom.debugflags=0" >> /cf/upgrade_log.txt - /sbin/sysctl kern.geom.debugflags=0 >> /cf/upgrade_log.txt 2>&1 + sleep 10 - rm -f /var/run/firmware.lock + rm -f /var/run/firmwarelock.dirty sh /etc/rc.reboot ;; pfSenseupgrade) - # mount /cf - /etc/rc.conf_mount_rw - # Sanity check - bail early if there's no firmware file! if [ ! -r $IMG ]; then - echo "2nd parameter has not been passed or file does not exist. Exiting." >> /cf/upgrade_log.txt 2>&1 + echo "2nd parameter has not been passed or file does not exist. Exiting." >> /conf/upgrade_log.txt 2>&1 /etc/rc.conf_mount_ro exit fi @@ -310,14 +347,14 @@ pfSenseupgrade) sleep 1 # Log that we are really doing a NanoBSD upgrade - echo "" >> /cf/upgrade_log.txt - echo "NanoBSD upgrade starting" >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt + echo "NanoBSD upgrade starting" >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt - touch /var/run/firmware.lock + touch /var/run/firmwarelock.dirty - touch /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + touch /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt # Output environment information to log file output_env_to_log @@ -327,12 +364,12 @@ pfSenseupgrade) # Do we have a pre-upgrade hook in the update file? if [ `tar tvzf $IMG | grep /tmp/pre_upgrade_command | wc -l` -gt 0 ]; then - tar xzvf $IMG -C / ./tmp/pre_upgrade_command >> /cf/upgrade_log.txt 2>&1 - chmod a+rx /tmp/pre_upgrade_command >> /cf/upgrade_log.txt 2>&1 - sh /tmp/pre_upgrade_command >> /cf/upgrade_log.txt 2>&1 + tar xzvf $IMG -C / ./tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + chmod a+rx /tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 + sh /tmp/pre_upgrade_command >> /conf/upgrade_log.txt 2>&1 fi - echo "Firmware upgrade in progress..." >> /cf/upgrade_log.txt 2>&1 + echo "Firmware upgrade in progress..." >> /conf/upgrade_log.txt 2>&1 echo "Firmware upgrade in progress..." | wall # backup config @@ -340,20 +377,20 @@ pfSenseupgrade) cp -p /conf/* /tmp/configbak 2>/dev/null # tar explode image onto hd - echo "Installing $IMG." >> /cf/upgrade_log.txt 2>&1 - cd / && /usr/bin/tar xzUPf $IMG >> /cf/upgrade_log.txt 2>&1 + echo "Installing $IMG." >> /conf/upgrade_log.txt 2>&1 + cd / && /usr/bin/tar xzUPf $IMG >> /conf/upgrade_log.txt 2>&1 /usr/bin/find / -name CVS -exec rm -fr {} \; - echo "Image installed $IMG." >> /cf/upgrade_log.txt 2>&1 + echo "Image installed $IMG." >> /conf/upgrade_log.txt 2>&1 # process custom image if its passed if [ $# -eq 3 ]; then if [ -f $CUSTOMIMG ]; then - echo "Custom image $CUSTOMIMG found." >> /cf/upgrade_log.txt 2>&1 - echo "Custom image ($CUSTOMIMG) found." >> /cf/upgrade_log.txt 2>&1 + echo "Custom image $CUSTOMIMG found." >> /conf/upgrade_log.txt 2>&1 + echo "Custom image ($CUSTOMIMG) found." >> /conf/upgrade_log.txt 2>&1 PWD_DIR=`pwd` - cd / && /usr/bin/tar xzPUf $CUSTOMIMG >> /cf/upgrade_log.txt 2>&1 + cd / && /usr/bin/tar xzPUf $CUSTOMIMG >> /conf/upgrade_log.txt 2>&1 cd $PWD_DIR - echo "Custom image $CUSTOMIMG installed." >> /cf/upgrade_log.txt 2>&1 + echo "Custom image $CUSTOMIMG installed." >> /conf/upgrade_log.txt 2>&1 fi fi @@ -370,13 +407,13 @@ pfSenseupgrade) rm -f $IMG if [ -e /etc/init_bootloader.sh ]; then - sh /etc/init_bootloader.sh >> /cf/upgrade_log.txt 2>&1 + sh /etc/init_bootloader.sh >> /conf/upgrade_log.txt 2>&1 fi # If /tmp/post_upgrade_command exists after update # then execute the command. if [ -f /tmp/post_upgrade_command ]; then - sh /tmp/post_upgrade_command >> /cf/upgrade_log.txt 2>&1 + sh /tmp/post_upgrade_command >> /conf/upgrade_log.txt 2>&1 fi # remove unused files @@ -384,16 +421,19 @@ pfSenseupgrade) rm -rf /etc/motd rm -rf /usr/savecore/* - date >> /cf/upgrade_log.txt - echo "" >> /cf/upgrade_log.txt + date >> /conf/upgrade_log.txt + echo "" >> /conf/upgrade_log.txt # remount /cf ro /etc/rc.conf_mount_ro # release the firmware lock - rm -f /var/run/firmware.lock + rm -f /var/run/firmwarelock.dirty /bin/sync + # Sleep and allow disks to catch up + sleep 10 + # If the archive has unpacked a file called # /tmp/no_upgrade_reboot_required then do # not reboot after upgrade. @@ -406,7 +446,7 @@ pfSenseupgrade) ;; delta_update) - touch /var/run/firmware.lock + touch /var/run/firmwarelock.dirty backup_chflags remove_chflags binary_update $IMG -- cgit v1.1