Windows Subsystem for Linux に SATySFi をインストールをする機会がここ数週間の間になぜか複数回あった.この記事はそれらの経験からわかった Windows Subsystem for Linux に SATySFi をインストールをする方法をまとめたものである.
たぶんこれが一番早いと思います*1.
問題の背景
SATySFi とは組版処理システムの一種で,諏訪敬之しによって,IPA の未踏IT人材発掘・育成事業(2017)の支援の下に開発された.SATySFiは静的型付けにより,組版処理の前段階での詳細でわかりやすいエラー報告を実現しているらしい[要出典]。SATySFi はその高性能さと並んで,インストールがパソコン初心者には難しいことでも知られている[要出典].
Windows Subsystem for Linux (以下 WSL )とは Windows の中でサーバー版 Linux (に限りなく近いもの)を動かそうという意欲的なシステムで,Micrsoft vs Linux という冷戦の雪解けの象徴である[とても要出典].ディストリビューションについては Ubuntu や Debian など複数与えられている.
この記事では WSLを使えるようにしてから,SATySFi をインストールするまでの最短経路(たぶん)を紹介する.
Windows Subsystem for Linux を使えるようにする.
WSL を使えるようにする.この工程は大きく分けて2つある.
- WSL を使用できるように設定を変える.
- ディストリビューションを決める.
これは基本的には公式ドキュメント Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs の「手動インストール」にしたがえば何とかなる*2.
しかし,ここでは公式ドキュメントとは違い GUI で済ませられるところは GUI で済ませる方針で行く*3.
WSL を使用できるように設定を変える.
Windows の機能の有効化または無効化 というところから WSL を使用できるように設定を変えることができる.
方法は
ディストリビューションを決めてダウンロードする.
ディストリビューションは Microsoft Store から好きなディストリビューションをダウンロードする.
私が試したのは Ubuntu と Debian のみなので,この記事の方法に従う場合は,そのどちらかを選ぶのを推奨する.
ディストリビューションのインストールが完了すると,スタートメニューにそのディストリビューションのアイコンが現れる.そのアイコンをクリックすれば,WSL が立ち上がる.初回はユーザー名とパスワードを求められるので,適当に入力してしまおう.
SATySFi インストールチャレンジ in Windows Subsystem for Linux
WSL が使えるようになったら,いよいよ SATySFi インストールチャレンジの開始である.
本来は WSL 2 を使うことを推奨されているが,WSL 1 でも動くので,この記事では WSL 1 で動かすことを考える.WSL 2 から Windows 側のファイルを編集することが非推奨とされていることを考えると,WSL 1 で動かせる限りは WSL 1 で動かしたほうが良いという発想である.とはいえ,おそらく WSL 2 でもほぼ同じ方法(一か所だけ異なる)でインストールができると考えられるので,WSL 2 を使う人にとって,この記事が全く役に立たないことはないはずである.
以下では,Ubuntu と Debian をインストールしたとして話を進める.
SATySFi のインストールに必要なツールのダウンロード
まず,SATySFi のインストールに必要なツールのダウンロードを行う.次のコマンドを入力する.
sudo apt update sudo apt install build-essential git m4 unzip curl make wget opam
最初のコマンドの実行時にパスワードの入力を求められるはずなので,WSL を最初に立ち上げたときに決めたパスワードを入力する.
公式ドキュメント GitHub - gfngfn/SATySFi: A statically-typed, functional typesetting system だと Opam を違う方法でインストールしているが,現在の Ubuntu や Debian では apt から手に入れたほうが早いのでそうする.
Opam を設定する(鬼門)
ここが最大の鬼門である.
Opam というのは OCaml のパッケージマネージャである.SATySFi は大部分*5 が OCaml によって書かれているために Opam が必要である.
しかし,WSL 勢にはこの Opam の設定が難しい.だって,公式ドキュメント通りにやってもうまくいかないのだもの.しかもエラーを見てもいまいちなぜだめなのかよくわからない.
どうも原因は WSL 1 では bwrap によるサンドボックスが上手く動かないことにあるらしい*6.WSL 2 では解決した問題らしいが,ここではあくまでも WSL 1 で頑張ることにする.
先に述べた理由から,Opam のインストールが終わったらその初期設定を
opam init --comp 4.10.0 --disable-sandboxing
というコマンドによって行う.最後のオプションはサンドボックスを切るためのオプションである*7.SATySFi は 2021 年 2 月 4 日現在,OCaml 4.10.0 を使うことを求められているので,--comp 4.10.0 をつける(これを外すと古いバージョンがインストールされてしまうので必須).
このコマンドの実行中いくつか入力を求められるがよくわからない場合はすべて y
を選択すればよい.
その後
eval $(opam env) opam repository add satysfi-external https://github.com/gfngfn/satysfi-external-repo.git opam update
を実行して,SATySFi をインストールできる状態にする.
Opam の設定がうまくいかなかったら
この時点で,
ocaml --version
を実行して
The OCaml toplevel, version 4.10.0
と表示されなかったら,どこかでミスをしている.
この場合はあまり良い方法ではないと思うが,
rm -rf ~/.opam
して opam 関連の諸々を初期化し,この節の最初からやり直しである.
この方法だと,opam 関連のファイルごとすべて吹っ飛ばしているので,他のことに opam を使っている人は使えない方法であるが,この記事に救いを求める人にそういった人はいないと考えられるので気にしないことにする*8.
SATySFi をインストールする
ここから先は一か所を除いて,公式ドキュメント通りに進めれば,上手くいく.
まず,
git clone https://github.com/gfngfn/SATySFi.git
または
git clone git@github.com:gfngfn/SATySFi.git
をして,GitHub に公開されている SATySFi のレポジトリをクローンする.Git を初めて使う人は前者を使えばよい*9.
クローンしてきた SATySFi というディレクトリに
cd SATySFi
して入る.そして,
opam pin add satysfi . opam install satysfi
をすると,SATySFi が build される.
ここまでで,SATySFi はインストールされているわけだが,使い始める前に
./download-fonts.sh sudo ./install-libs.sh
をしてほしいそうなのでそうする.ただし,後者のスクリプトは sudo 権限がないと触れないディレクトリを触るので,公式ドキュメントには書いていないが,sudo 権限で実行する*10.
demo が動くか確認する.
ここまで来たらほぼ勝利も同然であるが,勝利したことの確認のため demo を動かしてみる.
cd demo make ls
をして, demo.pdf
が生成されていることを確認できれば勝利確定である.
まとめ
WSL 1 勢が気を付けなければならないのは
opam init
するとき,--comp 4.10.0 --disable-sandboxing
というオプションを忘れないこと.
である.SATySFi インストールチャレンジ成功者が一人でも多く増えることを望む.
*1:使うディストリビューションは Ubuntu と Debian を仮定する.
*2:公式ドキュメントが分かりにくいのはある.
*4:Windows 10 のダウンロード から Update Assistant をダウンロードし,最新版の Windows を手に入れよう.
*5:というか GitHub の言語の割合を見る限り全部 OCaml と考えられる.
*6:ごめんなさい.ここはわからないまましゃべっている.詳しいことは *nix 向け SATySFi インストールバトル手引き 2020年10月版 - Qiita や build ocaml-base-compiler fails on versions 4.02-4.08 (`opam switch create . 4.06.1`) · Issue #12050 · ocaml/opam-repository · GitHub を参照してほしい.
*7: WSL 2 を使っている人にはおそらく必要のないオプション.
*8:居たらごめんなさい.
*9:最近は http を使って Git Hub にアクセスすることは非推奨らしいが
*10:こっちはエラーをよく読むとエラーの理由がすぐわかるので,比較的解決しやすい.