Usuwanie uszkodzonych pakietów

9

Ostatnio, z powodu frustracji związanej z konfiguracją phpmyadmina, postanowiłem zacząć od zera.

Niestety, podczas fazy dezinstalacji, pojawiło się pytanie o hasło roota dla mysql, którego wtedy nie miałem pod ręką. Wystarczy powiedzieć, że poinformował mnie, że pozostaną komponenty pozostałości, ponieważ nie będzie w stanie prawidłowo wyczyścić łączników bazy danych.

Kiedy wróciłem do domu, próbowałem usunąć pakiet, przez aptitude purgektóry okazało się, że nie jest on silniejszy niż aptitude removeto, że zobaczył phpmyadmin, próbował go usunąć i nie powiodło się, ponieważ katalogi powiązane z pakietem zostały już usunięte z mojej wcześniejszej próby.

Próbowałem ponownie zainstalować phpmyadmin, ale aptitude po prostu stwierdził, że nie ma dostępnej aktualizacji i nic nie zrobiłem, jeśli byłaby to aktualizacja, prawdopodobnie napotkalibyśmy te same problemy niezależnie od tego.

W związku z tym przystąpiłem do czyszczenia mysql, upuszczając używaną bazę danych i czyszcząc ją z tabel użytkowników. Nie mam jednak pojęcia, co jeszcze zostało z opakowania, ani nawet jak wyczyścić haczyków w odpowiedni sposób.

Wynik dpkg --purge

ickronia:/home/ken# dpkg --purge phpmyadmin
(Reading database ... 27158 files and directories currently installed.)
Removing phpmyadmin ...
/var/lib/dpkg/info/phpmyadmin.prerm: line 5: /usr/share/dbconfig-common/dpkg/prerm.mysql: No such file or directory
dpkg: error processing phpmyadmin (--purge):
 subprocess pre-removal script returned error exit status 1
/var/lib/dpkg/info/phpmyadmin.postinst: line 35: /usr/share/dbconfig-common/dpkg/postinst.mysql: No such file or directory
dpkg: error while cleaning up:
 subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
phpmyadmin

Postępując zgodnie z radą Gile'a, próbowałem ponownie zainstalować zależność dbconfig-common

ickronia:/home/ken# aptitude reinstall dbconfig-common
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
dbconfig-common is not currently installed, so it will not be reinstalled.
dbconfig-common is not currently installed, so it will not be reinstalled.
The following packages are BROKEN:
  phpmyadmin
0 packages upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 0B of archives. After unpacking 0B will be used.
The following packages have unmet dependencies:
  phpmyadmin: Depends: php5-mcrypt but it is not installable
              Depends: dbconfig-common but it is not installable
              Depends: libjs-mootools (>= 1.2.4.0~debian1-1) which is a virtual  package.
The following actions will resolve these dependencies:

Remove the following packages:
phpmyadmin

Score is 121

Accept this solution? [Y/n/q/?] n

*** No more solutions available ***

The following actions will resolve these dependencies:

Remove the following packages:
phpmyadmin

Score is 121

Accept this solution? [Y/n/q/?] n

*** No more solutions available ***

The following actions will resolve these dependencies:

Remove the following packages:
phpmyadmin

Score is 121

Accept this solution? [Y/n/q/?] y
The following packages will be REMOVED:
  phpmyadmin{a}
0 packages upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
Need to get 0B of archives. After unpacking 17.7MB will be freed.
Do you want to continue? [Y/n/?] y
Writing extended state information... Done
(Reading database ... 27158 files and directories currently installed.)
Removing phpmyadmin ...
/var/lib/dpkg/info/phpmyadmin.prerm: line 5: /usr/share/dbconfig-common/dpkg/prerm.mysql: No such file or directory
dpkg: error processing phpmyadmin (--remove):
 subprocess pre-removal script returned error exit status 1
/var/lib/dpkg/info/phpmyadmin.postinst: line 35: /usr/share/dbconfig-common/dpkg/postinst.mysql: No such file or directory
dpkg: error while cleaning up:
 subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
 phpmyadmin
