Ensembl API のインストール

2016 年 3 月 19 日 改訂

Ensembl API は,Ensembl のデータ取得行う方法の一つです.Perl のモジュール群 (スクリプトの集まり) を使います.ここでは,Mac OS X へのインストールを中心に紹介します.例題はこちらにまとめています.

ヘルプデスクに聞いたところ,Ensembl API を Mac にインストールするには以下 3 つの作業が必要です.

1) MySQL のインストール
2) DBD::mysql のマニュアルインストール
3) Ensembl API のインストール



Mac では DBD::mysql のインストールに問題があるので, Unix の知識が必要になります.Linux へのインストールだともっとスムーズです.Ensembl API が簡単にインストールできないと時間の浪費になるので,わからない場合は早めに切り上げた方がいいように思えます.そのかわり,BioMart や ftp サイトからダウンロードしたデータを,自ら作成した script で処理することも可能です.
 [以下,インストール1 に従えば,割とスムーズにインストールできます.(2014 年 1 月) ]

2016 年 2 月にインストールしてみたところ,Git を使う方法が紹介されていました.しかしこの方法でも,DBD::mysql のインストールに問題があります.以下,インストール 1 で書いた方法で Perlbrew を使って perl のインストールからやり直しました.

公式のインストールマニュアルは Perl API Installation です.問題があったときは,Debugging Ensembl API Connections も参照してください.


インストール1: Perlbrew と cpanm を用いたインストール

Ensembl Blog で紹介されているインストール方法です.2014 年 1 月の段階で,Ensembl が公式に出している最新のインストール手順です.以前,以下のコラム「インストール2: 手動インストール」を紹介していましたが,こちらの手順に従った方が楽な気がします.2016 年 2 月にもこの方法でインストールできました (OS X, El Capitan と Yosemite).

OS X 付属の perl では DBD::mysql をサポートしていない,ということが上記 Ensembl Blog には書いてあります.このため,以下の方法では,Perlbrew をインストールして,これを用いて perl を再インストールします.

以下は,上記 Ensembl Blog を説明しているだけなので,不明な部分があったら元の英文を参照してください.



Perlbrew のインストール
Perlbrew は,複数の perl をインストールし,切り替えて使うことができるツールです.

> curl -L http://install.perlbrew.pl | bash
> echo 'source $HOME/perl5/perlbrew/etc/bashrc' >> ~/.bash_profile
上の操作は,それぞれかなり時間がかかりました.5 分ぐらいでしょうか.

Perlbrew を使って,Perl をインストールします. ここでは,5.18.2 を選びました.
> source ~/.bash_profile
> perlbrew install -j 5 --as 5.18.2 --thread --64all -Duseshrplib perl-5.18.2

インストールの確認.
> perlbrew install --notest --as 5.18.2 --thread --64all -Duseshrplib perl-5.18.2

cpanminus をインストールします.cpanminus はモジュールをインストールするためのコマンドで,一つのファイルだけで動く Perl スクリプトです.
> perlbrew install-cpanm

新しいバージョンの perl に切り替えます.
> perlbrew switch 5.18.2
> perl -v | grep 'This is'
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
> cpanm Test::Differences Test::Exception Test::Perl::Critic



MySQL Client Libraries のインストール
http://dev.mysql.com/downloads/mysql/ からダウンロードします.Mac OS X 10.10 (x86, 64-bit), DMG Archive を選びました.ダウンロードは,Singn Up してなくてもできます.この場合は "No thanks, just start my download"を押します.インストール後,システム環境設定 > MySQL から, Start MySQL Server を押してください.

Linux の場合は,こちらの「リポジトリ登録によるインストール方法」に従って,MySQL のインストールを行いました (root ユーザとして).

 


Core dependencies のインストール
> cpanm DBI
> cpanm Test::Differences Test::Exception Test::Perl::Critic



DBD::mysql のインストール

> cpanm DBD::mysql
途中,DBD::mysql のインストールで,dynamic library が OSX のデフォルトで設定されている search path では使えないため,以下のようなエラーメッセが出ます.しかし,手順通りやれば解決されます (2014 年 1 月).なお,2016 年 2 月では,以下のコマンドはスムーズに行ったため,Option 2)

