User Tools

Site Tools


kribbuntu-focal_2205

KRIBBuntu-focal_2205 distro 제작 및 재설치 과정

개요

KRIBBuntu란 Linux용 Linux 하위시스템(Windows Subsystem for Linux, WSL)에서 실행되는 우분투 기반의 배포(distro)입니다. 우분투 20.04LTS(Focal Fossa)를 근간으로 만들어졌기에 KRIBBuntu-focal_YYMM이라는 별칭으로도 부릅니다. KRIBBunt는 Windows 컴퓨터에 가볍게 설치하여 미생물 유전체 데이터를 다루기 위한 목적으로 만들어졌습니다. 대부분의 응용프로그램은 conda 환경을 통하여 설치하였으며, 만약 여러분에게 리눅스 컴퓨터가 있다면 본 문서의 응용프로그램 설치 과정을 참조하여 직접 분석 환경을 만들 수 있을 것입니다. v2207에서는 관리자 권한('sudo' 명령어)를 쓰지 않고도 모든 응용프로그램을 설치해 보았으며, Windows 11 환경에서 테스트를 완료하였습니다. 아무쪼록 이 리소스가 여러분의 연구에 도움이 조금이라도 도움이 되기를 기원합니다. — Haeyoung Jeong 2022/08/30 08:45

Conda base environment에서 되도록 많은 응용프로그램이 무난하게 돌아갈 수 있도록 조건을 잡느라 시간이 많이 걸렸다. 우분투 및 프로그램 설치, distro 파일 제작과 재설치를 통한 테스트를 족히 수십 차례는 진행한 것 같다. 2022년 3월 22일 드디어 myUbuntu distro 최초 버전이 나왔고 5월 31일 정식 공개용 버전인 KRIBBuntu-focal_2205a를 제작하였다. 두 디스트로는 전부 Ubuntu 20.04 LTS를 이용한 것이다. 2022년 7월 26일에는 관리자 권한을 되도록 배제하고 대부분의 프로그램을 'conda install <package>'로 설치하는 방법도 추가해 보았다(KRIBBuntu-focal_2207).

KRIBBuntu를 만드는 과정을 요약하면 다음과 같다. 1번 과정은 본 문서에서 설명하지 않았다.

  1. WSL 기능 활성화 및 터미널 앱 설치
  2. WSL에서 Ubuntu 20.04 설치
  3. Ubuntu 20.04를 실행한 뒤 1) deb 패키지 업데이트 2) miniconda 설치 3) bioconda 패키지 설치 4) 기타 프로그램 설치
  4. SSL 인증서 설치(KRIBB 내에서 사용할 경우)
  5. tar 파일로 export하기
  6. tar 파일을 import하여 확인하기

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 # 2022년 8월 28일 현재까지 이것이 최신 버전임
> 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

WSL 1을 2로 바꾸는 방법은 다음 사이트를 참조한다.

deb 패키지 업데이트

2022년 5월 31일에 적용하였다. 업데이트 직후에는 python이나 development tool이 전혀 없는 상태이다.

$ sudo apt update
$ sudo apt upgrade
$ sudo apt autoremove # Removing libfwupdplugin1:amd64 (필요한 경우에만 실행)
# System restart

biopython-1.79가 필요한 merge-gbk-records는 다음 단계에서 설치할 zga의 dependency(conda로 설치; biopython-1.77 필요)와 충돌하므로 같은 conda environment에 둘 수가 없다.

$ sudo apt install gnuplot-nox # MUMmer 결과의 시각화에 필요함
$ sudo apt install python3-pip
$ sudo pip3 install khmer merge-gbk-records

관리자 권한이 없는 서버(우분투)에 실습 환경을 만들고 싶다면

