From 1e38527a525ca2e4dbe3a53dad63669773d3d15c Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Tue, 21 Aug 2007 18:23:57 +0000
Subject: add sysupgrade script for config preserving system upgrades. only
 implemented for x86-2.6 at the moment, but can be ported to other platforms
 easily

SVN-Revision: 8456
---
 package/base-files/files/sbin/sysupgrade | 92 ++++++++++++++++++++++++++++++++
 1 file changed, 92 insertions(+)
 create mode 100755 package/base-files/files/sbin/sysupgrade

(limited to 'package/base-files/files/sbin')

diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
new file mode 100755
index 0000000..2805c31
--- /dev/null
+++ b/package/base-files/files/sbin/sysupgrade
@@ -0,0 +1,92 @@
+#!/bin/sh
+. /etc/functions.sh
+
+# initialize defaults
+RAMFS_COPY_BIN=""	# extra programs for temporary ramfs root
+RAMFS_COPY_DATA=""	# extra data files
+export INTERACTIVE=0
+export VERBOSE=1
+export SAVE_CONFIG=1
+
+# parse options
+while [ -n "$1" ]; do 
+	case "$1" in
+		-i) export INTERACTIVE=1;;
+		-v) export VERBOSE="$(($VERBOSE + 1))";;
+		-q) export VERBOSE="$(($VERBOSE - 1))";;
+		-*)
+			echo "Invalid option: $1"
+			exit 1
+		;;
+		*) break;;
+	esac
+	shift;
+done
+
+export CONFFILES=/tmp/sysupgrade.conffiles
+export CONF_TAR=/tmp/sysupgrade.tgz
+
+export ARGV="$*"
+export ARGC="$#"
+
+[ -z "$ARGV" ] && {
+	cat <<EOF
+Usage: $0 [options] <image file or URL>
+
+Options:
+	-i	interactive mode
+	-v	more verbose
+	-q	less verbose
+
+EOF
+	exit 1
+}
+
+add_uci_conffiles() {
+	local file="$1"
+	find /etc/config > "$file"
+	return 0
+}
+
+# hooks
+sysupgrade_image_check="platform_check_image"
+sysupgrade_init_conffiles="add_uci_conffiles"
+
+include /lib/upgrade
+
+do_save_conffiles() {
+	[ -z "$(rootfs_type)" ] && {
+		echo "Cannot save config while running from ramdisk."
+		ask_bool 0 "Abort" && exit
+		return 0
+	}
+	run_hooks "$CONFFILES" $sysupgrade_init_conffiles
+	ask_bool 0 "Edit config file list" && vi "$CONFFILES"
+
+	v "Saving config files..."
+	[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
+	tar c${TAR_V}zf "$CONF_TAR" -T "$CONFFILES" 2>/dev/null
+}
+
+type platform_check_image >/dev/null 2>/dev/null || {
+	echo "Firmware upgrade is not implemented for this platform."
+	exit 1
+}
+
+for check in $sysupgrade_image_check; do
+	( eval "$check \"\$ARGV\"" ) || {
+		echo "Image check '$check' failed."
+		exit 1
+	}
+done
+
+if ask_bool $SAVE_CONFIG "Keep config files over reflash"; then
+	do_save_conffiles
+	export SAVE_CONFIG=1
+else
+	export SAVE_CONFIG=0
+fi
+run_hooks "" $sysupgrade_pre_upgrade
+
+v "Switching to ramdisk..."
+run_ramfs '. /etc/functions.sh; include /lib/upgrade; do_upgrade'
-- 
cgit v1.1