自分用のWindowsでの開発環境構築メモ。
Windows 10 Home対応。
何かの言語用の構築をするわけではないが、WSL2とDockerを準備するので、LinuxとWindowsのいいとこどりで大抵の開発環境構築の土台としては困らない。
他のマシンで元々使用しているWSL環境があればエクスポートしておく
wsl --export Ubuntu ./Ubuntu.tar
Ubuntuの部分はDistro名なので環境によって異なる。
Distro名はWSL環境の一覧で確認できる。
wsl -l -v --all
Windows 10 2004 May 2020 Update以上にあげる
2020年5月末にアップデートのきたWindows 10でWSL2が正式版になったのでそれ以上にアップデートする。
普通にWindows Updateを定期的にかけていれば問題ないはず。
基本Windowsアップデートをかければいいが、ローリングアップデートなので、まだ来ていなければこちらにアクセスしてアップデートツールを使う。
WSL2 を有効にする
Windows Subsystem for Linux のインストール ガイドを元にインストールを進める。
以下のコマンドでWindowsのシステム設定、Linux Kernel等を含めて一気にインストールできる。
上記のインストールガイドにも書かれている。
wsl --install
wslのバージョンを上げる前にLinux kernelをインストールする必要があるので、
こちらの手順からダウンロードしてインストールしておく。
Ubuntu をインストール
Microsoft Storeからインストール。Distroは特に何か要件がなければUbuntuを選択。
2020/06時点ではUbuntu20.04が入る。
引き継ぐ環境がある場合は、エクスポートしておいたtarファイルを ~/AppData/Local/Ubuntu
に展開してインポートする。
mkdir ~/AppData/Local/Ubuntu
wsl --import Ubuntu ~/AppData/Local/Ubuntu ./Ubuntu.tar --version 2
~
はそのままでは認識しないのでTABキーでフルパスに変換する。
Windows Terminal をインストール
Microsoft Storeからインストール。
設定ファイルのJSONを開いて、defaultProfile
をUbuntuのGUIDで書き換える。
"defaultProfile": "{<UbuntuのGUID>}"
ssh agentのセットアップ
【2023/02/15追記】
より良いツールwsl2-ssh-agentが現れたので、そちらを使うのが良さそう。
https://zenn.dev/mametter/articles/49a2b505ec0275
Windows側にファイルを配置したり等の作業が不要になる。
Windows側のssh-agentは動作している必要があるため、WindowsのOpenSSH Client Serviceを起動。
Start-Service ssh-agent
Set-Service -StartupType Automatic ssh-agent
あとはWSL側でwsl2-ssh-agentを導入する。
https://github.com/mame/wsl2-ssh-agent#1-install-wsl2-ssh-agent の手順に従ってwsl側にバイナリを配置し、~/.bashrc
などに以下を追記する。
eval $(/path/to/wsl2-ssh-agent)
WSL側でkeyfileを生成してssh-agentに追加しておく。
ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519
chmod 400 ~/.ssh/id_ed25519
ssh-add ~/.ssh/id_ed25519
Docker Desktop for Windowsのインストール
https://www.docker.com/products/docker-desktop からダウンロードしてインストール。
Stableチャンネルで問題ない。
VSCodeのインストール
https://code.visualstudio.com/からインストール。
WSL環境との連携のために Remote - WSLを導入。
導入しておけば、WSL側からcode
コマンドで立ち上げたときに必要なものを自動でインストールしてくれる。
メモリ枯渇問題への対処
2020/06時点ではWSLが確保したメモリが解放されずにWindows側のメモリが枯渇してしまう問題があるようなので、WSLでの利用メモリの上限を設定しておく。
対処方法も上記のリンクに記載があるので対処しておく。
WSL側にWindows側からlocalhostでアクセス出来るようにする
%USERPROFILE%\.wslconfig
の設定ファイルに次の1行を追記する。
localhostForwarding=True
systemd を有効にする
Windows 11のWSL2でUbuntu 22.04 LTSまでアップデートすると、ようやくWSLユーザー待望のsystemdを起動することができる。
Windows 11 かつ WSL2の環境は既に整っている前提で始める。
WSLのバックアップ(exportをしておく)
exportコマンドでWSL全体をバックアップしておき、まずいことがあれば何時でも戻せるようにしておく。
Ubuntu 22.04にアップグレードする
ここからは、20.04 LTSから 22.04 LTSにアップグレードする手順を記載しているが、Microsoft StoreにはUbuntu 22.04 LTS が公開されているので、基本的にはそちらを新規インストールするほうがおすすめ。
Ubuntu 22.04 にアップグレードする要件は、64-bit Ubuntu 20.04 LTS/Ubuntu 21.10 であることなので、そこまでアップグレードが完了しているか確認する。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
packageがすべて最新になっていることも必要なので、アップデートしておく。
$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt dist-upgrade -y
アップデートした場合はrebootが必要なので、Powershellからwsl -t <Distro>
wsl -d <Distro>
で再起動しておく。
$ sudo do-release-upgrade -c -d
Checking for a new Ubuntu release
New release '22.04' available.
Run 'do-release-upgrade' to upgrade to it.
New release '22.04' available.
を確認して次を実行する。(正式リリース前にアップグレードする場合は -d
オプションが必要)
$ sudo do-release-upgrade
すべてインストールが完了したら、再起動する。
/etc/wsl.conf にsystemd起動コマンドを追記
/etc/wsl.conf
はDistro毎の設定を記述するもので、初期では存在していないのでなければファイルを作成する。
ファイルの仕様はこちらを参照。
[boot]
command = /usr/libexec/wsl-systemd
設定を追記したら再起動する。
確認
serviceのstatusを確認してみて、cronなどがrunninngであれば成功。
systemctl list-units --type=service
謝辞
systemdが使える件についてはこちらのTweetで教えてもらいました。感謝🙌
Windows11のWSL2だとUbuntu22.04で /etc/wsl.conf に
— 情報弱者であると同時に、情感弱者 (@joukan_jakusha) April 23, 2022
[boot]
command = /usr/libexec/wsl-systemd
と書くとsystemd使えるらしい。なおワイWindows11環境がないので確認できず。 #wsl2 #ubuntu #jammy #windows11