]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
ubox: fix logging to external filesystem 18023/head
authorDaniel F. Dickinson <dfdpublic@wildtechgarden.ca>
Wed, 19 Feb 2025 04:58:06 +0000 (23:58 -0500)
committerDaniel Golle <daniel@makrotopia.org>
Sat, 22 Mar 2025 12:03:12 +0000 (12:03 +0000)
As described in #13873, from 23.05.0 onwards logging to a file on an
external filesystem fails under some conditions.

This occurs because the log initscript had code added to prevent start
logging to an external filesystem on boot, and added a trigger to start
said logging when the external filesystem gets mounted.

The issue is that for filesystems mount with fstab uci, the fstab
scripts runs at START=11, while log runs at START=12, which means the
external filesystem may already be mounted by the time the log initscript
runs. Since the external filesystem is already mounted it does not
trigger a hotplug event to trigger the trigger to start logging. This
combination means the logging never automatically starts when the log
file is on an external filesystem.

We therefore add a check for the presence of a mounted filesystem when
the log file is being sent to an fstab mounted filesystem. If the
filesystem is mounted, we don't skip starting logging during boot.

If the filesystem is not mounted then file logging is not started and
the trigger will start the logging when the filesystem is mounted.

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
[improved commit message]
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
package/system/ubox/files/log.init

index c6fdf44292f538538abef419fb757b1593e402f9..e02cc273daf563f9a2b46f733755f39a82285fd6 100644 (file)
@@ -52,8 +52,12 @@ start_service_file()
        }
        [ -z "${log_file}" ] && return
 
+       local mountpoint="$(procd_get_mountpoints "${log_file}")"
+
        [ "$_BOOT" = "1" ] &&
-               [ "$(procd_get_mountpoints "${log_file}")" ] && return 0
+               [ "$mountpoint" ] &&
+               ! grep -q ".* $mountpoint " /proc/mounts &&
+               return 0
 
        mkdir -p "$(dirname "${log_file}")"