Galaxyで関連のメモ

# 概要

現在加筆編集中、よく調べていないことも書いてあります。


* [Galaxy 公式のサポートページ](https://galaxyproject.org/support/)

## デバッグ時に、実行したスクリプトなどを残すようにする


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は実際にどこで取得しているのかを調査している

https://github.com/galaxyproject/galaxy/blob/dev/lib/galaxy/config.py

GalaxyConfigBuilder

https://github.com/galaxyproject/galaxy/blob/98ee91f467039f27f4e10d730f78057d1421e833/lib/galaxy/util/properties.py

```python
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を変更する設定をしていると、ジョブの投入に失敗することがある。
この時、ジョブをそのままにしておくと、そのまま続きが流れないことがある。
再起動しても、ジョブがたまるばかりな場合、ジョブを削除すると、その後のジョブが流れることがある。

## 設定など

* [Admin/Config/Jobs - Galaxy Wiki](https://wiki.galaxyproject.org/Admin/Config/Jobs)

また、tool ごとの設定など。

* [ImportError when running job on local cluster](https://biostar.usegalaxy.org/p/16194/)

metadataが展開されて困ること

* [[galaxy-dev] setting up the drmaa for sge](https://lists.galaxyproject.org/pipermail/galaxy-dev/2014-January/018006.html)

job_conf.xml のちいさなサンプルがある

* [Admin/Config/Performance/Cluster - Galaxy Wiki](https://wiki.galaxyproject.org/Admin/Config/Performance/Cluster#DRMAA)

パフォーマンス関連
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>
```


https://github.com/galaxyproject/galaxy/blob/dev/config/job_conf.xml.sample_advanced#L345


https://github.com/galaxyproject/galaxy/blob/dev/config/job_conf.xml.sample_advanced#L273-L283

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)関連

