Kapitel 2. DOSemu

Inhaltsverzeichnis

DOSemu 1.4.0
Die Konfiguration von DOSemu
Die Einrichtung von MS-DOS 7.1 auf der Linux-Partition
MS-DOS 7.1 auf der Windows98-(VFAT)-Partition mit DOSemu booten

Ich gehe davon aus, dass Sie ein eingerichtetes Linux-System benutzen. Der Zugriff zu CD-ROM und Floppy sollte funktionieren, der Ausdruck über CUPS sollte eingerichtet sein.

MS-DOS als Vorläufer der heutigen Windows-Varianten ist jedem Computerbenutzer bekannt. Dieses seit bald 20 Jahren im Einsatz befindliche Betriebssystem (z.B. in seinen Varianten DR-DOS oder MS DOS bis zur Version 7.1) ist stabiler als Windows, doch mittlerweile durch vielfache Begrenzungen nicht mehr zeitgemäß. Es ist ein 16 Bit Betriebssystem (im Gegensatz zu aktuellen mit 32 oder gar 64 Bit) und dementsprechend langsam, erlaubt kein Multitasking, also kein paralleles Ausführen mehrerer Programme nebeneinander und hat viele weitere Limitierungen.

Dennoch gibt es - gerade auch im Bereich der Medizin - noch tausende Applikationen, die nur für DOS geschrieben wurden und seither - ein vernünftiges Systemhaus vorausgesetzt - per Updates an die aktuellen Rahmenbedingungen angepaßt wurden. Um diese DOS-Programme auf Linux einrichten zu können, müssen wir in Linux mit DOSemu eine Plattform schaffen. Im DOSemu muss ein ganz normales DOS (DR-DOS, MS-DOS oder FreeDOS) installiert und geladen werden. Dann können die entsprechenden DOS-Programme laufen. DOSemu wandelt also lediglich die DOS-Aufrufe in entsprechende Linux-Systemaufrufe um. Leider ist der Quellcode von MS-DOS nach wie vor nicht veröffentlicht, sodass die Entwickler von DOSemu von Anfang an den DOS-Befehlssatz erraten mussten, was ihnen in weiten Bereichen gelungen ist. Sie mussten dann diesen Befehlsatz in Linuxbefehle umwandeln. Witzigerweise muss DOSemu auch die Fehler von MS-DOS nachbauen, damit einige Programme richtig laufen.

Die Webseite von DOSemu finden Sie unter www.dosemu.org, die DOSemu-Mailingliste erreichen Sie unter , ein Archiv der Mailingliste, unter der Sie auch nach bereits beantworteten Fragen suchen können, finden Sie unter www.mail-archive.com/. Leider ist alles auf Englisch. Die DOSemu-HOWTO und die Dokumentationen sind leider nicht mehr aktuell.

DOSemu existiert zum jetzigen Zeitpunkt in der stabilen Version 1.4.0 und sollte in Ihrer Distribution enthalten sein. Auch in Debian findet man jetzt DOSemu in der Version 1.4.0 im unstable-Zweig. Ein für Debian Etch kompiliertes Paket finden Sie hier. Mit DOSemu können Sie in einer einfachen Linux-Konsole mit dosemu ein DOS starten. Für X-Windows gibt es xdosemu mit einem eigenen xterm-Fenster.

Probleme bereitet erfahrungsgemäß die Einrichtung des DOS-Betriebssystems (FreeDOS, DR DOS oder MSDOS), welches die Funktion des DOS-Boot-Verzeichnisses ("C:\>") übernimmt. Das DOS-Boot-Verzeichnis, im DOSemu-Sprachgebrauch als HD-Image bezeichnet, muss ein bootbares DOS enthalten. Für die ersten Versuche empfiehlt sich FreeDOS, das in einer für DOSemu angepaßten Version normalerweise mit dem DOSemu-Paket installiert werden sollte. Auch MS-DOS 7.1 (das DOS von Windows98SE) läuft im DOSemu ohne Probleme; hierfür muss eine entsprechende Lizenz vorliegen. Spätere Windows-Versionen emulieren lediglich DOS, sodass kein vollwertiges DOS mehr vorliegt. Es gibt einige andere DOS-Versionen, wie z.B. Dr-DOS 7.03, die ebenfalls getestet werden können. Das DOS-Boot-Verzeichnis ("C:\>") wird standardmäßig von DOSemu als ein Unterverzeichnis auf der Linux-Partition angelegt. Dies hat den Vorteil, dass die Daten der DOS-Programme auf dem sicheren Filesystem von Linux (ext2, ext3 oder reiserfs) ablegt werden und eine Defragmentierung nicht erforderlich ist. Man kann aber auch mit DOSemu eine MSDOS- oder VFAT-Partition booten, um z.B. auf eine vorhandene Installation zuzugreifen, hat damit aber wieder die Nachteile von MSDOS- und VFAT-Dateisysteme in Kauf zu nehmen. Mehr dazu bei der Einrichtung von DOSemu. Um in einem DOS-Verzeichnis normal arbeiten zu können, muss der User Lese-, Schreib- und Ausführungsrechte auf das virtuelle DOS-Verzeichnis haben.

DOSemu 1.4.0

DOSemu 1.4.0 sollte inzwischen in Ihrer Distribution enthalten sein. Daneben muss ein DOS (MS-DOS 7.1, Dr-DOS 7.03 vorhanden sein oder es muss das dosemu-FreeDOS-Paket heruntergeladen und installiert werden. In Debian gibt es ein zusätzliches Paket xfonts-dosemu, das die DOS-Fonts für xdosemu enthält. Falls man seine DOS-Programm unter X laufen lassen möchte, muss dieses Paket ebenfalls installiert werden. Auf der Webseite www.dosemu.org gibt es ein RPM-Paket, das die Xfonts und FreeDOS enthält. Ich habe ein Paket für Debian Etch mit den Xfonts und FreeDOS gepackt. Es kann als dosemu_1.4.0_i386.deb heruntergeladen und installiert werden.

Von der DOSemu-Webseite ist auch der Sourcecode downloadbar. Wer sich das Selbstkompilieren der Sourcen zutraut, kann dabei verschiedene Optionen setzen, die bei Problemen mit einem DOS-Programm ausprobiert werden können.

Für einen ersten Test sollten Sie sich als normaler User einloggen, eine Konsole öffnen und am Prompt dosemu eingeben. In dem sich öffnenden Fenster sollten Sie einen Hinweis darauf finden, wo das virtuelle DOS-Verzeichnis eingerichtet wird. In Debian war es unter Woody üblich, das virtuelle DOS-Verzeichnis nach /var/lib zu legen, was allerdings Probleme mit den Schreibrechten als normaler User ergab. In neueren Versionen wurde es nach /home/user/dosemu/freedos/ oder nach /home/user/.dosemu/drive_c/ verlegt. Damit habe Sie meist schon ein lauffähiges DOS und Sie können durch Zugriff auf Laufwerk A (=/dev/fd0) Ihre DOS-Software installieren. Verlassen können Sie das DOSemu-Fenster wieder mit exitemu.

Die Konfiguration von DOSemu

Die Konfigurationsdateien von DOSemu finden Sie in /etc/dosemu und /home/user/.dosemu. Sollte der Start von DOSemu nicht gelingen, finden Sie Hinweise zur Fehlerursache in der Datei /home/user/.dosemu/boot.log. Sie können die meisten Voreinstellungen der Distribution durch Optionen in einer Datei /home/user/.dosemurc verändern. Hierfür kopieren Sie die Datei /etc/dosemu/dosemu.conf nach /home/user/.dosemurc und ändern dort die entsprechenden Optionen.

Beispiel 2.1. Beispiel-.dosemurc-Datei


In der .dosemurc-Datei kann als hd_image der volle Pfad zum zukünftigen DOS-Verzeichnis eingetragen werden, im Falle des FreeDOS-Verzeichnisses: $_hdimage = "/home/user/dosemu/freedos". Sie können dort auch $_hdimage = "/home/user/.dosemu/drives/* eintragen und in dem Verzeichnis /home/user/.dosemu/drives einen Link

ln -s /home/user/dosemu/freedos /home/user/.dosemu/drives/c

legen. Dies hat den Vorteil, dass Sie weitere Links, die Sie in dieses Verzeichnis legen, automatisch beim Laden von DOSemu einrichten. Z.B. könnte man als weiteres hd_image die Windows-Partition eintragen mit einem Link nach /mnt/hda1:

ln -s /mnt/hda1 /home/user/.dosemu/drives/e

oder zum CD-ROM-Laufwerk mit:

ln -s /mnt/cdrom /home/user/.dosemu/drives/f

Wenn jetzt die Windows-Partition nach /mnt/hda1 gemounted wird (für ein DOS-Programm auf der Windows-Partition muss die Partition read-write gemounted werden), ist die Windows-Partition über e: ansprechbar. Auch das CD-ROM-Laufwerk ist nach Mounten der CD-ROM nach /mnt/cdrom mit f: lesbar. Das Diskette-Laufwerk ist mit a: ansprechbar.

Für die Benutzung eines Gerätes über COM1=/dev/ttyS0 muss in der .dosemurc der COM-Port mit $_com1 = "/dev/ttyS0" gesetzt werden. Eine Lock-Datei für den COM-Port kann angegeben werden und muss vom User schreibbar sein, z.B. als $_ttylock = "/home/user/dosemu/lock". Dieses Verzeichnis müssen Sie anlegen.

Die Option $_port = "" muss leer bleiben. Falls der Zugriff zu COM1 nicht funktioniert, müssen die Zugriffsrechte auf /dev/ttyS0 kontrolliert werden, eine eventuell vorhandene Firewall umkonfiguriert werden oder die Xorg-Server-Konfiguration kontrolliert werden, da - wie es mir passiert ist - die COM1-Schnittstelle vom X-Server für einen seriellen Mausanschluß blockiert wurde.

In DOSemu sieht man das Verzeichnis /home/user/.dosemu/drives/c als C:\>. Außerhalb von DOSemu in Linux kann man ohne Probleme auf die Verzeichnisse von /home/user/dosemu/freedos zugreifen. Um Dateien im DOSemu-Verzeichnis zu bearbeiten, muss man allerdings einen DOS-Editor verwenden, sonst können diese Dateien nicht in DOSemu gelesen werden: Linux legt als Zeilenende nur ein RETURN an, während MSDOS als Zeilenende ein CARRIAGE-RETURN verwendet. Eine autoexec.bat-Datei, die mit einem Linux-Editor verändert wurde, ist für MSDOS nicht lesbar, und das Starten von XDOSemu schlägt fehl. Zum Editieren in DOSemu kann man den DOS-Editor edit.com verwenden, oder man erstellt die Datei vollständig in Linux und wandelt sie anschließend mit dem Tool-Programm linux2dos um.


Die Einrichtung von MS-DOS 7.1 auf der Linux-Partition

Neben FreeDOS können Sie auch eine normale MS-DOS-Installation in DOSemu verwenden. Die beste DOS-Version ist offensichtlich MSDOS 7.1 (DOS von Windows98SE); vielleicht hat man noch ein alte Windows-CD irgendwo liegen. Ich werde hier lediglich die Installation von MSDOS 7.1 beschreiben, weil ansonsten auf FreeDOS zurückgegriffen werden kann.

Am Einfachsten ist es, aus einer laufenden Windows98SE-Installation heraus eine Systemdiskette mit dem Befehl format a: /s zu erstellen. Zusätzlich kopiert man das Verzeichnis C:\windows\command auf die Diskette. In Linux richtet man ein neues Unterverzeichnis /home/user/dosemu/win98 ein und kopiert die Systemdateien command.com, io.sys und msdos.sys von der DOS-Systemdiskette in das Verzeichnis /home/user/dosemu/win98. Die Windows-Command-Dateien kopieren wir in ein Unterverzeichnis /home/user/dosemu/win98/dos. Aus dem Freedos-Verzeichnis /usr/(local/)share/dosemu/freedos kopieren wir die Dateien autoexec.bat und config.sys sowie die Unterverzeichnisse /dosemu, /bin, /doc, /gnu und /help in das Windows-Verzeichnis /home/user/dosemu/win98. Wichtig ist, dass in der autoexec.bat-Datei der Pfad zum Verzeichnis c:\dosemu gesetzt wird, da sonst DOSemu z.B. nicht mit dem Befehl exitemu verlassen werden kann.

Damit hätte man schon ein bootbares DOS-Verzeichnis, das aber noch in der /home/user/.dosemurc-Datei an DOSemu mit $_hdimage="/home/user/dosemu/win98" weitergegeben werden muss.


MS-DOS 7.1 auf der Windows98-(VFAT)-Partition mit DOSemu booten

Eine weitere Möglichkeit besteht darin, MS-DOS einer Windows98-Partition zu booten. Spätere Windows-Versionen können dafür nicht genutzt werden. Wir können auch nicht die vorhandenen Dateien autoexec.bat, config.sys und msdos.sys verwenden, da Windows in aller Regel damit Windows und nicht DOS booten will und DOSemu damit abstürzt. Wir richten also ein Verzeichnis /home/user/dosemu/hda1 ein und kopieren die Datei config.sys sowie die Unterverzeichnisse /dosemu, /doc, /gnu und /help aus dem FreeDOS-Verzeichnis in das Verzeichnis /home/user/dosemu/hda1.

Damit DOSemu die Windows-Datei command.com ausführen kann, muss die Windows-Partition vom User lesbar und ausführbar sein, um das DOS-Programm darauf benutzen zu können, muss sie auch schreibbar sein. In den meisten Distributionen wird die Windows-Partition jedoch so eingebunden, dass sie für einen normalen User nicht schreibbar und ausführbar ist. Wir müssen dafür als root die Windows-Partition unmounten und mit

mount -t vfat -o rw,user,nosuid,nodev,umask=000,codepage=850 /dev/hda1 /mnt/hda1

erneut mounten. Das Verzeichnis /mnt/hda1 muss dafür existieren. Um die Windows-Partition auf Dauer beim Systemstart entsprechend zu mounten, sollte die Datei /etc/fstab folgende Eintragung für die Windows-Partition enthalten:

/dev/hda1  /mnt/hda1  vfat  rw,user,nosuid,exec,umask=000,codepage=850  0 0

Damit kann jeder User auf die Windows-Partition zugreifen, auf ihr schreiben und löschen, was aus Linux-Sicht ein Sicherheitsrisiko zumindest für das Windows-System ist. Für Windows-User ist so eine Einstellung wohl eher der Normalfall.

Jetzt legen wir verschiedene Links:

  • im Verzeichnis /home/user/dosemu/hda1 den Link zur command.com-Datei

    ln -s /mnt/hda1/command.com command.com

  • im Verzeichnis /home/user/dosemu/hda1 den Link zur io.sys-Datei

    ln -s /mnt/hda1/io.sys io.sys

  • im Verzeichnis /home/user/dosemu/hda1 den Link zum Verzeichnis C:\windows\command

    ln -s /mnt/hda1/windows/command dos

Die msdos.sys-Datei der Windows-Partition muss, wenn man damit DOS booten will, verändert werden. Man bootet nochmal FreeDOS und ruft den Editor mit edit msdos.sys auf. In die Datei fügen Sie ein:

;SYS

Diese Datei kopiert man vom FreeDOS-Verzeichnis in das Verzeichnis /home/user/dosemu/hda1.

Die Datei autoexec.bat aus dem FreeDOS-Verzeichnis verändern wir, damit mit dem Befehl lredir statt des User-Home-Verzeichnisses die 1. Partition als Laufwerk D: angesteuert wird, siehe Beispiel-Datei.

Wenn man dieses Verzeichnis mit DOSemu booten will, muss noch in der .dosemurc-Datei angegeben werden:

$_hdimage="/home/user/dosemu/hda1 /home/user/dosemu/drives/cdrom"

Im Verzeichnis /home/user/dosemu/drives legen Sie noch einen Link

ln -s /cdrom cdrom

zum Mountpoint des CD-ROM-Laufwerkes. Erklärung siehe unten.

Beispiel 2.4. Beispiel-Dateien zur Ansteuerung der 1. Partition mit DOSemu 1.4.0


Nach dem Start von xdosemu bootet jetzt MS-DOS von der 1. Partition. Das C-Verzeichnis liegt noch auf der Linux-Partition. Man könnte jetzt das DOS-Programm auf der Linux-Partition - wie gewohnt mit dem Aufruf von setup.exe auf dem CD-ROM-Laufwerk - in das Verzeichnis C:\ installieren. Man kann aber auch auf die Windows-Partition mit D: zugreifen und das eventuell bereits existierende DOS-Programm mit D:\... laden.