【夢を超えた】Mac版XM6iを使ってNetBSD/x68kを動かすという話【夢の、頂きへ】
急にお金M68Kアーキテクチャでコンパイルされたバイナリが必要になることってありますよね。
そんなときあなたならどうしますか?
誰かに借りるにしても、理由を説明して頭を下げないといけない・・何より人間関係が気まずくなるのだけは避けたいものですよね。
そんなあなたにおすすめなのが、即日融資でお金を借りるXM6iにNetBSD/x68kをインストールしてコンパイルする方法です。
XM6iとは?
XM6i - クロスプラットフォーム X68000/X68030 エミュレータだそうです。
XM6i - クロスプラットフォーム X68000/X68030 エミュレータ
X68000/X68030というのは1987年3月28日にシャープが発売したパーソナルコンピューターだそうです。
X68000 - Wikipedia
オープンソースカンファレンス広島のjapan netbsd users groupのブースでは毎年X68000/X68030を使って、すごーい!たーのしー!ことをやっているので、興味がある人は見に行ってみると変なスイッチが入ったり入らなかったりするかもしれません。
OSC2016広島 (2016/11/27) 発表スライド
インストール方法とMac版の問題
配布元のダウンロードページに
http://xm6i.org/download.html
Mac 版について ver 0.53 から SDL2 を使用しているため、 サウンドなし版、あり版の区別はなくなりました。 Mac OS X 10.8 でビルドし、10.11 でも動作を確認しています。 それ以外のバージョンについては分かりません。
とあったので、ダウンロードして、展開し、バイナリを実行したところ、異常終了してしまいました。
WindowでもMacでもことごとくXM6iが異常終了するのは何かの呪いですか? pic.twitter.com/jzC2M8BbdE
— Lucky owner/capturer (@nullnilaki) 2017年2月16日
とっても困っていたところ、@LabDrunkerさんに"MacPortsを使ってGCC5を入れて、/opt/local/lib以下のlibstdc++が使われるようにしたら、動くようになりました。"という貴重なアドバイスを頂きました。
@nullnilaki OS X 10.8.5でmame coreのXM6iが動いてます。(少なくとも10.8.5では) /usr/lib以下のlibstdc++はGCC4以前のABIなので、おそらくGCC5でコンパイルされているXM6iは動きません。
— 「この世界の片隅に」はいいぞ (@LabDrunker) 2017年2月16日
@nullnilaki 私の場合はMacPortsからGCC5を入れて、/opt/local/lib以下のlibstdc++が使われるようにしたら、動くようになりました。 pic.twitter.com/CHWGXiYaZT
— 「この世界の片隅に」はいいぞ (@LabDrunker) 2017年2月16日
どうして、この解決方法に気づいたのか質問してみたところ、
@nullnilaki (1) crash reportでlibstdc++の中のシンボルが解決できなくなっているのがわかった、(2) GCC5がABI互換性を壊すのを知っていた、(3) 開発者のみなさんはMacPortsを使っているらしい、ということから推測しました。
— 「この世界の片隅に」はいいぞ (@LabDrunker) 2017年2月16日
とのご回答をいただきました。ぼんくら物理学者... だと... こいつ…かなりの切れ者...
確かにotoolを使ってxm6iがリンクしている共有ライブラリを調べてみると、/opt/loca/lib以下のlibstdc++が使われているようです。
Mac版XM6i、一部の共有ライブラリが/opt/loca/lib以下にあることが前提になっていてそもそもmacportsが無いと動かないということかな pic.twitter.com/leu0tnd6IP
— Lucky owner/capturer (@nullnilaki) 2017年2月16日
実験として/opt/localを掘って/usr/libにシンボリックリンクをはってみましたが、xm6iが異常終了してしまいました。
実験として/opt/localを掘って/usr/libにシンボリックリンクをはってみたがやはりダメか... pic.twitter.com/gIyXGK9rct
— Lucky owner/capturer (@nullnilaki) 2017年2月17日
これは@LabDrunkerもおっしゃっていますが、gcc5からlibstdc++ではデフォルトで新しいABIを利用するようになっているためと思われます。(そしてMac版xm6iはgcc5を使ってコンパイルされているためと思われます)
なるほどね libstdc++ではデフォルトで新しいABIを利用するようになっている。| GCC 5系初のリリースとなる「GCC 5.1」登場 | OSDN Magazine https://t.co/YueW1FZvxZ
— Lucky owner/capturer (@nullnilaki) 2017年2月16日
早速MacPortsから、gcc5をインストールしてみました。
— Lucky owner/capturer (@nullnilaki) 2017年2月17日
— Lucky owner/capturer (@nullnilaki) 2017年2月17日
gcc5突っ込んだ! pic.twitter.com/p2vIbnGGqC
— Lucky owner/capturer (@nullnilaki) 2017年2月17日
問題が解決したので、XM6iが起動するようになりました!
Mac版XM6i
— Lucky owner/capturer (@nullnilaki) 2017年2月18日
キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!! pic.twitter.com/0efanStDRc
NetBSD/x68kのインストール
早速準備が整ったので、NetBSD/x68kをインストールしてみます。
やり方は、@tsutsuiiさんのページに詳しい方法が書いてありますので、参考にしてください。
NetBSD/x68k on XM6i ver 0.41 - クロスプラットフォーム X68000/X68030 エミュレータ
インストールCD ISOイメージ http://ftp7.jp.NetBSD.org/pub/NetBSD/iso/6.1.3/ の iso ディレクトリ内の NetBSD-6.1.3-x68k.iso (約162MB) をダウンロードして c:\XM6i\NetBSD\ に置く。
もちろん、OSのバージョンは適宜読み替えてください。
インストールには数時間かかりますが、きっとうまくいくはず... です...
↓ちなみに失敗例
ううん?
— Lucky owner/capturer (@nullnilaki) 2017年2月18日
XM6iにNetBSD/68kのインストールに失敗した...
そういやパーティションの設定でエラー出てたけど、Go!Go!したからな...
というか、NetBSD/x68kってブートローダー無いのかな?
インストールしますか?って聞かれなかったような... pic.twitter.com/ULJT6dkW7c
無事インストールすることが出来ました!
NetBSD/x68k on XM6i Mac版
— Lucky owner/capturer (@nullnilaki) 2017年2月18日
キタ━━━━ヽ(゚∀゚ )ノ━━━━!!!! pic.twitter.com/zubKBxEWpP
失敗した原因は
⭐︎1回目のインストール時にパーティション切りでワーニングが出ていたにも関わらず、GoGoでインストールして失敗
— Lucky owner/capturer (@nullnilaki) 2017年2月18日
⭐︎1回目に作成したHDDイメージに対し再インストールして失敗
⭐︎HDDイメージを作り直して成功
って感じか...
です。
よって、ノリでインストールしなければ、インストールに時間はかかるものの問題無くNetBSD/x68k on XM6i Mac版の環境を楽しむことが出来ます!
Mac版XM6iのネットワークの設定は
Mac OS X 版では Nereid イーサネットエミュレーションのホスト側に bpf(4) を使用しており、ホストマシンを介して外部ネットワークとの通信が可能です。 ただし Mac OS X 側の制約によりホストマシン自身との通信は行えません
とあります。
Mac版のXM6iを試すような人にパソコンを一台しか持っていない人なんていないと思いますので、問題ないと思います。
"Mac OS X 版では Nereid イーサネットエミュレーションのホスト側に bpf(4)
— Lucky owner/capturer (@nullnilaki) 2017年2月19日
を使用しており、ホストマシンを介して外部ネットワークとの通信が可能です。
ただし Mac OS X 側の制約によりホストマシン自身との通信は行えません"
こういう事か! pic.twitter.com/rzexEGyU2d
ああ・・次はpkgsrcだ...