* [Problem with SGE_ROOT, SGE / drmaa with Galaxy (updated)](https://biostar.usegalaxy.org/p/16187/)

* [Using Sge Cluster](https://biostar.usegalaxy.org/p/347/)


## ツールの作成

はじめようツール開発を読むのが良い。
そこにある、hellogalaxyのサンプルがわかりやすい。

```
config/tool_conf.xml
```
に追加する方法が書いてある



* [ツールのコンテナ化 - Pitagora-Galaxy Wiki](http://wiki.pitagora-galaxy.org/wiki/index.php/%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%8C%96)

* [はじめようツール開発](https://docs.google.com/document/d/1oKHSWv2veCgqkzgm39f5fn9bbXqPSoS-3E4C9WVaE9k/edit?pref=2&pli=1#)

* [Admin/Tools/ToolConfigSyntax - Galaxy Wiki](https://wiki.galaxyproject.org/Admin/Tools/ToolConfigSyntax)

interpreterの説明なども参考にした。

* [Admin/Tools/AddToolTutorial - Galaxy Wiki](https://wiki.galaxyproject.org/Admin/Tools/AddToolTutorial)

最新はこちらをみたほうがよい？
planemoの使い方とか

* [Tool Integration Short Tutorial - ifb](http://wiki.sb-roscoff.fr/ifb/index.php/Tool_Integration_Short_Tutorial#.3Ccommand.3E)

Galaxy IUC を見ていたら見つけた。

* [Best Practices for Creating Galaxy Tools — Galaxy IUC Standards and Best Practices 0.1 documentation](http://galaxy-iuc-standards.readthedocs.io/en/latest/best_practices.html)

## planemo の仮想マシン環境

- [Virtual Appliance — Planemo 0\.55\.0\.dev0 documentation](http://planemo.readthedocs.io/en/latest/appliance.html)

## toolのXMLの書式

pythonのTemplate Engine である cheetah が使われているとのこと

- [Cheetah User’s Guide — Cheetah \- The Python\-Powered Template Engine](https://pythonhosted.org/Cheetah/users_guide/)

## git cloneしてきてすぐに run.sh をしたときに使われる tool_conf.xml

実際にはこれが使われているようだ。

```
config/tool_conf.xml.sample
```

おそらくファイル名を変更したほうがよさそうではある。

```
config/tool_conf.xml
```

## ツールはうまく動いているようだが赤くなってエラーになっている場合

* 終了ステータスコードが０になっているか？
* 標準エラーになにか出力されていないか？（ちょっとでも出力されると、エラーと判定される）

### 実際に判定している部分

おそらくここ

[galaxy/output_checker.py at c78a23cb873cf5cbcf177cfa7052ae6dad506eea · galaxyproject/galaxy](https://github.com/galaxyproject/galaxy/blob/c78a23cb873cf5cbcf177cfa7052ae6dad506eea/lib/galaxy/jobs/output_checker.py#L17) 

### おそらく、テストコード

[galaxy/test_job_output_checker.py at c78a23cb873cf5cbcf177cfa7052ae6dad506eea · galaxyproject/galaxy](https://github.com/galaxyproject/galaxy/blob/c78a23cb873cf5cbcf177cfa7052ae6dad506eea/test/unit/jobs/test_job_output_checker.py) 

### WORKAROUND

XMLのなかのツールを実行する部分で、全部標準出力にする。

```
2>&1 
```

これをつけて回避できなくはない。

ただし`本当のエラー`を見落としかねない

#### perl の WORKAROUND

perl の Warning ならば、`-X` で解決できるケースもある。

```
perl -X
```

### TODO

ジョブを止めた時の処理に関する扱いはあるか？

### ツールが表示されない

きちんと、タグをとじていないとか、
xmlとしてまずい形式だとよみこまれないようだ。

CDATAをつかったほうがよさそうだけど

気をつけるのは、
* 閉じタグ
* コメントの中の -- とハイフンが２つあるとき
* > 左にひらいている記号

# 管理者向けガイド

* [Admin - Galaxy Wiki](https://wiki.galaxyproject.org/Admin)

# Tool xml

[Galaxy tool schema document](https://docs.galaxyproject.org/en/latest/dev/schema.html)

## tool inputs conditional


[tools inputs conditonal](https://docs.galaxyproject.org/en/latest/dev/schema.html#tool-inputs-conditional)

# Sun Gridengine

stderr に何か出力されると、エラーになる？

# training

[A collection of training material from offered Galaxy courses](https://github.com/bgruening/training-material)

[Galaxy Server administration](https://github.com/bgruening/training-material/tree/master/Admin-Corner)

# Database の構造

[Galaxy Database Schema](https://github.com/bgruening/training-material/blob/master/Admin-Corner/tutorials/Database_Schema.md)

# WebAPI serverside

[lib/galaxy/webapps/galaxy/api](https://github.com/galaxyproject/galaxy/tree/dev/lib/galaxy/webapps/galaxy/api)

## API 使ったサンプル

[API sample](https://github.com/galaxyproject/galaxy/tree/master/scripts/api)

## API を叩くライブラリ bioblend

python でコードがかけるならば

* [galaxyproject/bioblend: A Python library for interacting with CloudMan and Galaxy API](https://github.com/galaxyproject/bioblend)

### API を叩くライブラリをラップしたもの parsec

bioblend をラップしたコマンドラインツール

* [galaxy-iuc/parsec: Access Galaxy at the speed of light with automatically generated BioBlend wrappers](https://github.com/galaxy-iuc/parsec)

# lint


[snelis/tox docker hub](https://hub.docker.com/r/snelis/tox/)

```
tox -e py27-lint
```

[galaxy .travis.yml](https://github.com/galaxyproject/galaxy/blob/dev/.travis.yml)

# 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/'
```

この行を削除するとよい。

参考
* [remove data directory from the provision file · bgruening/docker-galaxy-stable@8086233](https://github.com/bgruening/docker-galaxy-stable/commit/808623323711eb9f82190b3f65098d0d82fbbbd2)

# コンフィグの読み込みについて

* [galaxy/config.py at master · galaxyproject/galaxy](https://github.com/galaxyproject/galaxy/blob/master/lib/galaxy/config.py)


## 実例のメモ

```
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

https://github.com/galaxyproject/galaxy/blob/98ee91f467039f27f4e10d730f78057d1421e833/lib/galaxy/util/properties.py

```python
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/__init__.py at bb5d450b32afca22b666095e9ea4482f08647e3d · galaxyproject/galaxy](https://github.com/galaxyproject/galaxy/blob/bb5d450b32afca22b666095e9ea4482f08647e3d/lib/galaxy/jobs/__init__.py)

# Galaxy からジョブが投入できない

クラスタ環境にジョブを投入するには、１つは実行ノードが起動している必要があるようだ。

下記のスレッドをみると、CloudManでもそうだったようです。

* [Galaxy Development List Archive - CloudMan: Autoscaling =Unable to run this job due to a cluster error](http://dev.list.galaxyproject.org/CloudMan-Autoscaling-Unable-to-run-this-job-due-to-a-cluster-error-td4665748.html)


# ジョブスケジューラにジョブをなげたら "The cluster DRM system terminated this job"

以下に書いてある。

* [Trinity Galaxy FAQ](http://ncgas.org/galaxy_trinity_faq.php)

大抵は wall time だろうとのこと。

# ツールごとに、実行する場所を変えたい

job_conf.xml で指定する

* [ツールのコンテナ化 - Pitagora-Galaxy Wiki](http://wiki.pitagora-galaxy.org/wiki/index.php/%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%8C%96)
* [Galaxy Job Configuration](https://galaxyproject.org/admin/config/jobs/)

例、[ことなるキューになげるサンプル](https://github.com/BioDevOps/docker-galaxy-bit/blob/master/shareddatadirectory/config/job_conf.xml.sge_different_queue.sample)

```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>
```

# データのアップロードに関して

２GB程度までなら、公式のツール？でもよいようである。
あとは、wgetやcurlでとってきて、直接配置する。またはFTP(Galaxyの)にアップロードするようである。

* [Download data](https://galaxyproject.org/support/download-data/)
* [Loading data](https://galaxyproject.org/support/loading-data/)

## Quota制限について

* [Quota](https://galaxyproject.org/main/#user-data-and-job-quotas)



# その他 Galaxy 公式サポート関連

* [公式のサポートページ](https://galaxyproject.org/support/)


# 書きかけ、Galaxy デバッグ環境について

Galaxyのプロセスに対して、pdbをアタッチ、特にリモートからアタッチしたいことがある。
そんなときは、`pdb-clone`が使えるかもしれない

https://bitbucket.org/xdegaye/pdb-clone/wiki/RemoteDebugging.md

デバッグしたいところに以下のコード（ただしそれをやる前に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
```
このコマンドで起動すると必要最低限のものしか起動がされない。

# データベーススキーマのチュートリアル

[Database schema tutorial](https://galaxyproject.github.io/training-material//topics/admin/tutorials/database-schema/tutorial.html)

# tool の xml の構造、特に tool > help について

いくつか reStructuredText で何かをかけるようだ

infomark とか warningmark とか。画像。

* [Galaxy Tool XML File — Galaxy Project documentation](https://docs.galaxyproject.org/en/master/dev/schema.html#tool-help)


# Galaxy Architecture

* [galaxy/galaxy_architecture.md at dev · galaxyproject/galaxy](https://github.com/galaxyproject/galaxy/blob/dev/doc/source/slideshow/architecture/galaxy_architecture.md)

# Docker Galaxy Stable のadminユーザ追加方法

* [docker-galaxy-stable/Dockerfile at 4c9e2ab7bbcd13449dd4a1848e0e494babdb3ea7 · bgruening/docker-galaxy-stable](https://github.com/bgruening/docker-galaxy-stable/blob/4c9e2ab7bbcd13449dd4a1848e0e494babdb3ea7/galaxy/Dockerfile#L208)

`create_galaxy_user.py` は、[ここ](https://github.com/galaxyproject/ansible-galaxy-extras/blob/master/templates/create_galaxy_user.py.j2) にある。
ただしこのファイルは、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](https://cernvm.cern.ch/portal/filesystem) を利用した、データの配布方法があるらしい。

何を配布しているのかなどを調べて書いていく予定。

CVMFSのマニュアル
* [Welcome to CernVM-FS’s documentation! — CernVM-FS 2.4.3 documentation](http://cvmfs.readthedocs.io/en/stable/index.html) 


データレポジトリかと思われる。要確認
レポジトリサーバ自体のコードかもしれない。

* [mtangaro/Reference-data-galaxycloud-repository: Reference Data repository for Galaxy](https://github.com/mtangaro/Reference-data-galaxycloud-repository) 


CVMFSのクライアントをいれるための、ansible playbook

* [indigo-dc/ansible-role-cvmfs-client](https://github.com/indigo-dc/ansible-role-cvmfs-client) 

データをレポジトリからとってくるための、ansible playbookのようだ

* [indigo-dc/ansible-role-galaxycloud-refdata: reference data ansible role for indigo-dc.galaxycloud](https://github.com/indigo-dc/ansible-role-galaxycloud-refdata) 


GalaxyCloudの Read the Docs

* [GalaxyCloud | Read the Docs](http://readthedocs.org/projects/galaxycloud/) 
* [mtangaro/galaxycloud-ReadTheDocs](https://github.com/mtangaro/galaxycloud-ReadTheDocs) 

Onedataについてのドキュメント、Onedataが何かは要確認

* [Onedata Documentation | Onedata Documentation](https://groundnuty.gitbooks.io/onedata-documentation/content/index.html) 

## Docker Galaxy Stable における CVMFS

以下のところによると、 [usegalaxy](https://usegalaxy.org) にあるデータ同じものが使えるようです。

* [docker-galaxy-stable/README.md at 83263f3c16cd0727e72a941bf5fd657c25ab95e0 · bgruening/docker-galaxy-stable](https://github.com/bgruening/docker-galaxy-stable/blob/83263f3c16cd0727e72a941bf5fd657c25ab95e0/README.md#cvmfs) 
* 
# Galaxy の内部

## コードの構造

- [Galaxy Code Architecture](http://galaxyproject.github.io/training-material/topics/dev/tutorials/architecture/slides.html#1)

## Galaxy のシステム概念図？

<blockquote class="twitter-tweet" lang="ja"><p></p><a href="https://twitter.com/NicolaSoranzo/status/951501965992824835">これ</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## usegalaxy.org の構成、スライド32枚目

- [2018 GCCBOSC usegalaxy\.org Infrastructure \- Google スライド](https://docs.google.com/presentation/d/1_y3m4p_KwoG3gRIV--buQ_xXw0ZlyKtKVFfxMpkIjBU/edit#slide=id.g1e79bd23a7_0_0)

# 環境構築手順など

- [構築手順 0\.3\.x \- Pitagora\-Galaxy Wiki](http://wiki.pitagora-galaxy.org/wiki/index.php/%E6%A7%8B%E7%AF%89%E6%89%8B%E9%A0%86_0.3.x#Galaxy_.E3.81.AE.E5.9F.BA.E6.9C.AC.E7.9A.84.E3.81.AA.E8.A8.AD.E5.AE.9A)

# usegalaxy.org のクォータ（quota, 制限)についてのドキュメント

- [Account quotas](https://galaxyproject.org/support/account-quotas/#i-need-more-space-for-my-work)
 - [I need more space for my work](https://galaxyproject.org/support/account-quotas/#i-need-more-space-for-my-work)

# Planemoを使ってCWL

- [Writing Advaced CWL](http://planemo.readthedocs.io/en/latest/writing_advanced_cwl.html)