====== 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 ". 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 오류와 관련된 참조의 글 [[https://blog.genoglobe.com/2022/05/wsl-2204-lts-0x8027025a.html|링크]]). ==== 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** 기반의 [[https://docs.conda.io/en/latest/miniconda.html|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 에러가 발생하면 종료하고 '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부터 설치한다. [[https://github.com/laxeye/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) ==== [[https://hgdownload.cse.ucsc.edu/admin/exe/|Jim Kent의 유틸리티]] 중에서 다음의 두 개를 가져온다. * [[http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/faSomeRecords|faSomeRecord]] * [[http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/faSplit|faSplit]] $ 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)==== [[https://anaconda.org/bioconda/sprai/0.9.9.23/download/linux-64/sprai-0.9.9.23-py27pl5.22.0_0.tar.bz2|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 [-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용 바이너리([[https://github.com/markschl/seqtool/releases/download/v0.3.0/seqtool-v0.3.0-x86_64-unknown-linux-gnu.tar.gz|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 실행에 필요하다. [[https://github.com/kad-ecoli/ncbi-blast-legacy|GitHub]]에서 [[https://github.com/kad-ecoli/ncbi-blast-legacy/releases/download/2.2.26/blast-2.2.26-x64-linux.tar.gz|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를 설치해야 한다. [[https://genoglobe.com/kribb/ssl_%EC%9D%B8%EC%A6%9D%EC%84%9C_%EB%AC%B8%EC%A0%9C%EC%9D%98_%ED%95%B4%EA%B2%B0_%EB%B0%A9%EB%B2%95|리눅스에서 SSL 인증서 문제의 해결 방법]] 위키 문서에서 [[https://genoglobe.com/kribb/ssl_%EC%9D%B8%EC%A6%9D%EC%84%9C_%EB%AC%B8%EC%A0%9C%EC%9D%98_%ED%95%B4%EA%B2%B0_%EB%B0%A9%EB%B2%95#ubuntu|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로 설치 * [[https://github.com/markschl/seqtool|Seqtool]](st) 리눅스용 바이너리 설치 * NCBI blast legacy 실행파일을 별도로 설치 ===== 과제 ===== mamba를 conda 대신 사용하면 패키지 및 환경 설치 작업이 훨씬 순조로울 것이다. 그러나 'mamba activate '를 사용하는 데에는 신중을 기하는 것이 좋다. 다음 명령은 mamba를 설치하는 방법이다. $ conda install mamba -n base -c conda-forge [[https://github.com/marbl/canu|canu assembler]]와 [[https://github.com/tseemann/prokka|prokka annotation tool]]을 직접 설치하는 것도 실력을 향상하는데 큰 도움이 될 것이다. ==== 힌트 ==== * Canu는 v2.2의 바이너리 압축 파일을 가져다가 설치하라. xz로 압축되어 있으므로 conda base environment를 사용하라. * prokka는 conda base environment에서 mamba를 이용하여 설치하라.