パッケージ管理したい(spack)
$ brew install spack
$ spack install スペック名 # パッケージ名のこと
spackは主にスパコンなどのHPCでパッケージ管理ができるコマンドです。 コンパイラーを変えたり、オプションを変えたりしたパッケージを、それぞれ独立した環境に構築できます。
クロスプラットフォーム対応で、LinuxやmacOSでも利用でき、Homebrewでインストールできます。
gnupgなど他に必要なパッケージがあるので、公式ドキュメントのSystem Prerequisitesを参照してください。
今回は、Geant4をインストールするためだけに導入しました。 以下はGeant4を例にコマンドの使い方を確認しています。
注釈
基本的なコマンドの使い方とオプションはspack helpもしくはspack help コマンド名で確認できるようになっていました。
より詳細は公式ドキュメントで確認できます。
インストールしたい(spack install)
$ spack install パッケージ名
$ spack install パッケージ名@バージョン
$ spack install パッケージ名 %gcc@パージョン
$ spack install geant4
installコマンドでパッケージをインストールできます。
基本的にすべての関連パッケージでコンパイル作業が必要なので、時間がかかります。
他にも@バージョンでバージョン、%コンパイラーでコンパイラーを指定できます。
ビルドオプションしたい
$ 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 info)
$ spack info パッケージ名
$ spack info geant4
$ spack info --variants-by-name geant4
infoコマンドでパッケージ情報の詳細を確認できます。
ウェブサイトのURL(Homepage)、
利用可能なバージョン(Preferred version/Safe versions)、
ビルド時のオプション(Variants)、
依存パッケージ(Build Dependencies/Link Dependencies/Run Dependencies)
など確認できます。
ビルド時のオプションは、デフォルトで条件ごと(when 条件)で表示されます。
--variants-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 --variants-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
...
利用可能なパッケージを確認したい(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 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を入力します。
削除はあっという間です。
一時パッケージをアンインストールしたい(gc)
$ spack gc パッケージ名
$ spack gc geant4
gcコマンドで、一時的にインストールされたパッケージをアンインストール(ガベージコレクト)できます。
コンパイラーしたい(spack compilers)
$ spack compilers
==> Available compilers
-- apple-clang ventura-aarch64 ----------------------------------
apple-clang@15.0.0
-- gcc ventura-aarch64 ------------------------------------------
gcc@13.2.0
compilersコマンドで利用可能なコンパイラーを確認できます。
$ spack compiler info apple-clang
apple-clang@15.0.0:
paths:
cc = /usr/bin/clang
cxx = /usr/bin/clang++
f77 = None
fc = None
modules = []
operating system = ventura
compiler infoでコンパイラーの詳細を確認できます。
コンパイラーの詳細は~/.spack/darwin/compilers.yamlにも書いてありました。