WSLを導入してみた

結論:

1. WSLの導入はストアからでは駄目(戒め)。コマンドプロンプトからやりなさい。

 

WSLの導入

WSL とは何ぞ?

Bash on Ubuntu on Windows という長ったらしい名前の、要は「Windows上で動く、Ubuntuが備えるbashというシェル環境のエミュレータ、のような何か」が Windows Subsystem for Linux というなんかカッコイイ名前に変わり、「UbuntuのみならずFedoraopenSUSEも動くようになった」凄いやつ。

2017年のWindows Fall Creators Update という、1年に2回開催される大型アップデート祭りのようなものをきっかけに脱βバージョン化した。今までInsider Previewでないと動かせなかったものが正式にWSLとしてお披露目され、一般ユーザーにも広く提供されることになった。

 

WSL有効化のための参考資料

msdn.microsoft.com 

掻い摘んでWSL導入の説明

Cortanaの検索欄に「機能の」と入れると、おそらく検索候補に「Windowsの機能の有効化または無効化」と出てくるのでそれを選択。

そこから「Windows Subsystem for Linux」のチェックボックスにチェックマークを入れて閉じる。

再起動を求められるので再起動。

再起動後コマンドプロンプトを起動。

lxrun /install

Ubuntuのインストールが開始される。

openSUSEFedoraをインストールしたい場合は各自調べてね。

万一環境を弄くりすぎてわけわかめな状態に陥った場合は、以下のようにしてリセットできる。これは気軽でよいリセット。

lxrun /uninstall /full

ちなみにlxrun だけを入力するとヘルプが出現する。

lxrunにはオプションを付けないと実行できない。

 

なぜストアからではなくコマンドプロンプトからなのか?と疑問に対する答えは先頭で述べた通りで、「手間を掛けずに日本語環境をインストールできるから」である。コマンドプロンプトから起動するとWindows側のロケールを検出し、それに合わせてWSL上のロケールも勝手に設定してくれるのだ。

暫く待つとインストールが終わる。HDDやSSDを読み込んでいないのになかなかコマンドラインが変化しない場合は、単にファイルのダウンロード中か、それともコマンドプロンプトそのものがポンコツだからエンターキーを押さないと次の画面状態に変化してくれない、という状態にある。エンターキーを押してとりあえずコマを進めよう。

以上の点は意外と時間を無駄に使ってしまう罠ポイントなので注意。

 

以下コマンドプロンプトに表示された文字列

 

Microsoft Windows [Version 10.0.16299.19]
(c) 2017 Microsoft Corporation. All rights reserved.

C:\WINDOWS\system32>lxrun /uninstall /full
警告: lxrun.exe は、Linux ディストリビューションのためにレガシ Windows サブシステムを構成するだけに使用されます。
ディストリビューションは次の Windows ストアを訪問してインストールすることができます:
https://aka.ms/wslstore

これにより Windows 上の Ubuntu がアンインストールされます。
Ubuntu 環境およびすべての変更内容、新しいアプリケーション、およびユーザー データが削除されます。
続行するには、"y" を入力してください: y
アンインストールしています...
Windows Subsystem for Linux でインストール、アンインストール操作が保留中です。

C:\WINDOWS\system32>lxrun /install
警告: lxrun.exe は、Linux ディストリビューションのためにレガシ Windows サブシステムを構成するだけに使用されます。
ディストリビューションは次の Windows ストアを訪問してインストールすることができます:
https://aka.ms/wslstore

これにより WindowsUbuntu がインストールされます。UbuntuCanonical によって配布される製品であり、次のサイトに示さ れる条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
UbuntuロケールWindowsロケール (ja-JP) と一致するように設定しますか?
既定のロケールは en_US です。
続行するには、"y" を入力してください: y

既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: <ユーザー名>
Enter new UNIX password: <パスワード>
Retype new UNIX password: <パスワード再入力>
passwd: password updated successfully
インストールに成功しました!
ドキュメントはこちらで参照できるます: https://aka.ms/wsldocs

C:\WINDOWS\system32>

 

 「ドキュメントはこちらで参照できるます」うーん、愛らしい間違い。

 

aptのミラーサーバ選択

早速apt-get install で…と行きたいところだが、UbuntuDebianといった、aptを使っている人にとっては恒例のapt-getのミラーサーバ選択・更新を行う。やるべきことは 「" /etc/apt/sources.list" にかかれているミラーサーバの問い合わせ先の変更」、または 「 " /etc/apt/sources.list.d/ "ディレクトリに、 sources.list と同じ形式で日本のapt-getミラーサーバについて書いたファイルを置く」かのどちらか。

何言ってるかわからないと思うので以下を見てみてほしい。

mstn.hateblo.jp

 

で、apt-get update。

 

WSLとVisual Studioの連携

 

blogs.msdn.microsoft.com

この点はここに従っておくべし。公式だから。

 

とりあえず、MSDNのブログに書かれていることを続けていけば問題なく動作してくれるはずなので後は任せた。

 

とりあえず試してみる。

上記のサイトのとおりに設定したあとにとりあえずデバッグを行ってみると、以下のようなエラーが得られた。

=thread-group-added,id="i1"
GNU gdb (GDB) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-pc-mingw32 --target=x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
=cmd-param-changed,param="pagination",value="off"
Loaded 'shared libraries loaded at this time.'. Cannot find or open the symbol file.
Stopped due to shared library event:
Inferior loaded /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
Loaded '/lib/x86_64-linux-gnu/libc.so.6'. Cannot find or open the symbol file.
Loaded '/lib64/ld-linux-x86-64.so.2'. Cannot find or open the symbol file.
[Inferior 1 (process 943) exited normally]
プログラム '' はコード 0 (0x0) で終了しました。

 

問題の詳細とその解決方法は以下に書かれている。

github.com

曰く、"gdbserver"の代わりに"gdb"を利用するといいとのこと…

なんだかなぁ…シンボリックリンクが上手く機能していないだけなように思えるのだけど…(<-これは素人目の意見です)

 

2017/12/28 更新

gdbserverの場合でも、ブレークポイントを設定してあげればエラーを吐かないことが確認されました。

 

 

(じゃぁ一体何が原因なの…)

 

この問題対処にかなり時間を溶かしてしまったので、

この問題には以降一切触れない。