[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