Entwickler Treffen

mayosemmel mayosemmel at googlemail.com
Di Sep 29 21:08:03 CEST 2015


Hallo zusammen,

zum Thema fff-community hatten wir ja beim letzten Technik Treffen
besprochen, das man ausschließlich primäre DNS Server aufsetzt und dann
das Zone-File Synchronisiert.
Damit habe ich mich dann nochmal ein bisschen auseinander gesetzt und
zur Synchronisation ein Script geschrieben (siehe unten). Wenn ihr
Verbesserungen habt, immer drauf los!
Alles weitere können wir ja dann am Freitag besprechen.

Grüße Jan


#!/bin/bash

#Server die abgefragt werden sollen (Alle DNS Peers)
DnsPeers=(ns1.kraus.moe kraus.moe ns2.kraus.moe)
#Name der Zone die verteilt werden soll
DomainZone="kraus.moe"
#Position und Name des Zone Files
OwnZoneFile="/etc/bind/db.kraus.moe"
#Temporäres Verzeichnis - muss pro Zone exclusiv sein!
TempDir="/tmp/fff-dns"
#Backup Verzeichnis
BackupDir="/home/freifunk/DNS-Backup"
#Wie viele Backups sollen aufgehoben werden? Nur Integer Werte!
BackupsToStore=20


function backup
{
	datetime=$(date +"%Y-%m-%d_%H-%M-%S")
	mkdir -p $1/$datetime
	cp $OwnZoneFile $1/$datetime/.
	BackupFiles=( $(ls -t $1) )
	if [ -n ${BackupFiles[0]} ]  && [ ${#BackupFiles[@]} -gt 20 ]
	then
		rm -rf $1/${BackupFiles[$BackupsToStore]}
	fi
}

function exit_script
{
	rm -rf $TempDir
	exit $1
}

mkdir -p $TempDir
cd $TempDir
OwnSerial=$(grep SOA $OwnZoneFile |awk 'NR==1{print $7}')
HighestSerialSoFar=0
for peer in "${DnsPeers[@]}"
do
	#Zone File von Peering DNS Servern herunterladen
	dig @$peer $DomainZone axfr |grep -v ";"> $peer
	#Seriennummer des Zone Files einlesen
	PeerSerial=$(grep SOA $peer |awk 'NR==1{print $7}')
	#Falls keine Seriennummer vorhanden, ist das File invalid oder die
Verbindung zum Peer ist nicht in Ordnung
	if [ -z $PeerSerial ]
	then
		rm -f $peer
		continue
		PeerSerial=1
	fi
	#Falls eigenes Zone File keine Seriennummer enthält und somit invalid
ist, automatisch erstbestes valides nutzen
	if [ -z $OwnSerial ]
	then
		cp $peer $OwnZoneFile
		exit 0
	fi
	#Nur die Zone-Files mit dem höchsten Serial behalten - wenn dieser
höher ist als der bereits vorhandene
	if [ $OwnSerial -ge $PeerSerial ]
	then
		rm -f $peer
		continue
	elif [ ${HighestSerialSoFar[0]} -gt $PeerSerial ]
	then
		rm -f $peer
		continue
	else
		HighestSerialSoFar=( $PeerSerial $peer )
	fi
done

#Anzahl der verbliebenen Zone Files ermitteln
PeerZoneFileCount=$(ls -l|wc -l)
#Im Falle von einem Update vorher ein Backup machen
if [ $PeerZoneFileCount -gt 1 ]
then
	backup $BackupDir $BackupsToStore
else
	exit_script 0
fi

#Falls nur ein Zone File verblieben ist, direkt einspielen und
neustarten
if [ $PeerZoneFileCount -eq 2 ]
then
	cp ${HighestSerialSoFar[1]} $OwnZoneFile
	/etc/init.d/bind9 restart
	exit_script 0
#Im Fall von mehreren Zone Files, prüfen ob alle identisch sind. Falls
nicht Abbruch. Ansonsten einspielen und neustart
else
	md5=$(md5sum ${HighestSerialSoFar[1]} |awk '{print $1}')
	for ZoneFile in *
	do
		loopmd5=$(md5sum $ZoneFile |awk '{print $1}')
		if [ $md5 != $loopmd5 ]
		then
			echo $md5 $loopmd5
			exit_script 1
		fi
	done
	cp ${HighestSerialSoFar[1]} $OwnZoneFile
        /etc/init.d/bind9 restart
        exit_script 0
fi


Am Montag, den 28.09.2015, 03:32 +0200 schrieb Christian Dresel:
> Guten Morgen
> 
> ich ebenso, außer die Mehrheit stammt von wo anders her, dann kann man
> natürlich drüber reden ;)
> 
> mfg
> 
> Christian
> 
> Am 27.09.2015 um 22:18 schrieb mayosemmel:
> 
> > Hallo Tim,
> > 
> > Ich wäre auch fürs Lab. 
> > 
> > Grüße Jan
> > 
> > ____________________________________________________________________
> > Von: Tim Niemeyer
> > Gesendet: ‎27.‎09.‎2015 22:16
> > An: franken-dev at freifunk.net
> > Betreff: Re: Entwickler Treffen
> > 
> > 
> > Am Sonntag, den 27.09.2015, 17:07 +0200 schrieb Tim Niemeyer:
> > > Moin zusammen
> > > 
> > > Es wird mal wieder Zeit.
> > > 
> > > https://dudle.inf.tu-dresden.de/Dev_Meeting/
> > > 
> > > Ich denke wir nehmen dann den Termin, der heute Abend ~22 Uhr raus
> > > kommt.
> > 
> > Yay, prima Sache. Das Dudle zeigt ganz deutlich auf Freitag 19:00
> > Uhr.
> > Ich hab mal wieder das Büro im Lab reserviert, aber wie gesagt
> > können
> > wir gern auch wo anders hin.
> > 
> > Tim
> > 
> > > 
> > > Als Ort würde ich spontan das Nürnberger Lab vorschlagen, wir
> > können das
> > > aber auch woanders, z.B. in Bamberg oder so, machen.
> > > 
> > > Punkte:
> > > * Dezentraler keyXchange
> > > * VPN Server Refugee
> > > * Netmon / Monitoring
> > > * L3 Routing über Funkstrecken
> > > * OLSRv2
> > > * DNS: fff.community
> > > 
> > > Tim
> > > -- 
> > > franken-dev mailing list
> > > franken-dev at freifunk.net
> > >
> > http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
> > 
> > 
> > -- 
> > franken-dev mailing list
> > franken-dev at freifunk.net
> > http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
> > 
> > 
> 
> -- 
> franken-dev mailing list
> franken-dev at freifunk.net
> http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net





Mehr Informationen über die Mailingliste franken-dev