Bau von Gpg4win unter Windows
via eines virtualisiertem GNU/Linux
Warnung: Die Anweisungen auf dieser Seite sind nicht mehr aktuell und könnten nicht mehr funktionieren. Im GnuPG Wiki finden sich aktuellere Bauanleitungen.
Dieses Beispiel beschreibt konkret die Herstellung eines neuen Gpg4win Installers auf Windows XP/SP2 via Debian 'Etch' 4.0 in QEMU. Grundsätzlich können für alle drei Komponenten auch Alternativen verwendet werden.
Tipps: Bauen unter GNU/Linux etwas detaillierter beschrieben und Installation von Debian GNU/Linux 'Etch' 4.0 innerhalb einer virtuellen QEMU-Maschine als Screenshot-Serie illustriert.
Inhalt
Einleitung
I - Installation von Debian GNU/Linux 'Etch' 4.0 in einer virtuellen Umgebung
I-1 - Installation von QEMU
I-2a - Installation von PuTTY
I-2b - Installation von ext2fsd und FileDisk
I-3 - Bezug eines Debian 'Etch' Boot-Mediums
I-4 - Öffnen einer CMD-Shell
I-5 - Erzeugen eines Festplatten-Images
I-6 - Starten der Etch-Installation
I-7 - Abschluss der Etch-Installation
II - Bauen von Gpg4win
II-1 - Starten der virtuellen Maschine
II-2 - Installation der für den Bau von Gpg4win wichtigen Pakete
II-3 - Einrichten der Build-Partition
II-4 - Bau der Gpg4win-Installations-Pakete
II-5 - Extraktion der fertigen Installationspakete
Referenzen (URLs)
Einleitung
Der Bauprozess von Gpg4win ist auf eine Cross-Kompilierung unter GNU/Linux ausgerichtet. Die Schaffung einer geeigneten Bauumgebung unter Windows oder u. U. auch anderen Systemen ist zwar prinzipiell möglich, erfordert aber umfassende Anpassungsarbeiten an den in Gpg4win integrierten Modulen. Wesentlich einfacher ist die Installation eines virtualisierten GNU/Linux Systems innerhalb von Windows, in dem der Bauprozess dann durchgeführt werden kann.
In dieser Anleitung wird beschrieben, wie mit Freier Software ein derartiges virtuelles GNU/Linux aufgesetzt und zur Erzeugung der Installationspakete genutzt werden kann. Als virtuelle Maschine kommt das unter GNU GPL stehende QEMU 0.9.0 [1] zum Einsatz. Als GNU/Linux-Distribution wird Debian 'Etch' 4.0 [2] benutzt.
Die Anleitung gliedert sich in zwei Teile:
- Der erste Teil beschreibt, wie man unter Windows die Virtualisierungssoftware QEMU installiert, eine virtuelle Festplatte erzeugt und auf dieser ein minimales Debian 'Etch' installiert.
- Im zweiten Teil wird erläutert, wie der eigentliche Bauprozess innerhalb der virtuellen Maschine ablaufen sollte. Dieser entspricht dem bereits dokumentierten Bauprozess unter GNU/Linux, wird aber der Vollständigkeit halber hier noch einmal aufgeführt.
I - Installation von Debian GNU/Linux 'Etch' 4.0 in einer virtuellen Umgebung
Resultat dieses Abschnittes wird eine Datei sein, die ein Festplatten-Image eines rudimentären Debian 'Etch' für Ihre Virtualisierungssoftware (Virtual Machine Monitor) enthalten wird. Die finale Image-Datei wird ungefähr 250MB groß sein. Insgesamt sollte für diese Phase der Installation mindestens 1,5GB freien Festplattenplatz auf dem Host-System zur Verfügung stehen.
I-1 - Installation von QEMU
QEMU ist eigentlich ein Hardware-Emulator. Mit anderen Worten, er interpretiert den Maschinen-Code des simulierten Gast-Systems und führt ihn auf dem Host-System aus. Dies würde es u.a. auch ermöglichen, den Bau von Gpg4win-Paketen auf einen PPC-System unter Mac OS X-Host durchzuführen. Für den Fall einer Installation unter MS Windows auf einer x86-Architektur empfiehlt es sich, neben dem eigentlichen Emulator noch die Virtualisierungskomponente QEMU Accelerator (KQEMU) zu installieren. Sie sorgt für eine direkte Ausführung des Maschinen-Codes des Gasts- auf dem Host-System, was die Auführung enorm beschleunigt, sofern das Gast-System ebenfalls eine x86-Architektur aufweisst.
Auf der "QEMU for Windows" [3] Seite finden sich fertige Installations-Binaries für QEMU [4] und KQEMU [5]. Nach dem Herunterladen müssen die beiden Binaries einfach ausgeführt werden, um sie zu installieren. Bitte merken Sie sich den Pfad zur QEMU-Installation (z.B. also: C:\Programme\QEMU).
I-2a - Installation von PuTTY
Um Daten zwischen Host- und Gast-System austauschen zu können, existieren mehrere Möglichkeiten. In dieser Anleitung wird vorgeschlagen, auf dem Gast-System einen OpenSSH-Server zu installieren. Um mit diesem kommunizieren zu können, wird eine entsprechende Client-Software benötigt. PuTTY [6] ist hierfür gut geeignet. Ein Windows-Installer findet sich unter [7]. Auch hier wird die Installation durch das Ausführen der Datei gestartet. Es ist empfehlenswert, nach der Installation die PATH-Variable um den Pfad hin zur Putty-Installation zu erweitern. Später wird von den Programmen putty.exe und pscp.exe Gebrauch gemacht.
I-2b - Installation von ext2fsd und FileDisk
Dieser Schritt ist nur Notwendig wenn ein MSI Installer erstellt werden soll.
Für das Erstellen des MSI Installers wird Zugriff durch ein Windows-System auf den vollständigen gpg4win Quelltext-Dateibaum benötigt. Da dieser sehr umfangreich ist empfiehlt diese Anleitung nicht ihn vollständig per SSH zu kopieren. Stattdessen wird die virtuelle Festplatte auf der gpg4win gebaut wurde direkt unter Windows gemountet. Um das ext3 Dateisystem lesen zu können wird ext2fsd[8] benötigt, und um die virtuelle Platte zu mounten eignet sich FileDisk[9].
Um ext2fsd zu installieren muss lediglich das heruntergeladene Binary ausgeführt werden. Für das Erstellen des MSI Installers wird keine Schreibunterstützung auf der ext3 Partition benötigt, dieser kann bei der Installation von ext2fsd also deaktiviert bleiben.
FileDisk kommt ohne Installer und muss manuell installiert werden:
Nach dem entpacken des ZIP-Archives wird der
Treiber filedisk.sys
nach %systemroot%\system32\drivers\
und das Programm filedisk.exe
z.B. nach
%systemroot%\system32\
kopiert. Abschließend muss noch
die Datei filedisk.reg
in die Regsitry importiert werden
(z.B. durch Doppelklick).
I-3 - Bezug eines Debian 'Etch' Boot-Mediums
Für das Herunterladen der für den Bau von Gpg4win notwendigen Pakete wird ohnehin eine schnelle Internet-Verbindung vorausgesetzt. Von daher reicht es aus, sich das minimale x86-Netz-Installations-Image debian-40r0-i386-netinst.iso (159MB) oder gar das kleinere Business-Card-Image debian-40r0-i386-businesscard.iso (32MB) zu besorgen und den Rest des Debian-Systems bei der Installation aus dem Netz nachzuladen. Das Net-Image ist unter [10] und das Business-Image unter [11] oder alternativ über die entsprechenden Debian-Mirrors zu finden.
Es ist nicht nötig, diese Images auf eine CD zu brennen, da QEMU auch direkt von ihnen booten kann.
I-4 - Öffnen einer CMD-Shell
Im Start->Ausführen...-Dialog "cmd" eingeben und bestätigen. In der CMD-Shell folgendes eingeben:
cd /d <Arbeitsverzeichnis> set QEMU=C:\Programme\Qemu set PATH=%QEMU%;%PATH%
Wobei <Arbeitsverzeichnis> das Verzeichnis sein sollte, in dem das Festplatten-Abbild erstellt werden soll. Z.B. C:\temp
I-5 - Erzeugen eines Festplatten-Images
In der offenen CMD-Shell folgendes eingeben:
qemu-img create -f qcow2 install.img 1500M qemu-img create -f raw build.img 2000M
Dies legt zwei virtuelle Festplatten-Dateien an. Eine der Maximalgröße 1500MB für das GNU/Linux System, die Datei wird erst bei Bedarf Schritt für Schritt vergrößert. Und eine weitere von der Größe 2000MB auf der gpg4win gebaut wird. Das zweite Image wird in einem simplen "rohen" Format erzeugt, welches bei Bedarf mit FileDisk unter Windows eingebunden werden kann.
I-6 - Starten der Etch-Installation
In der offenen CMD-Shell folgendes in einer Zeile eingeben
qemu -k de -m 256 -boot d -L %QEMU%\pc-bios -hda install.img -cdrom debian-40r0-i386-businesscard.iso -kernel-kqemu
Dies startet einen virtuellen PC mit 256MB, der vom Netz-Installations-Image bootet und die eben erzeugte virtuelle Festplatte zugewiesen bekommt. Der Pfad zum Boot-Image sollte natürlich angepasst werden. Die "-k de"-Option wählt das deutsche Tastatur-Layout. Die "-kernel-kqemu"-Option aktiviert die vollständige Virtualisierung des emulierten System, was die Performanz drastisch erhöht. Wenn man während des Bootens Meldungen der Form "hda: lost interrupt" bekommt, sollte man zusätzlich die Option "-no-acpi" in obigem Aufruf ergänzen. Sollte es darüber hinaus unerwarteter Weise zu Problemen mit der virtuellen Maschine kommen, sollte die Flagge "-kernel-kqemu" entfernt werden. Details hierzu finden sich in der Dokumentation zu QEMU.
Es sollte nun in einem sich neu öffnenden Fenster der Boot-Prompt der Debian-Installation zu sehen sein. Diese kann durch Betätigen der Return-Taste gestartet werden. Die Installation sollte minimal gehalten werden. Nach Wahl der Sprache sollte die komplette virtuelle Festplatte für die Installation benutzt werden. Eine ext3-Partion+Swap reichen für unsere Zwecke völlig aus. Die Standard-Netzwerk-Konfiguration reicht ebenfalls aus.
Neben dem root-Nutzer sollte ein Benutzerkonto "gpg4win" angelegt werden. Über dieses Benutzerkonto wird der eigentlich Bauprozess abgewickelt.
I-7 - Abschluss der Etch-Installation
Es sollte die aktuellen Sicherheits-Updates mit 'apt-get update && apt-get upgrade' eingespielt werden.
Optional für das Erstellen eines wiederverwendbaren Images: 'apt-get clean; apt-get auto-clean' zum Löschen gecachter Downloads aufrufen.
Das Gast-System kann jetzt mit 'shutdown -h now' heruntergefahren werden.
Will man ein wiederverwendbares Basis-Image erzeugen, bietet es sich an, das Image zu bereinigen und transparent zu komprimieren. Der Zeitpunkt (damit ist der Umfang des Images gemeint) zu dem Sie ein Basis-Image erzeugen wollen, müssen Sie, abhängig davon ob Sie Gpg4win dauerhaft oder nur zum ausprobieren auf Windows bauen, selbst bestimmen. Dies kann auf der CMD-Shell mit folgenden Befehlen durchgeführt werden.
qemu-img convert -f qcov2 install.img -O qcow2 -c temp.img copy temp.img install.img
Eine Kopie dieses Images sollte man verwahren und regelmäßig mit Sicherheits-Updates versorgen.
II - Bauen von Gpg4win
II-1 - Starten der virtuellen Maschine
In der offenen CMD-Shell bitte in einer Zeile folgendes eingeben:
qemu -redir tcp:5555::22 -m 256 -L %QEMU%\pc-bios -hdb build.img -kernel-kqemu install.img
Die "-redir"-Option sorgt dafür, dass TCP-Anfragen an den Host-Port 5555 an den Gast-Port 22 (SSH) weitergeleitet werden. Die Firewall von Windows-XP wird ggf. fragen, ob der Port 5555 geblockt werden soll. Dies kann man bestätigen, wenn man nur vom eigenen Rechner aus auf die virtuelle Maschine zugreifen möchte. Andernfalls sollte man die Anfragen durchlassen.
II-2 - Installation der für den Bau von Gpg4win wichtigen Pakete
Nach dem Booten sollte man als root-Benutzer folgendes nachinstallieren, bzw. mit 'apt-get update && apt-get upgrade' auf den neusten Stand bringen:
apt-get install \ subversion autoconf automake gettext \ mingw32 nsis stow unzip texinfo imagemagick \ libglib2.0-dev tetex-bin tetex-extra gs-common hyperlatex \ make bzip2 gcc openssh-server
Subversion (bzw. das Kommando "svn") gehört zum Quelltext-Management-System mit dem Gpg4win verwaltet wird. Es wird nur benötigt, wenn man Gpg4win direkt aus dem SVN Qelltext-Management-System heraus bauen will. Verwendet man stattdessen die Archivdateien (Endung .tar.gz oder .tar.bz2) einer veröffentlichten Version, so kann man auf Subversion verzichten.
Der OpenSSH-Server erleichtert die Kommunikation mit der virtuellen Maschine. Zum einen kann man sich nach der Installation mit PuTTY in den Rechner einwählen und zum anderen mit pscp Dateien aus dem System heraus und hinein kopieren. Ersteres stellt eine erhebliche Bedienungs-Verbesserung (z.B. Copy & Paste) da, letzteres ermöglicht die Extraktion der fertigen Installationspakete.
Hat man den OpenSSH-Server im Gast und PuTTY auf dem Host-System installiert, kann man sich mit PuTTY in den Gast einloggen. Die Verbindungsdaten lauten Host: gpg4win@localhost, Port: 5555. Das Passwort im Fall des vorgefertigten Images lautet 'gpg4win'.
Um Probleme mit dem Locale (das sind die Einstellungen für die Unterstützung Ihrer Sprache und sonstiger sprach-spezifischer Einstellungen) zu vermeiden, ist es empfehlenswert, das de_DE-Locale (das ist die Unterstützung für deutsch wie in Deutschland verwendet) zu erzeugen. Hierzu als root-Nutzer bitte folgendes eingeben
dpkg-reconfigure locales
und das Häckchen zusätzlich bei de_DE setzen.
II-3 - Einrichten der Build-Partition
Vor dem eigentlichen Bauen von gpg4win muss noch die Build-Partition auf der zweiten virtuellen Festplatte eingerichtet werden. Dies ist die Partition, die für das erstellen des MSI Installers auch direkt unter Windows gemountet werden kann.
Als Benutzer root wird dazu die virtuelle Platte formatiert, gemountet und ein Ordner angelegt auf den der Benutzer 'gpg4win' Zugriff hat:
mkfs.ext3 /dev/hdb mkdir -m 0000 /mnt/build mount /dev/hdb /mnt/build mkdir /mnt/build/gpg4win chown gpg4win /mnt/build/gpg4win
Dabei ist es wichtig, dass das Dateisystem direkt auf der virtuellen Platte angelegt wird (ohne, dass vorher Partitionen definiert werden), da sonst dass spätere Einhängen unter Windows nicht funktioniert.
II-4 - Bau der Gpg4win-Installations-Pakete
Man logge sich als 'gpg4win' Nutzer ein und gebe auf der Linux-Shell folgendes ein, wenn man Gpg4win aus dem SVN bauen will:
export LANG=de_DE cd /mnt/build/gpg4win svn co https://svn.wald.intevation.org/svn/gpg4win/trunk cd trunk/packages sh download.sh cd .. ./autogen.sh ./configure --enable-maintainer-mode --host=i586-mingw32msvc make
Nach dem dies erfolgreich durchgelaufen ist, stehen unter trunk/src die fertigen Installationspakete zur Verfügung.
II-5 - Extraktion der fertigen Installationspakete
Auf dem Windows-Host-System in einer offenen CMD-Shell folgendes eingeben:
pscp -P 5555 gpg4win@localhost:trunk/src/gpg4win-*.exe .
Es wird vorausgesetzt, dass sich pscp.exe im PATH befindet. Nachdem der Transfer erfolgreich abgeschlossen wurde, kann das Gast-Linux-System heruntergefahren werden.
Referenzen (URLs)
[1] http://fabrice.bellard.free.fr/qemu/
[2] http://www.debian.org/
[3] http://www.h7.dion.ne.jp/~qemu-win/
[4] http://www.h6.dion.ne.jp/~kazuw/qemu-win/Qemu-0.9.0-install.exe
[5] http://www.h6.dion.ne.jp/~kazuw/qemu-win/Kqemu-1.3.0pre11-install.exe
[6] http://www.chiark.greenend.org.uk/~sgtatham/putty
[7] http://www.tartarus.org/~simon/putty-snapshots/x86/putty-installer.exe
[8] http://sourceforge.net/projects/ext2fsd
[9] http://www.acc.umu.se/~bosse/
[10] http://cdimage.debian.org/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-netinst.iso
[11] http://cdimage.debian.org/debian-cd/4.0_r0/i386/iso-cd/debian-40r0-i386-businesscard.iso