WSL에 설치하는 우분투에서는 누구나 관리자 역할을 할 수 있다. 그러나 실제 데이터를 이용한 본격적인 분석 작업을 하려면 일반적인 수준의 하드웨어를 갖춘 PC 환경의 WSL에서는 어려운 점이 많을 것이다. 만약 충분한 성능의 우분투 서버에서 일반 사용자 계정만을 갖고 있는 상태에서 본 실습을 하길 원한다면, 모든 프로그램을 conda를 통해서 설치해야 한다. 따라서 바로 위 섹션에서 보였듯이 sudo 명령으로 deb 패키지를 설치해야 하는 프로그램, 그리고 pip를 이용해야 하는 프로그램(pip 자체를 관리자 권한으로 설치해야 하므로)은 전부 conda를 이용해야 한다.

gnuplot(gnuplot-nox가 아님)과 khmer는 conda base environment에 설치하도록 한다. 단, merge-gbk-records는 다음과 같이 별도의 환경을 만들도록 한다. 이는 miniconda installer를 설치한 뒤 conda base environment 안에서 실시해야 한다. 환경 이름은 py36이 아닌 다른 어느 것으로 해도 무방하다. 파이썬 스트립트인 merge-gbk-records는 conda package로 제공되지 않으므로 pip를 이용하여 설치한다. 거듭 강조하지만, conda 환경 안에서 conda install을 사용하여 응용프로그램 패키지를 설치하는 것과, conda 환경 내에 설치된 pip를 이용하여 파이썬 관련 프로그램을 설치하는 것을 구별할 줄 알아야 한다.

(base) $ conda install gnuplot khmer
(base) $ conda create -n py36 python==3.6
$ conda activate py36
(py36) $ pip install merge-gbk-records

'sudo apt install' 없이 conda package만으로 필요한 프로그램을 설치하는 테스트는 2022년 7월 26일에 완료하였다(WSL 2에 우분투 20.04 LTS를 설치하는 것으로부터 다시 시작함). 명령어 모음 파일은 이것을 참조하기 바란다. 실습의 가장 마지막 단계에서 사용하는 merge-gbk-record 스크립트를 어느 환경에서 사용하는지를 확실하 기억해 두어야 한다. 그러려면 어떻게 설치했는지를 알고 있어야 한다. Conda와 무관한 pip(3)였는가? 혹은 특정 conda environment였나?

WSL2에서 이와 같은 방법을 이용하여 만든 배포의 이름은 KRIBBuntu-focal_2207이다.

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
$ conda -V
conda 4.13.0  # 2022년 7월 27일 현재. mamba 버전도 동일하다.

이 단계에서 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

conda channel은 나중에 추가한 것이 가장 우선 순위로 올라간다. 가장 중요한 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는 dependency에 해당하는 mummer와 blast가 이미 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

여기까지 진행한 뒤 필요하다면 canu와 prokka를 설치한다(맨 마지막 섹션 '이 문서를 읽으시는 분들께 내리는 과제물' 참조).

기타 프로그램 6종 + legacy blast

~/bin에 다음의 6가지 프로그램을 복사한 다음 ~/.bashrc 파일의 끝부분에 다음을 추가한다.

export PATH=/home/kribb/bin:$PATH

KentUtils(MIT license)

Jim Kent의 유틸리티 중에서 다음의 두 개를 가져온다.

$ mkdir bin
$ 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 패키지를 가져다가 압축을 푼다.

$ mkdir ~/apps 
$ 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)를 가져다가 압축을 푼다.

$ cd ~/apps
$ wget https://github.com/markschl/seqtool/releases/download/v0.3.0/seqtool-v0.3.0-x86_64-unknown-linux-gnu.tar.gz
$ tar -xvzf seqtool-v0.3.0-x86_64-unknown-linux-gnu.tar.gz
$ cp st ~/bin

~/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_2205a.tar
> certutil -hashfile $env:USERPROFILE\Desktop\KRIBBuntu-focal_2205a.tar md5
MD5의 C:\Users\jeong\Desktop\KRIBBuntu-focal_2205a.tar 해시:
016a0ef6429f49482344ebb75e870dc5
CertUtil: -hashfile 명령이 성공적으로 완료되었습니다.

이 파일은 이제 다른 컴퓨터로 복사하여 자유롭게 설치할 수 있다. USB 플래시 드라이브에 4 GB 이상의 파일을 복사하려면 저장 매체를 NTFS로 수정해야 한다.

> mkdir C:\Distros\myUbuntu
> wsl --import myUbuntu C:\Distros\myUbuntu $env:USERPROFILE\Desktop\KRIBBuntu-focal_2205a.tar

Google Drive 다운로드 링크

  • KRIBBuntu-focal_2205a.egg(3.51GB) 다운로드 후 압축을 풀어서 tar 파일(9.24GB)로 전환한다. egg나 xz 파일의 압축 해제에는 반디집을 추천한다. egg 파일의 MD5 hash는 5bc7181a8ff6f35ddae3775fc6fb9788이며, 압축을 해제하여 만들어진 tar 파일의 MD5 hash는 016a0ef6429f49482344ebb75e870dc5이다.
  • KRIBBuntu-focal_2207.tar.xz(3.03GB)는 canu, flye, prokka등 추가 application을 설치하였으며, 패키지 또는 라이브러리 설치 과정에서 관리자 권한을 사용하지 않았다. xz 파일의 MD5 hash는 0503526ac32bedcf08171f425195e123이며, 압축을 해제하여 만들어진 tar 파일(11.0GB)의 MD5 hash는 84bef9143ecd26b9165e5b28ab909f8d이다.

이 문서를 읽으시는 분들께 내리는 과제물: 이대로 따라하면 KRIBBuntu-focal_2207이 됩니다

mamba를 conda('conda create' 및 'conda install') 대신 사용하면 패키지 및 환경 설치 작업이 훨씬 신속하게 이루어질 것이므로 이를 사용하기를 적극 권장한다. 그러나 'mamba activate <env>'를 사용하는 데에는 신중을 기하는 것이 좋다. 왜냐하면 conda의 모든 subcommand를 아직 mamba가 대신하지는 못하기 때문이다. 다음 명령은 mamba를 설치하는 방법이다.

$ conda install mamba -n base -c conda-forge

canu assemblerprokka annotation tool을 직접 설치하는 것도 실력을 향상하는데 큰 도움이 될 것이다.

응용 프로그램 설치와 관련한 힌트

  • Canu는 conda base environment에서 mamba를 이용하여 설치하라. 문제점: circlator에서 canu version을 제대로 인식하지 못한다. circlator를 실행할 때 spades를 사용하는 기본 조건이라면 문제가 없다. 문제 해결 방안은 여기를 참조하여라.
(base) $ mamba install -c conda-forge -c bioconda -c defaults canu
  • Prokka는 conda base environment에서 mamba를 이용하여 설치하라.
(base) $ mamba install -c conda-forge -c bioconda -c defaults prokka

아마 실행 단계에서 다음과 같은 어이없는 에러가 나올 것이다. ~/miniconda/bin/prokka를 편집기로 열어서 159번째 줄 근처에서 blastp와 makeblastdb의 MINVER를 2.1로 수정하여라. 이것은 일종의 꼼수에 해당하니, 완벽한 해결책을 원한다면 prokka >=1.14를 설치하면 된다는데(참고 글: Prokka does not recognize blast 2.10 as >= blast 2.9) bioconda channele에 공개된 prokka의 최신 버전은 1.13이다!

[18:54:26] Determined blastp version is 2.12
[18:54:26] Prokka needs blastp 2.2 or higher. Please upgrade and try again.

Conda로 prokka를 설치했음에도 불구하고 실행 중 hmmer3 단계에서 Bio::SearchIO::hmmer3가 없다는 메시지가 나오면 다음을 실행한 뒤 다시 prokka annotation을 실시한다.

(base) $ conda install -c bioconda perl-bio-searchio-hmmer

실습용 스크립트 및 기타 자료

kribbuntu-focal_2205.txt · Last modified: 2023/10/11 15:25 by hyjeong