1
0
mirror of https://git.openwrt.org/feed/routing.git synced 2024-06-17 04:33:58 +02:00
openwrt-routing/alfred/files/alfred.init
Sven Eckelmann ad85bc8142 alfred: Start up alfred without valid interfaces
The alfred server always needs interfaces to operate on. But these
interfaces might not exist at the moment when the daemon process is
started. This situation stopped the startup process after the init scripts
waited for a longer period of polling the system state.

But alfred is able to deal with interfaces which disappeared at runtime but
existed at startup. To force a similar behavior for the alfred startup, the
parameter "--force" or "-f" is used. The extra polling code is therefore no
longer needed in the init scripts.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
2021-02-15 21:17:53 +01:00

98 lines
2.1 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
START=99
USE_PROCD=1
alfred_args=""
vis_args=""
facters_dir="/etc/alfred"
enable=0
vis_enable=0
append_interface()
{
append "interfaces" "$1" ","
}
alfred_start() {
local args=""
local section="$1"
local disabled interface mode
local interfaces
# check if section is disabled
config_get_bool disabled "$section" disabled 0
[ $disabled = 0 ] || return 1
args="-f"
config_list_foreach "$section" "interface" append_interface
if [ -z "$interfaces" ]; then
config_get interface "$section" interface
append_interface "$interface"
fi
append args "-i $interfaces"
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_service() {
config_load "alfred"
config_foreach alfred_start alfred
[ "$enable" = "0" ] && return 0
procd_open_instance "alfred"
procd_set_param command /usr/sbin/alfred
procd_append_param command ${alfred_args}
procd_close_instance
[ "$vis_enable" = "1" ] && {
procd_open_instance "batadv-vis"
procd_set_param command /usr/sbin/batadv-vis
procd_append_param command ${vis_args}
procd_close_instance
}
[ "$run_facters" = "1" ] && {
( 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
}
}
service_triggers() {
procd_add_reload_trigger "alfred"
}
stop_service() {
[ -e /etc/crontabs/root ] && {
sed "\|for file in $facters_dir/\* ; do |d" -i /etc/crontabs/root
/etc/init.d/cron restart
}
}