Λlisue's blog

つれづれなるままに更新されないブログ

Ubuntu 14.04 に Molecular Dynamics シミュレーション環境を構築したメモ

Ubuntu 14.04 に Molecular Dynamics シミュレーション環境を構築したメモ

MD計算用サーバーに Ubuntu server 14.04 LTS をインストールした際の構築メモ。 事前に MegaRAID の WEB BIOS により 3 TiB の HDD 20台で RAID 6 を組んであり、Ubuntu server 14.04 64 bit を下記の構成でインストール済みである。

Partition Size File system Mount point Remarks
/dev/sda1 150 GiB ext4 / XFS はパーティションの先頭セクタを利用するためブート可能パーティションに出来ないため
/dev/sda2 64.7 GiB swap メモリが約 40 GB あるのでほぼ当量を確保
/dev/sdb1 47.8TiB xfs /home XFS のほうがパフォーマンスが良いため(ただし削除したファイルを復元することは不可能)

また、下記は利用している特殊ハードウェアの一覧である。

Type Name
ディスプレイ用グラフィックボード NVIDIA NVS 300
計算用グラフィックボード NVIDIA Tesla M2090
RAID コントローラー LSI MegaRAID SAS 9260-4i

前提知識

SSH 接続に関して

ssh <host> にて <host>SSH 接続が可能だが、グラフィカルユーザーインタフェース (GUI) なアプリケーションを起動することが出来ない。 GUI なアプリケーションを起動したい場合 (例. MegaRAID Storage Manager, PyMOL, VML, etc.) は ssh -X <host> として X を有効化して接続後に該当コマンドを起動すれば良い (例. $ pymol)。

また ssh をモバイルユースにて最適化した mosh というコマンドがある。 これを利用すると通信速度が極端に遅い場合 (例. 携帯電話によるテザリング時) や断続的に切断される場合 (例. 新幹線とトンネル) に ssh よりも比較的快適に接続することができる。 使い方は mosh <host> と、ほぼ ssh と同様だが X の有効化は出来ない (そのうち出来るようになるかもしれない)。 デフォルトでは通常インストールされていないので、利用したい場合はクライアントサイドにもインストールする必要がある(鯖にはインストール済み)。

現在利用中のドライバの判別方法

lspci -nnk の出力を見ることで現在利用中のドライバを判別することができる。 したがって下記のようにすれば現在利用中のグラフィックドライバを判別することが可能。 なお Ubuntu をインストールした段階では OSS ドライバである nouveau が利用されている。

$ lspci -nnk | grep -i vga -A3 | grep 'in use'
Kernel driver in use: nouveau

よく出てくる make -j N-j N について

-j N オプションにより N 個のCPUを用いた並列処理にてコンパイルを行うように指定でき、コンパイルの高速化が見込める。 なお、いくつ CPU を積んでいるかわからない場合は下記コマンドにて CPU の個数を取得することが出来る。

$ grep -c ^processor /proc/cpuinfo
12

zsh 利用時の注意

zsh 利用時は /etc/profile が自動的に読まれないようなので /etc/zsh/zprofile に下記を記載する。

[[ -f /etc/profile ]] && source /etc/profile

VirtualBox にインストール時の注意

VirtualBox にインストールを行う際は Guest Additions のインストールの際に CDROM が自動的にマウントされないので注意。またインストールに X が必要なので下記のようにしてインストールを行う。

$ sudo mount /dev/cdrom /media/cdrom
mount: block device /dev/sr0 is write-protected, mounting read-only
$ sudo apt-get install build-essential xserver-xorg xserver-xorg-core
...
$ cd /media/cdrom
$ udoudo ./VBoxLinuxAdditions.run

また共有ディレクトリを自動マウントに指定した際は /media の中にマウントされるが root:vboxsf でマウントされるため権限がない。以下のように自分を vboxsf グループに所属させる必要がある。

$ sudo gpasswd $(whoami) vboxsf
$ sudo logout

IP アドレスの固定

今後すべての作業をリモートで行うため IP アドレスが意図せず変わることを避けるために固定したほうが良い。 通常 IP アドレスは DHCP という仕組みの元自動的に開いているものが割り当てられているはずなので、そこで割り当てられたものを利用する。 下記コマンドにて現在利用中のネットワーク情報がわかるためメモをしておく。

$ ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:185840 errors:0 dropped:0 overruns:0 frame:0
          TX packets:185840 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:131576612 (131.5 MB)  TX bytes:131576612 (131.5 MB)

<strong>p5p1</strong>      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet addr:<strong>XXX.XXX.XXX.XXX</strong>  Bcast:<strong>XXX.XXX.XXX.XXX</strong>  Mask:<strong>XXX.XXX.XXX.XXX</strong>
          inet6 addr: xxxx::xxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4287321 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1069186 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4700020053 (4.7 GB)  TX bytes:216940995 (216.9 MB)
          Memory:f0200000-f021ffff 

<strong>p5p2</strong>      Link encap:Ethernet  HWaddr xx:xx:xx:xx:xx:xx  
          inet6 addr: xxxx::xxx:xxxx:xxxx:xxxx/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:440 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32022 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:117700 (117.7 KB)  TX bytes:6952746 (6.9 MB)
          Memory:f0260000-f027ffff 
