[PATCH] Write on flash only if tunneldigger conf has changed

Tim Niemeyer tim at tn-x.org
Do Apr 27 22:29:51 CEST 2017


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 at 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 at freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 473 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20170427/89d18f6e/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev