Comment réparer un dpkg cassé par le pilote deb Brother MFC-7340

9

Je reçois une erreur apt-get qui dit

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

Le brmfc7340lpr est un pilote d'imprimante - c'est un fichier deb local. Faire une purge dpkg ou apt-get ne fonctionne pas non plus apt-get install -f.

Comment réinstaller un package à partir d'un fichier deb local?

Production:

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
la source
Vous voudrez peut-être renommer votre question. Cela rend votre problème un peu trop générique. Votre vraie question n'est pas de savoir comment réinstaller n'importe quel deb local, mais comment gérer un problème très spécifique.
andrewsomething

Réponses:

13

Vous pouvez toujours (ré) installer un package en utilisant dpkg:

dpkg --install local-file.deb

Pour effectuer une installation en "salle blanche", vous pouvez d'abord purger le package puis le réinstaller:

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

Vous devrez peut-être ajouter une option --force-dependspendant la purge, si un autre package en dépend brmfc7340lpr.

Mise à jour: D'après la transcription que vous avez publiée, il semble que le brmfc7340lprpackage ne puisse pas être (ré) installé car son script de post-suppression est en erreur.

Ces fichiers sont stockés dans un répertoire /var/lib/dpkg/info; pour chaque package X, il peut exister l'un de ces scripts:

  • X.postinstexécuté après l'installation du package, par exemple pour démarrer les services fournis par le package.

  • X.prermexécutez avant de supprimer / purger le package, par exemple pour vous assurer que les démons fournis par le package sont arrêtés.

  • X.postrmexécuté après la suppression du package, par exemple pour signaler à tout service utilisant éventuellement le package qu'il n'est plus disponible. (Par exemple, un package de pilotes d'imprimante peut vouloir signaler à cpus / lpr de supprimer les imprimantes en fonction de ce pilote spécifique.)

Maintenant, ce brmfc7340lprpaquet semble essayer de (re) démarrer le lpd démon de l' imprimante lors de la suppression, ce qui ne fonctionnera pas car Ubuntu utilise CUPS à la place: vous devriez certainement rechercher un pilote d'imprimante compatible CUPS - voir le lien dans la réponse de Jorge Castro. (Je pense que c'est un bug dans le package, car il ne devrait pas redémarrer le lpdservice sans condition, mais simplement le recharger s'il est déjà en cours d'exécution .)

La meilleure option pour aller de l'avant vient de cette réponse du tableau de bord :

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

Cela démarrera (redémarrera) efficacement CUPS lorsque le lpdservice sera recherché.

Sinon, je ne vois que deux options, toutes deux plutôt désagréables:

  1. Modifiez le /var/lib/dpkg/info/brmfc7340lpr.postrmscript et commentez la ligne qui invoque /etc/init.d/lpd start (ou restartou stop) (par exemple, remplacez-la simplement par /bin/true). Une autre option consiste à simplement placer exit 0comme première ligne de non-commentaire dans le script. Ce serait mon préféré, mais nécessite un peu de confiance avec l'édition des scripts shell.

  2. Installer lpr, purger le brmfc6340lprpaquet, purger lpr: cela nécessite un peu d'attention car il y a des lprconflits avec le système de spoulage d'imprimante Ubuntu par défaut CUPS:

    une. sudo aptitude install lpr(cela supprimera cups-bsdet ubuntu-desktopcomme effet secondaire)

    b. sudo aptitude purge brmfc7340lpr lpr(devrait fonctionner maintenant)

    c. sudo aptitude install cups-bsd ubuntu-desktop(restaurer le système à son état d'origine)

Riccardo Murri
la source
dpkg --install ne fonctionne pas
Roman A. Taycher
1
@Roman Quel message d'erreur obtenez-vous? Cela fonctionne-t-il d' --purgeabord et ensuite --install?
Riccardo Murri
@Roman mis à jour avec quelques instructions spécifiques qui pourraient vous aider. Je suis d'accord avec le commentaire d'Andrewsomething selon lequel cela ne ressemble plus à une question générique et devrait être renommé.
Riccardo Murri
1
J'ai fini par renommer lpd en nlpdn temporairement pour l'installer.
Roman A. Taycher
5

La solution de Riccardo devrait fonctionner, je suppose que le problème réside ici:

start: Unknown job: lpd

Devinez 1: Il semble que le deb essaie de redémarrer un service qui n'est pas en cours d'exécution et qui génère des erreurs. Essayez d'installer le lprpackage à partir des référentiels, puis installez le deb et voyez si cela fonctionne.

Devinez 2: Il semble que vous essayez d'installer un deb à partir d'un site Web pour une imprimante Brother 7340: Cette page peut être un bon point de départ si vous souhaitez la scinder en une autre question.

Jorge Castro
la source
/etc/init.d/lpd start start:
Travail
3

En fait, je suis tombé sur le même problème. Il s'avère que j'ai suivi des informations non pertinentes et créé un /etc/init.d/lpdfichier en tant que lien logiciel vers /etc/init.d/cups Le .postrmscript vérifie lpd et s'il existe, essaie de démarrer le service. Après avoir supprimé le fichier lpd lié par un lien logiciel dans le répertoire init.d, l'installation et la suppression du package sont revenues à la normale.

Mat
la source
2

Le problème semble être que le paquet a réussi à se faire à moitié installé, mais maintenant ses scripts de maintenance sont tous défaillants (car ils ne peuvent pas démarrer le service lpd).

Vous devriez pouvoir résoudre ce problème en modifiant le /var/lib/dpkg/info/brmfc7340lpr.postrmfichier et en commentant (en ajoutant #au début de la ligne) la ligne qui essaie de démarrer lpd (ou tout simplement commenter tout). Vous devriez alors pouvoir exécuter dpkg --configure -apour obtenir le package correctement installé avant de pouvoir le supprimer.

Vous pourriez avoir besoin de modifier plusieurs des packages scripts de maintenance afin de supprimer le paquet - ils seront tous dans /var/lib/dpkg/info/, et ils vont être nommé quelque chose comme brmfc7340lpr.XXpeut être l' un preinst, postinst, prerm, postrm.

Ceci est un exemple du genre de ravages qu'un paquet mal écrit peut causer.

RAOF
la source