歡迎光臨
每天分享高質量文章

Docker 容器中的老式 DOS BBS | Linux 中國

事實證明這是可能的,但很難。我使用了所有三種主要的 DOS 模擬器(dosbox、qemu 和 dosemu)。我讓它們都能在 Docker 容器中執行,但有很多有趣的問題需要解決。
— John Goerzen


致謝
編譯自 | http://changelog.complete.org/archives/9836-an-old-dos-bbs-in-a-docker-container 
 作者 | 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中國 榮譽推出

贊(0)

分享創造快樂