Archiv

Archiv für die Kategorie ‘Scripts & Co’

Teamspeak 3 Backup und Watchdog unter Linux: TS3BACKUP

28. September 2011 Keine Kommentare

Teamspeak LogoEinen Teamspeak 3 Server aufsetzen kann so fast ein jeder – aber wie sichert man diesen? Seit Teamspeak 3 kommt eine Datenbank anstelle des Textfiles für die Konfigurationen und Benutzerdaten zum Einsatz. Diese SQLLite Datenbank des Teamspeak 3 macht eine einfache Sicherung etwas schwieriger, da man Datenbanken nicht “online” wegsichern sollte – zumindest nicht wenn man mit der Datenbankkopie später noch etwas anfangen können möchte.

Da mir meine Teamspeak 3 Datenbank auch einmal schon um die Ohren geflogen ist, bin ich was das Backup angeht etwas sensibilisiert, auch wenn es “nur” mein kleiner eigener Teamspeak 3 Server ist. Und wenn man sich schon hinsetzt und ein Backup Script schreibt, kann man doch auch gleich ein paar Mechanismen einbauen, welche regelmässig prüfen ob der Teamspeak 3 Server überhaupt läuft – und gegebenenfalls diesen auch gleich neu startet.

Ziel des Scriptes ist also zum einen eine regelmässige Datensicherung (einmal die Woche) des Teamspeak 3 Servers inklusive der Datenbanken, Files und Binaries, zum anderen eine kleine Überwachung.

Ich bin mittlerweile auch ein großer Freund von Syslog Servern geworden – also sollte mein kleines Teamspeak 3 Backup auch nicht in ein eigenes Logfile loggen, sondern gleich ins Syslog!

TS3BACKUP Features:

  • Teamspeak 3 Server Backup
  • Repository mit Wochensicherungen des ganzen Jahres
  • Watchdog ob der Teamspeak 3 Server online ist
  • Restart Funktionalität
  • Syslog Anbindung

TS3BACKUP Installationanleitung:

Schritt 1: Script downloaden, auf den Server entpacken und das Script direkt in das Teamspeak 3 Server Verzeichnis speichern.

Schritt 2: Das Script hat im oberen Bereich lediglich ein paar Settings die gemacht werden müssen (Pfad zur Teamspeak Installation, gewünschter Backuptag, gewünschte Backupuhrzeit sowie gewünschter Zielpfad zum Backupstorage.

Schritt 3: Verzeichnis erstellen, in welches die Teamspeak 3 Backups geschrieben werden sollen.

Schritt 4: Cronjob für root erstellen – ich habe einen Cronjob im 5-Minuten Takt für mein Teamspeak Backup erstellt, damit ich falls der Teamspeak Server mal absturzt nicht mal angerufen werde – er startet ja von selbst binnen 5 Minuten neu (und diese 5 Minuten warten die meisten bevor sie mich anrufen :) )!

Offene Punkte:

  • sudo Integration, damit der Teamspeak 3 Server nicht mehr als Root laufen muss.
  • FTP Target Option als Repository für die Datensicherungen
  • Option für optionales eigenes Logfile

Downloadlink zur aktuellen Version: Teamspeak 3 Backup & Watchdog Script (61)

LINUX ONLY!!! Dieses Script funktioniert nur unter Linux!!!
Bisher getestete Distributionen:

  • Ubuntu Server 10.04 64 Bit LTS
  • CentOS 5.3

Bei Wünschen oder Anmerkungen – jederzeit an mich wenden!  Setzt ihr mein Script ein, bitte zumind. einen kleinen Kommentar hinterlassen, schön wären auch ein paar Infos zur verwendetes Scriptversion, Teamspeakversion und eurer Distribution.

KategorienLinux, Scripts & Co, Shell Scripts Tags:

HowTo: Permanente Routen unter Ubuntu Linux

Ich letzter Zeit bon ich selbst immer wieder in die gleiche Falle gegangen: Route für ein bestimmtes Netz auf einem Server hinzugefügt (für meinen Zugriff via VPN) und nach einem Reboot – alles wieder weg, ergo keinen direkten Zugriff mehr. Und alles nur weil ich zu faul war mir zu merken wie ich permanente statische Route in Ubuntu erstelle. Das soll sich nun ändern – ich schreibe wie so oft einfach einen Blog dazu – und schon ist es unauslöschlich in meinem Kopf. Hier also:

HowTo: Permanente Routen unter Ubuntu Linux

