User Tools

Site Tools


building_myubuntu_distro

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 assemblerprokka annotation tool을 직접 설치하는 것도 실력을 향상하는데 큰 도움이 될 것이다.

힌트

  • Canu는 v2.2의 바이너리 압축 파일을 가져다가 설치하라. xz로 압축되어 있으므로 conda base environment를 사용하라.
  • prokka는 conda base environment에서 mamba를 이용하여 설치하라.
building_myubuntu_distro.txt · Last modified: 2022/07/25 14:21 by hyjeong