Я сломал Windows Linux Subsystem (Bash на Ubuntu на Windows 10). Справка по Linux?

22

Я играл с новой подсистемой Linux на Windows, и каким-то образом я сломал ее, и теперь большинство внутренних компонентов 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)

Любые идеи, как это исправить?

Майк Пенджли
источник
Есть ли опция "сбросить" или удалить / переустановить? Это, наверное, самый простой и быстрый. Есть идеи, что вы сделали, чтобы это произошло? Стереть корень ( /) или что-то?
Xen2050
1
В AskUbuntu попробуйте: sudo apt-get install upstart-sysv для быстрого исправления - в этом посте также есть ссылка на «рекомендуемое» исправление. Не уверен, что это та же проблема, но похоже, что это может быть связано.
Таннер
1
@ Ramhound Я не спрашивал, как переустановить Bash на Ubuntu в Windows 10, я спросил, как решить проблему. У меня никогда не было этой проблемы на самом деле в Ubuntu. Если «Ядерная война» решает проблемы, то я не хочу быть рядом, когда они решают проблему глобального потепления
Майк Пенгелли
1
@ Ramhound Но я не отвечаю на мой вопрос. Это все равно что сказать «переустанавливать окна каждый раз, когда вы получаете сообщение об ошибке» или «покупать новую машину каждый раз, когда вы слышите шум» ... Это решает проблему, но не является практическим решением.
Майк Пенгелли

Ответы:

34

Предупреждение, этот процесс восстановит Lxss в исходную конфигурацию

Чтобы переустановить Lxss, откройте Windows cmdкак администратор и запустите:

C:\WINDOWS\system32>LxRun.exe /uninstall

Затем:

C:\WINDOWS\system32>LxRun.exe /install
Jonas
источник
1
Я не пометил это как ответ, потому что это ядерный подход к проблеме, которая у меня была. Да, это исправило бы это (теоретически, я не пробовал), но способ, которым я исправил это, исправил мою точную проблему без превращения в ядерное оружие. Но если у меня останутся проблемы, я бы порекомендовал этот подход, если вы хотите сэкономить часы. Хотя в будущем я сомневаюсь, что люди захотят перенастроить подсистему Linux каждый раз, когда что-то идет не так.
Майк Пенгелли
Проблема в самой подсистеме Ubuntu. Переустановка этого ничего не исправит
Panagiotis Kanavos
2
@PanagiotisKanavos для тех из нас, кто нашел вопрос через Google (запутавшись в наших установках): я могу заверить вас, что ответ по-прежнему очень важен!
Марк Гравелл
2
Вы правы, это не ответ, и мы должны использовать это как последний вариант.
Джонас
Я получаю, Access is denied.когда я запускаю, C:\WINDOWS\system32>LxRun.exe /uninstallдаже если сеанс cmd выполняется "как администратор". Любые идеи?
Фредрик
18

Починил это.

Ран:

apt-get remove upstart

тогда

apt-get remove udev

тогда

apt-get autoremove

и все это, кажется, работает сейчас.

Майк Пенджли
источник
1
Должно быть установлено, когда я установил x11 (слишком новая версия) ... Кстати, сервер x должен работать в Windows, а не в подсистеме Linux. а затем вы отправляете приложение, выполнив DISPLAY = 0: firefox
Майк Пенгелли
9

Официальный ответ от Microsoft

GitHub: Microsoft / 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

Я попробовал это сам, и, похоже, работает довольно хорошо.

oxenfree
источник
6

Вот более целенаправленное решение. Создайте скрипт с именем /usr/sbin/policy-rc.d( nano /usr/sbin/policy-rc.d) со следующим содержимым:

#!/bin/sh
case "$1" in
    udev|systemd-logind) exit 101;;
esac

Сохранить и выйти ( Ctrl+ O Ctrl+ X). Пометьте скрипт как исполняемый ( chmod +x /usr/sbin/policy-rc.d). Этот скрипт говорит dpkgне пытаться запустить udevили systemd-logind.

После этого вы сможете завершить ранее неудачный dpkgшаг настройки ( dpkg --configure -a).

Андерс Касеорг
источник
2
Это ответ, который можно улучшить, объяснив, что произошло , что на самом деле было «как-то» в вопросе и как эта серия шагов решает эту проблему. Вот один указатель для использования. Здесь другое .
JdeBP