Slide 1

Slide 1 text

今日からはじめる WSL実践入門 日本仮想化技術株式会社 水野 源 [email protected] 2025/01/29 1

Slide 2

Slide 2 text

本日のアジェンダ • WSLとは • WSLのインストールと使い方 • WSLの特徴 • WSL2のネットワーク • まとめ 2

Slide 3

Slide 3 text

WSLとは 3

Slide 4

Slide 4 text

WSLとは • Windows Subsystem for Linux • 一言で言えば、Windows上でLinuxを動作させる機能 • Linuxコマンドやアプリを、Windows上でシームレスに利用できる 4

Slide 5

Slide 5 text

WSLの何が嬉しいの? • 現代的なWebシステムのターゲットはほとんどがLinux • そのためLinuxの開発環境が必須となる • でも一般的な会社のデスクトップはWindowsが支配的 • Windowsじゃ開発しづらい • でも会社的にLinuxデスクトップは使わせてもらえない • 開発サーバーを用意して、SSHでリモート作業するのが定番だった • でも手元に開発環境がないと効率が悪い…… • そこで、Web開発ならMacみたいな時代があった • 2000年代後半〜、スタバでMBAがナウい時代 5

Slide 6

Slide 6 text

とはいえMacはMacでつらみ • macOSはUNIXだけどLinuxではない • Unixライクなツールは動作するけど、Linuxとのギャップがある • 当時のWindows 7あたりと比較すれば、たしかに開発環境を立ち上げやす かったのは事実ではある • Hogehogeを動かすには、Macならxxしてxxすれば簡単にセットアップが〜み たいなブログ記事とかよく見かけるけど、それ本当に簡単ですか的な • カウンターとしてDELLのProject Sputnikとかあった(今でもある) 6

Slide 7

Slide 7 text

そこでWSL • 普段使っているWindows上で、本物のLinux環境を動かそう • 似たようなツールは以前から色々あったけれど、WSLはMicrosoft公 式プロダクトであるところがポイント • ハロウィン文書の頃からすると、思えば遠くへ来たもんだ • 最近のWSLはsystemdも標準で動いていて、大抵のものはそのまま 動くようになっている • 後述する通り、リモートのVMなのに、ローカルのように扱える所もポ イント 7

Slide 8

Slide 8 text

WSLのインストールと使い方 8

Slide 9

Slide 9 text

Windows 11ならコマンド一発でOK 9

Slide 10

Slide 10 text

インストールできるディストリの一覧 10

Slide 11

Slide 11 text

ディストリを指定してインストール 11

Slide 12

Slide 12 text

ディストリの初期設定 12

Slide 13

Slide 13 text

Enjoy! 13

Slide 14

Slide 14 text

あとはふつうにLinuxコマンドを実行したり 14

Slide 15

Slide 15 text

Windows上でシームレスにGUIも動かせる 15

Slide 16

Slide 16 text

WSLの特徴 16

Slide 17

Slide 17 text

WSL1とWSL2 • WSLには2016年にリリースされた最初のWSL(WSL1)と、2020年にリ リースされた現行のWSL2が存在する • WSL1/WSL2は根本的にアーキテクチャが異なり、性能も違う • 現在でもWSL1は利用可能で、明示的にバージョンを指定して共存さ せることもできる 17

Slide 18

Slide 18 text

WSL1とWSL2の違い 18 Windowsカーネル Windowsアプリ LXCore/LXSS Linuxアプリ Hyper-V Linuxカーネル Linuxアプリ WSL1 WSL2

Slide 19

Slide 19 text

WSL2についてもう少し詳しく 19 Hyper-V WSL用Linuxカーネル ※1 軽量仮想マシン Windowsカーネル コンテナ ※1 https://github.com/microsoft/WSL2-Linux-Kernel

Slide 20

Slide 20 text

WSL1とWSL2の違い • WSL1はWindows上でPico Processとして起動している • Linuxカーネルは動作していない • LXCore/LXSSという変換レイヤーを使ってシステムコールを変換している • そのためシステムコールに完全な互換性がない • まあCygwinと似たようなもんよ • これらはNTカーネルモードドライバーとして実装されている • WSL2はHyper-Vを使い、VM上で本物のLinuxカーネルを動かしている • そのためWSL2はシステムコールに完全な互換性がある • ただしWSL2が1の完全な上位互換というわけではない • プロセスの動作はWSL2の方が高速だが、Windowsファイルシステムへのアクセス はWSL1の方が高速 • Windowsのファイル操作にLinuxを使いたいような場合は、WSL1を使った方がいい ケースもある 20

Slide 21

Slide 21 text

WSLのinit • WSLでPID1として起動しているinitは「/init」 • 「/sbin/init」ではない • systemdではない • これはMicrosoft製の特別なinit • systemdを別途有効にすることもできる • /etc/wsl.confに以下を追記 • 最近のUbuntuやDebianではこれがデフォルト 21 [boot] systemd=true

