Вопрос или проблема
Я столкнулся с различными проблемами управления пакетами, из-за которых команды APT завершаются с выводом, заканчивающимся этой строкой:
E: Подпроцесс /usr/bin/dpkg вернул код ошибки (1)
Иногда могут появляться и другие коды ошибок, такие как 100
что означает, что dpkg отсутствует, но 1
— это самый распространенный код ошибки.
К сожалению, этот код ошибки практически ничего не говорит о том, что на самом деле вызвало ошибку или как мне следует ее решить. Почти каждая проблема управления пакетами, с которой я сталкиваюсь, независимо от ее причины или решения, вызывает ту же самую ошибку!
Итак, где я могу найти полезную часть вывода, которую я могу поискать в интернете или задать вопросы на Ask Ubuntu?
Apt регистрирует свои действия последовательно, как и человек.
Просто читайте вывод построчно.
Вот пример, не относящийся к apt. Читайте его строчка за строчкой, и вы увидите, что он рассказывает историю:
Я собираюсь построить башню из пяти блоков...
Очищаю рабочую поверхность на кухне.
Кухня: Положил 7 грязных тарелок с прилавка в посудомойку
Кухня: Протер прилавок
Открываю коробку с блоками.
Предупреждение: В коробке всего три блока.
Строительство: Установлен первый блок.
Строительство: Установлен второй блок.
Строительство: Установлен третий блок.
Строительство: ОШИБКА: Не могу продолжать строительство - закончились блоки.
Закрываю коробку с блоками.
ОШИБКА (резюме): Не удалось завершить башню из пяти блоков.
Логирование apt и dpkg работает точно так же – вы читаете историю строчка за строчкой. Вы видите, как менеджер пакетов начинает свое приключение: подготавливает, выполняет побочные задачи, сталкивается с нефатальными проблемами (предупреждениями), преодолевает трудности и т.д.
Большая часть вывода является рутинной, но вам она нужна, чтобы отметить прогресс apt. Этот контекст поможет вам понять, что происходило. На самом деле это история.
Ошибка (1) является распространенной. Это сводная ошибка, указывающая на то, что проблема произошла в побочной задаче (“проблема со строительством“). Вернитесь назад в истории к тому моменту, когда произошла эта конкретная побочная задача, и вы увидите конкретную деталь (“закончились блоки“).
В полном выводе sudo apt update
или sudo apt upgrade
или sudo apt install -f
вы должны найти некоторые сообщения от dpkg
о том, что на самом деле пошло не так.
Эти строки будут начинаться с dpkg:
, поскольку это название программы, возвращающей ошибку. Строки вывода, которые непосредственно предшествуют или следуют за этими строками, часто оказываются наиболее полезными.
Несколько примеров многих возможных ошибок, которые вы можете увидеть:
Настройка install-info (6.4.90.dfsg.1-1build1) ...
/usr/sbin/update-info-dir: 3: /etc/environment: $: не найден
dpkg: ошибка при обработке пакета install-info (--configure):
подзадача, установленная постинсталляционным скриптом, вернула код выхода ошибки 127
Это означает, что постинсталляционный скрипт не смог выполниться. Оболочки используют код выхода 127, чтобы обозначить “команда не найдена”, значит, команда, вызываемая в постинсталляционном скрипте, не была найдена. Строки перед строкой dpkg
дают подсказку о причине: есть что-то неправильное с файлом /etc/environment
(который должен задавать переменные окружения, такие как PATH
).
start: Не удалось подключиться к Upstart: Не удалось подключиться к сокету /com/ubuntu/upstart: Соединение отклонено
Нет отчета apport, так как сообщение об ошибке указывает на то, что это последующая ошибка от предыдущей неудачи.
dpkg: ошибка при обработке пакета runit (--configure):
подзадача, установленная постинсталляционным скриптом, вернула код выхода ошибки 1
dpkg: проблемы зависимостей мешают конфигурации git-daemon-run:
git-daemon-run зависит от runit; однако:
Пакет runit еще не настроен.
Вышеописанная ошибка была вызвана ошибкой в пакете runit
, который ожидал найти установленный Upstart, хотя его заменил systemd как стандартная система инициализации для Ubuntu. Таким образом, сообщение не удалось подключиться к Upstart
является лучшей подсказкой, но нам нужен контекст, чтобы выяснить, как это вызывает проблему управления пакетами.
Распаковка libjline-java (из .../libjline-java_1.0-1_all.deb) ...
dpkg: ошибка при обработке /var/cache/apt/archives/libjline-java_1.0-1_all.deb (--unpack):
попытка перезаписать '/usr/share/java/jline.jar', который также входит в пакет scala 2.9.2-400
Это означает, что есть конфликты пакетов, возможно, вызванные наличием смеси версий репозитория или сторонних репозиториев.
Итак, кратко
В любом случае, когда вы видите ошибку Подпроцесс /usr/bin/dpkg вернул код ошибки (1)
, вам нужно посмотреть выше на строки, начинающиеся с dpkg:
, и строки перед и после них для полезных подсказок о том, что пошло не так. Попробуйте поискать эти конкретные ошибки.
Если вы задаете вопрос здесь или на другом сайте поддержки, обязательно включите команду, которую вы выполнили, и полный вывод, а не только сводные сообщения об ошибках.
Ответ или решение
Когда вы сталкиваетесь с ошибкой в работе систем управления пакетами APT, а именно сообщением:
E: Sub-process /usr/bin/dpkg returned an error code (1)
— возникает естественное желание понять, в чём заключается источник проблемы. Необходимо отметить, что ошибка с кодом 1 является обобщающим кодом, который говорит о том, что во время выполнения подзадачи произошла ошибка, но не раскрывает конкретных причин. Важно научиться находить более содержительные сообщения об ошибках в выводе APT, чтобы эффективно повышать свои навыки диагностики и устранения неисправностей.
Как найти полезные сообщения об ошибках в выводе APT
-
Анализируйте последовательный вывод
Подобно тому, как киносюжет строится из последовательности сцен, вывод APT также осуществляет последовательный лог действий, которые необходимо читать строка за строкой. Этот вывод содержит как обычные сообщения об успехе, так и уведомления о предупреждениях и ошибках. Важно искать указания, которые непосредственно предшествуют строке с сообщением об ошибке.
-
Обратите внимание на строки, начинающиеся с
dpkg:
В большинстве случаев, перед ошибкой
E: Sub-process /usr/bin/dpkg returned an error code (1)
вы увидите строки, начинающиеся сdpkg:
. Эти строки содержат ключевую информацию о том, что именно пошло не так. Чаще всего именно они помогут вам выявить причину ошибки. Примеры таких строк могут включать сообщения о проблемах с установкой или конфликтами пакетов. Обратите внимание на контекст, который предоставляет весь ввод. -
Ищите предшествующие и последующие строки
Строки непосредственно перед и после сообщений
dpkg:
зачастую содержат важные подсказки. Например, они могут указывать на испорченные конфигурационные файлы или конфликтующие пакеты. Возможно, вы увидите сообщения о проблемах с зависимостями, которые затрудняют установку или настройку пакета.
Примеры ошибок и их интерпретация
Рассмотрим несколько примеров, которые помогут прояснить ситуацию:
-
Пример 1:
dpkg: error processing package install-info (--configure): subprocess installed post-installation script returned error exit status 127
Это может указывать на то, что в процессе выполнения пост-инсталляционного скрипта не удалось найти определённую команду (ошибка 127 означает "команда не найдена"). Причина, скорее всего, в неправильной конфигурации файла
/etc/environment
. -
Пример 2:
dpkg: error processing /var/cache/apt/archives/libjline-java_1.0-1_all.deb (--unpack): trying to overwrite '/usr/share/java/jline.jar', which is also in package scala 2.9.2-400
В этом случае речь идёт о конфликте пакетов —
libjline-java
пытается перезаписать файл, который уже установлен другим пакетом (в данном случаеscala
). Это может произойти при наличии смешанных версий репозиториев.
Заключение
Всякий раз, когда вы сталкиваетесь с сообщением об ошибке, заключающимся в строке E: Sub-process /usr/bin/dpkg returned an error code (1)
, важно принимать во внимание весь вывод, особенно строки, предшествующие и следующие за сообщением dpkg:
. Эта информация поможет вам более точно идентифицировать и устранить возникшую проблему.
Если вам нужно задать вопрос на форумах по поддержке, не забудьте включить команду, которую вы использовали, и весь вывод, а не только обобщённые сообщения об ошибках. Это даст другим пользователям возможность помочь вам более точно и быстро.