Inhaltsverzeichnis

Portable Thunderbird mit GPG, TOR und mehr

Download der aktuellen Version

(weitere Versionen)

Dieses Ein-Mann-Hobby-Projekt ist derzeit noch in Arbeit und wird ohne jede Gewähr oder Garantie bereitgestellt.

Da ab Version 78.x von Thunderbird die GPG-Funktionen integriert sind und die Integration von Enigmail und GPG wegfallen, und durch den Wegfall von TorBirdy auch weitere Ziele entfallen, ist dieses Projekt eingestellt. Diese Seite bleibt zu Dokumentationszwecken bis auf Weiteres erhalten.

Bei diesem Projekt handelt es sich um eine portable (also ohne Installation vom USB-Stick direkt ausführbare) Version von Mozilla Thunderbird inklusive OpenPGP-Verschlüsselung. Für die Verschlüsselung wurde die Erweiterung Enigmail integriert, die auf ein ebenfalls im Paket enthaltenes portables Gpg4win für die Verschlüsselungsfunktionen zurückgreift. TorBirdy (für die TOR-Integration) ist derzeit noch nicht enthalten, aber geplant. Der Aufbau dieser portablen Version (Verzeichnisstruktur etc.) wurde absichtlich kompatibel zum portablen Thunderbird von Cashy gehalten, um ggf. einen Umzug zu erleichtern.

Instruktionen zum Selberbauen

Obwohl das Paket, das oben zum Download bereitsteht, nach dem Entpacken direkt nutzbar ist, halte ich es für sinnvoll, den Bauprozess für das Paket und den Quellcode des Loaders hier festzuhalten.

Für das Projekt sollte ein eigener Ordner erstellt werden, in den der Loader gelegt wird. Zusätzlich gehören in dieses Verzeichnis folgende Unterverzeichnisse (der Inhalt wird im folgenden erläutert):

Downloads

Der Übersicht halber hier einmal alle notwendigen Downloads. Entsprechende Links sind aber auch noch einmal im Text wiederholt.

Thunderbird

Thunderbird findet man auf der Website von Mozilla zum Download, das deutsche Sprachpaket und die Kalender-Erweiterung Lightning sind bereits integriert.

Das Programm wird zuerst ganz normal auf die Festplatte installiert, allerdings nach Abschluss der Installation nicht gestartet. Der Inhalt des Ordners %programfiles(x86)%\Mozilla Thunderbird wird inklusive aller Unterordner in den Thunderbird-Ordner des portablen Programms kopiert. Alternativ scheint sich der heruntergeladene Installer mit einem Packprogram wie 7zip öffnen zu lassen, so daß man dort auf einen Ordner namens core stößt, der ebenfalls alle notwendigen Dateien und Unterverzeichnisse enthält.

Da das Programm nicht gestartet wird, wurde auch kein leeres Profil angelegt unter %appdata%\Thunderbird\Profiles angelegt. Der Profilordner wird später beim ersten Start der portablen Applikation befüllt.

Gpg4win

Die aktuelle Version von Gpg4win gibt es auf der Homepage des Gpg4win-Projektes. Die kleinste Version („Vanilla“) sollte reichen, um Thunderbird und Enigmail lauffähig zu bekommen, die größeren Versionen bieten zusätzliche Tools. Ich selbst habe die Komplettversion benutzt.

Das Programm muss ebenfalls zuerst lokal installiert werden. Im Programmverzeichnis %programfiles(x86)%\GNU\GnuPG\bin befindet sich eine mkportable.exe, mit deren Hilfe man eine portable Version erstellen kann. Der entsprechende Aufruf lautet mkportable <zielverzeichnis>, bzw mkportable --full <zielverzeichnis>, wenn man eine Vollinstallation vornehmen will. Der Inhalt des von mkportable erstellten Verzeichnisses wandert in den GnuPG-Ordner des portablen Thunderbirds.

In der mkportable-Version von Gpg4win 2.3.3 war ein Bug, der bewirkte, daß das Programm sich über zwei fehlende DLL-Dateien beschwert (libgcc_s_sjlj-1.dll und libstdc++-6.dll). Diese sind zwar vorhanden, aber liegen nicht in dem Unterverzeichnis pub, unter dem mkportable sucht. Um das Problem zu beheben, reicht es, sie in dieses Verzeichnis zu kopieren, danack läuft mkoprtable fehlerfrei durch.1)

Loader

Beim Loader handelt es sich um ein kompiliertes AutoIt-Script. Ein fertig kompilierter Loader inklusive leerer Ordnerstruktur kann hier heruntergeladen werden. Eine Batch-Datei hätte es wohl auch getan, aber als kompilierte EXE sieht's cooler aus. Sei's drum, hier der Quelltext:

ThunderbirdGPGLoader.au3
#NoTrayIcon
 
#Region AutoIt3Wrapper Directives
#AutoIt3Wrapper_Icon=.\Thunderbird\chrome\icons\default\messengerWindow.ico
#AutoIt3Wrapper_Outfile=ThunderbirdGPGLoader.exe
#AutoIt3Wrapper_Res_Description=Loader for Portable Thunderbird with Enigmail and GnuPG
#AutoIt3Wrapper_Res_Fileversion=0.3.1
#AutoIt3Wrapper_Res_ProductVersion=0.3.1
#EndRegion AutoIt3Wrapper Directives
 
#Region Includes
#include <WinAPIProc.au3>
#EndRegion
 
$params = IniRead( "ThunderbirdGPGLoader.ini", "Thunderbird", "parameters", "" )
If $cmdline[0] Then $params = $params & " " & $cmdline[1]
$tb_path = @ScriptDir & "\" & IniRead( "ThunderbirdGPGLoader.ini", "Thunderbird", "exe_directory", "Thunderbird" )
$tb_profile = IniRead( "ThunderbirdGPGLoader.ini", "Thunderbird", "profile_directory", "Profilordner" )
$tb_cmdline = $tb_path & "\thunderbird.exe -profile " & $tb_profile & " " & $params
$gpg_path = @ScriptDir & "\" & IniRead( "ThunderbirdGPGLoader.ini", "GnuPG", "exe_directory", "GnuPG\bin" )
$pep_path = @ScriptDir & "\" & IniRead( "ThunderbirdGPGLoader.ini", "pEp", "exe_directory", "pEp\bin" )
$path = EnvGet("path")
EnvSet("path", $gpg_path & ";" & $pep_path & ";" & $path)
If ProcessExists("thunderbird.exe") Then
   $a_process_list = ProcessList("thunderbird.exe")
   For $i = 1 To $a_process_list[0][0]
	  $current_process = StringLower(_WinAPI_GetProcessFileName($a_process_list[$i][1]))
	  If $current_process <> StringLower($tb_path & "\thunderbird.exe") Then
		 $tb_cmdline = $tb_path & "\thunderbird.exe -no-remote -profile " & $tb_profile & " " & $params
	  EndIf
   Next
EndIf
Run($tb_cmdline)
ProcessWaitClose("thunderbird.exe")
Sleep(1000)
If ProcessExists("gpg.exe") Then
   $a_process_list = ProcessList("gpg.exe")
   For $i = 1 To $a_process_list[0][0]
	  $current_process = StringLower(_WinAPI_GetProcessFileName($a_process_list[$i][1]))
	  If $current_process = StringLower($gpg_path & "\gpg.exe") Then
		 ProcessClose($a_process_list[$i][1])
	  EndIf
   Next
EndIf
If ProcessExists("pep-json-server.exe") Then
   $a_process_list = ProcessList("pep-json-server.exe")
   For $i = 1 To $a_process_list[0][0]
	  $current_process = StringLower(_WinAPI_GetProcessFileName($a_process_list[$i][1]))
	  If $current_process = StringLower($pep_path & "\pep-json-server.exe") Then
		 ProcessClose($a_process_list[$i][1])
	  EndIf
   Next
EndIf
ThunderbirdGPGLoader.ini
[Thunderbird]
; Relative path to the installation directory of Thunderbird, default is "Thunderbird".
exe_directory=Thunderbird
; Relative path to the profile folder of Thunderbird, default is "Profilordner".
profile_directory=Profilordner
; command-line parameters for Thunderbird.
parameters=
[GnuPG]
; Relative path to the binaries directory of GnuPG (where gpg.exe is located), default is "GnuPG\bin".
; For older versions, this used to be "GnuPG\pub".
exe_directory=GnuPG\bin
[pEp]
; Relative path to the binaries directory of pEp (where pep-json-server.exe is located), default is "pEp\bin".
exe_directory=pEp\bin

Der Loader tut eigentlich nicht viel mehr, als der lokalen PATH-Variable von Windows den Pfad zum portablen GPG hinzuzufügen, damit Enigmail diese finden kann, und dann den Thunderbird zu starten. Der Pfad zum portablen GPG wird dabei an den Anfang der PATH-Variable angefügt, damit nicht aus Versehen eine lokale Version von GPG verwandt wird. Ebenso erfolgt der Start von Thunderbird mit dem Parameter -profile Profilordner, um den Profilordner der portablen Version anzusprechen und nicht ein lokal auf dem Rechner installiertes Profil einzubinden. Außerdem erfolgt eine Prüfung, ob bereits eine (nicht portable) Instanz von Thunderbird auf dem Rechner gestartet wurde. In diesem Fall wird Thunderbird mit der Option -no-remote geladen2). Der Loader liest außerdem Kommandozeilenparameter aus, die ihm übergeben wurden und gibt diese ggf. an Thunderbird weiter. Nachdem die thunderbird.exe beendet wurde, überprüft der Loader nach kurzer Wartezeit, ob noch abhängige Prozesse (gpg.exe und pep-json-server.exe) im Hintergrund laufen und beendet diese gegebenenfalls.

Falls der Loader kompiliert werden soll, kann als Icon das Thunderbird-Icon unter %programfiles(x86)%\Mozilla Thunderbird\chrome\icons\default\messengerWindow.ico genutzt werden.

Sobald die Ordner nach der obigen Anleitung befüllt sind und der Loader im Hauptverzeichnis liegt, kann der portable Thunderbird gestartet werden - lediglich Enigmail fehlt noch.

Enigmail

Enigmail kann man auf der AddOns-Seite von Mozilla herunterladen. Statt Thunderbird zu starten und die Erweiterung in das Profil zu installieren, übertragen wir sie stattdessen folgendermaßen in den Programm-Ordner: Die .xpi-Datei kommt in das Verzeichnis \Thunderbird\distribution\extensions\ und wird in {847b3a00-7ab1-11d4-8f02-006008948af5}.xpi umbenannt.3) Es ist nicht mehr (wie bei früheren Versionen) nötig, die Inhalte der XPI-Datei zu entpacken. Beim ersten Start der portablen Applikation wird Enigmail so automatisch in das Profil installiert, bleibt aber erhalten, falls der Profilordner mal geleert (oder ein anderes Profil angelegt) wird.

p≡p

Beim ersten Start würde Enigmail 2.x versuchen, Dateien für p≡p herunterzuladen und im Profil abzuspeichern. Das können wir bereits im Voraus erledigen, die entsprechenden Dateien finden sich im Downloadbereich der Enigmail-Homepage. Dort die ZIP-Datei mit der neuesten stabilen Version wählen und in den Ordner \pEp entpacken, damit sie vom Profil unabhängig sind.

ToDo

Versionen