فهرست منبع

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 <[email protected]>
Christian Marangi 1 سال پیش
والد
کامیت
93d49529a1
2فایلهای تغییر یافته به همراه29 افزوده شده و 8 حذف شده
  1. 15 2
      include/package-pack.mk
  2. 14 6
      package/base-files/files/sbin/sysupgrade

+ 15 - 2
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
 

+ 14 - 6
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() {