Für ein Netzwerk eine Route zu erstellen ist ja (fast) allgemein bekannt, aber damit wir in diesem Artikel alle über das gleiche Netz sprechen, hier mein Beispiel für die Route die ich permanent hinzufügen möchte und nach jedem Reboot auch immer gleich online haben will:

route add -net 192.168.101.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0

Zu Deutsch: Alle Anfragen an und von IPs aus dem netzbereich von 192.168.101.1 bis 192.168.101.255 sollen über das Gateway 192.168.1.1 abgewickelt werden. Das Gateway ist über das Netzwerkinterface eth0 zu erreichen.

Wenn man dies nun so in die Konsole haut, funktioniert die Route gleich und sofort (sofern keine Tippfehler drin sind). jedoch ist diese Route nach einem Reboot wieder weg – und genau das wollen wir ja nicht, wir wollen einen permanente statische Route für dieses Netzwerk!

Um diese statische Route nun permanent zu machen, müssen wir die Datei “/etc/network/interfaces” editieren – ganz unten sammel ich meine Routen um die Übersichtlichkeit zu bewahren.

Wir ergänzen einfach die obige Zeile leicht ergänzt und angepasst:

up route add -net 192.168.101.0/24 gw 192.168.1.1 dev eth0

Mehr ist wirklich nicht zu tun – eine Route also nicht gleich hier einzutragen ist wahrlich nur Faulheit.

Aber hier nochmal kurz der Syntax für die Route:

up route add [-net|-host] / gw  dev

Welche Netzmaske ihr habt, solltet ihr wissen – wenn nicht, habt ihr ganz andere Probleme :)

Adobe Acrobat Reader Silent Uninstallation

18. April 2011 Kommentare ausgeschaltet

Wenn man via Script den Adobe Acrobat Reader updaten will, sollte zuvor der “alte” Adobe Acrobat Reader entfernt werden – soviel ist ja klar. Für diesen Zweck gibt es auch einige Kommandozeilen, mit denen sich diese Deinstallationen, oder auch uninstall, durchführen lassen.

Silent Uninstall Adobe Acrobat Reader 9.4

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A94000000001}

Silent Uninstall Adobe Acrobat Reader 9.3.x

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A93000000001}

Silent Uninstall Adobe Acrobat Reader 9.2.x

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A92000000001}

Silent Uninstall Adobe Acrobat Reader 9.1.x

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A91000000001}

Silent Uninstall Adobe Acrobat Reader 8.1.3 / 8.1.4 / 8.1.6

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A81300000003}

Silent Uninstall Adobe Acrobat Reader 8.1.2
Hier gibt es einen Security Patch für den Adobe Acrobat Reader 8.1.2 – der kann erst deinstalliert werden, wenn der Adobe Acrobat Reader 8.1.2 deinstalliert ist. Also hier Ausnahmsweise zwei Schritte zur silent uninstall:
Acrobat Reader 8.1.2 deinstallieren:

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A81200000003}

Dann den Acrobat Reader 8.1.2 Security Update 1 deinstallieren:

MsiExec.exe /qn /norestart /x {6846389C-BAC0-4374-808E-B120F86AF5D7}

Silent Uninstall Adobe Acrobat Reader 8.1.1

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A81100000003}

Es sei denn, der Adobe Acrobat Reader wurde von Version 8.1.0 hochgepatcht, dann gilt die silent Deinstallation für die Version 8.1.0:
Silent Uninstall Adobe Acrobat Reader 8.1.0

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A81000000003}

Silent Uninstall Adobe Acrobat Reader 8.0

MsiExec.exe /qn /norestart /x {AC76BA86-7AD7-1033-7B44-A80000000002}

Wer noch älterne Versionen deinstallieren will (oder muß), der möge noch etwas suchen, ich habe mir nur diese silent Uninstall Routinen bisher rausgesucht / ermittelt. Seit Adobe Acrobat 6.x müsste die silent deinstall allerdings analog zu dem oben aufgeführten Kommandos aussehen, Garantien übernehme ich aber keine!

Windows 7 und Kixtart Problem – Lösung per Registry

12. Januar 2010 2 Kommentare

Windows 7 und Kixtart Problem – Lösung per Registry
Windows 7 und Kixtart Scripte machen doch oftmals Probleme, welche sich leider auch nicht mit der aktuellen Kixtart Version 4.60 lösen lassen. Meist läuft das Script einfach nicht, ohne dabei jedoch Fehlermeldungen auszuspucken! Bei mir ein ein kleiner Trick geholfen, ein zusätzlichen Eintrag in die Registry der betreffenden Windows 7 Clients:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLinkedConnections"=dword:00000001

