Rekursiver Abgleich der Konfigurationsverzeichnisse mit wget

Rekursiver Abgleich der Konfigurationsverzeichnisse mit wget

Postby hbuhrmester » 10.09.2017, 14:44

Rekursiver Abgleich der Konfigurationsverzeichnisse mit wget

wget kann Verzeichnisse oder ganze Server rekursiv spiegeln. Das kann zum einfachen Abgleich der Verzeichnisse static, exclude, client/static und client/exclude mit dem Server https://svn.wsusoffline.net verwendet werden.

Vorbedingungen sind:

  • Der Server muss für jedes Verzeichnis eine Datei index.html bereitstellen, die alle Dateien in diesem Verzeichnis auflistet. Der Server https://svn.wsusoffline.net ist bereits so konfiguriert, dass diese index-Dateien automatisch aus dem aktuellen Verzeichnisinhalt erstellt werden.
  • Für den Server https://svn.wsusoffline.net benötigt man ein aktuelles wget, das verschlüsselte Verbindungen unterstützt.
  • Andere Download-Programme wie Aria2 oder curl haben nicht die rekursiven Download-Optionen von wget. Die einzige Alternative wäre vielleicht die Kommandozeilen-Version von httrack.

Der Abgleich aller Konfigurationsverzeichnisse mit dem svn-Server sieht dann so aus:

Code: Select all
wget --timestamping --recursive --no-parent --no-host-directories \
    --cut-dirs=3 --directory-prefix=".." --reject dummy.txt \
    --execute robots=off \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/static/ \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/exclude/ \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/client/static/ \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/client/exclude/


Die Optionen "--timestamping --recursive" können noch durch "--mirror" ersetzt werden:

Code: Select all
wget --mirror --no-parent --no-host-directories \
    --cut-dirs=3 --directory-prefix=".." --reject dummy.txt \
    --execute robots=off \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/static/ \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/exclude/ \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/client/static/ \
    https://svn.wsusoffline.net/svn/wsusoffline/trunk/client/exclude/


Die Option "--no-parent" bewirkt, dass wget nur in Unterverzeichnisse absteigt, nicht in übergeordnete Verzeichnisse.

Normalerweise rekonstruiert wget im Download-Verzeichnis den gesamten Pfad auf dem Server, angefangen mit dem Servernamen. Man bekommt also zunächst den Pfad:

Code: Select all
../svn.wsusoffline.net/svn/wsusoffline/trunk/static/index.html


Mit der Option "--no-host-directories" wird der Servername "svn.wsusoffline.net" aus dem Pfad entfernt.

Die Option "--cut-dirs=3" entfernt die ersten drei Verzeichnisse aus dem Pfad, hier also "svn/wsusoffline/trunk".

Die restlichen Verzeichnisse auf dem Server werden im Download-Verzeichnis neu erstellt:

Code: Select all
../static/index.html
../exclude/index.html
../client/static/index.html
../client/exclude/index.html


Wenn die Verzeichnisse bereits existieren, kann wget sie natürlich benutzen. Ein Effekt ist, dass man für alle vier Downloads nun dasselbe Download-Verzeichnis ".." benutzen kann. Deshalb genügt ein Befehl, um alle vier Verzeichnisse zu synchronisieren.

Die Dateien dummy.txt wurden erstellt, weil zip-Archive keine leeren Verzeichnisse enthalten können. Sie werden vom Skript DownloadUpdates.cmd beim ersten Aufruf gelöscht und müssen nicht wieder heruntergeladen werden.

Bei rekursiven Download berücksichtigt wget normalerweise eventuelle Einschränkungen durch die Datei robots.txt. Doch diese Datei fehlt auf dem Server https://svn.wsusoffline.net . Die Option "--execute robots=off" verhindert eine entsprechende Fehlermeldung.


Unterscheidung von Entwicklungslinien

