WSLについての覚書

Linuxや仮想サーバ(Hyper-VVMware)は使ったことがあるが、WSLは初めて」というケースを想定した、Microsoft Learn および塩田紳二氏の各所の記事をまとめ直した程度のメモ。個人的には氏にWSLの解説本を期待したい。なお、数少ない日本語書籍「WSL 構築と利用」は絶版である。

有効にする方法

「コンパネ→プログラム→Windows の機能の有効化または無効化」から、以下を有効にする。

あるいは、管理者権限で起動したPowerShell上でwsl --installでインストールする。 PowerShellでインストールした場合、以下のアクションが実行される。

参考

インストール可能なディストリビューション

  • wsl -l -o でリストアップされるもの(2023-08-05時点)
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.5 openSUSE Leap 15.5
SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
openSUSE-Tumbleweed openSUSE Tumbleweed
  • Microsoft Store から利用可能なもの
NAME FRIENDLY NAME
AlmaLinux-8 AlmaLinux 8 WSL
AlmaLinux9 AlmaLinux 9

他にも Fedora, Alpine 等があるが、ここには CentOSはない。

参考

初回起動

スタートメニューにディストリビューション名が追加されており、アクセスすると、ユーザー名とパスワード設定が要求される。

  • このユーザー名およびパスワードは、インストールする Linux ディストリビューションごとに固有であり、Windows ユーザー名とは関係ない。
  • ユーザー名およびパスワードを作成すると、そのアカウントがディストリビューションの既定のユーザーとなり、起動時に自動的にサインインされる。
  • このアカウントは、Linux 管理者と見なされ、sudo (Super User Do) 管理コマンドを実行できる。

そのまま使えないこともないが、 Microsoft Storeより、複数タブで便利な「Windows Terminal」をインストールすることをお勧めする。

参考

設定ファイル

普通に使う分には、systemd の有効化以外で編集することはないと思う。

参考

仮想ディスクイメージの配置先

  • %LOCALAPPDATA%\Packages\(PackageFamilyName)\LocalState\(disk).vhdx (例えば、C:\Users\Alice\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx) に格納される。
  • PackageFamilyName は Get-AppxPackage -Name *ubuntu* で「PackageFullName」として取得できる。
  • ディストリビューションのエクスポート手順は以下のとおり。
    1. wsl --shutdown でWSLを停止する。
    2. wsl --export <Distribution Name> <FileName> でエクスポートできる。ファイル名は拡張子を「tar」とするのが分かりよいか。

エクスポートはスナップショットの代替手段として用いることができる。

参考

ネットワークの構成

  • WSLが起動していると、WindowsLinuxの間にクラスBの範囲のプライベートアドレスを用いた仮想ネットワークが構築される。
  • Windows側からはこのネットワークアダプタとして「vEthernet (WSL)」が見えるようになる。
  • WindowsからLinuxに「localhost」でアクセスできる。よって、WindowsLinuxで同時に同じポートを使うサービスは起動できない。
  • WinNAT により、Linuxから外部(物理ネットワーク)にアクセスできる(2023-08-27時点では、Windows11のWSLでは、Linuxから外部にアクセスできませんでしたが…)。
  • Linuxから外部にアクセスできない場合、resolv.conf の固定化を検討する(参考サイト参照)

WSLの仮想ネットワーク

参考

ファイルアクセス

WindowsLinux:9protocol

9P(Plan 9 File Protocol)1により、エクスプローラから「\\WSL$」でアクセスできる。エクスプローラの左ペインの一番下にペンギンが追加される。Linuxファイルシステムに対する権限は、初回起動時に作成したユーザー権限となる。

参考

LinuxWindows:DrvFS

DrvFSにより、CドライブがLinux内で「/mnt/c」としてマウントされている。

参考


  1. Linuxが広がり始めた2000年頃、なぜLinuxはこんなに成功したのか、という議論とその決定打として、エリック・レイモンドの「伽藍とバザール(日本語訳)」論文があり、同時にLinuxの次は何かという議論で、ベル研究所Unixの次のOSとして分散システムとして設計されている Plan 9 が来るぞ、という話が熱をもって迎えられていたと記憶しています(参考記事)。それ以来20年くらい話を聞かなかった気がしますが、ここでお目にかかれようとは。