Computing Practices

はじめに

このページで紹介するのは、Linuxを使う上で自分の個人的な習慣をまとめたものである。

解析プロジェクトの準備(例)

実験データ解析やシミュレーションをLinux上で行う際の環境の整え方の一例を挙げる。 ここで紹介する方法は、作業用ディレクトリを一つ用意してその中で

を行うことを想定する。ここでは作業用のディレクトリを<myWorkSpace>と呼ぶことにして説明する。 実際には、/nfs/space1/<user>等の領域を用いるとよい。

以下のようなディレクトリ構造を用意する。

<myWorkSpace>/
  sw/
  dev/
  build/
  scripts/
  macros/
  figures/
  work/
  data/

それぞれのディレクトリの用途は次のようである。

ディレクトリ

用途

dev

開発中のソフトウェアのソースコード管理。この下にパッケージ毎にディレクトリを作る。

sw

自分で開発したソフトウェアのインストール先

build

cmakeを使ってコンパイルする場合にコンパイル作業を行うためののディレクトリ。

scripts

様々なスクリプトを置く。初期環境設定用のスクリプトscripts/setup.shを置く。

macros

ROOTのマクロ

figures

作成したプロットや図を置く。

work

解析の途中で生成したデータファイル等を置く。

data

実験データやシミュレーションデータ等の大容量のデータを置く。

初期環境設定用のスクリプト(scripts/setups.sh)

これは、Linuxのターミナルを立ち上げる度に毎回一度だけ実行して、いくつかの環境変数を定義するためのものである。 このファイルの中身は以下のようになる。

wdir=<myWorkSpace>
export SWDIR=${wdir}/sw
export PATH=${SWDIR}/bin:${PATH}
export LD_LIBRARY_PATH=${SWDIR}/lib:${LD_LIBRARY_PATH}

環境変数SWDIRは、ソフトウェアのインストール先として個人的にMakefileの中で使っていることが多いので、ここで定義しておく。 PATHとLD_LIBRARY_PATHは、プログラムの実行時にコマンド名から、プログラムの実行可能ファイルや共有ライブラリを探索するためのディレクトリのリストである。

便利な初期設定情報

特定のプロジェクトに関わらない便利な設定は、~/.zshrcというファイルに記述しておく。

Subversion

ソースコードのバージョン管理用のツールである。よく使う操作方法は、

svn co <repository>/<package_name>/trunk <package_name> # レポジトリからパッケージのファイルをダウンロードしてくる

svn update # レポジトリにファイルが更新されていないか確認して、更新があればダウンロードする
svn status -u # ローカルなファイルの変更点を表示する。先頭の1文字はローカルなファイルの状態を表す('M'は修正、'A'は追加、'C'は競合)
svn commit -m "Some message" # ローカルな変更をレポジトリにアップロードする
svn cp . <repository>/<package_name>/tags/<package_name>-<version> # ローカルなものにversion番号を付けてタグする
svn resolved <filename> # ファイルの競合を解決した後で実行する

その他に、次のような操作も時々使うことがある。

svn co -r <revision> <repository>/<package_name>/trunk <package_name>svn 
svn cp . <repository>/<package_name>/branches/<package_name>-<version>-branch
svn switch <repository>/<package_name>/tags/<package_name>-<version>

ROOTを起動する際の初期設定

この枠組みでは、ROOTは必ず<myWorkSpace>から起動するようにしている。そして、マクロは全てmacrosというディレクトリにまとめている。

<myWorkSpace>/.rootrc

ROOT起動時に読み込まれる設定ファイル

<myWorkSpace>/macros/rootlogon.C

.rootrcは例えば、.rootrcのようにする。 rootlogon.Cの中身(例):

  std::cout << "***********************************************************" << std::endl;
  std::cout << "***          Have a nice day!                           ***" << std::endl;
  std::cout << "***********************************************************" << std::endl;
  gROOT->ProcessLine(".include macros");

このファイルには、他に例えば起動時に予め読み込んでおきたいライブラリ等も記述するとよい。