$ route -nee
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface    MSS   Window irtt
0.0.0.0         <strong>XXX.XXX.XXX.XXX</strong>   0.0.0.0         UG    0      0        0 p5p1     0     0      0
XXX.XXX.XXX.XXX   0.0.0.0         XXX.XXX.XXX.XXX U     0      0        0 p5p1     0     0      0
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver <strong>XXX.XXX.XXX.XXX</strong>
nameserver <strong>XXX.XXX.XXX.XXX</strong>
search <strong>XXXX.XXXX</strong>

なお、古いドキュメントなどではインターフェイス名が eth0 と表されることが多いが、最近の Linux では p5p1 などが主流となりつつある (Predictable Network Interface Names) 上記の情報を元にネットワークインターフェイスの固定を行う。/etc/network/interfaces を下記のように修正する。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5)

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto p5p1
#iface p5p1 inet dhcp
iface p5p1 inet static
address   XXX.XXX.XXX.XXX
netmask   XXX.XXX.XXX.XXX
network   XXX.XXX.XXX.XXX
broadcast XXX.XXX.XXX.XXX
gateway   XXX.XXX.XXX.XXX

# require 'resolvconf' packages
dns-nameservers XXX.XXX.XXX.XXX XXX.XXX.XXX.XXX
dns-search XXXX.XXXX

# The secondary network interface
auto p5p2
#iface p5p2 inet dhcp
iface p5p2 inet static
address   XXX.XXX.XXX.XXX
netmask   XXX.XXX.XXX.XXX
network   XXX.XXX.XXX.XXX
broadcast XXX.XXX.XXX.XXX

上記ファイルの各項目は下記を参照。またネットワーク範囲の開始点 (network) は Subnet Calculator - TunnelsUp<address>/<netmask> と入力すると得られる (計算は面倒なので略)。 またコメントにも書いたが DNS サーバーの設定を /etc/network/interfaces で設定できるようにするために resolvconf というパッケージをインストールする。 上記ファイルを作成後に下記のように resolvconf をインストール後にネットワークを再起動する。

$ sudo apt-get install resolvconf
# リモートからだと動かないかも、ダメそうなら sudo reboot で
$ sudo service networking restart
Name Description
address IP アドレス
netmask ネットワーク範囲 (二進数で表した際に 0 となる部分が可変域となる)
network ネットワーク範囲の開始点
broadcast ネットワーク範囲の終了点
gateway ネットワークの接続先

参考: - Ubuntu Manpage: /etc/network/interfaces - network interface configuration for ifup and ifdown - Ubuntu Manpage: resolvconf - manpage nameserver information

必須パッケージのインストール

下記に列挙するパッケージはこの先のインストールや設定に必要なので最初にインストールを行っておく。

  • build-essential コンパイルなどを行う際に必要になるコンパイラ
  • git Git プロトコルを使えるようにするためのソフトウェア
  • gdebi ローカルの .deb ファイルの依存関係を解決してインストールするソフトウェア
$ sudo apt-get update
$ sudo apt-get install build-essential git gdebi

また、下記のものはオペレーション時に便利なので、好みに応じて入れておくと良い。

  • tmux 端末内部にて画面分割などの機能を利用できるようにするソフト
  • tree 指定したディレクトリ以下をツリー表示するソフト
  • htop グラフィカルな top コマンド (リソース利用状況表示ソフト)

LSI MegaRAID Storage Manager のインストール

MegaRAID のコントロールを行うためのソフトウェアだが Ubuntu/Devian 用のパッケージが提供されていないので若干の修正が必要。 LSI MegaRAID SAS 9260-4i の製品ページから Downloads > Management Software and Tools > Latest MegaRAID Storage Manager (MSM) と進み最新の MegaRAID Storage Manager をダウンロードする(Latest がたくさんあるので注意)。 ダウンロードしてきた MSM_linux_x64_installer-15-05-01-00-tar.gz サーバーのホームディレクトリに配置後、以下のコマンドにてインストールを実行する。

# 必須パッケージのインストール
$ sudo apt-get install alien libstdc++5 rcconf
# RedHat 用パッケージ (rpm) から Ubuntu/Debian 用パッケージ (deb) の作成
$ tar xzvf MSM_linux_x64_installer-15-05-01-00-tar.gz
$ cd disk
$ sudo alien --scripts *.rpm
# 作成したパッケージのインストール
$ sudo gdebi lib-utils2_1.00-8_all.deb
$ sudo gdebi megaraid-storage-manager_15.05.01-1_all.deb

次に Ubuntu/Debian でも動作するようにインストール後のスクリプトの修正を行う。 下記のファイルをそれぞれ修正する(+/- はそれぞれ追加/削除を示す)。 ただし /usr/local/MegaRAID Storage Manager/Framework は(なぜか)実行権限がついていないため編集時には一時的に sudo chmod +x Framework として実行権限を付加させてから編集を行う。 念の為編集後には sudo chmod -x Framework として元の状態に戻しておく。

# /etc/init.d/vivaldiframeworkd
  \rm -f /tmp/network_present
  . /etc/init.d/msm_profile
  network_flag=0
- for((i=0, i < 20, i++))
+ for i in `seq 0 19`
  do
  if [ -f "$MSM_HOME/Framework/TestNetworkCapability.class" ]
  then
# /usr/local/MegaRAID Storage Manager/Framework/startup.sh
- LD_LIBRARY_PATH=`pwd`:/opt/lsi/Apache:/opt/lsi/Pegasus:/opt/lsi/openssl;export LD_LIBRARY_PATH
+ LD_LIBRARY_PATH=`pwd`:/opt/lsi/Pegasus:/usr/sbin/openssl;export LD_LIBRARY_PATH

