「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>Windows Subsystem for Linux]]

* 目次 [#q374ba7d]
#contents

*概要 [#q58fe91d]
-単に[[Hyper-V]]でホストされるLinux
-互換レイヤではなくなり、単に[[Hyper-V]]でホストされるLinux
--[[Hyper-V]]は、WSL2専用にカスタマイズされた軽量版を使用。
--という事で、Home Editionでも利用可能になっている。
--Linuxカーネルも独自パッチで軽量化を実現している。

-UI/UXは[[WSL>Windows Subsystem for Linux]]と同じ(UXを踏襲)

--ホストと異なるIPアドレスだったが、~
Build 18945で改善されたもよう。

--DrvFs → P9の影響はどうなるか?

*詳細 [#n5e68ec0]

**インストール [#ocd43b8b]

***システム要件 [#t4c6067d]
-Windows Insider Preview Build 18917以降が動作している環境であることが必須
-「Windows 10 20H1」(バージョン 2004)で正式版がリリースされた。
-従来通りWSL1をインストールしてから、PowerShellでWSL2に変換する

***WSL1, 2 共存可能? [#nc6658d3]
***WSL1, 2 は共存可能? [#nc6658d3]
-共存可能とのこと
--いつでも、WSL2にアップグレード、ダウングレード可能(PowerShellで)。
--この操作は、ディストリビューション毎に行うことが出来るらしい。

-エミュレーション環境(互換レイヤ)から仮想環境に変更されたが、~
UXを踏襲(DrvFs → P9とか)するので、敢えて、WSL1, 2を共存させなくても良さそう。

***[[Docker Desktop for WSL2>Windows Subsystem for Linux#b08a40a8]] [#yac68e0f]
***[[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]] [#yac68e0f]
-色々な記事が出ているが、ザックリ以下のような感じ。

--WSL2 と Dockerは別物で、~
[[Docker Desktop>#yac68e0f]]で組合せて利用。

--[[Docker Desktop for Windows]]は
---WSL2上でDockerを動作することができるよう進化。
---→ [[Docker Desktop for WSL2>Windows Subsystem for Linux#b08a40a8]]
---→ [[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]]

-以下のような特徴があり、
--WindowsのGUI操作性
--LinuxのCUI活用
--Linuxコンテナへのデプロイ

-端的に言うと、
--IDEだけWindows側にあって、

--開発環境(e.g. LAMPスタックなど)は、WSL2 + Docker側にある。
---DockerコマンドはLinux側から実行。
---後は、リモート・デバック(IDEから?LXCから?)

--故に、[[WSL2>Windows Subsystem for Linux#b08a40a8]] + [[Docker Desktop for WSL2>Docker Desktop for Windows#a4fac57b]] + [[Visual Studio Code]]等を組合せた開発が可能。
--故に、[[WSL2>Windows Subsystem for Linux#b08a40a8]] + [[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]] + [[Visual Studio Code]]等を組合せた開発が可能。

--また、リリース直前に、GUIも利用可能になる。というニュース・リリースがあった~
(仕組みは不明だが、恐らくRemoteApp的な方式に成るのではないか?と考えている)。
***GUIサポート([[WSLg>WSLg#q04ef05e]]) [#f4b7ee03]

**試用、評価 [#d79417d2]

***WSL2本体 [#yf2b317a]
Win11のリリース日程も発表された今頃(2021/09/02)、漸く、~
WSL2にアップグレードすることにした(PCも 21H1 になってるし)

-前提
--WSL(1)インストール済み。
--直接はWSL2をインストールできないらしい。

-手順

--WSL2に更新

---OSのアップデート~
[[20H1>Windowsの系統とバージョン#je3b7fc1]]以降で利用可能らしい。

---仮想マシン プラットフォームオプション機能有効化~
(Hyper-Vは必須ではないのでHome EditionでもOKらしい)

---WSL 2 を既定のバージョンとして設定(PowerShell)
 >wsl --set-default-version 2
※ 自分の場合は「この操作を正しく終了しました。」で終了。

--WSLのバージョンを確認する。
 >wsl --list --verbose
   NAME            STATE           VERSION
 * Ubuntu-18.04    Stopped         1

--WSLのバージョンを変更する。
 >wsl --set-version Ubuntu-18.04 2
 変換中です。この処理には数分かかることがあります...
 WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください

--WSLのバージョンを再確認する。

---起動前~
 >wsl --list --verbose
   NAME            STATE           VERSION
 * Ubuntu-18.04    Stopped         2

---起動~
Ubuntu-18.04アイコンなどをクリックしWSLを起動。

---起動後~
 >wsl --list --verbose
   NAME            STATE           VERSION
 * Ubuntu-18.04    Running         2

--動作確認(相互運用)

---Linux側からWindows側のファイル・システムにアクセスしてみる。
 $ dir /mnt/c
 ...Windows側のC:\以下のファイル・ディレクトリを参照可能。
※ 結果:問題なくアクセスできた。

---Linux側からWindows側にネットワーク・アクセスしてみる。
 $ cat /etc/resolv.conf
 # This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
 # [network]
 # generateResolvConf = false
 nameserver 172.29.96.1
 $ curl http://172.29.96.1/iisstart.htm
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>IIS Windows</title>
 <style type="text/css">
 ...
※ 結果:問題なくアクセスできた。

---Windows側からLinux側にネットワーク・アクセスしてみる。~
(WSL(1)はローカル・プロセスだったが、WSL2ではVMになったので)~
~
・Linux側:ncコマンド
 $ nc -lk 9999
 hogehoge
~
・Windows側:[[TCP/IPテストツール>https://www.vector.co.jp/soft/winnt/net/se411272.html]]~
 GUIで127.0.0.1:9999に接続~
~
※ 結果:問題なく接続&受信できた。

--[[WSL2上での開発とデバッグ>#t061a41a]]を試してみる。~
...

-参考
--WSL2をWindows10に公式の手順でインストールする~
https://t-dilemma.info/official-install-wsl2/
--WSL2からWindowsホストで動作しているアプリケーションにアクセスする – Logico Inside~
https://logico-jp.io/2019/08/26/access-an-app-running-on-windows-host-via-wsl2/

***LinuxOSの新規インストール [#if2f7775]
-[[上記]]は、Ubuntu-18.04をWSL → WSL2と持ってきた。
-ココでは、新しいバージョンのOSを新規インストールしてみる。

-PowerShellから。

--可能なディストリビューションの一覧を表示
 wsl --list --online

--ディストリビューションをインストール
 wsl --install -d <DistroName> 

-Microsoft Storeから~
ディストリビューション一覧に表示されないものをインストールする場合。

--Microsoft StoreでUbuntuで検索して探し出しす。
--Ubuntu 22.04.1 LTSの「入手」ボタンをクリック。
--スタートメニューに登録されたらソコから起動。

-参考
--Windows 10におけるWSL2を用いたUbuntu 20.04 LTS環境の構築~
https://www.aise.ics.saitama-u.ac.jp/~gotoh/UbuntuOnWSL2.html
--Windows11にWSLでUbuntu 22.04 LTSの導入 | OsaruSystem~
https://www.osarusystem.com/misc/windows11_wsl_ubuntu2204.html

***LinuxOSの再インストール [#i6dd4c37]
-WSL2環境は簡単に再インストール的なリフレッシュができる。
-Ubuntu 22.04.1 LTSを再インストール的にリフレッシュしてみる。

-手順、

--PowerShellから。

---確認
 wsl --list --verbose
---初期化
 wsl --unregister Ubuntu-XXX

--GUIから
---[設定] → [アプリ] → [インストールされているアプリ] → [UbuntuXXX]
---[詳細オプション] → [リセット](でイケるらしいが、やったら失敗した。

-参考
--グチャグチャになった「Ubuntu on WSL2」のやり直し方 - Qiita~
https://qiita.com/PoodleMaster/items/b54db3608c4d343d27c4
--Windows内のLinux環境を手軽に初期化、WSL2の賢い操作法 | 日経クロステック(xTECH)~
https://xtech.nikkei.com/atcl/nxt/column/18/01863/112600004/

***Dockerサポート1 [#t551cc69]
(≒ [[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]])

-前提
--Docker Desktop導入済み。
--WSL2へアップグレード済

-手順

--タスク・トレイ中のDocker Desktopアイコンをクリック

--画面が表示されたら歯車マークから管理画面へ遷移

--User the WSL 2 based engine に~
チェックを入れ[Apply&Restart]を押下。

--再起動

---Docker Desktopを再起動中にエラー

---次いで、PCを再起動するもエラー

---エラーメッセージからWSL2用の~
Linux Kernelを入れろと(以下にアクセス)。~
https://aka.ms/wsl2kernel

---Linux カーネル更新プログラム パッケージを~
ダウンロードして実行してインストールする。

---その後、タスク・トレイからDocker Desktopを~
再起動するなどして、正常に動作するようになった。

--動作確認~
適当なDockerコマンドやDockerコンポーズを動かしてみる。

-参考
--WSL 2 対応 Docker Desktop for Windowsを使うための手順 - Qiita~
https://qiita.com/zembutsu/items/22a5cae1d13df0d04e7b

***Dockerサポート2 [#x1a53d68]
[[Docker Desktop for Windows有償化>Docker Desktop for Windows#m40e5547]]対応
...と言う事で~
WSL2自体の中にDockerコマンドやDockerコンポーズを入れる。

-手順
--前提 : [[WSL2が導入済み>#yf2b317a]]であること。

--ディストリビューション追加(Ubuntu 20.04)

---確認
 >wsl --list --online
 ...
 NAME            FRIENDLY NAME
 Ubuntu          Ubuntu
 Debian          Debian GNU/Linux
 kali-linux      Kali Linux Rolling
 openSUSE-42     openSUSE Leap 42
 SLES-12         SUSE Linux Enterprise Server v12
 Ubuntu-16.04    Ubuntu 16.04 LTS
 Ubuntu-18.04    Ubuntu 18.04 LTS
 Ubuntu-20.04    Ubuntu 20.04 LTS

---追加インストール
 >wsl --install -d Ubuntu-20.04

--Ubuntu上にDocker Engineをインストール

---リポジトリをセットアップ~
・aptパッケージ・インデックスを更新
 $ sudo apt-get update
・インストール・パッケージを更新
 $ sudo apt-get install \
   apt-transport-https \
   ca-certificates \
   curl \
   gnupg \
   lsb-release
・Docker社の公式GPGキーを追加
 $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
・安定したリポジトリを設定
 $ echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

---Docker Engineのインストール~
・インストール
 $ sudo apt-get update
 $ sudo apt-get install docker-ce docker-ce-cli containerd.io
・実行~
 ・手動起動
 $ sudo /etc/init.d/docker start
 ・動作確認
 $ sudo docker run hello-world

--[[docker-composeでjupyter/pyspark-notebookを使ってみる。>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?PySpark#n212eaf0]]

---[[docker-composeをインストール>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?VM%E8%B5%B7%E5%8B%95%E5%BE%8C%E3%81%AE%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%EF%BC%88Linux%EF%BC%89#d2b98d57]]

---既存のdocker-compose.ymlの位置へ。
 $ cd /mnt/c/...

---docker-composeを実行
 $ docker-compose up

---表示されたURLにアクセスして、~
jupyter/pyspark-notebookを使用。

-参考
--Install Docker on Windows (WSL) without Docker Desktop - DEV Community~
https://dev.to/bowmanjd/install-docker-on-windows-wsl-without-docker-desktop-34m9
--Qiita
---Docker Desktopに依存しない、WindowsでのDocker環境~
https://qiita.com/ohtsuka1317/items/617a865b8a9d4fb67989
---Windows10 HomeとWSL2でdocker-composeができるようにする~
https://qiita.com/aki4000/items/c26e3076c8cec9677415

***Dockerサポート3 [#i67127c3]
-Docker関連の手順作成時に、

--[[Docker Desktop for Windows]]上でDockerする場合と、
--WSL2(≠[[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]])上でDockerする場合と、

>の両方が必要になるので、共存が可能か?を調査する。

-[[Dockerサポート2>#x1a53d68]]の環境に、
--[[Docker Desktop for Windows]]を再インストール
--その際、[[Docker Desktop WSL2 Backend>Docker Desktop for Windows#a4fac57b]]を有効化しない。

-結果
--問題なく併用可能だった。
--また、[[Visual Studio Kubernetes Tools>Visual Studio Kubernetes Tools#kd8a305b]]でも併用可能だった。

***Dockerサポート4 [#t0d74a1f]
プロキシ環境下で使用する。

-プロキシ接続文字列
 "http://<user_id>:<password>@<host>:<port>"

>「<user_id>:<password>」中の"@" などのASCII文字は "%40" などとURLエンコードする。

-必要に応じて、初期化
 >wsl --shutdown 
 >wsl --unregister Ubuntu-20.04
 >wsl --install -d Ubuntu-20.04

-環境変数設定
 $ export http_proxy="プロキシ接続文字列"
 $ export https_proxy="プロキシ接続文字列"

-aptコマンド

--Proxy設定

---設定ファイルを編集
 $ sudo vi /etc/apt/apt.conf

---以下を記入([[i → 編集 → esc → :wq>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?vi#ebf62194]])
 Acquire::http::Proxy "プロキシ接続文字列";
 Acquire::https::Proxy "プロキシ接続文字列";

--パッケージ一覧を更新
 sudo apt update
 sudo apt upgrade -y
 sudo apt install curl apt-transport-https -y
 curl -fsSL https://download.docker.com/linux/ubuntu/gpg -x プロキシ接続文字列 | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
 echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
 sudo apt update

-dockerコマンド

--インストール
 sudo apt install docker-ce docker-ce-cli containerd.io -y
 sudo apt install docker-compose -y

--Proxy設定

---設定ファイルを編集
 $ sudo vi /etc/default/docker

---以下を記入(i → 編集 → Esc → :wq)
 export http_proxy="プロキシ接続文字列"
 export https_proxy="プロキシ接続文字列"

--サービス開始
 $ sudo service docker start

--権限関係

---ユーザの追加
 $ sudo gpasswd -a ユーザー名 docker

---ソケット読書
 $ sudo chmod 666 /var/run/docker.sock

--動作確認する
 $ sudo docker run hello-world

-docker-composeコマンド~
[[Dockerサポート2の手順>#x1a53d68]]でインストールして実行~
(ただし、curlは-xオプションでプロキシ接続文字列を指定して実行)

***開発とデバッグ [#t061a41a]
[[WSL(1)の手順>WSL上での.NET Core開発#fd286380]]と、何がどう変わったのか?的な話。

...

***GUIサポート([[WSLg>WSLg#nb7f1364]]) [#qdc6ef47]

*参考 [#zc93ad83]

**Publickey [#u0c87fd9]

-[速報]Windows上でフル互換のLinuxシステムコールを実現する~
「WSL 2」発表、Dockerも実行可能に。Microsoft Build 2019~
https://www.publickey1.jp/blog/19/windowslinuxwsl_2dockermicrosoft_build_2019.html

-WindowsにLinuxカーネルを組み込んだ「WSL 2」、~
はやくもWindows 10 Insiderプレビュー版で利用可能に~
https://www.publickey1.jp/blog/19/windowslinuxwsl_2windows_10_insider.html

-[速報]WSL 2が正式版に到達。~
今後はLinuxのGUIアプリへも対応すると。Microsoft Build 2020~
https://www.publickey1.jp/blog/20/wsl_2linuxguimicrosoft_build_2020.html

**窓の杜 [#s9f6cc28]
-「WSL 2」を搭載した「Windows 10 20H1」Build 18917が“Fast”リングに~
https://forest.watch.impress.co.jp/docs/news/1190081.html
-「WSL 2」は「Windows 10 バージョン 2004」で正式リリースへ ~Microsoftが発表~
https://forest.watch.impress.co.jp/docs/news/1240999.html
-「WSL 2」が正式リリース! ~「WSL 1」とのメリットは? 「Windows Terminal」にも注目~
https://forest.watch.impress.co.jp/docs/shseri/win10may2020/1250493.html

**Qiita [#v98ec515]
-WSL1からWSL2に乗り換える~
https://qiita.com/rootpia/items/f49b9e903216cd6dfb51

-WSL2入れてみた~
https://qiita.com/TsuyoshiUshio@github/items/947301bd9317610572fc

**@IT [#n2fddfaa]
-Windows 10 The Latest

--完全なLinuxがWindows 10上で稼働する?『WSL 2』とは~
https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html
--『WSL 2』へのバージョンアップでLinux互換環境はどう変わるのか?~
https://www.atmarkit.co.jp/ait/articles/1906/28/news034.html
--Linuxがほぼそのまま動くようになった『WSL2』のネットワーク機能~
https://www.atmarkit.co.jp/ait/articles/1909/09/news020.html
--【WSL 2互換性チェック】NTFSのシンボリックリンクやジャンクションは使い物になるのか?~
https://www.atmarkit.co.jp/ait/articles/1910/11/news012.html
--前バージョンから大幅に性能向上した新Linux環境「WSL 2」の実力を探る~
https://www.atmarkit.co.jp/ait/articles/2005/15/news020.html

**kledgeb [#d0bedb7d]

-その171 - Windows Subsystem for Linuxの新アーキテクチャー、WSL 2登場~
https://kledgeb.blogspot.com/2019/05/wsl-171-windows-subsystem-for-linuxwsl-2.html

-その172 - WSL 2とLinux kernel・MicrosoftがLinux kernelを提供~
https://kledgeb.blogspot.com/2019/05/wsl-172-wsl-2linux-kernelmicrosoftlinux.html

-その173 - WSL 2とよく寄せられる質問~
https://kledgeb.blogspot.com/2019/05/wsl-173-wsl-2.html

-その174 - WindowsからLinuxのファイルにアクセスする仕組みの詳細とWSL 2~
https://kledgeb.blogspot.com/2019/06/wsl-174-windowslinuxwsl-2.html

-その175 - Build 18917でWSL 2が利用可能に・WSL 2を利用するには~
https://kledgeb.blogspot.com/2019/06/wsl-175-build-18917wsl-2wsl-2.html

-その176 - WSL 1とWSL 2の使い勝手の違い~
https://kledgeb.blogspot.com/2019/06/wsl-176-wsl-1wsl-2.html
--ネットワークアプリへアクセスするには
--ストレージ領域の最大サイズを大きくするには

-その177 - 仮想マシン内でWSL 2は利用できるのか?~
https://kledgeb.blogspot.com/2019/06/wsl-177-wsl-2.html

-その181 - WSL 2でリモートからアプリに接続する時の注意事項~
https://kledgeb.blogspot.com/2019/07/wsl-181-wsl-2.html

-その182 - Build 18945のWSLに関する変更点・WSL 2の大幅な改善と改良~
https://kledgeb.blogspot.com/2019/07/wsl-182-build-18945wslwsl-2.html

-その183 - localhostサポート~
https://kledgeb.blogspot.com/2019/07/wsl-183-localhostwsl-2.html
--WSL 2グローバル設定のサポート
--カスタムカーネルのサポート

**Microsoft Docs [#e3f89dd2]
-WSL とは~
https://docs.microsoft.com/ja-jp/windows/wsl/about
-WSL 2 の新機能~
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-index
-WSL 2 と WSL 1 の比較~
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-faq
-Windows 10 に WSL をインストールする~
https://docs.microsoft.com/ja-jp/windows/wsl/install-win10

**[[Docker Desktop for WSL2>Windows Subsystem for Linux#b08a40a8]] [#g0aff376]
**[[Docker Desktop WSL2 Backend>Windows Subsystem for Linux#b08a40a8]] [#g0aff376]
-Docker Desktop WSL 2 backend | Docker Documentation~
https://docs.docker.com/docker-for-windows/wsl-tech-preview/

-Docker Desktop for WSL 2、7月末にプレビュー版公開 | マイナビニュース~
https://news.mynavi.jp/article/20190722-862024/

-Windows版「Docker Desktop」も「WSL 2」対応に~
~テクニカルプレビュー版が7月公開へ - 窓の杜~
https://forest.watch.impress.co.jp/docs/news/1191014.html

-[Windows WSL2] WSL2でDocker開発環境を構築してみる~
https://blog.nicopun.com/post/2019-07-02-windows-wsl2/

***Qiita [#l9cf3db0]
-Docker Desktop for WSL 2 を入れてみました~
https://qiita.com/SHIRANO/items/42616bb76630df068f33

-Docker Desktop for WSL2 を使い快適にWindowsでサーバ開発をしよう!~
https://qiita.com/YukiMiyatake/items/c7896a0fc5abfa6c2300

-Docker Desktop WSL 2 Backend を入れてみました~
( Docker Desktop 2.2 も本記事の検証部分の結果は大体同じです )~
https://qiita.com/SHIRANO/items/ebd007ba148b4651a5df

***SIOS Tech. Lab [#ka2f76e9]
-WSL2で劇的に変わるあなたのWebアプリケーション開発環境

--【その1:概要編】~
https://tech-lab.sios.jp/archives/18431

--【その2:導入編】~
https://tech-lab.sios.jp/archives/18437

--【その3:実践編】~
https://tech-lab.sios.jp/archives/18446

-【連載】WSL2、Visual Studio Code、~
DockerでグッとよくなるWindows開発環境~

--〜 その1:まずは概要 〜~
https://tech-lab.sios.jp/archives/21023

***Developers.IO [#d7a0dd0d]
-Windows Subsystem for Linux 2(WSL 2)をセットアップしてみた~
https://dev.classmethod.jp/articles/how-to-setup-wsl2/

-Windows10+WSL2環境で快適AWSサーバレス開発~
https://dev.classmethod.jp/articles/awssamcli_on_wsl2/

***OSSコンソーシアム > 開発基盤部会 Blog [#b01cffc1]
-今更ですが、WSL2(+Docker)を使い始めたりしてみました。~
https://www.osscons.jp/jowz98rg9-537/

----
Tags: [[:Windows]], [[:Linux]], [[:Linuxサブシステム]], [[:仮想化]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS