Manual Update button broken?
-
Iv noticed that the button for Manuel Update is not going anywhare, when i press it like used to it just hang. Have been since pfSense-Full-Update-1.2.3-20090704-0349 build.
-
Iv noticed that the button for Manuel Update is not going anywhare, when i press it like used to it just hang. Have been since pfSense-Full-Update-1.2.3-20090704-0349 build.
"Enable Firmware Update" button.
Same here, click then nothing. Just hangs.
Im doing an automatic update right now…
-
This should be fixed now, or at least in the next available snapshot after this post. A fix went into the repo a while ago, but you may have to use auto-update to grab it, or do a console upgrade.
-
still hang with: pfSense-Full-Update-1.2.3-20090705-2031
: pfSense-Full-Update-1.2.3-20090706-1212file, lets wait for next build :)
-
Issue still exists with pfSense-1.2.3-20090707-1317.
-
I was wondering about this too since I thought I fubered the firmware update from the latest snapshot this morning. I am going to do a manual update via the console tonight. Let me know when the next snapshot fixes it.
Thanks.
-
Well, I tried doing the update via console with no avail… any ideas?
Fatal error: Call to undefined function: mark_subsystem_dirty() in /etc/rc.initial.firmware_update on line 47
-
There were some more commits that went in tonight that might fix this.
-
The auto-update didn't work for me. Is there a way to fix /etc/rc.initial.firmware_update file so it can get the manual updates?
-
latest /pfSense-Full-Update-1.2.3-20090708-1827.tgz came up with a fatal error. I had to start over from iso. I didnt write down the errror- sorry!
-
Regarding the broken update… http://forum.pfsense.org/index.php/topic,17573.0.html
-
Seems to be fixed, with pfSense-1.2.3-20090710-1120
-
Glad to know the latest snapshot fixes it.
However, how do we fix our broken updates? I tried manual update via the console and it gives me this error:
Fatal error: Call to undefined function: mark_subsystem_dirty() in /etc/rc.initial.firmware_update on line 47
I really hate the thought of complete reinstall via a ISO CD as I like to keep the traffic logs and stuff.
-
Glad to know the latest snapshot fixes it.
However, how do we fix our broken updates? I tried manual update via the console and it gives me this error:
Fatal error: Call to undefined function: mark_subsystem_dirty() in /etc/rc.initial.firmware_update on line 47
You can copy a "good" /etc/rc.initial.firmware_update from a working system, CD, etc on top of that file on a broken system. There are any number of ways to do this (scp, edit file in the gui and copy/paste, etc)
-
You can copy a "good" /etc/rc.initial.firmware_update from a working system, CD, etc on top of that file on a broken system. There are any number of ways to do this (scp, edit file in the gui and copy/paste, etc)
Still have not run … :)
-
I'm having problems even with the newest updates. I'm going back to the stable ones for now.
Looks like the snapshots site is down for 1.2.3 anyways. -
I just installed XenServer 5.5.0 and I am running snapshots. I was able to recover for a failure in just about 10 seconds. I converted a snapshot to a template it's running great. I can create a snap prior to doing a update and can recover very quicky if it blows up.
RC
-
Iv noticed that the button for Manuel Update is not going anywhare, when i press it like used to it just hang. Have been since pfSense-Full-Update-1.2.3-20090704-0349 build.
Solutions Manual update: edit the file / etc / rc.firmware. (copy the file ..
#!/bin/sh
$Id: rc.firmware,v 1.64.2.25.2.1 2008/07/12 12:19:50 ermal Exp $
/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
exec 3>&2 2>>/tmp/firmware_update.log
export ACTION=$1
export IMG=$2
if [ $# -eq 3 ]; then
export CUSTOMIMG=$3
fiif [ $ACTION != "upgrade" ]; then
/sbin/umount -f /ftmp > /dev/null 2>&1
fibackup_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/bin/rm /tmp/patched/${FILE} >> ${ERR_F}
/bin/rm /tmp/patches/${i} >> ${ERR_F}
/bin/rm /tmp/patches/${i}.* >> ${ERR_F}
done
/bin/rm -rf /tmp/patched /tmp/patches >> ${ERR_F}
restore_chflags
}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_chflagsDo 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
chmod a+rx /tmp/pre_upgrade_command
sh /tmp/pre_upgrade_command
fi#exec /dev/console 2>/dev/console
echo
echo "Firmware upgrade in progress…" | logger -p daemon.info -i -t Upgrade
echo "Firmware upgrade in progress..." | wallbackup config
mkdir /tmp/configbak
cp -p /conf/* /tmp/configbakunmount /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."
fimount /cf
/sbin/mount -w -o noatime /cf
restore config
cp -p /tmp/configbak/* /conf
restore_chflags
rm -f /var/run/firmware.lock
/bin/sync
sleep 5echo "Done."
If /tmp/post_upgrade_command exists after update
then execute the command.
if [ -f /tmp/post_upgrade_command ]; then
sh /tmp/post_upgrade_command
fiIf 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
fibackup_chflags
remove_chflags#exec /dev/console 2>/dev/console
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/nullmount /cf
/etc/rc.conf_mount_rw
/sbin/mount -w -o noatime /cf 2>/dev/null
/sbin/mount -w -o noatime / 2>/dev/nulltar explode image onto hd
echo "Installing $IMG." | logger -p daemon.info -i -t Upgrade
cd / && /usr/bin/tar xzUPf $IMG | logger -p daemon.info -i -t Upgrade
/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
firestore config
cp -p /tmp/configbak/* /conf 2>/dev/null
restore /etc symlinks
rm /etc/hosts
ln -s /var/etc/hosts /etc/hostsrestore_chflags
Remove upgrade file
rm -f $IMG
rm -f /var/run/firmware.lock
/bin/sync
sleep 5remount /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
/bin/sync
echo "Done." | logger -p daemon.info -i -t UpgradeIf /tmp/post_upgrade_command exists after update
then execute the command.
if [ -f /tmp/post_upgrade_command ]; then
sh /tmp/post_upgrade_command
fiIf 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;;
esacThen open Edit / etc / rc.initial.firmware_update .. (copy and paste the file …
#!/usr/local/bin/php -f
$g['booting'] = true;
require("globals.inc");echo "Starting the {$g['product_name']} console firmware update system";
require("functions.inc");
echo ".";
require("config.inc");
echo ".";
$g['booting'] = false;$d_fwupenabled_path = $g['varrun_path'] . "/fwup.enabled";
$fp = fopen('php://stdin', 'r');
echo ".\n\n";
$shell_active = true;
echo "1) Update from a URL\n";
echo "2) Update from a local file\n";
echo "Q) Quit\n";echo "\nPlease select an option to continue: ";
$command = strtoupper(chop(fgets($fp)));
switch ($command) {
case "q":
case "quit":
echo "\n";
fclose($fp);
die;
break;
case "1":
echo "\nEnter the URL to the .tgz update file:\n> ";
$url = chop(fgets($fp));
if(!$url) {
fclose($fp);
die;
}
$status = does_url_exist($url);
if($status) {
conf_mount_rw();
touch($d_fwupenabled_path);
if(file_exists("/root/firmware.tgz"))
unlink("/root/firmware.tgz");
echo "\nFetching file size…\n";
$file_size = exec("fetch -s "$url"");
$file_size = trim($file_size, "\r");
echo "\nFile size: $file_size\n";
echo "\nFetching file...\n";
exec("fetch -1 -w15 -a -v -o /root/firmware.tgz "$url"");
if($file_size <> filesize("/root/firmware.tgz")) {
echo "\nFile size mismatch. Upgrade cancelled.\n\n";
fclose($fp);
die;
}
if(!file_exists("/root/firmware.tgz")) {
echo "Something went wrong during file transfer. Exiting.\n\n";
fclose($fp);
die;
}
$status = does_url_exist("$url.md5");
if($status) {
echo "\nFetching MD5...\n";
exec("fetch -1 -w15 -a -v -o /root/firmware.tgz.md5 "$url.md5"");
} else {
echo "\n\nWARNING.\n";
echo "\nCould not locate a MD5 file. We cannot verify the download once its done.\n\n";
sleep(15);
}
if(file_exists("/root/firmware.tgz.md5")) {
$source_md5 = trim(cat /root/firmware.tgz.md5 | awk '{ print \$4 }'
,"\r");
$file_md5 = trim(md5 /root/firmware.tgz | awk '{ print \$4 }'
,"\r");
echo "URL MD5: $source_md5\n";
echo "Downloaded file MD5: $file_md5\n";
if($source_md5 <> $file_md5) {
echo "\n\nMD5 checksum does not match. Cancelling upgrade.\n\n";
exec("rm -f /root/.md5");
fclose($fp);
die -1;
}
echo "\nMD5 checksum matches.\n";
exec("rm -f /root/.md5");
}
if(stristr($url,"bdiff"))
$type = "bdiff";
if(file_exists("/root/firmware.tgz"))
do_upgrade("/root/firmware.tgz", $type);
} else {
echo "\nCould not download update.\n\n";
fclose($fp);
die -1;
}
case "2":
echo "\nEnter the complete path to the .tgz update file: ";
$path = chop(fgets($fp));
if(!$path) {
fclose($fp);
die;
}
if(stristr($fp,"bdiff"))
$type = "bdiff";
if(file_exists($path)) {
touch($d_fwupenabled_path);
do_upgrade($path, $type);
} else {
echo "\nCould not find file.\n\n";
fclose($fp);
die -1;
}
}function check_for_kernel_file() {
global $fp;
$platform = file_get_contents("/etc/platform");
$platform = str_replace("\n", "", $platform);
$platform = str_replace("\r", "", $platform);
if($platform == "embedded" or $platform == "wrap") {
exec("echo wrap > /boot/kernel/pfsense_kernel.txt");
echo "\n";
return;
}
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]: ";
$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":
exec("echo wrap > /boot/kernel/pfsense_kernel.txt");
break;
case "4":
exec("echo Developers > /boot/kernel/pfsense_kernel.txt");
break;
}
echo "\n";
}
}function do_upgrade($path, $type) {
global $fp;
check_for_kernel_file();
echo "\nOne moment please… Invoking firmware upgrade...\n";
if($type == "bdiff")
exec("/etc/rc.firmware delta_update $path");
else
exec("/etc/rc.firmware pfSenseupgrade $path");
unlink_if_exists($path);
die;
}exec("rm -f /root/*.md5");
fclose($fp);?>
Pfsense can now update to the latest version …. ::)/mk@neon1.net
-
Bah!! Wish I seen this before I wiped the hard drive with a fresh install. Ah well
Nice catch tho.