作者 | John Goerzen
譯者 | geekpi ? ? 共計翻譯:671 篇 貢獻時間:1601 天
不久前,我寫了一篇我的 Debian Docker 基本映像[1]。我決定進一步擴充套件這個概念:在 Docker 中執行 DOS 程式。
但首先,來看看題圖。
事實證明這是可能的,但很難。我使用了所有三種主要的 DOS 模擬器(dosbox、qemu 和 dosemu)。我讓它們都能在 Docker 容器中執行,但有很多有趣的問題需要解決。
都要做的事是在 DOS 環境下提供一個偽造的數據機。它需要作為 TCP 埠暴露在容器外部。有很多方法可以做到 —— 我使用的是 tcpser。dosbox 有一個 TCP 數據機介面,但事實證明,這樣做太問題太多了。
挑戰來自你希望能夠一次接受多個傳入 telnet(或 TCP)連線。DOS 不是一個多工作業系統,所以當時有很多駭客式的方法。一種是有多臺物理機,每個有一根傳入電話線。或者它們可能會在 DESQview[2]、OS/2 甚至 Windows 3.1 等多工層下執行多個偽 DOS 實體。
(註意:我剛剛瞭解到 DESQview/X[3],它將 DESQview 與 X11R5 整合在一起,並取代了 Windows 3 驅動程式[4]來把 Windows 作為 X 應用程式執行。)
出於各種原因,我不想嘗試在 Docker 中執行其中任何一個系統。這讓我模擬了原來的多物理節點設定。從理論上講,非常簡單 —— 執行一組 DOS 實體,每個實體最多使用 1MB 的模擬 RAM,這就行了。但是這裡面臨挑戰。
在多物理節點設定中,你需要某種檔案共享,因為你的節點需要訪問共享的訊息和檔案儲存。在老式的 DOS 時代,有很多笨重的方法可以做到這一點 —— Netware[5]、LAN manager[6],甚至一些 PC NFS 客戶端。我沒有訪問 Netware。我嘗試了 DOS 中的 Microsoft LM 客戶端,與在 Docker 容器內執行的 Samba 伺服器互動。這樣可以使用,但 LM 客戶端即使有各種高記憶體技巧還是佔用了很多記憶體,BBS 軟體也無法執行。我無法在多個 dosbox 實體中掛載底層檔案系統,因為 dosbox 快取不相容。
這就是為什麼我使用 dosemu 的原因。除了有比 dosbox 更完整的模擬器之外,它還有一種共享主機檔案系統的方式。
所以,所有這一切都在此:jgoerzen/docker-bbs-renegade[7]。
我還為其他想做類似事情的人準備了構建塊:docker-dos-bbs[8] 和底層 docker-dosemu[9]。
意外的收穫是,我也試圖了在 Joyent 的 Triton(基於 Solaris 的 SmartOS)下執行它。讓我感到高興的印象是,幾乎可以在這下麵工作。是的,在 Solaris 機器上的一個基於 Linux 的 DOS 模擬器的容器中執行 Renegade DOS BBS。
via: http://changelog.complete.org/archives/9836-an-old-dos-bbs-in-a-docker-container
作者:John Goerzen[11] 譯者:geekpi 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出