Sokratesさんの備忘録ないし雑記帳

書きたいことを書いている.駄文注意.

SATySFi インストールチャレンジ in Windows Subsystem for Linux

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 という冷戦の雪解けの象徴である[とても要出典].ディストリビューションについては UbuntuDebian など複数与えられている.

この記事では WSLを使えるようにしてから,SATySFi をインストールするまでの最短経路(たぶん)を紹介する.

Windows Subsystem for Linux を使えるようにする.

WSL を使えるようにする.この工程は大きく分けて2つある.

  1. WSL を使用できるように設定を変える.
  2. ディストリビューションを決める.

これは基本的には公式ドキュメント Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs の「手動インストール」にしたがえば何とかなる*2

しかし,ここでは公式ドキュメントとは違い GUI で済ませられるところは GUI で済ませる方針で行く*3

WSL を使用できるように設定を変える.

Windows の機能の有効化または無効化 というところから WSL を使用できるように設定を変えることができる.
方法は

  1. 「設定」をスタートメニューなどから開く.
  2. Windows の機能の有効化または無効化 を検索窓から検索する.
  3. 立ち上がったウィンドウのなかのチェックボックスから「LinuxWindows サブシステム」にチェックを入れる.もし,この時点でそもそもそのような項目が見つからなかった場合,Windows のバージョンが足りていない可能性が高い*4
  4. 再起動する.

ディストリビューションを決めてダウンロードする.

ディストリビューションMicrosoft Store から好きなディストリビューションをダウンロードする.

私が試したのは UbuntuDebian のみなので,この記事の方法に従う場合は,そのどちらかを選ぶのを推奨する.

ディストリビューションのインストールが完了すると,スタートメニューにそのディストリビューションのアイコンが現れる.そのアイコンをクリックすれば,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 を使う人にとって,この記事が全く役に立たないことはないはずである.

以下では,UbuntuDebian をインストールしたとして話を進める.

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 を違う方法でインストールしているが,現在の UbuntuDebian では apt から手に入れたほうが早いのでそうする.

Opam を設定する(鬼門)

ここが最大の鬼門である.

Opam というのは OCaml のパッケージマネージャである.SATySFi は大部分*5OCaml によって書かれているために 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:使うディストリビューションUbuntuDebian を仮定する.

*2:公式ドキュメントが分かりにくいのはある.

*3:画面のスクリーンショットは撮るの忘れた.すいません.

*4:Windows 10 のダウンロード から Update Assistant をダウンロードし,最新版の Windows を手に入れよう.

*5:というか GitHub の言語の割合を見る限り全部 OCaml と考えられる.

*6:ごめんなさい.ここはわからないまましゃべっている.詳しいことは *nix 向け SATySFi インストールバトル手引き 2020年10月版 - Qiitabuild 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:こっちはエラーをよく読むとエラーの理由がすぐわかるので,比較的解決しやすい.