パッケージ管理したい(spack)
$ spack install スペック名
spackは、主にスパコンなどのHPCでパッケージ管理ができるコマンドです。
コンパイラーを変えたり、オプションを変えたりしたパッケージを、それぞれ独立した環境に構築できます。
インストールしたい(spack)
$ brew install spack
$ spack --version
1.2.2
spackはHomebrewでインストールできます。
クロスプラットフォーム対応で、LinuxやmacOSでも利用できます。
gnupgなど他に必要なパッケージがあります。
公式ドキュメントの
System Prerequisites
を参照してください。
利用可能なパッケージを確認したい(spack list)
$ spack list
$ spack list | grep パッケージ名(の一部)
$ spack list | grep geant4
geant4
geant4-data
geant4-vmc
listコマンドで利用可能なパッケージ一覧を確認できます。
数が多いのでgrepやripgrepなどの検索コマンドでパッケージ名を指定するとよいです。
注釈
僕もまず、Geant4に関係したパッケージ名を確認するところからはじめました。
関連しそうなパッケージとしてgeant4、geant4-data、geant4-vmcが見つかりました。
それぞれのパッケージ詳細はinfoコマンドを使って確認ました。
geant4パッケージが本体です。これをインストールします。
geant4-dataパッケージはGeant4本体の依存パッケージのひとつなので、直接インストールする必要はありません。
geant4-vmcパッケージは今回は必要なさそうなのでスキップしました。
今後、必要になったときにインストールします。
パッケージの詳細を確認したい(spack info)
$ spack info パッケージ名
$ spack info geant4
$ spack info --by-name geant4
infoコマンドでパッケージ情報の詳細を確認できます。
ウェブサイトのURL(Homepage)、
利用可能なバージョン(Preferred version/Safe versions)、
ビルド時のオプション(Variants)、
依存パッケージ(Build Dependencies/Link Dependencies/Run Dependencies)
など確認できます。
ビルド時のオプションは、デフォルトで条件ごと(when 条件)で表示されます。
--by-nameオプションをつけると、オプション名で表示されます。
注釈
具体的な表示の違いは以下のようになります。
$ spack info geant4
...
Variants:
...
when build_system=cmake
build_type [Release] Debug, MinSizeRel, RelWithDebInfo, Release
CMake build type
generator [make] none
the build system generator to use
...
$ spack info --by-name geant4
...
Variants:
...
build_system [cmake] cmake
Build systems supported by the package
build_type [Release] Debug, MinSizeRel, RelWithDebInfo, Release
when build_system=cmake
CMake build type
generator [make] none
when build_system=cmake
the build system generator to use
...
注釈
--variants-by-nameは旧オプション名です。
現行バージョンでは非推奨(deprecated)になっており、実行すると--by-nameへの切り替えを促す警告が表示されます。
パッケージをインストールしたい(spack install)
$ spack install パッケージ名
$ spack install パッケージ名@バージョン
$ spack install パッケージ名 %gcc@パージョン
$ spack install geant4
installコマンドでパッケージをインストールできます。
基本的にすべての関連パッケージでコンパイル作業が必要なので、時間がかかります。
他にも@バージョンでバージョン、%コンパイラーでコンパイラーを指定できます。
注釈
今回は、HPC環境ではなく、手元のMacBook ProにGeant4をインストールするために使ってみました。 ただし、Geant4のインストールはうまくいきませんでした。
ビルドオプションしたい
$ spack install パッケージ名 オプション="値"
$ spack install パッケージ名 +オプション
$ spack install geant4 opengl=True
$ spack install geant4 +opengl
infoコマンドで確認したVariants名で、ビルドオプションを追加できます。
パッケージ名のあとにオプション名=値を追加します。
オプションの値がブーリアン(True | False)の場合は+オプション名のように書くこともできます。
注釈
$ spack spec geant4 opengl=True
specコマンドでインストールされるパッケージ一覧を事前に確認できます。
ローカルのパッケージを確認したい(spack find)
$ spack find -l geant4
-- darwin-sonoma-skylake / apple-clang@15.0.0 -------------------
pzvk6rx geant4@11.1.2 # spack install geant4
t26aalv geant4@11.1.2 # spack install geant4 opengl=True
==> 2 installed packages
findコマンドでインストール済みのパッケージ情報を確認できます。
ビルドオプションごとにハッシュ値的なものが付与されます。
Homebrewでインストールしたspackを使った場合、それぞれ次のパスにインストールされていました。
$ spack find -p geant4
-- darwin-sonoma-skylake / apple-clang@15.0.0 -------------------
geant4@11.1.2 /usr/local/Cellar/spack/0.21.1/opt/spack/darwin-sonoma-skylake/apple-clang-15.0.0/geant4-11.1.2-pzvk6rxocxpeauwnlfvwxk6wx3b67wrr
geant4@11.1.2 /usr/local/Cellar/spack/0.21.1/opt/spack/darwin-sonoma-skylake/apple-clang-15.0.0/geant4-11.1.2-t26aalvrzmo2u5jyhj3nvv6gihtty7cv
==> 2 installed packages
-vオプションでビルドオプションの詳細を確認できます。
有効なオプションは+オプション名、
無効なオプションは~オプション名で表示されます。
$ spack find -lv geant4
-- darwin-sonoma-skylake / apple-clang@15.0.0 -------------------
pzvk6rx geant4@11.1.2~ipo~motif~opengl~qt~tbb+threads~vecgeom~vtk~x11 build_system=cmake build_type=Release cxxstd=17 generator=make patches=2979cb7
t26aalv geant4@11.1.2~ipo~motif+opengl~qt~tbb+threads~vecgeom~vtk~x11 build_system=cmake build_type=Release cxxstd=17 generator=make patches=2979cb7
パッケージをロードしたい(spack load)
# Fish
$ source /opt/homebrew/Cellar/spack/0.21.1/share/spack/setup-env.fish
$ spack load パッケージ名/ハッシュ値
$ spack load geant4
$ spack unload geant4
loadコマンドで、パッケージをロードできます。
その時は、シェルごどの設定を有効にする必要があります。
注釈
シェル設定をしていない状態でspack loadすると、エラーが表示されたあと、シェルごとの対処方法を表示してくれます。
$ spack load geant4
==> Error: `spack load` requires Spack's shell support.
For fish:
source /opt/homebrew/Cellar/spack/0.21.1/share/spack/setup-env.fish
アンインストールしたい(spack uninstall)
$ spack uninstall パッケージ名
$ spack uninstall パッケージ名/ハッシュ値
$ spack uninstall geant4
$ spack uninstall geant4/pzvk6rx
Do you want to proceed? [y/N] y
==> Successfully uninstalled geant4@11.1.2%apple-clang@15.0.0~ipo~motif~opengl~qt~tbb+threads~vecgeom~vtk~x11 build_system=cmake build_type=Release cxxstd=17 generator=make patches=2979cb7 arch=darwin-sonoma-skylake/pzvk6rx
uninstallコマンドでパッケージをアンインストールできます。
同じパッケージ名で複数インストールされている場合は、パッケージ名/ハッシュ値で指定します。
確認のプロンプトが表示されるのでyを入力します。
削除はあっという間です。
一時パッケージをアンインストールしたい(spack gc)
$ spack gc パッケージ名
$ spack gc geant4
gcコマンドで、一時的にインストールされたパッケージをアンインストール(ガベージコレクト)できます。
コンパイラーしたい(spack compilers)
$ spack compilers
apple-clang@17.0.0
gcc@16.2.0
compilersコマンドで利用可能なコンパイラーを確認できます。
$ spack compiler info apple-clang
[e] apple-clang@=17.0.0 build_system=bundle platform=darwin os=tahoe target=aarch64
prefix: /usr
compilers:
cc: /usr/bin/clang
cxx: /usr/bin/clang++
fortran: None
compiler infoでコンパイラーの詳細を確認できます。
[e]は外部(external)ツールとして検出されたことを示すマーカーです。
コンパイラーの詳細は~/.spack/darwin/compilers.yamlにも書いてありました。
注釈
spack compilers/spack compiler infoの出力形式はバージョンによってたびたび変わっています。
古いバージョンでは-- apple-clang ventura-aarch64 --------のようなセクション区切り表示でしたが、
現行バージョンではよりシンプルな一覧・キーバリュー形式になっています。