[i2:~]$ cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.025.tar.gz ... OK
Configuring DBD-mysql-4.025 ... OK
Building and testing DBD-mysql-4.025 ... FAIL
! Installing DBD::mysql failed. See /Users/i2/.cpanm/work/1388980283.78677/build.log for details. Retry with --force to force install it.

指示された build.log を見てみると,libmysqlclient.18.dylib に関する記述がありました.

# Failed test 'use DBD::mysql;'
# at t/00base.t line 18.
# Tried to use 'DBD::mysql'.
# Error: Can't load '/Users/JunINOUE/.cpanm/work/1388998066.82224/DBD-mysql-4.025/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/Users/JunINOUE/.cpanm/work/1388998066.82224/DBD-mysql-4.025/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.18.dylib

私は Option 2) の手順によって,上記の問題を解決しました.

[i2:~]$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Password:
[i2:~]$ cpanm DBD::mysql
--> Working on DBD::mysql
Fetching http://www.cpan.org/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.025.tar.gz ... OK
Configuring DBD-mysql-4.025 ... OK
Building and testing DBD-mysql-4.025 ... OK
Successfully installed DBD-mysql-4.025
1 distribution installed

なお,「ln -s」はシンボリックリンクを作成するコマンドです.作成されたシンボリックリンクを調べてみると,以下のようにリンクが張られていることがわかります.

[i2:~]$ ls -l /usr/lib/libmysqlclient.18.dylib
lrwxr-xr-x 1 root wheel 44 1 6 12:52 /usr/lib/libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib






Ensembl のインストール

こちらの指示に従って, 各種 ensembl パッケージをインストールしてください.



動作確認
> perl ~/src/ensembl/misc-scripts/ping_ensembl.pl


うまくいくと,以下のようなメッセージが得られます.

[inouejun:~]$ perl ~/src/ensembl/misc-scripts/ping_ensembl.pl
Installation is good. Connection to Ensembl works and you can query the human core database


エラーの例 1:
以下のようなエラーが出たら,.bash_profile にある PATH をチェックしてください.以下の例では,ensembl-funcgen へのパスが通っていませんでした.

Installation is good. Connection to Ensembl works and you can query the human core database
ERROR: Error detected when connecting to Ensembl!
Your core installation was good but supplementary modules cannot be found. If you wish to access these other Ensembl resources add the libraries to your PERL5LIB:
Missing the checkout Funcgen

.bash_profile にある,以下の行を修正.

PERL5LIB=${PERL5LIB}:${HOME}/src/ensembl-funcgen/modules


エラーの例2:

また,Bio::Perl モジュールをインストールしたにもかかわらず以下のように Bio/Perl.pm がない,と言われたら,.bash_profile にある PATH をチェックしてください.以下の例では,bioperl-live へのパスが通っていませんでした.

[inouejun:~]$ perl ~/src/ensembl/misc-scripts/ping_ensembl.pl
ERROR: Error detected when connecting to Ensembl!
Looks like you need to setup your PERL5LIB with BioPerl. Please consult http://www.ensembl.org/info/docs/api/api_installation.html
================================================================================
If the problem persists please send the following error message to helpdesk@ensembl.org
Can't locate Bio/Perl.pm in @INC (you may need to install the Bio::Perl module) (@INC contains: /Users/inouejun/src/bioperl-bioperl-live /Users/inouejun/src/ensembl/modules /Users/inouejun/src/ensembl-compara/modules /Users/inouejun/src/ensembl-variation/modules /Users/inouejun/src/ensembl-funcgen/modules /Users/inouejun/perl5/perlbrew/perls/5.18.2/lib/site_perl/5.18.2/darwin-thread-multi-2level /Users/inouejun/perl5/perlbrew/perls/5.18.2/lib/site_perl/5.18.2 /Users/inouejun/perl5/perlbrew/perls/5.18.2/lib/5.18.2/darwin-thread-multi-2level /Users/inouejun/perl5/perlbrew/perls/5.18.2/lib/5.18.2 .) at /Users/inouejun/src/ensembl/misc-scripts/ping_ensembl.pl line 116.
===============================================================================

.bash_profile にある,行を以下のように修正.

PERL5LIB=${PERL5LIB}:${HOME}/src/bioperl-live


インストール2: 手動インストール

