話說覺得系統裝越來越多東西感覺到有點討厭的時候,
就想起了隔離的方式... 在 Linux 中現在最火熱的莫過於是 Docker 了.
於是就開始想試試看如何把
ShogiGUI 跟各家算棋程式 Docker-ized.
但是在本文中不會論及如何安裝 Docker, 敬請見諒.
其實在一路算棋的過程中, ShogiGUI 跟 mono 都經過改版多次,
於是在原來的原生系統上的 mono + ShogiGUI 似乎變得越來越不穩定,
才忽然想到有 docker 這條路, 加上各式開源的算棋程式的發展,
和 docker GUI 設定上的可能性, 於是才開始考慮以這樣的方式包裝所有的算棋方式.
大致上的思路參考自以下網頁:
首先, 最基本需要的套件必須先安裝:
wget: 從網路上取得需要的檔案.
unzip: 解壓縮必須.
git/git-core: git 取得原始程式碼.
build-essential: 編譯程式需要的各種套件.
確定好基本套件之後, ShogiGUI 是 Windows 程式, 本來可能只能用 wine 的,
但是 ShogiGUI 可以使用 mono 來執行.
意外的在這裡有了分岐的想法:
1. 直接找 mono 當作基底容器 a.k.a. From mono
2. 還是老實從 ubuntu 開始建造容器... a.k.a. From ubuntu:16.04
用前者的優點是不用在編譯過程中每次都去重裝 mono,
缺點是... 它的基底不是 ubuntu 而是 debian, 多少還是有些差距的.
後者的話當然就是反過來, 可以在比較適應的 ubuntu 環境中使用,
但是需要安裝 mono-complete.
在這邊, ubuntu + mono-complete 還是需要安裝 libcanberra-gtk-module,
而用 mono 為基底則需要安裝以下的套件以避免執行 ShogiGUI 時發生警告或錯誤:
libgtk-2.0-0, libcanberra-gtk-module: gtk 相關套件.
接下來, ShogiGUI 有 GUI, 所以, 必須要考慮如何在 docker 開啟 GUI 介面.
此時參考的文章為:
最簡單的方式是設定好 docker 內的使用者資訊
1. docker 內的使用者 uid 和 gid 需要和 docker 外的一樣 (重要)
2. 執行 docker 時需要將 DISPLAY 環境變數跟 X11 資源檔分享給 docker 內環境.
不過完成了上面兩項工作之後, 開出來的 GUI 原本該有文字的地方
都只剩下框框, 所以顯然還需要把 locale 日文化以便顯示出日文字.
所需步驟如下:
1. 需要日文字型, apt-get install 以下字型 (不必全裝也未列出所有可能字型)
ubuntu/debian: fonts-{ipafont,ipaexfont}-{gothic,mincho}
fonts-takao-{pgothic,gothic,mincho}
2. 需要設定為日文 locale:
ubuntu 比較簡單, 如下即可
RUN apt-get install -y locales && \
locale-gen ja_JP.UTF-8
在最後執行之前記得 ENV LANG ja_JP.UTF-8 即可.
debian 則略為複雜, RUN 所需要的指令為
RUN echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen ja_JP.UTF-8 && \
dpkg-reconfigure locales && \
/usr/sbin/update-locale LANG=ja_JP.UTF-8
最後也需要在執行前確定 LANG 環境變數.
不過最後一步卻也是最不能忘記的步驟:
RUN wget http://shogigui.siganus.com/shogigui/ShogiGUIv0.0.6.10.zip && \
unzip ShogiGUIv0.0.6.10.zip && \
cd ShogiGUIv0.0.6.10
ENTRYPOINT [ "/usr/bin/mono" ]
CMD [ "ShogiGUI.exe" ]
如此一來才能成功地做好 Dockerfile.
不過編譯完這樣的 Dockerfile 只能把基本的 ShogiGUI 介面打開, 內附的 gpsfish 也無法在 linux 底下使用,
也尚未引入其他將棋 AI 程式... 就要留待之後敘述了.
---
這樣寫法只有自己懂而已,
所以如果要公開的話還需要修飾吧.