WSL2に新しくUbuntuを入れたときにやることメモ

WSLに Ubuntu-24.04 が降ってきてますね！
毎回インストール後にやること忘れてるのでこの機会にメモ。

# 実施時環境
* Windows 11 Home 23H3
* WSL 2.1.5.0
* Ubuntu 24.04 LTS


# 端末からビープ音が鳴りまくるのをやめさせる

デフォルトでタブ押す度にﾋﾞｨﾝﾋﾞｨﾝ鳴りまくるのやや狂気を感じる。

```bash
echo 'set bell-style none' >> ~/.inputrc
```

設定後、端末への再ログインが必要。


# よく使うけどデフォルトで居ない奴らをインストールする

```bash
sudo apt update
sudo apt install -y net-tools wget unzip jq
```


# `sudo` なしの n で node, npm を管理する

n が好きです。

```
mkdir ~/.n
cat << EOS >> ~/.profile
export N_PREFIX=\$HOME/.n
export PATH=\$N_PREFIX/bin:\$PATH
EOS
source ~/.profile

sudo apt install -y npm
sudo npm install -g n
n stable

sudo npm uninstall -g n
sudo apt purge -y npm
sudo apt autoremove -y

source ~/.profile
npm install -g n
```

以上で apt が連れてきた npm と、apt が連れてきた npm が連れてきた n は追い出せたはず。

バージョン確認は

```
node -v
npm -v
n -V
```

# Docker Engine のインストール

Docker Desktop は使わない派です。

```bash
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
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo service docker start
```

インストールコマンドは公式からの転記ですが、結構頻繁に変わってる印象があるのでちゃんと本家を読んだ方が良い。

https://docs.docker.com/engine/install/ubuntu/

毎回 `sudo` するのが嫌なので自分のアカウントを `docker` グループに追加しておく:

```bash
sudo gpasswd -a $(whoami) docker
```

設定後、端末への再ログインが必要。`gpasswd` の結果を反映させるには、結局再ログインが一番簡単だと思います。

バージョン確認は `docker -v` 、動作確認は `docker run --rm hello-world`

# （追記）NVIDIA Container Toolkit のインストール

NVIDIA の GPU マシンを使っている場合に Docker から GPU を見えるようにするやつ。かつて `nvidia-docker` ってコマンドを打ってたやつの後継です。止まる所を知らぬ LLM ブームによって Docker からも GPU が使えると嬉しいケースが増えてきたように感じたので追記しました。
Radeon の GPU マシンでこれをインストールした場合何が起きるか知りませんが、恐らく良いことは一つも起きないのでやめましょう。

```bash
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

sudo apt update
sudo apt install -y nvidia-container-toolkit

sudo service docker restart
```

最後の Docker デーモンの再起動を忘れると `docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]` とか言われて動きません（一敗）。

こちらも Docker Engine 本体と同じくインストールコマンドは公式からの転記。この記事が古くなった頃には本家を参照してください。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

動作確認は `docker run --rm --gpus=all nvidia/cuda:12.9.0-base-ubuntu24.04 nvidia-smi` を実行して コンテナ内部から GPU 状態が見えれば OK だが、このタグも新陳代謝が激しそうなのでいずれ outdated になるかも。イメージが無いと言われたら Docker Hub でそれっぽいタグを探すのが良い。

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


# AWS CLI のインストール

## aws

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

```bash
temp=$(mktemp -d)
pushd "${temp}"
wget "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
unzip "awscli-exe-linux-x86_64.zip"
sudo ./aws/install
popd
rm -rf "${temp}"
```

バージョン確認は `aws --version`

## sam

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/install-sam-cli.html

```bash
temp=$(mktemp -d)
pushd "${temp}"
wget "https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip"
unzip "aws-sam-cli-linux-x86_64.zip"
sudo ./install
popd
rm -rf "${temp}"
```

バージョン確認は `sam --version`

# 日本語対応

こちらの記事を参考にさせて頂いております:

https://astherier.com/blog/2021/07/windows11-wsl2-wslg-japanese

```bash
sudo apt install -y language-pack-ja fonts-noto fcitx-mozc dbus-x11
sudo update-locale LANG=ja_JP.utf8

cat << EOS >> ~/.profile
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
if [ $SHLVL = 1 ] ; then
  (fcitx-autostart > /dev/null 2>&1 &)
  xset -r 49  > /dev/null 2>&1
fi
EOS
```

設定後、端末への再ログインが必要。

再ログイン後 `fcitx-configtool` でGUIの設定ツールを起動してこんな感じの設定にすればOK:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70225/977e5b91-cb79-de06-6f92-1b6281f47b17.png)