Ein wichtiger Vorteil ist auch, dass die aktuelle Entwicklungslinie "trunk" und der "branch" 9.2.* getrennt werden können. Einige Einstellungsdateien sind bereits unterschiedlich:

Die Version 9.2.3 ESR soll die Desktop-Versionen von Windows Vista und Windows 8 weiter unterstützen. Die Dateien:

Code: Select all
StaticDownloadLinks-w60-x64-glb.txt
StaticDownloadLinks-w60-x86-glb.txt
StaticDownloadLinks-w62-x64-glb.txt
StaticDownloadLinks-w62-x86-glb.txt


enthalten deshalb die "custom" Updates, die Microsoft nach dem offiziellen Support-Ende für die Desktop-Versionen veröffentlicht hat, um auf das WannaCry-Debakel zu reagieren.

Die aktuelle Version 11.0.1 soll nur noch die Server-Versionen "Server 2008" und "Server 2012" unterstützen. Diese werden von Microsoft weiter unterstützt und auf dem normalen Weg mit Updates versorgt. Die custom-Updates fehlen deshalb und die entsprechenden Updates sind wahrscheinlich in der Datei wsusscn2.cab enthalten.

Deshalb sollte der branch 9.2.* nicht mit Dateien aus dem aktuellen "trunk" aktualisiert werden. Statt dessen kann man die Dateien so aktualisieren:

Code: Select all
wget --mirror --no-parent --no-host-directories \
    --cut-dirs=4 --directory-prefix=".." --reject dummy.txt \
    --execute robots=off \
    https://svn.wsusoffline.net/svn/wsusoffline/branches/wsusoffline9.2.x/static/ \
    https://svn.wsusoffline.net/svn/wsusoffline/branches/wsusoffline9.2.x/exclude/ \
    https://svn.wsusoffline.net/svn/wsusoffline/branches/wsusoffline9.2.x/client/static/ \
    https://svn.wsusoffline.net/svn/wsusoffline/branches/wsusoffline9.2.x/client/exclude/



Nach dem Abgleich sollten die Dateien auf Änderungen überprüft werden. Das geht am einfachsten mit hashdeep, dessen Audit-Modus genau dafür geschaffen wurde. Man erstellt erst eine Datei mit den Hashwerten:

Code: Select all
hashdeep -l ../static/*.txt ../exclude/*.txt ../client/static/*.txt \
    ../client/exclude/*.txt > hashes-configuration-files.txt


und überprüft sie anschließend auf Änderungen:

Code: Select all
if hashdeep -a -l -k hashes-configuration-files.txt ../static/*.txt \
    ../exclude/*.txt ../client/static/*.txt ../client/exclude/*.txt \
    > /dev/null
then
    echo "Configuration files are unchanged"
else
    echo "Some Configuration files were changed"
fi


Mit kleinen Textdateien als Eingabe ist hashdeep sehr schnell. Es vergleicht nur den tatsächlichen Dateiinhalt, nicht das Änderungsdatum der Datei.

Wichtige Dateien wie ExcludeList-superseded-exclude.txt können auf dieselbe Weise einzeln auf Änderungen überprüft werden.


Fazit

Vorteile

  • Man kann alle vier Verzeichnisse mit einem Befehl aktualisieren. Auch die Datei ExcludeList-superseded-exclude.txt benötigt keinen eigenen Befehl zum Download mehr.
  • Kein zusätzlicher Aufwand auf dem Server – es werden keine zusätzlichen Dateien wie StaticDownloadFiles-modified.txt benötigt.
  • Updates für verschiedene Entwicklungslinien können getrennt werden.

Nachteile

  • Der Abgleich dauert länger, da wget immer alle Dateien vergleichen muss. Letztlich sind es aber nur ein paar Sekunden mehr.
hbuhrmester
 
Posts: 244
Joined: 11.10.2013, 20:59

Return to Anregungen / Suggestions

Who is online

Users browsing this forum: Yahoo [Bot] and 3 guests