(このコラムは以前書いたものです.おそらく,上にあるインストール1 の方が簡単です [2014 年 1 月])

Mac Air, OS 10.8.2 (Mountain Lion) に,必要なツールを主に手動でインストールした手順を紹介します..


1) MySQL のインストール
MySQL とはリレーショナルデータベースを管理するシステムのようです.こちらから Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive をダウンロードしました.これは Snow Leopard 用ですが,Mountain Lion でも動く,といろいろなサイトで言われています.

Mac OSX の CPU が x86 か x86-64 のいずれかをチェックには,

sysctl -a hw

を実行してください.64-bit であれば「hw.optional.x86_64: 1」などと表示されるはずです.こちらを参考にしました. ただ,32-bit 用だとうまくいった,という人もいるようなので,だめだった場合に試してみても良いかもしれません.

なお,他のバージョンをインストールする場合は,一度インストール済みの MySQL をアンインストールした方が良いみたいです.ただ rm するだけです.こちらをご覧下さい.

ダウンロード&解凍の後,mysql-t.6.xx-osx10.x-x86_64.pkg をダブルクリックして mysql をインストールしてください.その後,MySQL.prefPane をダブルクリックすることで,システム環境設定から MySQL Server をスタートさせます (システム環境設定 > MySQL > Start MySQL Server).



2) DBD::mysql のマニュアルインストール
通常は CPAN から DBD::mysql をインストールすれば良いはずなのですが,インストールできずにエラーが出ます.こちらでも指摘されています.エラーメッセージを読みながら,YAML をインストールしたり,工夫しても,

.....
Can't exec "mysql_config": No such file or directory at Makefile.PL line 83
.....

と言うメッセージが出てしまうと思います.

そこで,ソースコードをダウンロードしてマニュアルでインストールします.マニュアルインストールについてもこちらを参考にしました.

いろいろ試したのですが,こちらに従ってまず MacPorts と関連のプログラムをインストールした方が良さそうです.CPAN については,こちらを参照してください.

CPAN のサイトで DBD::mysql モジュールを検索します. こちらのサイトに行き着いたら,右側にある DBD-mysql-4.022.tar.gz をダウンロード&解凍します. 得られた DBD-mysql-4.022 ディレクトリを /opt/local/lib/perl5/5.X.X ディレクトリにコピーします.移動した DBD-mysql-4.022 ディレクトリに入って,INSTALL.html の Manual Installation に従ってインストールを行いました.

sudo perl Makefile.PL --cflags="-I/usr/local/mysql/include" --libs="-L/usr/local/mysql/lib/mysql" --mysql_config="/usr/local/mysql/bin/mysql_config"

上では,太字の部分で mysql_config の場所を指定しています.mysql_config の場所は,「sudo find / -name mysql_config」で探すことができます.数分ほど時間がかかりました.わからない場合は上と同じディレクトリに移動して確認してみましょう.

sudo make
sudo make test
sodo make install

実際に DBD::mysql がインストールされたかどうかは perldoc を用いて確かめます.

[JunINOUE:bin]$ perldoc -ml DBD::mysql
/opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/DBD/mysql.pm


3) Ensembl API のインストール
英語であれば解説ページたくさんあって,Ensembl 内部ですらいろいろなページで解説しています.そのなかでも,私はこちらのビデオ説明が最も簡単かと思いました.
How to Install the Ensembl Perl APIs
出てくるスクリプト はこちらにまとめてあります.とりあえず CVS (ファイルのバージョンを管理するシステムらしい) なしでインストールしました.

$ cd
$ mkdir src
$ cd src
$ wget ftp://ftp.ensembl.org/pub/ensembl-api.tar.gz
$ wget http://bioperl.org/DIST/old_releases/bioperl-1.2.3.tar.gz
$ tar xvfz ensembl-api.tar.gz
$ tar xvfz bioperl-1.2.3.tar.gz
$ ls
bioperl-1.2.3 ensembl-api.tar.gz ensembl-variation
bioperl-1.2.3.tar.gz ensembl-compara
ensembl ensembl-functgenomics

ただ単に,ensembl-api.tar.gz と bioperl-1.2.3.tar.gz を,src というフォルダにダウンロード&解凍しているだけです.

その後,.bashrc ファイルに以下太字を付け足しました.

[JunINOUE:~]$ cat .bashrc
# .bashrc

