両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン |
windows:wsl [2019/09/15 17:21] – [参考文献] ともやん | windows:wsl [2024/02/04 13:41] (現在) – ↷ 移動操作に合わせてリンクを書き換えました。 非ログインユーザー |
---|
<html> | ~~CLOSETOC~~ |
<style> | |
#result pre { | |
height: 200px; | |
overflow: scroll; | |
overflow-x: hidden; | |
} | |
</style> | |
</html> | |
====== Windows Subsystem for Linux 2 (WSL 2) ====== | ====== Windows Subsystem for Linux 2 (WSL 2) ====== |
ソースコード: [[https://github.com/microsoft/WSL2-Linux-Kernel|GitHub - microsoft/WSL2-Linux-Kernel: The source for the Linux kernel used in Windows Subsystem for Linux 2 (WSL2)]]\\ | ソースコード: [[https://github.com/microsoft/WSL2-Linux-Kernel|GitHub - microsoft/WSL2-Linux-Kernel: The source for the Linux kernel used in Windows Subsystem for Linux 2 (WSL2)]]\\ |
| {{:windows:wsl_tmux.png?470|WSL 2 Terminal}} |
\\ | \\ |
Windows Subsystem for Linux 2 (以下 WSL 2) は、2019/05/06 に[[https://devblogs.microsoft.com/commandline/announcing-wsl-2/|ブログ]]で発表され、2019年6月末までに [[https://insider.windows.com/ja-jp/|Windows Insider Program]] を通じて Microsoft が Windows で Linux カーネルを出荷する試みである。[[windows:windows_10_insider_previews|Windows 10 Insider Previews]] も参照のこと。\\ | Windows Subsystem for Linux 2 (以下 WSL 2) は、2019/05/06 に[[https://devblogs.microsoft.com/commandline/announcing-wsl-2/|ブログ WSL2の発表|Windows コマンドライン]]で発表され、2019年6月末までに [[https://insider.windows.com/ja-jp/|Windows Insider Program]] を通じて Microsoft が Windows で Linux カーネルを出荷する試みである。[[windows:windows_10_insider_previews|Windows 10 Insider Previews]] も参照のこと。\\ |
Linux カーネルが Windows に同梱されるのは、今回が初である。(Microsoft は過去にも 2018 年に [[https://azure.microsoft.com/en-us/blog/introducing-microsoft-azure-sphere-secure-and-power-the-intelligent-edge/|Microsoft Azure Sphere]] で Linux カーネル自体は出荷した事がある)\\ | Linux カーネルが Windows に同梱されるのは、今回が初である。(Microsoft は過去にも 2018 年に [[https://azure.microsoft.com/en-us/blog/introducing-microsoft-azure-sphere-secure-and-power-the-intelligent-edge/|Microsoft Azure Sphere]] で Linux カーネル自体は出荷した事がある)\\ |
\\ | \\ |
WSL は、Linux の ELF フォーマット形式のバイナリ実行ファイルを Windows でネイティブ実行できるようにするための互換レイヤーであるが、WSL 1 では一部で互換性の問題があったが、WSL 2 では Linux カーネルを Windows に内臓したことで__**完全なシステムコールの互換性**__を提供すると伴に、__**ファイルシステムのパフォーマンスが劇的に向上**__している。\\ | WSL は、Linux の ELF フォーマット形式のバイナリ実行ファイルを Windows でネイティブ実行できるようにするための互換レイヤーであるが、WSL 1 では一部で互換性の問題があったが、WSL 2 では Linux カーネルを Windows に内臓したことで__**完全なシステムコールの互換性**__を提供すると伴に、__**ファイルシステムのパフォーマンスが劇的に向上**__している。\\ |
| |
| {{INLINETOC wide 1-2}} |
| \\ |
| |
===== インストール ===== | ===== インストール ===== |
[[.:wsl:install|WSL 2 のインストール]]\\ | WSL 2 で Fedora を利用するためのおすすめの方法は、[[.wsl:lxrunoffline|LxRunOffline]] を利用してインストールする方法です。\\ |
| |
===== 参考文献 ===== | [[.wsl:install|Windows Subsystem for Linux (WSL) Version 2 のインストール]]\\ |
[[https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-index|WSL 2 | Microsoft Docs]]\\ | [[.wsl:lxrunoffline|LxRunOffline - システムドライブ外に WSL 環境を構築する方法]] **__(こちらの手順は最新化されています)__**\\ |
[[https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install|WSL 2 のインストール | Microsoft Docs]]\\ | <wrap em>※WSL 2 + **LxRunOffline** で利用するなら、**Fedora Remix** を購入する必要はない。</wrap>\\ |
[[https://devblogs.microsoft.com/commandline/announcing-wsl-2/|Announcing WSL 2 | Windows Command Line Tools For Developers]]\\ | |
[[https://devblogs.microsoft.com/commandline/shipping-a-linux-kernel-with-windows/|Shipping a Linux Kernel with Windows | Windows Command Line Tools For Developers]]\\ | |
[[https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/|Windows Subsystem for Linux Overview – Windows Subsystem for Linux]]\\ | |
| |
===== トラブルシューティング ===== | [[.wsl:install_wsl1|Windows Subsystem for Linux (WSL) Version 1 のインストール]](WSL 2 ではなく WSL 1 を導入する場合)\\ |
| |
| ===== 以下は Fedora Remix での過去の手順 ===== |
| |
| ==== 日本語環境に設定 ==== |
| 標準のインストールだと日本語が **□** に文字化けする。\\ |
| これはターミナルのフォントが日本語フォントになっていない為である。\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ ll |
| drwxr-xr-x 1 tomoyan tomoyan 512 Nov 17 2015 Tracing |
| drwxr-xr-x 1 tomoyan tomoyan 512 Jan 23 2016 usb_driver |
| drwxr-xr-x 1 tomoyan tomoyan 512 Sep 13 23:24 Videos |
| drwxr-xr-x 1 tomoyan tomoyan 512 Nov 26 2015 'VirtualBox VMs' |
| drwxr-xr-x 1 tomoyan tomoyan 512 Jul 29 23:22 webrtc_event_logs |
| lrwxrwxrwx 1 tomoyan tomoyan 65 Sep 13 22:40 '□□□□ □□□□' -> '/mnt/c/Users/tomoyan/AppData/Roaming/Microsoft/Windows/Start Menu' |
| </code> |
| </WRAP> |
| |
| ターミナルのフォントを**MSゴシック**などの日本語フォントに変更する。\\ |
| {{:windows:wsl_set_terminal_font.png?400|}}\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ ll |
| drwxr-xr-x 1 tomoyan tomoyan 512 Nov 17 2015 Tracing |
| drwxr-xr-x 1 tomoyan tomoyan 512 Jan 23 2016 usb_driver |
| drwxr-xr-x 1 tomoyan tomoyan 512 Sep 13 23:24 Videos |
| drwxr-xr-x 1 tomoyan tomoyan 512 Nov 26 2015 'VirtualBox VMs' |
| drwxr-xr-x 1 tomoyan tomoyan 512 Jul 29 23:22 webrtc_event_logs |
| lrwxrwxrwx 1 tomoyan tomoyan 65 Sep 13 22:40 'スタート メニュー' -> '/mnt/c/Users/tomoyan/AppData/Roaming/Microsoft/Windows/Start Menu' |
| </code> |
| </WRAP> |
| |
| 日本語ランゲージパックをインストールする。\\ |
| **sudo dnf install langpacks-ja** を実行する。\\ |
| <WRAP prewrap 100% #result_long> |
| <code> |
| $ sudo dnf install langpacks-ja |
| Fedora Modular 30 - x86_64 363 kB/s | 1.9 MB 00:05 |
| Fedora Modular 30 - x86_64 - Updates 318 kB/s | 2.9 MB 00:09 |
| Fedora 30 - x86_64 - Updates 249 kB/s | 24 MB 01:37 |
| Fedora 30 - x86_64 237 kB/s | 61 MB 04:22 |
| whitewaterfoundry_wslu 184 B/s | 833 B 00:04 |
| Dependencies resolved. |
| ==================================================================================== |
| Package Arch Version Repository Size |
| ==================================================================================== |
| Installing: |
| langpacks-ja noarch 1.0-17.fc30 fedora 8.4 k |
| Installing dependencies: |
| google-noto-cjk-fonts-common noarch 20190416-2.fc30 updates 19 k |
| Installing weak dependencies: |
| glibc-langpack-ja x86_64 2.29-22.fc30 updates 323 k |
| google-noto-sans-cjk-ttc-fonts noarch 20190416-2.fc30 updates 85 M |
| google-noto-serif-cjk-ttc-fonts noarch 20190416-2.fc30 updates 109 M |
| |
| Transaction Summary |
| ==================================================================================== |
| Install 5 Packages |
| |
| Total download size: 194 M |
| Installed size: 297 M |
| Is this ok [y/N]: y |
| Downloading Packages: |
| (1/5): google-noto-cjk-fonts-common-20190416-2.fc30 27 kB/s | 19 kB 00:00 |
| (2/5): glibc-langpack-ja-2.29-22.fc30.x86_64.rpm 83 kB/s | 323 kB 00:03 |
| (3/5): langpacks-ja-1.0-17.fc30.noarch.rpm 73 kB/s | 8.4 kB 00:00 |
| (4/5): google-noto-sans-cjk-ttc-fonts-20190416-2.fc 97 kB/s | 85 MB 15:03 |
| (5/5): google-noto-serif-cjk-ttc-fonts-20190416-2.f 105 kB/s | 109 MB 17:36 |
| ------------------------------------------------------------------------------------ |
| Total 188 kB/s | 194 MB 17:39 |
| Running transaction check |
| Transaction check succeeded. |
| Running transaction test |
| Transaction test succeeded. |
| Running transaction |
| Preparing : 1/1 |
| Installing : google-noto-cjk-fonts-common-20190416-2.fc30.noarch 1/5 |
| Installing : google-noto-sans-cjk-ttc-fonts-20190416-2.fc30.noarch 2/5 |
| Installing : google-noto-serif-cjk-ttc-fonts-20190416-2.fc30.noarch 3/5 |
| Installing : glibc-langpack-ja-2.29-22.fc30.x86_64 4/5 |
| Installing : langpacks-ja-1.0-17.fc30.noarch 5/5 |
| Running scriptlet: langpacks-ja-1.0-17.fc30.noarch 5/5 |
| Verifying : glibc-langpack-ja-2.29-22.fc30.x86_64 1/5 |
| Verifying : google-noto-cjk-fonts-common-20190416-2.fc30.noarch 2/5 |
| Verifying : google-noto-sans-cjk-ttc-fonts-20190416-2.fc30.noarch 3/5 |
| Verifying : google-noto-serif-cjk-ttc-fonts-20190416-2.fc30.noarch 4/5 |
| Verifying : langpacks-ja-1.0-17.fc30.noarch 5/5 |
| |
| Installed: |
| langpacks-ja-1.0-17.fc30.noarch |
| glibc-langpack-ja-2.29-22.fc30.x86_64 |
| google-noto-sans-cjk-ttc-fonts-20190416-2.fc30.noarch |
| google-noto-serif-cjk-ttc-fonts-20190416-2.fc30.noarch |
| google-noto-cjk-fonts-common-20190416-2.fc30.noarch |
| |
| Complete! |
| </code> |
| </WRAP> |
| |
| === WSL 2 の systemd 問題 === |
| システムロケール設定を **ja_JP.UTF-8** に変更する。\\ |
| <code> |
| $ sudo localectl set-locale LANG=ja_JP.UTF-8 |
| System has not been booted with systemd as init system (PID 1). Can't operate. |
| Failed to create bus connection: Host is down |
| </code> |
| <code> |
| システムは、initd システム (PID 1) なので systemd として起動されていません。操作できません。 |
| バスへの接続に失敗しました: ホストがダウンしています |
| </code> |
| \\ |
| 本物の Fedora の PID 1 は **/usr/lib/systemd/systemd** であるが...\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ ps aux |
| USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
| root 1 0.0 0.5 171732 5500 ? Ss 9月05 2:13 /usr/lib/systemd/systemd --switched-root --system --deserialize 33 |
| root 2 0.0 0.0 0 0 ? S 9月05 0:00 [kthreadd] |
| ... |
| </code> |
| </WRAP> |
| |
| 現状の WSL 2 では PID 1 は Windows との相互運用に必要な処理を行う Microsoft 製のスタブであるカスタム **/init** であり、Linux の **systemd** ではない。\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ ps aux |
| USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
| root 1 0.0 0.0 888 560 ? Sl 10:55 0:00 /init |
| root 6 0.0 0.0 896 80 ? Ss 10:55 0:00 /init |
| ... |
| </code> |
| </WRAP> |
| |
==== System has not been booted with systemd as init system (PID 1). が発生する ==== | 現時点 (2019/09/16 現在) の WSL 2 では、**systemd** はサポートされていない。\\ |
| [[https://github.com/microsoft/WSL/issues/1579|]]\\ |
[[https://github.com/systemd/systemd/issues/8036|Systemd support for Windows Subsystem for Linux (WSL) · Issue #8036 · systemd/systemd · GitHub]]\\ | [[https://github.com/systemd/systemd/issues/8036|Systemd support for Windows Subsystem for Linux (WSL) · Issue #8036 · systemd/systemd · GitHub]]\\ |
| 今後 Microsoft によって systemd が有効化される可能性はあると思う。\\ |
| [[https://github.com/microsoft/WSL/issues/994|Blockers for systemd? · Issue #994 · microsoft/WSL]]ここで議論中。\\ |
| しかし、Fedora は **systemd** を早くに採用した歴史があるので、**systemd** が使えないのはかなり致命的である。\\ |
| \\ |
| **nmcli** も使えない... orz\\ |
<code> | <code> |
| $ nmcli con |
| Error: Could not create NMClient object: Could not connect: No such file or directory. |
| </code> |
| |
| **systemctl** も使えない... orz\\ |
| <code> |
| $ systemctl |
| System has not been booted with systemd as init system (PID 1). Can't operate. |
| Failed to connect to bus: Host is down |
| </code> |
| |
| **localectl** も使えない(日本語化できない)... orz\\ |
| <code> |
| $ sudo localectl set-locale LANG=ja_JP.UTF-8 |
System has not been booted with systemd as init system (PID 1). Can't operate. | System has not been booted with systemd as init system (PID 1). Can't operate. |
Failed to create bus connection: Host is down | Failed to create bus connection: Host is down |
</code> | </code> |
システムは、initd システム (PID 1) なので systemd として起動されていません。操作できません。\\ | |
バスへの接続に失敗しました: ホストがダウンしています\\ | === genie-systemd の fork === |
| 本家: [[https://github.com/arkane-systems/genie|arkane-systems/genie]]\\ |
| 元ネタ: [[https://gist.github.com/therealkenc/f5109716abd885b2334f6bdaf8848b29|wsltub leftovers]]\\ |
| ブログ: [[https://randomactsofcoding.wordpress.com/2019/06/13/systemd-on-wsl2/|systemd on WSL2 | public class Random : Coding {]]\\ |
| \\ |
| この fork は本家に取り込まれたので手順を修正した。\\ |
| [[https://github.com/arkane-systems/genie/commit/a71ec0603fc07ceea0d2e4fd307c1f9acd0cc9cf|Merge pull request #25 from tomoyan596/master]]\\ |
| <del>Fedora Remix for WSL 用に [[https://github.com/arkane-systems/genie|arkane-systems/genie]] を fork して ./fedora-build を追加してみた。</del>\\ |
| <del>[[https://github.com/tomoyan596/genie|tomoyan596/genie: A quick way into a systemd "bottle" for WSL]]</del>\\ |
| \\ |
| 使い方は以下のようになる。\\ |
| <code> |
| $ sudo dnf install git |
| $ cd ~ |
| $ git clone https://github.com/arkane-systems/genie.git |
| $ cd genie |
| $ ./fedora-build |
| </code> |
| ※<html><span style="color: red;"><b>注意!!: </b></span></html>**cd ~** は **dotnet core アプリ** のビルドは 9p ファイルシステム上で行うと失敗するので必ず **$HOME** などの **ext4 ファイルシステム** 上で行う必要がある。\\ |
| これで依存パッケージも genie もすべてインストールされる。\\ |
| \\ |
| **genie -s** を実行して **systemd** を有効化する。\\ |
| <code> |
| $ genie -s |
| </code> |
| |
| この状態でシステムロケール設定が可能になる。\\ |
| <code> |
| $ sudo localectl set-locale LANG=ja_JP.UTF-8 |
| $ source /etc/locale.conf |
| $ locale |
| LANG=ja_JP.UTF-8 |
| LC_CTYPE="ja_JP.UTF-8" |
| LC_NUMERIC="ja_JP.UTF-8" |
| LC_TIME="ja_JP.UTF-8" |
| LC_COLLATE="ja_JP.UTF-8" |
| LC_MONETARY="ja_JP.UTF-8" |
| LC_MESSAGES="ja_JP.UTF-8" |
| LC_PAPER="ja_JP.UTF-8" |
| LC_NAME="ja_JP.UTF-8" |
| LC_ADDRESS="ja_JP.UTF-8" |
| LC_TELEPHONE="ja_JP.UTF-8" |
| LC_MEASUREMENT="ja_JP.UTF-8" |
| LC_IDENTIFICATION="ja_JP.UTF-8" |
| LC_ALL= |
| </code> |
| <html><span style="color: blue; font-size: 48px;"><b>genie🧚♂️ 素晴らしい!!😍</b></span></html>\\ |
| |
| == getty@tty1.service の無効化 == |
| 本家のドキュメント [[https://github.com/arkane-systems/genie|arkane-systems/genie]] にあるように、**getty@tty1.service** を無効にする。\\ |
| <WRAP prewrap 100%> |
| <code> |
| RECOMMENDATIONS |
| Once you have this up and running, I suggest disabling via systemctl the getty@tty1 service (since logging on and using WSL is done via ptsen, not ttys). |
| </code> |
| <code> |
| これを実行したら、systemctl を介して getty@tty1 サービスを無効にすることをお勧めします (WSL へのログオンと使用は tty ではなく ptsen で行われるため)。 |
| </code> |
| </WRAP> |
| |
| **getty@tty1.service** を停止し無効化する。\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ sudo systemctl stop getty@tty1.service |
| $ sudo systemctl disable getty@tty1.service |
| Removed /etc/systemd/system/getty.target.wants/getty@tty1.service. |
| $ sudo systemctl status getty@tty1.service |
| ● getty@tty1.service - Getty on tty1 |
| Loaded: loaded (/usr/lib/systemd/system/getty@.service; disabled; vendor preset:> |
| Active: inactive (dead) |
| Docs: man:agetty(8) |
| man:systemd-getty-generator(8) |
| http://0pointer.de/blog/projects/serial-console.html |
| |
| 9月 16 08:11:54 Cmon-wsl systemd[1]: Started Getty on tty1. |
| 9月 16 08:45:09 Cmon-wsl systemd[1]: Stopping Getty on tty1... |
| 9月 16 08:45:09 Cmon-wsl systemd[1]: getty@tty1.service: Succeeded. |
| 9月 16 08:45:09 Cmon-wsl systemd[1]: Stopped Getty on tty1. |
| </code> |
| </WRAP> |
| |
| == 毎回 genie -s を実行しなくても良い方法 == |
| WSL 2 を起動する度に systemd を有効化するのは手間である。\\ |
| そこで以下のように bash 起動時に自動で有効化することが出来る。(お好みで...)\\ |
| <code> |
| $ sudo vi /etc/profile.d/genie.sh |
| </code> |
| **systemd** が **PID 1** で起動していない場合は **genie -s** を実行する。\\ |
| <WRAP prewrap 100%> |
| <code bash /etc/profile.d/genie.sh> |
| if [ "`ps -eo pid,lstart,cmd | grep systemd | grep -v -e grep -e systemd- | sort -n -k2 | awk 'NR==1 { print $1 }'`" != "1" ]; then |
| genie -s |
| fi |
| </code> |
| </WRAP> |
| |
| ==== 基本的なコマンドのインストール ==== |
| [[https://www.tomoyan.net/linux/fedora_minimal_install#%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB|Fedora minimal インストール - 基本的なコマンドのインストール]] を参考に基本的なコマンドをインストールする。\\ |
| |
| === キャッシュのキープ === |
| お好みで以下の設定を行っておくと RPM パッケージがキャッシュされるようになる。\\ |
| <code> |
| $ sudo vi /etc/dnf/dnf.conf |
| </code> |
| <code autoconf /etc/dnf/dnf.conf> |
| [main] |
| gpgcheck=1 |
| installonly_limit=3 |
| clean_requirements_on_remove=true |
| keepcache=1 <- 追記する。 |
| </code> |
| |
| ダウンロード済の場合は **[SKIPPED]** になる。\\ |
| <code> |
| $ sudo dnf install usbutils -y |
| ... |
| パッケージのダウンロード: |
| [SKIPPED] hwdata-0.327-1.fc30.noarch.rpm: Already downloaded |
| [SKIPPED] usbutils-012-2.fc30.x86_64.rpm: Already downloaded |
| ... |
| 完了しました! |
| </code> |
| |
| === パッケージのインストール === |
| **tmux - 端末多重化ソフトウェア と htop - 高機能タスクマネージャー**\\ |
| \\ |
| WSL で端末の複数接続に悩む前に tmux を入れておくといいだろう。\\ |
| **tmux** は端末画面を複数分割してレイアウトできる。\\ |
| **Ctrl + B** を入力後に様々な機能を呼び出せる。(簡単に書くと以下の通り)\\ |
| * Ctrl + B を入力後 ? でキーバインド一覧 |
| * Ctrl + B を入力後 Shift + 5 で左右に分割 |
| * Ctrl + B を入力後 Shift + 2 で上下に分割 |
| * Ctrl + B を入力後 ↑ or ↓ or ← or → でペイン移動 |
| * Ctrl + B を入力後 Space を繰り返すとお好みのレイアウトに |
| **htop** は F1 キーを押すと使用方法が表示される。\\ |
| {{:windows:wsl_tmux.png?600|tmux on wsl}}\\ |
| <code> |
| $ sudo dnf install tmux htop |
| </code> |
| \\ |
| **netstat arp ifconfig route** … など\\ |
| <code> |
| $ sudo dnf install net-tools -y |
| </code> |
| |
| **dig host nslookup nsupdate**\\ |
| <code> |
| $ sudo dnf install bind-utils -y |
| </code> |
| |
| **whois**\\ |
| <code> |
| $ sudo dnf install jwhois -y |
| </code> |
| |
| **lspci**\\ |
| <code> |
| $ sudo dnf install pciutils -y |
| </code> |
| **2020/09/06 追記:** 2020/05/19 に WSL が GPU コンピューティングをサポートすることを発表した。\\ |
| [[https://devblogs.microsoft.com/commandline/the-windows-subsystem-for-linux-build-2020-summary/|The Windows Subsystem for Linux BUILD 2020 Summary | Windows Command Line]]\\ |
| **/proc/bus/pci** が存在するようになった。\\ |
| <WRAP prewrap 100% #mincode> |
| <code> |
| $ ll /proc/bus/pci |
| 合計 0 |
| dr-xr-xr-x 2 root root 0 9月 6 17:38 8285:00 |
| dr-xr-xr-x 2 root root 0 9月 6 17:38 9fd9:00 |
| dr-xr-xr-x 2 root root 0 9月 6 17:38 a1ef:00 |
| dr-xr-xr-x 2 root root 0 9月 6 17:38 aa29:00 |
| -r--r--r-- 1 root root 0 9月 6 17:38 devices |
| </code> |
| </WRAP> |
| <del>**lspci - これは以下の理由により入れても使えない。**\\ |
| <code> |
| $ cat /proc/bus/pci |
| cat: /proc/bus/pci: そのようなファイルやディレクトリはありません |
| </code></del> |
| |
| **lsusb**\\ |
| <code> |
| $ sudo dnf install usbutils -y |
| </code> |
| |
| **lsmod depmod insmod rmmod modinfo modprobe**\\ |
| <code> |
| $ sudo dnf install kmod -y |
| </code> |
| |
| **mkpasswd** … など\\ |
| <code> |
| $ sudo dnf install expect -y |
| </code> |
| |
| **rsync**\\ |
| <code> |
| $ sudo dnf install rsync -y |
| </code> |
| |
| **man**\\ |
| <code> |
| $ sudo dnf install man -y |
| </code> |
| |
| ==== WSL 2 ファイルシステムへのアクセス ==== |
| WSL 2 のファイルシステムへのアクセスは PowerShell で **\\wsl$\<distro>** の形式で行うことができる。\\ |
| これは Plan 9 Network Provider (9p と省略) を利用して提供されるネットワーク共有である。\\ |
| ※ 9p はもともと [[https://ja.wikipedia.org/wiki/Plan_9_from_Bell_Labs|Plan 9 from Bell Labs]](研究用分散OS) 用に開発されたファイル共有プロトコルである。\\ |
| <code> |
| PS > wsl -l |
| Windows Subsystem for Linux ディストリビューション: |
| fedoraremix (既定) |
| PS > cd \\wsl$\fedoraremix |
| PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\fedoraremix> explorer.exe . |
| </code> |
| PowerShell で **explorer.exe .** コマンドを実行するとエクスプローラーが開く。\\ |
| {{:windows:wsl_linux_fs_access.png?640|WSL Linux FS Access}}\\ |
| |
| コマンドプロンプトからは一旦ネットワークドライブの割り当てを行う必要がある。\\ |
| <code> |
| > pushd \\wsl$\fedoraremix |
| Z:\> explorer.exe . |
| </code> |
| **pushd** は Z: X: Y: と空いているドライブを自動割り当てしてくれる。\\ |
| \\ |
| または **net use** コマンドでドライブ割り当てする。\\ |
| <code> |
| > net use x: \\wsl$\fedoraremix /persistent:yes |
| コマンドは正常に終了しました。 |
| > x: |
| X:¥> explorer.exe . |
| </code> |
| 割り当て解除は **net use x: /delete** で行う。\\ |
| |
| ==== 技術情報 ==== |
| [[https://aka.ms/wsl2|WSL 2 | Microsoft Docs]]\\ |
| 軽量VM と Windows Sandbox\\ |
| [[https://arstechnica.com/gadgets/2018/12/windows-sandbox-marries-vm-isolation-to-container-efficiency-to-safely-run-dodgy-apps/|Microsoft unveils Windows Sandbox: Run any app in a disposable virtual machine | Ars Technica]]\\ |
| [[windows:commands:system_manage#host_compute_service_hcs|Host Compute Service (HCS)]]\\ |
| [[https://www.atmarkit.co.jp/ait/articles/1710/24/news010.html|図解で理解できる(はず)Microsoftの仮想化技術――Windows上で稼働するLinux、動かしているのはどのテクノロジー?(その2) (1/2):その知識、ホントに正しい? Windowsにまつわる都市伝説(95) - @IT]]\\ |
| [[https://www.atmarkit.co.jp/ait/articles/1710/24/news010_2.html|図解で理解できる(はず)Microsoftの仮想化技術――Windows上で稼働するLinux、動かしているのはどのテクノロジー?(その2) (2/2):その知識、ホントに正しい? Windowsにまつわる都市伝説(95) - @IT]]\\ |
| |
| === WSL 1 のディスクイメージの場所 === |
| **wsl --set-version <distro> 1** で変換処理を行うと、**rootfs** フォルダーにディスクイメージが存在する。\\ |
| <code> |
| %LOCALAPPDATA%\Packages\<distro identifier>\LocalState\rootfs\ |
| </code> |
| |
| === WSL2 のディスクイメージの場所 === |
| **wsl --set-version <distro> 2** で変換処理を行うと、**ext4.vhdx** にディスクイメージが存在する。\\ |
| <html> |
| <script src="/_media/javascript/requirejs/require-2.3.6.min.js?cache=recache"></script> |
| <script> |
| self.DEBUG = true; |
| </script> |
| <script src="/_media/javascript/requirejs/settings.js?cache=nocache"></script> |
| </html> |
| <code> |
| %LOCALAPPDATA%\Packages\<distro identifier>\LocalState\ext4.vhdx |
| </code> |
| [[https://chrome.google.com/webstore/detail/enable-local-file-links/nikfmfgobenbhmocjaaboihbeocackld?hl=ja|ローカルファイルリンク有効化]] - Chrome プラグイン\\ |
| \\ |
| 例:\\ |
| <html> |
| <div id="fopen_app"> |
| <a v-bind:href="url" target="_blank">{{ url }}</a><br /> |
| <br /> |
| <h4>リンク編集:</h4> |
| <textarea v-model="url" cols="50" rows="3"></textarea> |
| </div> |
| <script> |
| var fopen_app; |
| require(['Vue'], (Vue) => { |
| fopen_app = new Vue({ |
| el: '#fopen_app', |
| data: { |
| url: 'file:///C:/Users/tomoyan/AppData/Local/Packages/WhitewaterFoundryLtd.Co.FedoraRemixforWSL_kd1vv0z0vy70w/LocalState/', |
| }, |
| computed: { |
| size: function() { |
| return this.url.length; |
| }, |
| }, |
| }); |
| }); |
| </script> |
| </html> |
| |
| === その他参考文献 === |
| [[https://www.slideshare.net/SatoshiMimura/inside-wsl-180215871|Inside-WSL]]\\ |
| |
| ==== .NET Core ==== |
| .NET Core を Fedora にインストールする方法は、以下を参照のこと。\\ |
| [[linux:fedora:copr#net_core|Fedora Copr リポジトリ - .NET Core]]\\ |
| |
| ==== Cloud9 SDK ==== |
| [[javascript:cloud9_sdk|Cloud9 SDK]] を元にインストールしてみる。\\ |
| [[.:wsl:c9sdk|Cloud9 SDK on WSL2]]\\ |
| |
| ==== Fedora Remix の Upgrade ==== |
| **Fedora 30 → 31**\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ cat /etc/redhat-release |
| Generic release 30 (Generic) |
| $ sudo dnf upgrade --refresh |
| $ sudo dnf install dnf-plugin-system-upgrade |
| $ sudo dnf system-upgrade --allowerasing --skip-broken download --releasever=31 |
| $ sudo dnf system-upgrade reboot |
| </code> |
| </WRAP> |
| |
| === 参考文献 === |
| [[https://www.whitewaterfoundry.com/blog/2019/11/3/upgrade-fedora-remix-for-wsl-to-31|Upgrade Fedora Remix for WSL to 31 — Pengwin by Whitewater Foundry]]\\ |
| |
| ==== トラブルシューティング ==== |
| |
| === WSL 2 に接続できない場合 === |
| [[.:wsl:trouble_shooting|WSL トラブルシューティング]] を参照。\\ |
| |
| === System has not been booted with systemd as init system (PID 1). が発生する === |
| <code> |
| System has not been booted with systemd as init system (PID 1). Can't operate. |
| Failed to create bus connection: Host is down |
| </code> |
| <code> |
| システムは、initd システム (PID 1) なので systemd として起動されていません。操作できません。 |
| バスへの接続に失敗しました: ホストがダウンしています |
| </code> |
| \\ |
| 現時点の WSL 2 では、**systemd** はサポートされていない。\\ |
| [[https://github.com/systemd/systemd/issues/8036|Systemd support for Windows Subsystem for Linux (WSL) · Issue #8036 · systemd/systemd · GitHub]]\\ |
\\ | \\ |
本物の Fedora の PID 1 は **/usr/lib/systemd/systemd** であるが...\\ | 本物の Fedora の PID 1 は **/usr/lib/systemd/systemd** であるが...\\ |
</code> | </code> |
</WRAP> | </WRAP> |
| |
| == Process Monitor で WSL 2 の起動プロセスを追ってみた == |
| コマンドプロンプトより bash を起動すると以下のような流れで WSL 2 環境がロードされている。\\ |
| <WRAP prewrap 100%> |
| <code> |
| > bash <- cmd.exe より bash.exe (Microsoft Bash ランチャー) を起動 |
| |
| C:\WINDOWS\system32\conhost.exe 0x4 (コンソール ウィンドウ ホスト) |
| C:\Windows\System32\bash.exe (Microsoft Bash ランチャー) 形式: PE32+ executable |
| +- C:\WINDOWS\system32\wsl.exe /bin/bash --login (Microsoft Windows Subsystem for Linux ランチャー) をロード |
| +- C:\Windows\System32\lxss\LxssManagerProxyStub.dll (Lxss Manager ProxyStub DLL) |
| | C:\WINDOWS\system32\vmcompute.exe (Hyper-V ホスト コンピューティング サービス) が起動される |
| | +- C:\Windows\System32\lxss\tools\kernel 形式: ELF 64-bit LSB executable |
| | +- C:\Windows\System32\lxss\tools\initrd.img 形式: ASCII cpio archive |
| | +- C:\Windows\System32\vmwp.exe (仮想マシン ワーカー プロセス) をロード |
| | +- %USERPROFILE%\AppData\Local\Packages\<distro>\LocalState\ext4.vhdx (distro の ext4) |
| | +- C:\Windows\System32\lxss\tools\init 形式: ELF 64-bit LSB executable |
| +- C:\Windows\System32\lxss\wslhost.exe (Microsoft Windows Subsystem for Linux Background Host) |
| +- C:\Windows\System32\conhost.exe 0xffffffff -ForceV1 (コンソール ウィンドウ ホスト) |
| C:\WINDOWS\system32\vmms.exe (仮想マシン管理サービス) |
| </code> |
| </WRAP> |
| おおよそこのような流れのようである。\\ |
| |
| === genie-systemd の fork === |
| [[#genie-systemd_の_fork|genie-systemd の fork]] を参照。\\ |
| \\ |
| コマンドプロンプトより起動方法は WSL2 に入って genie -s を実行すると以下のように systemd が PID 1 なる。\\ |
| この状態で systemd に依存するものはすべて正常に使用できる。\\ |
| <WRAP prewrap 100%> |
| <code> |
| > bash |
| $ genie -s |
| |
| $ ps aux |
| USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND |
| root 1 0.0 0.0 170712 11084 ? Ss 9月15 0:00 /lib/systemd/systemd |
| root 21 0.0 0.1 52848 16452 ? Ss 9月15 0:00 /usr/lib/systemd/systemd-journald |
| root 56 0.0 0.1 324844 19564 ? Ssl 9月15 0:00 /usr/sbin/NetworkManager --no-daemon |
| dbus 74 0.0 0.0 268584 3808 ? Ss 9月15 0:00 /usr/bin/dbus-broker-launch --scope system --audit |
| dbus 75 0.0 0.0 5332 2788 ? S 9月15 0:00 dbus-broker --log 4 --controller 9 --machine-id 771a4 |
| root 80 0.0 0.0 2812 1864 tty1 Ss+ 9月15 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux |
| root 89 0.0 0.0 11996 6960 ? Ss 9月15 0:00 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,ch |
| root 556 0.0 0.0 18216 7952 ? Ss 01:05 0:00 /usr/lib/systemd/systemd-logind |
| root 621 0.0 0.0 12976 5864 pts/0 S 01:10 0:00 /sbin/runuser -l tomoyan -w INSIDE_GENIE,WSL_DISTRO_NAM |
| tomoyan 623 0.0 0.0 19692 9548 ? Ss 01:10 0:00 /usr/lib/systemd/systemd --user |
| tomoyan 624 0.0 0.0 173932 2220 ? S 01:10 0:00 (sd-pam) |
| tomoyan 629 0.0 0.0 5260 3860 pts/0 S 01:10 0:00 -bash |
| tomoyan 654 0.0 0.0 6916 3220 pts/0 R+ 01:19 0:00 ps aux |
| |
| $ systemctl |
| UNIT LOAD ACTIVE SUB DESCRIPTION |
| proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executabl> |
| dev-sdb.device loaded activating tentative /dev/sdb |
| -.mount loaded active mounted / |
| dev-hugepages.mount loaded active mounted Huge Pages File System |
| dev-mqueue.mount loaded active mounted POSIX Message Queue File |
| etc-hostname.mount loaded active mounted /etc/hostname |
| init.mount loaded active mounted /init |
| mnt-c.mount loaded active mounted /mnt/c |
| proc-sys-fs-binfmt_misc.mount loaded active mounted Arbitrary Executable Fi> |
| run-lock.mount loaded active mounted /run/lock |
| run-shm.mount loaded active mounted /run/shm |
| run-user-1000.mount loaded active mounted /run/user/1000 |
| run-user.mount loaded active mounted /run/user |
| sys-fs-fuse-connections.mount loaded active mounted FUSE Control File Syste> |
| sys-kernel-debug.mount loaded active mounted Kernel Debug File System |
| tmp.mount loaded active mounted Temporary Directory (/tmp |
| </code> |
| </WRAP> |
| |
| === genie-systemd (最初に試した時の資料です) === |
| [[https://github.com/arkane-systems/genie|arkane-systems/genie: A quick way into a systemd "bottle" for WSL]] を使用してみたいと思う。\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ sudo dnf install git |
| |
| $ sudo dnf copr enable @dotnet-sig/dotnet |
| |
| You are about to enable a Copr repository. Please note that this |
| repository is not part of the main distribution, and quality may vary. |
| |
| The Fedora Project does not exercise any power over the contents of |
| this repository beyond the rules outlined in the Copr FAQ at |
| <https://docs.pagure.org/copr.copr/user_documentation.html#what-i-can-build-in-copr>, |
| and packages are not held to any quality or security level. |
| |
| Please do not file bug reports about these packages in Fedora |
| Bugzilla. In case of problems, contact the owner of this repository. |
| |
| Do you really want to enable copr.fedorainfracloud.org/@dotnet-sig/dotnet? [y/N]: y |
| Repository successfully enabled. |
| |
| $ sudo curl -o /usr/bin/hostess -LO https://github.com/cbednarski/hostess/releases/download/ |
| v0.3.0/hostess_linux_amd64 |
| $ sudo chmod 755 /usr/bin/hostess |
| |
| $ sudo dnf install daemonize dotnet-runtime-2.2 dotnet-host-fxr-2.2 dotnet-sdk-2.2 |
| |
| $ git clone https://github.com/arkane-systems/genie.git |
| $ cd genie/genie |
| $ dotnet publish -r linux-x64 --self-contained false |
| Program.cs(75,50): error CS0121: The call is ambiguous between the following methods or properties: 'CommandHandler.Create<T>(Func<T, int>)' and 'CommandHandler.Create<T>(Func<T, Task<int>>)' [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| Program.cs(80,52): error CS0121: The call is ambiguous between the following methods or properties: 'CommandHandler.Create<T>(Func<T, int>)' and 'CommandHandler.Create<T>(Func<T, Task<int>>)' [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| Program.cs(87,47): error CS0121: The call is ambiguous between the following methods or properties: 'CommandHandler.Create<T>(Func<T, int>)' and 'CommandHandler.Create<T>(Func<T, Task<int>>)' [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| Program.cs(99,46): error CS0121: The call is ambiguous between the following methods or properties: 'CommandHandler.Create<T1, T2>(Func<T1, T2, int>)' and 'CommandHandler.Create<T1, T2>(Func<T1, T2, Task<int>>)' [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| </code> |
| </WRAP> |
| |
| .NET Core アプリのビルドを 9p ファイルシステム上でビルドすると破損した実行ファイルができるようだ。\\ |
| 1 回目のビルドは失敗する。(これは genie の不具合ではない)\\ |
| <WRAP prewrap 100% #result> |
| <code> |
| $ pwd |
| /mnt/c/Users/tomoyan/genie |
| |
| $ cd genie |
| $ dotnet publish -r linux-x64 --self-contained false |
| Microsoft (R) Build Engine version 15.9.20.63311 for .NET Core |
| Copyright (C) Microsoft Corporation. All rights reserved. |
| |
| Restoring packages for /mnt/c/Users/tomoyan/genie/genie/genie.csproj... |
| Generating MSBuild file /mnt/c/Users/tomoyan/genie/genie/obj/genie.csproj.nuget.g.props. |
| Generating MSBuild file /mnt/c/Users/tomoyan/genie/genie/obj/genie.csproj.nuget.g.targets. |
| Restore completed in 306.02 ms for /mnt/c/Users/tomoyan/genie/genie/genie.csproj. |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: The "EmbedAppNameInHost" task failed unexpectedly. [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: System.IO.IOException: Invalid argument [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at System.IO.MemoryMappedFiles.MemoryMappedView.CreateView(SafeMemoryMappedFileHandle memMappedFileHandle, MemoryMappedFileAccess access, Int64 requestedOffset, Int64 requestedSize) [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at System.IO.MemoryMappedFiles.MemoryMappedFile.CreateViewAccessor(Int64 offset, Int64 size, MemoryMappedFileAccess access) [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at System.IO.MemoryMappedFiles.MemoryMappedFile.CreateViewAccessor() [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at Microsoft.NET.Build.Tasks.AppHost.Create(String appHostSourceFilePath, String appHostDestinationFilePath, String appBinaryFilePath, Boolean overwriteExisting) [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at Microsoft.NET.Build.Tasks.EmbedAppNameInHost.ExecuteCore() [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at Microsoft.NET.Build.Tasks.TaskBase.Execute() [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| /usr/lib64/dotnet/sdk/2.2.109/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.targets(308,5): error MSB4018: at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/mnt/c/Users/tomoyan/genie/genie/genie.csproj] |
| </code> |
| </WRAP> |
| |
| 2 回目のビルドは成功する。\\ |
| しかし、壊れた実行ファイルが出来上がっている。\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ dotnet publish -r linux-x64 --self-contained false |
| Microsoft (R) Build Engine version 15.9.20.63311 for .NET Core |
| Copyright (C) Microsoft Corporation. All rights reserved. |
| |
| Restore completed in 75.31 ms for /mnt/c/Users/tomoyan/genie/genie/genie.csproj. |
| genie -> /mnt/c/Users/tomoyan/genie/genie/bin/Debug/netcoreapp2.2/linux-x64/genie.dll |
| genie -> /mnt/c/Users/tomoyan/genie/genie/bin/Debug/netcoreapp2.2/linux-x64/publish/ |
| </code> |
| </WRAP> |
| |
| ビルドされた実行ファイルを起動すると以下のエラーが発生する。\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ genie/bin/Debug/netcoreapp2.2/linux-x64/publish/genie |
| This executable is not bound to a managed DLL to execute. The binding value is: 'c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2' |
| A fatal error was encountered. This executable was not bound to load a managed DLL. |
| </code> |
| <code> |
| この実行可能ファイルは、実行するマネージDLLにバインドされていません。バインディング値は: |
| 'c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2' |
| 致命的なエラーが発生しました。この実行可能ファイルは、マネージDLLを読み込むようにバインドされていません。 |
| </code> |
| </WRAP> |
| |
| これは 9p が共有メモリマップ I/O (MSBuild はそのような I/O をするようだ) をサポートできないファイルシステムだからのようである。\\ |
| 9p ファイルシステムは /mnt/c つまり Windows 10 の C:\ をマウントしている部分のことである。\\ |
| <WRAP prewrap 100%> |
| <code> |
| $ pwd |
| /mnt/c/Users/tomoyan/genie |
| $ mount |
| ... |
| C:\ on /mnt/c type 9p (rw,noatime,sync,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000;metadata;uid=1000;gid=1000;umask=22;fmask=11;case=off;symlinkroot=/mnt/,access=client,msize=65536,trans=fd,rfd=8,wfd=8) |
| </code> |
| </WRAP> |
| ※この問題は dotnet-sdk の問題に上がっているようだ。\\ |
| [[https://github.com/dotnet/sdk/issues/2989|Error running self-contained Linux EXE: "This executable is not bound to a managed DLL to execute. The binding value is: 'c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2'" · Issue #2989 · dotnet/sdk]]\\ |
| |
| ==== 参考文献 ==== |
| [[https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-index|WSL 2 | Microsoft Docs]]\\ |
| [[https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install|WSL 2 のインストール | Microsoft Docs]]\\ |
| [[https://devblogs.microsoft.com/commandline/announcing-wsl-2/|Announcing WSL 2 | Windows Command Line Tools For Developers]]\\ |
| [[https://devblogs.microsoft.com/commandline/shipping-a-linux-kernel-with-windows/|Shipping a Linux Kernel with Windows | Windows Command Line Tools For Developers]]\\ |
| [[https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/|Windows Subsystem for Linux Overview – Windows Subsystem for Linux]]\\ |
| [[https://qiita.com/matarillo/items/ca1eecf8f9a3cd76f9ce|WSL2とHyper-Vの関係 - Qiita]]\\ |
| [[https://roy-n-roy.github.io/Windows/WSL%EF%BC%86%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A/HostComputeService/|Windowsのコンテナ - roy-n-roy メモ]]\\ |
| [[https://stackoverflow.com/questions/51584765/how-do-you-install-multiple-separate-instances-of-ubuntu-in-wsl|windows subsystem for linux - How do you install multiple, separate instances of Ubuntu in WSL? - Stack Overflow]]\\ |
| \\ |
| [[https://qiita.com/yabeenico/items/15532c703974dc40a7f5|wsl2でsshサーバを起動し、外部からそこに接続 - Qiita]]\\ |
| [[https://www.atmarkit.co.jp/ait/articles/1909/09/news020.html|Linuxがほぼそのまま動くようになった「WSL2」のネットワーク機能:Windows 10 The Latest - @IT]]\\ |
| \\ |
| [[https://github.com/microsoft/hcsshim|microsoft/hcsshim: Windows - Host Compute Service Shim]]\\ |
| |