差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン両方とも次のリビジョン | ||
windows:wsl [2019/09/13 23:34] – ともやん | windows:wsl [2019/09/17 08:05] – [WSL 2 ファイルシステムへのアクセス] ともやん | ||
---|---|---|---|
行 10: | 行 10: | ||
====== 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/ | ||
行 26: | 行 27: | ||
===== インストール ===== | ===== インストール ===== | ||
[[.: | [[.: | ||
+ | |||
+ | ===== 日本語環境に設定 ===== | ||
+ | 標準のインストールだと日本語が **□** に文字化けする。\\ | ||
+ | これはターミナルのフォントが日本語フォントになっていない為である。\\ | ||
+ | <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% #result> | ||
+ | < | ||
+ | $ 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 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 | ||
+ | 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 は **/init** である。\\ | ||
+ | <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:// | ||
+ | 今後 Microsoft によって systemd が有効化される可能性はあると思う。\\ | ||
+ | しかし、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:// | ||
+ | \\ | ||
+ | この 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= | ||
+ | $ sudo -s | ||
+ | [sudo] tomoyan のパスワード: | ||
+ | </ | ||
+ | < | ||
+ | |||
+ | === 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 - これは以下の理由により入れても使えない。**\\ | ||
+ | < | ||
+ | $ cat / | ||
+ | cat: / | ||
+ | </ | ||
+ | |||
+ | **lsusb**\\ | ||
+ | < | ||
+ | $ sudo dnf install usbutils -y | ||
+ | </ | ||
+ | |||
+ | **mkpasswd** … など\\ | ||
+ | < | ||
+ | $ sudo dnf install expect -y | ||
+ | </ | ||
+ | |||
+ | **rsync**\\ | ||
+ | < | ||
+ | $ sudo dnf install rsync -y | ||
+ | </ | ||
+ | |||
+ | ===== WSL 2 ファイルシステムへのアクセス ===== | ||
+ | WSL 2 のファイルシステムへのアクセスは PowerShell で **\\wsl$\< | ||
+ | < | ||
+ | PS > wsl -l | ||
+ | Windows Subsystem for Linux ディストリビューション: | ||
+ | fedoraremix (既定) | ||
+ | PS > cd \\wsl$\fedoraremix | ||
+ | PS Microsoft.PowerShell.Core\FileSystem:: | ||
+ | </ | ||
+ | PowerShell で **explorer.exe .** コマンドを実行するとエクスプローラーが開く。\\ | ||
+ | {{: | ||
+ | |||
+ | ===== Cloud9 SDK ===== | ||
+ | [[javascript: | ||
+ | |||
+ | ==== Node.js のインストール ==== | ||
+ | nodebrew をインストールする。 | ||
+ | < | ||
+ | $ curl -kL git.io/ | ||
+ | % Total % Received % Xferd Average Speed | ||
+ | | ||
+ | 0 | ||
+ | 0 | ||
+ | 0 | ||
+ | 100 24634 100 24634 0 | ||
+ | Fetching nodebrew... | ||
+ | Installed nodebrew in $HOME/ | ||
+ | |||
+ | ======================================== | ||
+ | Export a path to nodebrew: | ||
+ | |||
+ | export PATH=$HOME/ | ||
+ | ======================================== | ||
+ | </ | ||
+ | |||
+ | 指示にしたがってパスを設定する。 | ||
+ | < | ||
+ | $ vi ~/.bashrc | ||
+ | </ | ||
+ | < | ||
+ | # User specific aliases and functions | ||
+ | export PATH=$HOME/ | ||
+ | </ | ||
+ | < | ||
+ | $ source ~/.bashrc | ||
+ | </ | ||
+ | |||
+ | **node.js バイナリをインストール**\\ | ||
+ | インストール可能なバージョンを調べる。 | ||
+ | < | ||
+ | $ nodebrew ls-remote | ||
+ | 〜省略〜 | ||
+ | v12.7.0 | ||
+ | 〜省略〜 | ||
+ | </ | ||
+ | |||
+ | バージョンを指定してバイナリをインストールする。 | ||
+ | <WRAP prewrap 100%> | ||
+ | < | ||
+ | $ nodebrew install-binary v12.10.0 | ||
+ | Fetching: https:// | ||
+ | ######################################################################### | ||
+ | Installed successfully | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | 利用するバージョンを指定する。 | ||
+ | < | ||
+ | $ nodebrew use v12.10.0 | ||
+ | use v12.10.0 | ||
+ | </ | ||
+ | |||
+ | 動作確認を行う。 | ||
+ | < | ||
+ | $ nodebrew use v12.10.0 | ||
+ | use v12.10.0 | ||
+ | $ node -v | ||
+ | v12.10.0 | ||
+ | </ | ||
+ | |||
+ | ==== その他依存パッケージのインストール ==== | ||
+ | < | ||
+ | $ sudo dnf install python2 gcc | ||
+ | </ | ||
+ | |||
+ | ==== Cloud9 SDK のインストール ==== | ||
+ | github より Cloud9 SDK をダウンロードする。\\ | ||
+ | < | ||
+ | $ git clone https:// | ||
+ | </ | ||
+ | |||
+ | Cloud9 SDK をビルドする。\\ | ||
+ | < | ||
+ | $ cd c9sdk | ||
+ | $ ./ | ||
+ | </ | ||
+ | |||
+ | Cloud9 SDK を実行する。\\ | ||
+ | < | ||
+ | $ node server.js -p 8080 -a : | ||
+ | </ | ||
+ | [[http:// | ||
+ | WSL 2 では localhost 問題も解決しており http:// | ||
+ | {{: | ||
+ | |||
+ | ===== トラブルシューティング ===== | ||
+ | |||
+ | ==== 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/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% #result> | ||
+ | < | ||
+ | $ 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:// | ||
===== 参考文献 ===== | ===== 参考文献 ===== |