diff options
author | Scott Ullrich <sullrich@pfsense.org> | 2008-03-29 21:32:16 +0000 |
---|---|---|
committer | Scott Ullrich <sullrich@pfsense.org> | 2008-03-29 21:32:16 +0000 |
commit | 2c14f851abbe1a88f694540644310f4c1aceb29d (patch) | |
tree | 7e3a58a0365bb7a604d82492b613363d687a4d93 /etc/rc.firmware | |
parent | c922e45b00749236c1df7246303686bf94ae5e26 (diff) | |
download | pfsense-2c14f851abbe1a88f694540644310f4c1aceb29d.zip pfsense-2c14f851abbe1a88f694540644310f4c1aceb29d.tar.gz |
Revert rc.firmware changes now that the builder system is a bit more sane.
Diffstat (limited to 'etc/rc.firmware')
-rwxr-xr-x | etc/rc.firmware | 325 |
1 files changed, 63 insertions, 262 deletions
diff --git a/etc/rc.firmware b/etc/rc.firmware index 61b4ab7..31b42f3 100755 --- a/etc/rc.firmware +++ b/etc/rc.firmware @@ -1,279 +1,80 @@ #!/bin/sh # $Id$ -# /etc/rc.firmware -# part of m0n0wall (http://neon1.net/m0n0wall) -# -# Copyright (C) 2003 Manuel Kasper <mk@neon1.net>. -# All rights reserved. -#CFDEVICE=`cat /var/etc/cfdevice` +FMBASEURL=$1 +FMFILENAME=$2 +FETCHFILENAME=$1/$2 -#exec 3>&2 2>>/tmp/firmware_update.log +# wait 5 seconds before beginning +sleep 5 -export ACTION=$1 -export IMG=$2 -if [ $# -eq 3 ]; then - export CUSTOMIMG=$3 -fi - -if [ $ACTION != "upgrade" ]; then - /sbin/umount -f /ftmp > /dev/null 2>&1 -fi - -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 | logger -p daemon.info -i -t UpgradeFlags - 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} | logger -p daemon.info -i -t UpgradeFlags - done -} - -remove_chflags() { - TOPROCESS="bin lib libexec sbin usr" - for files in $TOPROCESS; do - /bin/chflags -R noschg /${files} - /bin/chmod -R u+rw /${files} - done -} - -binary_update() { - TGZ=$1 - ERR_F="/tmp/bdiff.log" - rm ${ERR_F} 2>/dev/null - /bin/mkdir /tmp/patched /tmp/patches 2>>${ERR_F} - backup_chflags - remove_chflags - cd /tmp/patches - for i in `/usr/bin/tar tvzf $TGZ | egrep -v "(^d|_md5)" | nawk '{print $9;}'`; - do - FILE=`basename ${i}` - echo "Working on ${i}" - # Untar patch file and md5 files - /usr/bin/tar xzf ${TGZ} ${i} ${i}.old_file_md5 ${i}.new_patch_md5 ${i}.new_file_md5 2>>${ERR_F} - - # Apply patch - oldfile newfile patchfile - /usr/local/bin/bspatch /${i} /tmp/patched/${FILE} /tmp/patches/${i} 2>>${ERR_F} - - OLD_FILE_MD5=`cat /tmp/patches/${i}.old_file_md5 2>/dev/null` - NEW_PATCH_MD5=`cat /tmp/patches/${i}.new_patch_md5 2>/dev/null` - NEW_FILE_MD5=`cat /tmp/patches/${i}.new_file_md5 2>/dev/null` - PATCHED_MD5=`/sbin/md5 -q /tmp/patched/${FILE} 2>/dev/null` - - if [ "$PATCHED_MD5" = "$NEW_PATCH_MD5" ]; then - /usr/bin/install -S /tmp/patched/${FILE} /${i} - else - #echo "${i} file does not match intended final md5." - echo "${i} file does not match intended final md5." >> ${ERR_F} - fi - - chflags noschg /tmp/patched/${FILE} /tmp/patches/${i} /tmp/patches/${i}.* - /bin/rm -f /tmp/patched/${FILE} >> ${ERR_F} - /bin/rm -f /tmp/patches/${i} >> ${ERR_F} - /bin/rm -f /tmp/patches/${i}.* >> ${ERR_F} - done - /bin/rm -rf /tmp/patched /tmp/patches >> ${ERR_F} - restore_chflags -} +logger -p daemon.info -i -t AutoUpgrade "Auto Upgrade started" -case $ACTION in -enable) - #/sbin/mount_mfs -s 15360 -T qp120at -b 8192 -f 1024 dummy /ftmp \ - # > /dev/null 2>&1 - ;; -auto) - backup_chflags - remove_chflags - /etc/rc.firmware_auto - restore_chflags - ;; -upgrade) - # wait 5 seconds before beginning - sleep 5 - backup_chflags - remove_chflags +HTTP_AUTH="" - exec </dev/console >/dev/console 2>/dev/console - - echo - echo "Firmware upgrade in progress..." | logger -p daemon.info -i -t Upgrade - echo "Firmware upgrade in progress..." | wall - - # backup config - mkdir /tmp/configbak - cp -p /conf/* /tmp/configbak - - # unmount /cf - /sbin/umount -f /cf - - # dd image onto card - if [ -r $IMG ]; then - /usr/bin/gunzip -S "" -c $IMG | dd of=/dev/r$CFDEVICE bs=16k > /dev/null 2>&1 - echo "Image installed." - fi - - # mount /cf - /sbin/mount -w -o noatime /cf - - # restore config - cp -p /tmp/configbak/* /conf +# if username and password is passed, let fetch utilize. +if [ $# -gt 3 ]; then +HTTP_AUTH="basic:*:$3:$4" +fi - restore_chflags +#echo "Downloading $FMFILENAME from $FMBASEURL ..." | logger -p daemon.info -i -t AutoUpgrade +#/usr/bin/fetch -o /tmp/latest.tgz $FETCHFILENAME | logger -p daemon.info -i -t AutoUpgrade +#echo "Downloading $FMFILENAME.md5 from $FMBASEURL ..." | logger -p daemon.info -i -t AutoUpgrade +#/usr/bin/fetch -o /tmp/latest.tgz.md5 $FETCHFILENAME.md5 | logger -p daemon.info -i -t AutoUpgrade - rm -f /var/run/firmware.lock +PMD=`/bin/cat /tmp/latest.tgz.md5 | cut -d" " -f4 ` +MD=`/sbin/md5 /tmp/latest.tgz | cut -d" " -f4` - /bin/sync - sleep 5 +PLATFORM=`cat /etc/version` - echo "Done." +echo " Package MD5: ${PMD}" | logger -p daemon.info -i -t AutoUpgrade +echo "Downloaded MD5: ${MD}" | logger -p daemon.info -i -t AutoUpgrade - # If /tmp/post_upgrade_command exists after update - # then execute the command. - if [ -f /tmp/post_upgrade_command ]; then - sh /tmp/post_upgrade_command - fi +if [ "$PMD" = "" ]; then + echo "Package MD5 is null md5. Require proxy auth?" | logger -p daemon.info -i -t AutoUpgrade + exit 1 +fi - # If the archive has unpacked a file called - # /tmp/no_upgrade_reboot_required then do - # not reboot after upgrade. - if [ -f /tmp/no_upgrade_reboot_required ]; then - rm /tmp/no_upgrade_reboot_required - else - rm -f /var/run/config.lock - sh /etc/rc.reboot - fi - ;; - pfSenseupgrade) - # wait 5 seconds before beginning - sleep 5 - # 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." | logger -p daemon.info -i -t Upgrade - exit - fi - backup_chflags - remove_chflags - echo "Firmware upgrade in progress..." | logger -p daemon.info -i -t Upgrade - # backup config - /bin/mkdir -p /tmp/configbak - cp -p /conf/* /tmp/configbak 2>/dev/null - # mount /cf - /etc/rc.conf_mount_rw - /sbin/mount -w -o noatime /cf 2>/dev/null - /sbin/mount -w -o noatime / 2>/dev/null - NEWIMG="`echo $IMG | sed 's/.tgz/.tar/'`" - if [ -f $NEWIMG ]; then - rm $NEWIMG - fi - echo "Extracting $IMG." | logger -p daemon.info -i -t Upgrade - gzip -d $IMG - echo "Installing $NEWIMG." | logger -p daemon.info -i -t Upgrade - mkdir -p /tmp/firmwareupgrade/usr - mtree -deU -f /etc/mtree/BSD.usr.dist -p /tmp/firmwareupgrade/usr - mtree -deU -f /etc/mtree/BSD.root.dist -p /tmp/firmwareupgrade/ - mkdir -p /tmp/firmwareupgrade/kernels/ - - for i in `/usr/bin/tar tvf $NEWIMG | egrep "(^d)" | nawk '{print $9;}'`; - do - if [ ! -d /$i ]; then - # directory does not exist, create it - mkdir -p /$i - fi - done - for i in `/usr/bin/tar tvf $NEWIMG | egrep -v "(^d|_md5)" | nawk '{print $9;}'`; - do - FILE=`basename ${i}` - echo "Working on ${FILE} - /${i}" - echo "Working on ${FILE} - /${i}" | logger -p daemon.info -i -t Upgrade - (cd /tmp/firmwareupgrade && /usr/bin/tar xf ${NEWIMG} ${i}) - echo "Installing /usr/bin/install -S /tmp/firmwareupgrade/${i} /${i}" - echo "Installing /${i}" | logger -p daemon.info -i -t Upgrade - /usr/bin/install -S "/tmp/firmwareupgrade/${i}" "/${i}" - chflags noschg "/tmp/firmwareupgrade/${i}" - chflags noschg "/${i}" - /bin/rm -f "/tmp/firmwareupgrade/${i}" - done - /usr/bin/find / -name CVS -exec rm -fr {} \; - echo "Image installed $IMG." | logger -p daemon.info -i -t Upgrade - # process custom image if its passed - if [ $# -eq 3 ]; then - if [ -f $CUSTOMIMG ]; then - echo "Custom image $CUSTOMIMG found." | logger -p daemon.info -i -t Upgrade - echo "Custom image ($CUSTOMIMG) found." - PWD_DIR=`pwd` - cd / && /usr/bin/tar xzPUf $CUSTOMIMG | logger -p daemon.info -i -t Upgrade - cd $PWD_DIR - echo "Custom image $CUSTOMIMG installed." | logger -p daemon.info -i -t Upgrade - fi - fi - rm -rf /tmp/firmwareupgrade/ - # restore config - cp -p /tmp/configbak/* /conf 2>/dev/null - # restore /etc symlinks - rm /etc/hosts - ln -s /var/etc/hosts /etc/hosts - restore_chflags - rm -f /var/run/firmware.lock - # Remove upgrade file - rm -f $IMG - /bin/sync - sleep 5 - # remount /cf ro - rm -rf /etc/rc.conf - rm -rf /etc/motd - find / -name CVS -type d -exec rm {} \; - rm -rf /usr/savecore/* - /etc/rc.conf_mount_ro - /sbin/umount -f /cf 2>/dev/null - /sbin/mount -r /cf 2>/dev/null - /sbin/umount -f / 2>/dev/null - /sbin/mount -r / 2>/dev/null - if [ -e /etc/init_bootloader.sh ]; then - sh /etc/init_bootloader.sh - fi - rm $NEWIMG - /bin/sync - echo "Done." | logger -p daemon.info -i -t Upgrade - # If /tmp/post_upgrade_command exists after update - # then execute the command. - if [ -f /tmp/post_upgrade_command ]; then - sh /tmp/post_upgrade_command - fi - # If the archive has unpacked a file called - # /tmp/no_upgrade_reboot_required then do - # not reboot after upgrade. - if [ -f /tmp/no_upgrade_reboot_required ]; then - rm /tmp/no_upgrade_reboot_required - else - rm -f /var/run/config.lock - sh /etc/rc.reboot - fi - ;; -delta_update) - backup_chflags - remove_chflags - binary_update $IMG - restore_chflags - rm -rf /etc/rc.conf - rm -rf /etc/motd - find / -name CVS -type d -exec rm {} \; - rm -rf /usr/savecore/* - /etc/rc.conf_mount_ro - /sbin/umount -f /cf 2>/dev/null - /sbin/mount -r /cf 2>/dev/null - /sbin/umount -f / 2>/dev/null - /sbin/mount -r / 2>/dev/null - if [ -e /etc/init_bootloader.sh ]; then - sh /etc/init_bootloader.sh - fi +if [ "$MD" = "" ]; then + echo "Downloaded MD5 is null md5. Require proxy auth?" | logger -p daemon.info -i -t AutoUpgrade + exit 1 +fi - ;; -esac +if [ "$PMD" = "$MD" ]; then + echo "MD5's match." | logger -p daemon.info -i -t AutoUpgrade + echo "Beginning pfSense upgrade." | wall + if [ "$PLATFORM" = "net45xx" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ "$PLATFORM" = "wrap" ]; then + /usr/local/bin/php /etc/rc.conf_mount_rw + fi + if [ -r "/tmp/custom.tgz" ]; then + sh /etc/rc.firmware pfSenseupgrade /tmp/latest.tgz /tmp/custom.tgz + else + sh /etc/rc.firmware pfSenseupgrade /tmp/latest.tgz + fi + if [ "$PLATFORM" = "wrap" ]; then + /bin/sync + sleep 5 + /usr/local/bin/php /etc/rc.conf_mount_ro + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + fi + if [ "$PLATFORM" = "net45xx" ]; then + /bin/sync + sleep 5 + /usr/local/bin/php /etc/rc.conf_mount_ro + if [ -e /etc/init_bootloader.sh ]; then + sh /etc/init_bootloader.sh + fi + fi + exit 0 +fi +echo "MD5's do not match. Upgrade aborted." | logger -p daemon.info -i -t AutoUpgrade +rm /tmp/latest* +exit 1 |