From 0be280cde5079c74cd1d010a1daadc7120cabd84 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 24 Jan 2017 17:23:34 +0100 Subject: [PATCH] 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 --- ...re-User-lines-with-CONFIG_CLEAN_IPKG.patch | 37 +++++++++++++++++++ ...supgrade-with-few-opkg-control-files.patch | 26 +++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 patches/lede/0009-include-rootfs.mk-keep-Require-User-lines-with-CONFIG_CLEAN_IPKG.patch create mode 100644 patches/lede/0010-base-files-fix-user-creation-on-sysupgrade-with-few-opkg-control-files.patch diff --git a/patches/lede/0009-include-rootfs.mk-keep-Require-User-lines-with-CONFIG_CLEAN_IPKG.patch b/patches/lede/0009-include-rootfs.mk-keep-Require-User-lines-with-CONFIG_CLEAN_IPKG.patch new file mode 100644 index 00000000..45c1fa72 --- /dev/null +++ b/patches/lede/0009-include-rootfs.mk-keep-Require-User-lines-with-CONFIG_CLEAN_IPKG.patch @@ -0,0 +1,37 @@ +From: Matthias Schiffer +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 + +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 diff --git a/patches/lede/0010-base-files-fix-user-creation-on-sysupgrade-with-few-opkg-control-files.patch b/patches/lede/0010-base-files-fix-user-creation-on-sysupgrade-with-few-opkg-control-files.patch new file mode 100644 index 00000000..43b0b97f --- /dev/null +++ b/patches/lede/0010-base-files-fix-user-creation-on-sysupgrade-with-few-opkg-control-files.patch @@ -0,0 +1,26 @@ +From: Matthias Schiffer +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 + +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}"