Watcom im Docker

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:

1#!/bin/sh
2. /usr/bin/watcom/owsetenv.sh
3...
4cmake -G "Watcom WMake" ...
5wmake

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!

📧 📋 🐘 | 🔔
 

Meine Dokus über:
 
Weitere externe Links zu:
Alle extern verlinkten Webseiten stehen nicht in Zusammenhang mit opengate.at.
Für deren Inhalt wird keine Haftung übernommen.



Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!