Geholfen hat dies meinen Kixtart Scripten zumindest auf der Windows 7 Professional Variante (32 Bit sowie 64 Bit) und auf dem Windows 7 RC, sprich Windows 7 Ultimate.
Den obligatorischen Reboot natürlich nicht vergessen! In den Weblinks habe ich den Registry Eintrag für Kixtart auf Windows 7 noch einmal als downloadbare .REG Datei (zipped) abgelegt, falls jemand das ganze gern per GPO ausrollen möchte (was ich nur empfehlen kann!)
Weblinks:

Windows Logon Script mit Kixtart

Hier mein Kixtart Logon Script für Windows Domänen. Geschrieben in Kixtart, berücksichtigt sind für den Endbenutzer verständliche Fehlermeldungen, eine Begrüßung des Benutzers mit Namen, Hinweisen auf den Helpdesk, Laufwerksmapping, Druckermapping und gruppenbasierte Shares. Zusätzlich für Administratoren spezifische Aktionen, wie WSUS Registry Einstellungen setzen etc., zzgl. ein wenig Humor bei der Begrüssung ;)
Für das Loginscript mit Kixtart hatte ich ja eine Fortsetzung versprochen, die will ich dann auch mal liefern. Im Teil 2 beschäftige ich mich erstmal mit der Dokumentation des Scriptes aus Teil 1, wobei ich ein paar Fehler (die beim kürzen des Scripts entstanden sind) gleich mit ausbügel und einiges ergänze. Wenn jemand also das Script verwenden möchte, nehmt diesen Teil!!!

Ich habe Teil 1 offline genommen um Fehler zu vermeiden, warum sollten inkorrekte Informationen online bleiben?

Ganz zu Anfang habe ich noch eine Zeile aus der Entwicklung des Scriptes stehen, jedoch auskommentiert – das Debugging. Wenn man am Script bastelt und etwas nicht funktioniert, empfiehlt es sich diese Zeile einfach wieder aktiv zu stellen.

?View Code KIXTART
1
;BREAK ON ;*** for testing purpose only - Default is BREAK OFF

