Как удалить сломанные пакеты в Ubuntu

38

Я не могу удалить сломанную упаковку. Используйте следующую команду: sudo apt-get -f install но я получаю следующий ответ:

Preparing to unpack .../nodejs_0.10.28-1chl1~trusty1_amd64.deb ...
Unpacking nodejs (0.10.28-1chl1~trusty1) over (0.10.25~dfsg2-2ubuntu1) ...
dpkg: error processing archive /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb (--unpack):
 trying to overwrite '/usr/share/man/man1/node.1.gz', which is also in package nodejs-legacy 0.10.25~dfsg2-2ubuntu1
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Processing triggers for man-db (2.6.7.1-1) ...
Errors were encountered while processing:
 /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Я пробовал различные команды, такие как

 2015  sudo apt-get clean
 2020  sudo dpkg --configure -a
 2023  sudo apt-get autoremove
 2034  sudo apt-get upgrade && sudo apt-get -f install

Но я не получил никакого результата. Не могу установить синаптик. Любые идеи, как я могу удалить сломанный пакет?

Красимир
источник
Здесь несколько ответов предложил --force-remove-reinstreqи --force-overwrite. Обратите внимание, что вы должны использовать эти два (особенно первый), только если вы являетесь экспертом по Linux, потому что это может полностью сломать вашу систему.
g_p

Ответы:

55

запустите эту команду, чтобы удалить битые пакеты в Ubuntu.

sudo dpkg --remove --force-remove-reinstreq package_name 

после удаления пакета обновите вашу систему командой

sudo apt-get update

перезагрузите систему после успешного обновления.

Premal
источник
5
Эту команду всегда следует избегать, поскольку она ломает вашу систему больше, чем восстанавливает
ранчо
2
@rancho зависит от того, что это за пакет.
Филипп
хороший один, как вы Гас всегда записи имяпакета_, но я вижу список 900 строк в сумасшедшем формате, например: Broken libopencv-highgui2.4v5:amd64 Conflicts on libopencv-highgui2.4 [ amd64 ] < 2.4.8+dfsg1-2ubuntu1 > ( libs ). ожидание LTS действительно сделало этот безумный трюк для меня.
nyxee
@rancho "это разрушает вашу систему больше, чем восстанавливает", вы можете уточнить? man dpkgне очень помогает
Стефан Гурихон
Это было единственное, что сработало для меня. Я сломал MySQL при обновлении пакета. Теперь я не мог очистить или переустановить. Так что это спасло мне жизнь.
Анкит Сингхания
11

Откройте свой терминал и используйте следующую команду

sudo dpkg --purge nodejs-legacy
sudo apt-get install -f

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

G_p
источник
11

Я нашел это:

sudo dpkg --remove --force-remove-reinstreq <packagename>

Работает лучше всего. Если он выдаст ошибку, что не удалит пакет, поскольку зависит от другого пакета, удалите и этот другой пакет. Вам придется повторить этот шаг несколько раз, а затем переустановить удаленные пакеты.

Это force-remove-reinstreq«ядерный вариант» удаления пакета. Сбой возможен только в том случае, если есть другой пакет, зависящий от того, который вы собираетесь удалить. Опять же, в этом случае также удалили зависимый пакет.

Брайан Уилкатт
источник
Ядерный вариант работал там, где удалялись, очищались, переустанавливались, автоматически удалялись, и то dpkgи другое apt-get. Спасибо.
LAFK говорит восстановить Монику
Это лучшее решение , если вы просто хотите , чтобы все ядерное оружие и начать все сначала. Сэкономил мне много времени! (Я также использовал --purge после --remove)
andersevenrud
Пожалуйста, можете ли вы дать несколько советов о том, как заполнить это, package_nameкогда у нас есть более 1000 строк (некоторые дубликаты) в файлах журнала apt ...
nyxee
4

Это исправило мою проблему:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb
Красимир
источник
Поэтому, пожалуйста, пометьте его как правильный ответ.
Ярно
Работает отлично.
Шубхам Патель
3

Откройте свой терминал и вставьте эти строки после строки

sudo rm -rf  /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb
sudo apt-get autoclean
sudo apt-get update
sudo apt-get upgrade

затем попробуйте еще раз

rɑːdʒɑ
источник
2

Та же самая ошибка повторяется, если мы это сделаем apt-get cleanи apt-get -f installне удалим ненужные данные из /var/lib/dpkg/statusфайла в Ubuntu.

Предположим, нам нужно удалить поврежденный пакет apache. Изначально мы должны открыть файл состояния и найти пакет apache. Удалите полное описание пакета и сохраните файл состояния. Затем попробуйте использовать apt-get -f installи apt-get clean.

user649305
источник
2

ничего из вышеперечисленного не помогло мне. в конце концов я отредактировал файл / var / lib / dpkg / status и удалил оттуда пакеты.

Хотя я бы не советовал это делать, просто если что-то не получится ...

BonifatiusK
источник
Кажется, это единственное, что сработало для меня. Даже так называемая «ядерная опция» --force-remove-reinstreq не смогла удалить нарушающий пакет. Спасибо, сэр.
Алекс
1

Ничто из вышеперечисленного не помогло мне

Я использовал sudo aptitude.

Он сразу нашел ошибку и предложил варианты. Вы выбираете, и это исправляет это.

Арье Бейтц
источник
также исправил это для меня в Debian - это было единственное рабочее решение для меня. Ни один из комментариев раньше не работал для меня! Благодарность!
Hirbod
0

Вот один из них:

обновить список пакетов, как это

 sudo apt-get update

затем очистите все частичные пакеты

 sudo apt-get autoclean

Теперь почистите apt кеш

 sudo apt-get clean

Теперь удалите все ненужные зависимости

 sudo apt-get autoremove

с помощью приведенной выше команды вы можете определить любые поврежденные пакеты и принудительно удалить их следующим образом.

 sudo dpkg --remove --force-remove-reinstreq package_name

Наконец, зачистите любые другие пакеты с зависимостями

 sudo apt-get -f install 

Скажи мне, как это происходит.

Олу Смит
источник
Я думаю, что эта команда неверна: `sudo dpkg --remove -force --force-remove-reinstreq имя_пакета.
Хуан Симон
Джи ... так какой из них правильный путь?
Олу Смит
0
  1. запросить все пакеты, которые установлены сегодня или вчера awk -v foo=$(date '+%Y-%m-%d') -v bar=$(date -d "yesterday" '+%Y-%m-%d') '($1==foo || $1==bar) && $3~/^install$/ { print $4 }' /var/log/dpkg.log
  2. wine-qqintl: i386 вызвал проблему, поэтому я удаляю пакет sudo dpkg -r wine-qqintl:i386

  3. сделанный.

Мин чжанхуй
источник
1
хорошо, мы можем получить недавно установленные пакеты, но это не отвечает на вопрос, который спрашивает, как удалить сломанные пакеты
Zanna
0

У меня была проблема со сломанным пакетом коди. Я открыл менеджер пакетов synaptic и использовал «сломанный» фильтр, чтобы найти пакет и пометил его для полного удаления. Это работало как чемпион.

Джо
источник