Cómo reparar un dpkg roto por el controlador de deb Brother MFC-7340

9

Recibo un error apt-get que dice

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

El brmfc7340lpr es un controlador de impresora, es un archivo deb local. Hacer una purga dpkg o apt-get no funciona, tampoco lo hace apt-get install -f.

¿Cómo reinstalo un paquete desde un archivo deb local?

Salida:

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
fuente
Es posible que desee cambiar el nombre de su pregunta. Hace que su problema parezca demasiado genérico. Su verdadera pregunta no es cómo reinstalar cualquier deb local, sino cómo manejar un problema muy específico.
andrewsomething

Respuestas:

13

Siempre puede (re) instalar un paquete usando dpkg:

dpkg --install local-file.deb

Para realizar una instalación de "sala limpia", primero puede purgar el paquete y luego instalarlo nuevamente:

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

Es posible que deba agregar una opción --force-dependsdurante la purga, si depende de algún otro paquete brmfc7340lpr.

Actualización: según la transcripción que publicó, parece que el brmfc7340lprpaquete no se puede (re) instalar porque su secuencia de comandos posterior a la eliminación está produciendo un error.

Esos archivos se almacenan en el directorio /var/lib/dpkg/info; para cada paquete X, puede haber cualquiera de estos scripts:

  • X.postinstejecutar después de que se haya instalado el paquete, por ejemplo, para iniciar los servicios proporcionados por el paquete.

  • X.prermejecutar antes de eliminar / purgar el paquete, por ejemplo, para garantizar que los demonios proporcionados por el paquete se detengan.

  • X.postrmejecutar después de que se haya eliminado el paquete, por ejemplo, para indicar a cualquier servicio que utilice opcionalmente el paquete que ya no está disponible. (Por ejemplo, un paquete de controlador de impresora puede indicarle a cpus / lpr que elimine las impresoras dependiendo de ese controlador específico).

Ahora, este brmfc7340lprpaquete parece intentar (re) iniciar el lpd demonio de la impresora al eliminarlo, lo que no funcionará ya que Ubuntu usa CUPS en su lugar: definitivamente debe buscar un controlador de impresora compatible con CUPS; consulte el enlace en la respuesta de Jorge Castro. (Creo que este es un error en el paquete, ya que no debería reiniciar el lpdservicio incondicionalmente, sino simplemente volver a cargarlo si ya se está ejecutando ).

La mejor opción para avanzar proviene de esta respuesta de la plataforma de lanzamiento :

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

Esto efectivamente (re) iniciará CUPS cuando lpdse busque el servicio.

De lo contrario, solo veo dos opciones, ambas bastante desagradables:

  1. O bien editar el /var/lib/dpkg/info/brmfc7340lpr.postrmguión, y comentar la línea que se invoca /etc/init.d/lpd start (o restarto stop), (por ejemplo, simplemente reemplazan con /bin/true). Otra opción es colocarla exit 0como la primera línea sin comentarios en el script. Este sería mi favorito, pero requiere un poco de confianza al editar scripts de shell.

  2. Instalar lpr, purgar el brmfc6340lprpaquete, purgar lpr: esto requiere un poco de atención, ya que lprentra en conflicto con las CUPS del sistema de spool de impresora predeterminado de Ubuntu:

    a. sudo aptitude install lpr(esto eliminará cups-bsdy ubuntu-desktopcomo efecto secundario)

    si. sudo aptitude purge brmfc7340lpr lpr(debería funcionar ahora)

    C. sudo aptitude install cups-bsd ubuntu-desktop(restaurar el sistema a su estado original)

Riccardo Murri
fuente
dpkg --install no funciona
Roman A. Taycher
1
@Roman ¿Qué mensaje de error recibes? ¿ --purgePrimero y luego --installfunciona?
Riccardo Murri
@Roman se actualizó con algunas instrucciones específicas que podrían ayudar. Estoy de acuerdo con el comentario de andrewsomething de que esto ya no parece una pregunta genérica y debe cambiarse de nombre.
Riccardo Murri
1
Terminé cambiando el nombre de lpd a nlpdn temporalmente para instalarlo.
Roman A. Taycher
5

La solución de Riccardo debería funcionar, supongo que el problema radica aquí:

start: Unknown job: lpd

Adivina 1: Parece que deb está intentando reiniciar un servicio que no se está ejecutando y está produciendo errores. Intente instalar el lprpaquete desde los repositorios y luego instale el deb y vea si eso funciona.

Adivina 2: Parece que estás intentando instalar una deb desde un sitio web para una impresora Brother 7340: esta página podría ser un buen punto de partida si quieres dividirla en otra pregunta.

Jorge Castro
fuente
/etc/init.d/lpd start start:
Trabajo
3

En realidad, me encontré con el mismo problema. Resulta que seguí información irrelevante y creé un /etc/init.d/lpdarchivo como un enlace suave a /etc/init.d/cups El .postrmscript busca lpd y, si existe, intenta iniciar el servicio. Después de eliminar el archivo lpd softlinked en el directorio init.d, la instalación y eliminación del paquete volvió a la normalidad.

Mate
fuente
2

El problema aquí parece ser que el paquete ha logrado instalarse a medias, pero ahora sus scripts de mantenimiento fallan (debido a que no puede iniciar el servicio lpd).

Debería poder resolver esto editando el /var/lib/dpkg/info/brmfc7340lpr.postrmarchivo y comentando (agregando #al inicio de la línea) la línea que está intentando iniciar lpd (o simplemente comentar todo). Debería poder ejecutar dpkg --configure -apara instalar el paquete correctamente antes de poder eliminarlo.

Puede que tenga que editar más de las secuencias de comandos de paquetes de mantenedor con el fin de eliminar el paquete - todos ellos estarán en /var/lib/dpkg/info/, y van a ser nombrado algo así brmfc7340lpr.X, donde Xpuede ser uno de preinst, postinst, prerm, postrm.

Este es un ejemplo del tipo de estragos que un paquete mal escrito puede causar.

RAOF
fuente