Openwrt Ubifs保存配置升级
修改target\linux\ipq806x\base-files\sbin\sysupgrade
先将/etc/config下面的配置文件备份到/tmp中(内存文件系统),执行firstboot擦除ubi文件系统
将ubifs分区挂载到/tmp/overlay目录,还原备份文件,再执行固件更新操作
#!/bin/sh
. /lib/functions.sh
. /lib/functions/system.sh
# initialize defaults
RAMFS_COPY_BIN="" # extra programs for temporary ramfs root
RAMFS_COPY_DATA="" # extra data files
export IMAGE_FILE=
export MTD_CONFIG_ARGS=""
export INTERACTIVE=0
export VERBOSE=1
export SAVE_CONFIG=1
export SAVE_OVERLAY=0
export DELAY=3
export CONF_IMAGE=
export CONF_BACKUP_LIST=0
export CONF_BACKUP=
export CONF_RESTORE=
export NEED_IMAGE=
export HELP=0
export FORCE=0
export TEST=0
# parse options
while [ -n "$1" ]; do
case "$1" in
-i) export INTERACTIVE=1;;
-d) export DELAY="$2"; shift;;
-v) export VERBOSE="$(($VERBOSE + 1))";;
-q) export VERBOSE="$(($VERBOSE - 1))";;
-n) export SAVE_CONFIG=0;;
-c) export SAVE_OVERLAY=1;;
-b|--create-backup) export CONF_BACKUP="$2" NEED_IMAGE=1; shift;;
-r|--restore-backup) export CONF_RESTORE="$2" NEED_IMAGE=1; shift;;
-l|--list-backup) export CONF_BACKUP_LIST=1; break;;
-f) export CONF_IMAGE="$2"; shift;;
-F|--force) export FORCE=1;;
-T|--test) export TEST=1;;
-h|--help) export HELP=1; break;;
-*)
echo "Invalid option: $1"
exit 1
;;
*)
export IMAGE_FILE="$1"
break
;;
esac
shift;
done
export CONFFILES=/tmp/sysupgrade.conffiles
export CONF_TAR=/tmp/sysupgrade.tgz
export ARGV="$*"
export ARGC="$#"
[ -z "$ARGV" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && {
cat <<EOF
Usage: $0 [<upgrade-option>...] <image file or URL>
upgrade-option:
-n do not save configuration over reflash
-q less verbose
-v more verbose
-h | --help display this help
EOF
exit 1
}
export CONFFILES=/tmp/sysupgrade.conffiles
export CONF_TAR=/tmp/sysupgrade.tgz
add_uci_conffiles() {
local file="$1"
( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
/etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \
-type f -o -type l 2>/dev/null;
opkg list-changed-conffiles ) | sort -u > "$file"
return 0
}
if [ $CONF_BACKUP_LIST -eq 1 ]; then
add_uci_conffiles "$CONFFILES"
# cat "$CONFFILES"
fi
run_hooks() {
local arg="$1"; shift
for func in "$@"; do
eval "$func $arg"
done
}
sysupgrade_init_conffiles="add_uci_conffiles"
do_save_conffiles() {
local conf_tar="${1:-$CONF_TAR}"
# [ -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"
echo "Saving config files..."
[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
tar c${TAR_V}zf "$conf_tar" -T "$CONFFILES" 2>/dev/null
rm -f "$CONFFILES"
}
ubifs_copy_config() {
if grep netgear /proc/mtd >/dev/null; then
local conf_tar="${1:-$CONF_TAR}"
# squashfs+jffs2
echo "Saving config files...(squashfs+ubifs)"
mount -t ubifs ubi0:rootfs_data /tmp/overlay
#erase all ubifs rootfs_data partition
firstboot
#backup configfiles
[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
tar x${TAR_V}zf "$conf_tar" -C /tmp/overlay/
fi
}
if [ $SAVE_CONFIG -eq 1 ]; then
do_save_conffiles
ubifs_copy_config
fi