diff mbox series

[1/2] base-files: move config_generate to preinit

Message ID 20240905124218.703140-1-fe@dev.tdt.de
State New
Headers show
Series [1/2] base-files: move config_generate to preinit | expand

Commit Message

Florian Eckert Sept. 5, 2024, 12:42 p.m. UTC
The mutex file via '/tmp/.config_pending' should prevent the command
'/sbin/wifi config' from being called in the ieee80211 hotplug when loading
the kernel modules [1]. Since the file '/etc/board.json' does not yet exist
and could be incomplete.

The '/etc/board.json' file is modified in the '/sbin/wifi config' script.
This is only generated during the first boot when '/bin/config_generate' is
called.
This whole handling is unclean. Therefore the creation of the default
configuration (/etc/config/network and /etc/config/system) and the
'/etc/board.json' via '/sbin/config_generate' is moved to the preinit phase
after the rootfile system has been mounted

The advantage now is that on an ieee80211 hotplug event, the '/etc/board.json'
is already present which simplifies the whole thing.

[1] https://github.com/openwrt/openwrt/blob/main/package/network/config/wifi-scripts/files/etc/hotplug.d/ieee80211/10-wifi-detect

Fixes: b993a00b82b1 ("base-files: fix duplicate wifi radio sections when using phy renaming")

Signed-off-by: Florian Eckert <fe@dev.tdt.de>
---
 package/base-files/files/etc/init.d/boot          | 15 +++++----------
 .../files/lib/preinit/82_config_generate          | 12 ++++++++++++
 .../files/etc/hotplug.d/ieee80211/10-wifi-detect  |  2 +-
 .../network/config/wifi-scripts/files/sbin/wifi   |  1 -
 4 files changed, 18 insertions(+), 12 deletions(-)
 create mode 100644 package/base-files/files/lib/preinit/82_config_generate
diff mbox series

Patch

diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot
index d17754d087..4278cd99bc 100755
--- a/package/base-files/files/etc/init.d/boot
+++ b/package/base-files/files/etc/init.d/boot
@@ -39,20 +39,15 @@  boot() {
 	grep -q pstore /proc/filesystems && /bin/mount -o noatime -t pstore pstore /sys/fs/pstore
 	[ "$FAILSAFE" = "true" ] && touch /tmp/.failsafe
 
-	touch /tmp/.config_pending
-	/sbin/kmodloader
+	# update wifi config before additional ieee80211 hotplug events
+	# get executed because of '/sbin/kmodloader' kmod loading.
+	[ -f /etc/board.json ] && /sbin/wifi config
 
-	[ ! -f /etc/config/wireless ] && {
-		# compat for bcm47xx and mvebu
-		sleep 1
-	}
+	/sbin/kmodloader
 
-	/bin/config_generate
-	rm -f /tmp/.config_pending
-	/sbin/wifi config
 	uci_apply_defaults
 	sync
-	
+
 	# temporary hack until configd exists
 	/sbin/reload_config
 }
diff --git a/package/base-files/files/lib/preinit/82_config_generate b/package/base-files/files/lib/preinit/82_config_generate
new file mode 100644
index 0000000000..61b0d137b1
--- /dev/null
+++ b/package/base-files/files/lib/preinit/82_config_generate
@@ -0,0 +1,12 @@ 
+do_config_generate() {
+	[ -f /etc/board.json ] || {
+		echo "- generating board file -"
+		/bin/board_detect /tmp/board.json
+		mv /tmp/board.json /etc/board.json
+
+		/bin/config_generate > /dev/null
+	}
+}
+
+boot_hook_add preinit_main do_config_generate
+boot_hook_add initramfs do_config_generate
diff --git a/package/network/config/wifi-scripts/files/etc/hotplug.d/ieee80211/10-wifi-detect b/package/network/config/wifi-scripts/files/etc/hotplug.d/ieee80211/10-wifi-detect
index b865552661..dc1b657af8 100644
--- a/package/network/config/wifi-scripts/files/etc/hotplug.d/ieee80211/10-wifi-detect
+++ b/package/network/config/wifi-scripts/files/etc/hotplug.d/ieee80211/10-wifi-detect
@@ -1,5 +1,5 @@ 
 #!/bin/sh
 
 [ "${ACTION}" = "add" ] && {
-	/sbin/wifi config
+	[ -f /etc/board.json ] && /sbin/wifi config
 }
diff --git a/package/network/config/wifi-scripts/files/sbin/wifi b/package/network/config/wifi-scripts/files/sbin/wifi
index f937dba7e6..e4554c451d 100755
--- a/package/network/config/wifi-scripts/files/sbin/wifi
+++ b/package/network/config/wifi-scripts/files/sbin/wifi
@@ -175,7 +175,6 @@  wifi_detect_notice() {
 }
 
 wifi_config() {
-	[ -e /tmp/.config_pending ] && return
 	ucode /usr/share/hostap/wifi-detect.uc
 	[ ! -f /etc/config/wireless ] && touch /etc/config/wireless
 	ucode /lib/wifi/mac80211.uc | uci -q batch