WSL2でUbuntuを立ててSSHでつないでdocker-composeを叩くまで

完全に自分用

# なんでこれをするのか
最近macの人とかがdocker for macでdockerを動かしているのを見て、やっぱり仮想マシンを動かすのってマシンリソースを酷使しているなって思ったので、「良い感じだよ」って風の噂で聞いたWSL2環境の構築を真剣にやろうと思った次第です。


# やる内容
実現したいのは以下
- 過去に作った開発環境をWSL2環境で動かせるようにする
    - https://qiita.com/htanaka0828/items/57204c89bb6976312bb5
- ターミナルは普段の奴が良いのでSSHで繋がるようにする
- local環境なのでフランクにsudoはしたい

## 環境
windows 11 Pro 22H2

## WSL install
入れるのはUbuntu
やり方は公式さんを参照
https://learn.microsoft.com/ja-jp/windows/wsl/install

### って思ったらPowerShellのバージョンが古いと怒られた
```
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows
```
普段PowerShellを使わないので、サクッとmsiでinstallしていきます

## 気を取り直してinstall
サクッと実行
```powershell
wsl --install
```

再起動しやがれって出たので再起動していきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160396/1cd5445e-66db-1030-5762-b1a3ad48ffaf.png)

## ユーザーの作成
再起動をしたら勝手にターミナルが立ち上がってアカウントの作成を求められるので作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160396/ab072154-7841-d77b-b005-401c7a687f02.png)

無事完了しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160396/3ccef92b-ad94-506d-8f28-21805f59173c.png)

## SSHの設定
こちらを参考にしました
https://tech-lab.sios.jp/archives/33655

### WSL設定ファイルの作成
中身をみたら普通に書いてあったのでスキップ

```bash
$ sudo cat /etc/wsl.conf
[boot]
systemd=true
```

### SSHの起動
とりあえずコマンド打ったら
```bash
$ sudo systemctl enable ssh
Failed to enable unit: Unit file ssh.service does not exist.
```

ないやん・・・
ってわけでinstallします
ついでにパッケージの更新もしておきます
```bash
# packageの更新
$ sudo apt -y update
$ sudo apt -y upgrade

# SSHのinstall
$ sudo apt -y install openssh-server

# 起動設定
$ sudo systemctl enable ssh

# 起動
$ sudo systemctl start ssh

# statusの確認をしておく
$ sudo systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-10-05 01:48:19 JST; 53s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 10075 (sshd)
      Tasks: 1 (limit: 19102)
     Memory: 1.8M
     CGroup: /system.slice/ssh.service
             └─10075 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Oct 05 01:48:19 GALLERIA-NOTE systemd[1]: Starting OpenBSD Secure Shell server...
Oct 05 01:48:19 GALLERIA-NOTE sshd[10075]: Server listening on 0.0.0.0 port 22.
Oct 05 01:48:19 GALLERIA-NOTE sshd[10075]: Server listening on :: port 22.
Oct 05 01:48:19 GALLERIA-NOTE systemd[1]: Started OpenBSD Secure Shell server.
```

起動までいったのでsshでlogin出来るように設定の変更をしていきます
鍵認証は使う予定がないので今回はパス
```bash
# パスワード認証の有効化
sudo sed -i -e 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config

# sshdの再起動
sudo systemctl restart ssh
```

これでlocalマシンのターミナルから
- host: 127.0.0.1
- user: 作ったユーザー
- password: 設定したパスワード

でログインできるようになりました

## dockerを立ち上げるまでの設定
### sudoの設定
とりあえずパスワード無しでsudoが出来るように設定変更をします
参考
https://www.rough-and-cheap.jp/linux/ubuntu-sudo-without-password/

ただ、defaultだとvisudoで使うエディタが慣れていないnanoで立ち上がってしまうので、先にvimに設定しなおしておきます

```bash
$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    15        manual mode

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode
```

選択肢を確認して`3` を入れてエンターを押したら、visudoで使うエディタがvimに切り替わりました

```bash
sudo visudo
```

sudoの設定を書き換えたら保存して完了です。

### dockerのinstallとか
虎の子の初期設定ファイルがあるので適当にコピーして編集して使います

https://github.com/htanaka0828/devbase_for_lamp_template/blob/master/init.sh
不要な記述もそこそこあるので整理してfileを作ったら雑に実行していきます。

```bash
#!/bin/sh
sudo curl -fsSL https://get.docker.com/ | sh
sudo usermod -aG docker htanaka0828
curl -L https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-`uname -s`-`uname -m` > docker-compose
sudo mv docker-compose /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo service docker start

sudo apt-get install -y sl zip unzip jq expect
```

dockerのinstallをしようとすると `Docker Desctop for Windowsを使おう！ (意訳)`と言われますが無視します

pathの疎通のためにログインをし直して、dockerコマンド達が通るかどうか確認しておきます
```bash
$ docker -v
Docker version 24.0.6, build ed223bc
$ docker-compose -v
Docker Compose version v2.20.2
```
通ったのでヨシ！

### SSH鍵の設定
githubに登録しているsshファイルを、元の環境からコピーしても良いし新規に登録しても良いし
良い感じに設定、配置したら疎通確認をしておきます

```bash
$ ssh -T git@github.com
Hi htanaka0828! You've successfully authenticated, but GitHub does not provide shell access
```

これで今回やりたかった作業は完了です！

# 扱いの諸注意
調べたらすぐ出てくるけど念のため

- hostマシンの起動時には通常はWSL2は起動していません
    - スタートアップに入れておくか `Win + S` で `wsl` と入力してwslを起動してあげる必要がある
- hostマシンのエクスプローラーからは `\\wsl$` で接続出来ます
    - VSCodeから参照する時にはプラグインを入れても良いしディレクトリ参照でも良さそう
    - リモート扱いになるので許可を出す必要がある
- Vagrant環境との共存も可能だけどバージョン依存があるみたいなので、うまくいかない人はぐぐって欲しい
    - ちなみにうちのVirtualBoxのバージョンは7.0でした
- VagrantとWSL2でどっちが軽いかって言われたら体感はそんなに変わらない
    - 気持ちはWSLの方が気楽
        - 何より起動が速い
    - 検証環境がメモリモリモリマシンで、元々Vagrantマシンへの割り当ても潤沢だったせいだと思う
        - 割り当てメモリをどれぐらいにするか問題は仮想環境の難しいところ
    - 比較検証をしている人が世の中にいるのでぜひぐぐってみてください


# お疲れさまでした
様々な文献で助けてくださった先人に感謝！
これからも頑張って開発します！