m4_dnl -*-html-*- m4_include(`template.m4') m4_dnl $Id$ m4_define(`DE') m4_define(`EN_FILE', `build-installer-on-vm.html') PAGE_START
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.
Zurück zur Übersicht zum Installer-Bau
Einleitung
I - Installation von Debian GNU/Linux 'Etch' 4.0 in einer virtuellen Umgebung
I-1 - Installation von QEMU
I-2 - Installation von PuTTY
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 - Bau der Gpg4win-Installations-Pakete
II-4 - Extraktion der fertigen Installationspakete
Referenzen (URLs)
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:
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.
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).
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.
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 [8] und das Business-Image unter [9] 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.
Im Start->Ausführen...-Dialog "cmd" eingeben und bestätigen. In der CMD-Shell folgendes eingeben:
cd /d <Arbeitsverzeichnis> 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
In der offenen CMD-Shell folgendes eingeben:
qemu-img create -f qcow2 install.img 2500M
Dies legt eine virtuelle Festplatten-Datei der Maximalgröße 2500MB an. Die Datei wird erst bei Bedarf Schritt für Schritt vergrößert.
In der offenen CMD-Shell folgendes in einer Zeile eingeben
qemu -k de -m 256 -boot c -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.
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.
In der offenen CMD-Shell bitte in einer Zeile folgendes eingeben:
qemu -redir tcp:5555::22 -m 256 -boot c -L %QEMU%\pc-bios -hda install.img -kernel-kqemu
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.
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.
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 svn co https://svn.wald.intevation.org/svn/gpg4win/trunk cd trunk/packages sh download.sh cd .. ./autogen.sh ./autogen.sh --build-32 --enable-maintainer-mode make
Nach dem dies erfolgreich durchgelaufen ist, stehen unter trunk/src die fertigen Installationspakete zur Verfügung.
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.