WSL 2入門 – WindowsでLinuxを実行する

WSLの概要

背景

以前、WindowsとLinuxは、市場に出回っているPCで最も一般的に使用されている2つのデスクトップオペレーティングシステムとして互換性がありませんでした。2001年、元Microsoft CEOのBallmerはLinuxを癌と比較しました。 しかし、「すべてが常に進化し、変化している」というのは、近年のMicrosoftのLinuxに対する見方のようなものです。

Microsoftの現役のCEOであるナデラは就任以来オープンソースを採用してきました。最近、Microsoftはグーグルを抜いてオープンソースプロジェクトへの最大の貢献者になりました。Microsoftによる一連のアクションで、オープンソースに対するMicrosoftの態度に変化が見られました。世界最大のゲイの出会い系サイトGithubを買収した後、人気のある一連のオープンソースプロジェクト製品(Vscode、Windows Terminal、Edgeなど)を発表しました。CEOまでも「MicrosoftはLinuxが大好きだ!」という話を言いました。その後に、Windows 10更新でWSLをリリースされました。今年の5月に発表した2004バージョンでは、WSL2もリリースされました。Windows+WSL 2は、Windowsの欠点を補完しました。著者はこの組み合わせをWinuxと呼んでいます。つまり、WindowsとLinuxを組み合わせて、略称を作って、この記事のタイトルとして使用します。

WSL

WSLのフルネームはWindows Subsystem for Linuxで、公式の説明は「Linuxのバイナリ実行ファイルをWindows 10およびWindows Server上でネイティブ実行するための互換レイヤーである」です。以下は、MicrosoftによるWSLの公式の説明です。

Linux用のWindowsサブシステムを使用すると、開発者はGNU/Linux環境をそのまま実行できます(ほとんどのコマンドラインツール、ユーティリティ、アプリケーションを含む)。従来の仮想マシンやデュアルブートセットアップのオーバーヘッドを生成しません。

Microsoft Storeでお好みのGNU/Linuxディストリビューションを選択します。常用のコマンドラインソフトウェアツール(grep、sed、awkなど)またはその他のELF-64バイナリファイルを実行します。以下を含むBash shellスクリプトとGNU/Linuxコマンドラインアプリケーションを実行します。ツール:vim、emacs、tmux 。言語:NodeJS、Javascript、Python、Ruby、C/ C++、C# と F#、Rust、Goなど。 *サービス:SSHD、MySQL、Apache、lighttpd、MongoDB、PostgreSQLが含まれます。独自のGNU/Linuxディストリビューションパッケージマネージャーを使用して、その他のソフトウェアをインストールします。Unixのようなコマンドラインシェルを使用して、Windowsアプリケーションを呼び出します。WindowsでGNU/Linuxアプリケーションを呼び出します。

WSL 2

WSL 2は、Linux用のWindowsサブシステムアーキテクチャの新しいバージョンです。Linux用のWindowsサブシステムをサポートして、Windows上でELF64Linuxバイナリファイルを実行します。その主な目標は、ファイルシステムのパフォーマンスを向上させ、完全なシステムコールの互換性を追加することです。

この新しいアーキテクチャは、これらのLinuxバイナリがWindowsおよびコンピュータハードウェアと対話する方法を変更しますが、WSL 1(現在広く利用可能なバージョン)と同じユーザーエクスペリエンスを提供します。

単一のLinuxディストリビューションは、WSL 1またはWSL 2 アーキテクチャーで実行できます。各ディストリビューションはいつでもアップグレードまたはダウングレードでき、WSL 1ディストリビューションとWSL 2ディストリビューションを並行して実行できます。WSL 2は、実際のLinuxカーネルを実行することで恩恵を受ける新しいアーキテクチャを使用しています。

簡単に言えば、WSL2はWSLの拡張バージョンであり、その実装はWSLとは異なり、WSL 2には完全なLinuxカーネルがあり、実際のLinuxの使用シナリオに近いものです。

WSL&WSL 2 を使用する理由

日常生活ではLinuxシステムとのやり取りがたくさんあり、学院のコースではLinuxベースの知識やコマンドもたくさんあります。日常生活や使用環境がLinuxであれば、問題なし 、シームレスに接続するために切り替える必要はありません。Windowsは市場で大人気の オペレーティングシステムです。人々が日常生活にWindowsを必要とし、開発環境にはLinuxが必要です。これにより、Windows環境でLinuxを使用するためのいくつかの要件が作成されました。この需要に直面して、現在、以下の集中型の常用のソリューションがあります。

選択できるソリューションは以下のとおりです。

コースメリットデメリット
シングルホストでデュアルシステムをインストールする実際のオペレーティングシステム切り替えが面倒で、再起動する必要がある
デュアルホストでデュアルシステムをインストールする物理的隔離高コスト、2台のPCが必要である
リモートサーバーソリューション実際のオペレーティングシステムパフォーマンス、帯域幅、トラフィック、さらには権限も制限される可能性がある
仮想マシンでLinuxソリューションをインストールする完全なユーザー体験 高リソース消費、低速起動、運用効率が低い
WSLソリューション低リソース消費、高速起動、シームレスな切り替え体験が不完全で、一部のソフトウェアがサポートできない