最後に vivaldiframeworkd をコンピューター起動時に自動的に実行するように登録する。 rcconf を実行して vivaldiframeworkd を矢印で選択後スペースを押して選択状態にする。 その後 Tab キーで <Ok> を選択しエンターで確定する。

これらを実行すれば下記にて MegaRAID Storage Manager が起動できるようになる (リモート接続の場合は ssh -X にて繋いでおく必要がある)

# サーバーの起動 (再起動時は上記の設定を行っていれば自動で起動される)
$ sudo service vivaldiframeworkd start
# クライアントの起動
$ "/usr/local/MegaRaid Storage Manager/startupui.sh"

最後に root ユーザーの有効化を行う。 Ubuntu ではセキュリティのために root ユーザーが有効化されていない (パスワードが与えられていない)。 しかし MegaRAID Storage Manager で RAID コントローラを操作するためには root 権限を持つユーザーでログインする必要があるので有効化する。 root 権限は非常に危険な権限でもあるのでパスワードは十分に長く複雑なものを選ぶように注意すること。 また root にパスワードを設定する関係上 SSH に root でログイン出来ないようになっていることも確認する。

# 無理やりスーパーユーザーに昇格
$ sudo su
# パスワードの設定
$ passwd
# 念の為 root の SSH パスワード認証が許可されていないことを確認する
# yes                  -> BAD  : 許可されているので "ssh root 禁止" などでググる
# without-password     -> OK   : 公開鍵認証のみが許可されている
# forced-commands-only -> GOOD : 許可したコマンド以外を認めない
# no                   -> NICE : そもそもログインが許可されていない
$ cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin without-password

参考: - http://www.ithierarchy.com/ITH/node/36

MegaRAID SAS MegaCLI のインストール

上記 MegaRAID Storage Manager は GUI にて RAID コントローラを操作するためのソフトウェアだが、後述する munin などのサーバ監視ツールから利用するには不向きなため CUI にて RAID コントローラを操作するための MegaRAID SAS MegaCLI をインストールする。

上記のリンクから MegaCLI 5.5 P2 (もしくはより新しい物) をダウンロードし、ホームディレクトリに保存後に下記を実行する。

$ sudo apt-get install alien unzip
$ unzip 8-07-14_MegaCLI.zip
$ cd Linux
$ sudo alien MegaCli-8.07.14-1.noarch.rpm
$ sudo gdebi megacli_8.07.14-2_all.deb

インストールが完了する下記コマンドにて現在の RAID コントローラの状態が確認できる。 使い方が複雑すぎて常用はしないので特に $PATH への追加などは行わない。

$ sudo /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aALL

Adapter #0

Enclosure Device ID: 8
Slot Number: 0
Drive's position: DiskGroup: 0, Span: 0, Arm: 0
Enclosure position: 1
...


Exit Code: 0x00

MTA のインストール

サーバーの状況を自動で知らせたりする場合にサーバーからメールが送られると便利なので MTA (Mail Transfer Agent) のインストールを行う。 MTA で調べると様々なもの (sendmail, qmail, postfix...) があるが、どれも設定が複雑なのが面倒くさい (sendmailpostfix 専用の本が出るほど)。 今回はメールサーバーを作る目的で MTA をインストールしたいわけではないため送信機能しか無い nullmaker という軽量のソフトウェアを利用する。

$ sudo apt-get install nullmailer

とすると2つほど質問されるので、適切に答えていけばインストールが出来る。 正常にインストールが完了していれば下記コマンドにて自分のメールアドレスにメールが届く。

$ echo "Hello" | sendmail メールアドレス

Munin のインストール

サーバーの状況をグラフィカルに確認するため munin を利用する。 下記コマンドにて動作に必要な apache2 と関連パッケージおよびプラグインをインストールする。

$ sudo apt-get install apache2
$ sudo apt-get install munin munin-node munin-plugins-extra
$ sudo git clone https://github.com/lambdalisue/munin-contrib /opt/munin-contrib
$ cd /opt/munin-contrib
$ sudo ./scripts/install_contrib.sh

次に外部から munin のページを閲覧できるように権限を修正する。 /etc/munin/apach.conf を下記のように修正する。なお {network} および {netmask} は IP アドレス固定の章で p5p1 に対し指定したものを利用する。 なお Require all granted は Apach 2.4系 でアクセスを許可する書き方らしい (【apache】2.4系はアクセス許可の設定の書き方が違うので注意)

# /etc/munin/apach.conf
  # ...
  &lt;Directory /var/cache/munin/www&gt;
          Order allow,deny
-         Allow from localhost 127.0.0.0/8 ::1
+         Allow from {network}/{netmask}
+         Require all granted
          Options None

          # This file can be used as a .htaccess file, or a part of your apache
  # ...

次に集積ノードの設定および追加を行う。/etc/munin/munin.conf を開き下記にしたがって修正・加筆を行う。

# /etc/munin/munin.conf
  # ...
- [localhost.localnet]
+ [このサーバーの名前]
      address 127.0.0.1
      use_node_name yes

+ [監視したい別サーバーの名前]
+     address {監視したい別サーバーのIPアドレス}
+     use_node_name yes
  # ...

上記で監視したい別サーバーを追加した場合はそれぞれの監視対象サーバーに移動して /etc/munin/munin-node.conf にて allow {regex of IP address} を指定しノードを再起動する。

# /etc/munin/munin-node.conf
  # ...
  allow ^127\.0\.0\.1$
  allow ^::1$
# munin が稼働しているサーバーが 192.168.1.10 の場合
+ allow ^192\.168\.1\.10$
  # ...
# munin ノードを再起動
$ sudo service munin-node restart

最後にメール通知の設定を行う。メールの設定は /etc/munin/munin.conf に下記のように追記すれば良い。 なお {name} の部分は適当な文字列に修正すること。 また /opt/munin-contrib/bin/munin-smartalert は同じ警告を24時間以内に複数回送信しないようにするために用いている (そうしないと警告が発生した時点から5分ごとにメールが届きメールボックスが死ぬ)。

# /etc/munin/munin.conf

+ contact.{name}.always_send warning critical
+ contact.{name}.command /opt/munin-contrib/bin/munin-smartalert \
+     "${var:group}.${var:host}.${var:graph_category}.${var:graph_title}" \
+     "${var:wfields}:${var:cfields}:${var:ufields}" \
+     "Munin::${var:group}::${var:host}::${var:graph_title}" \
+     "sample@example.com"

設定後に下記のコマンドにて強制的に通知メールを送信させることが出来る ({name} は先ほど設定した値)。 なお、上記の通り同じ警告は24時間以内に複数回送信されないので、複数回テストしたい場合はその都度 /var/run/munin/smartalert ディレクトリを消去する。

$ sudo su - munin --shell=/bin/bash -c "/usr/share/munin/munin-limits --contact {name} --force" 

参考: - http://www.server-world.info/query?os=Scientific_Linux_6&p=munin&f=4

notify のインストール

MDシミュレーションは時間のかかる処理が多いため、処理の終了をメールで知らせてくれる notify をインストールする。

$ sudo apt-get install python-pip
$ sudo pip install notify
$ notify --setup
$ notify --check

notify --setup の際に MUA のアドレスを聞かれ、デフォルトが localhost になっているが先にインストールした nullmailer ではこれは捌けないため nullmailer に指定したものをここにも指定する点に注意。 あとは正しく設定ができていれば設定したメールアドレスに Notify: cat/home/XXXX/.config/notify/notify.cfg has success というタイトルのメールが届く。

実際の利用方法としては下記のように重たいコマンドの前に notify をつける。

# 十秒後にメールが送信される
$ notify sleep 10

trash-cli のインストール

誰しもがファイルを間違えて削除してしまうことがあるので CUI でもゴミ箱機能を使うために trash-cli をインストールする。 特に今回のサーバーはホームディレクトリのファイルシステムに XFS を利用しているため一度削除したファイルを復元することが出来ないので重要。 なお PIP に上がっているバージョンだと trash-restore が無いので GitHub のものをインストールする。

$ sudo pip install git+https://github.com/andreafrancia/trash-cli.git
# テスト用にファイルを作る
$ touch test.txt
# 削除してみる
$ trash test.txt
# リストしてみる
$ trash-list
2015-08-30 04:55:05 /home/XXXX/test.txt
# リストアしてみる
$ trash-restore
   0 2015-08-30 04:55:05 /home/XXXX/test.txt
What file to restore [0..0]: 0

Python の環境構築

様々な解析スクリプトを記載するのに大抵 Python を利用する。 Python には現行で Python2 および Python3 の2種類存在するが、ライブラリの対応状況の関係上どちらの環境も構築する必要がある。

必須パッケージとして cython, numpy, scipy, および matplotlib をインストールするが、これらは高速化のために内部的に C を利用しているため依存関係をディストリビューションパッケージを元に解決し、インストールを行う。なおディストリビューション配布パッケージの依存関係確認には apt-cache depends <package> が使え、下記は apt-cache depends cython3 python3-numpy python3-scipy python3-matplotlib にて依存関係を調べた結果を元に書いている。 なお、ディストリビューションパッケージを利用してインストールを行っても良いが、その場合は 絶対に pip などでアンインストールを行ってはいけない。最新の pip であればアンインストールができないような処理が加わっているが、誤ってディストリビューションパッケージを apt-get purge 以外の方法で削除すると依存関係が壊れ、環境の再構築がとても難しくなる。 ちなみに、ディストリビューションパッケージを利用してインストールを行うとかなり古いバージョンしかインストールができないため、あえて利用していない。

