Computing Practice

はじめに

このページで紹介するのは、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/setup.sh)

Linuxのコマンドライン・インターフェースで作業する上で、いくつかの環境変数や別名を定義しておくと便利である。Linuxでコマンドライン・インターフェースを用いる際には裏でシェルと呼ばれるプログラムが走っていて、このプログラムが入力した文字列を解釈して適切なプログラムを実行してくれる。ターミナルを開いたり、別のコンピュータにログインしたりした時にもシェルが実行されている。シェル用のプログラムにはいくつかの種類があるが、ここではZ-shell(zsh)を想定して説明する。

シェルの設定ファイルをscripts/setup.shに用意して、以下の内容を記述する。

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は、プログラムの実行時にコマンド名から、プログラムの実行可能ファイルや共有ライブラリを探索するためのディレクトリのリストである。

環境設定を行うには、シェルを立ち上げてから一度だけ次のコマンドを実行する。

source ./scripts/setup.sh

シェルで起動したプログラムには環境変数が受け継がれ、プログラムの中で環境変数の値を参照することが可能である。 ここで使っているsourceというコマンドは指定したファイルの中身を直接手で入力したのと同じ効果を持つ。これによって、シェルに対して環境変数SWDIR, PATH, LD_LIBRARY_PATHを設定でき、これらの環境変数が他のプログラムからも利用可能になる。

便利な初期設定情報

特定のプロジェクトに関わらない便利な設定は、~/.zshrcというファイルに記述しておくとよい。このファイルは、シェルが立ち上がる度に自動的に読み込まれる。

DIRSTACKSIZE=20
set autopushd
#
alias start_ssh_agent=
alias root='root -l'
# Japanese input method
export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
# ROOT
export ROOTSYS=/nfs/opt/root-v5-34-32
a=$(pwd); cd $ROOTSYS; source ./bin/thisroot.sh; cd $a
export OCHA_SVN=svn+ssh://hpx.phys.ocha.ac.jp/var/svn/repos

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");

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

ComputingPractice (最終更新日時 2021-07-27 06:36:00 更新者 TakanoriKono)