summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafał Miłecki <rafal@milecki.pl>2024-02-28 11:51:01 +0100
committerRafał Miłecki <rafal@milecki.pl>2024-02-29 16:12:06 +0100
commite36cc530927c4294c1510d7cdf89f0b9739e6cde (patch)
treed679251cf7a6b37c4ab7eb72254afb6f232afafe
parent08495b7f2474801c0b80a7b5335a51f108e76be2 (diff)
downloadopenwrt-e36cc530927c4294c1510d7cdf89f0b9739e6cde.tar.gz
openwrt-e36cc530927c4294c1510d7cdf89f0b9739e6cde.tar.bz2
openwrt-e36cc530927c4294c1510d7cdf89f0b9739e6cde.zip
base-files: sysupgrade: use tar helper to include installed_packages.txt
Replace mount + overlay with manually built tar archive that gets prepended to the actual config files backup. This allows more flexibility with including extra backup files. They can be included at any paths and don't require writing to flash or mounting an overlay which has its own limitations (mount points). Signed-off-by: Rafał Miłecki <rafal@milecki.pl> Acked-by: Jo-Philipp Wich <jo@mein.io>
-rwxr-xr-xpackage/base-files/files/sbin/sysupgrade44
1 files changed, 16 insertions, 28 deletions
diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
index 6b3fb0666f..a11e17615c 100755
--- a/package/base-files/files/sbin/sysupgrade
+++ b/package/base-files/files/sbin/sysupgrade
@@ -237,8 +237,6 @@ include /lib/upgrade
create_backup_archive() {
local conf_tar="$1"
- local umount_etcbackup_dir=0
-
[ "$(rootfs_type)" = "tmpfs" ] && {
echo "Cannot save config while running from ramdisk." >&2
ask_bool 0 "Abort" && exit
@@ -248,41 +246,31 @@ create_backup_archive() {
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"
- mkdir -p "$ETCBACKUP_DIR"
- # Avoid touching filesystem on each backup
- RAMFS="$(mktemp -d -t sysupgrade.XXXXXX)"
- mkdir -p "$RAMFS/upper" "$RAMFS/work"
- mount -t overlay overlay -o lowerdir=$ETCBACKUP_DIR,upperdir=$RAMFS/upper,workdir=$RAMFS/work $ETCBACKUP_DIR &&
- umount_etcbackup_dir=1 || {
- echo "Cannot mount '$ETCBACKUP_DIR' as tmpfs to avoid touching disk while saving the list of installed packages." >&2
- ask_bool 0 "Abort" && exit
- }
-
- # Format: pkg-name<TAB>{rom,overlay,unknown}
- # 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
-
v "Saving config files..."
[ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V=""
sed -i -e 's,^/,,' "$CONFFILES"
- tar c${TAR_V}zf "$conf_tar" -C / -T "$CONFFILES"
+ {
+ # Part of archive with installed packages info
+ if [ "$SAVE_INSTALLED_PKGS" -eq 1 ]; then
+ # Format: pkg-name<TAB>{rom,overlay,unknown}
+ # rom is used for pkgs in /rom, even if updated later
+ tar_print_member "$INSTALLED_PACKAGES" "$(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/')"
+ fi
+
+ # Rest of archive with config files and ending padding
+ tar c${TAR_V} -C / -T "$CONFFILES"
+ } | gzip > "$conf_tar"
+
local err=$?
if [ "$err" -ne 0 ]; then
echo "Failed to create the configuration backup."
rm -f "$conf_tar"
fi
- [ "$umount_etcbackup_dir" -eq 1 ] && {
- umount "$ETCBACKUP_DIR"
- rm -rf "$RAMFS"
- }
rm -f "$CONFFILES"
return "$err"