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/