#!/bin/sh FLASHFILE=/var/flash/freetz save() { local TMPFILE=/tmp/.save.tmp local rc=0 local MSG local size local MOD_LIMIT=$((32*1024)) # not really a lock if [ -e "$TMPFILE" ]; then echo "$TMPFILE exists! Concurrent update?" 1>&2 exit 1 fi trap "rm -f $TMPFILE" EXIT if [ -c $FLASHFILE ]; then tar -cf $TMPFILE flash -C /tmp/ # compressed config size must be less than 32 KB (~32330Bytes) size=$(gzip -c $TMPFILE | wc -c) if [ "$size" -gt "$MOD_LIMIT" ]; then echo "ERROR: $FLASHFILE too big: compressed size: $size, limit: $MOD_LIMIT" 1>&2 exit 1 fi else tar -c flash -C /tmp/ | gzip -c > $TMPFILE # *file* size is limited by config-partition size=$(stat -c %s $TMPFILE) fi if cmp -s $FLASHFILE $TMPFILE; then echo "Configuration unchanged ... skipped." else echo -n "Writing $size bytes to $FLASHFILE ... " MSG=$(cat $TMPFILE 2>&1 > $FLASHFILE) rc=$? if [ $rc -ne 0 ]; then echo "write failed: $MSG" elif ! cmp -s $FLASHFILE $TMPFILE; then echo "verify failed." rc=1 else echo "done." fi fi if [ $rc -ne 0 ]; then mv -f $TMPFILE $TMPFILE.sav fi exit $rc } case $1 in ""|all) echo -n 'Saving users, groups and passwords ... ' /usr/bin/modusers save echo 'done.' echo -n 'Saving config ... ' for pkg in $(cat /mod/etc/static.pkg 2>/dev/null); do if [ -r "/mod/etc/default.$pkg/$pkg.cfg" ]; then /usr/bin/modconf save "$pkg" fi done echo 'done.' save ;; flash) save ;; char|file) echo -n "Creating $FLASHFILE ($1) ... " if [ "$1" == "file" ] && ! df ${FLASHFILE%/*} | grep -q "${FLASHFILE%/*}$"; then echo 'not supported, aborted.' exit 1 fi rm -f "$FLASHFILE" [ "$1" == "char" ] && mknod "$FLASHFILE" c "$(sed -n 's/ tffs$//p' /proc/devices)" "$((0x3C))" [ "$1" == "file" ] && touch "$FLASHFILE" && chmod 600 "$FLASHFILE" if [ ! -e "$FLASHFILE" ]; then echo 'failed.' exit 1 fi echo 'done.' $0 all ;; *) echo "Usage: $0 [flash|all|char|file]" 1>&2 exit 1 ;; esac exit 0