Write on flash only if tunneldigger conf has changed

Submitted by Robert Langhammer on April 27, 2017, 10:23 a.m.

Details

Message ID 20170427102321.3689-1-rlanghammer@web.de
State Superseded
Headers show

Commit Message

Robert Langhammer April 27, 2017, 10:23 a.m.
Fixes: 41

Signed-off-by: Robert Langhammer <rlanghammer@web.de>
---
 .../fff/fff-vpn-select/files/usr/sbin/vpn-select   | 31 +++++++++++++---------
 1 file changed, 18 insertions(+), 13 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
index a0878c5..c79a872 100755
--- a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
+++ b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
@@ -4,7 +4,8 @@  test -f /tmp/started || exit
 
 make_config() {
 # remove old config
->/etc/config/tunneldigger
+>/tmp/tunneldigger
+
 rm /tmp/fastd_${project}_peers/*
 count=0
 # get fastd peers
@@ -23,13 +24,13 @@  for file in $filecounts; do
         L2PORT=$((FDPORT + 10000))
         UUID=$hostname
 
-        uci set tunneldigger.$count=broker
-        uci set tunneldigger.$count.address="$IP:$L2PORT"
-        uci set tunneldigger.$count.uuid="$UUID"
-        uci set tunneldigger.$count.interface="l2tp$count"
-        uci set tunneldigger.$count.enabled="1"
-        uci set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
-        uci commit tunneldigger
+        uci -c /tmp set tunneldigger.$count=broker
+        uci -c /tmp set tunneldigger.$count.address="$IP:$L2PORT"
+        uci -c /tmp set tunneldigger.$count.uuid="$UUID"
+        uci -c /tmp set tunneldigger.$count.interface="l2tp$count"
+        uci -c /tmp set tunneldigger.$count.enabled="1"
+        uci -c /tmp set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
+        uci -c /tmp commit tunneldigger
         count=$((count + 1))
         # remove this fastd-peer
         rm /etc/fastd/${project}/peers/$file
@@ -67,14 +68,18 @@  if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null ||
             uci commit fastd
         fi
         make_config
-        /etc/init.d/fastd start
+        # start fastd if there are some peers left
+        [ "$(ls /etc/fastd/${project}/peers/* 2>/dev/null)" ] && /etc/init.d/fastd start
+        # check if new tunneldigger conf is different
+        [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] && cp /tmp/tunneldigger /etc/config/tunneldigger
         /etc/init.d/tunneldigger start
     else
-        # check if new tunneldigger conf is different
-        sumold=$(sha256sum /etc/config/tunneldigger)
         make_config
-        sumnew=$(sha256sum /etc/config/tunneldigger)
-        [ "$sumnew" != "$sumold" ] && /etc/init.d/tunneldigger restart
+        # check if new tunneldigger conf is different
+        if [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] ; then
+            cp /tmp/tunneldigger /etc/config/tunneldigger
+            /etc/init.d/tunneldigger restart
+        fi
         /etc/init.d/fastd reload
 
         # fastd start/stop for various situations

Comments

Tim Niemeyer April 27, 2017, 5:43 p.m.
Moin Robert

Am Donnerstag, den 27.04.2017, 12:23 +0200 schrieb Robert Langhammer:
> Fixes: 41
Afaik muss ne Raute vor die Zahl.

> Signed-off-by: Robert Langhammer <rlanghammer@web.de>
> ---
>  .../fff/fff-vpn-select/files/usr/sbin/vpn-select   | 31 +++++++++++++---------
>  1 file changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> index a0878c5..c79a872 100755
> --- a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> +++ b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> @@ -4,7 +4,8 @@ test -f /tmp/started || exit
>  
>  make_config() {
>  # remove old config
> ->/etc/config/tunneldigger
> +>/tmp/tunneldigger
> +
>  rm /tmp/fastd_${project}_peers/*
>  count=0
>  # get fastd peers
> @@ -23,13 +24,13 @@ for file in $filecounts; do
>          L2PORT=$((FDPORT + 10000))
>          UUID=$hostname
>  
> -        uci set tunneldigger.$count=broker
> -        uci set tunneldigger.$count.address="$IP:$L2PORT"
> -        uci set tunneldigger.$count.uuid="$UUID"
> -        uci set tunneldigger.$count.interface="l2tp$count"
> -        uci set tunneldigger.$count.enabled="1"
> -        uci set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
> -        uci commit tunneldigger
> +        uci -c /tmp set tunneldigger.$count=broker
> +        uci -c /tmp set tunneldigger.$count.address="$IP:$L2PORT"
> +        uci -c /tmp set tunneldigger.$count.uuid="$UUID"
> +        uci -c /tmp set tunneldigger.$count.interface="l2tp$count"
> +        uci -c /tmp set tunneldigger.$count.enabled="1"
> +        uci -c /tmp set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
> +        uci -c /tmp commit tunneldigger
>          count=$((count + 1))
>          # remove this fastd-peer
>          rm /etc/fastd/${project}/peers/$file
> @@ -67,14 +68,18 @@ if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null ||
>              uci commit fastd
>          fi
>          make_config
> -        /etc/init.d/fastd start
> +        # start fastd if there are some peers left
> +        [ "$(ls /etc/fastd/${project}/peers/* 2>/dev/null)" ] && /etc/init.d/fastd start
Ah prima. Das ist allerdings mehr als du im Commit-Log erwähnst. ;)

> +        # check if new tunneldigger conf is different
> +        [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] && cp /tmp/tunneldigger /etc/config/tunneldigger
Das versteh ich nicht. Jetzt würde er ja bei jedem Aufruf die Config
kopieren, sofern die neue nicht leer ist. Wir schreiben dann also immer
noch auf den Flash.

>          /etc/init.d/tunneldigger start
>      else
> -        # check if new tunneldigger conf is different
> -        sumold=$(sha256sum /etc/config/tunneldigger)
>          make_config
> -        sumnew=$(sha256sum /etc/config/tunneldigger)
> -        [ "$sumnew" != "$sumold" ] && /etc/init.d/tunneldigger restart
> +        # check if new tunneldigger conf is different
> +        if [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] ; then
> +            cp /tmp/tunneldigger /etc/config/tunneldigger
Hier auch..

Was spricht dagegen einfach ein symlink von /etc/config/tunneldigger
-> /tmp/tunneldigger zu legen? Dann würde der Symlink einmalig angelegt
werden (oder ist im Image ggfs schon drin). Der Rest liegt dann immer im
RAM.

Tim

> +            /etc/init.d/tunneldigger restart
> +        fi
>          /etc/init.d/fastd reload
>  
>          # fastd start/stop for various situations
> -- 
> 2.9.3
>
Robert Langhammer April 27, 2017, 8:17 p.m.
Hallo Tim,



Am 27.04.2017 um 19:43 schrieb Tim Niemeyer:
> Moin Robert
>
> Am Donnerstag, den 27.04.2017, 12:23 +0200 schrieb Robert Langhammer:
>> Fixes: 41
> Afaik muss ne Raute vor die Zahl.
ah, ok. Gibt auf jeden Fall noch eine v2 (hab unten schon einen Fehler
gefunden :(
>
>> Signed-off-by: Robert Langhammer <rlanghammer@web.de>
>> ---
>>  .../fff/fff-vpn-select/files/usr/sbin/vpn-select   | 31 +++++++++++++---------
>>  1 file changed, 18 insertions(+), 13 deletions(-)
>>
>> diff --git a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
>> index a0878c5..c79a872 100755
>> --- a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
>> +++ b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
>> @@ -4,7 +4,8 @@ test -f /tmp/started || exit
>>  
>>  make_config() {
>>  # remove old config
>> ->/etc/config/tunneldigger
>> +>/tmp/tunneldigger
>> +
>>  rm /tmp/fastd_${project}_peers/*
>>  count=0
>>  # get fastd peers
>> @@ -23,13 +24,13 @@ for file in $filecounts; do
>>          L2PORT=$((FDPORT + 10000))
>>          UUID=$hostname
>>  
>> -        uci set tunneldigger.$count=broker
>> -        uci set tunneldigger.$count.address="$IP:$L2PORT"
>> -        uci set tunneldigger.$count.uuid="$UUID"
>> -        uci set tunneldigger.$count.interface="l2tp$count"
>> -        uci set tunneldigger.$count.enabled="1"
>> -        uci set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
>> -        uci commit tunneldigger
>> +        uci -c /tmp set tunneldigger.$count=broker
>> +        uci -c /tmp set tunneldigger.$count.address="$IP:$L2PORT"
>> +        uci -c /tmp set tunneldigger.$count.uuid="$UUID"
>> +        uci -c /tmp set tunneldigger.$count.interface="l2tp$count"
>> +        uci -c /tmp set tunneldigger.$count.enabled="1"
>> +        uci -c /tmp set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
>> +        uci -c /tmp commit tunneldigger
>>          count=$((count + 1))
>>          # remove this fastd-peer
>>          rm /etc/fastd/${project}/peers/$file
>> @@ -67,14 +68,18 @@ if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null ||
>>              uci commit fastd
>>          fi
>>          make_config
>> -        /etc/init.d/fastd start
>> +        # start fastd if there are some peers left
>> +        [ "$(ls /etc/fastd/${project}/peers/* 2>/dev/null)" ] && /etc/init.d/fastd start
> Ah prima. Das ist allerdings mehr als du im Commit-Log erwähnst. ;)
:) Hat sich ja an der Funktion nix geändert, nur dass /etc/init.d/fastd
start nicht angezogen wird, wenn es keine Peers gibt. Ergebnis ist das
gleiche wie vorher. Hmm, oder startet fastd auch ohne peers?
>
>> +        # check if new tunneldigger conf is different
>> +        [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] && cp /tmp/tunneldigger /etc/config/tunneldigger
> Das versteh ich nicht. Jetzt würde er ja bei jedem Aufruf die Config
> kopieren, sofern die neue nicht leer ist. Wir schreiben dann also immer
> noch auf den Flash.
Hier wird nur kopiert, wenn die beiden Dateien untetschiedlich sind.
(diff für Arme)
Mist! sehe gerade nen Pfadfehler. Muss natürlich:

cat /etc/config/tunneldigger /tmp/tunneldigger


>
>>          /etc/init.d/tunneldigger start
>>      else
>> -        # check if new tunneldigger conf is different
>> -        sumold=$(sha256sum /etc/config/tunneldigger)
>>          make_config
>> -        sumnew=$(sha256sum /etc/config/tunneldigger)
>> -        [ "$sumnew" != "$sumold" ] && /etc/init.d/tunneldigger restart
>> +        # check if new tunneldigger conf is different
>> +        if [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] ; then
>> +            cp /tmp/tunneldigger /etc/config/tunneldigger
> Hier auch..
>
> Was spricht dagegen einfach ein symlink von /etc/config/tunneldigger
> -> /tmp/tunneldigger zu legen? Dann würde der Symlink einmalig angelegt
> werden (oder ist im Image ggfs schon drin). Der Rest liegt dann immer im
> RAM.
Genau das war meine erste Idee, wäre ja mit nem Einzeiler erledigt. Aber
uci kann nicht mit Links in /etc/config umgehen (warum???)
Ich wollte aber schon gerne die Werte mit uci set schreiben und später
eventuell auch mal lesen. Darum der Umweg mit der config in/tmp.
Schön wäre auch "uci changes tunneldigger" gewesen, hab es aber nicht
hin bekommen, fest zu stellen, wenn ein peer weg fällt.

Robert
>
> Tim
>
>> +            /etc/init.d/tunneldigger restart
>> +        fi
>>          /etc/init.d/fastd reload
>>  
>>          # fastd start/stop for various situations
>> -- 
>> 2.9.3
>>
Tim Niemeyer April 27, 2017, 8:29 p.m.
Hi Robert

Am Donnerstag, den 27.04.2017, 22:17 +0200 schrieb Robert Langhammer:
> Hallo Tim,
> 
> 
> 
> Am 27.04.2017 um 19:43 schrieb Tim Niemeyer:
> > Moin Robert
> >
> > Am Donnerstag, den 27.04.2017, 12:23 +0200 schrieb Robert Langhammer:
> >> Fixes: 41
> > Afaik muss ne Raute vor die Zahl.
> ah, ok. Gibt auf jeden Fall noch eine v2 (hab unten schon einen Fehler
> gefunden :(
> >
> >> Signed-off-by: Robert Langhammer <rlanghammer@web.de>
> >> ---
> >>  .../fff/fff-vpn-select/files/usr/sbin/vpn-select   | 31 +++++++++++++---------
> >>  1 file changed, 18 insertions(+), 13 deletions(-)
> >>
> >> diff --git a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> >> index a0878c5..c79a872 100755
> >> --- a/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> >> +++ b/src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select
> >> @@ -4,7 +4,8 @@ test -f /tmp/started || exit
> >>  
> >>  make_config() {
> >>  # remove old config
> >> ->/etc/config/tunneldigger
> >> +>/tmp/tunneldigger
> >> +
> >>  rm /tmp/fastd_${project}_peers/*
> >>  count=0
> >>  # get fastd peers
> >> @@ -23,13 +24,13 @@ for file in $filecounts; do
> >>          L2PORT=$((FDPORT + 10000))
> >>          UUID=$hostname
> >>  
> >> -        uci set tunneldigger.$count=broker
> >> -        uci set tunneldigger.$count.address="$IP:$L2PORT"
> >> -        uci set tunneldigger.$count.uuid="$UUID"
> >> -        uci set tunneldigger.$count.interface="l2tp$count"
> >> -        uci set tunneldigger.$count.enabled="1"
> >> -        uci set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
> >> -        uci commit tunneldigger
> >> +        uci -c /tmp set tunneldigger.$count=broker
> >> +        uci -c /tmp set tunneldigger.$count.address="$IP:$L2PORT"
> >> +        uci -c /tmp set tunneldigger.$count.uuid="$UUID"
> >> +        uci -c /tmp set tunneldigger.$count.interface="l2tp$count"
> >> +        uci -c /tmp set tunneldigger.$count.enabled="1"
> >> +        uci -c /tmp set tunneldigger.$count.hook_script='/etc/tunneldigger/tunneldigger.hook'
> >> +        uci -c /tmp commit tunneldigger
> >>          count=$((count + 1))
> >>          # remove this fastd-peer
> >>          rm /etc/fastd/${project}/peers/$file
> >> @@ -67,14 +68,18 @@ if ping -w5 -c3 "$test_ipv4_host1" &>/dev/null ||
> >>              uci commit fastd
> >>          fi
> >>          make_config
> >> -        /etc/init.d/fastd start
> >> +        # start fastd if there are some peers left
> >> +        [ "$(ls /etc/fastd/${project}/peers/* 2>/dev/null)" ] && /etc/init.d/fastd start
> > Ah prima. Das ist allerdings mehr als du im Commit-Log erwähnst. ;)
> :) Hat sich ja an der Funktion nix geändert, nur dass /etc/init.d/fastd
> start nicht angezogen wird, wenn es keine Peers gibt. Ergebnis ist das
> gleiche wie vorher. Hmm, oder startet fastd auch ohne peers?
Ich sag ja: Prima. Eine Anmerkung, im Kommentar wäre aber trotzdem
schön. :)

> >
> >> +        # check if new tunneldigger conf is different
> >> +        [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] && cp /tmp/tunneldigger /etc/config/tunneldigger
> > Das versteh ich nicht. Jetzt würde er ja bei jedem Aufruf die Config
> > kopieren, sofern die neue nicht leer ist. Wir schreiben dann also immer
> > noch auf den Flash.
> Hier wird nur kopiert, wenn die beiden Dateien untetschiedlich sind.
> (diff für Arme)
Arg, stimmt.

> Mist! sehe gerade nen Pfadfehler. Muss natürlich:
> 
> cat /etc/config/tunneldigger /tmp/tunneldigger
> 
> 
> >
> >>          /etc/init.d/tunneldigger start
> >>      else
> >> -        # check if new tunneldigger conf is different
> >> -        sumold=$(sha256sum /etc/config/tunneldigger)
> >>          make_config
> >> -        sumnew=$(sha256sum /etc/config/tunneldigger)
> >> -        [ "$sumnew" != "$sumold" ] && /etc/init.d/tunneldigger restart
> >> +        # check if new tunneldigger conf is different
> >> +        if [ -n "$(cat /etc/config/tunneldigger tunneldigger | sort | uniq -u)" ] ; then
> >> +            cp /tmp/tunneldigger /etc/config/tunneldigger
> > Hier auch..
> >
> > Was spricht dagegen einfach ein symlink von /etc/config/tunneldigger
> > -> /tmp/tunneldigger zu legen? Dann würde der Symlink einmalig angelegt
> > werden (oder ist im Image ggfs schon drin). Der Rest liegt dann immer im
> > RAM.
> Genau das war meine erste Idee, wäre ja mit nem Einzeiler erledigt. Aber
> uci kann nicht mit Links in /etc/config umgehen (warum???)
Das weiß ich leider nicht, wäre aber spannend das mal rauszufinden.

> Ich wollte aber schon gerne die Werte mit uci set schreiben und später
> eventuell auch mal lesen. Darum der Umweg mit der config in/tmp.
Hm, ja. Irgendwie scheint uci kein passendes Tool für dynamische configs
zu sein. Wobei.. Hm.. Gibt es dafür nicht irgendein Mechanismus? Muss
man das wirklich auf den Flash schreiben? Wenn man uci commit weg lässt,
würde das doch ggfs das Verhalten erzeugen, oder?

Tim

> Schön wäre auch "uci changes tunneldigger" gewesen, hab es aber nicht
> hin bekommen, fest zu stellen, wenn ein peer weg fällt.
> 
> Robert
> >
> > Tim
> >
> >> +            /etc/init.d/tunneldigger restart
> >> +        fi
> >>          /etc/init.d/fastd reload
> >>  
> >>          # fastd start/stop for various situations
> >> -- 
> >> 2.9.3
> >>
> 
> 
> -- 
> franken-dev mailing list
> franken-dev@freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Robert Langhammer April 29, 2017, 4:52 p.m.
Hallo,
nachdem ich mich nochmal dem uci gewidmet habe, gibt's jetzt eine einfache Lösung, die nicht ins Flash schreibt.
uci commit funzt nicht mit symlinks. Hier hilft die Option -c <config file>. uci get usw. hat kein Problem damit.

Robert Langhammer (2):
  Start fastd only if there are fastd peers left
  Do not write tunneldigger conf on flash

 .../fff/fff-tunneldigger/files/etc/uci-defaults/55_fff-tunneldigger  | 3 ++-
 src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select            | 5 +++--
 2 files changed, 5 insertions(+), 3 deletions(-)
Michael Fritscher May 25, 2017, 5:22 p.m.
> Hallo,
> nachdem ich mich nochmal dem uci gewidmet habe, gibt's jetzt eine einfache
> Lösung, die nicht ins Flash schreibt.
> uci commit funzt nicht mit symlinks. Hier hilft die Option -c <config
> file>. uci get usw. hat kein Problem damit.
>
> Robert Langhammer (2):
>   Start fastd only if there are fastd peers left
>   Do not write tunneldigger conf on flash
>
>  .../fff/fff-tunneldigger/files/etc/uci-defaults/55_fff-tunneldigger  | 3
> ++-
>  src/packages/fff/fff-vpn-select/files/usr/sbin/vpn-select            | 5
> +++--
>  2 files changed, 5 insertions(+), 3 deletions(-)
>

Hi,

Reviewed-by: Michael Fritscher <fff@mifritscher.de>

(wenn ihrn Problem mit der Mailadresse habt dann nehmt von mir aus die
Absenderadresse)

Viele Grüße,
Michael Fritscher