同じバージョンのWSLを複数構築

WSL(Windows Subsystem for Linux)は通常、Microsoft StoreからLinuxディストリビューションをインストールしますが、自分のイメージを使用して構築することもできます。また、WSL (Windows Subsystem for Linux) と Docker Desktop を同じ Windows PC にインストールした際に、WSL のディストリビューションが勝手に移動することがありました。通常、Docker Desktop がインストールされると、Docker が使用する WSL 2 のディストリビューションがデフォルトで設定され、その際に WSL のディストリビューションの設定が変更されることがあるようです。さらに、Microsoft Storeが関連したWSL(Windows Subsystem for Linux)では、同じディストリビューションの同じバージョンを2つインストールすることはできません(エクスポートしてインポートすれば可能、結局複製ということになる)。以下に、WSL 2でカスタムLinuxイメージを使用してディストリビューションをインストールする手順を示します。

手順

  1. WSL 2を有効にする(もしまだ有効にしていない場合)
    wsl --install
    または、手動で有効にする場合:
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  2. カスタムLinuxイメージを取得する
    • 例えば、Ubuntuの公式サイトや他のソースから適切なルートファイルシステム(rootfs)イメージをダウンロードします。
      https://cloud-images.ubuntu.com/
  3. カスタムイメージをインポートする
    • ダウンロードしたtarball(例: rootfs.tar.gz)を使って、WSL 2にカスタムディストリビューションをインポートします。
    wsl --import <DistroName> <InstallLocation> <TarballPath> --version 2

    例:
    wsl --import MyCustomDistro C:\WSL\MyCustomDistro C:\path\to\rootfs.tar.gz --version 2
  4. インポートされたディストリビューションを確認する
    wsl -l -v
    上記のコマンドで、新しいディストリビューションがインストールされていることを確認できます。
  5. カスタムディストリビューションを起動する
    wsl -d <DistroName>

補足

  • ルートファイルシステムの作成方法: 自分でルートファイルシステムを作成するには、例えばDockerを使ってベースとなるLinuxイメージをコンテナとして起動し、その中身をtarballにして保存する方法があります。
    docker run --name mydistro ubuntu
    docker export mydistro > mydistro.tar

これで、WSL上でカスタムLinuxディストリビューションを使って作業を始めることができます。インポート後にエクスプローラで確認するとLinuxのアイコンの中に追加されているはずです。

また、圧縮ファイル(rootfs.tar.gz)がある場所にフォルダが作成されており、その中にext4.vhdxがあるはずです。カスタムルートファイルシステムイメージの作成方法には以下のようなものも考えられます。

方法1: 既存のLinux環境を使用してカスタムイメージを作成
方法2: Debootstrapを使用してカスタムイメージを作成
方法3: BusyBoxを使用して最小限のカスタムイメージを作成
方法4: 既存のUbuntu環境をWSLに移行
方法5: VirtualBoxやVMwareの環境をWSLに移行

カスタムイメージをインポートした場合、デフォルトではrootユーザーでログインすることになります。ストアからインストールしたディストリビューションは初期設定ウィザードがあり、ユーザーを作成してくれますが、カスタムイメージではそのような手順がありません。

カスタムで作成したWSL環境でも、通常のユーザーを作成することを強くお勧めします。以下に、ユーザーを作成する重要性と、その理由について説明します。

ユーザーを作成する重要性

1. セキュリティの向上

  • ルート権限の制限:
    • デフォルトでルートユーザーとしてログインしていると、誤ってシステム全体に影響を与えるコマンドを実行してしまうリスクがあります。例えば、重要なシステムファイルを削除したり、システム設定を変更したりすることができます。
    • 通常のユーザーを作成し、日常的な作業をそのユーザーで行うことで、ルート権限を持つ操作が制限され、システム全体のセキュリティが向上します。

2. システムの安定性

  • 安全な操作:
    • ルートユーザーはシステムの全てのファイルや設定にアクセスできるため、誤操作によるシステムの破損リスクが高まります。通常のユーザーを使用することで、このリスクを最小限に抑えることができます。

