M1 Macの場合、デフォルトでdockerイメージに入っているdiamondがコケるので、手動でインストールし直します。
試験環境:
MacBook Air
チップ Apple M1
メモリ 16GB
OS Sonoma 14.4
最新のDockerをインストール済みとします。
ちなみにMacでdockerの使用するリソースの量を変更するにはこの画面から行えます。デフォルトだとCPUやメモリの使用量が控え前になっていると思います。使用環境に応じて変更してください。
Orthofinderをインストール
ターミナルを立ち上げ、
$ docker pull davidemms/orthofinder
Using default tag: latest
latest: Pulling from davidemms/orthofinder
349d5c06b276: Download complete
fe9f5cfcf49b: Download complete
8d9c1f0287f8: Download complete
b685bc90db92: Download complete
14f89c3e0b4d: Download complete
afcfc7856866: Download complete
e0392ddd5dba: Download complete
76b1f1a2fcef: Download complete
184536648910: Download complete
9e3ea8720c6d: Download complete
68fc9964a394: Download complete
d573939d7fe2: Download complete
113a3d970e46: Download complete
e35ae20d6b00: Download complete
cd36e3745e5c: Download complete
a0b040f25a5f: Download complete
Digest: sha256:690dcec8f68035f8eca7f2e3248ed47afff6a89d4c2d5ddbc372a4cba05909f2
Status: Downloaded newer image for davidemms/orthofinder:latest
docker.io/davidemms/orthofinder:latest
docker run --platform linux/amd64 davidemms/orthofinder orthofinder -h
でヘルプ画面が出れば成功。
Orthofinderは、指定したディレクトリにあるfastaファイルを全て対象にして、そのディレクトリの下で実行します。仮に、fastaファイルを置いたディレクトリがデスクトップ上に作られたフォルダOrthoFinderだったとします。
はご自身のPC名に合わせてください。
このまま、orthofinderを実行するには、
docker run -v /Users/<USER NAME>/Desktop/orthofinder:/data davidemms/orthofinder orthofinder -f /data
を打てば良いのですが、実行すると、以下のようなdiamondのエラーが出ます。
docker run -v /Users/<USER NAME>/Desktop/orthofinder:/data davidemms/orthofinder orthofinder -f /data
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
OrthoFinder version 2.5.5 Copyright (C) 2014 David Emms
2024-11-29 00:03:41 : Starting OrthoFinder 2.5.5
10 thread(s) for highly parallel tasks (BLAST searches etc.)
1 thread(s) for OrthoFinder algorithm
Checking required programs are installed
----------------------------------------
diamond produced the following output:
Illegal instruction
Illegal instruction
ERROR: Cannot run diamond
Environment:
{'PATH': '/opt/OrthoFinder_source/scripts_of/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'HOSTNAME': '951e93a09698', 'LANG': 'C.UTF-8', 'GPG_KEY': 'A035C8C19219BA821ECEA86B64E628F8D684696D', 'PYTHON_VERSION': '3.10.11', 'PYTHON_PIP_VERSION': '23.0.1', 'PYTHON_SETUPTOOLS_VERSION': '65.5.1', 'PYTHON_GET_PIP_URL': 'https://github.com/pypa/get-pip/raw/0d8570dc44796f4369b652222cf176b3db6ac70e/public/get-pip.py', 'PYTHON_GET_PIP_SHA256': '96461deced5c2a487ddc65207ec5a9cffeca0d34e7af7ea1afc470ff0d746207', 'DEBIAN_FRONTEND': 'noninteractive', 'PACKAGES': 'wget mafft mcl libatlas-base-dev ncbi-blast+', 'FASTTREE_URL': 'http://www.microbesonline.org/fasttree/FastTree', 'FASTME_VER': '2.1.6.2', 'ORTHOFINDER_FILE_NAME': 'OrthoFinder_source.tar.gz', 'ORTHOFINDER_URL': 'https://github.com/davidemms/OrthoFinder/releases/latest/download/OrthoFinder_source.tar.gz', 'ORTHOFINDER_PATH': '/opt/OrthoFinder_source', 'HOME': '/root'}
Command:
export PATH=/opt/OrthoFinder_source/scripts_of/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
diamond makedb --ignore-warnings --in /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/Species0.fa -d /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/diamondDBSpecies0
diamond blastp --ignore-warnings -d /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/diamondDBSpecies0 -q /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/Species0.fa -o /data/OrthoFinder/Results_Nov29/WorkingDirectory/dependencies/test_search_results.txt --more-sensitive -p 1 --quiet -e 0.001 --compress 1
Resolve any issues so that you can successfully run the above commands for OrthoFinder's dependencies on your computer and then re-run OrthoFinder.
Please check diamond is installed and that the executables are in the system path
ERROR: An error occurred, ***please review the error messages*** they may contain useful information about the problem.
エラーメッセージを読むと"Checking required programs are installed"の項目で"ERROR: Cannot run diamond" が出ています。
内部で使用するdiamondのインストールに失敗しているようです。
diamondを再インストール
そこで以下のようにorthofinderのdocker imageに修正を加えます。
docker run --platform linux/amd64 -it -v /Users/<USER NAME> /Desktop/orthofinder:/data davidemms/orthofinder bash
このコマンドを実行すると、docker imageの中に入ることができます。
diamondは
/opt/OrthoFinder_source/scripts_of/bin
の中に入っています。これを最新版のdiamondに置き換えます。
# 適時、v2.1.10は最新版にしてください。
wget http://github.com/bbuchfink/diamond/releases/download/v2.1.10/diamond-linux64.tar.gz -O diamond.tar.gz
ダウンロードがうまくできていれば以下のようなメッセージが出てくるはずです。
## ダウンロードのメッセージ中略 ###
`diamond-linux64.tar.gz' に保存中
diamond-linux64.tar.gz 100%[===============================================================>] 27.79M 22.1MB/s 時間 1.3s
2024-11-30 12:18:20 (22.1 MB/s) - `diamond-linux64.tar.gz' へ保存完了 [29135618/29135618]
もしダウンロードが失敗したときはdiamondのURLが変更されている可能性がありますので、diamondのgithubのページにアクセスして調べてください。
tar -xzf diamond.tar.gz
chmod +x diamond
次に(ファイルをコピーする)cp コマンドで、orthofinderにデフォルトで入っているdiamondを別のファイル名として保存しておきます。
cp /opt/OrthoFinder_source/scripts_of/bin/diamond /opt/OrthoFinder_source/scripts_of/bin/tmp_diamond
lsでdiamondとtmp_diamondというファイル名が2つとも存在することを確認します。
ls -lh /opt/OrthoFinder_source/scripts_of/bin
以下のコマンド(自分でインストールしたdiamondをorthofinderのフォルダにコピーする)を実行します。
cp /usr/local/bin/diamond /opt/OrthoFinder_source/scripts_of/bin/
以下のコマンドでtmp_diamondとdiamondの両方のファイルがあることを確認します。
ls -lh /opt/OrthoFinder_source/scripts_of/bin
正しくdiamondが参照されているか調べます。
# which diamond
/opt/OrthoFinder_source/scripts_of/bin/diamond
diamondの動作確認でversion情報が出るか調べます。
# diamond --version
diamond version 2.1.10
現在いるdocker imageの内部で実行する場合には、
orthofinder -f /data
とコマンドを打つと、Desktop上のOrthoFinder/のfastaファイルに対してOrthoFinderの実行が始まり、エラーが出ずに終了すれば大丈夫です!
diamondをアップデートしたorthofinderを保存する
以下、上記のOrthofinder終了後にやってください。
再解析を行う場合には、diamondの変更を反映した新しいコンテナ環境を作り直す必要があります。
その場合は、以下の手順でできます。
起動済みのコンテナを終了します。
exit
dockerの< コンテナID > を取得します。
docker ps -a
実行例:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcd1234efgh davidemms/orthofinder "/bin/bash" 5 minutes ago Exited (0) 5 seconds ago quirky_pare
(もしかしたら沢山出てくるかもしれませんが、COMMANDがbashのものが相当すると思います )
ここで表示された < コンテナ ID/CONTAINER ID> を使用して、新しいイメージを保存します。
docker commit <コンテナID> modified-orthofinder
modified-orthofinderは新しいイメージの名前で、任意の名前に変更可です
実行例:
docker commit abcd1234efgh modified-orthofinder
修正した新しいイメージが作成されたことを確認
docker images
出力例
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
modified-orthofinder latest 5678abcd1234 1 minute ago 1.5GB
davidemms/orthofinder latest 1234efgh5678 1 hour ago 1.5GB
“modified-orthofinder”がdiamondを修正したorthofinder,
davidemms/orthofinderがデフォルトでインストールしたorthofinderのイメージです。
diamond修正版(modified-orthofinder)でorthofinderを実行するには、以下のコマンドで可能になっています。
docker run --platform linux/amd64 -v /Users/<USER NAME> /Desktop/orthofinder:/data modified-orthofinder orthofinder -f /data
参考:
Dockerに慣れる : 一時的にコンテナ内の情報を変更する https://leico.github.io/TechnicalNote/Docker/basic-volatility-change
Dockerに慣れる : 変更したコンテナイメージを保存する https://leico.github.io/TechnicalNote/Docker/basic-commit-container