WSL2 + Ubuntu でバイオインフォマティクスを始めたい！

# はじめに
初めまして。とある初心者バイオインフォマティシャンです。
昔はnoteに載せていたのですが、これからはQiitaに載せていきます。
これまでに書いたものも少しずつこちらに移していきます。

noteの方は、感じたことなどを連ねる場として展開しますので、もしよければ覗いて下さい。(更新少なめ)
[note](https://note.com/onigiri_benzene/ "おにぎりのnote")

# Windowsでもバイオインフォマティクス環境は作れる！
Windows System for Linux 2 (WSL2) + Ubuntuの環境が作りやすくなりましたね。
ただ、だからといって、全部覚えてるかと言われればそうではない・・・ということで、

かつて九州大学の講義で扱われた内容をベースに、WSL2にUbuntuを導入し、解析環境を構築する最初の一歩を踏み出す手順をまとめました。
## 目次
はじめに
①PowerShellのダウンロード
②Powershellの起動
(1) Windows GUIでの起動
(2) Windows CUIでの起動
③Windows Subsystem for Linux (WSL)のインストール
(1) 以下のコマンドを実行
(2) Ubuntuを起動する
④sudoシステムのアップデート
⑤minicondaの導入
(1) minicondaのホームページに進む
(2) bashファイル・zshファイルを初期化する
(3) .condarcの作成
⑥mambaの導入
⑦Ubuntuの日本時間設定
⑧.bashrcの設定
⑨emacsの導入
(1) sudo apt installを使って導入
(2) emacsを起動
⑩conda環境の構築
⑪conda環境の起動

## ①PowerShellのダウンロード
Githubのページに進む
[PowerShellのダウンロードサイト](https://github.com/PowerShell/PowerShell "最新版のPowershellダウンロードサイト")
→右下のReleasesの下の"Latest"と書かれた部分をクリック。
(例: v7.4.1 Release of PowerShell)
→使用しているOSごとにインストーラーが異なるので、適したインストーラーを選択。

## ②Powershellの起動
### (1) Windows GUIでの起動
Windowsキー+"R"で"ファイル名を指定して実行"を起動し、その中に"pwsh"と入力。

![Windows+R⇒pwsh](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744572/12ac417c-138b-6eb3-d05f-93e379560ae1.png "Windows+R⇒pwsh")

### (2) Windows CUIでの起動
1. コマンドプロンプトを起動（Windowsキー+"R"で"ファイル名を指定して実行"を起動し、その中に"cmd"と入力）
![commandprompt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744572/bb6fcc64-82aa-b699-367b-55680b0506b1.png "cmd")

2. "pwsh"と入力
```bash
pwsh
```
#### もしくは
Windowsの場合はWindowsターミナルをMicrosoft Store等でインストールして使うのがおすすめ。Windows11以降は標準装備されているはず。
↓こういうものです
![PowerShell 2024_10_11 23_05_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744572/54be16df-fc1a-ed34-b848-dfc9826281ca.png)

## ③Windows Subsystem for Linux (WSL)のインストール
### (1) 以下のコマンドを実行
    wsl --install
この後、Ubuntuのインストールまで自動で実行。

### (2) Ubuntuを起動する
ターミナルを起動する。
Windowsの場合はWindowsターミナルをMicrosoft storeで入手。
ターミナル上で"Ubuntu"を入力しUbuntuを起動。
対話型なので、ユーザー名やパスワードの設定などを順次行うこと。

#### Ubuntuが起動しないときは
・Linux用サブシステムを有効
Powershell内で以下のコマンドを実行。
```
#Linux用サブシステムを有効にする
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

#仮想マシンの機能を有効にする
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
参考にしたサイト↓

https://qiita.com/MinadukiSekina/items/25f3440565ca7b6a359e

## ④sudoシステムのアップデート
これをしないと色々バグが生じる
    
    sudo apt --fix-broken install
## ⑤minicondaの導入
### (1) minicondaのホームページに進む

https://docs.conda.io/projects/miniconda/en/latest/index.html#quick-command-line-install

UbuntuはLinuxベースのOSなので、<b>Quick command line install</b>の"<b>Linux</b>"の部分をクリックし、以下のコマンドをコピー及び実行する。
最新の64-bitバージョンのインストーラを素早く静かにインストールするために実行する。

```bash
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
#.shインストーラは使用後消去する。
rm -rf ~/miniconda3/miniconda.sh
```

異なるバージョンやアーキテクチャのMiniconda for Linuxをインストールする際は、
wgetコマンドで.sh インストーラの名前を変更することで対応。
##### 例
    wget https://repo.anaconda.com/miniconda/Miniconda3-"ここを変える".sh

### (2) bashファイル・zshファイルを初期化する
以下のコマンドを実行する
minicondaのインストール直後は、環境設定やパスがシェルに反映されていないことがある。
この操作によって、condaコマンドが正しく動作し、ターミナルでconda環境が利用できる。

    ~/miniconda3/bin/conda init bash
    ~/miniconda3/bin/conda init zsh

### (3) .condarcの作成
conda installを使う際に、".condarc"を作成し、以下のように書く
```
# This is a sample .condarc file.
# It adds the r Anaconda.org channel and enables
# the show_channel_urls option.

# channel locations. These override conda defaults, i.e., conda will
# search *only* the channels listed here, in the order given.
# Use "defaults" to automatically include all default channels.
# Non-url channels will be interpreted as Anaconda.org usernames
# (this can be changed by modifying the channel_alias key; see below).
# The default is just 'defaults'.
channels:
  - r
  - defaults
  - bioconda
  - anaconda
  - conda-forge
# Show channel URLs when displaying what is going to be downloaded
# and in 'conda list'. The default is False.
show_channel_urls: True

# For more information about this file see:
# https://conda.io/docs/user-guide/configuration/use-condarc.html
```
しかし、2020/4より、従業員数200名以上の営利企業では、Anacondaの利用が有償化されたようです。
無料のIndividual Editionではなく、Commercial Editionを利用するよう規約改定されました。
また、2024年には教育機関で研究目的の利用時は200人以上の組織であれば有償教育機関はカリキュラムベースのコースの使用のみに限定される場合には免除されるとのことです。

https://qiita.com/tfukumori/items/f8fc2c53077b234384fc

これを適用すると、.condarcにおいて、
```
  - r
  - defaults
  - bioconda
  - anaconda
  - conda-forge
```

が

```
  - nodefaults
  - bioconda
  - conda-forge
```
に修正されるので、該当する人は忘れずに修正した方がいいと思います。

## ⑥mambaの導入
mambaは、Condaパッケージマネージャーの高速な代替ツールである。

    conda install conda-forge::mamba

## ⑦Ubuntuの日本時間設定
まず、現在の時間設定を確認。
基本的には協定世界時間(UTC)で時刻表示されている。
```bash
date
#Fri Oct 11 14:57:07 UTC 2024 
```
以下のコマンドで日本時間に変更。

```bash
sudo apt install dbus
sudo timedatectl set-timezone Azia/Tokyo
date
#Fri Oct 11 23:57:27 JST 2024
```

## ⑧.bashrcの設定
使い勝手がよい.bashrcの設定として、国立遺伝研のスパコンの設定を使うとよい。

https://sc.ddbj.nig.ac.jp/faq/faq_software/#ubuntu-initialization

<details><summary>実際の例</summary>

```bash:.bashrc
# If this variable is already set, skip the rest of the script
if [ -n "$BASHRC_LOADED" ]; then
    return
fi

# Set the variable to indicate that the script has been loaded
BASHRC_LOADED=1

# ---

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
	# We have color support; assume it's compliant with Ecma-48
	# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
	# a case would tend to support setf rather than setaf.)
	color_prompt=yes
    else
	color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
```
</details>

# 以下、必要な場合

## ⑨emacsの導入
emacsはvimのようなエディタの一種。あまり使ったことはないですね。
### (1) sudo apt installを使って導入

    sudo apt update
    sudo apt install emacs

### (2) emacsを起動
GUIベースでは砂嵐が発生するので、-nw(no window)コマンドを使う
```bash
echo "alias emacs='emacs -nw'" >> ~/.bashrc #.bashrcファイルに書き込む
source ~/.bashrc #再起動
```

## ⑩conda環境の構築
```bash
conda create -n "環境名" -y 
```
mamba環境でもよい
```bash
mamba create -n "環境名" -y 
```

## ⑪conda環境の起動
```bash
conda activate "環境名"
```
mamba環境でもよい
```bash
mamba activate "環境名"
```
#終了したいときは
```bash
conda deactivate "環境名"
```

# 最後に
今後も解析手法を投稿していこうと思います。それでは。
[最初に戻る](#はじめに)