Letzte Woche war an meiner Schule Projektwoche. Heißt traditionell: Ich habe mein Homepageprojekt und versuche im Interesse der Schule Nachwuchswebmaster zu züchten. Nebenbei stirbt die halbe IT Infrastruktur der Schule und man verbringt letztendlich die meiste Zeit damit, irgendwelche Rechner zu reparieren. So auch dieses Jahr.
Montag
Allgemeines Erklären der Homepageadministration, Joomla lebe hoch. Einige Ideen und Umstrukturierungen, aber ansonsten habe ich mich die meiste Zeit um 2 Rechner gekümmert, die aus irgendeinem Grund nicht mehr funktioniert haben – 2 Windows Neuinstallationen.
Dienstag
Bewerbungsgespräch bei InnoGames in Hamburg, ergo nicht da.
Mittwoch
Allgemeines Arbeiten, Seitenverlinkungen, Überarbeitung der Hauptseite, Einbinden des neuen Banners. Nebenbei 2 Windows Neuinstallationen.
Donnerstag
Vor den Homepagesachen erst einmal den letzten Rechner vom Vortag fertig machen, sprich Delphi 7 und Office XP installieren sowie Windows Updates laden. Sekunde, DNS Fehler? Eben den DNS Server geändert – nichts. Am anderen PC probiert – nichts. Als es dann mit nslookup ging kam mir der erste Verdacht… Conficker.B/C blockiert doch die DNS-Auflösung von Microsoft und einigen AV Herstellern. Symantec.com – DNS Fehler. Scheiße.
Nach einer kurzen Validierung auf einigen PCs stellte sich dann recht schnell heraus, dass so ziemlich alle Schul-PCs mit Conficker.B infiziert waren. In Anbetracht der Tatsache, dass fast alle Rechner noch auf XP Service Pack 1 liefen und Automatische Updates überall deaktiviert waren auch kein Wunder. Normalerweise hätte ich jetzt einfach an jedem Rechner das Netzwerkkabel gezogen, den Fix eingespielt und eines der zahlreichen Removal Tools gestartet. Conficker war mir durch Know Your Enemy: Containing Conficker und die Analyse der Uni Bonn recht gut bekannt, was das Beseitigen etwas erleichterte. Das Problem war nur, dass am Wochenende Tag der offenen Tür war und folglich alle paar Sekunden Schüler etwas ausdrucken oder im Internet nachschauen wollten.
Auf einzelnen Rechnern hatte ich die Gelegenheit den Virus zu entfernen – vorerst. Ich hatte vergessen, dass sich Conficker auch auf angeschlossene USB Sticks überträgt und sich dann über den Autostart weiterverbreitet. Ich weiß nicht, wie viele USB-Sticks der Schüler infiziert sind, aber es werden zu diesem Zeitpunkt bereits eine ganze Menge gewesen sein. Es endete dann mit einer Sperrung jeglicher PCs und der Entscheidung, die Situation zu nutzen und eine CD für die unbeaufsichtigte Windows Installation zusammenzustellen. Die CD musste eigentlich nichts komplexes tun:
- Treiber der Rechner im Kabinett einbinden
- Firefox installieren
- Adobe Reader installieren
- Delphi installieren
- Office installieren
- Der Schuldomäne beitreten
- ggf. den Computernamen setzen
Freitag
Ich hatte mich bisher noch nie mit der Thematik auseinandergesetzt, meine Wahl fiel jedoch recht schnell auf nLite: Ein simples Tool, um Windows Installationen beliebig anzupassen. Programminstallationen sind mit nLite Addons ohne Weiteres möglich, es gibt auch diverse Seiten mit fertigen Addons bekannter Programme. Da diese ganzen Packages jedoch Englisch waren und mich das Thema interessiert habe ich mich dazu entschlossen, die Pakete selber zu packen.
Die benötigten Schritte sind im Wiki von German Unattended sehr gut beschrieben. Nur wie installiert man Programme ohne nervige Dialoge? Gesucht, Gefunden! Ich weiß nicht welche gelangweilte Seele das zusammengestellt hat, aber diese Tabelle enthält für so ziemlich alle bekannten Freeware Programme die Installationsparameter für eine “Silent Installation”. Getestet, funktioniert. Das war doch ein wenig zu einfach…
Es hätte doch Stil, wenn Firefox bereits AdBlock Plus und das Flash Plugin vorinstalliert hätte, oder? Mit 7-Zip kann man den Firefox Installer recht einfach entpacken, die Ordnerstruktur ist recht logisch: non-localized enthält alle sprachneutralen, localized die übersetzten Inhalte. Die NPSWF32.dll von Flash also einfach in den non-localized\plugins Ordner kopiert und die Installation gestartet – Great Success!
AdBlock Plus stellte sich etwas schwieriger heraus – woher bekommt man die benötigten Dateien? Die Installationsseite installiert im Firefox direkt das Addons, im IE bekommt man eine Mitteilung, doch bitte Firefox zu nutzen. Der Quellcode offenbarte jedoch Folgendes:
<a href="/de/firefox/downloads/latest/1865/addon-1865-latest.xpi?src=addondetail" id="installTrigger74835-6314f9b" title="Adblock Plus zu Firefox hinzufügen" addonName="Adblock Plus" addonIcon="/en-US/firefox/images/addon_icon/1865/1262852260" addonHash="sha256:e691e8230286883726203768bb1d22c9d19ded7165523a298edddc1cb25e886c" jsInstallMethod="browser_app_addon_install" frozen="false" class="button positive significant">XPI Dateien waren mir bereits von Thunderbird Plugins bekannt. Es handelt sich hier lediglich um Zip Dateien mit anderem Suffix. Ergo mit IE heruntergeladen und entpackt. Der Inhalt:

