macOS 設定 Tips
LXPLUSにケルベロス認証ログイン
まず、~/.ssh/config(configがなければ作成)に以下を追記。
Host lxplus*
User [user name]
Hostname %h.cern.ch
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes
次に、以下を/etc/krb5.conf(krb5.confがなければ作成)に書くと、RHEL8/9系のCERNのマシンにkinit後パスワードなしログインができる。
[libdefaults]
default_realm = CERN.CH
default_etypes = aes256-cts-hmac-sha1-96 aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
forwardable = true
チケット入手には以下。
kinit [user name]
#ローカルユーザ名とリモートユーザ名が同じ時は、
kinit
#で良い。
GitLab runner上でCERN .CHにケルベロス認証
keytabの作成に関する大きな罠があるのでハマった。 参考URL: https://community.cloudera.com/t5/Community-Articles/quot-kinit-Preauthentication-failed-while-getting-initial/ta-p/346998
# Lxplus上でKeytab fileを作成する
kinit # チケットを入手
klist # チケットの確認
ktutil # ktutilのプロンプトに入るので<user>と<salt>を置き換えて以下のコマンドを打つ
ktutil: addent -password -p <user>@CERN.CH -k 1 -e aes256-cts-hmac-sha1-96 -s "<salt>"
Password for <user>@CERN.CH:
ktutil: addent -password -p <user>@CERN.CH -k 1 -e aes128-cts-hmac-sha1-96 -s "<salt>"
Password for <user>@CERN.CH:
ktutil: write_kt <user>.keytab
ktutil: quit
# <salt>は"CERN.CH<@cern.chのメールアドレスの前に付くfirstname.lastnameの文字列>"(例:CERN.CHjohn.doe)?
# 調べる方法もトリッキーだが、上記のaddentの-sオプションなしで作った適当なkeytabファイルを使って、
KRB5_TRACE=/dev/stdout kinit -kt <user>.keytab <user> | grep salt
# のコマンドで調べられる。
# 作成したkeytabファイルが有効かどうかは、以下のコマンドで調べられる。
kinit -kt <user>.keytab <user>
# kinit: Pre-authentication failed: Invalid argument while getting initial credentialsなどのエラーが出なければOK。
この<user>.keytabファイルをgitlabの各プロジェクトのSettings->CI/CD->Variablesに登録したい。 "Add variable"からFileをアップロードできるはずだが、なぜかuploadボタンが見当たらないので、base64で一旦エンコードしてからgitlab runner上でkeytabに戻す。
# 下記のeos_accessを参考に.gitlab-ci.ymlをgitプロジェクトに作成する。
# https://gitlab.cern.ch/gitlabci-examples
# base64 -w 0 <user>.keytabで得られる長い文字列をKRB5_KEYTAB_B64というvariableとして登録。
# 悪用されないようにこの変数はVisibility属性を"Masked"にしておくこと。
# 以下が.gitlab-ci.ymlの例。
myjob (k8s):
tags:
# Make your job be executed in a shared runner that has EOS mounted
# by providing the 'k8s-eos' or 'eos' tags
- k8s-eos
script:
###! Set up your kerberos credentials
- echo "Decoding keytab file"
- echo "$KRB5_KEYTAB_B64" | base64 -d > /tmp/krb5.keytab
- chmod 600 /tmp/krb5.keytab
- kinit <user>@CERN.CH -k -t /tmp/krb5.keytab
###! access your EOS user space or project
###! Access your personal folder
- ls /eos/user/<initial-letter-of-user>/<username>
###! Access the project you have access to
- ls /eos/project/<initial-letter-of-project>/<project>
# Build->PipelinesからCIの結果を確認して、問題がないか確認。
LINUXのBoot Diskを作成
まず、Disk UtilityでUSBキーをフォーマット
diskutil eraseDisk MS-DOS ALMA9_4 /dev/disk4
#"ALMA9_4"と"/dev/disk4"は適宜変更
sudo umount -fv /Volumes/ALMA9_4/
#次にddで書き込むためにアンマウントする。
#diskutil unmountDisk /dev/disk4だと、Volumeの認識外しとともに、/dev/diskXの認識も外すので不可。
sudo dd if=~/Downloads/AlmaLinux-9.4-x86_64-minimal.iso of=/dev/rdisk4 bs=16m
#/dev/disk4ではなくて/dev/rdisk4とするのがポイント。
#/dev/rdisk4はシーケンシャルアクセス用のデバイスになっているので速い。
CERN ROOTをビルド
適当なバージョンのROOTのソースコードをどこかにダウンロードしておく。 PyROOTを有効化させたものを作る。
# まずは任意のpythonバージョンで、仮想環境を作ってnumpyがあるとcmakeに認識させる準備。
# このvenvはbuild用なので、実際のプロジェクト毎のvenvは好きなように別途作れば良い。
python3 -m venv build_python_env
source build_python_env/bin/activate
python3 -m pip install numpy
# MathMoreを有効化させるためにgslをbrewからインストール。
brew install gsl
# インストール先の指定などに用いる環境変数をセットしてcmake。
export ROOTINSTALL=/Users/<user>/local/ROOT_CERN/root-6.36.06-py312 #任意の場所に変更。
export PYEXE="$(which python3)"
cmake ../root_src -DCMAKE_INSTALL_PREFIX="$ROOTINSTALL" -DPython3_EXECUTABLE="$PYEXE" -Dpyroot=ON
# Makeしてinstallする。
cmake --build . -j $(sysctl -n hw.ncpu)
cmake --install .
# 使用するときは都度下記コマンドで有効化すると環境を汚さない。
source /Users/<user>/local/ROOT_CERN/root-6.36.06-py312/bin/thisroot.sh
OpenGateのGeant4をインストール(macOS 15.2 (24C101))
python3.13にopengateが対応していないので、pyenvでpythonのバージョンを該当ディレクトリでのみ3.12に下げて、venvで使う。 参考URL: https://pypi.org/project/opengate/
まずpyenvをbrewでinstallする。
# brew install pyenvだとvirtualenvのpluginが入らなくて上手くいかない。
brew install pyenv-virtualenv
# 下記を設定できるように.bashrcや.zshrcに追記する。
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
# 切り替えられるバージョンを確認
pyenv versions
# 切り替えたいバージョンがpyenv用にinstallされていなければ、以下のコマンドで探してインストールする。
pyenv install -l
pyenv install 3.12.8
# 該当venvを設定するディレクトリで以下のコマンドを実行して、そのディレクトリでのみpythonのバージョンを変えられる。
pyenv local 3.12.8
# pythonのバージョンが下がったら、下記コマンドでopengateをvenv環境にインストールする。
python -m venv opengate_env
source opengate_env/bin/activate
python3 -m pip install opengate
# pyenvで入れたpythonにはsetuptoolsが無いため、下記コマンドでインストール。
python3 -m pip install setuptools
# opengateで書いた検出器の絵を出したければpyvistaが必要。
python3 -m pip install pyvista
# opengateがちゃんと動くかどうかを下記コマンドで試す。
opengate_tests
本家Geant4をインストール(macOS 26.2)
本家geant4も使えるようにする。 参考サイト: http://geant4-dna.in2p3.fr/styled-6/styled-12/index.html
# 依存関係を解消
brew install qt
brew install xerces-c
# QtのPATHを通す。<version>は適宜変更。
# デフォルトではbrewは/usr/local/以下にインストールする。
# 場所が分からなければ "brew info qt" などで調べると良い。
# (brew install qt を実行した際に、下記のものをzshrcなどに足せという丁寧な説明が出ているので参考にすると良い)
export PKG_CONFIG_PATH=/opt/homebrew/Cellar/qt/<version>/lib/pkgconfig/
export PATH=/opt/homebrew/Cellar/qt/<version>/bin:$PATH
# geant4をダウンロード。特定のversionに変更。
cd /path/to/somewhere
git clone https://gitlab.cern.ch/geant4/geant4.git geant4_src
cd geant4_src
git checkout v11.4.0
cd -
# ビルドするディレクトリを作成し、cmakeする。
# (インストールするディレクトリやxerces-cのバージョンは適宜置き換える)
mkdir geant4_build
mkdir /path/to/somewhere/geant4_v11.4.0 #インストール先も事前に作成
cd geant4_build
cmake -S ../geant4_src -B .\
-DCMAKE_INSTALL_PREFIX=/path/to/somewhere/geant4_v11.4.0 \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DGEANT4_USE_GDML=ON \
-DXERCESC_ROOT_DIR=/opt/homebrew/Cellar/xerces-c/<version> \
-DGEANT4_USE_QT=ON \
-DGEANT4_INSTALL_EXAMPLES=ON \
-DGEANT4_INSTALL_DATA=ON \
-DGEANT4_USE_SYSTEM_EXPAT=OFF \
-DGEANT4_BUILD_TLS_MODEL=auto
# コンパイルしインストールする。
time cmake --build . --target install -- -j$(sysctl -n hw.ncpu)
# geant4用のsetup.shを作成して、以下の内容を書く。
cd /path/to/somewhere/geant4_v11.4.0/bin
source geant4.sh
export G4COMP=/path/to/somewhere/geant4_v11.4.0/lib/Geant4-11.4.0
export CMAKE_PREFIX_PATH=$G4COMP
alias comp='cmake -DGeant4_DIR=$G4COMP -DGEANT4_BUILD_MULTITHREADED=ON'
cd - >> /dev/null
# geant4を使用したアプリケーションを作る場合には以下を実行する。
source /path/to/somewhere/setup.sh
# Exampleの実行
mkdir /path/to/somewhere/myexample
cd /path/to/somewhere/myexample
cp -r ../geant4_v11.4.0/share/Geant4/examples/basic/B4 ./
mkdir B4-build && cd B4-build
comp ../B4 #setup.shで設定したcmakeのalias
make -j$(sysctl -n hw.ncpu)
# 実行してみる。
cd B4a
./exampleB4a
#(GUIが立ち上がったら、下部Session:に"/control/execute run1.mac"などと入力し実行すると、カッコいいイベントディスプレイが見れる)
./exampleB4a run1.mac
#(とするとbatch modeで起動。GUIが立ち上がると基本的に遅いので、/run/beamOn 100程度に留めるが吉。Qtのメモリ漏れが酷いのが致命的。)
# CERN ROOTと一緒にコンパイルしてみる。
# (v11.4.0では、ROOTをthisroot.shで設定してからcompすると下記の手順は不要っぽい?)
# cmake プロジェクトにROOTを足すには、ソースコードのディレクトリにあるCMakeFile.txtに以下を追加/追記する。
#----------------------------------------------------------------------------
# Added to use ROOT libralies
find_package(ROOT REQUIRED)
include_directories(${ROOT_INCLUDE_DIRS})
# 元々あるはずのtarget_link_librariesに${ROOT_LIBRARIES}を足す。
target_link_libraries(exampleB4d PRIVATE ${Geant4_LIBRARIES} ${ROOT_LIBRARIES})
# 例えば上記のようになるはず。
# 全てのライブラリが${ROOT_LIBRARIES}に含まれているわけではないので、稀に
find_package(ROOT REQUIRED COMPONENTS RIO Net)
# のように個別に足す必要がある。参考URLは以下。
https://root.cern/manual/integrate_root_into_my_cmake_project/