Im nächsten Teil habe ich die Gliederung der einzelnen Abschnitte des Loginscripts untergebracht. Angefangen mit ein wenig Obtik und Kommentierung, gefolgt von der Definition wie mein Loginscriptfenster aussehen soll.
SETCONSOLE(“show”) sorgt erstmal dafür das generell etwas angezeigt wird, SETCONSOLE(“maximized”) sorgt für “Vollbild” – allerdings nach “Windows Commandline Definition”, also nur in der Höhe maximiert, in der Breite jedoch auf 80 Zeichen beschränkt.
Über SETTITLE(“Anmeldeskript #### Firmenname #### v1.0″) definiere ich den Fenstertitel, hier kann man sich frei austoben, ich bau immer gern eine Versionnummer des Scripts und den Firmennamen ein.
Zum Schluß folgt die SUB Reihenfolge für die einzelnen zu durchlaufenen Unterabschnitte.

?View Code KIXTART
1
2
3
4
5
6
7
8
9
10
11
12
13
;********************************
;* main
;********************************
SETCONSOLE("show")
SETCONSOLE("maximized")
SETTITLE("Anmeldeskript #### Firmenname #### v1.0")
GOSUB "GREETING"
GOSUB "GET_OS"
GOSUB "DRIVES"
GOTO "END"
;********************************
;* end main
;********************************

SUB Begrüßung
Da ich ein Freund der Höflichkeit bin, begrüßt der Client den sich einloggenden User erstmal. Dafür werden zu Anfang in den Zeilen XX bis XX die Farben gesetzt und zwei Boxen erzeugt, in welchen der User ein paar Grundlegende Informationen zu sich selbst, zum Server und zum Netz findet. Über die kleine Reihe IF-Abfragen wird eine zur Tageszeit passende Begrüssungsfloskel ausgesprochen.
In der unteren Box findet der User die besagten Informationen, inklusive der Kontaktdaten des zuständigen Administrators, für den Fall das es Probleme gibt und der User die Durchwahl des Admins nicht im Kopf hat. Der Befehl AT gefolgt von den Koordinaten eignet sich ausgezeichnet für die Ausgabe der Informationen innerhalb der Boxen, da hier die Position des Textes innerhalb des Fensters sehr schön gesteuert werden kann, Stichwort Haptik!

?View Code KIXTART
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
;********************************
;*** Begrüßung
;********************************
:GREETING
small
Color g+/c+
BOX (3,5,20,73,FULL)
color b/c+
IF @TIME > 00:01:00 AND @TIME < 05:00:00
	AT ( 5,8) "Die Sonne ist noch nichtmal aufgegangen, aber Sie"
		 AT ( 6,8) "@FULLNAME, Sie sind schon da"
ENDIF
IF @TIME > 05:00:00 AND @TIME < 11:00:00
	AT ( 5,8) "Guten Morgen @FULLNAME,"
ENDIF
IF @TIME > 11:00:00 AND @TIME < 14:00:00
	AT ( 5,8) "Guten Tag @FULLNAME,"
ENDIF
IF @TIME > 14:00:00 AND @TIME < 17:00:00
AT ( 5,8) "Guten Nachmittag @FULLNAME,"
ENDIF
IF @TIME > 17:00:00 AND @TIME < 20:00:00
AT ( 5,8) "Guten Abend @FULLNAME,"
ENDIF
IF @TIME > 20:00:00 AND @TIME < 00:01:00
AT ( 5,8) "Es ist sehr spät @FULLNAME,"
ENDIF
		 color n/c+
		 AT ( 8,8) "Sie haben sich soeben am Netzwerk der Firma"
		 AT ( 9,8) "Firmenname angemeldet."
		 AT ( 11,8) "Die aktuelle Uhrzeit: @TIME"
		 AT ( 12,8) "Ihr Benutzername:	 @USERID"
		 AT ( 13,8) "Angemeldet an Server: @LSERVER"
		 AT ( 15,8) "Viel Erfolg und frohes Schaffen."
		 AT (17,8) "Sollte es irgendwelche PC Probleme geben, rufen Sie den"
		 AT (18,8) "PC Support:			  BAfH"
		 AT (19,8) "Telefondurchwahl:	  007"
		 color n/w+
		 AT (21,8) " "
RETURN

SUB GET_OS
In der zweiten Untersektion wird noch etwas für die oben erwähnte Infobox gesammelt, unter anderem Informationen über das auf dem Client verwendete Betriebssystem. Hier findet sich auch noch eine CASE Abfrage in der man bei Bedarf betriebssystemabhängige Operationen starten kann. Ich habe als Muster hier bei allen Betriebssystemen die Variable $ADready befüllt und die Zeitsynchronisation angeworfen, da in einem Active Directory die richtige Uhrzeit (wobei der AD Controller “richtig” definiert) sehr wichtig ist. Nachfolgend werden die gesammelten Informationen in die Infobox eingetragen. Auch hier kommt wieder der AT Befehl zum Einsatz.

?View Code KIXTART
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
;********************************
;*** Betriebssystem abfragen, Flag und ggfls. Time setzen
;********************************
:GET_OS
IF INSTR (@ProductType, "Windows NT Workstation") = 0
		 ? "Sie verwenden Windows NT"
		 $ADready = False
ELSE
		 Color g+/c+
		 BOX (23,5,30,73,FULL)
		 color b/c+
		 SELECT
		 CASE INSTR (@ProductType, "Windows 2000") > 0
				  $ADready = True
				  SETTIME "@lserver"
		 CASE INSTR (@ProductType, "Windows XP") > 0
				  $ADready = True
				  SETTIME "@lserver"
		 CASE INSTR (@ProductType, "Windows Server 2003") > 0
				  $ADready = True
				  SETTIME "@lserver"
		 ENDSELECT
		 IF $ADready = False
			 SETTIME "@lserver"
		 ENDIF
		 AT ( 24,8) "Client Name:	  @HOSTNAME"
		 AT ( 25,8) "Betriebssystem:   @ProductType"
		 AT ( 26,8) "IP Adresse:	   @IPADDRESS0"
		 AT ( 28,8) "Profilpfad:	   @HOMESHR"
		 AT ( 29,8) "Homeverzeichnis:  @HOMEDRIVE\"
		 AT ( 35,8) " "
ENDIF
RETURN

SUB DRIVES
Das mappen der benötigten Laufwerke und Drucker ist wohl mit die wichtigste Aufgabe eines Loginscripts, aber auch der Teil welcher das Script oftmals extrem unübersichtlich werden lässt. Ich habe von daher mir Unterscripte geschrieben, in welchen dann nur die Mappings stehen. An mein Hauptscript muss ich also selten ran.

Die erste Ausnahme bilden die restlichen zwei NT Clients die hier im Netz stehen (bitte nicht hänseln, die Software da will absolut nicht auf 2000 oder XP laufen....). Da die NT basierten Systeme keine UNC Pfade mit Angabe eine Verzeichnisses als Pfad unterstützen, gibt es bei mir spezielle Freigaben für NT, welche nicht auf Beispielsweise \\SERVER\Allgemein\Anträge zeigen, wobei "SERVER" der Name des Servers ist, "Allgemein" für den Namen der Freigabe steht und "Anträge" ein Verzeichnis innerhalb der Freigabe "Allgemein" ist. NT könnte das nicht verstehen, also gibt es für die NT Clients da eine Extrafreigabe, aber eben NUR da! Diese steht in diesem Script dann inder Datei "map_global_nt.kix".
Für alle anderen Betriebssysteme gilt die Datei "map_global.kix". Administratoren brauchen naturgemäß zusätzliche Freigaben, Adminfreigaben - diese werden über die Funktion IF INGROUP("Domain Admins") gemappt, denn wenn der sich einloggende Benutzer in der Gruppe Domain Admins ist, wird über den Befehl CALL "map_admin.kix" die Datei mit den Adminmappings aufgerufen. In den nachfolgenden Zeilen setzte ich zur Sicherheit gleich nochmal die Registryeinstellungen für meinen WSUS Server und starte ein manuelles Reporting an den WSUS. Sehr praktisch, denn so brauch man sich nur auf einem Client einloggen und bekommt darüber schnellstmöglich alle Updates etc. auf den Client. Ganz nebenbei wird die Funktion SHELL "command" zum Aufrufen von Konsolenbefehlen und externen Batches gezeigt ;)

