Upgrade to Pro — share decks privately, control downloads, hide ads and more …

今日からはじめるWSL実践入門

 今日からはじめるWSL実践入門

Windows上で完全なLinux環境をシームレスに利用できるのが『Windows Subsystem for Linux (WSL)』です。この勉強会ではWSLとはなにか、その特徴的な構造から使い方までを簡単に解説します。

とことんDevOps

January 29, 2025
Tweet

More Decks by とことんDevOps

Other Decks in Technology

Transcript

  1. WSLの何が嬉しいの? • 現代的なWebシステムのターゲットはほとんどがLinux • そのためLinuxの開発環境が必須となる • でも一般的な会社のデスクトップはWindowsが支配的 • Windowsじゃ開発しづらい •

    でも会社的にLinuxデスクトップは使わせてもらえない • 開発サーバーを用意して、SSHでリモート作業するのが定番だった • でも手元に開発環境がないと効率が悪い…… • そこで、Web開発ならMacみたいな時代があった • 2000年代後半〜、スタバでMBAがナウい時代 5
  2. とはいえMacはMacでつらみ • macOSはUNIXだけどLinuxではない • Unixライクなツールは動作するけど、Linuxとのギャップがある • 当時のWindows 7あたりと比較すれば、たしかに開発環境を立ち上げやす かったのは事実ではある •

    Hogehogeを動かすには、Macならxxしてxxすれば簡単にセットアップが〜み たいなブログ記事とかよく見かけるけど、それ本当に簡単ですか的な • カウンターとしてDELLのProject Sputnikとかあった(今でもある) 6
  3. 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
  4. WSLのinit • WSLでPID1として起動しているinitは「/init」 • 「/sbin/init」ではない • systemdではない • これはMicrosoft製の特別なinit •

    systemdを別途有効にすることもできる • /etc/wsl.confに以下を追記 • 最近のUbuntuやDebianではこれがデフォルト 21 [boot] systemd=true
  5. 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