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

62

Я пошел, чтобы установить 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 found
dpkg: error processing google-chrome-stable (--configure):
 subprocess installed post-installation script returned error exit status 127
Setting up bsnes (0.088-7) ...
/var/lib/dpkg/info/bsnes.postinst: 5: /var/lib/dpkg/info/bsnes.postinst: update-alternatives: not found
dpkg: error processing bsnes (--configure):
 subprocess installed post-installation script returned error exit status 127
Errors were encountered while processing:
 google-chrome-stable
 bsnes
E: Sub-process /usr/bin/dpkg returned an error code (1)

Я искал в Google и здесь, в Ask Ubuntu, но не нашел работающего решения. Обычно предлагаем исправить это запустить следующее:

sudo apt-get clean && sudo apt-get autoremove
sudo apt-get -f install
sudo dpkg --configure -a

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

Спасибо за помощь

Bijak
источник

Ответы:

60

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

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

subprocess installed post-installation script returned error exit status 127

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

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

Скиппи ле Гран Гуру
источник
2
На самом деле это лучший метод. Переустановка dpkgне всегда помогает.
Данатела
2
Спасибо, куча. Я должен был исправить, /var/lib/dpkg/info/[package_name].prermно ваш пост дал мне правильное направление. Определенно для опытных пользователей, хотя это рискованно !
smurf
Лучший ответ. Спасибо! Исправление .prermи .postrmфайлы решают проблему.
фьюзер
42

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

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

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

    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>
    
зарегистрированный пользователь
источник
Обе команды dpkg и apt-get --force-yes возвращают ту же ошибку, что и раньше. Autoclean не возвращает ошибку, но, похоже, ничего не делает с двумя поврежденными пакетами.
Биджак
@ Биджак Вы наверняка пытались очистить. bsnesВы?
Зарегистрированный пользователь
Да, с dpkg -P, apt-get purge и с Synaptic
Биджак
Опубликовать выводdpkg -l |grep bsnes
Зарегистрированный пользователь
рф bsnes 0.088-7 amd64 Точный эмулятор SNES / SuperFamicom
Bijak
27

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

sudo apt-get install --reinstall dpkg

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

Bijak
источник
3
Почему единственный правильный (и принятый) ответ до сих пор в списке с менее чем 1/4 голосами за лучший ответ? +1
Дэвид Фёрстер
например, потому что он не работает для пакетов, которые больше не могут быть загружены. «Переустановка linux-image-extra-4.4.0-65-generic невозможна, ее невозможно загрузить».
Джо
3
Это, вероятно, наименее вероятное решение для любого, кто придет сюда, исходя из названия вопроса. Но есть много причин, по которым можно столкнуться с этой проблемой, поэтому будет много предложенных решений «это работает для меня».
Майкл
Это на самом деле не работает.
НельсонГон
15

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

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

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

доктор

Хамед
источник
4
На самом деле вам лучше использовать sudo rm /var/lib/dpkg/info/[pakege_name].*. В противном случае вы также удалите пакеты, начинающиеся с того же имени. В любом случае, спасибо за это, это было единственное решение, которое сработало для меня
smac89
13

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

cd /var/lib/dpkg/info

затем я удалил все с .postinst:

sudo rm *.postinst

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

sudo apt-get update

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

sudo apt-get --force-yes install openjdk-7-jre-headless
Майк Б
источник
6
Это удаляет все сценарии после установки, а не только сценарий уязвимого пакета. На мой взгляд, слишком переусердствовал. -1
Дэвид Фёрстер
Если легко определить и удалить только конкретный сценарий после установки, вызывающий проблему, это может быть очень удобным способом удаления неисправного пакета.
Ян Маккиннон
после кошмара с проблемами ядра, переименование .postinst только затронутого ядра устранило проблему
Энди
5

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

saiarcot895
источник
2
dpkg: error processing package libcuda1-340 (--purge): package is in a very bad inconsistent state; you should reinstall it before attempting a removal
Эндолит
2

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

Ранее пробовал apt autoclean

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

Викас Авниш
источник
0
sudo apt-get install -f --reinstall coreutils init-system-helpers

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

Уддхав Гаутам
источник