# User specific aliases and functions
PS1="[$USER:\W]$ "

alias ls='ls -F'
PERL5LIB=${HOME}/src/bioperl-1.2.3
PERL5LIB=${PERL5LIB}:${HOME}/src/ensembl/modules
PERL5LIB=${PERL5LIB}:${HOME}/src/ensembl-compara/modules
PERL5LIB=${PERL5LIB}:${HOME}/src/ensembl-variation/modules
PERL5LIB=${PERL5LIB}:${HOME}/src/ensembl-functgenomics/modules
export PERL5LIB

なお,PERL5LIB は環境変数を示します.PERL5LIB は他の名前でも良いような変数だそうです.PATH がうまく設定されたかどうか,以下のコマンドで確認してみましょう.以下の状態で正常に後述の例題が動いています.これは,最初の行であれば,perl が「/Users/JunINOUE/src/bioperl-1.2.3」にモジュールを探しに行く,ことを意味しています.

[JunINOUE:~]$ perl -e 'print join ("\n",@INC)'
/Users/JunINOUE/src/bioperl-1.2.3
/Users/JunINOUE/src/ensembl/modules
/Users/JunINOUE/src/ensembl-compara/modules
/Users/JunINOUE/src/ensembl-variation/modules
/Users/JunINOUE/src/ensembl-functgenomics/modules
/opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level
/opt/local/lib/perl5/site_perl/5.12.4
/opt/local/lib/perl5/vendor_perl/5.12.4/darwin-thread-multi-2level
/opt/local/lib/perl5/vendor_perl/5.12.4
/opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level
/opt/local/lib/perl5/5.12.4
/opt/local/lib/perl5/site_perl
/opt/local/lib/perl5/vendor_perl


インストール3: GitHub からのインストール
こちらに手順が書かれています.こちらも参照するようにビデオで言われます.GitHub の使い方はこちらを参照してください.

動作確認

動作 1
マニュアルに従って,misc-scripts ディレクトリ ( ~/src/ensembl/misc-scripts/) に入って ping_ensembl.pl を走らせます.30 秒ぐらいかかりました.

[i2:misc-scripts]$ cd ~/src/ensembl/misc-scripts/
[i2:misc-scripts]$ perl ping_ensembl.pl
Installation is good. Connection to Ensembl works and you can query the human core database



動作 2
こちらの例題をお借りしました.

core1_db_status.pl として以下を保存し,perl core1_db_status.pl として実行してください.

#!/usr/bin/perl
use strict;
use warnings;
use Bio::EnsEMBL::Registry;

my $registry = 'Bio::EnsEMBL::Registry';
$registry->load_registry_from_db(
-host => 'ensembldb.ensembl.org',
-user => 'anonymous'
);

my @db_adaptors = @{ $registry->get_all_DBAdaptors() };

foreach my $db_adaptor (@db_adaptors) {
my $db_connection = $db_adaptor->dbc();

printf(
"species/group\t%s/%s\ndatabase\t%s\nhost:port\t%s:%s\n\n",
$db_adaptor->species(), $db_adaptor->group(),
$db_connection->dbname(), $db_connection->host(),
$db_connection->port()
);
}

以下のような表示が出れば,大丈夫だそうです.結果が得られるまで数十秒かかりました.

[i2:Downloads]$ perl core1_db_status.pl
species/group saccharomyces_cerevisiae/core
database saccharomyces_cerevisiae_core_71_4
host:port ensembldb.ensembl.org:5306

....

species/group multi/ontology
database ensembl_ontology_71
host:port ensembldb.ensembl.org:5306

[i2:Downloads]$


異なる Ensembl version のインストール

2016 年 3 月の時点で Ensembl 83 が最新ですが,以下では Ensembl 67 の Ensembl API を使えるようにしています.


背景
最新の Ensembl 83 を使っていたのですが,参照している論文が Ensembl 63 (Mouse NCBI m37) でした.View in archive site から Ens63 は見当たらなかったので,こちらを参照して対象とする Mouse NCBI m37 を使っている Ens67 で解析を行うことにしました.


実際の手順
Ensembl API のモジュール類だけを,昔のバージョンにすれば良いだけのようです.BioPerl や MySQL 関連は最新のもので良いみたいです.こちらを参照にしました.

