Jak naprawić dpkg uszkodzony przez sterownik deb Brother Brother MFC-7340

9

Dostaję komunikat o błędzie apt-get, który mówi

E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.

Brmfc7340lpr to sterownik drukarki - jest to lokalny plik deb. Wykonanie dpkg lub apt-get purge nie działa, podobnie jak nie apt-get install -f.

Jak ponownie zainstalować pakiet z lokalnego pliku deb?

Wynik:

box-name% sudo apt-get upgrade
[sudo] password for username: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.
box-name% sudo apt-get purge brmfc7340lpr
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.
box-name% sudo dpkg --purge brmfc7340lpr 
dpkg: error processing brmfc7340lpr (--purge):
 Package is in a very bad inconsistent state - you should
 reinstall it before attempting a removal.
Errors were encountered while processing:
 brmfc7340lpr
box-name% sudo dpkg --install brmfc7340lpr-2.0.2-1.i386.deb
Selecting previously deselected package brmfc7340lpr.
(Reading database ... 725204 files and directories currently installed.)
Preparing to replace brmfc7340lpr 2.0.2-1 (using .../brmfc7340lpr-2.0.2-1.i386.deb) ...
Unpacking replacement brmfc7340lpr ...
start: Unknown job: lpd
dpkg: warning: subprocess old post-removal script returned error exit status 1
dpkg - trying script from the new package instead ...
start: Unknown job: lpd
dpkg: error processing brmfc7340lpr-2.0.2-1.i386.deb (--install):
 subprocess new post-removal script returned error exit status 1
start: Unknown job: lpd
dpkg: error while cleaning up:
 subprocess new post-removal script returned error exit status 1
Errors were encountered while processing:
brmfc7340lpr-2.0.2-1.i386.deb
box-name% sudo apt-get install -f                                     
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: The package brmfc7340lpr needs to be reinstalled, but I can't find an archive for it.
box-name% 
Roman A. Taycher
źródło
Możesz zmienić nazwę swojego pytania. Sprawia, że ​​twój problem brzmi trochę zbyt ogólnie. Twoje prawdziwe pytanie nie polega na tym, jak ponownie zainstalować tylko lokalny deb, ale jak poradzić sobie z bardzo konkretnym problemem.
andrewsomething

Odpowiedzi:

13

Zawsze możesz (ponownie) zainstalować pakiet, używając dpkg:

dpkg --install local-file.deb

Aby wykonać instalację w „czystym pokoju”, możesz najpierw wyczyścić pakiet, a następnie zainstalować go ponownie:

dpkg --purge brmfc7340lpr
dpkg --install brmfc7340lpr*.deb

Może być konieczne dodanie opcji --force-dependspodczas czyszczenia, jeśli zależy od jakiegoś innego pakietu brmfc7340lpr.

Aktualizacja: Na podstawie opublikowanego transkryptu wydaje się, że brmfc7340lprpakiet nie może zostać (ponownie) zainstalowany, ponieważ jego skrypt po usunięciu jest błędny.

Te pliki są przechowywane w katalogu /var/lib/dpkg/info; dla każdego pakietu Xmoże istnieć jeden z tych skryptów:

  • X.postinsturuchamiane po zainstalowaniu pakietu, np. w celu uruchomienia usług świadczonych przez pakiet.

  • X.prermuruchom przed usunięciem / wyczyszczeniem pakietu, np. aby upewnić się, że demony dostarczone przez pakiet są zatrzymane.

  • X.postrmuruchamiany po usunięciu pakietu, np. w celu zasygnalizowania dowolnej usłudze opcjonalnie za pomocą pakietu, że nie jest ona już dostępna. (Na przykład pakiet sterownika drukarki może chcieć zasygnalizować cpus / lpr, aby usunąć drukarki w zależności od tego konkretnego sterownika).

Teraz brmfc7340lprwydaje się , że ten pakiet próbuje (ponownie) uruchomić lpd demona drukarki po jego usunięciu, co nie będzie działać, ponieważ Ubuntu zamiast tego używa CUPS: zdecydowanie powinieneś poszukać sterownika drukarki kompatybilnego z CUPS - patrz link w odpowiedzi Jorge Castro. (Myślę, że jest to błąd w pakiecie, ponieważ nie powinien on lpdbezwarunkowo ponownie uruchamiać usługi, ale wystarczy ją ponownie załadować, jeśli jest już uruchomiony .)