Die Dateien gehören logischerweise in den extensions Ordner – doch wie muss der Unterordner heißen? Ein Blick in die install.rdf half weiter:

Ein Blick in meinen Firefox Ordner bestätigte die Vermutung – Ordnername gefunden. Die Firefox Installation war also soweit fertig.
Für modifizierte Installationen des Adobe Readers bietet Adobe den Adobe Customization Wizard an. Einziges Problem: Das Tool erwartet als Eingabe einen entpackten Installer. 7-Zip lieferte hier keine brauchbaren Ergebnisse, aber auch hier bot Adobe recht unkompliziert Hilfe in Form eines Knowledge Base Artikels. Der Customization Wizard war soweit unkompliziert zu bedienen und die Einbindung der modifizierten Installation war recht schnell erledigt.
Die ersten Tests mit VMWare verliefen erstaunlich gut – nur leider ließen sich die Firefox Installationen entweder nicht starten oder crashten nach einer halben Sekunde. 5 XP Installationen und gefühlte 20 Tassen Kaffee später habe ich mich dann nach anderen Möglichkeiten umgeschaut. Ein wenig später bin ich dann auch auf einen Artikel gestoßen, der sich auch mit der automatisierten Installation auseinandersetzte, aber einen anderen Ansatz nutzte: RunOnceEx.
Grundlegend wird hierbei während der Installation ein Registry Eintrag erstellt, welcher nach der ersten Anmeldung ein kleines Fenster anzeigt und hinterlegte Befehle ausführt:

Nach einigen Versuchen stellte sich dann heraus, dass diese Methode nicht nur professionell aussieht, sondern auch wunderbar funktioniert. Und der größte Vorteil: Man kann serverseitige Skripte ausführen!
Letztendlich sah das Skript dann so aus:
@echo off
SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
REG ADD %KEY% /V TITLE /D "Komponenteninstallation" /f
REG ADD %KEY%\001 /VE /D "XP Support Tools" /f
REG ADD %KEY%\001 /V 1 /D "%CD%\Installer\WindowsXP-KB838079-SupportTools-ENU.exe"
echo @echo off > C:\tmp_winrar_reg.bat
echo copy %CD%\Installer\WinRAR\rarreg.key %ProgramFiles%\WinRAR\ >> C:\tmp_winrar_reg.bat
echo del C:\tmp_winrar_reg.bat >> C:\tmp_winrar_reg.bat
REG ADD %KEY%\005 /VE /D "WinRAR" /f
REG ADD %KEY%\005 /V 1 /D "%CD%\Installer\WinRAR\setup.exe /s"
REG ADD %KEY%\005 /V 2 /D "C:\tmp_winrar_reg.bat"
REG ADD %KEY%\010 /VE /D "IrfanView" /f
REG ADD %KEY%\010 /V 1 /D "%CD%\Installer\IrfanView\setup.exe /silent /folder="%ProgramFiles%\irfanview" /desktop=1 /thumbs=0 /group=1 /allusers=1 /assoc=0"
REG ADD %KEY%\015 /VE /D "Firefox" /f
REG ADD %KEY%\015 /V 1 /D "%CD%\Installer\Firefox\Setup.exe -ms"
echo @echo off > C:\tmp_firefox.bat
echo xcopy "%CD%\Installer\Firefox\extensions\*.*" "%ProgramFiles%\Mozilla Firefox\extensions" /Y /E >> C:\tmp_firefox.bat
echo xcopy "%CD%\Installer\Firefox\plugins\*.*" "%ProgramFiles%\Mozilla Firefox\plugins" /Y /E >> C:\tmp_firefox.bat
echo del C:\tmp_firefox.bat >> C:\tmp_firefox.bat
REG ADD %KEY%\016 /VE /D "Firefox Erweiterungen" /f
REG ADD %KEY%\016 /V 2 /D "C:\tmp_firefox.bat"
REG ADD %KEY%\020 /VE /D "Installationsskripte" /f
REG ADD %KEY%\020 /V 2 /D "\\w2k3srv\init$\Init_XP.bat"
Für das automatisierte Umbenennen des Rechners habe ich dann so ziemlich die perfekte Lösung auf administrator.de gefunden:
@echo off
if exist "C:\init_pcname_done.txt" goto :nothing_to_do
set mac=none
for /f "tokens=2 delims=:" %%a in ('ipconfig /all ^| find "Physi"') do set mac=%%a
IF "%mac%" == "none" goto mac_name_fail
echo MAC Adresse: %mac%
set pc=none
for /f "tokens=2 delims= " %%b in ('type "\\w2k3srv\Init$\Mac.txt" ^|findstr "%mac%"') do set pc=%%b
IF "%pc%" == "none" goto pc_name_fail
echo PC Name: %pc%
REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f > nul
REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f > nul
REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f > nul
REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f > nul
echo %pc% > C:\init_pcname_done.txt
pause
goto end
:pc_name_fail
echo Kein gueltiger PC Name gefunden!
pause
exit
:mac_name_fail
echo Auslesen der Mac Adresse fehlgeschlagen!
pause
exit
:nothing_to_do
echo PC Name bereits gesetzt.
:end
Die Delphi und Office Installationen habe ich dann in die Serverskripte eingefügt, da die XP CD sonst zu groß geworden wäre. Nach einigen Stunden Google und Batch – wer zum Teufel hat sich diese “Sprache” ausgedacht? – hatte ich dann eine Windows XP CD, welche fast komplett unbeaufsichtigt das Betriebssystem einrichtet und die benötigten Programme installiert. Mit 4 Kopien dieser CD war das Neuinstallieren des gesamten Computerkabinetts dann letztendlich nur noch eine Frage der I/O Bandbreite.

