🛠

Windows 11 上に自分好みの開発環境を作る

2023/02/23に公開

目的

色々な記事を参考にしつつ、Windows 11 (特に 22H2) 上に開発環境のようなものをセットアップしたので (結構大変だった) 一応まとめておきたい。環境としてはノート PC を想定しており、CPU/GPU に多少の制限をかけ、内部温度が高くなりすぎないようにする措置を含めている。

基本的なセットアップ

コントロールパネル

[設定] アプリの [個人用設定]-[テーマ] 画面にある「関連設定」の [デスクトップアイコンの設定] をクリックし、表示された [デスクトップアイコンの設定] ダイアログで「コントロールパネル」にチェックを入れればよい。

参考: Windows 11では「コントロールパネル」がなくなったの? いいえ、あります

CPU の制限: プロセッサ パフォーマンスの向上モード (Processor Performance Boost Mode)

Turbo Boost の有効/無効に関する設定項目。「アグレッシブ」と「無効」で切り替えたら良い。やらなくても良いと思うが、ファンがうるさかったので。「無効」にしたら基本的には E コアで動作しているような振る舞いに見える。ChatGPT によるとこの状態でも必要に応じて P コアが使われるそうだが、本当のところはよく分からない。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\be337238-0d82-4146-a960-4f3749d470c7 において Attributes (REG_DWORD) を 12

参考: Quickly turn turbo boost on or off in Windows

電源プランの複製

powercfg /list で現在の電源プランを取得して、powercfg /duplicatescheme scheme_GUID で複製できる。複製後のプランで「プロセッサ パフォーマンスの向上モード」を「無効」にすれば、簡単に Turbo Boost の有効/無効が切り替えられるようになるはず。

参考: Powercfg のコマンドライン オプション

GPU の制限

MSI Afterburner を使えば GPU にも制限をかけられるらしい。

参考: 夏のゲーミングPCは熱すぎる!「MSI Afterburner」でビデオカードを省電力・低発熱に

WSL2 のセットアップ

有効化

コントロールパネル - プログラムと機能 - Windows の機能の有効化または無効化 から「Linux 用 Windows サブシステム」と「仮想マシンプラットフォーム」をチェック。

Hyper-V を使うだけなら Windows 11 Home で問題ない。c.f. WSL2とHyper-Vの関係

参考:

WSL を使用して Windows に Linux をインストールする

Ubuntu をインストール

wsl --install -d Ubuntu-20.04

Ubuntu と Ubunt-20.04 の違いは “latest” かどうかの違いらしい。c.f. ストアにある3つの「Ubuntu」の違いは? ~WLSの「Ubuntu」をアップグレードする方法

新しい kernel component のインストール

以下のようなメッセージが出ることがある:

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ???????????? ??????????????????????? https://aka.ms/wsl2kernel ?????????

メッセージにあるように https://aka.ms/wsl2kernel 或は 手順 4 - Linux カーネル更新プログラム パッケージをダウンロードする から「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」をダウンロードしてインストール。これをインストールしてスタートメニューから「Ubuntu 20.04 on Windows」を起動したら先へ進めた。

参考: WslRegisterDistribution failed with error: 0x800701bc

WSL コンソールにおけるコピペ可能化

ちゃんと確認していないが、必要ならこの対応をすると楽かもしれない。

参考: Linux/WSLコンソールがショートカットキーによるコピペに対応 ~Windows 10 RS5

DNS の設定

/etc/wsl.conf/etc/resolv.conf をいじる。

[/etc/wsl.conf]

[network]
generateResolvConf = false

[/etc/resolv.conf]

nameserver 8.8.8.8

Windows を再起動すると /etc/resolv.conf が削除されるので以下の対応も行う:

sudo chattr +i /etc/resolv.conf

参考:

ssh-agent の設定

~/.bashrc に以下を追加:

[~/.bashrc]

eval `ssh-agent` > /dev/null
ssh-add  /home/xxx/.ssh/id_rsa >& /dev/null

.ssh を Windows と共有

まず、/etc/wsl.conf に以下を追加:

[automount]
options = "metadata,umask=077,fmask=11"

その上で以下で、.ssh を共有:

ln -s /mnt/c/Users/xxx/.ssh ~/.ssh

上記の /etc/wsl.conf の設定によって、NTFS 下にある DrvFS のディレクトリ .ssh 下においても、chmod 600 id_rsa のような permission の設定が、WSL メタデータに書き込まれるようになる。

参考:

ディスクサイズ

色々作業をした結果、WSL2 のイメージが入った VHD が肥大化しているかもしれないので、optimize-vhd コマンドで最適化したほうが良いかもしれない。

参考: WSL2 のディスクサイズを削減する

大量のメモリ消費への対応

現在は一定の制限がかかるようになっているようだが、必要なら以下のような対応を行う。

[%USERPROFILE%.wslconfig]

[wsl2]
memory=6GB
swap=0

「PC搭載メモリの50%または8GBのうち、少ない方の値」ということになっているらしいが、実際にはなっていないらしく、.wslconfig で制限を設定しない場合には「PC搭載メモリの50%」が上限のようである。つまり、32GB のメモリを搭載している場合には、16GB まで消費される可能性がある。c.f. WSL2 using more than "50% of total memory on Windows or 8GB, whichever is less" (my machine has 24GB)

参考: WSL2によるホストのメモリ枯渇を防ぐための暫定対処

Docker のセットアップ

基本的には普通に公式の手順に従って Install using the repository を実行。

以下はセキュリティ意識と好みで:

sudo groupadd docker
sudo usermod -aG docker $USER

[/etc/sudoers]

xxx ALL=NOPASSWD: /usr/sbin/service docker start, /usr/sbin/service docker stop, /usr/sbin/service docker restart

c.f. sudo のパスワードを聞かれないようにする

sudo でパスワードを訊かれないようにすることで、docker の daemon の起動が楽になる (WSL2 では systemd 周りが難しいためこの方法のほうが安定しているらしい):

[~/.bashrc]

if service docker status 2>&1 | grep -q "is not running"; then
  sudo service docker start
fi

参考:

CUDA のセットアップ

WSL2 に CUDA 11.8 を導入する場合、以下のようにすれば良いはず:

CUDA Toolkit 11.8 Downloads からダウンロードする時に、Linux - x86_64 - WSL-Ubuntu を選んだ場合の URL を使っている。

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda

この後、PowserShell を管理者権限で起動して以下を実行すると WSLg も有効になる。c.f. Linux 用 Windows サブシステムで Linux GUI アプリを実行する

wsl --update
wsl --shutdown

CUDA 対応アプリをビルドする時には以下のようにして使うことになる:

export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"

参考:

まとめ

いきなり Windows マシンが壊れてまたもや再セットアップということにはならないと思うが、自動化しにくい部分ではあるのでまとめてみた。このような情報は賞味期限も短いだろうから、恐らく大して役には立たないが。

GitHubで編集を提案

Discussion