2016년 9월 6일 화요일

MetAMOS under Linuxbrew: Reapr와 FRCbam의 설치 문제

Reapr와 FRCbam은 여러가지의 de novo assembler로 만들어진 결과물을 validation하는데 쓰이는 도구들이다. 만들어진 contig 위에 read를 다시 매핑한 후 다양한 수치를 뽑아낸 뒤 서로 비교하여 최적의 assembly를 고르는 것이 MetAMOS의 Validate process가 하는 일이다.

MetAMOS의 설치 작업 중 가장 까다로운 것이 바로 Reapr와 FRCbam을 설치하는 것이다. Linuxbrew가 제공하는 최신의 빌드 환경(GCC 5.3.0)이 항상 최적은 아닌 것이다. 설치 스크립트를 열어보면 이 두 가지의 프로그램을 까는 일이 얼마나 복잡하게 수행되는지를 알 수 있다. 수 일 동안 엎치락뒤치락하다가 경우 조건을 잡고 최종 테스트를 실행하는 중이다.

Reapr는 Linuxbrew에서 INSTALL.py를 실행하는 것만으로도 별 문제없이 설치가 된다. 그러나 FRCbam은 스토리가 여간 복잡한 것이 아니다. INSTALL.py, 즉 MetAMOS 설치 스크립트에 나온 다음의 소스파일(요즘은 여기에서 다운로드가 안되어서 예전에 받아둔 것을 사용)은 도저히 제대로 바이너리가 만들어지질 않는다.

ftp://cbcb.umd.edu/pub/data/metamos/FRC_align-master.zip (version 1.0)

그래서 이를 별도로 받아서 단독으로 빌드해 보려고 하면 여기에서도 난관에 부딛힌다. GCC version을 끔찍하게도 가리기 때문이다. 구글에서 FRCbam을 찾으면 GitHub의 version 1.3이 나오는데, 이는 GCC 4.4.7에서 아주 쉽게 빌드된다(INSTALL.py에서 나타나는 복잡함이 대폭 줄어들었음). 그런데... 옵션이 몇 개 바뀌어서 정작 MetAMOS 실행에서는 에러가 발생하는 것이다. Validate 과정에서 --pe-min-insert 라는 옵션을 보내는데 FRCbam version 1.3 실행파일은 사용법이 틀렸다는 에러 메시지를 토해내는 것이다. FRCbam의 c++ 소스 코드를 고쳐야 하나? 혹은 validate 기능을 불러오는 파이썬 스크립트를 고쳐야 하나? 좌절감이 극도에 달했다.

온갖 고생을 한 끝에 FRCbam v1.0을 단독으로 빌드하는데 성공하였다. 이렇게 만들어진 바이너리 파일(FRC)을 Utilities/cpp/Linux-x86_64/FRCbam/bin/에 복사해두면 된다. 그 과정을 나열하면 다음과 같다. Linuxbrew나 devtools에 의존하지 않고 CentOS 6.7에서 기본 제공하는 GCC 4.7.1을 쓴다는 것이 키 포인트!


  1. (GCC 4.7.1; 수퍼유저 권한) boost-1.54.0을 소스에서부터 설치한다. 설치 위치는 /opt/local로 하였다(./bootstrap.sh --prefix=/opt/local; ./b2 install)
  2. (GCC 4.7.1; 수퍼유저 권한일 필요 없음) FRCbam v1.0의 압축을 풀고 INSTALL 파일에 적힌 그대로 실행하면 src 아래에 FRC 바이너리가 생긴다.
  3. FRC 바이너리를 제 위치에 복사한다. 각 단계가 정확히 어떤 커맨드로 실행되는지 알고 싶으면 $outDir/Logs/COMMANDS.log 파일을 참조하면 된다.
test_ima.sh 스크립트를 실행해 보았다. 화면으로 FRCBAM 스코어가 나오는 것이 보인다. 

*** metAMOS assembler velvet.37 scores:  LAP:-13.3038811606 ALE:-914695.701821 CGAL:-1.4167e+06 SNP:-1 FRCBAM:-4 ORF:203 REAPR:97.72 N50:159698

그동안 한 고생을 생각하면 눈물이 다 날 지경이다! Validate 결과 화면을 보자.


Abundance, Annotate, FunctionalAnnotation 모두 어여쁜 Krona plot을 나타내고 있다. 


단독 설치 말고 어떻게 해서든 INSTALL.py내에서 FRCbam을 설치해 볼까?(실패)

