2021년 5월 23일 일요일

Bactopia test - 방황의 끝(2)

Bactopia(공식문서, GitHub, mSystems 2020년 논문)란 세균 유전체의 분석을 위한 파이프라인이다. TORMES 파이프라인과 유사하면서도 다른 점이 많다. 동일 종에 속하는 여러 균주의 시퀀싱 결과물(fastq)이 있다면, tormes는 이를 조립하여 taxonomic assignment를 실시하고, genome annotation을 실시하면, roary에 의한 pan-genome 분석 및 항생제 내성/병원성 유전자를 검색하여 보기 좋은 리포트를 생성한다.

Bactopia는 로컬 컴퓨터에 연구하려는 species의 DB를 먼저 만드는 것에서 시작한다. 예를 들어 Staphylococcus aureus가 연구 대상이라면, NCBI에서 complete genome 서열(max = 1000)을 다운로드하여 protein DB(이것은 prokka에서 쓰인다)와 genome size 분포 등의 기본 수치를 확보해 놓는다. 항생제 내성/병원성 유전자 DB를 미리 만드는 것은 TORMES와 같다. 분석에 사용할 fastq 파일은 사용자가 제공하거나 SRA/ENA에서 다운로드할 수 있다. 유전체 조립을 하여 minhas skectch에 의해 reference 중 가장 가까운 유전체를 찾고, 이를 기준을 SNP analysis를 실시한다. 그 외의 분석 내용은 TORMES와 유사하다. 단, 그대로 보고용 자료로 쓸 수준의 리포트를 만들어 주지는 않는 것 같다. Nextflow를 쓴다는 것은 bactopia만의 특징이다. Nextflow가 뭔지도 모르면서 벌써 NanoCLUST와 Bactopia라는 애플리케이션을 통히 이를 쓰게 되었다.

Bactopia를 설치하고 테스트 런을 실시하는 과정도 순탄하지는 않았다. Conda 환경에서 돌아가게 만들어져 있지만 DB를 만들기 위한 파일 또는 튜토리얼용 SRA 파일을 내려받는 과정에서 또 SSL 인증서와 관한 문제를 수두룩하게 겪었기 때문이다. 

5월 20일에 작성한 글(Conda 환경이 참조하는 SSL 인증서의 위치는 어디에 있는가? - 방황의 끝)은 어쩌면 방황의 '시작'이었는지도 모른다. 집에서 노트북 컴퓨터에 우분투를 설치하고 bactopia를 테스트하면 아무런 문제가 없다. 그러나 연구소로만 오면 안 된다. 5월 20일 글에서 특정 conda 환경이 참조하는 공식 SSL certificate에 SSLPrisim.crt가 포함된 파일의 위치를 살짝 덮어 쓰는 편법으로 해결을 해 보고자 하였으나, 여의치 않았다.

일요일에 사무실에 나와서 다시 이 문제를 해결하고자 씨름하였다. 결국은 시스템에서 공식적으로 설치한(물론 내가 SSLPrism.crt를 추가하였지만) 인증서의 위치를  두 환경변수 REQUESTS_CA_BUNDLE와 CURL_CA_BUNDLE에 동일하게 설정하는 것이 가장 깔끔한 해결책이라는 결론을 내리게 되었다. 내 블로그에 달린 댓글을 통해서 이러한 환경변수를 통한 해결 방법을 처음 알게 되었지만, 이 변수가 어떤 의미가 있고 어떤 프로그램류에서 쓰이는지에 대해서는 별로 깊게 생각을 하지 않았었다. 검색에 의하면 REQUESTS_CA_BUNDLE는 파이썬을, CURL_CA_BUNDLE은 curl 및 관련 프로그램을 위한 것이다. 이 변수를 제대로 선언했다면 파이썬 패키지의 설치 작업에서 '--trusted-host pypi.org --trusted-host files.pythonhosted.org' 옵션을 줄 필요가 없다. 

모든 애플리케이션이 시스템에 공식적으로 설치된 SSL 인증서를 자동적으로 인식하지는 않는다는 점이 지금까지 이렇게 고생을 하게 만든 이유인 것 같다. 어떤 리눅스 배포판을 쓰느냐에 따라서 시스템에 설치된 인증서의 위치는 조금 다르다.

CentOS라면 이렇게 하면 된다.

export REQUESTS_CA_BUNDLE=/etc/pki/tls/cert.pem

export CURL_CA_BUNDLE=/etc/pki/tls/cert.pem

다음은 우분투의 경우이다.

export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Bactopia는 참조 유전체 서열을 다운로드할 때 ncbi-genome-download를 사용한다. 이 스크립트는 예전에 설치하여 조금 쓰다가 어느 순간부터 작동이 잘 안되어서 손을 대지 않고 있었는데(역시 SSL 인증서 문제였음), 이번에 bactopia 테스트를 위하여 애를 쓰는 과정에 덩달아 문제가 해결되었다! Bactopia와 database 설치가 모두 완료되어 다음과 같이 첫 명령을 실행하였다.

$ bactopia --accession SRX4563634 \
>          --datasets datasets/ \
>          --species "Staphylococcus aureus" \
>          --coverage 100 \
>          --genome_size median \
>          --cpus 2 \
>          --outdir ena-single-sample

Raw data를 다운로드하는 'gather_fastqs' 단계(fastq-dl 사용)에서 에러가 난다. 인증서 문제는 다 해결한 것 같은데 이유가 뭘까? '--use_ena'를 써서 fastq 파일을 SRA 대신 ENA에서 다운로드하면 될지도 모른다는 생각이 들어서 이 옵션을 주어 보았다. 그랬더니 비로소 bactopia 실행이 에러 없이 완료되었다. 후!

총 3대의 컴퓨터에 몇 번씩 재설치를 해 가면서 문제를 재현하고 한 단계씩 나아가면서 이를 해결하고자 노력하여 여기까지 왔다...

댓글 없음: