BenBE's humble thoughts Thoughts the world doesn't need yet …

26.02.2010

Klarer Wine für mein Sparbuch

Filed under: Software — Schlagwörter: , , , , , , — BenBE @ 02:43:48

Nach dem ich mich seit meinem finalen Entschluss, Windosen nur noch mit dem Dosen-Öffner und einer Linux-CD zu behandeln, gab es inzwischen in meinem Umfeld erste Umsteiger in Sachen zu betreuender Rechner. Aufgabe war es, ein Notebook für den Einsatz für Office-Arbeiten und einfache Buchhaltungsaufgaben fertig zu machen. Da es gewisse Altlasten zu beachten gab, gestaltet sich der Umstieg jedoch nicht ganz reibungslos, auch wenn das Grundsystem mit Office und Browser tadellos läuft, und abgesehen von kleineren Quärelen mit dem HAL im Zusammenspiel mit dem Plasma-Desktop derzeit kleinere Work-Arounds benötigen.

Ein größeres Projekt stand jedoch die Tage an: Für die Finanzverwaltung sollte WISO Sparbuch 2010 eingerichtet werden, damit die bestehenden Daten gepflegt und ergänzt werden können. Da das Programm für Linux nicht verfügbar ist, und auf den Einsatz einer VM aus Resourcengründen vermieden werden soll, fiel die Wahl auf Wine, was bereits seit längerem als durchaus brauchbare Alternative zum Einsatz virtueller Maschinen mit Paravirtualisierung oder Vollvirtualisierung gelten kann.

Ein erster Blick in die Kompatibilitätsliste ist dabei sogar bereits recht vielversprechend. Außer einem kleinen Crash beim Starten des Programms, für den es einen Workaround in Form eines kurzen Source-Patches gibt, lässt sich das Programm mit gerade einmal 4 weiteren Schritten fast so wie auf einer Dose installieren.

Der erste Schritt ist hierbei eine blanke Wine-Installation. Das Paket wine wird unter Debian zwar standardmäßig mitgeliefert, hängt aber sogar in der Experimental-Version dermaßen hinterher, dass man dies zu gunsten geschonter Nerven überspringen sollte und direkt auf die von WineHQ angebotenen Paket-Quellen wechseln sollte. Da es für Squeeze jedoch (derzeit?) keine ausreichend aktuellen Source-Pakete zum Selberbauen gibt und die Eintragung für Lenny nicht funktioniert (APT meldet einen 404 Not Found beim Update), muss man an dieser Stelle etwas improvisieren und auf die Jaunty-Quellen (Ubuntu) konfigurieren.

Hierfür öffnet man eine Kommando-Zeile und führt (root-User dürfen auf sudo verzichten) den Import der nötigen Schlüssel zum Validieren der Paket-Quellen aus:

wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/karmic.list -O /etc/apt/sources.list.d/winehq.list

Alternativ kann man jedoch die Paket-Quellen auch über von seinem X-Server bereitgestellte Klicki-Bunti-Oberfläche – wie auf der WineHQ-Seite dargestellt – importieren.

Nach dem wir nun für Wine die benötigten Paketquellen verfügbar haben, könnte man normalerweise Wine bereits installieren, was jedoch in diesem speziellen Falle zu einem Problem mit WISO Sparbuch 2010 führt. Um den hierfür nötigen Work-Around anzuwenden, muss man sich Wine aus den Quellen übersetzen, was einfacher geht, als man vermuten würde. Als erste Vorbereitung hierfür benötigen wir jedoch noch zwei weitere Pakete: apt-src und devscripts. Deren Installation verläuft auf einer Root-Konsole ohne große Umstände:

aptitude install apt-src devscripts

Sind diese beiden zusätzlichen Pakete eingerichtet, kann es an das Einrichten der Compilier-Umgebung gehen:

cd /usr/src
apt-src install wine
apt-src build wine

Wichtig ist hierbei, dass die beiden letzten Befehle in /usr/src als Arbeitsverzeichnis ausgeführt werden, weil apt-src das Arbeitsverzeichnis als Stammverzeichnis für Quelltext-Trees verwendet. Dieses Verhalten kann zwar überschrieben werden, macht aber unnötige Schreibarbeit und verkompliziert die Arbeit unnötig. Läuft dieser erste Build reibungslos durch, kann es an das anwenden des Bugfixes gehen. Hierzu wechselt man in das unter /usr/src frisch angelegte Verzeichnis wine-1.1.* und von dort aus nach dlls/ntdll/:

