プロジェクト

全般

プロフィール

Windows Subsystem for Linuxの概要

Windowsのカーネルとサブシステム

現在のWindows OSのカーネルは、Windows NT系の発展で、当初(Windows NT 3.x)はマイクロカーネル方式の設計をしていました。Windows OSの主要機能は、Windowsサブシステムで実現されています。マイクロカーネル方式はオーバーヘッドが大きく性能が出にくいため、Windows NT 4.0以降ではグラフィックス機能などがカーネルに移されモノリシック方式に移行しています。しかし、カーネルとサブシステムによる構成はそのまま残っており、これがUNIX/Linuxサブシステムの追加を可能にしています。

UNIXサブシステム

過去、Windows Services for UNIX(SFU)というLinux環境をPOSIXサブシステム上で提供する機能がありました。その後継のSubsystem for Unix Application(SUA)もありました。Windowsサブシステムとは別のサブシステム上で動作するので、Windowsサブシステムの機能は利用できません。

このSFUやSUAはUNIXですがLinuxとは異なるものです。

Linuxサブシステム

Windows 10では2016年夏に新たにLinux環境を提供するWindows Subsystem for Linux(WSL)が開発者向け(ベータ版)として追加され、2017年秋のWindows 10更新から正式機能となりました。Windows OSの機能(サブシステム)としてのWSLと、Linux環境部分と2つに分かれて提供されており、後者はWindowsストアから好みのLinux環境(2017年10月末時点ではUbuntu、openSUSE、SUSE Enterprise Linuxの3つが提供、今後Fedoraが提供予定)を選択してインストールします。ELF64形式のバイナリファイルをそのまま実行し、LinuxカーネルへのシステムコールをWindows NTカーネルへの呼び出しに変換します。
ファイルシステムは、NTFS上にLinuxの属性を追加するVoIFsと、Windows側のファイルシステムを参照するDriveFxが用意されています。

参考

https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/

インストール/アンインストール

ベータ版のときの記載です。

機能の有効化

  • [スタートメニュー]を右クリック > [プログラムと機能]で、左側ペインの[Windowsの機能の有効化または無効化]をクリック
  • [Windows Subsystem for Linux (Beta)]にチェックを付け、[OK]をクリック
  • インストールが実行、終わったら[今すぐ再起動]ボタンをクリック
  • 再起動後、[スタートメニュー] > [設定] > [更新とセキュリティ]で、左側ペインの[開発者向け]を選択、右側ペインの[開発者モード]にチェックを付け

インストール

管理者権限でコマンドプロンプトを起動し、以下を実行します。(以下はベータ版のときの結果)

C:\WINDOWS\system32>lxrun /install
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms

続行するには、"y" を入力してください:
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: torutk
新しい UNIX パスワードを入力してください: ********
新しい UNIX パスワードを再入力してください: ********
passwd: password updated successfully
インストールが正常に終了しました

アンインストール

管理者権限でコマンドプロンプトを起動し、以下を実行します。

C:\> lxrun /uninstall /full
C:\WINDOWS\system32>lxrun /uninstall
これにより Windows 上の Ubuntu がアンインストールされます。
Ubuntu 環境および次の項目を除くすべての変更内容と新しいアプリケーションが削除されます。

C:\Users\torutk\AppData\Local\lxss\home
C:\Users\torutk\AppData\Local\lxss
oot

続行するには、"y" を入力してください:
アンインストールしています...

C:\WINDOWS\system32>

設定

ホスト名

デフォルトでは、コンピュータ名がホスト名になっています。

~$ hostname
NUBIUM

~$ sudo vi /etc/hosts

192.168.1.23 nubium

/etc/hosts に、ホスト名とIPアドレスを記載します。

リポジトリを日本のサーバーに変更

/etc/apt/sources.list を修正

-deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
-deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
-deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse
-deb http://security.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
+deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty main restricted universe multiverse
+deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-updates main restricted universe multiverse
+deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-backports main restricted universe multiverse
+deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu trusty-security main restricted universe multiverse

リポジトリ情報をapt updateで更新し、パッケージのアップデートをapt upgradeで実施します。

~$ sudo apt update
~$ sudo apt upgrade

雑記

コマンドプロンプト

  • Cmder を使う
    デフォルトのコンソールはほぼコマンドプロンプトなので使い勝手がよくないので、いろいろ探してみたときに、タブ対応もするコマンドプロンプト互換なツールCmderを見つけました。
    http://cmder.net/

Windowsのドライブを参照する

Windowsのシステムドライブ(Cドライブ)以外のドライブ

デフォルトでは、Windowsのシステムドライブ(Cドライブ)が、/mnt/c にマウントされています。それ以外のドライブがある場合、WSL側から参照するにはmountを実行します。以下はDドライブ(NTFS)をマウントする例です。

~$ sudo mkdir /mnt/d
~$ sudo mount -t drvfs D: /mnt/d

クリップボードから画像を追加 (サイズの上限: 1 GB)