
Watcom im Docker
« | 05 Nov 2023 | »Dass wir heute unsere Linux und Windows Binaries auf Buildservern bauen lassen, ist Standard. Doch zu DOS Zeiten war es immer nur der eigene Computer, der das finale Release eine Software anfertigte.
Wäre es nicht faszinierend, wenn wir auch DOS Programme heute im Docker Container bauen lassen könnten?
Und tatsächlich wurden die Open Watcom Compiler für C, C++ und Fortran inzwischen auch auf Linux portiert, womit DOS Programme unter Linux kompiliert werden können.
Bei der
Frage: Läuft das auch in Docker?
wird es leider etwas komplizierter als es sein müsste, und so lautet die
Antwort: Watcom läuft, nur das Setup leider nicht.
Das Watcom Projekt liefert seine Ergebnisse in alter DOS/Win3x Manier als Installer-EXEn aus. In einer solchen über 100 MB großen Programmdatei ist das ganze Setup enthalten und ein UI lässt einen auswählen, was man alles haben möchte.
Das ist super für Benutzer vor dem Bildschirm, aber schlecht für jemanden,
der die Installation automatisiert durchlaufen lassen will, und genau das
brauchen wir für Docker.
Theoretisch könnte man das interne Script für die Installation zwar
abändern, doch mir hat sich nicht erschlossen, wie man das schnell
hinbekommen könnte.
Mein nächster Versuch lief dann über expect(1),
mit dem man Eingaben an ein laufendes Programm hätte schicken können.
Das funktionierte sogar halbwegs auf der echten Konsole, und ich konnte die
nötigen ENTER
+ Pfeiltasten
an das Setup schicken, um bis zur Installation
zu kommen … doch leider klappte es wieder nicht im Docker Container.
Lösung: Real installieren und kopieren
Am Ende ging ich den “einfachsten” Weg und war erstaunt, wie erfolgreich das
war: Ich installierte OpenWatcom auf einer frischen Linuxumgebung und
kopierte einfach alle installierten Dateien dann in ein
TAR-Archiv.
Und eben dieses Archiv wurde dann in ein neues Docker-Image importiert.
Das war es auch schon.
Das Watcom Setup installiert nämlich seine Dateien in /usr/bin/watcom
und verändert sonst nichts am System.
Um die nötigen Environment-Variablen zu setzen, wird im Build-Script einfach
der Inhalt von
/usr/bin/watcom/owsetenv.sh
importiert:
Schon läuft der DOS Build in Linux und auch innerhalb eines Docker Containers.
Fazit
Vor 25 Jahren startete ich meine erste Linux-Distro noch von DOS aus (falls sich noch wer an UMSDOS erinnert …).
Und heute starte ich Buildprozesse für DOS aus Linux Docker Containern heraus.
… wer hätte das gedacht, aber es bereitet mir immer wieder Spaß solche scheinbar entfernten Systemgrenzen abzuschreiten.
Am Ende heißt es also:
Frage: Laufen Watcom DOS Builds auch in Docker?
Antwort: Ja natürlich!