Вопрос или проблема
Когда я пытаюсь установить новый пакет с помощью apt
или apt-get
, я получаю следующее сообщение об ошибке:
$ sudo apt install sl
E: dpkg был прерван, вы должны вручную выполнить 'sudo dpkg --configure -a', чтобы исправить проблему.
Итак, я следую инструкциям:
$ dpkg --configure -a
dpkg: ошибка: запрашиваемая операция требует привилегий суперпользователя
$ sudo dpkg --configure -a
Настройка icaclient (13.10.0.20) ...
Это занимает много времени, поэтому через некоторое время я нажимаю ctrl+c, и это приводит к следующему:
^Cdpkg: ошибка при обработке пакета icaclient (--configure):
постустановка icaclient пакетный скрипт-подпроцесс был прерван
При обработке ошибок возникли:
icaclient
Теперь, когда я снова пытаюсь установить пакет, кажется, что это работает:
$ sudo apt install sl
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
sl уже является самой новой версией (3.03-17build2).
Следующие пакеты были установлены автоматически и больше не требуются:
libllvm7 linux-headers-4.15.0-50 linux-image-4.15.0-50-generic linux-modules-4.15.0-50-generic
Используйте 'sudo apt autoremove', чтобы удалить их.
0 обновлено, 0 новых установлено, 0 будет удалено и 398 не обновлено.
1 не полностью установлен или удален.
После этой операции будет использовано 0 Б дополнительного дискового пространства.
Вы хотите продолжить? [Y/n]
И после нажатия Y:
Настройка icaclient (13.10.0.20) ...
Прогресс: [ 0%]
[...................................................]
Теперь он снова завис, и я не могу выйти с помощью ctrl+c. Когда я закрываю экран терминала, он повторяется с самого начала сообщения.
Как я могу это решить?
P.S. Я ежедневно использую приложение icaclient, но, вероятно, могу установить его заново.
Он завис на постустановочном скрипте, как указано в одном из сообщений об ошибках выше. После некоторых поисков я нашел, что постустановочные скрипты хранятся в /var/lib/dpkg/info/
Так что я смог легко это исправить, используя:
sudo rm /var/lib/dpkg/info/icaclient.postinst
После этого мне пришлось выполнить sudo dpkg --configure -a
и удалить некоторые файлы блокировки.
Теперь apt работает так, как должен!
Мне пришлось завершить процесс, который удерживает файл блокировки, как описано в вики Debian, используя
sudo fuser -vki -TERM /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend
В моем случае apt upgrade
завис с сообщением “(Пере)загрузите модули, если возможно” на шаге DKMS. Я нашел скрипт, используя
$ cd /var/lib/dpkg/info
$ rg 'load modules if possible'
tuxedo-drivers.postinst
54: echo "(Re)load modules if possible"
В этом скрипте после этой строки было множество команд, которые выгружают модули и загружают их снова:
rmmod tuxedo_tuxi_fan_control > /dev/null 2>&1 || true
rmmod tuxi_acpi > /dev/null 2>&1 || true
# ... и так далее ...
modprobe tuxi_acpi > /dev/null 2>&1 || true
modprobe tuxedo_tuxi_fan_control > /dev/null 2>&1 || true
Итак, я попробовал их без части > /dev/null 2>&1 || true
, чтобы, возможно, получить больше вывода, но я заметил, что sudo modprobe tuxedo_tuxi_fan_control
зависает.
Так что я просто попробовал sudo dpkg --configure -a
, и пока он снова зависал, я завершил процесс с помощью командной строки modprobe tuxedo_tuxi_fan_control
(используя системный монитор KDE). Затем dpkg
продолжил и успешно завершился.
Ответ или решение
Когда вы пытаетесь установить новое приложение с помощью apt
или apt-get
и сталкиваетесь с сообщением об ошибке «E: dpkg was interrupted…», это часто указывает на то, что предыдущая установка или настройка пакета была прервана, и система требует интервенции. Эта ситуация может быть довольно распространенной, особенно если в процессе установки произошел сбой или зависание. Ваша задача здесь — восстановить нормальное функционирование системы управления пакетами.
Шаги для решения проблемы:
-
Запуск команды для завершения настройки пакетов:
Первым делом, следуйте указаниям системы и выполните:sudo dpkg --configure -a
Если вы сталкиваетесь с ошибкой, что операция требует прав суперпользователя, убедитесь, что команду выполняете с использованием
sudo
. -
Обработка зависаний:
Если выполнение команды зависает (как в вашем случае сicaclient
), попробуйте остановить процесс, нажавCtrl+C
. Это может привести к ошибкам, подобным:dpkg: error processing package icaclient (--configure): installed icaclient package post-installation script subprocess was interrupted
В этом случае необходимо вручную удалить проблему.
-
Удаление постинсталляционного скрипта:
Для того чтобы обойти зависание в постинсталляционном скрипте, вы можете временно удалить скрипт, который отвечает за настройку данного пакета:sudo rm /var/lib/dpkg/info/icaclient.postinst
-
Перезапуск конфигурации пакетов:
После удаления скрипта снова выполните команду:sudo dpkg --configure -a
Это должно помочь системе продолжить выполнение конфигурации без зависания.
-
Обработка блокировок:
Еслиdpkg
илиapt
по-прежнему висят, возможно, существуют файлы блокировок. Для их удаления, сначала определите процесс, который удерживает блокировку:sudo fuser -vki -TERM /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend
Это позволит убить процесс, который может блокировать установку.
-
Проверка состояния приложения:
Если проблема связана с конкретным приложением (в вашем случаеicaclient
), можно попробовать удалить его:sudo apt remove icaclient
После этого применение:
sudo apt install icaclient
-
Дополнительные шаги для устранения зависаний:
Если вы столкнулись с зависаниями в других конфигурациях (например, при работе с DKMS), проверьте скрипты:cd /var/lib/dpkg/info rg 'load modules if possible'
Если какая-то из команд модуля зависает (как в вашем случае с
modprobe
), попробуйте вручную отключить или перезагрузить модули вне конфигурационных скриптов.
Заключение:
Работа с apt
и dpkg
может иногда приводить к сложным ситуациям. Важно оставаться спокойным и следовать упомянутым шагам для разрешения проблем. Если же проблема продолжает сохраняться, изучение соответствующей документации и сообществ может предоставить дополнительные решения и советы. Не забывайте, что правильная диагностика — это первый шаг к эффективному устранению неполадок.