Windows Subsystem for Linux(WSL)の概要¶
WSLとWSL2の経緯¶
Windows Subsystem for Linuxは、Windows OS上でLinux環境を提供する機能で、Windows 10の途中バージョンから導入されました。
最初に提供された WSLは、OSのコアをWindowsカーネルとLinuxサブシステムの対で実現し、LinuxカーネルをWindowsカーネルで模擬する構造でした。しかし、十分な模擬ができず、また性能も劣っていたので、仮想マシン(Hyper-V)でLinuxカーネルを動かす構造を持つWSL2が登場しました。
WSL2は、さらにGUIをサポートする追加がなされ、GUIを持つLinuxアプリケーションをWSL2上で動かし、Windowsデスクトップ上にそのウィンドウを表示することが可能になりました。
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/
WSL 2 におけるLinuxカーネル¶
2020年にリリースされたWSL 2は、これまでのWSLとは異なり、仮想マシン上にLinuxカーネルを置く構造になりました。
仮想マシンはHyper-V ハイパーバイザー上で動作する軽量LinuxユーティリティVMで、Linuxカーネル(WSL2パッチ)が動作します。
この軽量LinuxユーティリティVM上にWSL2のLinuxディストリビューションのユーザーランドが動く構造です。
Hyper-V仮想マシンは従来はWindows 10のHomeエディションではサポートされていませんでしたが、WSL2の仮想マシンはHomeエディションでもサポートされています。
軽量といえども仮想マシンとなるので、Windowsカーネルとは別にLinuxカーネルが動作し、ネットワーク的にも別マシンとして扱われます。
インストール/アンインストール¶
Windows 10¶
WSL(WSL 1)の有効化¶
- [スタートメニュー]を右クリック > [アプリと機能] で下側にある [プログラムと機能]をクリック、左側ペインの[Windowsの機能の有効化または無効化]をクリック
- 「Windowsの機能」ダイアログで次の項目にチェックを付ける
- [Linux用Windowsサブシステム]
- インストールが実行、終わったら[今すぐ再起動]ボタンをクリック
WSL 2の有効化¶
WSLの有効化に加えて、
- [スタートメニュー]を右クリック > [アプリと機能] で下側にある [プログラムと機能]をクリック、左側ペインの[Windowsの機能の有効化または無効化]をクリック
- 次の項目にチェックを付け、[OK]をクリック
- [Hyper-V]
- [仮想マシンプラットフォーム]
- インストールが実行、終わったら[今すぐ再起動]ボタンをクリック
WSL 2では、Hyper-Vを活用したコンテナ環境で動作するため、Hyper-Vの機能および仮想マシンプラットフォームを有効にします。
Windows 11(WSL 2)¶
Windows 11は標準でwslコマンドを搭載しているので、wslコマンドでユーザーランドのLinuxディストリビューションをインストール可能です。
- 管理者権限でWindowsターミナルを起動
- オンラインで提供されるLinuxディストリビューションの一覧を見る
> wsl --list --online インストールできる有効なディストリビューションの一覧を次に示します。 既定の分布は ' * ' で表されます。 'wsl --install -d <Distro>'を使用してインストールします。 NAME FRIENDLY NAME * Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_7 Oracle Linux 8.7 OracleLinux_9_1 Oracle Linux 9.1 openSUSE-Leap-15.5 openSUSE Leap 15.5 SUSE-Linux-Enterprise-Server-15-SP4 SUSE Linux Enterprise Server 15 SP4 SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5 openSUSE-Tumbleweed openSUSE Tumbleweed
初回のインストール¶
最初にWSL 2を使用するときは、OSの機能の有効化を伴うため、インストールの途中で再起動が要求されます。
PS > wsl --install -d Ubuntu インストール中: 仮想マシン プラットフォーム 仮想マシン プラットフォーム はインストールされました。 インストール中: Linux 用 Windows サブシステム Linux 用 Windows サブシステム はインストールされました。 インストール中: Ubuntu Ubuntu はインストールされました。 要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要が あります。
再起動すると、自動でターミナルが起動されます。
Ubuntu は既にインストールされています。 Ubuntu を起動しています... Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: torutk New password: xxxxxxxxxxxx Retype new password: passwd: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.133.1-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage This message is shown once a day. To disable it please create the /home/torutk/.hushlogin file.
WSLの更新¶
wslコマンドにupdateオプションを指定して更新します。
更新後のバージョンは、version オプションを指定して確認可能です。
C:\Users\torutk> wsl --update 更新プログラムを確認しています。 Linux 用 Windows サブシステムの最新バージョンは既にインストールされています。 PS > wsl --version WSL バージョン: 2.0.9.0 カーネル バージョン: 5.15.133.1-1 WSLg バージョン: 1.0.59 MSRDC バージョン: 1.2.4677 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows バージョン: 10.0.22621.2861
Linuxディストリビューションのインストール¶
openSUSE Leap 42 のインストール¶
本項の記述は少し古い openSUSE Leap 42 をインストールした時の記録です。
ストア上で、[openSUSE Leap 42]をクリックします。次に[入手]をクリックします。「複数のデバイスで使用する」ダイアログが出たら、とりあえず[必要ありません]をクリックして進めました。ダウンロードが終了すると、[起動]ボタンが出るのでクリックします。コマンド画面が表示され、
Installing, this may take a fiew minutes...
しばらくすると
Installation successful! Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: charlie
とユーザーアカウント名を聞いてくるので、Linuxで使用するユーザー名を入力します。
New password: ******** Retype new password: ******** passwd: password updated successfully Use same password for root user? Type "y" to approve, any other key to reject: y
パスワードを入力します。確認のためもう一度入力します。また、rootユーザーのパスワードを同一のものとするか聞いてきます。
Default UNIX user set to: charlie charlie@myhost:~>
Linux(bash)プロンプトが表示されます。スタートメニューの中に、[openSUSE Leap 42]が追加され、これを起動するとbashコマンドプロンプトが表示されます。
Linuxディストリビューションのアンインストール¶
T.B.D.
インストールディレクトリ¶
WSLのLinuxディストリビューションのインストールディレクトリは、インストール作業を実施したWindowsユーザー固有のディレクトリとなります。レジストリを調べて確認できます。
PS2> Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss
インストール時にはディレクトリを指定することができませんが、インストール後にLinuxイメージをエクスポートし、別なディレクトリにインポートする方法はあります。
Linuxディストリビューションのインストール先¶
OpenSUSEの場合の例です。
C:\Users\<ユーザー名>\AppData\Local\Packages\46932SUSE.openSUSELeap42.2.022rs5jcyhyac
Linuxのルートディレクトリは、この下の LocalState\rootfs\
になります。この下に、bin、boot、dev、etc、home、・・・とLinuxディストリビューションのディレクトリが並びます。
WSLのコンソールを起動するWindowsコマンド¶
C:\Users\<ユーザー名>\AppData\Local\Microsoft\WindowsApps\46932SUSE.openSUSELeap42.2.022rs5jcyhyac
このディレクトリの下に、openSUSE-42.exe ファイルが置かれています。
Ubuntu のインストール¶
C:\Users\torutk> >wsl --install ubuntu-22.04 インストール中: Ubuntu 22.04 LTS Ubuntu 22.04 LTS がインストールされました。 Ubuntu 22.04 LTS を起動しています... Installing, this may take a few minutes... Please create a default UNIX user account. The username does not need to match your Windows username. For more information visit: https://aka.ms/wslusers Enter new UNIX username: torutk New password: ********** Retype new password: ********** passwd: password updated successfully Installation successful! To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage This message is shown once a day. To disable it please create the /home/torutk/.hushlogin file.
ディストリビューション一覧の確認
C:\Users\torutk> wsl -l -v NAME STATE VERSION * Ubuntu-22.04 Running 2
ログインユーザーの設定¶
デフォルトでは、rootユーザーでログインする設定となっています。
変更:
設定¶
WSL¶
複数ディストリビューションの管理¶
一覧の表示¶
C:\>wslconfig /list Windows Subsystem for Linux ディストリビューション: openSUSE-42 (既定) openSUSE-Leap-15
規定のディストリビューションを変更¶
C:\>wslconfig /setdefault openSUSE-Leap-15 C:\>wslconfig /list Windows Subsystem for Linux ディストリビューション: openSUSE-Leap-15 (既定) openSUSE-42
OpenSUSE Leap¶
ホスト名¶
デフォルトでは、コンピュータ名がホスト名になっています。
~$ 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
制約¶
ファイルシステム¶
WSL 1の記述を表示
WSLのLinux側からWindowsのディレクトリにアクセス¶
WSL2のLinuxでは、/mnt/c でWindowsのCドライブがアクセス可能です。Dドライブ等があれば、/mnt/d にマウントされます。
Windows側からWSLのLinuxのディレクトリにアクセス¶
ネットワークフォルダとして、\\wsl$の下にディストリビューションフォルダが存在し、その下にLinuxのディレクトリが存在します。
Windows 11では、File explorerの左ペインに、[Linux]が表示され、その下にOS名が表示され、中に入るとLinuxファイルシステムをFile Explorerで参照できます。
雑記¶
コマンドプロンプト¶
Cmder を使う¶
デフォルトのコンソールはほぼコマンドプロンプトなので使い勝手がよくないので、いろいろ探してみたときに、タブ対応もするコマンドプロンプト互換なツールCmderを見つけました。
http://cmder.net/
設定をしていない場合、CmderはWindowsのコマンドプロンプト(cmd.exe)がデフォルトです。コマンドwslを実行すると、WSLのデフォルトディストリビューションのbashが実行されます。
Windowsのドライブを参照する¶
Windowsのシステムドライブ(Cドライブ)以外のドライブ¶
デフォルトでは、Windowsのシステムドライブ(Cドライブ)が、/mnt/c にマウントされています。それ以外のドライブがある場合、WSL側から参照するにはmountを実行します。以下はDドライブ(NTFS)をマウントする例です。
~$ sudo mkdir /mnt/d ~$ sudo mount -t drvfs D: /mnt/d
CentOS 7 をWSLで動かす補足¶
の補足メモ
WSL上のCentOS 7にSSH接続する¶
sshdを起動しSSH接続を受け付けるようにします。
- openssh-server のインストール
- systemctl をCentOS 7標準からdocker対応のモノに差し替え
次のgithubで公開されているsystemctl.pyを/usr/bin/systemctl と差し替え
https://github.com/gdraheim/docker-systemctl-replacement - ホストのSSH鍵生成(sudo ssh-keygen -A)
- 差し替えたsystemctlでsshdを登録(enable)&起動(start)
参考ブログ¶