package/fstools: fstab essential mount point hook

This commit is contained in:
Liangbin Lian 2024-01-16 19:33:34 +08:00
parent 8e0b836b38
commit ba9a67bb02

View File

@ -5,6 +5,8 @@
START=11
FS_CONSUMER=/tmp/.fstab.consumer
check_uuid() {
blkid --uuid "$1" >/dev/null 2>&1
}
@ -22,10 +24,16 @@ wait_essential() {
[ $TIMEOUT -gt 0 ] || return 1
config_get_bool enabled $1 "enabled" "0"
config_get_bool essential $1 essential "0"
[ "$enabled" = "0" -o "$essential" = "0" ] && return 0
[ "$enabled" = "0" ] && return 0
config_get target $1 "target"
target=${target%%/}
[ -z "$target" -o "$target" = "/" -o "$target" = "/rom" -o "$target" = "/overlay" ] && return 0
if [ "$essential" = "0" ]; then
[ -f $FS_CONSUMER ] || return 0
grep -Fqxm1 "$target" $FS_CONSUMER || grep -q "^$target/" $FS_CONSUMER || return 0
fi
/bin/mount | grep -qF " on $target type " && return 0
local uuid label device check_cmd
@ -54,15 +62,28 @@ wait_essential() {
return 1
}
# for /lib/fstab.d/*.sh call
fstab_add_essential_mountpoint() {
echo "$1" >>$FS_CONSUMER.raw
}
check_block_ready() {
TIMEOUT=$(uci -q get fstab.@global[0].essential_timeout)
[ -z "$TIMEOUT" ] && TIMEOUT=5
[ $TIMEOUT -ge 0 ] || return 0
TIMEOUT=$(($TIMEOUT + 1))
local ORIG=$TIMEOUT
>$FS_CONSUMER.raw
include /lib/fstab.d
busybox sort -u $FS_CONSUMER.raw | grep / >$FS_CONSUMER
rm -f $FS_CONSUMER.raw
[ -s $FS_CONSUMER ] || rm -f $FS_CONSUMER
config_load fstab
config_foreach wait_essential mount
[ $TIMEOUT -gt 0 ] && echo "fstab: essential device(s) ready after $(($ORIG - $TIMEOUT)) seconds" >/dev/kmsg
rm -f $FS_CONSUMER
}
boot() {