Wine Is Not an Emulator, WineBottler, Darwine, ReactOS, Arwinss
(Link zu dieser Seite als [[QEMU-KVM-Buch/ Anhang/ Nützliche Tools/ Wine]])
Inhaltsverzeichnis |
[bearbeiten] Wine, WineBottler
Website: http://www.winehq.org
Wine (Wine Is Not an Emulator) ist eine Windows-kompatible Laufzeitumgebung für POSIX-kompatible Betriebssysteme. Damit ist es möglich für Microsoft-Windows-Betriebssysteme kompilierte Programme unter BSD-Unix (*BSD, Solaris, Mac OS X) und Linux laufen zu lassen. Wine ist weder ein Emulator noch eine Virtualisierungslösung. Mit Wine wird das System um die entsprechenden Windows-APIs erweitert. Wine ist OpenSource (GNU LGPL) und benötigt keine Windows-Lizenz. Das Betriebssystem ReactOS (http://www.reactos.org) verwendet große Teile des Source Codes von Wine, da ReactOS kompatibel zur Microsoft Windows NT-Serie werden soll. Die Projekte Wine und ReactOS arbeiten eng zusammen. Eine kommerzielle Verwendung von Wine ist CrossOver Office der Firma Codeweavers.
Vereinfacht betrachtet besteht Wine aus zwei Komponenten: Zum einen wird ein Loader benötigt, der Windows-Executables (*.exe, *.dll, *.ocs, ...) lädt und dem Posix-System zur Ausführung übergibt. Dieser Zwischenschritt muss eingefügt werden, da das Portable Executable Format (Binärformat für ausführbare Dateien) von POSIX-Systemen nicht verarbeitet werden kann. Zum anderen ist eine Implementierung des Win32-API notwendig, die es ermöglicht Windows-Programme auszuführen.
Viele Implementierungen sind noch lückenhaft, da die entsprechenden Microsoft Windows-Funktionalitäten ungenügend dokumentiert sind. APIs, die aus einer Funktion mit leerem oder fast leerem Rumpf bestehen, nennt man Stub. Wird von einer Anwendung eine solche Funktion in Wine aufgerufen, so erscheint eine entsprechende Ausgabe. Die Unterstützung der Microsoft Windows-Versionen ist sehr unterschiedlich. Microsoft Windows 95 und 98 werden gut unterstützt. Die NT-Versionen sind problematisch.
Die Portierung von Wine für Mac OS X nennt man WineBottler (http://winebottler.kronenberg.org). Eine Dokumentation findet man unter der URL http://wiki.winehq.org/WineBottler. WineBottler hieß früher Darwine. Darwine unter der PowerPC-Architektur verwendet die Userspace-Emulation von QEMU.
[bearbeiten] Installation
Unter Linux ist es zu empfehlen, Wine als Paket zu installieren. In diesem Beispiel wird Wine unter Debian beziehungsweise Ubuntu installiert.
~$ sudo apt-get install wine
Zur Installation von WineBottler unter Mac OS X wird das Image (.dmg) heruntergeladen und eingebunden. Die Programmpakete Wine und WineBottler verschiebt man in den Ordner Programme (Applications). Gestartet wird WineBottler durch Klick auf das Icon WineBottler.
Unter FreeBSD wird Software in Ports und Packages angeboten. Ports enthalten den Source-Code der Software und werden beim Installieren kompiliert. Oft sind Ports aktueller als Packages. Zu Wine relevante Ports befinden sich im Verzeichnis /usr/ports/emulators/wine im Ports-Tree.
Host ~# cd /usr/ports/emulators/wine Host ~# make install clean
Es ist auch möglich Wine als Package zu installieren. Package sind bereits fertig kompilierte Software-Pakete.
Host ~# pkg_add -r wine
Die Installation von Wine unter dem FreeBSD-Derivat PC-BSD ist mit dem PBI-System (Push Button Installer) mit wenigen Mausklicks möglich. Es wird das PBI-Paket für Wine von der URL http://pbidir.com/bt/pbi/11 heruntergeladen und mit dem PBI-Launcher installiert. Erscheint die Fehlermeldung .PBItmp/.pbistart not found, hat man ein PBI-Paket für die falsche PC-BSD-Version heruntergeladen.
Software wird für NetBSD als Package Source (Pkgsrc) angeboten. Falls nicht geschehen muss das Package Source-System installiert werden. Hier wird vereinfacht der Download der Pakete des Current-Branches als tar-Archiv beschrieben. Das Pakage-System kann auch mit dem Software Update Protocol (SUP) oder mit Concurrent Versions System (CVS) heruntergeladen und aktuell gehalten werden.
Host ~# cd /usr Host ~# ftp ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc.tar.gz Host ~# tar xzvf pkgsrc.tar.gz
Es wird Wine installiert.
Host ~# cd /usr/pkgsrc/emulators/wine Host ~# make install clean
Eine Anleitung zum Kompilieren von Wine findet man unter der URL http://wiki.winehq.org/Recommended_Packages. Für Ubuntu vereinfachen Skripte das Kompilieren.
[bearbeiten] Konfiguration
Microsoft Windows-Programme setzen eine bestimmte Verzeichnisstruktur voraus. Diese wird meist in '$HOME/.wine abgebildet. Darin befindet sich die Registry und das Verzeichnis dosdevices mit den Unterverzeichnissen c:, d:, d:: und z:. Dies sind Links auf Verzeichnisse des Host-Systems. Weiterhin findet man das Verzeichnis drive_c/windows/, das dem Verzeichnis C:\Windows entspricht. Die Unterverzeichnisse drive_c/Programme/ und drive_c/Program Files verweisen auf die entsprechenden Verzeichnisse mit den installierten Programmen unter Microsoft Windows. Zur Konfiguration von Wine dient das grafische Konfigurationsprogramm winecfg. Neben allgemeinen Einstellungen werden damit die zu installierenden Windows-Applikationen konfiguriert.
~$ winecfg
Anpassungen der Registry sind mit dem Programm regedit möglich.
~$ regedit
Die Umgebungsvariable WINEPREFIX definiert das Hauptverzeichnis von Wine. Für Tests ist die Verwendung eines anderen Hautptverzeichnisses zu empfehlen. In dem folgenden Beispiel nutzt das Programm winecfg nicht die Registry unter $HOME/.wine, sondern unter $HOME/winetests:
WINEPREFIX=$HOME/winetests/ winecfg
Da noch nicht alle Windows-Funktionen in Wine implementiert wurden, können DLLs einer Windows-Installation in das Verzeichnis $HOME/.wine/drive_c/windows/system kopiert werden. Nach dem Kopieren von nativen DLLs sind diese mit dem Programm winecfg einzubinden. Für die Verwendung von nativen DLLs ist eine Lizenz einer entsprechende Microsoft Windows-Version notwendig. Werden native DLLs eingebunden, kann man keinen Support von den Wine-Entwicklern erwarten. Die WINEDLLOVERRIDES Variable konfiguriert den DLL-Loader. Es ist folgende Syntax zu verwenden:
WINEDLLOVERRIDES =“modul=n|b“
Für modul können alle Namen von DLLs, zum Beispiel ole32 oder vbrun6, eingesetzt werden. Sollen native DLLs verwendet werden, ist nach dem Gleichheitszeichen ein n einzusetzen. Wird nach dem Gleichheitszeichen ein b angegeben, werden die DLLs von Wine verwendet (builtin). Es ist möglich n und b gleichzeitig zu verwenden. Im folgenden Beispiel wird zuerst die native Version von ole32 gesucht. Wird diese nicht gefunden, wird nach der Wine-Version gesucht. Wird auch diese nicht gefunden, bricht Wine mit einer Fehlermeldung ab.
WINEDLLOVERRIDES=“ole32=n,b“ wine TEST.EXE
[bearbeiten] Das Skript winetricks
Wiki: http://wiki.winehq.org/winetricks
Mit dem Skript winetricks lassen sich wichtige DLLs und andere Module von Microsoft installieren. Dazu gehören die Runtime-DLLs für Visual-Basic-Programme, die Microsoft Core Fonts und der Windows Scripting Host. Winebottler enthält bereits das Skript winetricks. winetricks benötigt die Pakete cabextract und wget.
~$ sudo apt-get install cabextract wget
Das Skript ist herunterzuladen und ausführbar zu machen. Da das Skript häufig aktualisiert wird, ist es regelmäßig neu herunterzuladen.
~$ mkdir -p ~/bin ~$ cd ~/bin ~$ wget http://www.kegel.com/wine/winetricks ~$ chmod +x winetricks
Das Skript wird gestartet.
~$ ~/bin/winetricks
In dem Dialogfenster werden die angezeigten Zusatzpakete ausgewählt und installiert. Es ist auch möglich dem Skript das zu installierende Paket auf der Kommandozeile zu übergeben. Im folgenden Beispiel werden die Runtime-DLLs für mit Visual Basic 6 installiert.
~$ ./winetricks vb6run
Viele Windows-Programme benötigen die Gecko-Engine.
~$ winetricks gecko
True-Type-Fonts werden mit der Option corefonts installiert. Die Fonts werden unterhalb des Verzeichnisses $HOME/.wine/drive_c/windows/fonts gespeichert.
~$ ./winetricks corefonts
[bearbeiten] Microsoft Windows-Programme starten
Auf der Kommandozeile muss wine und das zu startenden Programm als Parameter übergeben werden. Die Wine-Shell wird mit dem Befehl wine cmd gestartet. Mit exit wird sie wieder verlassen.
~$ wine cmd C:\>exit
Das Programm Notepad startet man mit diesem Befehl.
~$ wine c:\\windows\\notepad.exe
Der doppelte Backslash ist notwendig, da ein Backslash sonst als Escape-Zeichen interpretiert wird. Man kann auch Unix-Pfadnamen verwenden.
~$ wine $HOME/.wine/drive_c/windows/notepad.exe
Parameter für Windows-Anwendung werden zwei Bindestriche (--) vorangestellt:
~$ wine program.exe -- [Parameter 1] [Parameter 2] ... [Parameter n]
Programme der DOS-Eingabeaufforderung wird wineconsole vorangestellt. Im folgenden Beispiel wird die in Wine enthaltene Shell gestartet.
~$ wineconsole cmd
In dieser Shell gestartete Programme werden mit der Tastenkombination [Strg]+[C] beendet. Alle unter Wine laufenden Programme werden mit wineserver -k beendet.
~$ wineserver -k
Brutaler ist die folgende Variante.
~$ sudo killall -9 wine-preloader
[bearbeiten] Microsoft Windows-Programme (de-)installieren
Installationsprogramme werden wie normale Windows-Programme gestartet.
~$ wine setup.exe
Zum Deinstallieren von Programmen dient das Programm uninstaller.
~$ wine uninstaller
Die Microsoft-Windows-Version von QEMU ist ohne KQEMU unter Wine lauffähig (siehe http://qemu-buch.de/d/QEMU_unter_Microsoft_Windows).
[bearbeiten] Debugging
Mit der Variable WINEDEBUG werden Debug-Channels konfiguriert. Diese helfen bei der Fehlersuche. Ein Debug-Channel zeigt Meldungen zu einem Teilsystem oder einem Modul an. Mögliche Channels sind zum Beispiel ole, winsock und file. Jeder Channel verfügt über vier Classes. Diese regeln welche Informationen in die Standardfehlerausgabe geschrieben werden sollen. Es gibt die Classes err, warn, fixme und trace. Es ist möglich mehrere Channels zu aktivieren. Eine Class muss nicht angegeben werden. Es werden dann alle Meldungen des entsprechenden Channels angezeigt. Es ist die Syntax [Class][+/-][Channel] einzuhalten. Weitere Informationen findet man unter der URL http://wiki.winehq.org/DebugChannels. Im folgenden Beispiel wird das Programm TEST.EXE gestartet und Meldungen aus dem Channel loaddll auf der Standardfehlerausgabe ausgegeben:
WINEDEBUG=loaddll wine TEST.EXE
Ein Debugging-Tool ist das Perl-Skript winestart (http://freshmeat.net/projects/winestart/). Als Parameter wird diesem Skript das zu untersuchende Windows-Programm übergeben. Weiterhin werden Debugging-Optionen vorgegeben. Das Skript gibt einen Header mit Umgebungsvariablen und Informationen aus. Die Optionen des Skript listet die Option --help auf.
~$ ./winestart.pl --help
Im folgenden Beispiel ruft das Skript das Windows-Programm TEST.EXE auf. Dabei werden Debug-Informationen in eine Datei unter $HOME/.wine/ drive_c/ geschrieben (--to-file). Das Skript winestart verwendet das Namensschema Programmname --Wine-Versionsnummer--Datum--Zeit.txt. Die Debug-Informationen werden auch auf der Standardausgabe angezeigt (--double-out). Die Variablen WINEDEBUG und WINEDLLOVERRIDES werden definiert.
~$ ./winestart.pl --program=TEST.EXE --to-file --double-out \ --winedebug="loaddll" --winedlloverrides="ole32=n,b"
[bearbeiten] Die Bibliothek WINELIB
Die Bibliothek Winelib enthält alle von Wine nachimplementierten APIs aus Windows und stellt diese als Unix-Systembibliothek zur Verfügung. Weiterhin enthält Winelib Entwicklungswerkzeuge für das Übersetzen von Windows-Programmen unter Wine. Soll ein Quellcode übersetzt werden, muss es in C beziehungsweise C++ geschrieben sein. Oftmals sind syntaktische Änderungen am Quelltext notwendig. Unix unterscheidet bei Dateien und Pfadangaben Groß- /Kleinschreibung. Diese müssen eventuell korrigiert werden. Backslashes in Include-Anweisungen müssen durch Slashes ersetzt werden. Weiterhin müssen Zeilenenden und -umbrüche von CRLF auf LF geändert werden. Statt gcc beziehungsweise g++ sind winegcc und wi- neg++ – Wrapper zu verwenden. Diese Anpassungen erledigt das in Wine integrierte Perl-Skript winemaker. Neben der Anpassung der Quelltexte legt es Sicherungskopien an und erstellt ein Makefile für GNU make an. Ausführlichere Informationen über Winelib erhält man unter den URLs http://www.winehq.org/site/winelib und http://www.winehq.org/site/docs/winelib-guide/index.
[bearbeiten] Links
- http://appdb.winehq.org/objectManager.php?sClass=application&iId=2985
- http://appdb.winehq.org/objectManager.php?sClass=version&iId=19103
- http://www.reactos.org/archives/public/ros-dev/2010-January/012709.html
- http://wine-review.blogspot.com
- http://www.reactos.org/wiki/Arwinss
- http://www.golem.de/specials/reactos/
- http://www.longene.org/en/ Linux UnifiedKernel
- Linux-Kernel führt Windows-Programme aus
- http://sourceforge.net/projects/nudawn/ NuDawn will integrate an OS/2 emulation within WINE