WSLの導入から各種設定まで [個人的メモ]

# はじめに

自分のPCのwsl(Windows Subsystem for Linux)を構築しなおすことになったので、自分好みの環境を構築するまでの手順を備忘録的にまとめておきます。

> wslを有効にするまでの各種設定は済んでいる前提で進めます。

# 1. WSLのインストール

PowerShellから以下のコマンドを入力。インストールしたいディストリビューションを決めます。

```shell: PowerShell
wsl -l --online
```

今回は`Ubuntu 22.04 LTS`を導入します。
以下のコマンドでインストール

```shell: PowerShell
wsl --install Ubuntu-22.04
```
インストールが終わったら、UsernameとPasswordの入力を求められるので入力してください。

そしたら次に各パッケージのアップデートとアップグレードを済ませてしまいましょう。
インストールしたディストリビューションのコンソールで以下を実行。

```shell: Ubuntu
sudo apt update
sudo apt upgrade
```

# 2. GithubへのSSHキーの登録

ホームディレクトリで以下のコマンドを実行

```shell: Ubuntu
ssh-keygen -t ed25519
```

いろいろ聞かれますが、何も入力せずEnter連打でOK
そしたらホームディレクトリに`.ssh`ディレクトリが作成されるので、その中に生成されたsshキーをgithubに登録します。
`.ssh`ディレクトリの中には2つのファイルが生成されていると思いますが、`.pub`とついているファイルの中身を控えておきます。
今回はクリップボードにコピーします。

```shell: Ubuntu
cd ~/.ssh
cat id_ed25519.pub | clip.exe
```
そしたらGithubを開き、`settings > SSH and GPG keys > New SSH key`を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510959/e49bda43-b10c-4633-a70e-a3f10ccee21b.png)

Titleにはこのsshキーがどのデバイス/ディストリビューションのものであるかわかるような説明でも書いておきましょう。
Key typeはAuthentication
Keyには先ほどクリップボードにコピーしたsshキーを貼り付けます。
欄が埋まったら`Add SSH key`をクリック。

そしたらUbuntuに戻り、登録したSSHキーが正しく動作するかチェックします。
以下のコマンドを実行

```shell: Ubuntu
ssh -T git@github.com
```
「Hi `あなたの名前`! You've successfully authenticated, but GitHub does not provide shell access.」と表示されたら成功です。

# 3. エイリアスの設定

このままでは不便なLinuxなので、自分好みのエイリアスを設定します。
普段エイリアスなんか使わないという人はこの章を飛ばしてもOK
(でもエイリアスを設定することはお勧めします)

エイリアスは`.bashrc`に記述するのではなく`.bash_aliases`ファイルを作成してその中に記述するのがお作法らしいのでそれに倣います。

```shell: Ubuntu
vim .bash_aliases
```

そしたらお好みのエイリアスを追加していってください。
参考までに私が普段使用しているエイリアスを載せておきます。
```bash:.bash_aliases
alias cc='cd ~'
alias cl='clear'
alias lc='clear'
alias ..='cd ..'

alias nano='vim'
alias emacs='vim'
alias atom='vim'
alias code='vim'
```

エイリアスが追加出来たら、忘れずにエイリアスを読み込んでおきます。
```shell: Ubuntu
source .bash_aliases
```

# 4. Dockerのインストール
Dockerを使用したいのでインストールします。
巷ではDocker DesktopをWindows側にインストールする方法が一般的らしいですが、なるべくWindows側は汚したくないのでwslの中だけで完結する方法をとります。

wslのUbuntuディストリビューションでもUbuntuデスクトップと同じ方法でDockerがインストールできます。
[Microsoft公式](https://docs.docker.com/engine/install/ubuntu/)による手順をそのまま実行するだけです。

```shell: Ubuntu
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
上記のコマンドが実行出来たら、下のコマンドを実行してdockerが実行できるか確かめましょう
```shell: Ubuntu
sudo docker run hello-world
```
「Hello from Docker! This message shows that your installation appears to be working correctly.」

このようなメッセージが出てきたらOKです。

しかし、このままではdockerコマンドの前に必ず`sudo`をつけないといけないので、dockerグループに自分を追加します。
```shell: Ubuntu
sudo usermod -aG docker $USER
```

追加出来たらUbuntuを再起動してください。

# 5. GPUを使えるようにする

> NvidiaのGPUが搭載されているマシンの前提で話していきます。他社のGPUを使用していたり、PCにGPUがない場合はこの章を読み飛ばしてください。

wslでGPUリソースを使用したいので設定していきます。
ただし、CUDAのバージョン違いなどで各種ツールをインストールしなおしたりが面倒なので、DockerのコンテナからGPUを使うことを想定します。

## 5.1. WindowsにNvidiaドライバーをインストール

WindowsにGPUドライバがインストールされていない場合は、ご自身が使用しているGPUに合ったドライバをインストールしてください。このドライバにはwslのドライバも含まれています。

https://www.nvidia.com/ja-jp/drivers/

インストール出来たら、一度wslを立ち上げなおしてから以下のコマンドを実行します。
```shell: Ubuntu
nvidia-smi
```
以下のような表示が出ればOKです。

![スクリーンショット 2025-03-19 221638.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510959/d236de20-fa74-4f17-9870-ea53bfcc650d.png)

ここで表示された「Driver Version: 566.36 CUDA Version: 12.7」とは、「CUDA 12.7バージョンまでサポートするドライバが入っていますよ」という意味(らしい)です。

> 参考：[stack overflow](https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi)

CUDAのバージョンの情報は後々必要になるので「CUDA Version: 12.7」を覚えておきましょう。

## 5.2. NVIDIA Container Toolkitのインストール

DockerからGPUを使用するために、wsl側にNVIDIA Container Toolkitをインストールします。
[公式による手順](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html)を実行します。
```shell:Ubuntu
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 実験的パッケージを使用する場合、以下のコマンドでコメントアウトを削除
sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
    
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# dockerを再起動
systemctl restart docker
```

## 5.3. 動作チェック

nvidida/cudaのイメージを動かすことでNvidia Container Toolkitが正常に動作するかチェックします。
あらかじめチェックしたCUDAバージョンに適したイメージを探します。

https://hub.docker.com/r/nvidia/cuda/tags

今回はCUDA12.4を使用します。ディストリビューションがUbuntu22.04であるため、こちらのイメージを使用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510959/b3830052-1775-43ea-9332-da396859917d.png)

そしたら以下のコマンドでイメージを引っ張ってきて、内部で`nvidia-smi`コマンドを使用してGPUが認識されているか確認しましょう。
`--gpus all`というオプションは「コンテナ内でGPUを使いますよ」という意味です。

```shell:Ubuntu
docker run --gpus all nvidia/cuda:12.4.1-runtime-ubuntu22.04 nvidia-smi
```

先に`nvidia-smi`で確認した出力と同じようなものが確認できればOKです。

![スクリーンショット 2025-03-19 222346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510959/ca3c88a8-df49-4a72-adcf-5d596cc064d7.png)

# 6. ターミナルの見た目の変更

このままだとターミナルが味気ないのでデコって行きます。

## 6.1. Windows Terminal

Windows11からは標準で入っているWIndows Terminalをターミナルとして使用します。
設定から`プロファイル > Ubuntu > 追加の設定 > 外観` で変更します。

配色等はお好みで設定してください。今回は「One Half Dark」で行きます。

背景画像もなんかいい感じにしとくとテンションが上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510959/aefb69db-26d4-4472-9075-7673fb077b82.png)

こうなりました。

![スクリーンショット 2025-03-22 174319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510959/bef5da84-4def-4f4e-a701-de0badce87fa.png)

## 6.2. Oh My Posh の導入

Oh My Posh というプロンプトエンジンを導入します。
これにより、のターミナルのプロンプト部分にgithubのブランチやステータスをアイコンを使って表示することができます。

https://ohmyposh.dev/

### 6.2.1 Nerd Fontのダウンロード

Oh My Poshではアイコンを使用するため、そのためのフォントをダウンロードする必要があります。
Nerd Fontsというものが一般に使われているらしいのでそれをインストールします。
以下のサイトから気に入ったフォントの`Download`をクリックしてzipファイルを落としてください。

https://www.nerdfonts.com/font-downloads

今回は「Hack Nerd Fonts」をダウンロードしました。
そしたら落としたzipファイルの中身を
`C:\Users\ユーザー名\AppData\Local\Microsoft\Windows\Fonts`
に展開してください。

Windows Terminalに移り、設定から `プロファイル > Ubuntu > 追加の設定 > 外観 > フォント フェイス`で先ほどダウンロードした「Hack Nerd Fonts」を選択します。

### 6.2.2. Oh My Poshのインストール

以下のコマンドでOh My Poshのインストールを行います。

```shell:Ubuntu
sudo wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh
sudo chmod +x /usr/local/bin/oh-my-posh
```

続いてOh My Poshのテーマをインストールします。

```shell:Ubuntu
sudo apt install unzip
mkdir ~/.poshthemes
wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/themes.zip -O ~/.poshthemes/themes.zip
unzip ~/.poshthemes/themes.zip -d ~/.poshthemes
chmod u+rw ~/.poshthemes/*.omp.*
rm ~/.poshthemes/themes.zip
```

最後にOh My Poshを使用するように`.bashrc`に記述します。
一応`.bashrc`のバックアップも取っておきましょう。

```shell:Ubuntu
cp ~/.bashrc ~/.bashrc_backup
echo "eval \"$(oh-my-posh init bash)\"" >> ~/.bashrc
source ~/.bashrc
```

こうなりました。

![スクリーンショット 2025-03-22 184345.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510959/0f476892-81ea-4b6c-b9bb-6bb99132ddd9.png)

### 6.2.3 Oh My Poshのテーマ変更

Oh My Poshには様々なテーマがあります。

https://ohmyposh.dev/docs/themes

テーマを切り替えるには、以下のコマンドを実行します。
`1_shell`の部分を自分の好みのテーマにしてください。

```shell:Ubuntu
eval "$(oh-my-posh init bash --config ~/.poshthemes/1_shell.omp.json)"
```

# 7. 一旦完成

次はエディターの導入を書こうとしたけど長くなったので次回に回します。
エディターはNeoVimがおすすめです。