cd wine-1.1.*/dlls/ntdll/

In diesem Verzeichnis befinden sich eine ganze Reihe verschiedener *.c-Dateien, von denen nur die virtual.c von Interesse ist. Diese öffnet man mit dem Editor seiner Wahl und sucht sich etwa auf Zeile 100 – abhängig von der Source-Version von Wine – den folgenden Block:

    PAGE_WRITECOPY,             /* WRITE | WRITECOPY */
    PAGE_WRITECOPY,             /* READ | WRITE | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY,     /* EXEC | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY,     /* READ | EXEC | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY,     /* WRITE | EXEC | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY      /* READ | WRITE | EXEC | WRITECOPY */
 };

In diesem ersetzt man die 2. und 4. Zeile mit PAGE_EXECUTE_WRITECOPY wie folgt:

    PAGE_WRITECOPY,             /* WRITE | WRITECOPY */
    PAGE_WRITECOPY,             /* READ | WRITE | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY,     /* EXEC | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY | PAGE_EXECUTE_READ,     /* READ | EXEC | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY,     /* WRITE | EXEC | WRITECOPY */
    PAGE_EXECUTE_WRITECOPY | PAGE_EXECUTE_READ      /* READ | WRITE | EXEC | WRITECOPY */
 };

Dabei sollte man DRINGEND!!! darauf achten, die richtigen Zeilen zu erwischen, weil man sich nicht nur einiges an Zeit damit spart, sondern auch unangenehmen Nebeneffekten vorbeugt: Die Datei virtual.c ist Bestandteil der Speicherverwaltung und fließt später in die ntdll.dll ein, die unter Windows als Schnittstellen-Bibliothek zum Kernel dient. Auch wenn unter Wine eine gewisse Abstraktion über zusätzliche Userland-Schichten u.U. Fehler abfangen kann, kann ein Fehler hier verheerende Folgen haben!

Ist diese Änderung erfolgreich eingepflegt und die Korrektheit überprüft, können wir uns nun um das Erzeugen der Binärpakete kümmern. Dies kann mit einem Terminal und folgenden Befehlen erreicht werden:

cd /usr/src/wine-1.1.*/
dch -l patch "Workaround for Crash in WISO Sparbuch 2010"
sed 's,-O2,-O9,' debian/rules > debian/rules~ && mv debian/rules~ debian/rules
dch -a "Increased optimization level when Compiling for better runtime performance"
cd /usr/src
apt-src -i build wine

Das Bauen des Paketes benötigt nun ca. 15-30 Minuten je nach Geschwindigkeit des Prozessors – eine gute Gelegenheit, um die Mittagspause nachzuholen oder anderweitig für die Kollegen mit Kaffee zu versorgen.

Unter Umständen kann es bei der Ausführung der Paket-Installation zu Problemen mit der automatischen Installation von Dependencies kommen. Sollte dies der Fall sein, sollte man diese per Hand über die Paketverwaltung seiner Wahl installieren, ohne Wine jedoch auszuwählen (die lokal erzeugten Builds sind der Paket-Verwaltung zu diesem Zeitpunkt noch nicht bekannt). Anschließend kann die Installation der erzeugten Pakete mit

dpkg -i /usr/src/wine*_1.1.*.deb

wiederholt werden.

Ist die Installation von Wine erfolgreich geglückt, wird nun ein Terminal auf einer grafischen Oberfläche benötigt. Dies ist nötig, da ansonsten die folgenden Schritte fehlschlagen. Wie gemacht für diese Aufgabe sind hierbei xterm und konsole, die, je nach Vorliebe gestartet werden sollten. Admin-Rechte werden ab diesem Punkt – trotz dem Programme installiert werden – nicht mehr benötigt, da jegliche Änderungen innerhalb des eigenen Home-Verzeichnisses ausgeführt werden. Vielmehr ist es sogar notwendig, dass die folgenden Schritte unter dem Nutzer-Account ausgeführt werden, für den WISO Sparbuch 2010 später ausgeführt werden soll.

Auf der Konsole angekommen, führen wir aus:

wget http://kegel.com/wine/winetricks
sh winetricks -q msxml3 msxml4 dotnet20 jet40
sh winetricks wmp9

