[openwrt/openwrt] apk: provide csum for static conffiles

LEDE Commits lede-commits at lists.infradead.org
Tue Jun 11 14:59:05 PDT 2024


ansuel pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/93d49529a119a88e9049a868833a0eebb975b37c

commit 93d49529a119a88e9049a868833a0eebb975b37c
Author: Christian Marangi <ansuelsmth at gmail.com>
AuthorDate: Sat May 25 16:00:27 2024 +0200

    apk: provide csum for static conffiles
    
    For non-overlay configuration we need checksum for config file that
    weren't modified by the user. For OPKG in sysupgrade we check the status
    file for the Conffiles: entry of every package. this entry contains
    checksum for every static file that the package contains.
    
    Provide the same info for APK by creating a conffiles_static file and
    parse this file on sysupgrade for non-overlay configurations.
    
    This is also used by the sysupgrade -u option to exclude non-changed
    files from the final backup.
    
    Link: https://github.com/openwrt/openwrt/pull/15543
    Signed-off-by: Christian Marangi <ansuelsmth at gmail.com>
---
 include/package-pack.mk                  | 17 +++++++++++++++--
 package/base-files/files/sbin/sysupgrade | 20 ++++++++++++++------
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/include/package-pack.mk b/include/package-pack.mk
index 75acdd185c..26a3278834 100644
--- a/include/package-pack.mk
+++ b/include/package-pack.mk
@@ -307,12 +307,25 @@ else
 	if [ -n "$(USERID)" ]; then echo $(USERID) > $$(IDIR_$(1))/lib/apk/packages/$(1).rusers; fi;
 	if [ -n "$(ALTERNATIVES)" ]; then echo $(ALTERNATIVES) > $$(IDIR_$(1))/lib/apk/packages/$(1).alternatives; fi;
 	(cd $$(IDIR_$(1)) && find . -type f,l -printf "/%P\n" > $$(IDIR_$(1))/lib/apk/packages/$(1).list)
-	if [ -f $$(ADIR_$(1))/conffiles ]; then mv $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; fi;
+	# Move conffiles to IDIR and build conffiles_static with csums
+	if [ -f $$(ADIR_$(1))/conffiles ]; then \
+		mv -f $$(ADIR_$(1))/conffiles $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \
+		for file in $$$$(cat $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles); do \
+			[ -f $$(IDIR_$(1))/$$$$file ] || continue; \
+			csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \
+			echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \
+		done; \
+	fi
 
 	# Some package (base-files) manually append stuff to conffiles
 	# Append stuff from it and delete the CONTROL directory since everything else should be migrated
 	if [ -f $$(IDIR_$(1))/CONTROL/conffiles ]; then \
-		cat $$(IDIR_$(1))/CONTROL/conffiles >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \
+		echo $$$$(IDIR_$(1))/CONTROL/conffiles >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles; \
+		for file in $$$$(cat $$(IDIR_$(1))/CONTROL/conffiles); do \
+			[ -f $$(IDIR_$(1))/$$$$file ] || continue; \
+			csum=$$$$($(MKHASH) sha256 $$(IDIR_$(1))/$$$$file); \
+			echo $$$$file $$$$csum >> $$(IDIR_$(1))/lib/apk/packages/$(1).conffiles_static; \
+		done; \
 		rm -rf $$(IDIR_$(1))/CONTROL/conffiles; \
 	fi
 
diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
index 9b422107d8..611d8830bf 100755
--- a/package/base-files/files/sbin/sysupgrade
+++ b/package/base-files/files/sbin/sysupgrade
@@ -130,12 +130,20 @@ fi
 
 
 list_conffiles() {
-	awk '
-		BEGIN { conffiles = 0 }
-		/^Conffiles:/ { conffiles = 1; next }
-		!/^ / { conffiles = 0; next }
-		conffiles == 1 { print }
-	' /usr/lib/opkg/status
+	if [ -f /usr/lib/opkg/status ]; then
+		awk '
+			BEGIN { conffiles = 0 }
+			/^Conffiles:/ { conffiles = 1; next }
+			!/^ / { conffiles = 0; next }
+			conffiles == 1 { print }
+		' /usr/lib/opkg/status
+	elif [ -d /lib/apk/packages ]; then
+		conffiles=""
+		for file in /lib/apk/packages/*.conffiles_static; do
+			conffiles="$(echo -e "$(cat $file)\n$conffiles")"
+		done
+		echo "$conffiles"
+	fi
 }
 
 list_changed_conffiles() {




More information about the lede-commits mailing list