src ディレクトリに,バージョンにあった ensembl, sensembl-compara などモジュール類をダウンロード&解凍します.Ensembl 67 の場合はこちらからダウンロードしました.以下のように,モジュール類をバージョンごとにディレクトリで分けたほうが良いようです.こちらを参照にしました.

[junINOUEb:src]$ pwd
/Users/junINOUEb/src
[junINOUEb:src]$ ls
bioperl-1.6.923/ ens67/ ens83/
[junINOUEb:src]$ ls ens67/
ensembl/ ensembl-compara/ ensembl-functgenomics/
[junINOUEb:src]$

.bash_profile を書き換える.

[junINOUEb:~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

PERL5LIB=${HOME}/src/bioperl-1.6.923

PERL5LIB=${PERL5LIB}:${HOME}/src/ens67/ensembl/modules
#PERL5LIB=${PERL5LIB}:${HOME}/src/ens83/ensembl/modules

PERL5LIB=${PERL5LIB}:${HOME}/src/ens67/ensembl-compara/modules
#PERL5LIB=${PERL5LIB}:${HOME}/src/ens83/ensembl-compara/modules

PERL5LIB=${PERL5LIB}:${HOME}/src/ens83/ensembl-variation/modules
PERL5LIB=${PERL5LIB}:${HOME}/src/ens83/ensembl-funcgen/modules
PERL5LIB=${PERL5LIB}:${HOME}/src/ens67/ensembl-functgenomics/modules
export PERL5LIB

source $HOME/perl5/perlbrew/etc/bashrc

あるいは,.bash_profile を書き換えず,プログラムの最初の行に use lib によってモジュールのバージョンを指定する方法もあります.こちらこちらを参照してください.

use lib '/Users/junINOUEb/src/ens67/ensembl/modules/';


確認
まず,以下のプログラムを test.pl として保存して動かしました.

use Bio::EnsEMBL::ApiVersion;
printf( "The API version used is %s\n", software_version() );

結果です.

[junINOUEb:Downloads]$ perl test.pl
The API version used is 67

さらに確認を行うために,以下のプログラムを,上記と同様の手順で動かしました.「-db_version => 67」 の行も重要ですが,その直前の行末に「,」を加えるのを忘れないでください.ただ,「-db_version => 67」 がないスクリプトでも,同様の結果が得られるので,「-db_version => 67」が必要かどうかわからないです.

#!/usr/bin/perl
use strict;
use warnings;
use Bio::EnsEMBL::Registry;

my $registry = 'Bio::EnsEMBL::Registry';
$registry->load_registry_from_db(
-host => 'ensembldb.ensembl.org',
-user => 'anonymous',
-db_version => 67
);

my @db_adaptors = @{ $registry->get_all_DBAdaptors() };

foreach my $db_adaptor (@db_adaptors) {
my $db_connection = $db_adaptor->dbc();

printf(
"species/group\t%s/%s\ndatabase\t%s\nhost:port\t%s:%s\n\n",
$db_adaptor->species(), $db_adaptor->group(),
$db_connection->dbname(), $db_connection->host(),
$db_connection->port()
);
}

結果です.

[junINOUEb:Downloads]$ perl test.pl
species/group anolis_carolinensis/core
database anolis_carolinensis_core_67_2
host:port ensembldb.ensembl.org:5306

species/group canis_familiaris/core
database canis_familiaris_core_67_2
host:port ensembldb.ensembl.org:5306
....

ping_ensembl.pl も一応動きました.ただ,このスクリプトでは -dv_version にあたる部分が見当たらないので,なんとも言えないと思います.実際,ens83 でも動きました.

[junINOUEb:ens67]$ perl ens67/ensembl/misc-scripts/ping_ensembl.pl
Installation is good. Connection to Ensembl works and you can query the human core database

[junINOUEb:src]$ perl ens83/ensembl/misc-scripts/ping_ensembl.pl
Installation is good. Connection to Ensembl works and you can query the human core database




API のバージョンを調べる
以下のコマンドを,実行してください. versionCheck.pl.tar.gz からダウンロード&解凍できます.

use Bio::EnsEMBL::ApiVersion;
printf( "The API version used is %s\n", software_version() );




削除されたバージョン

こちらに GitHub からダウンロードするやり方が紹介されています.


Help desk にも聞いてみました.
3 年以上前のバージョンは Ensembl の web (View in archive site) からリンクが削除されるそうです.mysql の使い方がわかればモジュールなどをダウンロードして API として操作可能なようです.以下,Ensembl とのやり取りです (2013 年 3 月).

Dear Jun,

Firstly, you can access ensembldb.ensembl.org like this:

$ mysql -u anonymous -h ensembldb.ensembl.org

Secondly, you should be able to access the Ensembl 63 API if you download the
relevant modules of Ensembl 63. However, you would need to check the release/63
branch to resolve your error, as it is quite difficult to work out why they
failed without any more detail.

Best wishes
Ensembl Helpdesk

> 2016-03-21 23:10 GMT+09:00 Ben Moore via RT <helpdesk@ensembl.org>:
Dear Jun,
Thank you for contacting the Ensembl Helpdesk.
Unfortunately, access to version 63 of Ensembl is no longer
available. We remove the archive sites after about 3 years, as we cannot
maintain all the archives indefinitely.
Specific data from Ensembl 63 is available through MySQL dumps on the FTP
site or ensembldb.ensembl.org port 3306, but the website and BioMart are
not available. Furthermore, the API is available on GitHub.

Perhaps you could let me know what data you are specifically interested in,
and we can try and assist you with obtaining a specific dataset from
Ensembl 63.
Please don’t hesitate to get back in touch if you have any further
questions.

Best wishes
Ensembl Helpdesk

>On Mon Mar 21 01:09:42 2016, jun.g.inoue@gmail.com wrote:
Dear Sir,
I would like to use the dataset of Ensemble 63.
How can I access this version?
I am using Ensemble 67 alternatively from the following link:
http://asia.ensembl.org/info/website/archives/index.html
I would like to use Ensembl API of Ens63
Of course, website and BioMart of Ens63 are also helpful.
Thank you for your help.

Best,
Jun Inoue


Fasta ファイルであれば,ftp でほぼすべての過去のデータ (release-19〜83) が入手可能です (2016 年 3 月).

[Napoli:RawDataEns72]$ ftp
ftp> open ftp.ensembl.org
Connected to ftpservice1.sanger.ac.uk.
220-ftp.ensembl.org NcFTPd Server (free educational license) ready.
220-Ensembl Project FTP server
...
220-
220
Name (ftp.ensembl.org:Napoli): anonymous [anonymous で入ります]
331 Guest login ok, send your complete e-mail address as password.
Password: [メールアドレスを入れるか,単にリターンでも大丈夫です]
230-You are user #92 of 250 simultaneous users allowed.
...
Using binary mode to transfer files.
ftp> cd pub [あとは通常の unix コマンドです]
250 "/pub" is new cwd.
...
ftp> get Mus_musculus.NCBIM37.63.pep.all.fa.gz
local: Mus_musculus.NCBIM37.63.pep.all.fa.gz remote: Mus_musculus.NCBIM37.63.pep.all.fa.gz
229 Entering Extended Passive Mode (|||49215|)
150 Opening BINARY mode data connection for Mus_musculus.NCBIM37.63.pep.all.fa.gz (9650549 bytes)
100% |********************************************************************| 9424 KiB 505.62 KiB/s 00:00 ETA
226 Transfer complete
9650549 bytes received in 00:18 (499.55 KiB/s)
ftp>

ディレクトリごとダウンロードしたいときは,ブラウザを用いると良いです.ftp ではディレクトリごとダウンロードできないようです.

ftp://ftp.ensembl.org/pub/release-63/



インストールに関わるエラー対策

2014 年 1 月に Ensembl Blog [Ensembl の公式ブログ?] を見つけるまで,いろいろなエラーに悩まされていました.DBD::mysql のインストールがうまくいっていなかったので,エラーがたびたび出ました.問題点が DBD::mysql のインストールにあることがはっきりしてからは,このステップが完了したかどうか注意しながら作業を進めました.スクリーンアウトが大量に出てきますが,だいたい最初に出てきたエラーメッセージに対処すれば良いです.test ではエラーを無視してしまったこともありますが,できるだけエラーが出たら解決するように心がけました. エラーの対策は主に Google 検索です.

sudo
各種コマンドラインが動かない場合は,permission の問題であることも多いです.一度 sudo をつけて再挑戦してください.

find

何かがないというエラーが出たときに,「find」コマンドによって存在を確認することが多いです.実際にインストールされているが,指定されている場所が異なる,などの問題が多いです.

sudo find / -name libmysqlclient.1*

のように探します.ここではワイルドカードを用いて 「libmysqlclient.18.dylib」に類似したファイルを探しています.「/」 (ルートディレクトリ) は検索を開始するディレクトリを示し,ここより末端のディレクトリが検索の対象となります.注意したいのが,「~」(チルダ: ホームディレクトリ) はホームディレクトリを示しますが,ルートディレクトリはこれよりも上位にある,という点です.チルダを検索開始点にすると,目的のものが見つからないことがあります.sudo をつけないと,検索されないディレクトリが多数でてきてしまいます.




なるべく最新の Mac を使いましょう
最新すぎてうまくいかない,ということもありますが,Mac が古いばかりに時間を無駄にすることは避けたいです.それと,古いマックでは異様に動作が遅い場合があります.Mountain Lion ではすんなり行ったものが,Snow Leopard では時間がかかったステップもいくつかあります.


Can't locate DBI.pm in @INC
これは DBI という Perl モジュールがインストールされていないことを示します.ターミナルに以下を入力して該当するモジュールをインストールしましょう.詳しくはこちらを参照してください.

sudo perl -MCPAN -e "install DBI"



YAML のインストール
CPAN で DBD::mysql のインストールがうまく行かないときに,スクリーンアウトの上の方に以下のメッセージが出ることがあります.

'YAML' not installed, will not store persistent state

この場合は,CPAN で YAML をインストールしましょう.



libmysqlclient.18.dylib 問題
(この問題は Ensembl Blog [Ensembl の公式ブログ?]で,解決方法が紹介されています.このページのインストール1 でも書きましたが,シンボリックリンクを作成すれば解決します [2014 年 1 月])

マニュアルに従って,misc-scripts ディレクトリ ( ~/src/ensembl/misc-scripts/) に入って ping_ensembl.pl を走らせると,エラーが出ました.

[JunINOUE:misc-scripts]$ perl ping_ensembl.pl
ERROR: Error detected when connecting to Ensembl!
================================================================================
If the problem persists please send the following error message to helpdesk@ensembl.org
install_driver(mysql) failed: Can't load '/opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle, 1): Library not loaded: libmysqlclient.18.dylib
Referenced from: /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/auto/DBD/mysql/mysql.bundle
Reason: image not found at /opt/local/lib/perl5/5.12.4/darwin-thread-multi-2level/DynaLoader.pm line 204.
at (eval 21) line 3
Compilation failed in require at (eval 21) line 3.
Perhaps a required shared library or dll isn't installed where expected
at /Users/JunINOUE/src/ensembl/modules/Bio/EnsEMBL/Registry.pm line 1594
================================================================================

