Benutzer-Werkzeuge

Webseiten-Werkzeuge


tutorial:root:abgleich_ftp

Synchronisieren von Dateien über FTP

Viele Admins, die einen Root-Server besitzen, möchten gerne ihre Maps oder SourceTV-Demos mit einem Webserver über FTP abgleichen. Der FTP-Client lftp bietet eine Vielzahl von Möglichkeiten. Das Synchronisieren ist eine der gewünschten Funktion.

Installation von lftp

Da das Programm lftp standardmäßig nicht installiert ist, muss es über den Paketmanager der jeweiligen Distribution installiert werden.

  • Debian:
    apt-get update; apt-get install lftp
  • Suse-Linux:
    zypper install lftp

Kurze Einführung in lftp

Da das Programm später über ein Script als Cronjob ausgeführt werden soll, ist es wichtig zu wissen, wie der FTP-Client funktioniert. Wenn man nur lftp ohne Parameter aufruft, kommt man in die Kommandozeile des FTP-Clients1).

Hilfe:

Benutzung: lftp [OPTS] <site>
»lftp« ist der erste Befehl, der von lftp nach den rc-Dateien ausgeführt wird.
-f <datei> Befehle aus diesem File ausführen und beenden
-c <bfehl> Befehle ausführen und beenden
Die anderen Optionen sind die selben wie beim »open« Befehl
-e <bfehl> den Befehl direkt nach der Auswahl ausführen
-u <user>[<passwt>] Benutze user und passwort zur Authentifikation
-p <port> Benutze den angegebenen Port zur Verbindung
<site> Name des Hosts, URL oder Name eines Lesezeichen


Der Befehl mirror:

Benutzung: mirror [OPTS] [nichtlokal [lokal]]

Das angegebene nichtlokale Verzeichnis in ein lokales Verzeichnis spiegeln

-c, –continue mit dem Spiegeln fortfahren, wenn möglich
-e, –delete Dateien die nicht auf dem entfernten Verzeichnis
liegen löschen
–delete-first alte Dateien vor der Übertragung neuer Dateien löschen
-s, –allow-suid SUID/SGID Berechtigungen setzen wie auf dem
Server
–allow-chown wenn möglich Benutzer und Gruppe setzen
-n, –only-newer nur neuere Dateien herunterladen (schließt -c aus)
-r, –no-recursion Unterverzeichnisse nicht mit einschließen
-p, –no-perms keine Dateiberechtigungen setzen
–no-umask umask nicht auf Dateiattribute anwenden
-R, –reverse umgedrehter Spiegel (Dateien schicken)
-L, –dereference symbolische Links als Files herunterladen
-N, –newer-than DATEI nur Dateien die neuer sind als DATEI herunterladen
-P, –parallel[=N] N Dateien gleichzeitig herunterladen
-i RA, –include RA zum regulären Ausdruck passende Dateien einschließen
-x RA, –exclude RA zum regulären Ausdruck passende Dateien
ausschließen
RA sind erweiterte reguläre Ausdrücke (Joker)
-v, –verbose[=N] mehr Informationen ausgeben
–log=DATEI ausgeführte lftp Befehle in DATEI protokollieren
–script=DATEI lftp Befehle in DATEI protkollieren, aber nicht
ausführen
–jusz.print, –dry-run entspricht »–script=-«

Gibt man -R an, so ist das erste Verzeichnis lokal und das andere auf dem
Gegenstelle.
Wird das zweite Verzeichnis nicht angegeben, wird die Namenswurzel(basename)
des ersten Verzeichnisses verwendet.
Werden beide Verzeichnisse weggelassen, so werden das aktuelle lokale und
nichtlokale Verzeichnis verwendet.

Quell- und Zielverzeichnisse

Das Quellverzeichnis sollte immer mit einem Schrägstrich enden, damit alle Dateien innerhalb des Verzeichnisses erfasst werden. Wird der Schrägstrich am Ende vergessen, wird das letzte Verzeichnis mit erstellt. Im Gegensatz zum Quellverzeichnis, sollte beim Zielverzeichnis der letzte Schrägstrich nicht verwendet werden.

Beispiel

SourceTV-Demos Synchronisieren

Um SourceTV-Demos mit einem Webserver über FTP zu synchronisieren, werden nur die Dateien *.dem benötigt. Alles andere zu synchronisieren wäre ein Sicherheitsrisiko.

lftp -e "mirror -ceRr -i .*\.dem$ /home/gameserver/server1/cstrike/ /httpdocs/sourcetv_demos;quit" -u ftp_user:ftp_password ftp_host

In diesem Beispiel wird der Befehl

mirror -ceRr -i .*\.dem$ /home/gameserver/server1/cstrike/ /httpdocs/sourcetv_demos/

