1. はじめに
1.1. 動機
- 新しくPC(windows 11)を導入しました。
- これまでデュアルブートでWindowsとLinux(Ubuntu)を切り替えて使っていた運用していましたが、古いPCをLinux専用機にして、新しいPCはWindows主体でWSL2でLinuxで遊ぶ感じで使用しようと思います。
- 本記事ですが、多くの記事を引用します(各種知見を適用、組み合わせております)。参考資料著者の皆様、誠にありがとうございます。
1.2. 開発環境
- OS: Windows 11 Pro 21H2
- CPU: Core(TM) i7-12700
- RAM: 32GB
- 利用ツール
- PowerShell 5.1.22000.653
- windows termilal 1.13.11432.0
1.3. 参考資料
No. | URL | 説明 |
---|---|---|
[1] | WSL2の Ubuntu 20.04 を 22.04 へアップグレードしてみた | 2.2. Ubuntuを22.04にアップグレード で参照 |
[2] | 【WSL2】Ubuntu22.04にアップグレードしたあとにやったこと | 2.3. Ubuntu 22.04にアップグレードした後の設定 で参照 |
[3] | WSL2 (Ubuntu 20.04 LTS) と Docker をセットアップしたときにやったこと | 2.3. Ubuntu 22.04にアップグレードした後の設定 で参照 |
[4] | Install Docker Engine on Ubuntu | 2.4. Dockerインストール で参照 |
2. 構築
2.1. WSL2でUbuntu 20.04をインストール
- Powershell を管理者モードで開きます。
- wslコマンドを使ってインストールします。
-
wsl --list --online
にて、インストール可能なディストリビューション一覧が表示される。ここでは、Ubuntuを選択する。(2022年7月時点では、Ubuntu 20.04がインストールされます。) - MS StoreにもUbuntuアプリがあるが、そちらはpathの自動変換がないようなので使用しません。
-
- インストール中に、ユーザ名とパスワードの入力があるので、適当に済ませます。
PS > wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl --install -d <Distro>' を使用してインストールします。
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
PS > wsl --install -d Ubuntu
(インストールが始まる)
2.2. Ubuntuを22.04にアップグレード
- インストールは参考資料[1]の通りです。
- Ubuntu 22.04にアップデートする理由は、22.04から組み込まれるwsl-systemd(後述)を利用したいためです。
- WSL2では、公式ではsystemdを使用できません。サービス起動にはserviceコマンドを利用しています。
- でも、やはり馴染みのあるsystemdが使えると便利です。
2.3. Ubuntu 22.04にアップグレードした後の設定
- iptables-legacyの設定は参考資料[2]の通りです。
- wsl-systemdの設定は参考資料[2]の通りです。/etc/wsl.confの設定まで実施します。
- systemdの自動起動サービスについては、参考資料[3]をもとに、以下のサービスを停止します。
$ sudo systemctl disable multipathd
$ sudo systemctl disable sshd
$ sudo systemctl disable systemd-remount-fs.service
$ sudo systemctl disable getty@tty1
$ sudo systemctl mask systemd-remount-fs.service
$ sudo systemctl mask systemd-udevd.service
$ sudo systemctl mask snapd.service
$ sudo systemctl disable snap.lxd.activate.service
- windows termilalには、コマンドラインを
C:\windows\system32\wsl.exe ~ -d Ubuntu /usr/libexec/nslogin /bin/bash
に変更します。
2.4. Dockerインストール
- 参考資料[4]の通りにインストールします。
- dockerコマンドを通常ユーザで実行できるよう、
sudo gpasswd $USER docker
でdockerグループを追加します。
3. 起動確認
- 起動したときのプロセス稼働状態は以下の通りとなります。
- このとき、必ず
journalctl -xe
でジャーナルファイルを確認しましょう。予期せぬコアダンプをしている場合があります。 - windows terminalのコマンドラインを変更しているので、terminalにログインするとsystemdがPID=1で起動したように見えます。
- このとき、必ず
- sudo systemctl status サービスを実行すると、systemdでサービスをコントロールできます。ここでの例では、docker.serviceの状態を確認しました。
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 1 00:05 ? 00:00:00 /lib/systemd/systemd --unit=multi-user.target
root 42 1 0 00:05 ? 00:00:00 /lib/systemd/systemd-journald
root 82 1 0 00:05 ? 00:00:00 snapfuse /var/lib/snapd/snaps/core18_1705.snap /snap/core18/1705 -o
root 83 1 0 00:05 ? 00:00:00 snapfuse /var/lib/snapd/snaps/lxd_14804.snap /snap/lxd/14804 -o ro,n
root 84 1 0 00:05 ? 00:00:00 snapfuse /var/lib/snapd/snaps/snapd_7264.snap /snap/snapd/7264 -o ro
systemd+ 92 1 0 00:05 ? 00:00:00 /lib/systemd/systemd-networkd
message+ 95 1 0 00:05 ? 00:00:00 @dbus-daemon --system --address=systemd: --nofork --nopidfile --syst
root 97 1 0 00:05 ? 00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root 98 1 0 00:05 ? 00:00:00 /usr/libexec/polkitd --no-debug
syslog 99 1 0 00:05 ? 00:00:00 /usr/sbin/rsyslogd -n -iNONE
root 100 1 0 00:05 ? 00:00:00 /lib/systemd/systemd-logind
systemd+ 109 1 0 00:05 ? 00:00:00 /lib/systemd/systemd-resolved
root 110 1 0 00:05 ? 00:00:00 /usr/sbin/ModemManager
root 119 1 0 00:05 ? 00:00:00 /usr/sbin/cron -f -P
root 122 1 0 00:05 ? 00:00:00 /usr/bin/containerd
root 124 1 0 00:05 ? 00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-s
root 128 1 0 00:05 tty1 00:00:00 /sbin/agetty -o -p -- \u --noclear --keep-baud console 115200,38400,
root 149 1 1 00:05 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.so
tomoten 306 0 0 00:05 pts/0 00:00:00 /bin/bash
tomoten 312 306 0 00:05 pts/0 00:00:00 ps -ef
$ sudo systemctl status docker.service
[sudo] password for tomoten:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2022-07-14 00:05:33 JST; 5min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 149 (dockerd)
Tasks: 15
Memory: 114.5M
CGroup: /system.slice/docker.service
└─149 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
(以下略)
4. おわりに
- windows terminalからUbuntuを起動すると、体感2秒でUbuntuが使用できるようになるので、ちょっとした検証をしたいときに便利であるとわかりました。
- systemdの多くの自動起動プロセスをdisableにしているのも効果的なようです。
- Ubuntuが起動した状態でsystemdが使用可能な状態のため、仮想マシンに近い使用感で扱えるのが良いです。