summaryrefslogtreecommitdiffstats
path: root/etc/rc.firmware
diff options
context:
space:
mode:
authorScott Ullrich <sullrich@pfsense.org>2008-03-29 21:33:06 +0000
committerScott Ullrich <sullrich@pfsense.org>2008-03-29 21:33:06 +0000
commitfee835af8c429691cd0e11a4f19e3e480a7c5098 (patch)
tree6f7863a27c68bc6fb05fc394ab672a78ab368f35 /etc/rc.firmware
parent3b6a207d7225f0a791dfad4fbb4e309ba70d7050 (diff)
downloadpfsense-fee835af8c429691cd0e11a4f19e3e480a7c5098.zip
pfsense-fee835af8c429691cd0e11a4f19e3e480a7c5098.tar.gz
Revert rc.firmware to a known working state now that the builder
process is a bit more sane.
Diffstat (limited to 'etc/rc.firmware')
-rwxr-xr-xetc/rc.firmware325
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
OpenPOWER on IntegriCloud