Firefox/Thunderbird Deployment mit Einstellungen via AD GPO

Mozilla bietet für beide Produkte keine .msi und die Dokumentationen sind recht dürftig, eine Verteilung der Software habe ich daher lange vor mir hergeschoben. Es ist aber einfach und zusätzlich zur aktuellsten Version kann man auch gleich Standardeinstellungen für alle Benutzer verteilen.

Ich möchte direkt die Seite verlinken, die mir die wichtigsten Fakten für eine erfolgreiche Verteilung vermittelt hat: Techblog mockbox.net liefert im Artikel Install and Configure Firefox 8 silently die Batchgrundlage und Tipps kurz und knapp. Vielen Dank.

Zutaten:
– Firefox/Thunderbird Installer, „Firefox8.0.1.exe“
– Installer Batch, „firefox-installer.bat“
– Einstellungsdatei, „local-settings.js“
– Einstellungsdatei, „override.ini“
– Einstellungsdatei, „mozilla.cfg“
– Logdatei, „log.txt“
– optional: Clientfilter, „allowed.txt“
– optional: Clientfilter, „denied.txt“

Zubereitung:
Alle Zutaten in einen Ordner, der von allen Clients erreichbar ist (Netzlaufwerk)!

Nun die Batch Datei öffnen und wir schauen mal rein:

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo on
Color 9f
setlocal

REM *******************************************
REM  Title:   	Firefox Silent Installer
REM  Author:  	Hannes Schurig
REM  Created: 	08.12.2011
REM  Changed: 	14.12.2011
REM  Version: 	1.1
REM  Quelle:	http://mockbox.net/configmgr-sccm/174-install-and-configure-firefox-silently.html
REM *******************************************

REM _______________________________________________________________
REM WICHTIG! Hier die aktuelle zu verteilende Version eingeben.
REM Die Installerdatei muss so benannt sein: Firefox[Version].exe
set newversion=10.0.2
REM _______________________________________________________________

set wd=\\server\pfad\Firefox
set log=\\server\pfad\Firefox\log.txt
set instversion=0

REM Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
::for /f %%f in (%wd%\allowed.txt) do if "%computername%"=="%%f" goto install
::goto end

REM Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
for /f %%f in (%wd%\denied.txt) do if "%computername%"=="%%f" goto end

:install
title Firefox Installation wird überprüft...
echo Firefox Installation wird überprüft...

REM prüfe ob eine 32bit Version von Firefox Version schon installiert ist
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c
REM falls keine 32bit Version von Firefox gefunden wurde, prüfe 64bit
if "%instversion%"=="0" for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c

if %instversion% GEQ %newversion% echo %date% %time% - %computername% hat bereits diese oder eine neuere Version installiert. >> %log% & goto end

echo %date% %time% - %computername% startet die Firefox Installation...
echo %date% %time% - %computername% startet die Firefox Installation... >> %log%

title Firefox wird installiert...
echo Firefox wird installiert...

REM Format des Installers: Firefox[Version].exe - "Firefox10.0.2.exe"
"%wd%\Firefox%newversion%.exe" -ms

REM 32bit Einstellungsdateien kopieren
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%programfiles%\Mozilla Firefox\defaults\pref"


REM 64bit Einstellungsdateien kopieren
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%ProgramFiles(x86)%\Mozilla Firefox\defaults\pref"


REM Desktop Icon löschen - Windows XP - deaktiviert
::if exist "%allusersprofile%\Desktop\Mozilla Firefox.lnk" del "%allusersprofile%\Desktop\Mozilla Firefox.lnk" /S

REM Desktop Icon löschen - Windows 7 - deaktiviert
::if exist "C:\Users\Public\Desktop\Mozilla Firefox.lnk" del "C:\Users\Public\Desktop\Mozilla Firefox.lnk"

echo %date% %time% - %computername% hat die Installation abgeschlossen...
echo %date% %time% - %computername% hat die Installation abgeschlossen... >> %log%

