Przeglądaj źródła

Fix creation of system users after sysupgrades

The ar71xx-tiny target sets CONFIG_CLEAN_IPKG, which would delete opkg
control files required for user creation. Fix image generation and the user
creation script.

Fixes #1012
Matthias Schiffer 7 lat temu
rodzic
commit
0be280cde5

+ 37 - 0
patches/lede/0009-include-rootfs.mk-keep-Require-User-lines-with-CONFIG_CLEAN_IPKG.patch

@@ -0,0 +1,37 @@
+From: Matthias Schiffer <mschiffer@universe-factory.net>
+Date: Tue, 24 Jan 2017 17:00:43 +0100
+Subject: include/rootfs.mk: keep Require-User lines with CONFIG_CLEAN_IPKG
+
+Require-User is handled by /etc/uci-defaults/13_fix_group_user on first
+boot, so we need to keep these when removing all opkg data with
+CONFIG_CLEAN_IPKG.
+
+Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
+
+diff --git a/include/rootfs.mk b/include/rootfs.mk
+index 90d70a11f2e775c83b9907ec1f296c0e4d535ad6..c014b1d14ab0963687417809431abc0bf314830c 100644
+--- a/include/rootfs.mk
++++ b/include/rootfs.mk
+@@ -47,6 +47,14 @@ opkg = \
+ 
+ TARGET_DIR_ORIG := $(TARGET_ROOTFS_DIR)/root.orig-$(BOARD)
+ 
++ifdef CONFIG_CLEAN_IPKG
++  define clean_ipkg
++	-find $(1)/usr/lib/opkg -type f -and -not -name '*.control' | $(XARGS) rm -rf
++	-sed -i -ne '/^Require-User: /p' $(1)/usr/lib/opkg/info/*.control
++	-find $(1)/usr/lib/opkg -empty | $(XARGS) rm -rf
++  endef
++endif
++
+ define prepare_rootfs
+ 	@if [ -d $(TOPDIR)/files ]; then \
+ 		$(call file_copy,$(TOPDIR)/files/.,$(1)); \
+@@ -75,6 +83,6 @@ define prepare_rootfs
+ 	rm -f $(1)/usr/lib/opkg/lists/*
+ 	rm -f $(1)/usr/lib/opkg/info/*.postinst*
+ 	rm -f $(1)/usr/lib/opkg/info/*.prerm*
+-	$(if $(CONFIG_CLEAN_IPKG),rm -rf $(1)/usr/lib/opkg)
++	$(call clean_ipkg,$(1))
+ 	$(call mklibs,$(1))
+ endef

+ 26 - 0
patches/lede/0010-base-files-fix-user-creation-on-sysupgrade-with-few-opkg-control-files.patch

@@ -0,0 +1,26 @@
+From: Matthias Schiffer <mschiffer@universe-factory.net>
+Date: Tue, 24 Jan 2017 18:55:13 +0100
+Subject: base-files: fix user creation on sysupgrade with few opkg control files
+
+If only a single opkg control file exists (which can happen with
+CONFIG_CLEAN_IPKG), grep would not print the file name by default. Instead
+of forcing it using -H, we just switch to -l (print only file names) and
+get rid of the cut.
+
+Add -s to suppress an error message when no control files exist.
+
+Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
+
+diff --git a/package/base-files/files/etc/uci-defaults/13_fix_group_user b/package/base-files/files/etc/uci-defaults/13_fix_group_user
+index deade5bbd1876cd3f009d4c0b18be258c3bf36d1..e6dae2419f65a830ebd039fbbfa0fd22d1a2d0a1 100644
+--- a/package/base-files/files/etc/uci-defaults/13_fix_group_user
++++ b/package/base-files/files/etc/uci-defaults/13_fix_group_user
+@@ -2,7 +2,7 @@
+ 
+ . /lib/functions.sh
+ 
+-for file in `grep Require-User /usr/lib/opkg/info/*.control | cut -d: -f1`; do
++for file in `grep -sl Require-User /usr/lib/opkg/info/*.control`; do
+ 	file="${file##*/}"
+ 	file="${file%.control}"
+ 	add_group_and_user "${file}"