WSL を使って Windows10 上で Linux を動かす

Windwos10の新機能 WSL を使って、Windows上でLinuxを動かしてみましたので手順を記載します。

WSLとは?

WSL(Windows Subsystem for Linux)は、Windows10またはWindows Server上で、Linuxの実行ファイルをネイティブ実行するための互換レイヤーです。

2017年12月のWindows Update「Windows 10、バージョン 1709 の機能更新プログラム。」にて正式版がリリースされました。

本記事の手順を流すためには、Windows10で、2017年12月以降にWindows Updateを実行しておく必要があります。

Windows上でLinuxやLinuxぽいものを使うほかの選択肢

WSL以外にもWindows上でLinuxコマンドを動かす方法はあります。

  1. cygwin
  2. MSYS
  3. VMWare/VirtualBox等

ざっくり解説としては、

  1. cygwinはLinuxの各アプリケーションをWindowsに移植しやすくしたライブラリを軸に、多数のLinuxパッケージがWindows用に移植され利用することができるものです。
  2. MSYSはcygwinよりも最低限のよくつかうコマンド群に絞ってWindowsへ移植し、cygwinよりもよりWindowsに最適化、軽量化されています。
  3. VMWare等仮想化技術を用いる方法は、Windows上で仮想的なハードウェアのインスタンスを作り、その仮想ハードウェアにLinuxをインストールして動かす方法です。

cygwinやMSYSがWindows用に再コンパイルされたWindows用の実行ファイルで構成されているのに対し、WSLは、Linux用にコンパイルされた実行ファイル(ELF形式)をそのままWindows上で実行することができます。

VMWareを使ってWindows上でLinuxを動作させる方法と比べて、より軽快にWindowsとLinuxを連携させて動作させることができます。

emacsもサクサク動く

余談ですが、なんで WSL を使おうと思ったかというと、 Windows上でLinux系コマンドを使いたいというのはもちろんですが、 emacs を使いたかったからです。

導入手順

以下の手順でWSL上にUbuntu環境を導入します。

  1. WSLの有効化
  2. WindowsストアからUbuntuをゲット(無料)
  3. 初回起動
  4. ネットワークの設定
  5. 更新: apt-get update
  6. シンボリックリンク作成
  7. 色を見やすく
  8. おまけ: emacsをインストール

1. WSLの有効化

  • (1). Windows10のWindowsメニューアイコンを右クリックします。

  • (2). 「プログラムと機能」をクリック。

  • (3). 「Windowsの機能の有効化または無効化」をクリック。

  • (4). 「Windows Subsystem for Linux」にチェックを入れる。

  • (5). 「OK」をクリック。
  • (6). 「今すぐ再起動」をクリック。

2. WindowsストアからUbuntuをゲット(無料)

  • (7). Windowsメニューから「Microsoft Store」を起動。

  • (8). 検索用の「🔎虫メガネ」ボタンを押す。

  • (9). 検索ワードとして「Linux」を入力し、表示された候補から「Windwos で Linux を実行する」をクリック。

  • (10). 利用できるLinuxディストリビューションのうち、今回は普及率が高い Ubuntu を使ってみます。Ubuntuをクリック。

  • (11). 「入手」をクリックしてWSLで動く Ubuntu のダウンロードを開始。

3. 初回起動

初回起動時は、普段使用するUbuntuのユーザ名とそのパスワードを設定します。

  • (12). ユーザ名を入力してEnter。
  • (13). パスワードを入力してEnter。
  • (14). 同じパスワードを再入力してEnter。

4. ネットワークの設定

  • (15). DNSサーバアドレスの確認

いつも使用しているネットワークにWindows10マシンを接続した状態で、 コマンドプロンプトを起動し、

  • netsh interface ip show dnsservers

を実行。 表示されるDNSサーバのアドレスを確認し、以下の【DNSサーバアドレス】の箇所に記入

  • (16). Ubuntu上で以下を入力。

    • sudo rm /etc/resolv.conf
    • echo nameserver 【DNSサーバアドレス】 | sudo tee /etc/resolv.conf
    • sudo /etc/init.d/networking restart

解説

私が試した環境では、WSL上のUbuntuを初回起動すると、 IPアドレスとゲートウェイはWindowsと同様の設定が自動的に設定されていましたが、 DNSサーバが設定されていない状態でした。

そういう不具合があるようです。(2017年12月現在)

このため、pingで実アドレスを指定するとpingが通りますが、 ホスト名を指定すると名前解決できずpingが通らない状態となります。

これでまず何が困るかというと、後述の手順の apt-get が使えません。 apt-getではネット上の更新用サーバへホスト名でアクセスするので、 その名前解決が出来ずサーバへアクセスできないのです。

手動でDNSサーバを設定するには、/etc/resolv.confを編集します。

ですが、WSL上のUbuntuでは、初期設定では、

