如何解决 Windows 10 Spring Creators Update 上 Ubuntu 中的运行级别错误?

How to work around runlevel error in Ubuntu on Windows 10 Spring Creators Update?

在 Ubuntu 18.04 运行 在 Windows 10 Spring Creators Update (RS4) 中执行 apt-get dist-upgrade 时,我收到此错误:

Preparing to unpack .../ebtables_2.0.10.4-3.5ubuntu2.18.04.1_amd64.deb ...
invoke-rc.d: could not determine current runlevel
 * Error: insufficient privileges to access the ebtables rulesets.
invoke-rc.d: initscript ebtables, action "stop" failed.
dpkg: warning: old ebtables package pre-removal script subprocess returned error exit status 1
dpkg: trying script from the new package instead ...
invoke-rc.d: could not determine current runlevel
 * Error: insufficient privileges to access the ebtables rulesets.
invoke-rc.d: initscript ebtables, action "stop" failed.
dpkg: error processing archive /var/cache/apt/archives/ebtables_2.0.10.4-3.5ubuntu2.18.04.1_amd64.deb (--unpack):
 new ebtables package pre-removal script subprocess returned error exit status 1
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
invoke-rc.d: could not determine current runlevel
Errors were encountered while processing:
 /var/cache/apt/archives/ebtables_2.0.10.4-3.5ubuntu2.18.04.1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

我不太关心 ebtables(它似乎是一个 default/built-in 包),但我不想筛选每个更新的输出以找出除此之外是否还有新错误。

事实证明,WSL 不支持 init/runlevels(这是有道理的,因为它实际上没有正常的 Linux 启动过程),如下所述: https://github.com/Microsoft/WSL/issues/1761#issuecomment-393154803

好消息是在 Ubuntu Cosmic 中修复了 Bionic (18.04) 和 Xenial (16.04): https://github.com/Microsoft/WSL/issues/1761#issuecomment-393652849

如果您以前遇到过这个问题,现在应该已经解决了。

问题可能是因为 service_control 脚本在尝试服务命令之前尝试使用 invoke-rc.d(这不起作用,因为 Docker 容器中没有运行级别) (这会起作用)。

所以更改脚本中的 if 条件,或者懒惰的方法是让它查找不存在的路径,以便使用服务命令。例如:

if [ -x /xxxusr/sbin/invoke-rc.d ]; then
  /usr/sbin/invoke-rc.d $OMSAGENT_WS start
  elif [ -x /sbin/service ]; then
  /sbin/service $OMSAGENT_WS start