Slide 22

Slide 22 text

WSLのinit • 「/init」だけが起動しているようす 22

Slide 23

Slide 23 text

WSLのinit • systemdを有効化した状態 • /initと/sbin/initが両方いる…… 23

Slide 24

Slide 24 text

Plan9って誰やねん 24 こいつ

Slide 25

Slide 25 text

Plan9と9P • 9PはPlan9というOS向けのプロトコル • WSLの/initには9Pサーバーが搭載されている • WSLでは9Pを、WindowsとWSL間でのファイルのやりとりに利用 • WSLからはWindowsのドライブが「/mnt/ドライブレター」として見えるけど、マ ウントオプションを見るとtypeが「9p」となっている 25

Slide 26

Slide 26 text

Windows側からは • PowerShellで「\\wsl$\ディストリ名\パス」とすると、WSL内のファイ ルシステムへアクセス可能 • これも9Pによるネットワーク共有 26

Slide 27

Slide 27 text

WSL2のネットワーク 27

Slide 28

Slide 28 text

複数のディストリを同時に起動してみよう 28 Ubuntu Debian

Slide 29

Slide 29 text

IPアドレス被ってない!? 29

Slide 30

Slide 30 text

WSL2のネットワーク • WSL2を起動すると、Hyper-Vの内部ネットワークが作成される • これを仮想スイッチと呼ぶ 30

Slide 31

Slide 31 text

• Windows側に仮想NICが作成され、内部ネットワークに参加する 内部ネットワークに参加する仮想NIC 31

Slide 32

Slide 32 text

Windows側の仮想NICのIPアドレス 32

Slide 33

Slide 33 text

Windowsのルートテーブル 33

Slide 34

Slide 34 text

WSL側のルートテーブル 34

Slide 35

Slide 35 text

Windows つまりこんな感じ • ホスト上の仮想NICがWSLのデフォルトゲートウェイになる • WindowsからWSL内へアクセスする際にもここを通る • 物理NICからNATして外へ 35 Hyper-V 仮想スイッチ WSL 仮想NIC (eth0) Ubuntu Debian Hyper-V 仮想NIC 物理NIC 内部ネットワーク 172.31.32.0/20 WSLから見た デフォルトゲートウェイ 172.31.32.1/20 Windows NAT コンテナ間で共有 172.31.37.42/20

Slide 36

Slide 36 text

コンテナがIPアドレスを共有してるので…… • Ubuntu側でApache Webサーバーをインストール 36

Slide 37

Slide 37 text

使用ポートをチェック • Debian側で使用ポートをチェック 37 なんかいる!?

Slide 38

Slide 38 text

Debianからlocalhostにアクセスしてみる • Debian側でlocalhost:80にアクセス 38

Slide 39

Slide 39 text

キモい • Oh… 39 Ubuntuのデフォルトページが!

Slide 40

Slide 40 text

Windowsからもアクセス可能 • なんとlocalhostでWSL内にアクセスできる 40

Slide 41

Slide 41 text

WSL2のネットワークは • コンテナ間でネットワークを共有している • ポートは早いもの勝ちで奪い合い • つまり複数のWebサーバーを同時に立てるようなことはできない 41

Slide 42

Slide 42 text

ポートは早いもの勝ち • WSL2を一度シャットダウンしてから、Debianのみを立ち上げる • そしてDebianにもApacheを入れればこの通り 42

Slide 43

Slide 43 text

localhost指定は経路が変わるので便利 • Windowsからも、IPアドレスとlocalhostでアクセスできる • WSL内で開発サーバーを立てて、VSCodeやブラウザからアクセスが簡単 • localhostからのみアクセスできる管理画面も、設定を変えずにOK • localhostアクセスと、IPアドレスを指定したアクセスは経路が違う • localhostでのアクセスはwslhost.exeが担っている 43 IPアドレスを指定してWSL内にアクセスすると、デフォルトゲートウェイ であるWindows側の仮想NICを経由しているのがわかる

Slide 44

Slide 44 text

まとめ 44

Slide 45

Slide 45 text

まとめ • WSLを使えばWindows上でフル機能のLinuxを使うことができる • 中身はVM+コンテナだけど、VirtualBoxなどとは異なり、localhostで 直接アクセスできるなど、Windowsとシームレスに結合されている便 利さがある • systemdもサポートしているため、大抵の機能は通常のLinuxと同じ ように使える • とはいえ完全に同じではなく、いくつかクセがあるため注意 • WindowsユーザーのLinux入門やLinuxターゲットの開発環境に最適 45

Slide 46

Slide 46 text

Think ITにてWSLとLinuxについて連載中 • Windowsユーザーのための WSL2で始めるLinux環境構築術 • https://thinkit.co.jp/series/11545 46