こちらのサイトによると,太字の部分が問題のようです.find を使ってlibmysqlclient.18.dylib を探してみます.

[JunINOUE:~]$ sudo find / -name libmysqlclient.1*
dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid
Password:
....
/usr/local/mysql-5.5.28-osx10.6-x86_64/lib/libmysqlclient.18.dyli
....

上記太字の部分に目的のファイルが示されました.そこで,.bash_profile に下記太字の行を付け足しました.実際には改行しないで,「export DYLD_...」と入力してください.

export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:/usr/local/mysql/lib/
export PATH=/opt/local/bin:/opt/local/sbin/:$PATH
export MANPATH=/opt/local/man:$MANPATH

export PATH=~/perl-5.14.2:$PATH
export PATH=/usr/local/bin:$PATH
export PATH=~/bin:$PATH
export LANG=ja_JP.UTF-8
export LESSCHARSET=utf-8

export PATH=$PATH:/usr/local/mysql/bin

こちらのサイトに従って太字の行を作成したのですが,mysql-5.5.28.... は mysql となっています.実際に /usr/local ディレクトリに入ってみると,これはシンボリックリンクになっているようです.

もう一度 ping_ensembl.pl を試すと,うまく動きました.

[JunINOUE:misc-scripts]$ export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/mysql/lib/
[JunINOUE:misc-scripts]$ perl ping_ensembl.pl
Installation is good. Connection to Ensembl works and you can query the human core database