:end
endlocal

Updates:

  1. 08.03. GEQ statt == Überprüfung der Versionen, Initialisierung der instversion mit 0 statt 999
  2. 27.03. 64bit Überprüfung ergänzt

Batch anpassen:
Zeile 17: die gewünschte Version muss hier stehen, in der „korrekten“ Form, wie sie auch in der Registry zu finden ist (siehe Zeile 36)
Zeile 20+21: Pfade anpassen
Zeile 24-29: Clientfilter, ggf. entfernen wenn nicht gewünscht
Zeile 62+65: Löschen des Desktop Icons ist deaktiviert (Icon bleibt also), ggf. die Kommentarzeichen entfernen

Die mozilla.cfg enthält gewünschte Einstellungen, die auf der about:config Seite von Firefox zu finden sind. Beispiel:

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

//Firefox Default Settings
// Startseite
pref("browser.startup.homepage","http://www.iqb.hu-berlin.de");

// Standard Browser Check deaktivieren
pref("browser.shell.checkDefaultBrowser", false);

// Update Check deaktivieren
pref("app.update.enabled", false);

// stops the 'know your rights' button from displaying on first run
pref("browser.rights.3.shown", true);

// stops the request to send performance data from displaying
pref("toolkit.telemetry.prompted", true); 

// Disable blinking text:
pref("browser.blink_allowed", false);

// Disable JS windows popping up without direct action from the user
// (as lots of porn and spam sites do):
pref("dom.disable_open_during_load", true);

// Syntax highlighting in View Source.
pref("view_source.syntax_highlight", true);

Die override.ini und die local-settings.js müsst ihr nicht anpassen. Ihr könntet die mozilla.cfg umbenennen und das in der local-settings.js anpassen aber naja, wozu? 😉

Genug angepasst, das sollte reichen!

Funktionsweise:
Per Clientfilter kann man steuern, welche Computer die Installation übernehmen sollen. Einer der beiden Clientfilter kann aktiv sein. Der 2. Clientfilter blockiert genannte PCs; ist die denied.txt also leer werden alle PCs bedient. Das ist vermutlich gewünscht.
Ist die Installation für den PC erlaubt prüft der Installer zuerst, welche Firefox Version installiert ist. Dies wird aus der Registry ausgelesen. Ist nicht die gewünschte Version (Zeile 17) installiert geht es weiter zur eigentlichen Installation.
Mit dem -ms Parameter wird Firefox ohne Oberfläche silent mit Standardparametern installiert. Es ist auch möglich die Installation mit einer .ini Datei anzupassen.
Danach werden die 3 Einstellungsdateien kopiert und ggf. das Desktop Icon gelöscht.
Alle Einstellungen der mozilla.cfg werden bei jedem Firefox Start gesetzt und sind damit erzwungen solange die .cfg Datei im Verzeichnis bleibt.

Batch in die Startscripts der Gruppenrichtlinie und fertig!