E: Sub-process /usr/bin/dpkg returned an error code (1)
A package failed to install.  Trying to recover:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Writing extended state information... Done
Reading task descriptions... Done

ickronia:/home/ken#

Wygląda na to, że phpmyadmin wyczyścił dbconfig-common

ickronia:/usr/share/dbconfig-common# ls -alF
total 12
drwxr-xr-x  3 root root 4096 2011-02-09 08:09 ./
drwxr-xr-x 98 root root 4096 2011-01-20 21:42 ../
drwxr-xr-x  3 root root 4096 2011-01-05 11:08 data/
ickronia:/usr/share/dbconfig-common#

Podjęto próbę dpkg z archiwów zgodnie z sugestią Gilesa

ickronia:/usr/share/dbconfig-common# dpkg -i /var/cache/apt/archives/{dbconfig-common,php5-mcrypt,libjs-mootools}*.deb
Selecting previously deselected package dbconfig-common.
(Reading database ... 27161 files and directories currently installed.)
Unpacking dbconfig-common (from .../dbconfig-common_1.8.46_all.deb) ...
Selecting previously deselected package php5-mcrypt.
Unpacking php5-mcrypt (from .../php5-mcrypt_5.3.3-6_i386.deb) ...
Selecting previously deselected package libjs-mootools.
Unpacking libjs-mootools (from .../libjs-mootools_1.2.5~debian1-2_all.deb) ...
Setting up dbconfig-common (1.8.46) ...
dpkg: dependency problems prevent configuration of php5-mcrypt:
 php5-mcrypt depends on libltdl7 (>= 2.2.6b); however:
  Package libltdl7 is not installed.
 php5-mcrypt depends on libmcrypt4; however:
  Package libmcrypt4 is not installed.
dpkg: error processing php5-mcrypt (--install):
 dependency problems - leaving unconfigured
Setting up libjs-mootools (1.2.5~debian1-2) ...
Processing triggers for man-db ...
Processing triggers for libapache2-mod-php5 ...
Reloading web server config: apache2.
Errors were encountered while processing:
 php5-mcrypt
ickronia:/usr/share/dbconfig-common#

Mam serwer WWW działający na php, ale jestem gotów zaryzykować przestoje, aby rozwiązać ten problem.

Rozpoznać
źródło
Skopiuj i wklej dokładnie wypróbowane polecenia oraz cały wynik. Prawdopodobnie możemy Ci pomóc, ale nie bez dokładnych komunikatów o błędach.
Gilles „SO- przestań być zły”

Odpowiedzi:

7

phpmyadminzależy od tego dbconfig-common, co zawiera /usr/share/dbconfig-common/dpkg/prerm.mysql. Wygląda na to, że udało Ci się odinstalować dbconfig-commonbez odinstalowania phpmyadmin, co nie powinno się zdarzyć (próbowałeś --forceczegoś zrobić?).

Radzę najpierw spróbować aptitude reinstall dbconfig-common. Jeśli to działa, powinieneś mieć system w spójnym stanie, z którego możesz spróbować aptitude purge phpmyadminponownie.

Inną rzeczą, którą możesz zrobić, jest skomentowanie obraźliwej linii /var/lib/dpkg/info/phpmyadmin.prerm. Może to spowodować, że będziesz mógł odinstalować phpmyadmin. Podejrzewam, że zrobiłeś to, co powinna zrobić ta linia, kiedy ręcznie edytowałeś te tabele mysql, ale phpmyadminogólnie nie znam administratora bazy danych, więc tylko zgaduję.

Różnica między removei purgepolega na tym, że removepo prostu usuwa program i jego pliki danych (rzeczy, które można ponownie pobrać), podczas gdy purgenajpierw robi to, co removerobi, a następnie usuwa także pliki konfiguracyjne (rzeczy, które mogłeś edytować lokalnie). Jeśli removezawiedzie, to też purge.

