問題
システムが現在のランレベルを判別できないため、apt-get のインストールが失敗することがよくあります。
背景仕様:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
$ uname -a
Linux systemName 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
説明
WSL に VirtualBox をインストールしようとしていますが、次のエラーが発生しました。
$ VBoxManage --version
WARNING: The character device /dev/vboxdrv does not exist.
Please install the virtualbox-dkms package and the appropriate
headers, most likely linux-headers-Microsoft.
私はこれを次のように解決しました以下の手順に従って。 にdpkg-reconfigure virtualbox-dkms
。
しかし、その後、次のことがわかりました。
dpkg: warning: version '*-*' has bad syntax: version number does not start with digit
It is likely that 4.4.0-43-Microsoft belongs to a chroot's host
Module build for the currently running kernel was skipped since the
kernel source for this kernel does not seem to be installed.
invoke-rc.d: could not determine current runlevel
どうすればinvoke-rc.d が正しいランレベルを返すようになるでしょうか?
答え1
Windows Subsystem for Linux 1 (WSL 1) は単なる互換性レイヤーですWindows 上で Linux バイナリ実行ファイルを実行するためのものです。それ以上の機能は提供されません。特に、あなたのケースでは、サポートされていない 2 つのコンポーネント/関数が発生しました。
ランレベル
init
WSL はオペレーティング システムの個別のインスタンスとして実行されないため、実際の Linux システムに存在するようなブートストラップおよびサービス管理システムをサポートする簡単な方法はありませんsystemd
。その結果、今日 (2019-02)、WSL 用の Ubuntu はまだランレベルをサポートしていません。
Linuxカーネル
これは、あなたのケースにおける根本的な制限です。ハイパーバイザーとしての VirtualBox は、オペレーティング システムのカーネルと統合する必要があります (カーネル モジュールを使用)。WSL は単なる互換性レイヤーです。実際の Linux は実行されていません (Linux カーネルはありません)。したがって、VirtualBox は WSL 用にカーネル モジュールをコンパイルできません。
Windows マシンで VirtualBox を実行する場合は、Windows バージョンをインストールしてください。WSL 1 内で Linux バージョンを実行することはできません。
WSL 2 のアップデート
元の回答が書かれたときから、WSL 2 が登場しました。WSL 2 のアーキテクチャは大きく異なります。Hyper-V 仮想マシン内で完全な Linux カーネルを実行します。残念ながら、今日 (2022-01) 時点では、デフォルトの WSL Ubuntu 20.04 ではランレベルはまだサポートされていません。
Windows 11 では、WSL ビルド 20175 以降、ネストされた仮想化 (WSL 2 内で KVM などのハイパーバイザーを実行) が Intel と AMD の両方の CPU でサポートされています。少し調整すれば、WSL 2 内で VirtualBox を実行できる可能性があります。この組み合わせは、Oracle からも Microsoft からも公式にはサポートされていないようです。