(メモ) ArchLinux に Scilab をインストールする際にハマるポイント

# 序

Scilab の用途を知っていて ArchLinux を既に使っている方は序章をすっ飛ばしてかまいません。

## そもそも[Scilab](https://www.scilab.org/) って何?

商用数値解析アプリ [MATLAB](https://jp.mathworks.com/products/matlab.html) みたいなもの。[GNU Octave](https://www.gnu.org/software/octave/) も同類。私自身は MATLAB を使ったことがないので本当にそうなのかはわかりかねますが、ちょっと調べてみたら Octave は MATLAB クローンを目指していて、Scilab のほうはそこまで互換性を求めていない感じらしい。[^scilabの特徴]
本家 MATLAB はここ最近、無料の Octave や Scilab に追い上げられているので、自動車/ロボット/半導体製造/通信キャリアといった金を持っている企業向けの設計/プロトタイピング/テスト用プラグインに注力している模様。

そして カテゴリ的には [R](https://www.r-project.org/) を代表とする[統計処理ソフト群](https://sites.google.com/site/statinfra/comparison)も似たようなもの。[^余談]

数値解析ソフトはリアルタイム処理が必要な工業系、統計処理ソフトはデータベースからデータを持ってくるバイオ系/人文科学系御用達ってところですかね。

[^scilabの特徴]: 最大のポイントは、GUI が Javaベース、ってこと。
[^余談]: ここ10年で無料の R が主流になったせいで、商用統計処理ソフトはもう完全に瀕死の状態ですな・・・


## ArchLinux ってどんなディストリ?

詳細は[日本語公式](https://www.archlinux.jp/)を見てください。
以下、個人的な感想

- とにかく軽い[^1]
- 適度なローリングアップデートでOSS新バージョンへの対応が早い[^2]
- メジャーなアプリ/ライブラリに関してはコンパイル不要でサクサクアップデート可能[^3][^4]


[^1]: systemd-analyze time コマンドによる計測で 10秒台がザラ。リモートファイルシステムを自動マウントしない、といった起動プロセスのシェイプを施せば5秒台なんて場合も。
[^2]: ミニマリズム、という同じポリシーを持つものの、「枯れた技術」で安定性を重視する Slackware より良い点(私にとって)
[^3]: gcc とか llvm のコンパイルで多大な時間を浪費させられる Gentoo よりも圧倒的に良い点
[^4]: マイナーなものに関しては [AUR](https://aur.archlinux.org/) から git 経由でソースダウンロード、コンパイル、パッケージ作成、インストール という手順を踏む必要があるものの、コマンド一発で終了するので面倒ではない。

## なぜ ArchLinux に Scilab を入れようと?

R と Octave を使ったことはあったのですが、Scilab を使ったことはなかったので、比較・評価してみよう、という安易な考えでした。・・・


# ArchLinux に Scilab をインストールする

R や Octave は純正パッケージに登録されているけれど、Scilab は純正パッケージに登録されていないので、AUR からパッケージ作成用ファイル群をダウンロードして、自分でパッケージをコンパイルする。これが地獄の始まりだった。

```shell-session
[hoge@fuga ~]$ git clone https://aur.archlinux.org/scilab.git
(git の出力省略)
[hoge@fuga ~]$ cd scilab
[hoge@fuga scilab]$ makepkg -si
(以下、エラーメッセージ多数)
[hoge@fuga scilab]$
```

## ハマりポイントその1: 依存関係多すぎでビルドまでたどり着かない・・・

ArchLinux のパッケージをビルド→インストールしようとする際、依存していて未インストール状態のプログラム/ライブラリが純正パッケージに登録されている場合は素直にインストールしてくれる。ただし、AUR にしか登録されていないライブラリに依存している場合は、そちらのパッケージも自前でコンパイルする必要が出てくる。結局、Scilab のためだけに新たに12,3個ライブラリをビルドした。[^依存]

[^依存]: それにしてもなんで Java とか Ocaml まで必要になるんだよ(怒り)。Java は予めインストール済みだったし、Ocaml は純正パッケージが存在するからまだ良しとしようか(だから純正パッケージになっていないんだな・・・)

## ハマりポイントその2: コンパイルに時間がかかりすぎる・・・

今回インストールした環境は gcc のコンパイルに2時間弱もかかる貧弱 VMWare 仮想マシンですが、gcc よりも多くの時間(2.5時間)かかりりました。ArchLinux を使う意味が失われる・・・

## ハマりポイントその3: 起動しねぇ(第1段階)・・・

```shell-session
[hoge@fuga ~]$ scilab
(libjava.so が見つからない、という内容のエラーメッセージ)
[hoge@fuga ~]$
```

ああ、そうですか・・・こういうことでしょ?

```shell-session
[hoge@fuga ~]$ cat | sudo tee /etc/ld.so.conf.d/java.conf
/usr/lib/jvm/default-runtime/lib
[hoge@fuga ~]$ sudo /sbin/ldconfig
[hoge@fuga ~]$ source /etc/profile
[hoge@fuga ~]$ scilab
(libjvm.so が見つからない、という内容のエラーメッセージ)
[hoge@fuga ~]$
```

ファッ!

```shell-session
[hoge@fuga ~]$ find /usr/lib/jvm/default-runtime -name libjvm.so
/usr/lib/jvm/default-runtime/lib/server/libjvm.so
[hoge@fuga ~]$ cat | sudo tee -a /etc/ld.so.conf.d/java.conf
/usr/lib/jvm/default-runtime/lib/server
[hoge@fuga ~]$ sudo /sbin/ldconfig
[hoge@fuga ~]$ source /etc/profile
[hoge@fuga ~]$ scilab
(不正なリフレクトが発生したから JVM がメインクラスを作成できねぇよ! という内容のスタックトレースが長大なエラーメッセージ。)
[hoge@fuga ~]$
```

なんじゃこりゃ・・・

## ハマりポイントその4: 起動しねぇ(第2段階)・・・

ん？もしかして

### Java on ArchLinux

- OpenJDK 7-10 まで幅広く対応。
- 複数メジャーバージョンをインストールしておいて、選択可能。
- 専用の archlinux-java コマンドでデフォルトのバージョンを設定可能

Scilab をインストールした環境に入っている Java は Java9 のみ。

```shell-session
[hoge@fuga ~]$ sudo pacman -S jre8-openjdk jre8-openjdk-headless
(インストール)
[hoge@fuga ~]$ sudo archlinux-java set java-8-openjdk
[hoge@fuga ~]$ scilab
(初回起動のせいか時間はかかったもののなんとか起動)
[hoge@fuga ~]$
```

# まとめ
- Scilab 6.0.x を実行するためには Java8 必須。
- 最終的に、Octave 使ったほうが環境構築面では圧倒的に楽。
- 起動確認までしかしていないので、言語の習得、パフォーマンス評価等は一切してない。