aarch64のJuliaでadd Plots

# What's This?

`aarch64`上の`Julia`で`Plots`をインストールしようとしたらハマったのでその解決法をまとめたものです.
次の2点でつまずきます.

- メモリー
- `GR`のインストール

1つめの問題は原因を特定するまでに時間がかかりましたが, 十分なメモリーさえ確保できればよいので, 解決できるかどうかの判断は簡単です.

2つめはOSによって対処方法が異なるので少し大変です.


# メモリー不足問題
2021年2月16日現在, `Plots`のビルドには結構メモリーを必要とするようで, **大体4GBないと失敗します**.
今のところ, メモリーが4GB未満のマシンで`Plots`をインストールする方法を僕は知りません.

# `GR`のインストール

2021年2月16日現在, `Debian`系ではないOSを利用している`aarch64`上のJuliaに`Plots`をインストールしようとすると次のように`GR`のインストールでつまづきます.
`Debian`系ではこの問題は起きません.

```julia

julia> import Pkg
julia> Pkg.add("Plots")
(略)
   Building GR → `~/.julia/packages/GR/G9I5v/deps/build.log`
┌ Error: Error building `GR`:
│ tar (child): downloads/gr-0.54.0-Linux-aarch64.tar.gz: open 不能: No such
file or directory
│ tar (child): Error is not recoverable: exiting now
│ tar: Child returned status 2
│ tar: Error is not recoverable: exiting now
│ [ Info: Downloading pre-compiled GR 0.54.0 Linux binary
│ ┌ Error: Download failed: curl: (22) The requested URL returned error: 404
│ └ @ Base download.jl:43
│ ┌ Error: Download failed: curl: (22) The requested URL returned error: 404
│ └ @ Base download.jl:43
│ [ Info: Using insecure connection
│ ┌ Error: Download failed: curl: (22) The requested URL returned error: 404
Not Found
│ └ @ Base download.jl:43
│ [ Info: Cannot download GR run-time
│ ERROR: LoadError: failed process: Process(`tar xzf
downloads/gr-0.54.0-Linux-aarch64.tar.gz`, ProcessExited(2)) [2]
│
│ Stacktrace:
│  [1] pipeline_error at ./process.jl:525 [inlined]
│  [2] run(::Cmd; wait::Bool) at ./process.jl:440
│  [3] run(::Cmd) at ./process.jl:438
│  [4] top-level scope at
/home/hogehoge/.julia/packages/GR/G9I5v/deps/build.jl:164
│  [5] include(::String) at ./client.jl:457
│  [6] top-level scope at none:5
│ in expression starting at
/home/hogehoge/.julia/packages/GR/G9I5v/deps/build.jl:98
└ @ Pkg.Operations
/buildworker/worker/package_linuxaarch64/build/usr/share/julia/stdlib/v1.5/Pkg/src/Operations.jl:949
```

この理由は簡単で, `aarch64`用の`GR`のバイナリは`Debian`しか用意されていないためです.
手動でインストールされた`GR`がある場合, Juliaの`GR`パッケージはを使うようになっているので, `GR`を手動でインストールすれば上のようにつまづくことはなくなります.

ここでは, `RHEL`系OSでの対応を説明します.
他のディストリビューションでもやることは大体同じだと思います.

## 依存パッケージのインストール
`GR`のビルドに必要なパッケージをインストールします.

```
$ sudo yum groupinstall "Development tools"
$ sudo yum install libXt libXrender libXext mesa-libGL qt5-qtbase-gui libpng-devel libjpeg-turbo-devel freetype-devel
```

これらに加えて`qhull`が必要になるのですが, これがどうも`yum`にはないようなので, 手動でインストールします.
大体, こんな感じです.

```
$ wget http://www.qhull.org/download/qhull-2020-src-8.0.2.tgz
$ tar -zxvf qhull-2020-src-8.0.2.tgz 
$ cd qhull-2020.2/
$ make
$ export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
$ make test
$ sudo make install
```

詳しくは[Qhullの公式](http://www.qhull.org/)を見てください.

`.bashrc`を編集して, `$HOME/qhull-2020.2/lib`を`LD_LIBRARY_PATH`に加えておきます.

```
export LD_LIBRARY_PATH=$HOME/qhull-2020.2/lib:$LD_LIBRARY_PATH
```

## `GR`のビルド

`GR`のmakeには`cmake` 3.1以上が必要になるので注意してください.
普通に`yum`で`cmake`をインストールすると, `cmake v2`がインストールされます.

```
$ git clone https://github.com/jheinen/gr
$ cd gr
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
```

最後に, `.bashrc`に`LD_LIBRARY_PATH`に`GR`を追加します.

```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/gr/lib64
```

これで`GR.jl`のビルドがうまくいくようになり, `Plots`のインストールもうまくいくはずです.

ちなみに`v0.53`以前の`GR.jl`では`Debian`系でも失敗します.
`build.jl`の`os`名の取得部分を`id = get_os_release("ID")`を`id = get_os_release("ID_LIKE")`に書き換えるか(多分), 上のように`GR`を手動でインストールする必要があります.