GrADSをCentOS8で使う

# はじめに

Grid Analysis and Display System (GrADS)  
これ、気象データを扱う人なら使ったことがある（使っている）人が非常に多いソフトなんじゃないかと思います。  
ところが、最近CentOS8がリリースされて、[COLA](http://cola.gmu.edu/grads/downloads.php)からダウンロードする本家本元のGrADSがうまく動かなくなってしまいました（少なくとも私は...）  
今回、[OpenGrADS](http://opengrads.org/)から提供されているバンドル版のGrADSであれば、CentOS8でも無事動作したので、備忘録として残しておきます。

# バイナリーのダウンロード

バイナリーは、[Sourceforge](https://sourceforge.net/projects/opengrads/files/grads2/)からダウンロードします。  
今回は、最新バージョン（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に必要なライブラリを指定するようなラッパーコマンドを作ってこの問題を回避します。  

作ったラッパーコマンドは以下になります。

```bash
#!/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](https://github.com/ykatsu111/jupyter-grads-kernel)使えば、jupyter 上でgrads 使えますし、ネットワーク越しでも動きが軽いですしね。