an lftp übergeben. Der Parameter -e übergibt dem Programm lftp den Befehl2).
Die Optionsschalter -ceRr des Befehls mirror bewirken folgendes:

  • c > mit dem Spiegeln fortfahren, wenn möglich3)
  • e > Dateien die nicht auf dem entfernten Verzeichnis liegen löschen
  • R > umgedrehter Spiegel (Dateien schicken)
  • r > Unterverzeichnisse nicht mit einschließen
  • -i .*\.dem$ > selektiert alle Dateien mit der Endung *.dem

Mappool abgleichen

Um den Mappool abzugleichen, kann man selektierte Verzeichnisse auf den Webserver hochladen. Da die Befehlskette länger wird, ist es sinnvoll die Befehle mit einer Datei an lftp zu übergeben.

lftp -f mappool_sync.txt

Hier wird die Datei mappool_sync.txt an lftp übergeben und lftp führt diese dann aus.

Alle Dateien aus bestimmten Verzeichnissen hochladen

mappool_sync.txt:

lftp -u ftp_user:ftp_password ftp_host
mirror -eR /home/gameserver/server1/cstrike/maps/ /httpdocs/cstrike/maps
mirror -eR /home/gameserver/server1/cstrike/materials/ /httpdocs/cstrike/materials
mirror -eR /home/gameserver/server1/cstrike/models/ /httpdocs/cstrike/models
mirror -eR /home/gameserver/server1/cstrike/sound/ /httpdocs/cstrike/sound
quit
Nur bzip2-Dateien hochladen

Wenn schon ein vorgefertigtes Script vorhanden ist, welches bz2-Dateien anfertigt aber noch andere unkomprimierte Dateien sich im Verzeichnis befinden, können mithilfe -i .*\.bz2$ die *.bz2-Dateien selektiert werden.
mappool_sync.txt:

lftp -u ftp_user:ftp_password ftp_host
mirror -eR -i .*\.bz2$ /home/gameserver/server1/cstrike/maps/ /httpdocs/cstrike/maps
mirror -eR -i .*\.bz2$ /home/gameserver/server1/cstrike/materials/ /httpdocs/cstrike/materials
mirror -eR -i .*\.bz2$ /home/gameserver/server1/cstrike/models/ /httpdocs/cstrike/models
mirror -eR -i .*\.bz2$ /home/gameserver/server1/cstrike/sound/ /httpdocs/cstrike/sound
quit

Shell-Script für SourceTV-Demos

Mit diesem Shell-Script kann automatisiert der Upload aller Demo-Dateien von SourceTV gestartet werden. Es arbeitet mit einer externen Konfigurationsdatei, die mit dem Befehl source geladen wird.

Shell-Script [Download]:

#!/bin/bash
if [ ! -f demo.cfg ]; then echo "Die Konfigurationsdatei demo.cfg wurde nicht gefunden"; exit; fi
source demo.cfg
if [ -z "$ftp_host" ]; then echo "FTP-Host fehlt in der Konfigdatei"; exit; fi
if [ -z "$ftp_user" ]; then echo "FTP-Benutzer fehlt in der Konfigdatei"; exit; fi
if [ -z "$ftp_password" ]; then echo "FTP-Passwort fehlt in der Konfigdatei"; exit; fi
if [ -z "$dir_local" ]; then echo "Lokales Verzeichnis fehlt in der Konfigdatei"; exit; fi
if [ -z "$dir_remote" ]; then echo "Verzeichnis auf dem Webserver fehlt in der Konfigdatei"; exit; fi
 
echo -e "Beginne mit dem Spiegeln\n"
echo "Host: $ftp_host"
echo "User: $ftp_user"
echo "Passwort: ****"
echo
echo "Lokales Verzeichnis: $dir_local"
echo "Verzeichnis auf dem Webserver: $dir_remote"
echo
lftp -e "mirror -ceRr -i $extension $dir_local $dir_remote" -u $ftp_user:$ftp_password $ftp_host



Konfigurationsdatei [Download]:

# Beispiel:
#
#ftp_host=sourceserver.info
#ftp_user=user123
#ftp_password=passwort123
#dir_local=/home/gs/server/war1_css/srcds/cstrike/
#dir_remote=/subdomains/maps/httpdocs/xyz/demos
#extension=".*\.dem$" (regular expression. In diesem Beispiel alle Dateien mit der Endung .dem)
#
#Alle Angaben sind noetig, damit daas Script die Dateien und Verzeichnisse Spiegeln kann.
 
ftp_host=
ftp_user=
ftp_password=
dir_local=
dir_remote=
extension=".*\.dem$"
1) mit dem Befehl quit beendet man den FTP-Client
2) Wenn das Script länger wird, kann stattdessen kann auch eine Datei verwendet werden
3) Da SourceTV-Demos, die aufgenommen werden, auch größer werden.
So kann der Upload fortgesetzt werden. Das spart Zeit.
tutorial/root/abgleich_ftp.txt · Zuletzt geändert: 2010/04/24 14:24 von DeaD_EyE