다음은 INSTALL.py 내에서 boost 라이브러리의 설치 여부를 체크하는 곳이다. boost를 기본 조건으로 설치하면 /usr/local에 위치하게 되어 다음의 코드가 이를 인식하지 못하고 boost의 다운로부터 빌드까지를 자체적으로 실시한다. 이러한 빌드 과정이 외견상으로는 매끄럽게 진행되었어도 FRC 바이너리가 실행 가능한 형태로 만들어지는 것을 아직 제대로 본 적이 없었다.

if os.path.exists("/opt/local/lib/libboost_system-mt.a"):
   os.environ["LDFLAGS"]="-L/opt/local/lib -lboost_system-mt"
elif os.path.exists("/opt/local/lib/libboost_system.a"):
   os.environ["LDFLAGS"]="-L/opt/local/lib -lboost_system"
elif os.path.exists("/usr/lib/libboost_system-mt.a"):
   os.environ["LDFLAGS"]="-L/usr/lib -lboost_system-mt"
elif os.path.exists("/usr/lib/libboost_system.a"):
   os.environ["LDFLAGS"]="-L/usr/lib -lboost_system"
else:
   # install boost ourselves (고난의 시작...)
이제 boost를 /opt/local에 설치하였으므로 위 코드의 첫번째 if 문에서 틀림없이 걸리게 되어있다. 마지막 테스트라 생각하고 다시 고난의 여정으로 들어가 본다. 위에서 만든 FRC 디렉토리를 _FRC로 잠깐 이름을 바꾸어놓고  python INSTALL.py frcbam을 실행해 보았다. 이번에는 GCC 4.7.1이 아니라 Linuxbrew의 GCC 5.3.0을 사용하는 것이다. 

결과는? 컴파일 오류가 발생한다. 더 이상의 시도는 의미가 없는 것으로 판단한다.

De novo assemblers - 아직 끝이 난 것이 아니다!

open MPI가 필요한 일부 de novo assembler의 설치 상태가 완벽하지 않다. open MPI 자체가 제대로 설치된 것인지, 이를 구동하려면 커널 모듈이 올라가야 한다고 들었는데 과연 제대로 작동하는 것인지를 좀 더 공부해야 한다. INSTALL.py에서는 mpirun 바이너리가 $PATH에 있는 것만을 점검하는 것처럼 보이지만, 이는 어쩌면 나의 오해인지도 모른다.

$ rpm -qa | grep openmpi
openmpi-1.10-devel-1.10.2-2.el6.x86_64
openmpi-1.4-psm-1.4.3-5.el6.x86_64
mpitests-openmpi-3.2.4-2.el6.x86_64
openmpi-1.8-1.8.1-5.el6.x86_64
openmpi-1.4-1.4.3-5.el6.x86_64
openmpi-1.8-devel-1.8.1-5.el6.x86_64
openmpi-1.10-1.10.2-2.el6.x86_64
openmpi-1.5.3-psm-1.5.3-5.el6.x86_64
openmpi-1.5.3-1.5.3-5.el6.x86_64
뭐가 이렇게 많이 깔린 것일까??

INSTALL.py 스크립트에서 mpirun 커맨드가 존재하는지 확인하는 프로그램은 ABySS, mpicxx가 존재하는지 확인하는 프로그램은 ray이다. MPI와 어떤 관계가 있는지는 모르나 Celera Assembler와 MaSuRCA도 아직 제대로 빌드되지 않았다. 이는 마지막으로 남은 숙제이다.

ABySS는 제대로 설치가 되었고 실행도 된 흔적이 있지만 결과물이 없다. 아마도 샘플 데이터가 적합치 않아서 결과까지는 이끌어내지 못한 것으로 생각된다. Ray는 open MPI의 mpirun을 $PATH에 등록한 후(export PATH=^Csr/lib64/openmpi/bin:$PATH) GCC 4.7.2 환경(devtoolset-1.1)에서 INSTALL.py를 실행하니 비로소 설치가 되었다. MaSuRCA는 여전히 잘 모르겠고, 역시 설치가 어려운 Celera Assembler는 viersion 8.1의 바이너리 패키지를 따로 받아서 MetAMOS 설치 디렉토리에 복사하면 되지 않을까 생각하고 있다.

댓글 1개:

한선교학부생 :

안녕하세요 저는 한동대학이라는 곳에 다니는 한 학생입니다. 다름이 아니라 제가 생명과학과 프로그램에 관심이 많아 이것저것 해보고 있는데요 이번에 metamos라는 프로그램을 다루게 되었습니다. 설치에는 성공했지만 functional analysis에 관련된 프로그램에는 어떻게 설치하고 돌려야할지 그리고 metamos에 대한 해석에 지식이 많이 부족한것 같아서 여러가지 질문이나 해답을 얻을 수 있을까 하고 댓글을 남깁니다! 연락이 될 수 있다면 좋겠어요 감사합니다