概要
現在加筆編集中、よく調べていないことも書いてあります。
デバッグ時に、実行したスクリプトなどを残すようにする
galaxy.ini の中で、 cleanup_job=never
を設定する
環境変数について
環境変数をたくさん使えそうなイメージがあったのだが、これは
docker galaxy stableを作るときだけかもしれない。
もしあれば、使えるものを調べたい
調べかけ。書きかけ
Docker Galaxy の compose の下などで
GALAXY_CONFIG_CLEANUP_JOB=${GALAXY_CONFIG_CLEANUP_JOB:-onsuccess}
のように設定をしていて、実際にdockerコンテナ内では、
- GALAXY_CONFIG_CLEANUP_JOB
という環境変数に、値が保存されている。
Galaxyは実際にどこで取得しているのかを調査している
GalaxyConfigBuilder
def load_app_properties(
kwds={},
ini_file=None,
ini_section="app:main",
config_prefix="GALAXY_CONFIG_"
):
Galaxy を設定したり、ツール作ったり、実行環境を整備したときにチェックしたいこと
- 投入したジョブを停止したときに、きちんとプログラムが停止するか
- 一時停止はできるか?
- 一時停止後の再開はできるか?
job_conf.xmlなどについて。
job_conf.xmlの設定を変更したり、差し替えた時の注意点
job_conf.xmlを変更する設定をしていると、ジョブの投入に失敗することがある。
この時、ジョブをそのままにしておくと、そのまま続きが流れないことがある。
再起動しても、ジョブがたまるばかりな場合、ジョブを削除すると、その後のジョブが流れることがある。
設定など
また、tool ごとの設定など。
metadataが展開されて困ること
job_conf.xml のちいさなサンプルがある
パフォーマンス関連
Real Userとしてジョブを投げるなどもある。
job_conf.xml での docker 関連の記述について
パラメータの指定は、job_conf.xml
の中で、docker_volumes
で指定する
<param id="docker_volumes">$defaults,/mnt/galaxyData/libraries:ro,/mnt/galaxyData/indices:ro</param>
docker galaxy stable のコンテナでは $defaults
は以下のように展開される
Galaxyでの変数 | 展開されたディレクトリ | 未確認だが、どのディレクトリか |
---|---|---|
$galaxy_root:ro | /galaxy-central | Galaxyのroot |
$tool_directory:ro | /galaxy-central/tools/outputhostname | 実行中のツールのディレクトリ |
$job_directory:ro | /export/galaxy-central/database/job_working_directory/000/3 | 実行中のジョブのディレクトリ |
$working_directory:rw | /export/galaxy-central/database/job_working_directory/000/3/working | workingディレクトリ |
$default_file_path:rw | /export/galaxy-central/database/files | GALAXY_CONFIG_FILE_PATH |
docker コンテナで、ジョブを実行するときに、データが見れないときに確認すること
見せたいファイル、または、そのファイルのあるディレクトリが、リンクであるかを確認する。
リンクである場合、それが docker コンテナから見ることができる位置なのかも確認する。
Sun GridEngine(SGE)関連
ツールの作成
はじめようツール開発を読むのが良い。
そこにある、hellogalaxyのサンプルがわかりやすい。
config/tool_conf.xml
に追加する方法が書いてある
interpreterの説明なども参考にした。
最新はこちらをみたほうがよい?
planemoの使い方とか
Galaxy IUC を見ていたら見つけた。
- Best Practices for Creating Galaxy Tools — Galaxy IUC Standards and Best Practices 0.1 documentation
planemo の仮想マシン環境
toolのXMLの書式
pythonのTemplate Engine である cheetah が使われているとのこと
git cloneしてきてすぐに run.sh をしたときに使われる tool_conf.xml
実際にはこれが使われているようだ。
config/tool_conf.xml.sample
おそらくファイル名を変更したほうがよさそうではある。
config/tool_conf.xml
ツールはうまく動いているようだが赤くなってエラーになっている場合
- 終了ステータスコードが0になっているか?
- 標準エラーになにか出力されていないか?(ちょっとでも出力されると、エラーと判定される)
実際に判定している部分
おそらくここ
galaxy/output_checker.py at c78a23cb873cf5cbcf177cfa7052ae6dad506eea · galaxyproject/galaxy
おそらく、テストコード
galaxy/test_job_output_checker.py at c78a23cb873cf5cbcf177cfa7052ae6dad506eea · galaxyproject/galaxy
WORKAROUND
XMLのなかのツールを実行する部分で、全部標準出力にする。
2>&1
これをつけて回避できなくはない。
ただし本当のエラー
を見落としかねない
perl の WORKAROUND
perl の Warning ならば、-X
で解決できるケースもある。
perl -X
TODO
ジョブを止めた時の処理に関する扱いはあるか?
ツールが表示されない
きちんと、タグをとじていないとか、
xmlとしてまずい形式だとよみこまれないようだ。
CDATAをつかったほうがよさそうだけど
気をつけるのは、
- 閉じタグ
- コメントの中の -- とハイフンが2つあるとき
-
左にひらいている記号
管理者向けガイド
Tool xml
tool inputs conditional
Sun Gridengine
stderr に何か出力されると、エラーになる?
training
A collection of training material from offered Galaxy courses
Database の構造
WebAPI serverside
API 使ったサンプル
API を叩くライブラリ bioblend
python でコードがかけるならば
API を叩くライブラリをラップしたもの parsec
bioblend をラップしたコマンドラインツール
lint
tox -e py27-lint
Makefile
ここで、tar.gzなどを作っていると思われる。
(dev/Makefile)[https://github.com/galaxyproject/galaxy/blob/dev/Makefile]
追記2017-01-11
そうではないようで、新しいブランチを作ったりするもののようだ
古いGalaxy Dockerで、起動停止をすると、データが消えるとき
postgresqlのデータが、消えることがある。
そのときは、
/etc/postgresql/9.3/main/postgresql.conf
data_directory = '/var/lib/postgresql/9.3/main/'
この行を削除するとよい。
参考
コンフィグの読み込みについて
実例のメモ
GALAXY_CONFIG_CLEANUP_JOB=${GALAXY_CONFIG_CLEANUP_JOB:-onsuccess}
のように設定をしていて、実際にdockerコンテナ内では、
GALAXY_CONFIG_CLEANUP_JOB
に、値が保存されている。
実際にGalaxyのどこで取得しているのかを調査している
https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/config.py
GalaxyConfigBuilder
def load_app_properties(
kwds={},
ini_file=None,
ini_section="app:main",
config_prefix="GALAXY_CONFIG_"
):
job_config_file job_conf.xml の読み込みについて
job_config_file の定義は、上のサイトにでている
Galaxy からジョブが投入できない
クラスタ環境にジョブを投入するには、1つは実行ノードが起動している必要があるようだ。
下記のスレッドをみると、CloudManでもそうだったようです。
ジョブスケジューラにジョブをなげたら "The cluster DRM system terminated this job"
以下に書いてある。
大抵は wall time だろうとのこと。
ツールごとに、実行する場所を変えたい
job_conf.xml で指定する
<?xml version="1.0"?>
<job_conf>
<plugins workers="8">
<plugin id="sge" type="runner" load="galaxy.jobs.runners.drmaa:DRMAAJobRunner">
<param id="drmaa_library_path">/usr/lib/gridengine-drmaa/lib/libdrmaa.so.1.0</param>
</plugin>
</plugins>
<handlers>
<handler id="main"/>
</handlers>
<destinations default="cluster">
<destination id="cluster" runner="sge">
<param id="embed_metadata_in_job">False</param>
</destination>
<destination id="cluster_e1" runner="sge">
<param id="nativeSpecification"> -q e1only </param>
<param id="embed_metadata_in_job">False</param>
</destination>
<destination id="cluster_e2" runner="sge">
<param id="nativeSpecification"> -q e2only </param>
<param id="embed_metadata_in_job">False</param>
</destination>
</destinations>
<limits>
<limit type="registered_user_concurrent_jobs">1</limit>
<limit type="anonymous_user_concurrent_jobs">1</limit>
<limit type="destination_user_concurrent_jobs">1</limit>
<limit type="destination_total_concurrent_jobs">1</limit>
<limit type="unregistered_user_concurrent_jobs">1</limit>
</limits>
<tools>
<tool id="e1onlyjob" destination="cluster_e1" />
<tool id="e2onlyjob" destination="cluster_e2" />
</tools>
</job_conf>
データのアップロードに関して
2GB程度までなら、公式のツール?でもよいようである。
あとは、wgetやcurlでとってきて、直接配置する。またはFTP(Galaxyの)にアップロードするようである。
Quota制限について
その他 Galaxy 公式サポート関連
書きかけ、Galaxy デバッグ環境について
Galaxyのプロセスに対して、pdbをアタッチ、特にリモートからアタッチしたいことがある。
そんなときは、pdb-clone
が使えるかもしれない
デバッグしたいところに以下のコード(ただしそれをやる前にmainでやることがある、それについては、下に書いた)
from pdb_clone import pdb; pdb.set_trace_remote()
Docker Galaxy の場合、
galaxy webは、以下のもの、中身pythonスクリプト
ただしこのスクリプトはvirtualenvで動いている。
pdb-clone
をいれるには
source /galaxy_venv/bin/activate
virtualenv環境にはいっていることを確認してから
pip install pdb-clone
/galaxy_venv/bin/uwsgi
に、
from pdb_clone import pdbhandler; pdbhandler.register()
galaxy 起動後は pdb-attach
いかのオプションがなくても実行できたようにおもっている
--kill --pid PID
(galaxy_venv)root@19149b574344:/galaxy_venv# pdb-attach
Connected to uwsgi at ('127.0.0.1', 7935), pid: 1554.
> /galaxy_venv/bin/uwsgi(10)<module>()
-> if __name__ == '__main__':
(Pdb)
TODO
コンフィグの状態を確認した。
app.config ?
ブラウザで想定がのエラーがでたときのチェック方法
Docker Galaxy を使っているとき、
本来エラーがでるはずではないと、期待されている、または、そのようなコードになっていないようにみえるときは、
/usr/bin/startup_lite
このコマンドで起動すると必要最低限のものしか起動がされない。
データベーススキーマのチュートリアル
tool の xml の構造、特に tool > help について
いくつか reStructuredText で何かをかけるようだ
infomark とか warningmark とか。画像。
Galaxy Architecture
Docker Galaxy Stable のadminユーザ追加方法
create_galaxy_user.py
は、ここ にある。
ただしこのファイルは、ansibleの記法を含んでいる
run.sh のオプション
daemon で起動する
./run.sh --daemon
daemon を停止する
./run.sh --stop-daemon
再起動
./run.sh restart
CVMFS使ったデータの配布関連
Galaxyでは、
CERNの開発した、CernVM File System | cernvm.web.cern.ch を利用した、データの配布方法があるらしい。
何を配布しているのかなどを調べて書いていく予定。
CVMFSのマニュアル
データレポジトリかと思われる。要確認
レポジトリサーバ自体のコードかもしれない。
CVMFSのクライアントをいれるための、ansible playbook
データをレポジトリからとってくるための、ansible playbookのようだ
GalaxyCloudの Read the Docs
Onedataについてのドキュメント、Onedataが何かは要確認
Docker Galaxy Stable における CVMFS
以下のところによると、 usegalaxy にあるデータ同じものが使えるようです。
Galaxy の内部
コードの構造
Galaxy のシステム概念図?
これ