Как обойти ошибку уровня запуска в Ubuntu в Windows 10 Spring Creators Update?
При выполнении apt-get dist-upgrade
в Ubuntu 18.04, работающем под Windows 10 Spring Creators Update (RS4), я получаю эту ошибку:
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 (кажется, что это пакет по умолчанию / встроенный), но я не хочу просеивать результаты каждого обновления, чтобы выяснить, есть ли новые ошибки, кроме этой.
1 ответ
Оказывается, WSL не поддерживал уровни инициализации / запуска (что имеет смысл, поскольку на самом деле он не имеет нормального процесса загрузки Linux), как упоминалось здесь: https://github.com/Microsoft/WSL/issues/1761
Хорошей новостью является то, что в Ubuntu Cosmic было сделано исправление, которое отфильтровывалось в Bionic (18.04) и Xenial (16.04): https://github.com/Microsoft/WSL/issues/1761
Если у вас была эта проблема раньше, теперь она должна быть решена.
Проблема могла быть в том, что 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