WSL2 の Ubuntu20.04上に WRF(Weather Research and Forecasting Model) の環境を構築

# 更新
2024.1.4現在の情報を[別記事](https://qiita.com/TrtlGard/items/6ff6fb713af77546dc69)に書きました。本記事と合わせて参照ください。

# はじめに
WRF(Weather Research and Forecasting Model) を動かす環境を Windowsの WSL (Windows Subsystem for Linux) 上に作ってみましたので紹介します
私は気象関係には素人ですが気象を勉強している大学生に頼まれて構築してみました
WRFの情報はネット上にいろいろありますが下記の通り環境構築は容易ではないと感じました

* 10年以上前の情報が多い
* 日本語のサイトも多いが、詳細はWRF本家の英語サイトを参照となっている。しかし本家のサイトはバージョンが上がっていて、リンク切れになっているものが多い
* WRFはいくつかのプログラムを実行する構成になっており、各プログラムはソースプログラムをダウンロードしてビルドしなければならず、必要なライブラリもダウンロード＆ビルドすることになり、Linux上の構築作業に慣れていないと容易ではない。

以下には、ソースプログラムからのビルドに慣れていない方でもWRF実行環境を構築できるように手順を書いてみました。参考になると幸いです。

【2022.8.4 追記】２月にこの記事を記載した以降に各種プログラムが更新され、記載したシェルプログラムやコマンド通りには動かなくなりました。最近になって一括インストールできるシェルプログラムを最新化されて公開されている方のサイトを見つけましたので、そのプログラムを主に使うように記載内容を大きく変更しました(WRF関連のインストール部分)。今後も同様に各種プログラムの更新でインストールできなくなる可能性がありますが、その方の最新のプログラムを使うことで問題が少なくなるのではと思います。

# 目次
1.環境と構築のポイント
2.WSL2とUbuntu20.04インストール
3.GUI環境（RDP）設定
4.WRFプログラムインストール
5.気象データダウンロード　　（[記事その２](https://qiita.com/TrtlGard/items/5e87f89cb030845e035a)参照）
6.WRF実行　　　　　　　　　（[記事その３](https://qiita.com/TrtlGard/items/2c1aac285b666e653db2)参照）

* ３回に分けて記載しました
 * その１：本記事
 * その２：[WSL2 の Ubuntu20.04上に WRF の環境を構築　その２　気象データ(FNLデータ)ダウンロード]( https://qiita.com/TrtlGard/items/5e87f89cb030845e035a)
 * その３：[WSL2 の Ubuntu20.04上に WRF の環境を構築　その３　WRFの実行](https://qiita.com/TrtlGard/items/2c1aac285b666e653db2)


# 1.　環境と構築のポイント
## 環境
下記環境でインストール＆実行しました。多くのデータの分析にはもっと良い環境のほうが良いと思いますが、とりあえずは動いています

* CPU : Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz   2.70 GHz
* 8GB memory
* 256GB SSD
* Windows 10 Pro  バージョン21H1　（Windows 10 Home でも問題ないと思います）

## 構築ポイント

* Linux環境としてはWindows上に用意しやすい、WSL(Windows Subsystem for Linux) を用いた
* WRF関係の各種プログラム・各ライブラリを一括でダウンロード・インストールするシェルスクリプトがネットに載せられていたため利用させていただいた
* WRF結果を見るにはGUI画面が必要である。WSLをインストールしただけではコマンドラインインタフェースのみでGUI画面へのアクセス方法を用意する必要がある。WSLにはRDP（リモートデスクトップ接続）でつなぐようにしてGUI画面を使えるようにした
* 地図データと気象データが必要である。地図データは上記のWRFインストールシェルスクリプトでダウンロードされるが、気象データはこのシェルスクリプトではダウンロードされない。会員登録が必要な別サイトにて会員登録して入手した

# 2.　WSL2とUbuntu20.04インストール
多くの方がネットに情報を載せられていると思いますので参考にインストール願います
自分は、
https://www.kkaneko.jp/tools/wsl/wsl2.html
を参考にさせていただきました

* WSL設定　：　上記のサイトに記載されている通りに設定します
* Ubuntu 20.04.4 LTS インストール
 * Windowsの左下の検索窓で Microsoft Store を検索＆起動し、Ubuntu を検索し、Ubuntu 20.04.4 LTS をインストール。
   【2022.8.4　追記】20.04.4 が出ていましたので 20.04 から変更しました
 * インストール後、右上の”開く”で初期設定が始まる。
 * ユーザ名とパスワードを入力してインストール終了。（ここでは wrfuser というユーザ名にしました）

![microsoftstore01a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/bbb3edba-386b-cc1d-5ac5-1769c5d3233f.gif)

* 「入手」を押してインストール
![microsoftstore02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/c0ec8a87-071a-b051-f03e-5e696645adbb.gif)

* 「開く」を押して、コマンド画面にてユーザ名・パスワードを入力。ユーザ名はwrfuserとした。
![microsoftstore04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/2d0bf19a-356a-4f86-14f8-8d2333bfabaa.gif)


# 3.　GUI環境（RDP）設定
GUI画面を使えるようにするには X端末を用いる方法もあると思われますが、ここでは新たな端末ソフトを入れずに使える Windowsのリモートデスクトップ接続を用いることとしました
　https://qiita.com/atomyah/items/887a5185ec9a8206c7c4 
を参考にさせていただきました。「ubuntuにXRDPをインストール」の部分からをそのまま実施することでRDP接続可能になります。FireFoxのインストールとあわせてgeditもインストールするとよいです。また、途中の手順で vim エディタを使用されていますが、vim エディタの使用法がわからない場合の編集方法も下記の手順に記載します。
流れとして、以下の作業となります
* apt update と upgrade の実行。[sudo] password for ユーザ:　が出てきた場合はユーザのパスワードを入れてください
```
sudo apt update && sudo apt -y upgrade
```
* xfce4 のインストール。ここで gdm3を選択します（そのままenterキー押下）
```
sudo apt -y install xfce4
```

* xrdp のインストール
```
sudo apt-get -y install xrdp
```

* xrdp を設定して起動
```
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
echo xfce4-session > ~/.xsession

# startwm.sh の編集で vim の使用方法がわからない場合
sudo cp -p /etc/xrdp/startwm.sh /etc/xrdp/startwm.sh.bak
sudo sed -i -e 's/^test/#test/' /etc/xrdp/startwm.sh
sudo sed -i -e 's/^exec/#exec/' /etc/xrdp/startwm.sh
sudo sed -i -e '$ a \\n# xfce\nstartxfce4' /etc/xrdp/startwm.sh
```
* 次のコマンドでリモートデスクトップサービスを起動します。
```
sudo /etc/init.d/xrdp start
```
* wslの再起動が必要かもしれないとのことですので、その場合はWindowsのPowerShellで wsl --shutdown を実行します
* xrdpは ~/.bashrc の最後に以下の文を入れておくと再起動後の最初のログイン時に起動されます。（geditなどで編集します）
```
xrdp_count=`ps aux | grep xrdp | grep -v grep | wc -l`
if [ $xrdp_count = 0 ]; then
    echo "for xrdp"
    sudo /etc/init.d/xrdp start
fi
```
* ブラウザ firefox と エディタ gedit をインストールします
```
sudo apt -y install firefox gedit
```

* これでリモートデスクトップ接続できるようになりましたので、リモートデスクトップ接続アプリで localhost:3390 に接続します。リモートデスクトップ接続アプリは Windows左下の検索画面で リモートデスクトップ接続　と検索すると出てきます。
![リモートデスクトップ接続.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/352cd2f9-fb28-0218-c78e-c67cae902cf2.gif)

![remotedesktop01.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/96f82965-3a25-f20f-90c9-e261f8b9272f.gif)

* Ubuntu20.04.4 をインストールした際に作成したユーザ名・パスワードでログインします

![remotedesktop02.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/f74df58c-8807-dc3a-ceb0-89c761c2f44e.gif)
![remotedesktop03.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/72141aaa-a779-b22a-a0a2-cd2d8f901e7c.gif)

* 次に、リモートデスクトップ画面はちょっと放っておくとロックされてしまうようなので、Ubuntuの設定(Ubuntu画面の左上から)で　　Applications > Setting > Light Locker Settingsをすべてオフ（Never,Never,オフ,オフ) 　 にしました
![install_wrf41.sh8.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/98c3af4d-c555-72c3-f2c6-1557666a9562.gif)


その他、いくつか参考情報等を補足します（必須な作業ではありません）

* Ubuntu画面でコマンド操作をする Terminal Emulator を使うにはいくつか方法がありますが、例えば画面のどこかで 右クリックして Open Terminal Here を選択します
![remotedesktop04.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/b89e86d2-7890-a9c4-5a89-8deccc32c02d.gif)



* Ubuntu の Terminal Emulator や gedit ではバックカラーが黒いほうが好きなので色を変更しています
![install_wrf41.sh4a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/ed1356e0-a2c0-c11f-1a88-3bdf128ed371.gif)


* Tera Term等の ssh 接続での端末エミュレータアプリも便利です（ログを取得する場合など）
    https://qiita.com/yuta-katayama-23/items/fad6928f37badf3391f2
を参考に SSH の設定・起動を行い、Tera Term等をネットからダウンロードしてインストールして接続しました。
なお、vim 操作がわからない場合の sshd_config 編集は下記などで可能です(PasswordAuthentication yesへの変更)

```
sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
```

　※sudo gedit /etc/ssh/sshd_config　を実行しようとしましたが sudo gedit は DISPLAY設定が検知されずgeditを起動できませんでした（未解決）

　IPアドレスが不明であれば、下記のページにある通り ip a で確認可能です
    https://qiita.com/neko_the_shadow/items/25b797cb436078b9e8


# 4.　WRFプログラムインストール
作業環境が整ったところで、本題のWRFのインストールです
前述したとおり、WRFのインストールにはその他にいくつものライブラリやプログラムのインストールが必要で複雑です。ネットには古い情報も含めていろいろとあり、現時点で正しくインストールするにはどうすればよいか悩んでいたところ、一括でインストールしてくれるシェルプログラムをgithub で見つけました。
同様なシェルプログラムはいくつかあるようですが、
(1) https://github.com/bakamotokatas/WRF-Install-Script
(2) https://gist.github.com/jamal919/5498b868d34d5ec3920f306aaae7460a
の二つを活用させていただきました。
(1) は、WRFの新しいバージョン追従するなど更新されているため、2022.8.1時点でほぼ問題なく動いています（後述の通り1点だけ修正しています）。(2)は古いままのためそのままでは動きません。ただ、(1)ではWRFの結果を表示させるツールなどが入りません。このため、(1)を主に利用し、さらに(2)の一部を抜粋および変更して利用させていただくことにしました。

* リモートデスクトップで Ubuntu に接続し、ブラウザ(FireFox)を起動して、
　https://github.com/bakamotokatas/WRF-Install-Script
にアクセスし、左下のWRF4.4_Install.bash をクリックします
![bakamotokatas.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/75d0e6a8-4c08-d407-03fe-a10df77eeecb.gif)

* 右上の RAW の部分で右クリックし、Save Link As...を選んで、その後の画面で保存します。
![bakamotokatas-2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/c3f95b08-4afc-a241-b8ec-c2dce6427f04.gif)
![bakamotokatas-3a.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527633/6bc4f083-93b7-d306-e7be-0fa5a60bda4e.gif)

* 2022年7月中旬には変更せずに動いていましたが、8月に試してみたところ、地図データを取得するサイトが https でのダウンロードに変更になっていました。したがって以下の変更を行います。
```
cd ~/Downloads
sed -i '115s/http/https/' WRF4.4_Install.bash
sed -i '214s/http/https/' WRF4.4_Install.bash
```

* 下記のコマンドでインストールします。実行には１～２時間かかります。なお、リモートデスクトップ接続した画面の Terminal で実行するか、Tera Termなどで実行してください。WSLのコマンド画面で実行すると途中で落ちます。表示される行数が多く、WSLのコマンド画面の上限に達しているのではと思います（確証はありません）。
```
cd ~/Downloads
bash WRF4.4_Install.bash

# [sudo] password for ユーザ:　が出てきた場合はユーザのパスワードを入れてください

# 最後に　Installation has completed　が出ていたら終了です
```

* 次に、WRFの結果を表示するためのツール GrADS や ARWPost.exe および WRFの前処理の WPS を実行するためのツール WRFDomainWizard をインストールするため、 https://gist.github.com/jamal919/5498b868d34d5ec3920f306aaae7460a のシェルの一部を活用させていただきます。下記のコマンドをシェルプログラムファイルとして作成して実行すると良いです。

```
cd ~/Downloads

# 下記のコマンド群を下記ファイル名で作成・保存します
gedit install_WRF_Others.bash

# 実行します
bash install_WRF_Others.bash
```
```
#!/bin/bash
# From install_wrf.sh
##  Download and install required library and data files for WRF.
##  License: LGPL
##  Jamal Khan <jamal.khan@legos.obs-mip.fr>

# grads install
sudo apt update
sudo apt -y upgrade
sudo apt -y install grads unzip default-jre

# ARWpost install
cd ~/Build_WRF
wget -c https://www2.mmm.ucar.edu/wrf/src/ARWpost_V3.tar.gz
tar -xvzf ARWpost_V3.tar.gz -C ~/Build_WRF
cd ~/Build_WRF/ARWpost
cd arch
cp Config.pl Config.pl_backup
sed -i '79s/.*/  $response = 3 ;/' Config.pl
cd ..
./clean
sed -i -e 's/-lnetcdf/-lnetcdff -lnetcdf/g' ~/Build_WRF/ARWpost/src/Makefile
./configure #3
sed -i -e 's/-C -P/-P/g' ~/Build_WRF/ARWpost/configure.arwp
./compile

# DomainWizard install
cd ~/Build_WRF
wget -c http://esrl.noaa.gov/gsd/wrfportal/domainwizard/WRFDomainWizard.zip
mkdir ~/Build_WRF/WRFDomainWizard
unzip WRFDomainWizard.zip -d ~/Build_WRF/WRFDomainWizard
chmod +x ~/Build_WRF/WRFDomainWizard/run_DomainWizard

# remove download file
cd ~/Build_WRF
rm geog_high_res_mandatory.tar.gz WRFV4.4.tar.gz WPSV4.4.TAR.gz ARWpost_V3.tar.gz WRFDomainWizard.zip

# rename WRF directory
cd ~/
mv Build_WRF WRF
ln -s WRF Build_WRF
```


* これでWRFを実行・結果を表示するためのプログラムのインストールはすべて終了になります。主に下記のプログラムを使います。
 *  geogrid.exe, ungrib.exe, metgrid.exe, WRFDomainWizard, real.exe, wrf.exe, ARWpost.exe, grads

* この後、気象データ(FNLデータ)をネットから取得して、WRFを実行することになります。その手順については後日掲載予定です。

* 繰り返しになりますが、WRFについての理解が十分ではないため、上記以外でより良いインストール方法があるかもしれません。まずは一通り実行できる環境の構築ととらえていただければと思います。また、間違いなどあればコメントいただけますと幸いです