«E: Подпроцесс / usr / bin / dpkg вернул код ошибки (1)» Что это значит?

31

Я видел это сообщение несколько раз, когда у кого-то возникали проблемы с установкой, обновлением или удалением какого-либо компонента программного обеспечения, но мне интересно, что это значит , и, что более важно, можно решить?

(Reading database ... 81657 files and directories currently installed.)
 Removing mongodb-10gen ...
 arg: remove
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error processing mongodb-10gen (--remove):
  subprocess installed pre-removal script returned error exit status 100
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error while cleaning up:
  subprocess installed post-installation script returned error exit status 100
 Errors were encountered while processing:
  mongodb-10gen
 E: Sub-process /usr/bin/dpkg returned an error code (1)

(выше это только пример, а не моя актуальная проблема)

Braiam
источник
2
Если вы попытались apt-get install (something)и получили это сообщение об ошибке, как я, решение для меня было apt-get upgrade (something).
PJ Brunet

Ответы:

30

Это сообщение является общим. Это просто означает, что dpkgэкземпляр, вызванный apt/ apt-getне выполнен по какой-то причине. Это не объясняет, почему, как или дает подсказки, как решить это. Как диагностическое сообщение, это не полезно.

Вам нужно прочитать строки перед сообщением (иногда их довольно много), чтобы найти настоящую ошибку, которая мешает вам завершить установку.

Да, но как мне это решить?

Нет единого способа ее решить. Есть так много причин, почему это может произойти, что бесполезно пытаться перечислить их все в одном посте. Каждое обстоятельство почти уникально для этого пакета / среды.

Но есть выкуп. Тот факт, что вы видите это сообщение, означает, что, вероятно, в строках перед сообщением содержится более релевантная информация. В иллюстративных целях я буду использовать пример:

(Reading database ... 81657 files and directories currently installed.)
 Removing mongodb-10gen ...
 arg: remove
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error processing mongodb-10gen (--remove):
  subprocess installed pre-removal script returned error exit status 100
 invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.
 dpkg: error while cleaning up:
  subprocess installed post-installation script returned error exit status 100
 Errors were encountered while processing:
  mongodb-10gen
 E: Sub-process /usr/bin/dpkg returned an error code (1)

Теперь, чтобы найти проблему, вам нужно прочитать в обратном направлении:

  • E: Sub-process /usr/bin/dpkg returned an error code (1)не говорит мне ничего полезного. Так что двигайтесь дальше.
  • Errors were encountered while processing: mongodb-10genпросто говорит мне, что пакет имеет проблемы. Полезно, но недостаточно.
  • subprocess installed post-installation script returned error exit status 100Это говорит мне о том, что скрипт, который потерпел неудачу, был тот postinst, который был выполнен после установки. Это пригодится в некоторых ситуациях, но не в этой.
  • dpkg: error while cleaning up: ничего полезного здесь.
  • invoke-rc.d: unknown initscript, /etc/init.d/mongodb not found.БИНГО! Это говорит нам о том invoke-rc.d, что двоичный файл, который управляет сценарием инициализации в большинстве подобных Debian систем, потерпел неудачу. Не удалось, потому что не смог найти /etc/init.d/mongodbсценарий. Это плохо. Нам нужно создать его или скопировать из другого места, чтобы оно снова заработало. Переустановка пакета также обычно является опцией для file not foundошибок.

    В этом случае сообщать об ошибке не обязательно, поскольку вероятно, что мы были теми, кто удалил скрипт, но если вы абсолютно уверены, что не трогали файл (a debsums -slaдолжен подтвердить это), то сообщите об ошибке.

Итак, что именно вам нужно, чтобы получить помощь? В идеале полный вывод проблемы. Также полезно включить выходные данные sudo dpkg -Cи sudo apt-get check, и выходные данные, apt-cache policy package1 package2...где "package1 package2 ..." включает в себя все пакеты с проблемами.

Braiam
источник
в качестве диагностического сообщения полезно, если вы прочитали всю ошибку (при обработке возникли ошибки: mongodb-10gen), поэтому она указана как E, а не как Error
mchid
1
@mchid, но что вызвало ошибку? Это не дает вам зрение.
Брайам
@mchid да, как я могу понять это, если я только что прочитал Errors were encountered while processing: mongodb-10gen? Как бы то ни было, чтобы решить проблему, эта линия ничего не стоит .
Брайам
Мое плохое, я думал, что вы просто искали, как решить проблему («возможно ли ее решить»), я думаю, я вынул это из контекста.
Mchid
Кстати, запустить, sudo touch /etc/init.d/mongodbа затем запустить, sudo apt-get purge mongodb-10genчтобы исправить проблему. Я проверил это и пока файл существует (/etc/init.d/mongodb), dpkg продолжит работу, даже если файл пустой, что и делает сенсорный ввод (создает пустой файл).
mchid