Diese Zeilen installieren alle benötigten Abhängigkeiten, d.h. die XML-Parser MSXML3, MSXML4, das Jet-Datenbank-Interface, das .NET-Framework 2.0 sowie den Windows Media Player 9. Bei letzterem ist es normal, wenn das Setup beim ersten Durchlauf – microsoft-typisch – mit einem Fehler abbricht; hiervon nicht beirren lassen, und einfach den weiteren Anweisungen folgen.

Nach dem nun eine ganze Reihe von Vorbereitungen ausgeführt wurden und hoffentlich bisher alles erfolgreich verlief, kann es nun an die Installation gehen. Hierzu legt man das Installationsmedium in das CD-Laufwerk und mounted dieses.

mount /media/cdrom

Anschließend startet man eine DOS-Konsole.

wineconsole cmd

Im nun erscheinenden Fenster, das starke Ähnlichkeiten mit einem DOS-Prompt aufweist, wechselt man auf Laufwerk D: und führt die start.exe aus:

D:
start

Danach erfolgt die Installation von WISO Sparbuch 2010 wie auf einer Dose: Immer den Anweisungen folgen!

Ob alles erfolgreich verlaufen ist, sieht man beim ersten Start der Anwendung: Stürzt diese mit einem Wine-Dialog und der Meldung eines unbehandelten Schreibzugriffs ab, so sollte man den Patch nochmals überprüfen, das Source-Paket erneut bauen und nochmals installieren. Zudem sollte man beachten, dass man diese Änderung am Quellpaket mit jedem Upstream-Release von Wine erneut ausführen muss. Wie man sich diese Aufgabe etwas vereinfachen kann, habe ich in abgewandelter Form bereits an anderer Stelle für den Bind9 beschrieben.

Sollte es mit dieser Anleitung Probleme geben, freue ich mich über Feedback und würde um entsprechende Hinweise in der Kompatibilitätsdatenbank von Wine bitten, da diese nur so behandelt werden können.

Flattr this!