mysql_config,mysql.h などのファイルがない

[JunInoue:DBD-mysql-4.022]$ sudo perl Makefile.PL
.....
Can't exec "mysql_config": No such file or directory at Makefile.PL line 83.
Cannot find the file 'mysql_config'! Your execution PATH doesn't seem
.....

あるいは

[JunInoue:DBD-mysql-4.022]$ sudo make
cc -c -I/Users/JunInoue/localperl/lib/site_perl/5.14.2/darwin-2level/auto/DBI -I/usr/local/mysql/include/mysql -DDBD_MYSQL_INSERT_ID_IS_GOOD -g -fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -O3 -DVERSION=\"4.022\" -DXS_VERSION=\"4.022\" "-I/Users/JunInoue/localperl/lib/5.14.2/darwin-2level/CORE" dbdimp.c
In file included from dbdimp.c:20:
dbdimp.h:23:49: error: mysql.h: No such file or directory
.....

というメッセージが得られる場合があります.これは DBD::mysql のマニュアルインストールのフラッグ

sudo perl Makefile.PL --cflags="-I/usr/local/mysql/include" --libs="-L/usr/local/mysql/lib/mysql" --mysql_config="/usr/local/mysql/bin/mysql_config"

が誤っています.「--cflags="-I/usr/local/mysql/include"」の部分は,「/usr/local/mysql/include」に mysql.h などのファイルがあることを示しています.mysql.h などのファイルを find など,あるいは find は古い Mac では遅いので,直接 ls によってディレクトリに実際あるか確認してください.「--cflags="-I/usr/local/mysql/include/mysql"」 とすれば良いこともあります.この場合は.include にある mysql ディレクトリに関連のファイル等が入っていることを示します.