WSLソリューションは、過去2年間にオープンソースを採用した後にMicrosoftが立ち上げた優れたソリューションです。WSLを使用すると、WindowsサブシステムとLinuxサブシステムが同じファイルシステムを共有し、Windowsで作成されたファイルにLinuxでアクセスして変更することもできます。WSLのThreeMusketeersコマンドを使用して、Windowsドキュメント、ログをクエリおよび分析し、shellコマンドまたはbashスクリプトを使用してWindowsに格納されているLinuxプログラムを実行し、WSLでDockerコンテナーを作成し、Windowsでdocker desktopを使用し、可視化の管理が実行できます。これは、デュアルシステム環境で前後に切り替える必要がある人にとって特に便利です。つまり、WSLを使用すると、Windowsのグラフィカル操作インターフェイスとLinuxの便利なコマンドラインツールの両方を使用できます。これにより、WindowsでLinuxを使用するニーズが満たされます。次には、Winuxシステムを構築して使用する方法を説明します。

WSL&WSL 2のインストール方法

WSLをインストールする

LinuxディストリビューションをWindowsにインストールする前に、「Windows Subsystem for Linux」オプション機能を有効にする必要があります。管理者としてPowerShellを開き、実行します。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

WSL 1のみがインストールされている場合は、このステップを完了し、コンピューターを再起動して、選択したLinuxディストリビューションをインストールします。WSL 2が必要な場合は、後継ぎのステップが必要です。

WSL 2に更新する

WSL 2は、基本アーキテクチャの主要な変換であり、仮想化テクノロジとLinuxカーネルを使用して新しい機能を実装します。WSL 2は、より完全なLinuxエクスペリエンスを備えています。WSL 2は、Windows 10バージョン、2004のビルド19041以降でのみ使用できます。WSL 2が必要な場合は、2004(ビルド19041)以降のバージョンまたはWindows 10以降のバージョンを使用してサポートする必要があります。

WSLとWSL2の違い

機能WSL 1WSL 2
WindowsとLinuxの統合
起動時間が短い
低リソース消費
現在のバージョンのVMWareおよびVirtualBoxと実行できる
ホストされたVM
完全なLinuxカーネル
完全なシステムコールの互換性
クロスプラットフォームファイルシステムのパフォーマンス

「仮想マシンプラットフォーム」オプションコンポーネントを有効にする

WSL 2をインストールする前に、「仮想マシンプラットフォーム」オプション機能を有効にする必要があります。 管理者としてPowerShellを開き、実行します。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

コンピューターを再起動してWSLのインストールを完了し、WSL 2に更新します。

選択したLinuxディストリビューションをインストールします

Microsoft Storeを開き、好みのLinuxディストリビューションを選択します。 次には、Ubuntu 20.04 LTSを実例とします。

ボタンをクリックして入って、「取得する」を選択するだけでいいです。 Windowsは対応するバージョンのUbuntuイメージを自動的にダウンロードし、その他の操作は必要ありません。

初めてWSLセットアップを起動する

Microsoft StoreでインストールされているUbuntuを見つけるか、スタートメニューからUbuntu 20.04 LTSを選択して起動します。

初めて起動する場合、ユーザー名を設定する必要がある

ユーザー名を入力した後、パスワードを設定します。設定した後、Ubuntuが正常に起動できます。

rootパスワードを設定する

sudo passwd root

「su」を入力してrootユーザーに切り替えます。「$」が「#」になったら、ユーザー切り替えが成功したことを意味します。

ディストリビューションをWSL 1 または WSL 2に設定します

PowerShellコマンドラインを開き、次のコマンドを入力して、インストールされている各Linuxディストリビューションに割り当てられているWSLバージョンを確認できます。

wsl -l -v

特定のWSLバージョンでサポートされるようにディストリビューションを設定するには、以下のコマンドを実行します。

wsl --set-version <distribution name> <versionNumber>

その中のは、Ubuntu-20.04のようなディストリビューションの実際の名前です。は「1」または「2」です。いつでもWSL 1に変更し戻したい場合、上記と同じコマンドを実行します。

WSL 2の使用

WSL 2の使い方はLinuxと同じです。WSL 2ではLinuxのさまざまなコマンドを簡単に使用できます。ただし、WSLのファイルにはデフォルトで777のアクセス許可であり、実際のLinux環境とは異なります。WSLで正常に実行される一部のプログラムまたはコマンドは、実際のLinuxのアクセス許可の問題により失敗する場合があります。次には、WSL 2のいくつかの使い方を説明します。

Docker Desktop

WSL 2がリリースされた後、Dockerはすぐにフォローアップし、WSL 2をサポートするバージョンをリリースしました。このバージョンがない時、Docker Desktopは「多くのバグがあり、変更された構成が有効にならず、応答が遅い」などの問題が常に批判されてきました。上記の問題は、WSL 2のリリース後に改善されました。

Docker Desktopをインストールする

前提:

  1. Windows 10 2004以降のバージョンをインストールする
  2. WSL 2機能がすでに有効になっている

