Windows上で様々なOCaml開発環境ソリューションを試した後、最終的にWSLソリューションを選びました。
今後の参考のために簡単なメモです。
WSLを有効にします。
コントロールパネル] - [プログラムと機能] - [Windows の機能の有効化または無効化] - [Linux 用Windows Subsystem for Linux" - "OK" をクリックします。
Fedora システムイメージのダウンロード
実は、最初はCentOSをインストールするつもりだったのですが、インストールしてみると、このシステムには多くの問題があることがわかりました。システム全体が非常に固まりやすく、反応が鈍く、基本的にまったく使えません。
その後、死に物狂いでFedoraを試したところ、驚くほどうまくいきました。
チョコのインストール
公式サイトの指示に従って、PowerShellで以下のコマンドを実行します:
$ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://./.s1'))
LxRunOfflineのインストール
PowerShellで次のコマンドを実行します。
$ choco install lxrunoffline
LxRunOfflineを使ったFedoraのインストール
$ LxRunOffline install -n fedora -d ターゲットパス -f fedora-33-x86_64-20200709.tar.xz
- -nはインストールされたシステムの名前で、カスタマイズできます;
- -dはシステムがインストールされているディレクトリです;
- -f はダウンロードしたイメージのパスです;
Fedoraの起動
開始方法は以下の通り:
LxRunOffline run -n fedora
- wsl -d fedora
ユーザーの作成とデフォルトのログインユーザーの変更
WSL Fedora システムにアクセスし、パスワードの変更やユーザーの追加を行うことができます。
$ dnf install passwd
$ passwd # rootパスワードを変更する
$ adduser shixf
$ passwd shixf # 追加したユーザーのパスワードを変更する
$ vi /etc/sudoers
root ALL=(ALL) ALL
shixf ALL=(ALL) ALL # 次の行を追加すると、root権限を持つ新しいユーザーが作成される。
$ cat /etc/passwd # 新しいユーザーIDを見てメモしておこう!
PowerShellでのWSLデフォルトユーザーの変更
$ LxRunOffline su -n fedora -v 1000
WSLを再起動すると、新しいユーザーになります。
opam 依存関係の Fedora インストール
$ dnf install diffutils
$ dnf install git
$ dnf install rsync
opamのインストールと初期化
$ dnf install opam
$ opam init --disable-sandboxing # WSLサンボッキングを無効にしなければ、オパムを正しく初期化することはできない。
$ opam install merlin
$ opam install utop
$ opam install batteries
Emacsのインストール
$ dnf install dbus-x11 # WSL現時点で解決策は見つかっていない。
$ dnf install emacs
エックスサーバーのインストール
Emacsを正しく使うためには、WindowsにX Serverをインストールする必要があります。何度も試した結果、Cygwin Xの方が良いことがわかりました。
CygwinのWebサイトにアクセスし、インストーラをダウンロードしてください。 インストールの際、以下の Cygwin/X 関連パッケージにチェックを入れる必要があります:
- xorg-server
- xinit
- xorg-docs
- xlaunch
インストール後、以下のコマンドで X Server を起動できます。
$ C:\cygwin64\bin\XWin.exe :0 -multiwindow -listen tcp -noprimary
最後のステップは、X Server がローカルで起動したことを WSL に伝えるように WSL を設定することです。そのためには、環境変数 DISPLAY を 127.0.0.1:0 に設定します。ここでは、./bashが毎回自動的に環境変数を設定するようにするためです。
$ echo "export DISPLAY='127.0.0.1:0'" >> ~/.bashrc
$ source ~/.bashrc
Emacsの起動
まずX Serverを起動し、WSLで次のように入力します。
この時点で、すべてが正しく設定されていれば、Emacsのプロセスを別ウィンドウで見ることができ、Emacsの設定はあなたに任されています!
幸運を祈ります!