Korábbi bejegyzésemben arról panaszkodtam, hogy az Amazon Cloudon csak az ember adatait tette fel az EnsEMBL, abból is egy régi verziót. Örömmel közölhetem, hogy ez nem igaz. A teljes adatbázis fent van MySQL és Fasta formátumban.
Mostani írásomban arra akarok kitérni, hogyan lehet feltelepíteni ezt az adatbázist saját instance-ra. Első lépésként indítsunk el egy Amazon virtuális gépet. Mivel én GNU/Linux rendszert használok, a továbbiakban erre térnék ki. Első lépés, hogy telepítsük a MySQL-t, Perl-t. Ha az Olvasóim olyan kényelmesek, mint én, akkor egy Ubuntu alatt az apt-get/aptitude parancsokkal bűvészkednek, ha pedig nálam ügyesebbek, akkor forráskódból telepítik azt tetszőleges disztribúció alatt ;-)
Ha Elasticfox Mozilla bővítménnyel vezérlik a virtuális gépeket, akkor a Volumes and Snapshots fülön, a Saved Snapshots táblázatból kiválasztják a kívánt EnsEMBL adatbázist. Jelen esetben EnsEMBL 59 MySQL-t és jobb egérgomb segítségével létrehoznak egy kötetet (volume) belőle. Ez amolyan virtuális háttértárólónak fogható fel. Ha megjelenik a Created Volumes listában, akkor kapcsoljuk hozzá a futó gépünkhöz. (Figyelem! A kötet és a gép legyen azonos zónában, különben nem kapcsolhatóak össze) Adjunk meg egy eszköz nevet (jelen esetben ez a /dev/sdd lesz).
Jelentkezzünk be a virtuális gépbe ssh-n keresztül. A következő paranccsal hozzunk létre egy könyvtárat és csatoljuk be a korábban létrehozott kötetet:
sudo mkdir /ensembl
sudo mount /dev/sdd /ensembl
Természetesen a jogok beállításáról se feledkezzünk meg. Az ensembl könyvtárban ott a teljes MySQL struktúra. Most már csak az adatbázis kezelőnek kell megmondani, hogy hol találja a fájlokat. Az ensembl könyvtárban mindennek adjunk mysql tulajdonosi jogokat.
sudo chown -R mysql:mysql /ensembl
Hozzuk létre az adatbázisokat. Az EnsEMBL ugyanis minden egyes fajnak egy adatbázist hoz létre. A könyvtárat elnézve ez jó sok adatbázis, ráadásul olyan vicces neveik vannak, mint spermophilus_tridecemlineatus_core_59_1i. Utálok sokat gépelni, ezért a következő módon hozom létre az adatbázisokat:
cd /ensembl
ls | awk '{print "create database "$1";"}' >~/createdb.sql
Majd beletöltöm az adatbázisba:
mysql -u root <~/createdb.sql
Most jön a trükk. A /var/lib/mysql-ben vannak a létrehozott adatbázisok. (Kivéve, ha valaki nagyon profi és máshova tette, de az úgyis tudja, hol keresse) Meg is nézhetjük őket. A sok sudo gépelését kezdem unni, ezért root leszek. (sudo su, de gondolom ezt már mindenki tudja).
Kitörlöm a könyvtárakat, amiket fáradságos munkával létrehoztam.
cd /ensembl
for i in *; do rm -fr /var/lib/mysql/$i; done
Ezután hozzunk létre symlinkeket és állítsuk be a jogokat.
cd /ensembl
for i in *; do ln -s /ensembl/$i /var/lib/mysql/$i; chown -h mysql:mysql /var/lib/mysql/$i; done
Ennyi. A rendszer működik. Illetve mégsem. Ha bármi miatt nem megy a fenti módszer, akkor a jogosultságok tájékán kell keresni a megoldást. Amikor próbálgattam a módszereket, sokszor a következő hibaüzenettel találkoztam:
ERROR 1018 (HY000): Can't read dir of './homo_sapiens_core_59_37d/' (errno: 13)
A mysql nem tudott belépni a könyvtárba. Fórumokat olvasgatva a következő megoldások segítenek:
1) A szülő könyvtárnak is mysql tulajdonában kell lennie.
2) Legyen bekapcsolva a have_symlink (kövesse a linkeket)
3) Ubuntu alatt az apparmornak be kell állítani, hogy olvashassa azt a könyvtárat is, ahova áthelyeztük az adatbázis fájljait. Ezt röviden be is mutatom, mert az Ubuntu nagyon népszerű, talán többen belefuthatnak a hibába. (forrás)
Az /etc/apparmor.d/usr.sbin.mysqld fájlt szerkesszük, adjuk hozzá a következő sorokat:
/ensembl/ r,
/ensembl/** rw
(természetesen a kapcsos zárójelen belül). Indítsuk újra az apparmort (sudo service apparmor restart) és minden megjavul.
Most hozzunk létre egy mysql felhasználót, és adjuk meg neki a megfelelő jogokat, hogy használhassa az adatbázist.
mysql -u root
create user 'ensembl'@'localhost' identified by 'ensembl'
Emlékezünk még a createdb.sql fájlunkra? Használjuk ismét, hogy jogokat adjunk az első felhasználónak:
sed 's/;//' createdb.sql | awk '{print "grant select on "$3".* to '"'"'ensembl'"'"'@'"'"'localhost'"'"'; "}' >grant.sql
Az idézőjelek kicsit ilyesztőek lehetnek. Ha ezzel megvagyunk, nincs más dolgunk, mint beadni a mysql-nek, a korábban leírt módon.
A következő lépés, hogy Perl API-t telepítsük.
Először a Bioperl csomagot telepítsük. Adjuk ki a sudo cpan parancsot. Ez elindítja a telepítő scriptet. Adjuk ki az install Bundle::BioPerl parancsot. Ha nem tudjuk, milyen válaszokat adjuk a kérdésekre, akkor az enter megnyomásával léphetünk tovább. Ezzel nagy hibát nem követünk el.
A BioPerl csomag telepítése után következik az EnsEMBL perl csomagok telepítése. Én itt el szoktam térni az általánosan elfogadott telepítési módszertől, mert én a modul könyvtárat egyszerűen bemásolom a többi Perl modul közé.
Tehát kicsomagolom a Perl modulokat a jó öreg tar -xfz -vel, majd a modules könyvtár teljes tartalmát átmásolom pl. a /usr/lib/perl5 könyvtárba. (Vagy más perl5 modul könyvtárba, ahol megtalálható a Bio névteret jelölő könyvtár) Az EnsEMBL moduljai nem fognak felülírni egyetlen más modult sem. (Legalábbis nekem még nem tették)
Ha készen vagyunk, próbáljuk ki a következő rövid szkriptet, amivel ellenőrizhetjük, hogy mindent jól végeztünk:
use Bio::EnsEMBL::Registry;
use strict;
# Get all exons
my $reg = 'Bio::EnsEMBL::Registry';
$reg->load_registry_from_db(-host => 'localhost', -user => 'ensembl', -pass => 'ensembl');
my $adaptor = $reg->get_adaptor('Human', 'Core', 'Exon');
my @exons = $adaptor->fetch_all();
Ha hiba nélkül lefut, akkor végeztünk.