Najlepsza opcja, by iść naprzód pochodzi z odpowiedzi startera :

ln -s /etc/init.d/cpus /etc/init.d/lpd

To skutecznie (ponownie) uruchomi CUPS, gdy lpdzamiast tego zostanie wyszukana usługa.

W przeciwnym razie widzę tylko dwie opcje, obie raczej nieprzyjemne:

  1. Edytuj /var/lib/dpkg/info/brmfc7340lpr.postrmskrypt i skomentuj wiersz, który się wywołuje /etc/init.d/lpd start ( restartlub stop), (np. Po prostu zamień go na /bin/true). Inną opcją jest po prostu umieszczenie exit 0jako pierwszego wiersza bez komentarza w skrypcie. Byłoby to moje ulubione, ale wymaga nieco pewności przy edytowaniu skryptów powłoki.

  2. Zainstaluj lpr, wyczyść brmfc6340lprpakiet, wyczyść lpr: wymaga to trochę uwagi, ponieważ powoduje lprkonflikt z domyślnym systemem buforowania drukarki Ubuntu CUPS:

    za. sudo aptitude install lpr(spowoduje to usunięcie cups-bsdi ubuntu-desktopjako efekt uboczny)

    b. sudo aptitude purge brmfc7340lpr lpr(powinien działać teraz)

    do. sudo aptitude install cups-bsd ubuntu-desktop(przywróć system do pierwotnego stanu)

Riccardo Murri
źródło
dpkg --install nie działa
Roman A. Taycher
1
@Roman Jaki komunikat o błędzie pojawia się? Czy --purgenajpierw, a potem --installdziała?
Riccardo Murri,
@Roman zaktualizował niektóre szczegółowe instrukcje, które mogą pomóc. Zgadzam się z komentarzem andrewsumphing, że nie jest to już pytanie ogólne i należy zmienić jego nazwę.
Riccardo Murri
1
Skończyłem tymczasowo zmienić nazwę lpd na nlpdn, aby go zainstalować.
Roman A. Taycher
5

Rozwiązanie Riccardo powinno zadziałać, zgaduję, że problem leży tutaj:

start: Unknown job: lpd

Zgadnij 1: Wygląda na to, że deb próbuje zrestartować usługę, która nie działa i występuje błąd. Spróbuj zainstalować lprpakiet z repozytoriów, a następnie zainstalować deb i sprawdź, czy to działa.

Zgadnij 2: Wygląda na to, że próbujesz zainstalować deb ze strony internetowej dla drukarki Brother 7340: Ta strona może być dobrym punktem wyjścia, jeśli chcesz podzielić ją na inne pytanie.

Jorge Castro
źródło
/etc/init.d/lpd start start: Nieznana praca: lpd
Roman A. Taycher
3

W rzeczywistości napotkałem ten sam problem. I okazuje się, następnie jakiś nieistotnych informacji i stworzył /etc/init.d/lpdplik jako dowiązanie do /etc/init.d/cups The .postrmkontroli scenariusz do LPD, a jeśli istnieje, próbuje uruchomić usługę. Po usunięciu pliku lpd z linkami programowymi w katalogu init.d instalacja i usuwanie pakietu wróciło do normy.

Matt
źródło
2

Problem wydaje się polegać na tym, że pakietowi udało się w połowie zainstalować, ale teraz wszystkie jego skrypty obsługujące nie działają (z powodu niemożności uruchomienia usługi lpd).

Powinieneś być w stanie rozwiązać ten problem, edytując /var/lib/dpkg/info/brmfc7340lpr.postrmplik i komentując (dodając #na początku linii) linię, która próbuje uruchomić lpd (lub po prostu komentować wszystko). Powinieneś być w stanie uruchomić, dpkg --configure -aaby poprawnie zainstalować pakiet, zanim będziesz mógł go usunąć.

Być może trzeba zmienić kilka skryptów pakietów instalacyjnych w celu usunięcia pakietu - oni wszyscy być /var/lib/dpkg/info/, a oni być nazwany coś brmfc7340lpr.Xgdzie Xmoże być jednym z preinst, postinst, prerm, postrm.

Jest to przykład spustoszenia, które może siać źle napisana paczka.

RAOF
źródło