Как удалить / установить пакет, который установлен не полностью?

Я пошел устанавливать bsnes на днях и по какой-то причине установка завершилась неудачей. Теперь я не могу обновлять, устанавливать новые пакеты или выполнять практически любые команды apt-get, поскольку все они пытаются обработать этот поврежденный пакет и терпят неудачу. Попытка установить новый пакет также просто обрекает его на ту же участь.

Ошибка, которую я получаю, это:

Setting up google-chrome-stable (33.0.1750.152-1) .../var/lib/dpkg/info/google-chrome-stable.postinst: 124: /var/lib/dpkg/info/google-chrome-stable.postinst: update-alternatives: not founddpkg: error processing google-chrome-stable (--configure): subprocess installed post-installation script returned error exit status 127Setting up bsnes (0.088-7) .../var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not founddpkg: error processing bsnes (--configure): subprocess installed post-installation script returned error exit status 127Errors were encountered while processing: google-chrome-stable bsnesE: Sub-process /usr/bin/dpkg returned an error code (1)

Я искал в Google и здесь, на Ask Ubuntu, но не нашел рабочего решения.

Обычно предлагаемое исправление заключается в выполнении следующего:

sudo apt-get clean && sudo apt-get autoremovesudo apt-get -f installsudo dpkg --configure -a

Однако это не работает. Все команды apt-get завершаются ошибкой с той же ошибкой, что и выше, а команда dpkg просто не помогает. Другое дело, что они часто предлагают очистить его с помощью Synaptic или командной строки, что также приводит к сбою.

Для продвинутых пользователей используйте на свой страх и риск.

Согласно следующему сообщению об ошибке :

subprocess installed post-installation script returned error exit status 127

Возможно, вы захотите отредактировать /var/lib/dpkg/info/[package_name].postinst и прокомментируйте все (или, еще лучше, попытайтесь понять это и определить проблему), затем попробуйте apt-get снова.

Обратите внимание, что, хотя в этом конкретном вопросе сообщение касается "после установки", в нем могло бы быть указано, например, "предварительное удаление" или "после удаления" вместо этого (в этих случаях расширение редактируемого файла было бы .prerm или .postrm).

Помимо тех, которые вы уже опубликовали, есть несколько других команд, которые могут быть полезны.

  • Автоочистка очищает локальный репозиторий от извлеченных файлов пакетов.

    sudo apt-get autoclean
  • Принудительная установка/удаление пакетов. ☠Используйте с осторожностью

    sudo apt-get --force-yes install <pkgname>

    и

    sudo apt-get --force-yes remove <pkgname>

Также, как всегда, вы можете использовать dpkg для установки, удаления и очистки пакетов.

  • Устанавливать

    sudo dpkg -i <pkgname>
  • Удалять

    sudo dpkg -r <pkgname>
  • Чистка

    sudo dpkg -P <pkgname>

Вы можете удалить файл пакета в этом /var/lib/dpkg/info/ путь и обновите источник.

sudo rm /var/lib/dpkg/info/[package_name].*sudo dpkg --configure -asudo apt-get update

Затем переустановите свой пакет sudo apt-get install [package_name]

Док

Итак, после еще одного поиска в Google и очень внимательного повторного прочтения сообщений об ошибках кажется, что dpkg необходимо было переустановить.

sudo apt-get install --reinstall dpkg

Что подсказало, что это была проблема (если кто-нибудь ищет и видит это), так это то, что update-alternatives: not found было в сообщении об ошибке. Как только dpkg был переустановлен, другие пакеты продолжили обычную автоматическую установку.

Если все остальное потерпит неудачу. Что я сделал, так это сначала изменил каталог на:

cd /var/lib/dpkg/info

затем я удалил все с помощью .postinst:

sudo rm *.postinst

затем обновите репозиторий

sudo apt-get update

затем все вернулось на круги своя, когда я это сделал:

sudo apt-get --force-yes install openjdk-7-jre-headless

Если все остальное не удается, вы можете вручную удалить пакет с помощью dpkg. Бегущий sudo dpkg -P bsnes следует очистить bsnes.

В моем случае apt-get install -f работал. Я устанавливал mysql-workbench-community

Ранее судимый apt autoclean

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

sudo apt-get install -f --reinstall coreutils init-system-helpers

После выполнения описанного выше, вы можете установить / обновить / удалить / очистить, как обычно, для любых пакетов.