# Python 用のパッケージマネージャのインストール
$ sudo apt-get install python-pip
$ sudo apt-get install python3-pip
# ディストリビューションパッケージ依存関係のインストール
$ sudo apt-get install libc6 python3-dev gcc
$ sudo apt-get install libblas3 gfortran
$ sudo apt-get install libgcc1 libgfortran3 libstdc++6 libumfpack5.6.2 g++
$ sudo apt-get install libfreetype6 libpng12-0 libtcl8.6 libtk8.6 dvipng gir1.2-gtk-3.0 ghostscript librsvg2-common texlive-extra-utils texlive-latex-extra ttf-staypuft
$ sudo apt-get install libspqr1.3.1 libbtf1.2.0 libcsparse3.1.2 libcxsparse3.1.2 libklu1.2.1 libldl2.1.0
# MDAnalysis にて Amber Trajectory を読み込むために必要なライブラリのインストール
$ sudo apt-get install libhdf5-dev libnetcdf-dev
# 各パッケージのインストール (ディストリビューションパッケージを利用していない点に注意)
$ sudo -H pip2 install cython                 # Python <-> C の連携補助パッケージ
$ sudo -H pip2 install numpy --verbose        # 数値計算用パッケージ
$ sudo -H pip2 install scipy --verbose        # 科学計算用パッケージ
$ sudo -H pip2 install matplotlib --verbose   # グラフ描画用パッケージ
$ sudo -H pip2 install sphinx                 # seaborn が要求するため
$ sudo -H pip2 install seaborn                # matplotlib の補助パッケージ
$ sudo -H pip2 install pandas                 # 統計解析用パッケージ
$ sudo -H pip2 install scikit-learn           # 機械学習用パッケージ
$ sudo -H pip2 install biopython              # PDBファイルなどを扱うパッケージ
$ sudo -H pip2 install mdanalysis             # MDの結果解析用パッケージ
$ sudo -H pip2 install mdtraj                 # MDの結果解析用パッケージ
# Python 3 へのインストール
$ sudo -H pip3 install cython                 # Python <-> C の連携補助パッケージ
$ sudo -H pip3 install numpy --verbose        # 数値計算用パッケージ
$ sudo -H pip3 install scipy --verbose        # 科学計算用パッケージ
$ sudo -H pip3 install matplotlib --verbose   # グラフ描画用パッケージ
$ sudo -H pip2 install sphinx                 # seaborn が要求するため
$ sudo -H pip3 install seaborn                # matplotlib の補助パッケージ
$ sudo -H pip3 install pandas                 # 統計解析用パッケージ
$ sudo -H pip3 install scikit-learn           # 機械学習用パッケージ
$ sudo -H pip3 install biopython              # PDBファイルなどを扱うパッケージ
$ sudo -H pip3 install mdtraj                 # MDの結果解析用パッケージ

JupyterHub のインストール

解析スクリプトの記載に IPython Notebook (Jupyter) を各ユーザーごとに自動で起動する JupyterHub を利用する。 JupyterHub は Python 3 にしか対応していないため Python 3 領域にインストールを行う。 ただし JupyterHub が起動する Jupyter は Python 2 / Python 3 双方に対応しており、起動後に内部で利用する Python を切り替えることができるのでどちらもインストールする。

# 依存パッケージのインストール
$ sudo apt-get install npm nodejs-legacy
$ sudo npm install -g configurable-http-proxy
# Jupyter のインストール
$ sudo -H pip2 install jupyter
$ sudo -H pip3 install jupyter
# JupyterHub と必要パッケージのインストール
$ sudo -H pip3 install jupyterhub
$ sudo -H pip3 install chardet
# Python 2 / Python 3 をどちらもカーネルとして登録する
$ sudo -H jupyter kernelspec install-self
$ sudo -H jupyter3 kernelspec install-self

