base-files: sysupgrade: add saving list of installed packages for APK
authorRobert Marko <robimarko@gmail.com>
Sat, 30 Nov 2024 12:05:39 +0000 (13:05 +0100)
committerRobert Marko <robimarko@gmail.com>
Sat, 28 Dec 2024 09:59:50 +0000 (10:59 +0100)
Add support for saving list of installed packages for APK in the same way
we do it for OPKG.

Unlike OPKG, we dont generate .control files for packages so lets use .list
files instead.

Fixes: #16947
Link: https://github.com/openwrt/openwrt/pull/17123
Signed-off-by: Robert Marko <robimarko@gmail.com>
package/base-files/files/sbin/sysupgrade

index 611d8830bfd1ffea4ee84d931cda1f3984885b96..e51ab0b4f1b21677cb3fbff40e15fbcabb28ae5f 100755 (executable)
@@ -279,11 +279,19 @@ create_backup_archive() {
                        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/')" || ret=1
+                               if [ -d "/usr/lib/opkg/info" ]; then
+                                       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/')" || ret=1
+                               elif [ -d "/lib/apk/packages" ]; then
+                                       tar_print_member "$INSTALLED_PACKAGES" "$(find /lib/apk/packages -name "*.list" \( \
+                                               \( -exec test -f /rom/{} \; -exec echo {} rom \; \) -o \
+                                               \( -exec test -f /overlay/upper/{} \; -exec echo {} overlay \; \) -o \
+                                               \( -exec echo {} unknown \; \) \
+                                               \) | sed -e 's,.*/,,;s/\.list /\t/')" || ret=1
+                               fi
                        fi
                fi