両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン最新のリビジョン両方とも次のリビジョン |
windows:wsl [2020/09/13 04:22] – [トラブルシューティング] ともやん | windows:wsl [2021/11/16 17:21] – ともやん |
---|
{{:windows:wsl_tmux.png?470|WSL 2 Terminal}} | {{: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 カーネル自体は出荷した事がある)\\ |
\\ | \\ |
* そして何よりも VM の構成や管理が不要 | * そして何よりも VM の構成や管理が不要 |
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 2 で Fedora を利用するためのおすすめの方法は、[[.wsl:lxrunoffline|LxRunOffline]] を利用してインストールする方法です。\\ |
| |
[[.wsl:install|Windows Subsystem for Linux (WSL) Version 2 のインストール]]\\ | [[.wsl:install|Windows Subsystem for Linux (WSL) Version 2 のインストール]]\\ |
[[.wsl:lxrunoffline|LxRunOffline - システムドライブ外に WSL 環境を構築する方法]]\\ | [[.wsl:lxrunoffline|LxRunOffline - システムドライブ外に WSL 環境を構築する方法]] **__(こちらの手順は最新化されています)__**\\ |
※**LxRunOffline** を WSL 2 で利用するなら、**Fedora Remix** を購入する必要はない。\\ | <wrap em>※WSL 2 + **LxRunOffline** で利用するなら、**Fedora Remix** を購入する必要はない。</wrap>\\ |
| |
[[.wsl:install_wsl1|Windows Subsystem for Linux (WSL) Version 1 のインストール]](WSL 2 ではなく WSL 1 を導入する場合)\\ | [[.wsl:install_wsl1|Windows Subsystem for Linux (WSL) Version 1 のインストール]](WSL 2 ではなく WSL 1 を導入する場合)\\ |
| |
===== 日本語環境に設定 ===== | ===== 以下は Fedora Remix での過去の手順 ===== |
| |
| ==== 日本語環境に設定 ==== |
標準のインストールだと日本語が **□** に文字化けする。\\ | 標準のインストールだと日本語が **□** に文字化けする。\\ |
これはターミナルのフォントが日本語フォントになっていない為である。\\ | これはターミナルのフォントが日本語フォントになっていない為である。\\ |
</WRAP> | </WRAP> |
| |
==== WSL 2 の systemd 問題 ==== | === WSL 2 の systemd 問題 === |
システムロケール設定を **ja_JP.UTF-8** に変更する。\\ | システムロケール設定を **ja_JP.UTF-8** に変更する。\\ |
<code> | <code> |
| |
現時点 (2019/09/16 現在) の WSL 2 では、**systemd** はサポートされていない。\\ | 現時点 (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 が有効化される可能性はあると思う。\\ | 今後 Microsoft によって systemd が有効化される可能性はあると思う。\\ |
</code> | </code> |
| |
==== genie-systemd の fork ==== | === genie-systemd の fork === |
本家: [[https://github.com/arkane-systems/genie|arkane-systems/genie]]\\ | 本家: [[https://github.com/arkane-systems/genie|arkane-systems/genie]]\\ |
元ネタ: [[https://gist.github.com/therealkenc/f5109716abd885b2334f6bdaf8848b29|wsltub leftovers]]\\ | 元ネタ: [[https://gist.github.com/therealkenc/f5109716abd885b2334f6bdaf8848b29|wsltub leftovers]]\\ |
LC_ALL= | LC_ALL= |
</code> | </code> |
<html><span style="color: blue; font-size: 48px;"><b>genie 素晴らしい!!</b></span></html>\\ | <html><span style="color: blue; font-size: 48px;"><b>genie🧚♂️ 素晴らしい!!😍</b></span></html>\\ |
| |
=== getty@tty1.service の無効化 === | == getty@tty1.service の無効化 == |
本家のドキュメント [[https://github.com/arkane-systems/genie|arkane-systems/genie]] にあるように、**getty@tty1.service** を無効にする。\\ | 本家のドキュメント [[https://github.com/arkane-systems/genie|arkane-systems/genie]] にあるように、**getty@tty1.service** を無効にする。\\ |
<WRAP prewrap 100%> | <WRAP prewrap 100%> |
</WRAP> | </WRAP> |
| |
=== 毎回 genie -s を実行しなくても良い方法 === | == 毎回 genie -s を実行しなくても良い方法 == |
WSL 2 を起動する度に systemd を有効化するのは手間である。\\ | WSL 2 を起動する度に systemd を有効化するのは手間である。\\ |
そこで以下のように bash 起動時に自動で有効化することが出来る。(お好みで...)\\ | そこで以下のように bash 起動時に自動で有効化することが出来る。(お好みで...)\\ |
</WRAP> | </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 インストール - 基本的なコマンドのインストール]] を参考に基本的なコマンドをインストールする。\\ | [[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 パッケージがキャッシュされるようになる。\\ | お好みで以下の設定を行っておくと RPM パッケージがキャッシュされるようになる。\\ |
<code> | <code> |
</code> | </code> |
| |
==== パッケージのインストール ==== | === パッケージのインストール === |
**tmux - 端末多重化ソフトウェア と htop - 高機能タスクマネージャー**\\ | **tmux - 端末多重化ソフトウェア と htop - 高機能タスクマネージャー**\\ |
\\ | \\ |
</code> | </code> |
| |
===== WSL 2 ファイルシステムへのアクセス ===== | ==== WSL 2 ファイルシステムへのアクセス ==== |
WSL 2 のファイルシステムへのアクセスは PowerShell で **\\wsl$\<distro>** の形式で行うことができる。\\ | WSL 2 のファイルシステムへのアクセスは PowerShell で **\\wsl$\<distro>** の形式で行うことができる。\\ |
これは Plan 9 Network Provider (9p と省略) を利用して提供されるネットワーク共有である。\\ | これは Plan 9 Network Provider (9p と省略) を利用して提供されるネットワーク共有である。\\ |
割り当て解除は **net use x: /delete** で行う。\\ | 割り当て解除は **net use x: /delete** で行う。\\ |
| |
===== 技術情報 ===== | ==== 技術情報 ==== |
[[https://aka.ms/wsl2|WSL 2 | Microsoft Docs]]\\ | [[https://aka.ms/wsl2|WSL 2 | Microsoft Docs]]\\ |
軽量VM と Windows Sandbox\\ | 軽量VM と Windows Sandbox\\ |
[[https://www.atmarkit.co.jp/ait/articles/1710/24/news010_2.html|図解で理解できる(はず)Microsoftの仮想化技術――Windows上で稼働するLinux、動かしているのはどのテクノロジー?(その2) (2/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]]\\ |
| |
==== WSL1 のディスクイメージの場所 ==== | === WSL 1 のディスクイメージの場所 === |
**wsl --set-version <distro> 1** で変換処理を行うと、**rootfs** フォルダーにディスクイメージが存在する。\\ | **wsl --set-version <distro> 1** で変換処理を行うと、**rootfs** フォルダーにディスクイメージが存在する。\\ |
<code> | <code> |
</code> | </code> |
| |
==== WSL2 のディスクイメージの場所 ==== | === WSL2 のディスクイメージの場所 === |
**wsl --set-version <distro> 2** で変換処理を行うと、**ext4.vhdx** にディスクイメージが存在する。\\ | **wsl --set-version <distro> 2** で変換処理を行うと、**ext4.vhdx** にディスクイメージが存在する。\\ |
<html> | <html> |
</html> | </html> |
| |
==== その他参考文献 ==== | === その他参考文献 === |
[[https://www.slideshare.net/SatoshiMimura/inside-wsl-180215871|Inside-WSL]]\\ | [[https://www.slideshare.net/SatoshiMimura/inside-wsl-180215871|Inside-WSL]]\\ |
| |
===== .NET Core ===== | ==== .NET Core ==== |
.NET Core を Fedora にインストールする方法は、以下を参照のこと。\\ | .NET Core を Fedora にインストールする方法は、以下を参照のこと。\\ |
[[linux:fedora_copr#net_core|Fedora Copr リポジトリ - .NET Core]]\\ | [[linux:fedora_copr#net_core|Fedora Copr リポジトリ - .NET Core]]\\ |
| |
===== Cloud9 SDK ===== | ==== Cloud9 SDK ==== |
[[javascript:cloud9_sdk|Cloud9 SDK]] を元にインストールしてみる。\\ | [[javascript:cloud9_sdk|Cloud9 SDK]] を元にインストールしてみる。\\ |
[[.:wsl:c9sdk|Cloud9 SDK on WSL2]]\\ | [[.:wsl:c9sdk|Cloud9 SDK on WSL2]]\\ |
| |
===== Fedora Remix の Upgrade ===== | ==== Fedora Remix の Upgrade ==== |
**Fedora 30 → 31**\\ | **Fedora 30 → 31**\\ |
<WRAP prewrap 100%> | <WRAP prewrap 100%> |
</WRAP> | </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]]\\ | [[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 に接続できない場合 ==== | === WSL 2 に接続できない場合 === |
[[.:wsl:trouble_shooting|WSL トラブルシューティング]] を参照。\\ | [[.:wsl:trouble_shooting|WSL トラブルシューティング]] を参照。\\ |
| |
==== System has not been booted with systemd as init system (PID 1). が発生する ==== | === System has not been booted with systemd as init system (PID 1). が発生する === |
<code> | <code> |
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. |
</WRAP> | </WRAP> |
| |
=== Process Monitor で WSL 2 の起動プロセスを追ってみた === | == Process Monitor で WSL 2 の起動プロセスを追ってみた == |
コマンドプロンプトより bash を起動すると以下のような流れで WSL 2 環境がロードされている。\\ | コマンドプロンプトより bash を起動すると以下のような流れで WSL 2 環境がロードされている。\\ |
<WRAP prewrap 100%> | <WRAP prewrap 100%> |
おおよそこのような流れのようである。\\ | おおよそこのような流れのようである。\\ |
| |
==== genie-systemd の fork ==== | === genie-systemd の fork === |
[[#genie-systemd_の_fork|genie-systemd の fork]] を参照。\\ | [[#genie-systemd_の_fork|genie-systemd の fork]] を参照。\\ |
\\ | \\ |
</WRAP> | </WRAP> |
| |
==== genie-systemd (最初に試した時の資料です) ==== | === genie-systemd (最初に試した時の資料です) === |
[[https://github.com/arkane-systems/genie|arkane-systems/genie: A quick way into a systemd "bottle" for WSL]] を使用してみたいと思う。\\ | [[https://github.com/arkane-systems/genie|arkane-systems/genie: A quick way into a systemd "bottle" for WSL]] を使用してみたいと思う。\\ |
<WRAP prewrap 100%> | <WRAP prewrap 100%> |
[[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://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-index|WSL 2 | Microsoft Docs]]\\ |
[[https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install|WSL 2 のインストール | Microsoft Docs]]\\ | [[https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-install|WSL 2 のインストール | Microsoft Docs]]\\ |