次に HTTPS 通信を行うために自己証明証を作成する。JupyterHub はデフォルトで Linux 上のアカウント認証を利用するため HTTP 通信では通信傍受によりパスワード露呈の危険性があるためこの作業を行う必要がある。 下記作業では10年間 (3650日) 有効な自己証明証を作成している(参考: http://d.hatena.ne.jp/ozuma/20130511/1368284304)。

# 秘密鍵の作成
$ openssl genrsa 2048 > server.key
# 証明書署名要求(公開鍵と秘密鍵のハッシュ)の作成
$ openssl req -new -key server.key > server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:<都道府県>
Locality Name (eg, city) []:<市>
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<企業名>
Organizational Unit Name (eg, section) []:<部署名>
Common Name (e.g. server FQDN or YOUR name) []:<担当者名>
Email Address []:<担当者メールアドレス>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
# 証明書署名要求への署名(証明書作成)
$ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt

次に作成した証明書一式を /srv/jupyterhub/ssl秘密鍵が root ユーザー以外からは閲覧できないように適切に権限を設定する。

$ sudo mkdir /srv/jupyterhub/ssl
$ sudo mv server.* /srv/jupyterhub/ssl
$ sudo chown -R root:root /srv/jupyterhub/ssl
$ sudo chmod 400 /srv/jupyterhub/ssl/server.key
$ sudo chmod 644 /srv/jupyterhub/ssl

次に上記で作成した自己証明書を利用して https 通信により JupyterHub を起動する設定ファイルを作成する。

# /etc/jupyterhub/jupyterhub_config.py
import os

runtime_dir = '/srv/jupyterhub'

c = get_config()

# https on 443
c.JupyterHub.port = 443
c.JupyterHub.ssl_key = os.path.join(runtime_dir, 'ssl', 'server.key')
c.JupyterHub.ssl_cert = os.path.join(runtime_dir, 'ssl', 'server.crt')

# put the JupyterHub cookie secret and state db in /var/run/jupyterhub
c.JupyterHub.cookie_secret_file = os.path.join(runtime_dir, 'cookie_secret')
c.JupyterHub.db_url = os.path.join(runtime_dir, 'jupyterhub.sqlite')

# put the log file in /var/log
c.JupyterHub.log_file = '/var/log/jupyterhub.log'

# start single-user notebook server in ~/notebooks
c.Spawner.notebook_dir = '~/notebooks'

上記で ~/notebooks を起動ディレクトリとして指定しているので、各ユーザーのホームディレクトリに notebooks というディレクトリが存在する必要があることに注意。 また新規で作成したユーザーのホームディレクトリに notebooks を自動的に作成するために、下記コマンドにて /etc/skel に該当ディレクトリを作成しておく。

$ sudo mkdir /etc/skel/notebooks

最後に再起動時に自動で JupterHub が起動するように /etc/rc.local に以下を追記する。

# /etc/rc.local

/usr/local/bin/jupyterhub -f /etc/jupyterhub/jupyterhub_config.py &

グラフィックドライバのインストール

利用しているサーバーではディスプレイ用グラフィックボードとして NVS 300 を、計算用グラフィックボードとして Tesla M2090 を利用している。 デスクトップ環境を利用するためには NVS 300 に適切なドライバが設定されている必要があるがNVIDIAドライバダウンロードにて各グラフィックボードを検索した結果

  • NVS 300 に最適なドライバ: NVIDIA binary driver - version 340.x
  • Tesla M2090 に最適なドライバ: NVIDIA binary driver - version 346.x

と上記2つのグラフィックボードで最適なドライバのバージョンが異なることがわかった。 試行錯誤した結果 NVS 300 は 346.x 系列のドライバに対応していないが Tesla M2090 は 340.x 系列のドライバでも利用可能が判明した。 ただ、本サーバーは計算機用サーバーなのでグラフィカルデスクトップ環境の構築を諦め 346.x 系列のドライバをインストールすることにした。

Ubuntu の公式パッケージにも 340.x および 346.x 系列のドライバは存在するが、今後のことを考え Personal Package Archive (PPA) を利用しインストールする。 端末にて下記を実行する、なお最後にグラフィックドライバの適用を行うために再起動を行っているので注意。

$ sudo add-apt-repository ppa:xorg-edgers/ppa
$ sudo apt-get update
$ apt-cache search 'nvidia-[0-9]+$'
nvidia-173 - NVIDIA legacy binary driver - version 173.14.39
nvidia-310 - Transitional package for nvidia-310
nvidia-319 - Transitional package for nvidia-319
nvidia-304 - NVIDIA legacy binary driver - version 304.125
nvidia-331 - NVIDIA binary driver - version 331.113
nvidia-340 - NVIDIA binary driver - version 340.76
nvidia-346 - NVIDIA binary driver - version 346.47
# 以下各バージョンが羅列される
$ sudo apt-get install nvidia-346
$ sudo reboot

インストール後に nvidia-smi が実行できるか確認を行う。 再現条件が不透明だが NVIDIA-SMI has failed because it couldn't communicate with NVIDIA driver. Make sure the latest NVIDIA driver is installed and running. というエラーメッセージにより正しく nvidia-smi が実行できない場合がある。一時的に発生している場合は sudo nvidia-smi とすることで起動に必要な仮想ファイル郡を作成させることができ、それ以後は nvidia-smi で実行できるようになるはずである。 なお、継続的に上記エラーが発生する場合は 4.4. Device Node Verification - Getting Started Linux :: CUDA Toolkit Documentation を読むと良い。

CUDA Toolkit (CUDA コンパイラ) のインストール

GPU を計算機利用するために CUDA Toolkit をインストールする。 この CUDA Toolkit を用いて Amber をコンパイルすることで GPU に対応した pmemd.cudapmemd.cuda.MPI が利用できるようになる。 Amber の GPU サポートページ を確認したところ CUDA Toolkit 7.0 までは対応しているようなので、これを用いる。 上記リンクから Ubuntu 14.04 用の Network Installer をダウンロードし、サーバーのホームディレクトリに配置後、以下のコマンドにてインストールを実行する。

$ sudo dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb
$ sudo apt-get update
$ sudo apt-get install cuda

上記コマンドは(不必要なほど)多くのパッケージをインストールするため、時間がかかる。 本来不要なパッケージもインストールされているような気がするが、とりあえず上記を利用する。

インストール後に環境変数などの設定を行う必要がある。下記に上げる2つのファイルを新たに作成する。

# /etc/profile.d/00-cuda.sh
export CUDA_HOME="/usr/local/cuda"
export PATH="${CUDA_HOME}/bin:${PATH}"
export MAPNATH="${CUDA_HOME}/doc/man:${MANPATH}"
# /etc/ld.so.conf.d/cuda.conf
/usr/local/cuda/lib64

上記2つのファイルを記載後に下記コマンドを実行し、構成のリロード及び環境変数の適用およびインストールの正常終了を確認する。

# ライブラリの更新
$ sudo ldconfig
# 環境変数の読み込み (次回以降はログイン時に自動で読まれる)
$ source /etc/profile.d/00-cuda.sh
# インストールが正常に終了していれば下記コマンドにてバージョン情報が表示される
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2015 NVIDIA Corporation
Built on Mon_Feb_16_22:59:02_CST_2015
Cuda compilation tools, release 7.0, V7.0.27

Intel Parallel Studio XE Cluster Edition for Linux のインストール

Amber のコンパイルgcc を利用するよりも Intel から出ている通称 Intel コンパイラを利用すると最大で実行速度が 30% 程度向上する。 保存してある parallel_studio_xe_2016.tgz をサーバーのホームディレクトリに配置後に下記を実行する(なお、ライセンスは自身で取得もしくは適切な管理者に問い合わせること)。 なおルートから見てパスにスペースを含む場所で下記を実行するとエラーによりインストールが出来なかったので注意。 また一部依存関係でインストールできない物があると警告が出たが無視した。

$ tar zxvf parallel_studio_xe_2016.tgz
$ cd parallel_studio_xe_2016
$ sudo ./install.sh

インストール後に環境変数などの設定を行う必要がある。下記に上げるファイルを新たに作成する。

# /etc/profile.d/00-intel_compiler.sh
export INTEL_COMPILER_HOME="/opt/intel"
. ${INTEL_COMPILER_HOME}/bin/compilervars.sh intel64

上記のファイルを記載後に下記コマンドを実行し、環境変数の適用を行う。

$ source /etc/profile.d/00-intel_compiler.sh
$ icc -V
Intel(R) C Intel(R) 64 Compiler for ... Version 16.0.0.109 Build ...
Copyright (C) 1985-2015 Intel Corporation. All rights reserved.

$ icpc -V
Intel(R) C Intel(R) 64 Compiler for ... Version 16.0.0.109 Build ...
Copyright (C) 1985-2015 Intel Corporation. All rights reserved.

$ ifort -V
Intel(R) C Intel(R) 64 Compiler for ... Version 16.0.0.109 Build ...
Copyright (C) 1985-2015 Intel Corporation. All rights reserved.

Amber 14 のインストール

最後に Molecular Dynamics シミュレーション用のソフトウェアである Amber 14 をインストールする。 Amber 14 インストール時にはインストール先の書き込み権限が必要になるので、まずは自身のホームディレクトリにインストールし、インストール完了後に ~/amber14/opt/amber14 へと移動する。 保存してある Amber14.tar.bz2 および AmberTools14.tar.bz2 をサーバーのホームディレクトリに配置後、下記を実行する。

Amber 14 および AmberTools15 のインストール

まずは Amber (sander, pmemd 等) 本体および AmberTools (tleap, cpptraj 等) をインストールする。

# 必須パッケージのインストール
$ sudo apt-get install csh flex gfortran g++ xorg-dev zlib1g-dev libbz2-dev patch \
    python-dev python-tk python-matplotlib
# インストール時に必要な環境変数の定義
$ export AMBERHOME="~/amber14"
$ export MKL_HOME="/opt/intel/mkl"
# パッケージの展開
$ tar xvfj AmberTools14.tar.bz2
$ tar xvfj Amber14.tar.bz2
# パッケージの更新 (AmberTools15へと更新, 更新プログラムの更新が入るため二度実行する必要がある)
$ cd amber14
$ ./update_amber --upgrade
$ ./update_amber --upgrade
# Amber14/AmberTools15 のコンパイル~テスト
$ ./configure intel
# 環境変数などを構築するファイルが作成されるので一時的に読み込む
# すべてのインストール完了後に /etc/profile.d にリンクする
$ source amber.sh
$ make -j 12 install
$ make test # とても時間がかかる

pmemd.cuda 等のインストール

次に pmemd.cuda 等の GPU を利用するソフトウェアのインストールを行う。

# ~/amber14 にて
$ ./configure -cuda intel
$ make -j 10 install
$ make test # とても時間がかかる (nvidia-smi -l で GPU 使用状況を確認できる)

pmemd.MPI および pmemd.cuda.MPI 等のインストール

最後に pmemd.MPIpmemd.cuda.MPI などをインストールする。 Amber は複数の CPU や GPU を同時に利用するために Message Passing Interface (MPI) というアーキテクチャを利用している。 MPI の実装には様々あるが後述する分子集団系の自由エネルギーを計算するソフトウェアである ERmodIntel コンパイラを利用した場合 Intel MPI が自動的に使われるため、合わせるために Intel MPI を利用する。 ただし Intel MPI を利用したコンパイル方法は現段階でサポートされていないため ./configure 終了後に強制的に書き替えを行っている。

$ cd ~/amber14
# pmemd.MPI 等のインストール
$ MPICC=mpiicc MPICXX=mpiicpc ./configure -mpi intel
# 強制的に Intel MPI を選択
$ sed -i config.h -e 's/mpicc/mpiicc/g'      # mpicc -> mpiicc
$ sed -i config.h -e 's/mpicxx/mpiicpc/g'    # mpicxx -> mpiicpc
$ sed -i config.h -e 's/mpif90/mpiifort/g'   # mpif90 -> mpiifort
$ make -j 12 install
$ export DO_PARALLEL="mpirun -np 12" # 全 CPU を利用
$ make test # とても時間がかかる
# pmemd.cuda.MPI 等のインストール
$ MPICC=mpiicc MPICXX=mpiicpc ./configure -cuda -mpi intel
# 強制的に Intel MPI を選択
$ sed -i config.h -e 's/mpicc/mpiicc/g'        # mpicc -> mpiicc
$ sed -i config.h -e 's/mpicxx/mpiicpc/g'      # mpicxx -> mpiicpc
$ sed -i config.h -e 's/mpif90/mpiifort/g'     # mpif90 -> mpiifort
$ sed -i src/config.h -e 's/mpicc/mpiicc/g'    # mpicc -> mpiicc
$ sed -i src/config.h -e 's/mpicxx/mpiicpc/g'  # mpicxx -> mpiicpc
$ sed -i src/config.h -e 's/mpif90/mpiifort/g' # mpif90 -> mpiifort
$ make -j 12 install
$ export DO_PARALLEL="mpirun -np 4" # 全 GPU を利用
$ make test # とても時間がかかる (nvidia-smi -l で GPU 使用状況を確認できる)

/opt/amber14 への移動および /etc/profile.d/amber.sh の作成

上記のインストールが完了した後、ホームディレクトリにインストールした Amber 14 を /opt/amber14 へと移動する。 下記コマンドを実行。

$ sudo mv ~/amber14 /opt/amber14
$ sudo chown -R root:root /opt/amber14

また作成された amber.sh には AMBERHOME が設定されているので下記のように修正する。

# /opt/amber14/amber.sh
-  export AMBERHOME="/home/XXXX/amber14"
+  export AMBERHOME="/opt/amber14"
   export PATH="${AMBERHOME}/bin:${PATH}"

最後に /opt/amber14/amber.sh/etc/profile.d/01-amber.sh へとシンボルリンクする。 なお 01- としているのは 00-cuda.sh00-intel_compiler.sh よりも後で読み込まれることを保証するため。

$ sudo ln -s /opt/amber14/amber.sh /etc/profile.d/01-amber.sh

packmol のインストール

特定の濃度になるように溶媒を配置するなどの処理を行うプログラムである packmol をインストールする。 上記よりダウンロードしてきた packmol-15.217.tar.gz をホームディレクトリに移動した後、下記を行う。

$ tar zxvf packmol-15.217.tar.gz
$ cd packmol
$ ./configure ifort # Intel Compiler にてコンパイルを行う
$ make -j 12
$ cd ../
$ sudo mv packmol /opt/packmol-15
$ sudo ln -s /opt/packmol-15 /opt/packmol

また、インストール後に環境変数などの設定を行う必要がある。下記に上げるファイルを新たに作成する。

# /etc/profile.d/00-packmol.sh
export PACKMOL_HOME="/opt/packmol"
export PATH="${PACKMOL_HOME}:${PATH}"

上記のファイルを記載後に下記コマンドを実行し、環境変数の適用および確認を行う (Ctrl-C で終了する)。

$ source /etc/profile.d/00-packmol.sh
$ packmol
##############################################################

 PACKMOL - Packing optimization for the automated
 generation of starting configurations for
 molecular dynamics. 
 
                                          Version 15.217 

##############################################################


  Packmol must be run with: packmol < inputfile.inp 
 
  Userguide at: www.ime.unicamp.br/~martinez/packmol 
 
  Reading input file... (Control-C aborts)

MODELLER のインストール

変異タンパク質の構造作成などを行うプログラムである MODELLER をインストールする。 上記よりダウンロードしてきた modeller_9.15-1_amd64.deb をホームディレクトリに移動した後、下記を行う。

$ sudo env KEY_MODELLER=XXXXXXXX dpkg -i modeller_9.15-1_amd64.deb

また、サンプルファイルは /usr/lib/modeller9.15/examples にあるので、以下にて確認が出来る。

$ cp -a /usr/lib/modeller9.15/examples ~
$ cd examples/automodel
$ python model-default.py

ERmod のインストール

ソフト分子集団系の自由エネルギーを計算するプログラムである ERmod をインストールする。 上記よりダウンロードしてきた ermod-0.3.1.tar.gz をホームディレクトリに移動後、下記を行う。

$ tar zxvf ermod-0.3.1.tar.gz
$ cd ermod-0.3.1
$ ./configure --with-mkl --prefix=/opt/ermod-0.3.1
$ make -j 12
$ sudo make install
$ sudo ln -s /opt/ermod-0.3.1 /opt/ermod

また、インストール後に環境変数などの設定を行う必要がある。下記に上げるファイルを新たに作成する。

# /etc/profile.d/02-ermod.sh
export ERMOD_HOME="/opt/ermod"
export PATH="${ERMOD_HOME}/bin:${PATH}"

上記のファイルを記載後に下記コマンドを実行し、環境変数の適用および確認を行う。

$ source /etc/profile.d/02-ermod.sh
$ ermod -v
 ERmod 0.3.1, Copyright (C) 2000-2015 Nobuyuki Matubayasi
                            2010-2015 Shun Sakuraba
 ERmod comes with ABSOLUTELY NO WARRANTY.
 This is free software, and you can redistribute it
 and/or modify it under certain conditions.
 See LICENSE file for details.
Error: vmdfio.c: failed to open with vmdfio_open_traj_. (filename = "HISTORY".) Perhaps it's not a symbolic link?
vmdfio_open_traj: unable to open trajectory. HISTORY must be a symlink

mdu2 のインストール (プライベート)

これはプライベートレポジトリに存在する自作アプリなので完全に個人向け + 同研究室向けメモ。 Amber にて MD シミュレーションを行う場合、システムの作成、エネルギー最小化計算、MDシミュレーション、解析といった一連の流れの中で数多くの「同じ作業」が発生。 これを自動で良しなにやってくれるソフトとして mdu2 というものを作成したので、これをインストールする。

先に言ったとおり mdu2 は Bitbucket のプライベートレポジトリに存在するので、まずは RSA 鍵を作成しレポジトリをクローン出来るようにする。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/XXXX/.ssh/id_rsa)
...

上記コマンドにて ~/.ssh/id_rsa~/.ssh/id_rsa.pub が作成されるが、 そのうち ~/.ssh/id_rsa.pub が公開鍵なので、このファイルの内容を Bitbucket の自分の Manage account -> Security -> SSH Keys に追加すれば良い。 この追加を行うことで下記コマンドにて mdu2 をクローンすることが出来るようになる (そのユーザーが mdu2 レポジトリの閲覧権限を持っていれば)。

$ cd ~
$ git clone git@bitbucket.org:lambdalisue/mdu2
$ sudo mv mdu2 /opt/mdu2

下記のファイルを新たに作成する。なお 02- としているのは 01-amber.sh よりも後で読み込まれることを保証するため。

# /etc/profile.d/02-mdu2.sh
export MDU2HOME="/opt/mdu2"
export PATH="$MDU2HOME/bin:$PATH"

無事にインストールが完了していれば下記コマンドにてヘルプが表示される。

$ source /etc/profile.d/02-mdu2.sh
$ mdu2