?View Code KIXTART
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
;********************************
;*** Shares &amp;  Co
;********************************
:DRIVES
IF INSTR (@ProductType, "Windows NT Workstation") > 0
         CLS
         IF INGROUP("Domain Users")
             CALL "map_global_nt.kix"
         ENDIF
         ? + @ProductType
ELSE
         IF INGROUP("Domain Users")
             CALL "map_global.kix"
         ENDIF
         IF INGROUP("Domain Admins")
             CALL "map_admin.kix"
             SHELL "regedit /s \\wsus-server\ClientReg\WSUS_Client.reg"
             IF @ERROR = 0
                           Color r+/w+
                           ? "WSUS Registry Eintrag gesetzt, starte Reporting!"
                           SHELL "wuauclt.exe /reportnow"
                           SHELL "wuauclt.exe /detectnow"
                           color n/w+
                  ELSE
                           Color r+/w+
                           ? "ERROR: WSUS Registry Eintrag NICHT gesetzt!"
                           color n/w+
                           sleep 60
                  ENDIF
         ENDIF
         IF INGROUP ("Domain Users")
                  CALL "map_drives.kix"
         ENDIF
ENDIF

SUB END
Beenden muss ich das Script natürlich auch, aber wenn möglich sauber. Also eine kleine extra Sektion zum beenden des Scripts, damit ja nix schief gehen kann.

?View Code KIXTART
1
2
:END
EXIT

Die map_*.kix Dateien
Der Inhalt der Datein für die Laufwerkmappings ist denkbar einfach. Entweder man verwendet über SHELL die normalen Befehle von Windows, oder über USE Q: “\\SERVER1\USERS” beispielsweise den Kixtart Befehl dazu. Für Drucker gilt das entsprechend, Windows befehlt oder

Wenn man noch ein wenig Info an den User aufgeben möchte, was gerade so passiert, kann man dies lesbar über

?View Code KIXTART
1
2
3
4
If ADDPRINTERCONNECTION ("\\"+$PrintServer+"\LaserJetColor") = 0
     ? "Drucker Farblaserdrucker wurde verbunden"
ELSE
     ? "FEHLER beim verbinden vom Farblaserdrucker"

lösen. So kann einem ein User auch gleich am Telefon mitteilen was beim Login nicht geklappt hat und man muss nicht raten, sondern kann sich direkt an die Problembehebung machen.

Wer nun noch bei dieser Gelegenheit alles inventarisieren möchte, kann dies auch tun. Am besten dazu den Artikel auf administrator.de anschaun.

Für weitere Fragen stehe ich gerne zur Verfügung - einfach per Kommentar fragen, ich freue mich über jeden ernstgemeinten Kommentar.

Das ganze Kixtart Logon Script zum download steht in den Weblinks, allerdings ohne die Kommantare in diesem Artikel!

Abschließend noch einige interessante Links zum Thema Kixtart und Logonscripts: