Table of Contents
myUbuntu(a.k.a. KRIBBuntu) distro 제작 및 재설치 과정
Conda base environment에서 되도록 많은 응용프로그램이 무난하게 돌아갈 수 있도록 조건을 잡느라 시간이 많이 걸렸다. 우분투 및 프로그램 설치, distro 파일 제작과 재설치를 통한 테스트를 족히 수십 차례는 진행한 것 같다. 2022년 3월 22일 드디어 myUbuntu distro 최초 버전이 나왔고 5월 31일 KRIBBuntu-focal_2205를 제작하였다. 두 디스트로는 전부 Ubuntu 20.04 LTS를 이용한 것이다.
WSL에서 Ubuntu 20.04 LTS(Focal Fossa)설치
사용자명은 'kribb', 암호는 Kribb#1234로 하였다.
> wsl --list --online 다음은 설치할 수 있는 유효한 배포 목록입니다. 'wsl --install -d <배포>'를 사용하여 설치하세요. NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling openSUSE-42 openSUSE Leap 42 SLES-12 SUSE Linux Enterprise Server v12 Ubuntu-16.04 Ubuntu 16.04 LTS Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS > wsl --install -d Ubuntu-20.04 Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: kribb New password: Retype new password: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.10.60.1-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Mon May 30 20:38:35 KST 2022 System load: 0.27 Processes: 8 Usage of /: 0.5% of 250.98GB Users logged in: 0 Memory usage: 1% IPv4 address for eth0: 172.25.20.3 Swap usage: 0% 1 update can be applied immediately. To see these additional updates run: apt list --upgradable The list of available updates is more than a week old. To check for new updates run: sudo apt update This message is shown once a day. To disable it please create the /home/kribb/.hushlogin file. kribb@DESKTOP-HA1DTJ2:~$ exit # 설치 후 상태 > wsl -l Linux용 Windows 하위 시스템 배포: Ubuntu-20.04(기본값)
관리자 권한으로 /etc/wsl.conf 파일을 만들어 다음의 내용을 삽입한다. 이렇게 해야 .tar 파일로 export한 배포를 import로 재설치했을 때 kribb 사용자명으로 사용할 수 있다.
[user] default=kribb
Microsoft Store에서 원하는 우분투 배포를 선택하여 설치해도 된다. Ubuntu 22.04 LTS(Jammy Jellyfish)는 Microsoft Store에는 있지만 2022년 5월 30일 현재 'wsl --list --online' 명령에서는 나타나지 않는다. 22.04는 WSL로 설치하기가 약간 까다롭다(0x8027025a 오류와 관련된 참조의 글 링크).
WSL 2로 전환하기
> wsl -l -v NAME STATE VERSION * myUbuntu Stopped 1 Ubuntu-22.04 Stopped 2 > wsl --set-version myUbuntu 2 변환이 진행 중입니다. 몇 분 정도 걸릴 수 있습니다... WSL 2와의 주요 차이점에 대한 자세한 내용은 https://aka.ms/wsl2를 참조하세요 변환이 완료되었습니다. > wsl -l -v NAME STATE VERSION * myUbuntu Stopped 2 Ubuntu-22.04 Stopped 2
WSL 2를 기본 버전으로 하려면 다음과 같이 입력한다.
> wsl --set-default-version 2
deb 패키지 업데이트
2022년 5월 31일에 적용하였다. biopython-1.79가 필요한 merge-gbk-records는 다음 단계에서 설치할 zga의 dependency(conda로 설치; biopython-1.77 필요)와 충돌하므로 같은 conda environment에 둘 수가 없다.
$ sudo apt update $ sudo apt upgrade $ sudo apt autoremove # Removing libfwupdplugin1:amd64 # System restart $ sudo apt install gnuplot-nox # MUMmer 결과의 시각화에 필요함 $ sudo apt install python3-pip $ sudo pip3 install khmer merge-gbk-records
관리자 권한이 없는 서버(우분투)에 실습 환경을 만들고 싶다면
WSL에 설치하는 우분투에서는 누구나 관리자 역할을 할 수 있다. 그러나 실제 데이터를 이용한 본격적인 분석 작업을 하려면 일반적인 수준의 하드웨어를 갖춘 PC 환경의 WSL에서는 어려운 점이 많을 것이다. 만약 충분한 성능의 우분투 서버에서 일반 사용자 계정만을 갖고 있는 상태에서 본 실습을 하길 원한다면, 모든 프로그램을 conda를 통해서 설치해야 한다. 따라서 바로 위 섹션에서 보였듯이 sudo 명령으로 deb 패키지를 설치해야 하는 프로그램은 전부 conda를 이용해야 한다.
gnuplot(gnuplot-nox가 아님)과 khmer는 conda base environment에 설치하도록 한다. 단, merge-gbk-records는 다음과 같이 별도의 환경을 만들도록 한다. 이는 miniconda installer를 설치한 다음에 해야 한다. 환경 이름은 etc가 아닌 다른 어느 것으로 해도 무방하다. 파이썬 스트립트인 merge-gbk-records는 conda package로 제공되지 않으므로 pip를 이용하여 설치한다.
$ conda create -n etc python==3.6 $ conda activate etc (etc) $ pip install merge-gbk-records
Miniconda 및 실습용 프로그램 설치(bioconda package)
파이썬 3.8 기반의 miniconda installer를 사용하는 것이 무난하다. 2022년 5월 30일 현재 최신 installer는 파이썬 3.9 기반이다.
$ wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.11.0-Linux-x86_64.sh $ bash Miniconda3-py38_4.11.0-Linux-x86_64.sh
설치 중에는 'conda init' 스크립트를 이용하여 startup script를 수정하도록 만든다.
installation finished. Do you wish the installer to initialize Miniconda3 by running conda init? [yes|no] [no] >>> <= yes 입력
종료 후 재시작하면 자동으로 conda base environment에 들어갈 것이다. 혹은 재시작하지 않고 다음과 같이 'source ~/.bashrc'를 실행해도 된다. conda config 파일을 수정하여 'conda activate' 명령을 입력해야만 conda base environment에 진입하도록 수정한다.
$ source ~/.bashrc (base) $ conda config --set auto_activate_base false (base) $ conda update conda
이 단계에서 CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/current_repodata.json> 에러가 발생하면 종료하고 'wsl --shutdown'을 실시한 뒤 재시작한다. conda 명령어를 업데이트한 뒤 채널을 설정하고 필요한 패키지를 설치한다. zga를 설치할 때에는 checkm과 dfasta의 DB의 다운로드 및 설치가 이루어지므로 시간이 꽤 많이 걸린다.
(base) $ conda config --show channels channels: - defaults (base) $ conda config --add channels bioconda (base) $ conda config --add channels conda-forge
가장 중요한 zga부터 설치한다. GitHub 문서의 설치 사례를 조금 수정하였다.
(base) $ conda install fastp "spades>=3.12" unicycler checkm-genome dfast bbmap blast biopython=1.77 nxtrim "mash>=2" flye minimap2 racon "samtools>=1.9" emboss (base) $ dfast_file_downloader.py --protein dfast --cdd Cog --hmm TIGR (base) $ pip install zga
나머지 conda package를 설치한다. pyani는 base environment 내에서 pip로 설치하였다.
(base) $ conda install ncbi-genome-download fastani sra-tools filtlong fasttree trimal mafft mummer (base) $ pip install pyani # 설치된 conda environment 확인 (base) $ conda info --env # conda environments: # base * /home/kribb/miniconda3
기타 프로그램 6종 + legacy blast
~/bin에 다음의 6가지 프로그램을 복사한 다음 ~/.bashrc 파일의 끝부분에 다음을 추가한다.
export PATH=/home/kribb/bin:$PATH
KentUtils(MIT license)
Jim Kent의 유틸리티 중에서 다음의 두 개를 가져온다.
$ cd ~/bin $ wget http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/faSomeRecords $ wget http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/faSplit $ chmod a+x faSomeRecords faSplit
간단한 ANI 계산기(license 정보 없음)
https://github.com/chjp/ANI 사이트를 참조하여 ANI.pl 파일을 다운로드한다. legacy blast가 있어야 실행 가능하다.
$ cd ~/bin $ wget https://raw.githubusercontent.com/chjp/ANI/master/ANI.pl $ chmod a+x ANI.pl
check_circularity.pl 스크립트(in sprai package; MIT license)
Sprai 패키지를 가져다가 압축을 푼다.
$ cd ~/apps $ wget https://anaconda.org/bioconda/sprai/0.9.9.23/download/linux-64/sprai-0.9.9.23-py27pl5.22.0_0.tar.bz2 $ tar -xvf sprai-0.9.9.23-py27pl5.22.0_0.tar.bz2
~/apps/bin/check_circularity.pl의 라인 1~4를 다음과 같이 수정한 다음 ~/bin에 복사한다.
#!/usr/bin/env perl eval 'exec /usr/bin/env perl -S $0 ${1+"$@"}' if 0; # not running under some shell
run-mummer4.sh
내가 만든 짤막한 스크립트. 우분투에서는 shebang line에 '/bin/sh'라고 해 놓으면 bash가 아니라 dash로 연결되므로 유의해야 한다. nucmer의 '-c' 파라미터(minimum length of a cluster)는 100 정도로 줄여도 된다.
#!/usr/bin/bash # # run-mummer4.sh: MUMmer-based shell script for aligning draft sequences to a # finished genome. # if [ $# = 0 ] then echo "Usage : run-mummer4.sh <prefix> <ref_seq_file> <query_seq_file> [-q]" 1>&2 echo "The last option is for delta-filter." echo "Other nucmer default options: -maxmatch -c 100" exit 1 fi #nucmer --prefix=$1 -mum -c 100 $2 $3 nucmer --prefix=$1 -mum -c 1000 $2 $3 if [ "$4" = "-q" ] then delta-filter $4 $1.delta > tmp mv $1.delta $1.delta.org mv tmp $1.delta fi show-coords -rcl $1.delta > $1.coords REFNAME=`awk '$1~/^>/{print $1}' $2 | sed 's/^>//'` for QRYNAME in `awk '$1~/^>/{print $1}' $3 | sed 's/^>//'` do show-aligns $1.delta $REFNAME $QRYNAME > $1.aligns done mummerplot --postscript $1.delta -R $2 -Q $3 --layout --prefix=$1
Seqtool(MIT license)
https://github.com/markschl/seqtool에서 리눅스 X86_64용 바이너리(seqtool-v0.3.0-x86_64-unknown-linux-gnu.tar.gz)를 가져다가 압축을 푼다.
~/bin 디렉토리의 내용물은 다음과 같아야 한다.
$ ls ~/bin ANI.pl check_circularity.pl faSomeRecords faSplit run-mummer4.sh st
NCBI legacy blast(License: Public Domain)
ANI.pl과 pyani 실행에 필요하다. GitHub에서 blast-2.2.26-x64-linux.tar.gz를 가져다가 ~/apps 아래에서 압축을 푼다. ZGA pipeline의 dFAST annotation 과정에서는 여기에 포함된 rpsblast를 참조해서는 안된다. 따라서 ANI.pl 또는 pyani 실행 직전에 /home/kribb/bin/apps/blast-2.2.26/bin을 PATH에 포함시키도록 한다.
$ cd ~/apps $ wget https://github.com/kad-ecoli/ncbi-blast-legacy/releases/download/2.2.26/blast-2.2.26-x64-linux.tar.gz $ tar -xvzf blast-2.2.26-x64-linux.tar.gz
SSL 인증서 설치하기
KRIBB 전산망 내에 있다면 SSLPrism.crt를 설치해야 한다. 리눅스에서 SSL 인증서 문제의 해결 방법 위키 문서에서 Ubuntu 항목을 참조하여 설치한다.
파일로 export 후 재설치하기(import)
tar 파일로 export하려 배포하려면 크기를 줄이는 것이 중요하므로, 홈 디렉토리에서 꼭 필요하지 않은 파일을 지운다.
$ rm .viminfo .wget-hsts .sudo_as_admin_successful .bash_history
용량을 줄이기 위해 원본 패키지를 삭제한다.
$ sudo apt clean # cleaning /var/cache/apt/archives $ conda activate (base) $ conda clean --all
Windows Terminal에서 배포를 export하여 .tar 파일을 만든 뒤 md5 checksum을 구한다.
> wsl --export Ubuntu-20.04 $env:USERPROFILE\Desktop\KRIBBuntu-focal_2205.tar > certutil -hashfile $env:USERPROFILE\Desktop\KRIBBuntu-focal_2205.tar md5 MD5의 C:\Users\jeong\Desktop\KRIBBuntu-focal_2205.tar 해시: e79e1acc1c3097d22471877d948a0902 CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.
이 파일은 이제 다른 컴퓨터로 복사하여 자유롭게 설치할 수 있다. 2022년에 이루어진 미생물 유전체 분석 교육에서 사용한 것이 바로 이 tar 파일이다. USB 플래시 드라이브에 4 GB 이상의 파일을 복사하려면 저장 매체를 NTFS로 수정해야 한다.
> mkdir C:\Distros\myUbuntu > wsl --import myUbuntu C:\Distros\myUbuntu $env:USERPROFILE\Desktop\KRIBBuntu-focal_2205.tar
업데이트 이력
- apt로 pip3 설치 → khmer와 merge-gbk-records를 pip3로 설치
- conda pyani enviroment는 삭제 후 pyani를 base environment에서 pip로 설치
- Seqtool(st) 리눅스용 바이너리 설치
- NCBI blast legacy 실행파일을 별도로 설치
과제
mamba를 conda 대신 사용하면 패키지 및 환경 설치 작업이 훨씬 순조로울 것이다. 그러나 'mamba activate <env>'를 사용하는 데에는 신중을 기하는 것이 좋다. 다음 명령은 mamba를 설치하는 방법이다.
$ conda install mamba -n base -c conda-forge
canu assembler와 prokka annotation tool을 직접 설치하는 것도 실력을 향상하는데 큰 도움이 될 것이다.
힌트
- Canu는 v2.2의 바이너리 압축 파일을 가져다가 설치하라. xz로 압축되어 있으므로 conda base environment를 사용하라.
- prokka는 conda base environment에서 mamba를 이용하여 설치하라.