Jak usunąć uszkodzone pakiety w Ubuntu

38

Nie mogę usunąć uszkodzonego opakowania. Użyj następującego polecenia: sudo apt-get -f install ale otrzymuję następującą odpowiedź:

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)

Próbowałem różnych poleceń, takich jak

 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

Ale nie dostałem żadnego wyniku. Nie mogę zainstalować synaptic. Wszelkie pomysły, jak mogę usunąć zepsuty pakiet?

Krasimir
źródło
Oto kilka odpowiedzi sugerujących --force-remove-reinstreqi --force-overwrite. Pamiętaj, że powinieneś używać tych dwóch (szczególnie pierwszego) tylko jeśli jesteś ekspertem od Linuksa, ponieważ może to całkowicie uszkodzić twój system.
g_p

Odpowiedzi:

55

uruchom to polecenie, aby usunąć uszkodzone pakiety w Ubuntu.

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

po usunięciu pakietu zaktualizuj swój system za pomocą polecenia

sudo apt-get update

uruchom ponownie system po pomyślnej aktualizacji.

premal
źródło
5
Tego polecenia należy zawsze unikać, ponieważ bardziej psuje system niż naprawia
rancho
2
@rancho zależy od tego, jaki to pakiet.
Philip
nice one, sposób zapisu package_name Gus zawsze jeszcze mogę zobaczyć listę 900 linii w szalonej formacie, na przykład: Broken libopencv-highgui2.4v5:amd64 Conflicts on libopencv-highgui2.4 [ amd64 ] < 2.4.8+dfsg1-2ubuntu1 > ( libs ). czekanie na LTS naprawdę zrobiło mi tę szaloną sztuczkę.
nyxee
@rancho „to bardziej niszczy system niż naprawia”. Czy możesz to rozwinąć? man dpkgniewiele pomaga.
Stéphane Gourichon
To była jedyna rzecz, która działała dla mnie. Zepsułem mój mysql podczas aktualizacji pakietu. Teraz nie mogłem wyczyścić ani ponownie zainstalować. To uratowało mi życie.
Ankit Singhaniya
11

Otwórz terminal i użyj następującego polecenia

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

To powinno rozwiązać twój problem.

g_p
źródło
11

Znalazłem to:

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

Działa najlepiej. Jeśli pojawi się błąd, że nie usunie pakietu, ponieważ zależy od niego inny pakiet, usuń również ten inny pakiet. Musisz powtórzyć ten krok kilka razy, a następnie ponownie zainstalować usunięte pakiety.

Jest force-remove-reinstreqto „opcja nuklearna” usuwania pakietu. Nie powiedzie się to tylko wtedy, gdy istnieje inny pakiet w zależności od tego, który chcesz usunąć - ponownie, w tym przypadku, również usunąłem ten pakiet zależny.

Bryan Wilcutt
źródło
Opcja nuklearna działała tam, gdzie czyści się, czyści, instaluje ponownie, autorove, przez oba dpkgi apt-getnie udaje się. Dziękuję Ci.
LAFK mówi Przywróć Monikę
To najlepszym rozwiązaniem, jeśli chcesz po prostu nuke wszystko i zacząć od nowa. Zaoszczędził mi dużo czasu! (Użyłem również - purge after --remove)
andersevenrud
proszę podać kilka wskazówek, jak to wypełnić, package_namegdy mamy ponad 1000 wierszy (niektóre zduplikowane) w plikach dziennika apt.
nyxee
4

To naprawiło mój problem:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb
Krasimir
źródło
Proszę więc zaznaczyć to jako poprawną odpowiedź.
jarno
Działa świetnie.
Shubham Patel,
3

Otwórz terminal i wklej te linie po linii

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

następnie spróbuj ponownie

rɑːdʒɑ
źródło
2

Ten sam błąd powtarza się, jeśli to zrobimy apt-get cleani apt-get -f installdopóki nie usuniemy niepotrzebnych danych z /var/lib/dpkg/statuspliku w Ubuntu.

Załóżmy, że musimy usunąć uszkodzony pakiet Apache. Początkowo musimy otworzyć plik statusu i wyszukać apache pakietu. Usuń cały opis pakietu i zapisz plik statusu. Następnie spróbuj użyć apt-get -f installi apt-get clean.

użytkownik649305
źródło
2

nic z powyższych nie działało dla mnie. ostatecznie dokonałem edycji pliku / var / lib / dpkg / status i usunąłem stamtąd pakiety.

Trudno nie poradziłbym tego zrobić, tylko jeśli coś innego zawiedzie ...

BonifatiusK
źródło
To wydaje się być jedyną rzeczą, która działała dla mnie. Nawet tak zwana „opcja nuklearna” opcji --force-remove-reinstreq nie mogła usunąć pakietu naruszającego prawo. Dziękuję Panu.
alex
1

Żadne z powyższych nie działało dla mnie

Kiedyś sudo aptitude.

Natychmiast znalazł błąd i zaoferował opcje. Ty wybierasz i to naprawia.

Aryeh Beitz
źródło
naprawiłem to również dla mnie na Debianie - było to dla mnie jedyne działające rozwiązanie. Żaden z wcześniejszych komentarzy nie zadziałał dla mnie! Dzięki!
Hirbod
0

Tutaj jest jeden:

zaktualizuj listę pakietów w ten sposób

 sudo apt-get update

następnie wyczyść wszystkie częściowe pakiety

 sudo apt-get autoclean

Teraz wyczyść apt cache

 sudo apt-get clean

Teraz usuń niepotrzebne zależności

 sudo apt-get autoremove

z powyższego polecenia możesz zidentyfikować wszelkie uszkodzone pakiety i usunąć je w ten sposób

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

Wreszcie mopup wszystkie inne pakiety z zależnościami

 sudo apt-get -f install 

Powiedz mi jak idzie.

Olu Smith
źródło
Myślę, że to polecenie jest niepoprawne: `sudo dpkg --remove -force --force-remove-reinstreq nazwa_pakietu.
Juan Simón
Ji ... więc który z nich jest prawidłowy?
Olu Smith,
0
  1. przeszukuj wszystkie pakiety, które są zainstalowane dzisiaj lub wczoraj 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 spowodował problem, więc usuwam pakiet sudo dpkg -r wine-qqintl:i386

  3. gotowy.

Ming Zhanghui
źródło
1
ok, możemy pobrać ostatnio zainstalowane takie pakiety, ale to nie odpowiada na pytanie, jak usunąć uszkodzone pakiety
Zanna,
0

Miałem problem ze zepsutym pakietem kodi. Otworzyłem menedżera pakietów synaptycznych i użyłem filtra „zepsuty” do zlokalizowania pakietu i oznaczyłem go do całkowitego usunięcia. Działa jak mistrz.

Joe
źródło