適用於 Linux 的 Windows 子系統無法確定目前執行級別
問題
許多 apt-get 安裝失敗 b/c 系統無法確定目前執行級別
背景規格:
$ 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 返回正確的執行級別?
適用於 Linux 1 (WSL 1) 的 Windows 子系統只是一個兼容層,用於在 Windows 上執行 Linux 二進制執行檔。除此之外,它沒有提供更多功能。特別是在您的情況下,您遇到了兩個不受支持的組件/功能:
執行級別
WSL 不作為作業系統的單獨實例執行,因此沒有簡單的方法來支持引導和服務管理系統
init
,就像systemd
它們存在於真實的 Linux 系統上一樣。因此,今天(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 年 1 月),預設 WSL Ubuntu 20.04 仍然不支持執行級別。
在 Windows 11 上,自 WSL 建構 20175 以來,Intel 和 AMD CPU 都支持 Windows 11 嵌套虛擬化(在 WSL 2 中執行類似 KVM 的管理程序)。也許通過一些調整,可以在 WSL 2 中執行 VirtualBox。似乎官方也不支持這種組合甲骨文或微軟。