Como corrigir um dpkg quebrado pelo driver deb do Brother MFC-7340

9

Estou recebendo um erro apt-get que diz

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

O brmfc7340lpr é um driver de impressora - é um arquivo deb local. Fazer uma limpeza do dpkg ou apt-get não funciona, nem funciona apt-get install -f.

Como reinstalar um pacote de um arquivo deb local?

Resultado:

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
fonte
Você pode renomear sua pergunta. Isso faz com que seu problema pareça um pouco genérico demais. Sua verdadeira questão não é como reinstalar qualquer deb local, mas como lidar com um problema muito específico.
andrewsomething

Respostas:

13

Você sempre pode (re) instalar um pacote usando dpkg:

dpkg --install local-file.deb

Para fazer uma instalação em "sala limpa", você pode primeiro limpar o pacote e depois instalá-lo novamente:

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

Pode ser necessário adicionar a opção --force-dependsdurante a limpeza, se algum outro pacote depender brmfc7340lpr.

Atualização: com base na transcrição que você postou, parece que o brmfc7340lprpacote não pode ser (re) instalado porque seu script de pós-remoção está com erro.

Esses arquivos são armazenados no diretório /var/lib/dpkg/info; para cada pacote X, pode haver qualquer um destes scripts:

  • X.postinstexecutar após a instalação do pacote, por exemplo, para iniciar os serviços fornecidos pelo pacote.

  • X.prermexecute antes de remover / limpar o pacote, por exemplo, para garantir que os daemons fornecidos pelo pacote sejam parados.

  • X.postrmexecutar após a remoção do pacote, por exemplo, para sinalizar opcionalmente qualquer serviço usando o pacote que ele não está mais disponível. (Por exemplo, um pacote de driver de impressora pode querer sinalizar cpus / lpr para remover impressoras, dependendo desse driver específico.)

Agora, este brmfc7340lprpacote parece tentar (re) iniciar o lpd daemon da impressora após a remoção, que não funcionará como o Ubuntu usa o CUPS: você definitivamente deve procurar um driver de impressora compatível com o CUPS - veja o link na resposta de Jorge Castro. (Eu acho que isso é um bug no pacote, pois ele não deve reiniciar o lpdserviço incondicionalmente, mas apenas recarregá-lo se ele já estiver em execução .)

A melhor opção para avançar vem desta resposta da barra de ativação :

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

Isso efetivamente (re) iniciará o CUPS quando o lpdserviço for pesquisado.

Caso contrário, só vejo duas opções, ambas bastante desagradáveis:

  1. Edite o /var/lib/dpkg/info/brmfc7340lpr.postrmscript e comente a linha que está chamando /etc/init.d/lpd start (ou restartou stop), (por exemplo, substitua-a por /bin/true). Outra opção é apenas colocar exit 0como a primeira linha sem comentários no script. Este seria o meu favorito, mas requer um pouco de confiança na edição de scripts de shell.

  2. Instale lpr, limpe o brmfc6340lprpacote, limpe lpr: isso requer um pouco de atenção, pois lprconflita com o CUPS do sistema de spool da impressora Ubuntu padrão:

    uma. sudo aptitude install lpr(isso removerá cups-bsde ubuntu-desktopcomo efeito colateral)

    b. sudo aptitude purge brmfc7340lpr lpr(deve funcionar agora)

    c. sudo aptitude install cups-bsd ubuntu-desktop(restaure o sistema ao seu estado original)

Riccardo Murri
fonte
dpkg
Roman A. Taycher
1
@ Roman Que mensagem de erro você recebe? Faz --purgeprimeiro e depois --installdo trabalho?
Riccardo Murri
O @Roman atualizou com algumas instruções específicas que podem ajudar. Concordo com o comentário de andrewsomething de que isso não parece mais uma pergunta genérica e deve ser renomeada.
Riccardo Murri
1
Acabei renomeando lpd para nlpdn temporariamente para instalá-lo.
Roman A. Taycher 7/10/10
5

A solução de Riccardo deve funcionar, acho que o problema está aqui:

start: Unknown job: lpd

Adivinha 1: Parece que o deb está tentando reiniciar um serviço que não está sendo executado e está com erro. Tente instalar o lprpacote a partir dos repositórios e, em seguida, instale o deb e veja se isso funciona.

Adivinha 2: Parece que você está tentando instalar uma deb a partir de um site para uma impressora 7340 da Brother: Esta página pode ser um bom ponto de partida se você desejar dividi-la em outra pergunta.

Jorge Castro
fonte
/etc/init.d/lpd start start:
Trabalho
3

Na verdade, eu tive o mesmo problema. Acontece que segui algumas informações irrelevantes e criei um /etc/init.d/lpdarquivo como um softlink para /etc/init.d/cups O .postrmscript verifica o lpd e, se existir, tenta iniciar o serviço. Depois que eu excluí o arquivo lpd vinculado no diretório init.d, a instalação e remoção do pacote voltou ao normal.

Matt
fonte
2

O problema aqui parece ser que o pacote conseguiu se instalar pela metade, mas agora seus scripts de manutenção estão com falha (devido à impossibilidade de iniciar o serviço lpd).

Você poderá resolver isso editando o /var/lib/dpkg/info/brmfc7340lpr.postrmarquivo e comentando (adicionando #ao início da linha) a linha que está tentando iniciar o lpd (ou apenas comentar tudo). Você deve ser capaz de executar dpkg --configure -apara instalar o pacote corretamente antes de poder removê-lo.

Talvez seja necessário editar mais dos scripts de pacotes de mantenedor, a fim de remover o pacote - todos estarão na /var/lib/dpkg/info/, e eles vão ser nomeado algo como brmfc7340lpr.Xque Xpode ser um dos preinst, postinst, prerm, postrm.

Este é um exemplo do tipo de destruição que um pacote mal escrito pode causar.

RAOF
fonte