差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| windows:wsl [2019/09/13 23:34] – ともやん | windows:wsl [2024/02/04 13:41] (現在) – ↷ 移動操作に合わせてリンクを書き換えました。 非ログインユーザー | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | < | + | ~~CLOSETOC~~ |
| - | < | + | |
| - | #result pre { | + | |
| - | height: 200px; | + | |
| - | overflow: scroll; | + | |
| - | overflow-x: hidden; | + | |
| - | } | + | |
| - | </ | + | |
| - | </ | + | |
| ====== Windows Subsystem for Linux 2 (WSL 2) ====== | ====== Windows Subsystem for Linux 2 (WSL 2) ====== | ||
| ソースコード: | ソースコード: | ||
| + | {{: | ||
| \\ | \\ | ||
| - | Windows Subsystem for Linux 2 (以下 WSL 2) は、2019/ | + | Windows Subsystem for Linux 2 (以下 WSL 2) は、2019/ |
| Linux カーネルが Windows に同梱されるのは、今回が初である。(Microsoft は過去にも 2018 年に [[https:// | Linux カーネルが Windows に同梱されるのは、今回が初である。(Microsoft は過去にも 2018 年に [[https:// | ||
| \\ | \\ | ||
| 行 23: | 行 16: | ||
| 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: |
| + | [[.wsl: | ||
| + | <wrap em> | ||
| + | |||
| + | [[.wsl: | ||
| + | |||
| + | ===== 以下は Fedora Remix での過去の手順 ===== | ||
| + | |||
| + | ==== 日本語環境に設定 ==== | ||
| + | 標準のインストールだと日本語が **□** に文字化けする。\\ | ||
| + | これはターミナルのフォントが日本語フォントになっていない為である。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ ll | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | lrwxrwxrwx 1 tomoyan tomoyan | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ターミナルのフォントを**MSゴシック**などの日本語フォントに変更する。\\ | ||
| + | {{: | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ ll | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | drwxr-xr-x 1 tomoyan tomoyan | ||
| + | lrwxrwxrwx 1 tomoyan tomoyan | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 日本語ランゲージパックをインストールする。\\ | ||
| + | **sudo dnf install langpacks-ja** を実行する。\\ | ||
| + | <WRAP prewrap 100% # | ||
| + | < | ||
| + | $ sudo dnf install langpacks-ja | ||
| + | Fedora Modular 30 - x86_64 | ||
| + | Fedora Modular 30 - x86_64 - Updates | ||
| + | Fedora 30 - x86_64 - Updates | ||
| + | Fedora 30 - x86_64 | ||
| + | whitewaterfoundry_wslu | ||
| + | Dependencies resolved. | ||
| + | ==================================================================================== | ||
| + | | ||
| + | ==================================================================================== | ||
| + | Installing: | ||
| + | | ||
| + | Installing dependencies: | ||
| + | | ||
| + | Installing weak dependencies: | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | Transaction Summary | ||
| + | ==================================================================================== | ||
| + | Install | ||
| + | |||
| + | 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 | ||
| + | (2/5): glibc-langpack-ja-2.29-22.fc30.x86_64.rpm | ||
| + | (3/5): langpacks-ja-1.0-17.fc30.noarch.rpm | ||
| + | (4/5): google-noto-sans-cjk-ttc-fonts-20190416-2.fc | ||
| + | (5/5): google-noto-serif-cjk-ttc-fonts-20190416-2.f 105 kB/s | 109 MB | ||
| + | ------------------------------------------------------------------------------------ | ||
| + | Total 188 kB/s | 194 MB | ||
| + | Running transaction check | ||
| + | Transaction check succeeded. | ||
| + | Running transaction test | ||
| + | Transaction test succeeded. | ||
| + | Running transaction | ||
| + | Preparing | ||
| + | Installing | ||
| + | Installing | ||
| + | Installing | ||
| + | Installing | ||
| + | Installing | ||
| + | Running scriptlet: langpacks-ja-1.0-17.fc30.noarch | ||
| + | Verifying | ||
| + | Verifying | ||
| + | Verifying | ||
| + | Verifying | ||
| + | Verifying | ||
| + | |||
| + | 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! | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === WSL 2 の systemd 問題 === | ||
| + | システムロケール設定を **ja_JP.UTF-8** に変更する。\\ | ||
| + | < | ||
| + | $ 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 | ||
| + | </ | ||
| + | < | ||
| + | システムは、initd システム (PID 1) なので systemd として起動されていません。操作できません。 | ||
| + | バスへの接続に失敗しました: | ||
| + | </ | ||
| + | \\ | ||
| + | 本物の Fedora の PID 1 は **/ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ ps aux | ||
| + | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND | ||
| + | root | ||
| + | root | ||
| + | ... | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 現状の WSL 2 では PID 1 は Windows との相互運用に必要な処理を行う Microsoft 製のスタブであるカスタム **/init** であり、Linux の **systemd** ではない。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ ps aux | ||
| + | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND | ||
| + | root | ||
| + | root | ||
| + | ... | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 現時点 (2019/09/16 現在) の WSL 2 では、**systemd** はサポートされていない。\\ | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | 今後 Microsoft によって systemd が有効化される可能性はあると思う。\\ | ||
| + | [[https:// | ||
| + | しかし、Fedora は **systemd** を早くに採用した歴史があるので、**systemd** が使えないのはかなり致命的である。\\ | ||
| + | \\ | ||
| + | **nmcli** も使えない... orz\\ | ||
| + | < | ||
| + | $ nmcli con | ||
| + | Error: Could not create NMClient object: Could not connect: No such file or directory. | ||
| + | </ | ||
| + | |||
| + | **systemctl** も使えない... orz\\ | ||
| + | < | ||
| + | $ systemctl | ||
| + | System has not been booted with systemd as init system (PID 1). Can't operate. | ||
| + | Failed to connect to bus: Host is down | ||
| + | </ | ||
| + | |||
| + | **localectl** も使えない(日本語化できない)... orz\\ | ||
| + | < | ||
| + | $ 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 | ||
| + | </ | ||
| + | |||
| + | === genie-systemd の fork === | ||
| + | 本家: [[https:// | ||
| + | 元ネタ: [[https:// | ||
| + | ブログ: [[https:// | ||
| + | \\ | ||
| + | この fork は本家に取り込まれたので手順を修正した。\\ | ||
| + | [[https:// | ||
| + | < | ||
| + | < | ||
| + | \\ | ||
| + | 使い方は以下のようになる。\\ | ||
| + | < | ||
| + | $ sudo dnf install git | ||
| + | $ cd ~ | ||
| + | $ git clone https:// | ||
| + | $ cd genie | ||
| + | $ ./ | ||
| + | </ | ||
| + | ※< | ||
| + | これで依存パッケージも genie もすべてインストールされる。\\ | ||
| + | \\ | ||
| + | **genie -s** を実行して **systemd** を有効化する。\\ | ||
| + | < | ||
| + | $ genie -s | ||
| + | </ | ||
| + | |||
| + | この状態でシステムロケール設定が可能になる。\\ | ||
| + | < | ||
| + | $ sudo localectl set-locale LANG=ja_JP.UTF-8 | ||
| + | $ source / | ||
| + | $ locale | ||
| + | LANG=ja_JP.UTF-8 | ||
| + | LC_CTYPE=" | ||
| + | LC_NUMERIC=" | ||
| + | LC_TIME=" | ||
| + | LC_COLLATE=" | ||
| + | LC_MONETARY=" | ||
| + | LC_MESSAGES=" | ||
| + | LC_PAPER=" | ||
| + | LC_NAME=" | ||
| + | LC_ADDRESS=" | ||
| + | LC_TELEPHONE=" | ||
| + | LC_MEASUREMENT=" | ||
| + | LC_IDENTIFICATION=" | ||
| + | LC_ALL= | ||
| + | </ | ||
| + | < | ||
| + | |||
| + | == getty@tty1.service の無効化 == | ||
| + | 本家のドキュメント [[https:// | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | 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). | ||
| + | </ | ||
| + | < | ||
| + | これを実行したら、systemctl を介して getty@tty1 サービスを無効にすることをお勧めします (WSL へのログオンと使用は tty ではなく ptsen で行われるため)。 | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | **getty@tty1.service** を停止し無効化する。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ sudo systemctl stop getty@tty1.service | ||
| + | $ sudo systemctl disable getty@tty1.service | ||
| + | Removed / | ||
| + | $ sudo systemctl status getty@tty1.service | ||
| + | ● getty@tty1.service - Getty on tty1 | ||
| + | | ||
| + | | ||
| + | Docs: man: | ||
| + | | ||
| + | | ||
| + | |||
| + | 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: | ||
| + | 9月 16 08:45:09 Cmon-wsl systemd[1]: Stopped Getty on tty1. | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | == 毎回 genie -s を実行しなくても良い方法 == | ||
| + | WSL 2 を起動する度に systemd を有効化するのは手間である。\\ | ||
| + | そこで以下のように bash 起動時に自動で有効化することが出来る。(お好みで...)\\ | ||
| + | < | ||
| + | $ sudo vi / | ||
| + | </ | ||
| + | **systemd** が **PID 1** で起動していない場合は **genie -s** を実行する。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | <code bash / | ||
| + | if [ "`ps -eo pid, | ||
| + | genie -s | ||
| + | fi | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== 基本的なコマンドのインストール ==== | ||
| + | [[https:// | ||
| + | |||
| + | === キャッシュのキープ === | ||
| + | お好みで以下の設定を行っておくと RPM パッケージがキャッシュされるようになる。\\ | ||
| + | < | ||
| + | $ sudo vi / | ||
| + | </ | ||
| + | <code autoconf / | ||
| + | [main] | ||
| + | gpgcheck=1 | ||
| + | installonly_limit=3 | ||
| + | clean_requirements_on_remove=true | ||
| + | keepcache=1 <- 追記する。 | ||
| + | </ | ||
| + | |||
| + | ダウンロード済の場合は **[SKIPPED]** になる。\\ | ||
| + | < | ||
| + | $ sudo dnf install usbutils -y | ||
| + | ... | ||
| + | パッケージのダウンロード: | ||
| + | [SKIPPED] hwdata-0.327-1.fc30.noarch.rpm: | ||
| + | [SKIPPED] usbutils-012-2.fc30.x86_64.rpm: | ||
| + | ... | ||
| + | 完了しました! | ||
| + | </ | ||
| + | |||
| + | === パッケージのインストール === | ||
| + | **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 キーを押すと使用方法が表示される。\\ | ||
| + | {{: | ||
| + | < | ||
| + | $ sudo dnf install tmux htop | ||
| + | </ | ||
| + | \\ | ||
| + | **netstat arp ifconfig route** … など\\ | ||
| + | < | ||
| + | $ sudo dnf install net-tools -y | ||
| + | </ | ||
| + | |||
| + | **dig host nslookup nsupdate**\\ | ||
| + | < | ||
| + | $ sudo dnf install bind-utils -y | ||
| + | </ | ||
| + | |||
| + | **whois**\\ | ||
| + | < | ||
| + | $ sudo dnf install jwhois -y | ||
| + | </ | ||
| + | |||
| + | **lspci**\\ | ||
| + | < | ||
| + | $ sudo dnf install pciutils -y | ||
| + | </ | ||
| + | **2020/ | ||
| + | [[https:// | ||
| + | **/ | ||
| + | <WRAP prewrap 100% # | ||
| + | < | ||
| + | $ ll / | ||
| + | 合計 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 | ||
| + | </ | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | $ cat / | ||
| + | cat: / | ||
| + | </ | ||
| + | |||
| + | **lsusb**\\ | ||
| + | < | ||
| + | $ sudo dnf install usbutils -y | ||
| + | </ | ||
| + | |||
| + | **lsmod depmod insmod rmmod modinfo modprobe**\\ | ||
| + | < | ||
| + | $ sudo dnf install kmod -y | ||
| + | </ | ||
| + | |||
| + | **mkpasswd** … など\\ | ||
| + | < | ||
| + | $ sudo dnf install expect -y | ||
| + | </ | ||
| + | |||
| + | **rsync**\\ | ||
| + | < | ||
| + | $ sudo dnf install rsync -y | ||
| + | </ | ||
| + | |||
| + | **man**\\ | ||
| + | < | ||
| + | $ sudo dnf install man -y | ||
| + | </ | ||
| + | |||
| + | ==== WSL 2 ファイルシステムへのアクセス ==== | ||
| + | WSL 2 のファイルシステムへのアクセスは PowerShell で **\\wsl$\< | ||
| + | これは Plan 9 Network Provider (9p と省略) を利用して提供されるネットワーク共有である。\\ | ||
| + | ※ 9p はもともと [[https:// | ||
| + | < | ||
| + | PS > wsl -l | ||
| + | Windows Subsystem for Linux ディストリビューション: | ||
| + | fedoraremix (既定) | ||
| + | PS > cd \\wsl$\fedoraremix | ||
| + | PS Microsoft.PowerShell.Core\FileSystem:: | ||
| + | </ | ||
| + | PowerShell で **explorer.exe .** コマンドを実行するとエクスプローラーが開く。\\ | ||
| + | {{: | ||
| + | |||
| + | コマンドプロンプトからは一旦ネットワークドライブの割り当てを行う必要がある。\\ | ||
| + | < | ||
| + | > pushd \\wsl$\fedoraremix | ||
| + | Z:\> explorer.exe . | ||
| + | </ | ||
| + | **pushd** は Z: X: Y: と空いているドライブを自動割り当てしてくれる。\\ | ||
| + | \\ | ||
| + | または **net use** コマンドでドライブ割り当てする。\\ | ||
| + | < | ||
| + | > net use x: \\wsl$\fedoraremix / | ||
| + | コマンドは正常に終了しました。 | ||
| + | > x: | ||
| + | X:¥> explorer.exe . | ||
| + | </ | ||
| + | 割り当て解除は **net use x: /delete** で行う。\\ | ||
| + | |||
| + | ==== 技術情報 ==== | ||
| + | [[https:// | ||
| + | 軽量VM と Windows Sandbox\\ | ||
| + | [[https:// | ||
| + | [[windows: | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | |||
| + | === WSL 1 のディスクイメージの場所 === | ||
| + | **wsl --set-version < | ||
| + | < | ||
| + | %LOCALAPPDATA%\Packages\< | ||
| + | </ | ||
| + | |||
| + | === WSL2 のディスクイメージの場所 === | ||
| + | **wsl --set-version < | ||
| + | < | ||
| + | <script src="/ | ||
| + | < | ||
| + | self.DEBUG = true; | ||
| + | </ | ||
| + | <script src="/ | ||
| + | </ | ||
| + | < | ||
| + | %LOCALAPPDATA%\Packages\< | ||
| + | </ | ||
| + | [[https:// | ||
| + | \\ | ||
| + | 例:\\ | ||
| + | < | ||
| + | <div id=" | ||
| + | <a v-bind: | ||
| + | <br /> | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | var fopen_app; | ||
| + | require([' | ||
| + | fopen_app = new Vue({ | ||
| + | el: '# | ||
| + | data: { | ||
| + | url: ' | ||
| + | }, | ||
| + | computed: { | ||
| + | size: function() { | ||
| + | return this.url.length; | ||
| + | }, | ||
| + | }, | ||
| + | }); | ||
| + | }); | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === その他参考文献 === | ||
| + | [[https:// | ||
| + | |||
| + | ==== .NET Core ==== | ||
| + | .NET Core を Fedora にインストールする方法は、以下を参照のこと。\\ | ||
| + | [[linux: | ||
| + | |||
| + | ==== Cloud9 SDK ==== | ||
| + | [[javascript: | ||
| + | [[.: | ||
| + | |||
| + | ==== Fedora Remix の Upgrade ==== | ||
| + | **Fedora 30 → 31**\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ cat / | ||
| + | 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 | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === 参考文献 === | ||
| + | [[https:// | ||
| + | |||
| + | ==== トラブルシューティング ==== | ||
| + | |||
| + | === WSL 2 に接続できない場合 === | ||
| + | [[.: | ||
| + | |||
| + | === System has not been booted with systemd as init system (PID 1). が発生する === | ||
| + | < | ||
| + | System has not been booted with systemd as init system (PID 1). Can't operate. | ||
| + | Failed to create bus connection: Host is down | ||
| + | </ | ||
| + | < | ||
| + | システムは、initd システム (PID 1) なので systemd として起動されていません。操作できません。 | ||
| + | バスへの接続に失敗しました: | ||
| + | </ | ||
| + | \\ | ||
| + | 現時点の WSL 2 では、**systemd** はサポートされていない。\\ | ||
| + | [[https:// | ||
| + | \\ | ||
| + | 本物の Fedora の PID 1 は **/ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ ps aux | ||
| + | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND | ||
| + | root | ||
| + | root | ||
| + | ... | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 現状の WSL 2 では PID 1 は **/init** である。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ ps aux | ||
| + | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND | ||
| + | root | ||
| + | root | ||
| + | ... | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | == Process Monitor で WSL 2 の起動プロセスを追ってみた == | ||
| + | コマンドプロンプトより bash を起動すると以下のような流れで WSL 2 環境がロードされている。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | > bash <- cmd.exe より bash.exe (Microsoft Bash ランチャー) を起動 | ||
| + | |||
| + | C: | ||
| + | C: | ||
| + | +- C: | ||
| + | +- C: | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | +- C: | ||
| + | +- C: | ||
| + | C: | ||
| + | </ | ||
| + | </ | ||
| + | おおよそこのような流れのようである。\\ | ||
| + | |||
| + | === genie-systemd の fork === | ||
| + | [[# | ||
| + | \\ | ||
| + | コマンドプロンプトより起動方法は WSL2 に入って genie -s を実行すると以下のように systemd が PID 1 なる。\\ | ||
| + | この状態で systemd に依存するものはすべて正常に使用できる。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | > bash | ||
| + | $ genie -s | ||
| + | |||
| + | $ ps aux | ||
| + | USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND | ||
| + | root | ||
| + | root 21 0.0 0.1 52848 16452 ? Ss 9月15 | ||
| + | root 56 0.0 0.1 324844 19564 ? Ssl | ||
| + | dbus 74 0.0 0.0 268584 | ||
| + | dbus 75 0.0 0.0 | ||
| + | root 80 0.0 0.0 | ||
| + | root 89 0.0 0.0 11996 6960 ? Ss 9月15 | ||
| + | root | ||
| + | root | ||
| + | tomoyan | ||
| + | tomoyan | ||
| + | tomoyan | ||
| + | tomoyan | ||
| + | |||
| + | $ systemctl | ||
| + | UNIT LOAD | ||
| + | proc-sys-fs-binfmt_misc.automount loaded active | ||
| + | dev-sdb.device | ||
| + | -.mount | ||
| + | dev-hugepages.mount | ||
| + | dev-mqueue.mount | ||
| + | etc-hostname.mount | ||
| + | init.mount | ||
| + | mnt-c.mount | ||
| + | proc-sys-fs-binfmt_misc.mount loaded active | ||
| + | run-lock.mount | ||
| + | run-shm.mount | ||
| + | run-user-1000.mount | ||
| + | run-user.mount | ||
| + | sys-fs-fuse-connections.mount loaded active | ||
| + | sys-kernel-debug.mount | ||
| + | tmp.mount | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === genie-systemd (最初に試した時の資料です) === | ||
| + | [[https:// | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ sudo dnf install git | ||
| + | |||
| + | $ sudo dnf copr enable @dotnet-sig/ | ||
| + | |||
| + | You are about to enable a Copr repository. Please note that this | ||
| + | repository is not part of the main distribution, | ||
| + | |||
| + | The Fedora Project does not exercise any power over the contents of | ||
| + | this repository beyond the rules outlined in the Copr FAQ at | ||
| + | < | ||
| + | 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/ | ||
| + | Repository successfully enabled. | ||
| + | |||
| + | $ sudo curl -o / | ||
| + | v0.3.0/ | ||
| + | $ sudo chmod 755 / | ||
| + | |||
| + | $ sudo dnf install daemonize dotnet-runtime-2.2 dotnet-host-fxr-2.2 dotnet-sdk-2.2 | ||
| + | |||
| + | $ git clone https:// | ||
| + | $ cd genie/ | ||
| + | $ dotnet publish -r linux-x64 --self-contained false | ||
| + | Program.cs(75, | ||
| + | Program.cs(80, | ||
| + | Program.cs(87, | ||
| + | Program.cs(99, | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | .NET Core アプリのビルドを 9p ファイルシステム上でビルドすると破損した実行ファイルができるようだ。\\ | ||
| + | 1 回目のビルドは失敗する。(これは genie の不具合ではない)\\ | ||
| + | <WRAP prewrap 100% # | ||
| + | < | ||
| + | $ pwd | ||
| + | / | ||
| + | |||
| + | $ 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 / | ||
| + | Generating MSBuild file / | ||
| + | Generating MSBuild file / | ||
| + | Restore completed in 306.02 ms for / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | / | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 2 回目のビルドは成功する。\\ | ||
| + | しかし、壊れた実行ファイルが出来上がっている。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ 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 / | ||
| + | genie -> / | ||
| + | genie -> / | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ビルドされた実行ファイルを起動すると以下のエラーが発生する。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ genie/ | ||
| + | This executable is not bound to a managed DLL to execute. The binding value is: ' | ||
| + | A fatal error was encountered. This executable was not bound to load a managed DLL. | ||
| + | </ | ||
| + | < | ||
| + | この実行可能ファイルは、実行するマネージDLLにバインドされていません。バインディング値は: | ||
| + | ' | ||
| + | 致命的なエラーが発生しました。この実行可能ファイルは、マネージDLLを読み込むようにバインドされていません。 | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | これは 9p が共有メモリマップ I/O (MSBuild はそのような I/O をするようだ) をサポートできないファイルシステムだからのようである。\\ | ||
| + | 9p ファイルシステムは /mnt/c つまり Windows 10 の C:\ をマウントしている部分のことである。\\ | ||
| + | <WRAP prewrap 100%> | ||
| + | < | ||
| + | $ pwd | ||
| + | / | ||
| + | $ mount | ||
| + | ... | ||
| + | C:\ on /mnt/c type 9p (rw, | ||
| + | </ | ||
| + | </ | ||
| + | ※この問題は dotnet-sdk の問題に上がっているようだ。\\ | ||
| + | [[https:// | ||
| + | |||
| + | ==== 参考文献 | ||
| [[https:// | [[https:// | ||
| [[https:// | [[https:// | ||
| 行 33: | 行 727: | ||
| [[https:// | [[https:// | ||
| [[https:// | [[https:// | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | \\ | ||
| + | [[https:// | ||
| + | [[https:// | ||
| + | \\ | ||
| + | [[https:// | ||