ダウンロードする

Docker Desktop Stable 2.3.0.2以降のバージョンをダウンロードする

インストールする

  1. 通常のインストールステップに従ってDocker Desktopをインストールします。システムがWSL 2をサポートしている場合、DockerDesktopはインストールプロセス中にWSL 2を開くように提示します。
  2. インストールが完了した後、Docker Desktopを実行し、Setting>Generalを順番に選択します
  • [Use WSL 2 based engine]をオンにする
  • [Apply & Restart]をクリックする
  • Docker Desktopが再起動したら、Settings > Resources > WSL Integration を順番にクリックし、[Enable integration with my default WSL distro]をオンにして、デフォルトのWSL 2ディストリビューションでWSL統合を有効にし、オンにする必要があるWSL 2ディストリビューションを選択します。実例の図にはUbuntu-20.04が1つだけです。
  • [Apply & Restart]をクリックし、Deckerが再起動したら、完了する

Dockerを使用する

WSLを開いた後、docker infoを入力してDocker ClientとServerの情報を表示します。Power Shellにdocker infoを入力してDocker ClientとServerの情報を表示することもできます。WSL 2でDockerを使用する場合とLinuxでDockerを使用する場合に違いはありませんが、 WSLに組み込まれたコンテナDocker Desktopで表示および管理できます。

マウスを使用して、コンテナを開始、停止、再起動、および削除できます。WSLの機能により、WindowsブラウザでWSLのDockerコンテナにアクセスできます。これらの機能は、Windows環境に慣れているユーザーにとって優れています。

WSL 2でadbを使用する

WSLでadbを使用すると、Windows環境で強力なLinuxコマンドを使用して、Androidデバイスのログとファイルを分析し、関連する操作を実行できます。しかし、WSLはただのサブシステムであるため、sudo apt-get install adbをインストールした後は、adbコマンドを使用できません。Windowsでadb.exeを呼び出すようにWSLを指定するには、いくつかの設定を行う必要があります。vimを使用して.bashrcを開いて編集します。

sudo vim ~/.bashrc

開いた後、以下のコードを追加します。

alias adb='adb.exe'

alias fastboot='fastboot.exe'

設定を有効にします。

source ~/.bashrc

上記の操作を実行した後、Windowsのcmdまたはpower shellでadbコマンドを1回に実行する必要があります。次には、Get-Service LxssManager | Restart-Serviceを実行してWSLを再起動すると、WSLでadbを使用できます。

WSL 2の使用上の注意

WSLディスク占有の問題

WSLはデフォルトでWindowsのCドライブにインストールされます。1つのWSLはCドライブに大きな負担がかかることはありませんが、特にapt-get install操作の後で、より多くのWSLを使用すると、Cドライブの容量が大きくなる可能性があります。確かに、Dockerを使用すると、ディスク容量が急激に減少します。Cドライブのディスク容量に注意してください。

WSL 2の互換性の問題

WSL 2とVMWare(またはIntel VT-xテクノロジを使用するその他の仮想マシン)は機器で実行できますが、VT-xテクノロジを使用するソフトウェア(Android Studioの仮想マシンやVMWareなど)をインストールすることはできません。

  • VMWareなどのソフトウェアを使用する必要がある場合は、次のコマンドを実行して仮想プラットフォームを無効にする必要がある
Disable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
  • インストールした後、仮想プラットフォームを再起動する
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

WSL&WSL 2でrebootコマンドを入力してから、エラーが報告されます。

Linuxを使用する場合、いくつかの再起動操作を実行する必要があります。実際のマシン環境では、rebootコマンドを直接入力して、再起動操作を完了することができます。ただし、WSL端末では、rebootコマンドを使用して再起動することはできません。restartコマンドを使用すると、次のエラーメッセージが表示されます。

System has not been booted with systemd as init system (PID 1). Can't operate.

Failed to talk to init daemon.

これは、WSLがWindowsのサブサービスであり、ホストのサービスを端末で操作できないためです。解決策は以下のとおりです。

解決策1:WindowsサービスでLxssManagerサービスを見つけ、右クリックしてサービスを再起動します。この時点でWSLは閉じられることに注意してください。

解決策2:管理者としてPowerShellを開き、次のコマンドを使用します。Get-Service LxssManager | Restart-Serviceを使用して、サービスLxssManagerを再起動します。

さらに、次のコマンドをPower Shellで使用して、LxssManagerサービスを停止/起動できます(シャットダウンおよび開始操作と同じです)

net stop LxssManager # 停止 
net start LxssManager # 起動

WSLを起動できません。

WSLを使用する場合には、WSLの起動が失敗するかもしれません。以下の情報が表示されます。

参照されるオブジェクト型は、試行された操作をサポートしていません。

[プロセスは終了しました。コードは4294967295です]

ただし、管理者モードを使用してPower ShellまたはCMDを実行します。:netsh winsock resetを入力して実行し、PCを再起動してこの問題が解決できます。

参照文書:

Microsoft WSLの公式ドキュメント

Docker Desktop WSL 2 backend

Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です