Symbol not found: _mysql_init
以下は,MacBook Pro, Snow Leopard でサイド挑戦したときの記録です.
いろいろよくわからなかったので,以前成功した Air, Mountain Lion のときと同様,こちらに従って MacPorts をインストールし,perl や関連のプログラム類をインストールし直しました.上の手順に従って MySQL の Snow Leopard version をインストールし,DBD::mysql のマニュアルインストールをやり直しました.しかし,確認の段階になって,以下のようなエラーメッセージが得られました.

[JunInoue:misc-scripts]$ perl ping_ensembl.pl
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
Referenced from: /Users/JunInoue/localperl/lib/site_perl/5.14.2/darwin-2level/auto/DBD/mysql/mysql.bundle
Expected in: dynamic lookup

dyld: Symbol not found: _mysql_init
Referenced from: /Users/JunInoue/localperl/lib/site_perl/5.14.2/darwin-2level/auto/DBD/mysql/mysql.bundle
Expected in: dynamic lookup

Trace/BPT trap

「Symbol not found: _mysql_init 」などをキーワードに Google 検索したところ,こちらのページを見つけました.変更したのは以下のコマンドです.フラグの順序も大事だそうです.

sudo perl Makefile.PL --libs="-L/usr/local/mysql/lib -lmysqlclient" --cflags="-I/usr/local/mysql/include" --mysql_config="/usr/local/mysql/bin/mysql_config"

これで最終的にはうまく行ったのですが,一カ所気になるところがありました.make test の段階で

Can't load '/opt/local/lib/perl5/5.12.4/DBD-mysql-4.022/blib/arch/auto/DBD/mysql/mysql.bundle' for module DBD::mysql: dlopen(/opt/local/lib/perl5/5.12.4/DBD-mysql-4.022/blib/arch/auto/DBD/mysql/mysql.bundle, 2): Library not loaded: libmysqlclient.18.dylib

というエラーが出ました.しかし,これは無視しました.なぜかというと,前述のように,.bash_profile に

export DYLD_FALLBACK_LIBRARY_PATH=$DYLD_FALLBACK_LIBRARY_PATH:/usr/local/mysql/lib/

を書き込むことで,libmysqlclient.18.dylib の場所を教えられるからです (これが書いてあっても make test では上記のエラーが出ました).
なんとかテストプログラムが動きました.

[JunInoue:misc-scripts]$ perl ping_ensembl.pl
Installation is good. Connection to Ensembl works and you can query the human core database