我破坏了 Windows Linux 子系统(Windows 10 上的 Ubuntu 上的 Bash)。帮助?

Mik*_*lly 21 linux ubuntu windows-10

我一直在 Windows 上使用新的 linux 子系统,但不知何故我已经破坏了它,现在 Ubuntu 的大部分内部组件(apt-get、dpkg 等)都不起作用。我尝试的每件事都得到相同的消息......

    Setting up udev (204-5ubuntu20.19) ...
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: No such file or directory
runlevel:/var/run/utmp: No such file or directory
 * udev requires devtmpfs support, not started
   ...fail!
invoke-rc.d: initscript udev, action "restart" failed.
dpkg: error processing package udev (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of systemd-services:
 systemd-services depends on udev (>= 175-0ubuntu23); however:
  Package udev is not configured yet.

dpkg: error processing package systemd-services (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of libpam-systemd:amd64:
No apport report written because the error message indicates its a followup error from a previous failure. libpam-systemd:amd64 depends on systemd-services (= 204-5ubuntu20.19); however:
  Package systemd-services is not configured yet.


dpkg: error processing package libpam-systemd:amd64 (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
Errors were encountered while processing:
 udev
 systemd-services
 libpam-systemd:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这一问题?

Jon*_*nas 34

警告,此过程会将 Lxss 恢复到初始配置

要重新安装 Lxss,请cmd以管理员身份打开 Windows并运行:

C:\WINDOWS\system32>LxRun.exe /uninstall
Run Code Online (Sandbox Code Playgroud)

然后:

C:\WINDOWS\system32>LxRun.exe /install
Run Code Online (Sandbox Code Playgroud)

  • @PanagiotisKanavos 对于我们这些通过谷歌找到问题的人(在我们的安装中弄得一团糟):我可以向你保证,这个答案仍然非常感谢! (2认同)
  • 你们是对的,这不是答案,我们应该把它作为最后的选择。 (2认同)

Mik*_*lly 17

修复。

冉:

apt-get remove upstart
Run Code Online (Sandbox Code Playgroud)

然后

apt-get remove udev
Run Code Online (Sandbox Code Playgroud)

然后

apt-get autoremove
Run Code Online (Sandbox Code Playgroud)

现在这一切似乎都在起作用。


小智 9

微软官方回应

github:微软/BashOnWindows

这是每个人都会开始看到的问题。我们需要在我们的官方文档中添加一些内容。

正如@nuclearmistake 指出的那样,udev 是 apt-get 中的问题,但错误不应导致 WSL 中的任何问题。我们已就此与 Canonical 联系,寻求最佳解决方案,他们建议进行以下更改:

将以下内容写入 /usr/sbin/policy-rc.d

#!/bin/sh exit 101

chmod +x /usr/sbin/policy-rc.d

dpkg-divert --local --rename --add /sbin/initctl

ln -s /bin/true /sbin/initctl

我自己试过这个,看起来效果很好。


小智 6

这是一个更有针对性的解决方案。创建一个名为/usr/sbin/policy-rc.d( nano /usr/sbin/policy-rc.d)的脚本,内容如下:

#!/bin/sh
case "$1" in
    udev|systemd-logind) exit 101;;
esac
Run Code Online (Sandbox Code Playgroud)

保存并退出 ( Ctrl+ O Ctrl+ X)。将脚本标记为可执行 ( chmod +x /usr/sbin/policy-rc.d)。此脚本告诉dpkg不要尝试启动udevsystemd-logind

然后,您将能够完成之前失败的dpkg配置步骤 ( dpkg --configure -a)。

  • 这是一个可以通过_解释发生了什么_、问题中的“某种方式”实际上是什么以及这一系列步骤如何解决它来改进的答案。[这里有一个指针](https://news.ycombinator.com/item?id=11488599) 使用。[这是另一个](https://github.com/Microsoft/BashOnWindows/issues/143)。 (2认同)