Gilles „SO- przestań być zły”
źródło
Ostatnio próbowałem zasugerować ponowne zainstalowanie dbconfig-common, ale bezskutecznie. Zaktualizowałem swoje pytania o wyniki tego przedsięwzięcia.
Ken
@Ken: Spróbuj dpkg -i /var/cache/apt/archives/{dbconfig-common,php5-mcrypt,libjs-mootools}*.deb. Jeśli nie masz debetów w pamięci podręcznej, pobierz je z Package.debian.org . Jeśli pojawią się komunikaty o błędach, opublikuj je, a ja (lub ktoś inny) może ci w tym pomóc.
Gilles „SO- przestań być zły”
Próbowano bezskutecznie. Wygląda na to, że rój szarańczy został uwolniony na moim czystym serwerze Debian. Pytanie zostało zaktualizowane, aby odzwierciedlić tę ostatnią próbę.
Ken
@Ken: Musisz również zainstalować zależności php5-mcrypt. Aptitude wykona za ciebie pracę; możesz spróbować, ale myślę, że odmówi poruszenia, dopóki nie doprowadzisz php5myadmindo dobrego stanu. dpkgjest niższy poziom i może działać nawet na częściowo uszkodzonej bazie danych pakietów.
Gilles „SO- przestań być zły”
Próbując zainstalować php5-mcrypt, najpierw monitował o usunięcie phpmyadmini dbconfig-common. Nie mogłem znaleźć innych rozwiązań, więc pomyślałem, że upadnie na twarz. Przeciwnie, sam fakt, że php5-mycrypt został „zasugerowany” do instalacji, pozwolił na prawidłowe wyczyszczenie haków i usunięcie phpmyadmini dbconfig-common. Od tamtej pory ponownie je instalowałem phpmyadmin(chociaż przez tar, aby uzyskać większą kontrolę). Wygląda na to, że najnowsza wersja nie wymaga mysql do samoorganizacji. Dziękuję Giles za usunięcie szarańczy z mojego serwera!
Ken
3

Czasami system zarządzania pakietami jest tak zepsuty (często w okrągłym łańcuchu zależności), że jedyną kombinacją poleceń, które znalazłem, aby usunąć problematyczne pakiety, są:

  • cd /var/lib/dpkg/info ; rm <packagename.*>
  • dpkg --purge --force-remove-reinstreq <packagename>
  • LUB dpkg --remove --force-remove-reinstreq <packagename>
  • Następnie, apt-get install <packagename>aby ponownie zainstalować pakiet

Czasami plik zastępowania stanu może również wymagać naprawy, a powyższa procedura może powodować błędy związane z tym. Sposób naprawy plików zastępowania stanu zależy od tego, czy jest to błąd oznaczający użytkownika, czy nie.

Ogólnie:

  • pliki zastępowania stanu znajdują się w: /var/lib/dpkg/statoverride
  • Możesz go zaktualizować, uruchamiając: dpkg-statoverride --remove <stateoverride-filename>
  • Możesz nawet edytować je ręcznie, jeśli wiesz, co robisz
Chux Uzoeto
źródło
2

(Zakładam, że miałeś na myśli aptitude purgei apt-get removeponieważ cytowane polecenia nie istnieją)

Spróbować dpkg --purge phpmyadmin. Jest niższy poziom niż inne narzędzia, więc może być bardziej skuteczny w tym przypadku.

tshepang
źródło
Dało to ten sam wynik, ale bez szczegółowej informacji zwrotnej wymaganej przez aptitude. Dzięki za złapanie mojego mielenia nazw poleceń.
Ken
Mam coś, co wydaje się być tym samym problemem, ale niestety ręcznie skompilowałem PHP, Apache i więcej, więc zainstalowanie ich przez dodanie modułu php5-mcrypt (który ma wszystko, co wspomniałem jako zależność) spowodowałoby dość bałagan i niechciane powielanie. Czy nie ma innej drogi?
ken
0

Możesz uruchomić „apt-get -f install”, aby poprawić te:

The following packages have unmet dependencies:
 postgresql-client-9.1 : Breaks: postgresql-9.1 (< 9.1.11-0ubuntu0.12.04) but 9.1.10-0ubuntu12.04 is to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Stałem w obliczu powyższego problemu, używając problemu polecenia „sudo dpkg --purge postgresql-9.1”

manjunath.k
źródło