はじめに
Grid Analysis and Display System (GrADS)
これ、気象データを扱う人なら使ったことがある(使っている)人が非常に多いソフトなんじゃないかと思います。
ところが、最近CentOS8がリリースされて、COLAからダウンロードする本家本元のGrADSがうまく動かなくなってしまいました(少なくとも私は...)
今回、OpenGrADSから提供されているバンドル版のGrADSであれば、CentOS8でも無事動作したので、備忘録として残しておきます。
バイナリーのダウンロード
バイナリーは、Sourceforgeからダウンロードします。
今回は、最新バージョン(2021年6月15日時点)の2.2.1.oga.1をダウンロードします。
当方環境は、lddのバージョンが2.28のLinux64bitなので、opengrads-2.2.1.oga.1-bundle-x86_64-pc-linux-gnu-glibc_2.17.tar.gz
をダウンロードしました。
なお、ダウンロードするバイナリーは、lddのバージョン以下のものを使わなければいけないそうです。
インストール
ダウンロードしたバイナリーを適当な場所に保存して展開します。
> cd /usr/local/src/opengrads
> tar zxvf opengrads-2.2.1.oga.1-bundle-x86_64-pc-linux-gnu-glibc_2.17.tar.gz
今回は、バイナリー版のGrADSなので、コンパイル済みの実行ファイルが/usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin
に既にあり、これを実行するだけでいいのではないか?と思うかもしれませんが、それをやってみると、
> cd opengrads-2.2.1.oga.1/Classic/bin
> ./grads
./grads: error while loading shared libraries: libgrib2c.so.0: cannot open shared object file: No such file or directory
となり、うまくいきません。
これは、単にLD_LIBRARY_PATHに実行に必要なライブラリの位置が示されていないためです。
実行に必要なライブラリは、opengrads-2.2.1.oga.1/Classic/bin/gex
にあるので、これをLD_LIBRARY_PATHに指定してあげればよいです。であれば、.bash_profile
に
export LD_LIBRARY_PATH=/usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex:$LD_LIBRARY_PATH
と追記しよう!と思うかもしれませんが、これをやってしまうと、他のプログラムが動かなくなります。
例えば、emacsを起動しようとすると、
> emacs -nw aaa.txt
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libz.so.1: version `ZLIB_1.2.9' not found (required by /lib64/libpng16.so.16)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /lib64/libwebkit2gtk-4.0.so.37)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /lib64/libwebkit2gtk-4.0.so.37)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /lib64/libwebkit2gtk-4.0.so.37)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by /lib64/libjavascriptcoregtk-4.0.so.18)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /lib64/libicuuc.so.60)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /lib64/libicui18n.so.60)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /lib64/libwoff2dec.so.1.0.2)
emacs: /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /lib64/libaspell.so.15)
あらゆるライブラリのバージョンが合わなくなり大量のエラーがでます。
今回は、gradsを実行するときだけ、gradsに必要なライブラリを指定するようなラッパーコマンドを作ってこの問題を回避します。
作ったラッパーコマンドは以下になります。
#!/bin/bash
export GA2UDXT=/usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/udxt
export GAUDPT=/usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex/udpt
export GADDIR=/usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/data
LD_LIBRARY_PATH=/usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/gex:$LD_LIBRARY_PATH /usr/local/src/opengrads/opengrads-2.2.1.oga.1/Classic/bin/grads "$@"
あとは、gradsという名前で保存して、実行権限を与えて、/usr/local/bin
のようなPATHの通ったところに配置すれば、grads
と叩けば今まで通りgradsを使えました。
なお、このラッパーコマンドのなかで、ついでに、gradsの実行に必要な定数データやUDPTについても設定しちゃっています。
おわりに
今回の方法が正解なのかはよく分かりませんが、とりあえず当方環境では動いたのでよしとします。
GrADSはいつまでサポート続くのかよく分からないので論文用の図はpython に完全に乗り換えましたが、やっぱりquick look はGrADS
が楽です。jupyter-grads-kernel使えば、jupyter 上でgrads 使えますし、ネットワーク越しでも動きが軽いですしね。