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> 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の公式を見てください.
.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
を手動でインストールする必要があります.