7 Comments »

  1. Nett … Mach doch für das Patch nen Auto Script …

    Kommentar by neo — 26.02.2010 @ 16:36:07

  2. Finde ich klasse diese Beschreibung, ich kauf mir gerade ein neues Notebook und will zum erstem mal Linux = Ubuntu ausprobieren. Meine Sorgen waren nun, was mach ich mit der Steuererklärung, aber das scheint ja gelöst zu sein.

    Danke für diesen Mutmacher

    Kommentar by Markus — 01.07.2010 @ 12:02:09

  3. Ubuntu und Linux sollte man zwar nicht gleichsetzen, weil kein Linux gleich dem anderen ist, aber es gibt doch einen recht guten Kern, bei dem alle Linux-Systeme doch aufeinander aufbauen.

    Wichtig ist aber, gerade wenn man Linux das erste Mal einsetzt, dass man darauf vorbereitet ist, dass mit hoher Wahrscheinlichkeit nicht alles auf Anhieb funktionieren wird. Frusttoleranz ist daher von Vorteil; für die meisten Probleme gibt es aber im Internet recht gute Beschreibungen für Lösungen. Dieser Blogeintrag z.B. basiert zu großen Teilen auf den Hinweisen aus der AppDB von WineHQ.

    Der Rest bei vielen Linux-Systemen ist einfach Erfahrung, die man mit der Zeit sammeln muss. Für den Einstieg ist Ubuntu aber schon einmal recht gut.

    Kommentar by BenBE — 01.07.2010 @ 15:08:58

  4. Ich bin noch mit der Steuererklärung 2008 beschäftigt. Ich habe das neuste Wine sinatlliert, mangels Internetzugang kann ich die obige Prozedur leider nicht nachmachen.

    Bei mir stürzt das Sparbuch direkt nach dme Start ab, die Installation war problemlos. War das auch das Anfangsproblem beim Sparbuch 2010?
    C:\Programme\WISO\Sparbuch 2009\wmain09.dll (16.00.6228)

    Exception code: C0000005

    Fault address: 7814517C

    Registers:
    EAX:17BAE967
    EBX:97AD17BA
    ECX:00000001
    EDX:00000002
    ESI:0033EDA8
    EDI:7B836140
    CS:EIP:0073:7814517C
    SS:ESP:007B:0033ED3C EBP:0033ED44

    Segments:
    DS:007B ES:007B FS:0033 GS:003B

    Flags:00010297 Ctrl:027F Stat:4020 Tags:FFFF

    Instruction:

    7814517c 89448ffc mov [edi+ecx*4-0x4],eax

    Symbol at 0x7814517c : MSVCR80! (0)

    Symbol at 0x7814517c : MSVCR80! (0)

    Symbol at 0x133018fe : rsdebug4! (0)

    Symbol at 0x13302afb : rsdebug4! (0)

    Symbol at 0x133079b4 : rsdebug4! (0)

    DMP-Datei : C:\users\markus\Temp\Schutzverletzung00.dmp

    appdb/winehq.org

    Kommentar by Markus — 22.07.2010 @ 17:31:46

  5. Diese Startfehlermeldung begründet sich auf einen Fehler im Speichermanagement von Wine, auf die die WISO-Software allergisch reagiert. Bitte unbedingt noch einmal mit angewendetem Patch probieren. Ggf. die nötigen Wine-Pakete auf einem Rechner mit Internet-Verbindung vor-kompilieren lassen. Wenn gewünscht, kann ich auch durchaus eine für Ubuntu bzw. Debian compilierte Package-Version mal bereitstellen. Generell sollte man dann aber schauen, dass man wenn man einmal was Lauffähiges hat, nicht unnötig oft wechselt.

    Kommentar by BenBE — 23.07.2010 @ 19:21:15

  6. Danke für die Antwort.

    Ich habe beim Befehl sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/karmic.list -O /etc/apt/sources.list.d/winehq.list einen 404-Fehler bekommen.

    Ich habe jetzt die Lizenz von meinem alten PC genommen und eine VM installiert. Wollte ich ursprünglich nicht, aber damit geht es auch.

    Wieso wird der Fehler im Speichermanagement von Wine eigentlich nicht behoben? Wäre doch das einfachste, oder?

    Kommentar by Markus — 30.07.2010 @ 16:05:35

  7. Der 404er Fehler hängt wahrscheinlich mit geänderten Server-Pfaden bei WineHQ zusammen. Die Datei beinhaltet die Einträge für die sources.list, um die Pakete UND deren Source-Packages zu finden. Das ist für den späteren Schritt des Compilierens nötig.

    Zum Thema, warum der Patch nicht einfach eingepflegt wird, gibt es zwei Aspekte, die man insbesondere als Software-Entwickler kennt. Der eine ist eine Sache bzgl. Zeit: Das Einpflegen jeder Änderung dauert. Je mehr Änderungen es gilt einzupflegen, desto länger dauert es. Insbesondere, wenn man diese nicht nur blind einpflegt, sondern auch testen möchte. Womit wir beim zweiten Punkt sind: Was für eine Anwendung funktionieren mag, kann für zig andere Anwendungen zu Problemen führen. Je komplexer hier die Software ist und je tiefer der Eingriff ist, desto unvorhersehbarer werden die Auswirkungen. Wenn man nun einen Stand hat, der für die meisten Anwendungen erstmal läuft und nur in Ausnahmefällen einer Änderung bedarf, ist es erstmal günstiger, für diese Ausnahmefälle die Sonderbehandlung zu belassen. Das mag zwar seltsam klingen, aber der Testaufwand, ist für diese Änderung einfach viel zu groß, um sie als stabile Änderung in die Hauptentwicklung aufzunehmen. Da ist der Hinweis, in diesem konkreten Fall einen bestimmten Patch anzuwenden wesentlich einfacher, auch wenn es halt dem Anwender Nerven kostet.

    Geht mir bei meinen Projekten auch nicht anders: Ich habe inzwischen aufgehört in GeSHi um die Bugs von Mozilla und PCRE herumzuarbeiten: Ich ignoriere die Fehler dieser Libs und schicke die Leute zu den Autoren der entsprechenden Bibliotheken, da es nicht meine Aufgabe als Entwickler ist, gegen kaputte Software zu implementieren. Was dabei rauskommt, wenn man dies tut, sieht man sehr schön bei Eclipse, die einen Würgaround um einen Bug der Sun JavaVM implementiert haben und statt dass der Bug von Sun/Oracle behoben wurde, wird der Vendor-String geändert und weder die Funktion NOCH die benötigte Funktion gehen.

    Kommentar by BenBE — 30.07.2010 @ 17:34:47

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress