From df9f672a35a794787e2b19d9f94436cf0c128bce Mon Sep 17 00:00:00 2001 From: Tim Niemeyer Date: Sun, 11 Oct 2015 20:39:14 +0200 Subject: [PATCH] alfred: fix boot up Signed-off-by: Tim Niemeyer Reviewed-by: Dominik Heidler Reviewed-by: Steffen Pankratz --- ...d-race-condition-when-batmanif-is-no.patch | 70 +++++++++++++++++++ buildscript | 3 +- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch diff --git a/build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch b/build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch new file mode 100644 index 0000000..3aa67f5 --- /dev/null +++ b/build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch @@ -0,0 +1,70 @@ +From 8b91b906261348642731731ca94532d8b3455f2c Mon Sep 17 00:00:00 2001 +From: Gui Iribarren +Date: Fri, 13 Dec 2013 16:05:26 -0300 +Subject: [PATCH] alfred: workaround race condition when batmanif is not ready + at boot time + +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 +Signed-off-by: Simon Wunderlich + +Conflicts: + alfred/Makefile +Signed-off-by: Tim Niemeyer +--- + alfred/files/alfred.init | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/alfred/files/alfred.init b/alfred/files/alfred.init +index e52a7bd..cdb4fff 100755 +--- a/alfred/files/alfred.init ++++ b/alfred/files/alfred.init +@@ -16,6 +16,7 @@ pid_file_alfred="/var/run/alfred.pid" + pid_file_vis="/var/run/vis.pid" + enable=0 + vis_enable=0 ++batmanif="" + SERVICE_DAEMONIZE=1 + SERVICE_WRITE_PID=1 + +@@ -23,7 +24,7 @@ alfred_start() + { + local args="" + local section="$1" +- local disabled interface mode batmanif ++ local disabled interface mode + + # check if section is disabled + config_get_bool disabled "$section" disabled 0 +@@ -62,6 +63,21 @@ start() + 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} +-- +2.1.4 + diff --git a/buildscript b/buildscript index 53aea6c..f5c7898 100755 --- a/buildscript +++ b/buildscript @@ -25,7 +25,8 @@ OPENWRT_OLDPACKAGES=(openwrt_oldpackages ROUTING=(routing https://github.com/openwrt-routing/packages.git 44318d05898069300ce2ad6eb05eb40f232e7123 - ../../../build_patches/0001-batman-adv-no-rebroadcast-option.patch) + ../../../build_patches/0001-batman-adv-no-rebroadcast-option.patch + ../../../build_patches/0002-alfred-workaround-race-condition-when-batmanif-is-no.patch) ROUTING_PKGS="kmod-batman-adv alfred" FASTD=(fastd