2021년 4월 27일 화요일

SSL을 둘러싼 conda의 에러는 CentOS에서 Ubuntu로 바뀌면서 사라지다

Conda의 업데이트를 시도하다가 다음과 같은 에러를 만났다. 

$ conda update conda
Collecting package metadata (repodata.json): failed

CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/conda-forge/linux-64/repodata.json>
Elapsed: -

An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
u'https://conda.anaconda.org/conda-forge/linux-64'

워낙 잘 알려진 에러라서 네이버나 구글을 치면 해결책이 나온다. '.condarc' 파일에 'ssl_verify" false'라고 한 줄만 써 넣으면 된다고 한다. 그런데... 위 화면에 나온 메시지는 이미 .condarc를 수정한 다음의 상태이다. OpenSSL을 써서 해당 사이트에 대한 CA bundle을 만들어서 공급해 보기도 하였으나 역시 마찬가지였다.

흠, 나의 CentOS 환경(항상 최신으로 업데이트를 해 왔지만)이 어딘가 꼬였단 말인가. 

같은 전산망에 묶여 있는 다른 서버에서 이 문제가 재현되는지를 알아보기로 하였다. 이 서버에는 우분투 20.04가 설치된 상태이다. Anaconda3-2020.11-Linux-x86_64.sh를 다운로드하여 설치를 시작하였다. 아무런 문제가 없다. Conda base environment에 진입하여 'conda update conda'를 실행하였다. 역시 아무런 문제가 없다. 

이번에는 의존성이 과도한 편에 속하는 응용프로그램인 tormes-1.2.1 환경을 설치해 보았다. 아무런 문제가 없다. QUAST 관련 DB와 utility를 설치하는 스크립트인 quast-download-gridss, quast-download-silva, quast-download-busco를 실행할 때에는 https:// 아래에 있는 일부 파일을 가져오지 못하는 문제가 있었다. 이것은 'wget --no-check-certificate'로 간단히 해결하였다. 설치 마지막 과정에서는 'tormes-setup'을 실행해야 하는데 이게 순탄하지는 않았다. 그 과정은 조금 시간을 두고 정리하고자 한다. 왜냐하면 raw sequencing read가 없이 오직 genome assembly만을 사용하여 tormes를 실행하면 결과가 좀 이상하게 나오기 때문이다. 분명히 4 개의 genome을 투입했는데 결과는 2 개만 나오고 있다. 개발자 사이트 쪽에서 실제 작동하는 샘플 파일을 메타데이터 파일과 같이 제공하면 참 좋을 것이다.

2021년 4월 28일 업데이트

tormes-setup을 실행하면 R 패키지를 설치하는 과정에서 에러가 난다. 메시지를 보면 cran.rstudio.com과 bioconductor.org 사이트를 443번 포트로 접속하여 패키지를 다운받지 못하는 것이다. openssl을 사용하여 다음과 같이 두 사이트에 대한 CA bundle을 만들어 하나의 파일로 저장한 다음, 이를 .Renviron 파일에 지정하는 편법을 동원하였다.

$ echo quit | openssl s_client -showcerts -servername "cran.rstudio.com" -connect cran.rstudio.com:443 > cran.rstudio.com.ca-bundle
depth=1 C = KR, O = SOOSAN INT, CN = ePrism SSL
verify error:num=19:self signed certificate in certificate chain
verify return:1
depth=1 C = KR, O = SOOSAN INT, CN = ePrism SSL
verify return:1
depth=0 CN = cran.rstudio.com
verify return:1
DONE
$ echo quit | openssl s_client -showcerts -servername "bioconductor.org" -connect bioconductor.org:443 > bioconductor.org.ca-bundle
depth=2 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", CN = Go Daddy Root Certificate Authority - G2
verify return:1
depth=1 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2
verify return:1
depth=0 OU = Domain Control Validated, CN = *.bioconductor.org
verify return:1
DONE
$ cat cran.rstudio.com.ca-bundle bioconductor.org.ca-bundle > test.ca-bundle
$ cp test.ca-bundle ~/.cert
$ cat ~/.Renviron
CURL_CA_BUNDLE=.cert/test.ca-bundle
이렇게 한 다음, tormes-setup에서 해당되는 부분만 뽑아서 별도의 스크립트를 만들어 실행하였다. $TORMESDIR 변수는 각자 conda 설치 상황에 따라 다를 것이다. 홈 디렉토리에서 실행하지 않을 때를 감안하여 안전하게 'export CURL_CA_BUNDLE=${HOME}/.cert/test.ca-bundle'이라고 선언하는 것이 좋을 것이다.
$ cat R_package_install.sh
export TORMESDIR=/home/hyjeong/anaconda3/envs/tormes-1.2.1/bin
export R_LIBS=$TORMESDIR/../lib/R/library/
Rscript -e 'library(BiocManager); BiocManager::install(version = "3.10", ask = FALSE, lib.loc="$TORMESDIR/../lib/R/library/")'
Rscript -e 'library(BiocManager); BiocManager::install("ggtree", ask = FALSE, lib.loc="$TORMESDIR/../lib/R/library/")'
Rscript -e 'library(BiocManager); BiocManager::install("treeio", ask = FALSE, lib.loc="$TORMESDIR/../lib/R/library/")'
하지만 TORMES-1.2.1의 실행은 아직 완벽하지 않다. 일루미나 read를 이용하여 실행하면 과거와 같이 별 문제가 없는데, 유전체 서열을 넣으면 sample-metadata 파일의 파싱 과정에서 자꾸 에러를 발생한다. 문법적으로 무엇이 틀렸는지 도무지 찾을 길이 없다. 과거에는 잘 되던 것(된다고 믿었던 것?)이 며칠째 속을 썩인다. 메타데이터 파일에서 첫번째 컬럼인 샘플명에는 특수문자를 쓰지 말라고 하는데, 밑줄이나('_') 대시('-') 정도는 허용을 해야 하지 않을까? R에서는 컬럼/로 헤더에는 밑줄을 허용하지 않는 것 같았다. TORMES에서는 (메타)데이터 파일의 처리에 R을 적극적으로 사용하므로 규칙을 잘 따르는 것이 필요하다.

TORMES와 유사한 세균 유전체 분석 파이프라인인 Bactopia라는 것이 눈길을 끈다. 이것도 우분투 최신 환경에 설치해 놓고서 어떻게 쓰는 것인지를 공부하려고 한다.


아, 이것도 설치가 쉽지 않다. Sanger Institute의 ARIBA(Antimicrobial Resistance Identification By Assembly)의 작동을 위해 레퍼런스 DB를 내려받아야 하는데, 역시 https의 문제에 부딛힌다. 이건 또 어떻게 해결한다?


댓글 없음: