Wait up to 30 seconds during init.d script on boot, so that batmanif can come up. If the timeout is reached, the init.d script refuses to start alfred and related daemons. This prevents an alfred crash when it would start during early boot, before batmanif is available. Instead, alfred is started as soon as batmanif appears, if that happens during the 30-second window. Signed-off-by: Gui Iribarren <gui@altermundi.net> Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
109 lines
2.5 KiB
Bash
Executable file
109 lines
2.5 KiB
Bash
Executable file
#!/bin/sh /etc/rc.common
|
|
|
|
#
|
|
# Copyright (C) 2013 OpenWrt.org
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
#
|
|
|
|
START=99
|
|
STOP=99
|
|
alfred_args=""
|
|
vis_args=""
|
|
facters_dir="/etc/alfred"
|
|
pid_file_alfred="/var/run/alfred.pid"
|
|
pid_file_vis="/var/run/batadv-vis.pid"
|
|
enable=0
|
|
vis_enable=0
|
|
batmanif=""
|
|
SERVICE_DAEMONIZE=1
|
|
SERVICE_WRITE_PID=1
|
|
|
|
alfred_start()
|
|
{
|
|
local args=""
|
|
local section="$1"
|
|
local disabled interface mode
|
|
|
|
# check if section is disabled
|
|
config_get_bool disabled "$section" disabled 0
|
|
[ $disabled = 0 ] || return 1
|
|
|
|
args=""
|
|
|
|
config_get interface "$section" interface
|
|
append args "-i $interface"
|
|
|
|
config_get mode "$section" mode
|
|
[ "$mode" = "master" ] && append args "-m"
|
|
|
|
config_get batmanif "$section" batmanif
|
|
append args "-b $batmanif"
|
|
|
|
append alfred_args "$args"
|
|
enable=1
|
|
|
|
config_get_bool start_vis "$section" start_vis 0
|
|
if [ "$start_vis" = 1 ] && [ -x /usr/sbin/batadv-vis ]; then
|
|
vis_enable=1
|
|
append vis_args "-i $batmanif -s"
|
|
fi
|
|
|
|
config_get_bool run_facters "$section" run_facters 0
|
|
|
|
return 0
|
|
}
|
|
|
|
start()
|
|
{
|
|
config_load "alfred"
|
|
config_foreach alfred_start alfred
|
|
|
|
if [ "$enable" = "0" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
mesh_dir="/sys/class/net/$batmanif/mesh/"
|
|
if ! [ -d "$mesh_dir" ] ; then
|
|
timeout=30
|
|
echo "${initscript}: waiting $timeout secs for $batmanif interface..."
|
|
for i in $(seq $timeout); do
|
|
sleep 1
|
|
[ -d "$mesh_dir" ] && break
|
|
if [ $i == $timeout ] ; then
|
|
echo "${initscript}: $batmanif not detected, alfred not starting."
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
echo "${initscript}: starting alfred"
|
|
SERVICE_PID_FILE="$pid_file_alfred"
|
|
service_start /usr/sbin/alfred ${alfred_args}
|
|
|
|
if [ "$vis_enable" = "1" ]; then
|
|
echo "${initscript}: starting batadv-vis"
|
|
SERVICE_PID_FILE="$pid_file_vis"
|
|
service_start /usr/sbin/batadv-vis ${vis_args}
|
|
fi
|
|
|
|
if [ "$run_facters" = "1" ]; then
|
|
( for file in $facters_dir/* ; do [ -x $file ] && $file ; done )
|
|
if ! ( grep -q "for file in $facters_dir/\* ; do " /etc/crontabs/root 2>/dev/null ) ; then
|
|
echo "*/5 * * * * ( for file in $facters_dir/* ; do [ -x \$file ] && \$file ; done )" >> /etc/crontabs/root
|
|
/etc/init.d/cron enable
|
|
/etc/init.d/cron restart
|
|
fi
|
|
fi
|
|
}
|
|
|
|
stop()
|
|
{
|
|
SERVICE_PID_FILE="$pid_file_alfred"
|
|
service_stop /usr/sbin/alfred
|
|
SERVICE_PID_FILE="$pid_file_vis"
|
|
[ -x /usr/sbin/batadv-vis ] && service_stop /usr/sbin/batadv-vis
|
|
sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
|
|
/etc/init.d/cron restart
|
|
}
|