Ich habs schonmal irgendwo geschrieben.
Gehen wir von aus, dass unser Masterserver in /home/gs/srcds ist.
Wir möchten eine Kopie von diesem erstellen, aber mit Symlinks und die Verzeichnisse sollen keine Symlinks sein.
Dafür erstellen wird die Verzeichnisstruktur für server1:
|
Source code
|
1
|
mkdir /home/gs/server1
|
Wir möchten jetzt den Inhalt von /home/gs/srcds/* auch in /home/gs/server1/ als Symlinks haben. Dafür gibt es beim Copy-Befehl den Parameter -s (make symbolic links instead of copying). Wie schon zuvor beschrieben, werden Verzeichnisse auch erstellt. Damit der Copy-Befehl den Inhalt aller Unterverzeichnisse mitkopiert, nutzen wir -R (copy directories recursively).
Der Befehl sieht dann so aus:
|
Source code
|
1
2
3
|
cp -sR /home/gs/srcds/* /home/gs/server1/
# Das Wildcard * wählt alle Dateien und Verzeichnisse in /home/gs/srcds/ aus
# /home/gs/server1/ <- der Schrägstrich am Ende ist wichtig
|
Nach dem ersten mal werden noch keine Fehlermeldungen kommen. Wird der Befehl nochmal wiederholt, werden jetzt viele Fehler ausgegeben, da die Dateien (Symlinks) schon alle exisitieren.
Mittels &> /dev/null am ende des Befehls, kann man die Ausgabe umleiten.
|
Source code
|
1
|
cp -sR /home/gs/srcds/* /home/gs/server1/ &> /dev/null
|
Kommt ein SteamUpdate bei dem keine neuen Dateien hinzukommen, braucht man den cp-Befehl nicht nochmal auszuführen.
Ich habs in meinem Updatescript immer gemacht, da man das vorher nie wissen kann.
Also nach jedem SteamUpdate:
|
Source code
|
1
2
3
4
5
6
|
cp -sR /home/gs/srcds/* /home/gs/server1/ &> /dev/null
cp -sR /home/gs/srcds/* /home/gs/server2/ &> /dev/null
cp -sR /home/gs/srcds/* /home/gs/server3/ &> /dev/null
cp -sR /home/gs/srcds/* /home/gs/server4/ &> /dev/null
cp -sR /home/gs/srcds/* /home/gs/server5/ &> /dev/null
cp -sR /home/gs/srcds/* /home/gs/server6/ &> /dev/null
|
Wie beim letzen OrangeBox-Update kann es vorkommen, dass Dateien auch entfernt sind. Man hat dann in den Kopien verwiesene Symlinks, die auf fehlende Dateien verweisen.
Wenn man eine halbwegs aktuelle Distribution hat, kann man dieser einfach mit folgendem Befehl suchen und direkt löschen:
|
Source code
|
1
|
find /home/gs/server1 -L -type l -exec rm '{}' \;
|
|
Source code
|
1
2
|
#dieser Code ist noch effizienter
find /home/gs/server1 -L -type l -delete
|
Viele Dateien, die Symlinks sind und bearbeitet werden sollen, können aus der Serverkopie gelöscht werden und vom Masterserver direkt kopiert werden. Es geht auch anders. Dafür kann man sich ein Template erstellen. Dieses hat die gleiche Struktur wie der Masterserver, aber nur mit den Dateien, die der Admin verändern muss und schom beim Masterserver enthalten sind oder halt noch fehlen, aber schon bei der erstinstallation der Serverkopie dabei sein sollen.
Wenn das Template z.B. in /home/gs/srcds_template ist, können wir dieses jeweils vor dem ersten mal kopieren der Symlinks in das leere Serververzeichnis kopieren. Z.b. lohnt es sich Dateien wie die server.cfg, autoexec.cfg schonmal für das Template in /home/gs/srcds_template/cstrike/cfg/ zu erstellen. Die maplist.txt und der mapcycle.txt können auch schonmal erstellt werden, in diesem Fall kommen die Dateien nach /home/gs/srcds_template/cstrike/.
Jetzt das Serververzeichnis erstellen:
|
Source code
|
1
|
mkdir /home/gs/server1_mit_templates/
|
Danach das Template kopieren:
|
Source code
|
1
2
|
cp -R /home/gs/srcds_template/* /home/gs/server1_mit_templates/
#diesmal echte Dateien, keine Symlinks
|
Und jetzt die Serverdateien:
|
Source code
|
1
|
cp -sR /home/gs/srcds/* /home/gs/server1/ &> /dev/null
|
Beim ersten mal kann man &> /dev/null weglassen. Dann sollten nur die Dateien in den Fehlermeldungen auftauchen, die schon bereits vom Template kopiert worden sind.
Ich hoffe, dass das einigermaßen verständlich ist.