AlmaLinux

AlmaLinux は,いわゆるRedHat系のLinuxディストリビューションです.Red Hat Enterprise Linux (RHEL) は非常に有名なLinuxディストリビューションで,商用(有償)ですがその分サポートがつくということもあり,業務系のシステムで多く使われているようです.

一方,LinuxのカーネルパッケージはGPL (GNU General Public License) のもとで開発されているため,ライセンスの定めるところにより,RHELもまたそのソースコードが公開されていました.その公開されたソースコードを元にして,数多くのオープンソースのLinuxディストリビューションが開発されてきました.そのような一連のディストリビューションは,Red Hat系ディストリビューションと呼ばれています.

数多くのRed Hat系ディストリビューションのなかで,CentOS が長らくもっとも広く使われるディストリビューションであり続けました.しかし,2020年12月にCentOSの開発停止がアナウンスされ,2024年6月30日にはCentOS 7のサポートが終了しました.CentOSグループは新たにCentOS Streamというディストリビューションを公開していますが,これはRHELのテスト版のような位置づけであり,安定性に欠くため日常的な利用目的にはあまり推奨できません.

このような(やや混乱した)状況を受けて,CentOSサポート終了後の後継とみなされているRHEL互換のLinuxディストリビューションの一つがAlma Linuxです.以下ではAlmaLinux9.5で動作確認をしたビルド方法を紹介しますが,多くおRed Hat系のディストリビューションで同様にビルドできると期待されます.

AlmaLinuxにおけるビルド

AlmaLinuxのパッケージ管理システムは yumdnf ですが,デフォルトのパッケージ一覧の中には科学技術計算に関するライブラリ群が十分に含まれていません.そこで,まず Extra Packages for Enterprise Linux (EPEL) リポジトリを有効化します.これはRHEL系ディストリビューションの一つであるFedora Projectで開発された追加パッケージの一覧です.

sudo dnf config-manager --set-enabled crb 
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf update

そのうえで関連パッケージをインストールします.

Note

昔からのRHEL系ディストリビューションのユーザーは yum コマンドに慣れ親しんでいるかと思います.dnfyum の後継として開発されたパッケージ管理コマンドで,2025年時点ではyumdnfもどちらもコマンドとしては有効になっていますが,実際には yumdnf のシンボリックリンクになっていて,パッケージ管理コマンドは事実上 dnf に一本化されているようです.

その後で関連ライブラリのインストールをします.

sudo yum install gfortran
sudo yum install openmpi openmpi-devel
sudo yum install netcdf netcdf-fortran netcdf-devel netcdf-fortran-devel
sudo yum install git curl

Ubuntu Linuxと同様に,openmpiやnetcdfの本体と開発用のライブラリは別パッケージとなっていますので,ご注意ください.

なお,AlmaLinuxではOpenMPIはインストールしても mpif90mpirun 等のコマンドにPATHが通らないようです.そのため,.bashrc ファイル等に以下のようにインストール先 /usr/lib64/openmpi/bin/ にPATHを設定するコマンドを記述するか,あるいはコンパイルおよび実行時にPATHつきでコマンドを実行することになります.

# この設定を ~/.bashrc に記載する
export PATH=${PATH}:/usr/lib64/openmpi/bin/

OpenSWPCのビルドでは,(少なくとも v25.01時点では)デフォルト設定にAlmaLinuxが含まれていないため,自分で makefile.arch を編集する必要があります.

src/shared/makefile.arch
ifeq ($(arch), almalinux)
    FC     = /usr/lib64/openmpi/bin/mpif90
    FFLAGS = -O2 -ffast-math -fopenmp -cpp
    NCLIB  = -L/usr/lib64
    NCINC  = -I/usr/lib64/gfortran/modules
    NETCDF = -lnetcdf -netcdff
endif
src/shared/makefile-tools.arch
ifeq ($(arch), almalinux)
    FC     = gfortran
    FFLAGS = -O2 -ffast-math -fopenmp -cpp
    NCLIB  = -L/usr/lib64
    NCINC  = -I/usr/lib64/gfortran/modules
    NETCDF = -lnetcdf -netcdff
endif

makefile.archmakefile-tools.archそれぞれを上記のように編集してから

cd src
make arch=almalinux

とすることでビルドできます.

swpc_sh.x, swpc_psv.x, swpc_3d.x をMPI実行する場合には,前述の export PATH... 設定をしておくか,あるいは実行時に

/usr/lib64/openmpi/bin/mpirun -np 4 ./bin/swpc_3d.x -i example/input.inf

のように mpirun コマンドを場所つきで指定する必要があります.