20 Kommentare

  1. Entferne einfach Zeile 35-37 und dann wird die Clientversion nicht überprüft.
    Das heißt natürlich, dass Firefox/Thunderbird IMMER beim Rechnerstart (wenn die Batch ein Startscript ist) installiert wird. Das ist höchst performancelastig und unnötig für Netzwerk und PC.

  2. Ich sehe ja das das für Firefox einfach übernommen werden kann, aber bei Thunderbird müßte man wohl so einige Einträge ändern.

    Und wenn ich die Override.ini richtig interpretiere dann werden keine Profile migriert, ich glaube für den Updatefall ist das nicht optimal, die User würden mich wohl steinigen.
    Könnte man zumindest darauf hinweisen.

    Trotzdem tolle Sache, auch wenn das im FF Fall durch verfügbare .msi auch normal per GPO geht, für Thunderbird hätte ich aber Lust das mal zu adaptieren, wurde das für TB auch tatsächlich genutzt ?

  3. Ich verwende die Thunderbird Verteilung im Unternehmen seit ich den Beitrag hier geschrieben habe, bisher lebe ich noch 😉
    Ich würde also sagen die Profile bleiben bestehen.
    Wobei du mich glatt nervös gemacht hast mit der Aussage. Aber ich hatte es vorher natürlich u.A. an meinem eigenen PC getestet und alles funktioniert weiterhin.

  4. Ich betrachte es mal als Ehre einen Profi nervös gemacht zu haben :-)).
    Mein Test von TB9>10 ergab auch das die Konten überleben:-)
    Ich hab das jetzt auch mal für Thunderbird ESR umgemodelt, allerdings etwas vereinfacht. Die Installation läuft auf XP und W7 32bit korrekt durch, der Versionscheck in der Reg muss aber völlig woanders hinzeigen, und geloggt wird irgendwie gar nichts. Sollte mal Zeit sein würde ich mich da gerne mal per mail austauschen.
    byPö

  5. Den Umstieg auf ESR werde ich auch noch vollziehen, oder zumindest überdenken. Bin mir unsicher ob das tatsächlich so viel bringt in der 10er Sparte zu bleiben und dabei größere Neuigkeiten der höheren Versionen zu verpassen.

    BTW, Code Zeile 37 angepasst. Statt instversion == newversion gibts jetzt instversion LSS newversion. Vorher wurden auch neuere Versionen ersetzt (ein Deployment der 10er Version hätte auch die 11er und 12er ersetzt), jetzt werden nur noch kleinere Versionen überinstalliert.

    Update: Moment, jetzt hab ich mich verhaspelt. Also instversion == newversion ist tatsächlich Mist weil sowohl ältere als auch neuere Versionen überschrieben werden.
    instversion GEQ newversion ist korrekt, habe es oben korrigiert.
    GEQ, also „greater or equal“, besagt, dass die Installation abgebrochen werden soll, wenn die installierte Version größer oder gleich der zu installierenden Version ist.

    So, jetzt aber 🙂

  6. Pingback: Anonymous
  7. Danke für die Hilfe, aber was ist wenn bisher gar kein FF installiert ist?

    Ich rufe am Anfang Deines Skripts ein eigenes auf, das mir erstmal den ganzen MSI-Kram deinstalliert. Danach läuft Dein Skript und dann meckert er natürlich, weil er keine Version findet.

    Habe dazu noch folgende Änderungen bei mir hinzugefügt:

    if "%instversion%"=="" goto setup
    
    if %instversion% GEQ %newversion% echo %date% %time% - %computername% hat bereits diese oder eine neuere Version installiert. >> %log% & goto end
     
    :setup
    echo %date% %time% - %computername% startet die Firefox Installation...

    HTH!

  8. Ich misch mich mal ein….

    wenn er nichts findet, dann ist %instversion% auf jeden Fall ungleich %newversion% ( bei ==) Bei GEQ ist es weiterhin kleiner %newversion% wenn man anfangs mit instversion=0 initialisiert.

    Solange das Script nicht abbricht ist es doch egal das er den Pfad nicht findet.

    Bei mir installiert das Script auch nackige Clients 🙂

    Ich lasse mir im Log vor der Installation die aktuelle Version hinschreiben.
    Wenn da plötzlich 99999 steht ( meine Initialisierung..) und es ist kein neuer Rechner, dann weiß ich das es Probleme mit dem RegPfad gibt und er die Version nicht korrekt lesen konnte. So gestern bei den x64 Clients geschehen… 🙂

  9. Hallo Thorsten,
    Pö hat völlig Recht, durch die Initialisierung von instversion durch 0 wird Firefox auch installiert wenn der Regpfad nicht gefunden wurde, instversion ist ja 0 und somit kleiner als newversion, was die Bedingung für eine Installation ist.

    @Pö: Hast du die aktuellste Version des Scripts? Die Version oben im Artikel (seit 27.03. online) unterstützt auch 64bit Rechner.

  10. Guten Morgen,

    bei mir hat er sich halt den leeren String geholt und irgendeine Fehlermeldung geschmissen. Genauer habe ich da nicht nach geschaut. Eher quick’n’dirty an meine Situation hier angepasst. Vermutlich irgendwelcher Registrymüll. 😉

    Ist aber alles gut gelaufen. Hier läuft jetzt auf 40 Rechnern 10.0.3esr.

    Danke nochmal!

    Gruß Thorsten

  11. Ich kann Frontmotion Firefox auch echt nicht empfehlen!
    Wir hatten damals Umstieg von Frontmotion Firefox Version 2 auf 3 (damals setzten wir das im Unternehmen ein) erhebliche Probleme und mussten jede Frontmotion Installation manuell korrigieren; es war die Hölle.
    Seit dem verwenden wir das Community Projekt nicht mehr, es schaffte einige Probleme (langsamere Updatezyklen, schlechter Support/Dokumentation, vermutlich mehr Fehler oder Lücken usw).
    Also Frontmotion würde ich mir gut überlegen 😉

  12. Ich verwende Frontmotion Firefox in der normalen, einfachen msi Version und verteile normal über GPO. So seit Version FM FF 9.0. Alles problemlos. Keinerlei Auffälligkeiten. Nachteil: Die Versionen hinken immer ein paar Wochen hinterher. Dafür simpel und Idiotensicher anzuwenden.

    Die Verteilung von Mozilla Produkten nach hiesigem Script ist aber wenn es mal läuft noch einfacher bei der Aktualisierung ( Versionsnummer ändern und fertig)und hat den Charme das man Konfigurationen mitschicken kann UND per Log Installationsfeedback bekommt. Das ist nicht unwichtig! Werde wohl FF beim nächsten FF-ESR Majorrelease auch auf Script umstellen.

    Übrigens: msis selber machen geht ja auch:
    http://www.klaus-hartnegg.de/gpo/msi_firefox.html

    byPö

  13. Auch das Erstellen eigener MSIs mit Tools habe ich hier und dort ausprobiert und es lief sehr bescheiden. Für großflächige Verteilungen in Produktivumgebungen würde ich das nicht empfehlen.
    Wenn die .exe entpackt eine .msi enthält kann man diese natürlich verwenden.
    Aber dieses Record-to-msi Prozedere (Systemabbild, Installation der .exe durchführen, noch ein Abbild, MSI daraus erstellen) ist einfach viel zu fehleranfällig.

    Der Umstieg auf das Script hat schon seine Vorteile.
    Die nächste FF ESR kommt erst Nov/Dez 2012, überleg dir, ob du bis dahin warten willst 😉
    PS: http://www.netzwelt.de/news/90620-mozilla-firefox-10-esr-version-bricht-rapid-release-zyklus.html

  14. Hallo, bei mir stand ein Update von 10.0.9 auf 10.0.10 an. Das hatte nicht funktioniert, da „if %instversion% GEQ %newversion%“ die „10.0.9“ als größeren Wert betrachtet. Ich behelfe mir nun damit, dass wenn auf einem Rechner noch die 10.0.9er Version läuft, der Wert „instversion“ auf Null zurückgesetzt wird. Dann sollte es laufen.

  15. Hallo Christian,

    ja, der Versionsvergleich war bei dieser Version der Verteilung noch verbesserungswürdig. Ich habe wenig später eine neue Art und Weise der Versionskontrolle via Batch erklärt:
    http://hannes-schurig.de/18/09/2012/batch-2-versionsnummern-vergleichen/

    Mittlerweile nutze ich dafür aber ein richtiges Programm (VB), dass 2 Versionsnummern zuverlässig vergleicht.
    Ich kann das Programm gerne per Mail schicken, wenn du willst.

    Liebe Grüße

Schreibe einen Kommentar