Restore the status of the system-services after sysupgrade.
Create a file with the status of all known services and keep it during
upgrade. After upgrade run a uci-default script to restore every
single service.
The list of the service status will be stored in etc/backup folder also
and formated as:
/etc/init.d/<service> {enable|disable}When upgrading with an generic image all system services are enabled by default which is usually not expected and can cause trouble. The default behavior can be flipped with the "-s" option of sysupgrade. Signed-off-by: Sven Roederer <[email protected]> --- This v2 includes the feedback from the mailinglist: * entangles this feature from "storing the packagelist" * adds a option for disabling to sysupgrade * makes it enabled by default * includes the glue-script to restore the services after upgrade I was not able to test on a real system yet. package/base-files/Makefile | 2 +- .../uci-defaults/14_restore-services-state | 3 ++ package/base-files/files/sbin/sysupgrade | 38 ++++++++++++++----- 3 files changed, 32 insertions(+), 11 deletions(-) create mode 100644 package/base-files/files/etc/uci-defaults/14_restore-services-state diff --git a/package/base-files/Makefile b/package/base-files/Makefile index f18f221129..5a9bacba13 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -12,7 +12,7 @@ include $(INCLUDE_DIR)/version.mk include $(INCLUDE_DIR)/feeds.mk PKG_NAME:=base-files -PKG_RELEASE:=246 +PKG_RELEASE:=247 PKG_FLAGS:=nonshared PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/ diff --git a/package/base-files/files/etc/uci-defaults/14_restore-services-state b/package/base-files/files/etc/uci-defaults/14_restore-services-state new file mode 100644 index 0000000000..d0085f3f80 --- /dev/null +++ b/package/base-files/files/etc/uci-defaults/14_restore-services-state @@ -0,0 +1,3 @@ +SERVICE_STATUS=/etc/backup/service_status.txt + +[ -e ${SERVICE_STATUS} ] && . ${SERVICE_STATUS} diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index 50f4e08e44..068ec27e3d 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -15,6 +15,7 @@ export SAVE_OVERLAY_PATH= export SAVE_PARTITIONS=1 export SAVE_INSTALLED_PKGS=0 export SKIP_UNCHANGED=1 +export SAVE_SERVICE_STATUS=1 export CONF_IMAGE= export CONF_BACKUP_LIST=0 export CONF_BACKUP= @@ -35,6 +36,7 @@ while [ -n "$1" ]; do -c) export SAVE_OVERLAY=1 SAVE_OVERLAY_PATH=/etc;; -o) export SAVE_OVERLAY=1 SAVE_OVERLAY_PATH=/;; -p) export SAVE_PARTITIONS=0;; + -s) export SAVE_SERVICE_STATUS=0;; -k) export SAVE_INSTALLED_PKGS=1;; -U) export SKIP_UNCHANGED=0;; -b|--create-backup) export CONF_BACKUP="$2" NEED_IMAGE=1; shift;; @@ -57,13 +59,14 @@ export CONFFILES=/tmp/sysupgrade.conffiles export CONF_TAR=/tmp/sysupgrade.tgz export ETCBACKUP_DIR=/etc/backup export INSTALLED_PACKAGES=${ETCBACKUP_DIR}/installed_packages.txt +export SERVICE_STATUS=${ETCBACKUP_DIR}/service_status.txt IMAGE="$1" [ -z "$IMAGE" -a -z "$NEED_IMAGE" -a $CONF_BACKUP_LIST -eq 0 -o $HELP -gt 0 ] && { cat <<EOF Usage: $0 [<upgrade-option>...] <image file or URL> - $0 [-q] [-i] [-c] [-U] [-o] [-k] <backup-command> <file> + $0 [-q] [-i] [-c] [-U] [-o] [-s] [-k] <backup-command> <file> upgrade-option: -f <config> restore configuration from .tar.gz (file or url) @@ -75,6 +78,7 @@ upgrade-option: (this is a modification of Freifunk Berlin to unset -u) -n do not save configuration over reflash -p do not attempt to restore the partition table after flash. + -s do not attempt to restore the status of the services. -k include in backup a list of current installed packages at $INSTALLED_PACKAGES -T | --test @@ -231,8 +235,7 @@ do_save_conffiles() { run_hooks "$CONFFILES" $sysupgrade_init_conffiles ask_bool 0 "Edit config file list" && vi "$CONFFILES" - if [ "$SAVE_INSTALLED_PKGS" -eq 1 ]; then - echo "${INSTALLED_PACKAGES}" >> "$CONFFILES" + if [ "$SAVE_INSTALLED_PKGS" -eq 1 ] || [ "$SAVE_SERVICE_STATUS" -eq 1 ]; then mkdir -p "$ETCBACKUP_DIR" # Avoid touching filesystem on each backup RAMFS="$(mktemp -d -t sysupgrade.XXXXXX)" @@ -243,13 +246,28 @@ do_save_conffiles() { ask_bool 0 "Abort" && exit } - # Format: pkg-name<TAB>{rom,overlay,unkown} - # rom is used for pkgs in /rom, even if updated later - find /usr/lib/opkg/info -name "*.control" \( \ - \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \ - \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \ - \( -exec echo {} unknown \; \) \ - \) | sed -e 's,.*/,,;s/\.control /\t/' > ${INSTALLED_PACKAGES} + if [ "$SAVE_INSTALLED_PKGS" -eq 1 ]; then + echo "${INSTALLED_PACKAGES}" >> "$CONFFILES" + # Format: pkg-name<TAB>{rom,overlay,unkown} + # rom is used for pkgs in /rom, even if updated later + find /usr/lib/opkg/info -name "*.control" \( \ + \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \ + \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \ + \( -exec echo {} unknown \; \) \ + \) | sed -e 's,.*/,,;s/\.control /\t/' > ${INSTALLED_PACKAGES} + fi + + if [ "$SAVE_SERVICE_STATUS" -eq 1 ]; then + echo "${SERVICE_STATUS}" >> "$CONFFILES" + # Format: /etc/init.d/servicename {enable,disable} + rm -f ${SERVICE_STATUS} + for service in /etc/init.d/* ; do \ + ${service} enabled && \ + echo >> ${SERVICE_STATUS} "$service" "enable" || \ + echo >> ${SERVICE_STATUS} "$service" "disable" \ + ; \ + done + fi fi v "Saving config files..." -- 2.20.1 _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
