WSL2 setup - eiichiromomma/CVMLAB GitHub Wiki

(WSL2)のインストール (DockerとXの導入まで)

WSL2でのUbuntu実機との相違点

  • GPU周りはWindows用のCUDA Driverが入っていれば良い(SDKが必要な場合にのみCUDA Toolkitを入れれば良い)
  • DockerはDocker Desktop for Windowsを入れる。nvidia docker toolkitのインストールは不要でそのまま--gpus allオプションでGPUが使える

インストール作業

1. WSLのダウンロードと起動

Microsoftのサイトの説明だと古いバージョンのWSLが入るのでMicrosoft StoreのUbuntuを入れる(バージョン無しの方)。

起動すると勝手にインストールが始まり

Ubuntu は既にインストールされています。
Ubuntu を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:

のようにWSL2上でのユーザー名を聞いてくるのでスペース無しの半角英字でユーザー名を入れる(下記はmommaの例)。 その後パスワードも聞かれるので2回パスワードを入れる(何も応答が無いがパスワード[Enter]パスワード[Enter] と入れる)。あとでしょっちゅう使うので忘れないように。

Enter new UNIX username: momma
New password:
Retype new password:
passwd: password updated successfully
この操作を正しく終了しました。
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage


This message is shown once a day. To disable it please create the
/home/momma/.hushlogin file.
momma@ASUS2022-0:~$

みたいな感じでUbuntuが使える状態になる。

次回以降はWindowsのメニューからUbuntuを選択すれば使える。

Ubuntuを起動しようとしたらError: 0xc004000d等エラーコードが出た場合

コントロールパネルの「プログラム」で「プログラムと機能」(またはWindowsメニューから)の中にWindowsの機能の有効化または無効化があるのでそれを選んでから「仮想マシンプラットフォーム」にチェックを入れる(要再起動)。その後WSL2を再度インストールする。

2. wslのアップデート

PowerShellを開いて

wsl --update

として更新し,Ubuntuを開きなおす。

3. WSL2上でX11アプリの確認

sudo apt update

でパスワードを聞かれるので入力する。sudoコマンドは一度パスワードを入れると以後の作業では暫く聞かれなくなる。

sudo apt install -y x11-apps mesa-utils
xeyes

でマウスカーソルを目玉が追うxeyesのウィンドウが開いたらGUIアプリケーションの実行は成功。右角の×を押して閉じる。

glxgears

で、ギアが回るアプリケーションが起動したらOpenGL関係のアプリケーションも使える。右角の×を押して閉じる。

WLS2上のファイルはWindowsのエクスプローラでLinuxというペンギンアイコンのネットワークドライブが見えるようになっているのでそこから\\wsl.localhost\Ubuntu\home\mommaのように辿るとそのまま開ける(mommaは各自のユーザー名に置き換える)。セットアップ直後は当然カラ。

Dockerの導入(Docker Desktop)

配布サイトからインストーラーを持ってきて起動する。

デフォルトでオンになっている筈だが

  • Use WSL 2 instead of Hyper-V (recommended)
  • Add shortcut to desktop

がオンになっていることを確認してからOKを押す。 インストールが完了したらcloseを押す。

デスクトップにあるクジラのアイコンからDocker Desktopを起動すと,ライセンスの承諾画面が出るのでAcceptを押す(学術利用はフリー)。

起動するとSign up, Sign inを求められるが,とりあえず Continue without signing inを選ぶ。アンケート画面になるが下のSkip surveyを選ぶ。

右上の歯車アイコンを選び,Generalを選ぶ。 Start Docker Desktop when you sign in to your computerの欄については,研究でしょっちゅう使う場合にはチェックを入れ,そうでない場合はチェックを外しておく。

Ubuntuを開いて

docker

と打ってみて

docker

The command 'docker' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.

For details about using Docker Desktop with WSL 2, visit:

https://docs.docker.com/go/wsl2/

と出た場合はUbuntuを一旦閉じて開くなり、Windowsを再起動するなりして、またDocker Desktopを起動してから試す。

上手くいっている場合は

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

みたいな表示のあとに起動オプションの説明がズラズラ続く。

Dockerの Hello world

Docker版Hello worldを試す。

管理者権限無しにDockerを使うにはUbuntuのdockerグループに自分のidを入れておく必要があるので

sudo gpasswd -a $(whoami) docker
sudo chgrp docker /var/run/docker.sock

の後でPowerShellから

wsl --shutdown

としたあとでUbuntuを開き直す。

docker run hello-world

を実行して

Hello from Docker!
This message shows that your installation appears to be working correctly.

みたいにメッセージが出たら成功。

NVIDIA GPU搭載マシンの人向け

docker run --rm --gpus all ubuntu nvidia-smi

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.40.06              Driver Version: 551.23         CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3050 ...    On  |   00000000:01:00.0 Off |                  N/A |
| N/A   53C    P8              3W /   35W |     184MiB /   4096MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

みたいな表が出てきたら成功。

WSL2のDockerでGUIアプリケーションを使う

後々使うのでxhostを含むx11-xserver-utilsを入れておく

sudo apt install -y x11-xserver-utils

WSL2上でGUIアプリケーションをそのまま実行するだけならWSLgがいい感じにWindowsで表示できるよう扱ってくれているが、Dockerコンテナ上のGUIアプリケーションを起動するには、Dockerのホスト(WSL2)に別ホスト(ここではコンテナ)のアプリケーションを表示させる細工が必要で、具体的には設定ファイルと環境変数の共有が必要となる。具体的なやりかたはあちこちで紹介されているがDockerやWSLのアップデートによって変わることが多々あるので、極力新しい情報を参考にする。(英語だが公式サイトを見るのが正解)

一旦Ubuntuを閉じて再度開いてから

docker run -it --rm \
    --mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix \
    --mount type=bind,source=/mnt/wslg,target=/mnt/wslg \
    --env DISPLAY=${DISPLAY} --env WAYLAND_DISPLAY=${WAYLAND_DISPLAY} \
    --env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} \
    ubuntu:22.04

とすると

Status: Downloaded newer image for ubuntu:22.04
root@f4e906a0f041:/#

のような感じでコンテナが起動する。--itでインタラクティブな状態(コマンドを実行する場合)、--rmで使い終えたコンテナを削除することを意味するので、残したければ--rmは外して実行する。

デフォルトだとユーザーはrootで動くのでsudoコマンドの付与は不要だが、ホストのアプリケーションのインストールは無関係な素の状態なのでアプリケーションは入れ直すか、諸々インストール済みのディスクイメージを探して使うか、環境構築のためのDockerFilesを書くかになる。

apt update
apt install -y mesa-utils
glxgears

で歯車が動いたら成功。×を押して閉じる。

exit

で終了。

⚠️ **GitHub.com Fallback** ⚠️