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

Robert Langhammer rlanghammer at web.de
Do Apr 27 22:17:07 CEST 2017


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?
>
>> +        # 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
>>


-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 829 bytes
Beschreibung: OpenPGP digital signature
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20170427/fb412c94/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev