Jak debugować błąd konfiguracji dpkg w instalacji podprocesowej?

17

W skrócie: Próbuję zainstalować spamassassin, ale dpkg zwraca tylko:

dpkg: error processing spamassassin (--configure):
subprocess installed post-installation script returned error exit status 1

Próbowałem znaleźć więcej informacji o tym, co dzieje się źle, ale nie mogę znaleźć nigdzie przydatnego logowania.

W / var / crash generowany jest raport o awarii spamassassin, ale daje to tylko stare błędy dpkg i:

 Start-Date: 2014-02-17  19:18:13
 Commandline: apt-get install spamassassin
AptOrdering:
 spamassassin: Configure
 amavisd-new-postfix: Configure

Następnie następuje rejestracja dmesg od uruchomienia. Amavis podaje błąd, ponieważ spamassassin zależności nie jest skonfigurowany.

Sprawdziłem pliki dziennika:

apt history.log
apt term.log
dpkg.log
syslog.log

ale bez dodatkowych informacji.

Próbowałem dpkg -D ze wszystkimi możliwymi ósemkami, ale nie znajduję nic użytecznego w tym, co może pójść nie tak.

Napisano wiele pytań i możliwych rozwiązań dotyczących błędów dpkg i wiele próbowałem, ale bez dodatkowych informacji nie mam wrażenia, że ​​nigdzie się pojawia.

Z pewnością musi być gdzieś możliwość przeczytania, co się dzieje źle, lub podkręcenie rejestrowania, aby zostało zarejestrowane?

Wymagać
źródło
Musisz przewinąć terminal w górę i zobaczyć konkretny błąd w wyświetlonym komunikacie. Aby je debugować, musisz zobaczyć, jaki dokładnie błąd spowodował ten błąd.
Thomas Ward
powinien być opis w terminalu, czy przeglądałeś /var/log/spamassassin/spamd.log?
kamil
Przebiłem wszystkie kłody, oczyściłem, przerobiłem instalację na wiele różnych sposobów. Wszystko, aby znaleźć trochę więcej informacji o błędzie, ale nie mogę znaleźć żadnego. Spamd.log nie jest jeszcze tworzony.
Requist

Odpowiedzi:

16

Ok, znalazłem rozwiązanie tego problemu. Myślałem, że nie byłem w stanie zwiększyć rejestrowania, aby uzyskać więcej danych, dane już przedstawione miały wskazówkę dotyczącą problemu.

dpkg: error processing spamassassin (--configure):
subprocess installed post-installation script returned error exit status 1

mówi, że dpkg napotkał błąd podczas przetwarzania spamassassin podczas uruchamiania konfiguracji. Następny wiersz mówi nam, że skrypt poinstalacyjny nie zakończył się poprawnie.

W katalogu / var / lib / dpkg / info możemy zlokalizować pliki skryptowe dpkg, plik: spamassassin.postinst daje nam plik skryptowy, który wygenerował błąd.

W tym pliku wiemy, że musimy spojrzeć na kod uruchamiany przez config:

if ["$ 1" = "configure"]; następnie

i po jakimś debugowaniu znalazłem linię:

su debian-spamd -c "sa-update --gpghomedir / var / lib / spamassassin / sa-update-keys \ --import /usr/share/spamassassin/GPG.KEY"

zwrócił kod wyjścia 1 (uruchom polecenie @commandline i użyj echo $? obok, aby uzyskać kod wyjścia)

Problem polegał na tym, że użytkownik debian-spamd już istniał w moim systemie, ale jego powłoka logowania to / bin / false. Su -ing z / bin / false zwraca bez komunikatu, ale kod wyjścia 1.

Dodanie -s / bin / sh do polecenia rozwiązało problem, ale ostatecznie zmieniłem powłokę logowania użytkownika, aby pozostać w synchronizacji z przyszłymi aktualizacjami.

Wymagać
źródło
Miałem podobny problem do ciebie. Instalator po prostu zawodzi. Mój okazał się problemem z instalacją najnowszej wersji z backport-debian dla wheezy. Okazało się, że zmienili skrypt poinstalacyjny na wywołanie „su - $ OWNER -c” sa-update ... ”, które wykonało pełne wykonanie powłoki powłoki exec do / bin / sh, co było niezgodne z naszym profilem / etc / i pliki /etc/profile.d. usunięcie „-” czyniąc go „su $ OWNER -c ....” naprawiono dla mnie
Vagnerr
Nie mam dokładnego problemu, ale twoje wskazówki debugowania bardzo mi pomogły! dzięki!
chaosguru,
9

Ogólnie rzecz biorąc, aby debugować takie problemy, należy edytować /var/lib/dpkg/info/spamassassin.postinst(lub .preinst, pr .prermlub .postrm; w zależności od tego, który z nich zawiedzie) i zmienić #!/bin/shw górnym wierszu na #!/bin/sh -x(to samo, jeśli bashzamiast tego: wystarczy dodać -x)

Zapewniłoby to debugowanie skryptu powłoki wiersz po wierszu, dzięki czemu można było powiedzieć, gdzie kończy działanie, kodem niezerowym (powodując niepowodzenie instalacji / aktualizacji).

Prawdopodobnie wymagałoby to jednak przynajmniej pewnych umiejętności skryptowych do debugowania.

Matija Nalis
źródło