/etc/resolv.conf は /run/resolvconf/resolv.conf へのシンボリックリンクとなっており、

WSL上のUbuntuを起動するたびに、毎回自動的に生成されます。

なので、DNSサーバを設定しても、exitでログアウトして再度ウインドウを起動すると、 設定が元に戻ってしまいます。

これを避けるため、上記の手順では一度シンボリックリンクを削除し、 実ファイルとして/etc/resolv.confを生成しています。

5. 更新: apt-get update

  • (17). 各種パッケージを更新するためUbuntu上で下記コマンドを実行します。

    • sudo apt-get -y update

解説

後ほど、apt-getで必要なパッケージをインストールしたいのですが、 その前に、updateしておかないと インストール済みの古いパッケージに依存した状態でインストールが試みられ、 サーバに古いバージョンのパッケージが残っておらずインストールに失敗することがあります。 このため、インストール済みのパッケージ一式をapt-get updateで最新状態に更新します。

6. シンボリックリンク作成

・Windows上のフォルダへアクセスしやすくする。

WSL上のLinuxから、Windows上のCドライブを参照するには、/mnt/c/ でアクセス可能です。 なので、Windows上の各ユーザのホームフォルダ上の各フォルダには 以下でアクセスすることができます。

  • /mnt/c/User/(ユーザネーム)/Desktop
  • /mnt/c/User/(ユーザネーム)/Downloads
  • /mnt/c/User/(ユーザネーム)/Documents

しかし、これらのフォルダにアクセスするために上記をいちいち書くのは面倒なので、 アクセスしやすいように、

  • (18). Linux上のホームフォルダに上記フォルダへのシンボリックリンクを作成します。

    • ln -s /mnt/c/User/(ユーザネーム)/Desktop ~/Desktop
    • ln -s /mnt/c/User/(ユーザネーム)/Downloads ~/Downloads
    • ln -s /mnt/c/User/(ユーザネーム)/Documents ~/Documents

他にも良く使うフォルダがあれば上記の様にLinux上のホームフォルダに シンボリックリンクを作成すると良いでしょう。

7. 色を見やすく(この手順飛ばしてもOK)

  • デフォルトだと文字の色が薄暗くて見づらいので色を変えます。

  • (19). WSL のウインドウの上部を右クリック

  • (20). 表示されたコンテキストメニューの「プロパティ」をクリック
  • (21). 「画面の色」タブをクリック

  • (22).各色を選択し、以下のようにRGB値を変更する。

初期RGB値 変更後RGB値
黒色 0,0,0 変更なし
暗青 0,0,128 0,96,224
暗緑 0,128,0 0,224,0
暗水 0,128,128 0,224,224
暗赤 128,0,0 224,64,64
暗紫 128,0,128 224,0,224
暗黄 128,128,0 224,224,0
灰色 192,192,192 224,224,224
暗灰 128,128,128 変更なし
青色 0,0,255 変更なし
緑色 0,255,0 変更なし
水色 0,255,255 変更なし
赤色 255,0,0 変更なし
紫色 255,0,255 変更なし
黄色 255,255,0 変更なし
白色 255,255,255 変更なし

8. emacsをインストール(この手順飛ばしてもOK)

  • (23). テキストエディタ emacs を使いたい場合は以下のようにしてインストールします。

    • sudo apt-get -y install emacs24

解説

Windows上でemacsを動かす方法はいくつかあるのですが、昨今はなんだか整理されてない状態で、 どれもいまいちうまく動かせない状態が続いていました。

  • Meadowを使う。
    • 開発止まってる。MSYSかCygwinと組み合わせて使う必要あり。
  • gnupackを使う。
    • Diredやshell等を起動しようとするとvForkエラーでうまく動かないことがある。
  • VMWare上のLinuxでemacsを使う。
    • 重いし、Windowsフォルダにアクセスできるようにする設定が面倒。

今回の WSL でWindows上でUbuntuを動かし、そこでemacsを動かす方法を試してみた感想です。

  • Windows上できちんと動くemacsを少ない手順で導入できるので、他の方法よりもオススメだと思います。
  • 下記の点は少し残念ですが、まあ許容範囲。

    • emacsのウインドウにWindows上のファイルをドラッグ&ドロップで開くことができない。(Meadowやgnupackならできる)
    • Dired画面からWindowsに関連付けれたアプリでファイルを開く。(Meadowでは出来る)
    • 最小化から復帰した時や、emacs上でスクロールしたときに、たまにemacs上の表示が崩れる。(CTRL+Lを押して再表示すると直る)
Joh

見た目はオヤジ、頭脳は小学生、迷宮入りの迷探偵、真実はいまひとつ!

※記事の内容は保証はしておりません(執筆時期や実施環境により挙動が変わるものがある為)。
別途検証してご利用いただくことをおすすめいたします。