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...) があるが、どれも設定が複雑なのが面倒くさい (sendmail や postfix 専用の本が出るほど)。 今回はメールサーバーを作る目的で 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 # ... <Directory /var/cache/munin/www> 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.cuda
や pmemd.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.MPI
や pmemd.cuda.MPI
などをインストールする。
Amber は複数の CPU や GPU を同時に利用するために Message Passing Interface (MPI) というアーキテクチャを利用している。
MPI の実装には様々あるが後述する分子集団系の自由エネルギーを計算するソフトウェアである ERmod が Intel コンパイラを利用した場合 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.sh
や 00-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