3. セキュリティベストプラクティス

  • 標準的な運用:
    • 多くのセキュリティベストプラクティスでは、日常的な操作をルート権限で行わないことを推奨しています。システムの攻撃対象面を減らすことができます。
    • 必要に応じて sudo コマンドを使用して、特定の操作のみルート権限で実行することができます。

これらを解決するために、新しいユーザーを作成し、そのユーザーをデフォルトユーザーとして設定することができます。以下の手順で設定を行います。

WSLディストリビューションのデフォルトユーザーを変更するには、以下のコマンドを使用する方法もあります。特に、ストアからインストールしたUbuntuディストリビューションなどで有効です。

デフォルトユーザーの変更手順

この手順では、新しいユーザーを作成し、そのユーザーをデフォルトユーザーとして設定し、WSLを再起動する方法を示しています。

カスタムWSLディストリビューションにおけるデフォルトユーザーの設定手順

1. 新しいユーザーを作成する

まず、WSLで新しいユーザーを作成します。

adduser myusername

次に、新しいユーザーをsudoグループに追加して、管理者権限を付与します。

gpasswd -a myusername sudo

2. デフォルトユーザーを設定するための設定ファイルを編集する

WSLの設定ファイルを編集して、新しいユーザーをデフォルトユーザーとして設定します。

nano /etc/wsl.conf

ファイルが開いたら、以下の内容を追加します。

[user]
default=myusername

編集が完了したら、Ctrl + Xを押して、Yを押して変更を保存し、Enterを押してファイルを閉じます。

3. WSLを再起動する

設定を反映させるために、WSLを再起動します。WindowsのコマンドプロンプトまたはPowerShellを開き、次のコマンドを実行します。

wsl --shutdown

または、WSL内で次のコマンドを実行してシステムをシャットダウンすることもできます。

shutdown now

4. 設定が反映されたことを確認する

WSLを再度起動し、新しいユーザーでログインされることを確認します。次のコマンドを実行して、デフォルトユーザーとしてログインしていることを確認できます。

whoami

これで、新しいユーザーがデフォルトユーザーとして設定されました。WSLを起動するたびに、このユーザーでログインされるようになります。ちなにみ/etc/wsl.confには以下の記述があったのでその下に追加で記述しました。

[boot]
systemd=true

せっかくですのでDocker及びNVIDIA Container Toolkitをインストールします。以下のページにインストール方法は書いてあります。

Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multip...
Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit

sudoを付けずにDockerコマンドを使用する方法だけは記載しておきます。

非rootユーザーでDockerを使用する手順

1. Dockerグループを作成する

まず、dockerグループが存在しない場合は作成します。通常、Dockerをインストールすると自動的に作成されますが、念のため以下のコマンドを実行して確認します。

sudo groupadd docker

2. ユーザーをDockerグループに追加する

次に、Dockerを使用したいユーザーをdockerグループに追加します。

sudo usermod -aG docker myusername

3. 変更を反映させるためにログアウト・ログインする

ユーザーをグループに追加した後、変更を反映させるためにログアウトして再ログインします。WSLの場合は、WSLを再起動するだけで反映されます。

wsl --shutdown

4. 動作確認

ログインし直したら、Dockerコマンドを非rootユーザーで実行できることを確認します。

docker run hello-world

docker ps
など

NVIDIAコンテナツールキットが正しくインストールされているか確認するためには、以下の手順を実行できます。これには、ツールキットのバージョンを確認し、GPUの利用が可能かどうかをテストする方法が含まれます。

インストールの確認手順

1. NVIDIAコンテナツールキットのバージョン確認

まず、NVIDIAコンテナツールキットがインストールされているかどうかを確認するために、バージョンを確認します。

nvidia-container-cli --version

このコマンドが正しく動作し、バージョン情報を表示する場合、ツールキットはインストールされています。

タイトルとURLをコピーしました