Window PC 上の Linux で GrADS と Fortran を使おう(WSL2版)
はじめに
Windows 10 には WSL (Windows Subsystem for Linux) と呼ばれる機能がある。
これはWindows OSとアプリケーションプログラムの中間に位置するミドルウエアの
一種で、Windows上でLinuxのネイティブプログラムの実行を可能にするものである。現在、WSL には WSL(以下 WSL1 と表記)と WSL2 の2つが存在し、これらは仕組みが根本的に異なる。
WSL1の方は別記事で既に述べたように、LinuxのシステムコールをWindowsのAPIに変換する変換サブルーチン群を用意することで、Linux用のバイナリプログラムを実行可能にしていたが、WSL2では仮想マシンの技術を用いてLinux OS そのものが完全な形で Windows 上で動くことを目指している。実際 Windows 11 上では X window system を利用する GUI アプリケーションを(別途 X serever プログラムを用意することなく)Windows上で実行することが可能である(この機能は WSLg と呼ばれている)。
ここでは、WSL2の機能を用いて、Windows PC 上で grads や gfortran を使う方法について簡単に説明する。
なお、以下の作業を行う前に、Windows のバージョンをできるだけ新しいものにしておく方が良い(23H2等)。
Windows Subsystem for Linux の有効化
WSLの機能は、デフォルトでは有効になっていないので、
最初にこれを有効化しなくてはならない。
具体的にはWindowsのコマンドプロンプトを管理者権限で立ち上げて以下のコマンドを実行する。
> wsl --install
あるいは
> wsl --install -d Ubuntu-20.04
等と入力して実行してもよい(-d オプションによりWSL上にインストールするLinuxのディストリビューション名を指定する。-d をつけなければデフォルトで利用可能な Ubuntu LTS の最新版がインストールされる。利用可能なディストリビューション名は事前に wsl --list -o を実行することで調べられる)。
WSLを有効化すると、再起動が要求されるので PC を再起動する。
再起動後には Ubuntu LTS のターミナルが自動で立ち上がり、インストールが始まる。途中でデフォルトユーザーのユーザー名とパスワードが要求されるので予め考えておくと良いだろう。
再起動後の Ubuntu のインストールの途中に
WslRegisterDistribution faild with error : 0x80370102
の表示が出て中途終了した場合は、CPU の仮想化機能が BIOS 等で無効化されている可能性があるので、BIOS(UEFI)の設定で有効化する(BIOS設定の方法はメーカごとに異なるので適宜調べるか、PCに精しい人に聞いてください)。
Ubuntu のインストールが正常終了してコマンドプロンプトが表示されれば、最初に行うことは、アップデート作業である。以下のコマンドを実行し、終了するのを待つ(しばらく時間がかかる)。
$ sudo apt update
$ sudo apt upgrade
アップデートが終われば、次のコマンドを実行して X11 関連のプログラムをインストールする。
$ sudo apt install x11-apps x11-utils x11-xserver-utils
Windows 11 の場合は、ここまでで既に WSLg が有効になっていて、GUI アプリケーションが使える状態になっている筈である。次のコマンド
$ xeyes &
を実行して目玉が二つ表示されることを確認し、「Linuxの設定とソフトウエアのインストール」の項目に進む。
Windows 10 の場合は WSLg の機能は実装されていないので、次の「X サーバーのインストール」を実行する。
Xサーバーのインストール
Windows 10 の場合は、Linuxディストリビューションをインストールしたら、作業を一旦中断し、XサーバープログラムをWindowsに導入する。
これは現段階(2021年12月)では Windows 10 にはまだ WSLg の機能が実装されていないからである。
勿論既にXサーバープログラムを持っていれば、(あるいは Windows 11 の場合は)この作業は必要ない。
無料で利用可能なXサーバープログラムは幾つかあるが、VcXsrvが良いようである。
具体的な導入手順はこの記事を参考にする。
インストール場所等はデフォルトのままで良いが、「XLaunch」をクリックした際の設定については多少注意が必要である。
最初の二つ(Select display settings と Select how to start clients)はデフォルトのままで良いが、3番目の「Extra Settings」については「Disable access control」の項目にチェックを入れる(WSL1の場合は必要ない)。
また、「Display 環境変数」の設定は次のようにする。
まず、Ubuntu のターミナルで ipconfig.exe (WSL上のLinuxでWindowsコマンドを実行する場合は .exe を付ける)を実行し、Windows が動いているホストコンピュータの IPv4 アドレスを調べ、それを用いて
$ export DISPLAY=xx.xx.xx.xx:0.0
により DISPLAY 環境変数を設定する(xx.xx.xx.xx はホストコンピュータの IPv4 アドレス)。この状態で xeyes を
$ xeyes &
により起動して目玉が表示されれば O.K. である。
このとき Windows Deffender の firewall が X server へのアクセスを許可するかどうかを訪ねてくることがあるので、適宜許可する。
以上が上手くゆけば、設定を自動化するために以下のコマンドを .bashrc の末尾に記述しておく。
export DISPLAY=$(ipconfig.exe | grep "IPv4" | head -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")'):0.0
この様にしなくてならない理由は、WSL1 の場合には、WSL 上の Linux アプリケーションは、他の Windows アプリケーションと同様にホストコンピュータ上で実行されているとみなされるのに対し、WSL2 では Linux はホストコンピュータとは別の仮想マシンとして実行されており、Windows 内部の仮想ネットワークを通じてホストコンピュータと繋がっているとみなされるからである。
Linuxの設定とソフトウエアのインストール
- 日本語環境のインストールと設定(Ubuntuの場合)
$ sudo apt install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8
$ sudo apt install manpages-ja manpages-ja-dev
$ sudo apt install nkf
インストール後一旦 Ubuntu を終了し、再び起動すれば、日本語表示になっている筈
(参考記事)。
- 開発ツールのインストール(Ubuntuの場合)
$ sudo apt install build-essential
$ sudo apt install gfortran
これで gfortran が使えるようになる。
ただし、PATH や LD_LIBRARY_PATH 等は適宜設定する。
(Intel Fortran を入れることも可能。別記事参照)
gradsのインストール
Ubuntuの場合、grads のパッケージがあるので、インストールは次のコマンド一発でO.K.
(環境変数の設定は必要なく、共有ライブラリも自動で入る)
$ sudo apt install grads
その他のディストリビューションの場合は、grads の本家からバイナリーの .tar.gz
ファイルをダウンロードして適当なディレクトリに展開し、環境変数を設定する。
(環境変数設定の例)
export PATH=${PATH}:/usr/local/grads/bin
export GADDIR=/usr/local/grads/data
export GASCRP=/usr/local/grads/scripts
export GAUDPT=/usr/local/grads/data/udpt
Ver 2.0.2 以前のバイナリは必要なライブラリを静的にリンクしているので、
本体のバイナリがあれば動く。
それより新しいバージョンでは動的リンクが使われているので、
幾つかの共有ライブラリのインストールが必要になる。
詳細は本家のHP参照。
その他
インストールされたLinuxディストリビューションのファイルシステムとWindowsのファイルシステムの相互参照
Linux側からは /mnt/c ディレクトリ経由でWindowsのCドライブにアクセスできる。
Windows側からLinuxのディレクトリにアクセスする場合は、エクスプローラやコマンドプロンプト、PowerShellなどで「\\wsl\ディストリビューション名」を指定すれば良い。