Исправить наполовину установленный пакет

42

Я получаю сообщение об ошибке при использовании sudo apt-get upgrade:

dpkg: error processing libgfortran3:amd64 (--configure):
  package libgfortran3:amd64 is not ready for configuration
  cannot configure (current status `half-installed')
Errors were encountered while processing:
  libgfortran3:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)

Кажется, он не блокирует установку / обновление других приложений. Я полагаю, что эта проблема возникла из-за прямого выключения моего ПК во время обновления приложения.

Как я могу это исправить?

Барун
источник

Ответы:

38
sudo dpkg --remove --force-remove-reinstreq --dry-run libgfortran3:amd64

Это просто прогон. Я не уверен, что удаление libgfortran3будет с этим, но запустите и посмотрите. Предполагая, что это не поглотит всю систему, запустите ее снова без, --dry-runа затем вы сможете sudo apt-get install ...вернуть нужные вам пакеты.

Оли
источник
4
Разобрались, спасибо! Для записи я запустил его, и он сказал, dpkg: warning: package is in a very bad inconsistent state; you should reinstall it before attempting a removalчто я скачал пакет вручную с packages.ubuntu.com и запустил sudo dpkg -i WHERE/THE/DOWNLOADED/PACKAGE/IS. Тогда все стало хорошо.
Бора М. Альпер
1
В моем случае, после выполнения этих инструкций, просто запустив 'apt-get install -f', переустановил пакет, а также исправил несколько других с нарушенными зависимостями из-за этого. Это было для пакета libx11-data в Debian 7.
bchurchill
Без --dry-run, как вы сказали, это сработало для меня. Спасибо!
Forvas
70

Для половины установленной ошибки пакета, --reinstall работал для меня:

sudo apt-get install --reinstall packagename 
Эрик Олсон
источник
1
Да, но предупреждение о том, что после переустановки имя_пакета apt-get перейдет к настройке любых полуконфигурированных пакетов.
Седрик Найт
5
это безопаснее, чем принятый ответ imho.
Занна
sudo apt-get install --reinstal ncurses-base, а позже я запустил обновление sudo apt-get с помощью пользователя root (sudo -s), оно работало именно так ...
ArifMustafa
отличный. только это решение решило мою проблему
iWizard
это сделало это для меня. php-pear давал мне головную боль. Благодарность!
pcarvalho
6
sudo apt install --reinstall packagename

Это работает как шарм. Это решило проблему, с которой я столкнулся в течение нескольких месяцев. Мой случай был с посылкойlibmysqlcppconn7v5

Все, что я сделал, было бежать sudo apt install --reinstall libmysqlcppconn7v5

Сих Бен
источник
3

У меня та же проблема с "половиной установленного пакета" с пакетом kibana. Я получил следующую ошибку:

dpkg: error processing kibana (--configure):
package kibana is not ready for configuration
cannot configure (current status 'half-installed')
Errors were encountered while processing:
  kibana
E: Sub-process /usr/bin/dpkg returned an error code (1)

Если кто-то все еще сталкивается с такой проблемой, то вы можете попробовать это:

sudo rm /var/lib/dpkg/info/kibana*
cd /var/cache/apt/archives
sudo rm kibana*
apt-get --reinstall install kibana

Это работает для меня. Вам просто нужно заменить слово «kibana» на ваше наполовину установленное имя пакета.

Anower Perves
источник
2

Если вы хотите исправить это через графический интерфейс, вы можете использовать synaptic. Synaptic - это превосходный инструмент управления пакетами, который использовался в старых версиях ubuntu. Чтобы установить его:

sudo apt-get install synaptic

нажмите на исправить сломанные пакеты.

Мийо
источник
Синаптик не перечисляет пакет в сломанной категории :(
Barun
2

Это должно исправить вашу проблему без переустановки пакета.

sudo dpkg --force-remove-reinstreq --remove <package_name here>

С последующим: sudo apt-get update

Code Geass
источник
Почему --force-remove-reinstreq? Менеджер пакетов не утверждает, что требуется переустановка. Как правило, обычное удаление отлично работает для ненастроенных пакетов. -1
Дэвид Фёрстер
Это как раз то, что я делаю, когда sudo apt-get remove <packageу меня нет выбора, и я не хочу переустанавливать этот наполовину установленный пакет. Затем я использую --force-remove-reinstreqдля удаления эти ненужные файлы ... PS: Это на Linux Mint ... Я сомневаюсь, что это будет быть другим, поскольку Linux основан на Ubuntu ..
CodeGeass
1
Менеджер пакетов работает одинаково во всех дистрибутивах на основе Debian (в dpkgконце концов , это то, что обозначает), но вы не должны использовать --force-*«на всякий случай». Сообщения об ошибках присутствуют по какой-то причине и не должны восприниматься неопытными пользователями легкомысленно, поэтому вы не должны предлагать им ненужные --force-*опции. В противном случае мы могли бы просто порекомендовать всегда использовать --force-allили, что еще лучше, полностью удалить --force-*параметры dpkgи сделать их поведением по умолчанию, поскольку это было бы проще и удобнее.
Дэвид Фёрстер
Ладно, признай это ... Меня больше беспокоило то, как выполнить работу, чем знать, что и как именно это делается ... Извинения ...
CodeGeass
Хм ... Я просто вижу, что принятый ответ предполагает то же самое. Так что я могу ошибаться --force-remove-reinstreqиз-за ненужности. Но это также означает, что ваш ответ (почти) является его дубликатом. Повезет в следующий раз.
Дэвид Фёрстер