Come riparare un dpkg rotto dal driver di deb Brother MFC-7340


9

Ricevo un errore apt-get che dice

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

Brmfc7340lpr è un driver di stampante: è un file deb locale. Fare una purga dpkg o apt-get non funziona, né lo fa apt-get install -f.

Come reinstallare un pacchetto da un file deb locale?

Produzione:

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% 

Potresti voler rinominare la tua domanda. Fa sembrare il tuo problema un po 'troppo generico. La tua vera domanda non è come reinstallare solo qualsiasi deb locale, ma come gestire un problema molto specifico.
Andrewsomething

Risposte:


13

Puoi sempre (reinstallare) un pacchetto usando dpkg:

dpkg --install local-file.deb

Per effettuare un'installazione "clean room", è possibile prima eliminare il pacchetto e quindi installarlo di nuovo:

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

Potrebbe essere necessario aggiungere un'opzione --force-dependsdurante l'eliminazione, se qualche altro pacchetto dipende brmfc7340lpr.

Aggiornamento: in base alla trascrizione che hai pubblicato, sembra che il brmfc7340lprpacchetto non possa essere (ri) installato perché il suo script di post-rimozione sta sbagliando.

Quei file sono memorizzati nella directory /var/lib/dpkg/info; per ogni pacchetto X, può esserci uno di questi script:

  • X.postinsteseguito dopo l'installazione del pacchetto, ad es. per avviare i servizi forniti dal pacchetto.

  • X.prermeseguire prima di rimuovere / eliminare il pacchetto, ad esempio, per garantire che i daemon forniti dal pacchetto vengano arrestati.

  • X.postrmeseguito dopo che il pacchetto è stato rimosso, ad esempio per segnalare facoltativamente qualsiasi servizio utilizzando il pacchetto che non è più disponibile. (Ad esempio, un pacchetto del driver della stampante potrebbe voler segnalare cpus / lpr per rimuovere le stampanti a seconda di quel driver specifico.)

Ora, questo brmfc7340lprpacchetto sembra provare a (ri) avviare il lpd demone della stampante dopo la rimozione, che non funzionerà poiché Ubuntu utilizza CUPS: dovresti assolutamente cercare un driver di stampante compatibile con CUPS - vedi il link nella risposta di Jorge Castro. (Penso che questo sia un bug nel pacchetto, in quanto non dovrebbe riavviare il lpdservizio incondizionatamente, ma ricaricarlo se è già in esecuzione .)

L'opzione migliore per andare avanti proviene da questa risposta del launchpad :

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

In questo modo si riavvierà effettivamente CUPS quando lpdverrà invece cercato il servizio.

Altrimenti, vedo solo due opzioni, entrambe piuttosto spiacevoli:

  1. Modifica lo /var/lib/dpkg/info/brmfc7340lpr.postrmscript e commenta la riga che sta invocando /etc/init.d/lpd start (o restarto stop), (ad esempio, sostituiscilo con /bin/true). Un'altra opzione è quella di posizionarsi exit 0come prima riga non commentata nello script. Questo sarebbe il mio preferito, ma richiede un po 'di confidenza con la modifica degli script della shell.

  2. Installa lpr, elimina il brmfc6340lprpacchetto, elimina lpr: ciò richiede un po 'di attenzione poiché è in lprconflitto con il sistema di spooling della stampante Ubuntu predefinito CUPS:

    un. sudo aptitude install lpr(questo rimuoverà cups-bsde ubuntu-desktopcome effetto collaterale)

    b. sudo aptitude purge brmfc7340lpr lpr(dovrebbe funzionare ora)

    c. sudo aptitude install cups-bsd ubuntu-desktop(ripristina il sistema allo stato originale)


dpkg --install non funziona
Roman A. Taycher,

1
@Roman Quale messaggio di errore ricevi? --purgePrima funziona e poi --installfunziona?
Riccardo Murri,

@Roman aggiornato con alcune istruzioni specifiche che potrebbero aiutare. Concordo con il commento di andrewsomething sul fatto che questa non sembra più una domanda generica e dovrebbe essere rinominata.
Riccardo Murri,

1
Ho finito per rinominare lpd in nlpdn temporaneamente per installarlo.
Roman A. Taycher,

5

La soluzione di Riccardo dovrebbe funzionare, suppongo che il problema risieda qui:

start: Unknown job: lpd

Indovina 1: sembra che il deb stia tentando di riavviare un servizio che non è in esecuzione e si sta esaurendo. Prova a installare il lprpacchetto dai repository, quindi installa il deb e verifica se funziona.

Indovina 2: Sembra che tu stia cercando di installare un deb da un sito Web per una stampante Brother 7340: questa pagina potrebbe essere un buon punto di partenza se vuoi dividerlo in un'altra domanda.


/etc/init.d/lpd start start:
Lavoro

3

In realtà, ho riscontrato lo stesso problema. Risulta che ho seguito alcune informazioni irrilevanti e ho creato un /etc/init.d/lpdfile come softlink per /etc/init.d/cups Lo .postrmscript verifica la presenza di lpd e, se esiste, tenta di avviare il servizio. Dopo aver eliminato il file lpd con collegamento software nella directory init.d, l'installazione e la rimozione del pacchetto sono tornate alla normalità.


2

Il problema qui sembra essere che il pacchetto è riuscito a installarsi a metà, ma ora gli script del manutentore sono tutti in errore (a causa dell'incapacità di avviare il servizio lpd).

Dovresti essere in grado di risolverlo modificando il /var/lib/dpkg/info/brmfc7340lpr.postrmfile e commentando (aggiungendo #all'inizio della riga) la riga che sta cercando di avviare lpd (o semplicemente commentando tutto). Dovresti quindi essere in grado di eseguire dpkg --configure -aper ottenere il pacchetto correttamente installato prima di poterlo rimuovere.

Potrebbe essere necessario modificare più degli script del manutentore pacchetti al fine di rimuovere il pacchetto - saranno tutti in /var/lib/dpkg/info/, e saranno un nome simile a brmfc7340lpr.Xdove Xpuò essere uno dei preinst, postinst, prerm, postrm.

Questo è un esempio del tipo di caos che un pacchetto mal scritto può causare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.