Como consertar um dpkg quebrado pelo driver deb MFC-7340 da Brother

9

Estou recebendo um erro do 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 do apt-get não funciona, nem apt-get install -f .

Como faço para reinstalar um pacote de um arquivo deb local?

Saída:

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% 
    
por Roman A. Taycher 02.10.2010 / 14:06

4 respostas

13

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

dpkg --install local-file.deb

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

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

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

Atualização: Com base na transcrição que você postou, parece que o  O pacote brmfc7340lpr não pode ser (re) instalado porque  script de pós-remoção está causando erros.

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

  • X.postinst run após o pacote ter sido instalado, por exemplo, para iniciar serviços fornecidos pelo pacote.

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

  • X.postrm run após o pacote foi removido, por exemplo, para sinalizar qualquer serviço opcionalmente usando o pacote que não é mais disponível. (Por exemplo, um pacote de driver de impressora quer sinalizar cpus / lpr para remover impressoras dependendo desse driver específico.)

Agora, esse pacote brmfc7340lpr parece tentar (re) iniciar o lpd daemon da impressora após a remoção, o que não funcionará como o Ubuntu usa o CUPS em vez disso: você deve definitivamente procurar uma impressora compatível com CUPS motorista - veja o link na resposta de Jorge Castro. (Acho que isso é um bug no pacote, pois ele não deve reiniciar o serviço lpd incondicionalmente, mas apenas recarregue-o se ele já estiver rodando .

A melhor opção para avançar vem de esta barra de lançamento responder :

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

Isso irá efetivamente (re) iniciar o CUPS quando o serviço lpd for pesquisado.

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

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

  2. Instale lpr , limpe o pacote brmfc6340lpr , elimine lpr : this requer um pouco de atenção, pois lpr está em conflito com o padrão CUPS do sistema de spooling de impressora Ubuntu:

    a. sudo aptitude install lpr (isso removerá cups-bsd e    ubuntu-desktop como efeito colateral)

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

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

por Riccardo Murri 02.10.2010 / 14:19
5

A solução de Riccardo deve funcionar, estou supondo 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á em execução e está causando erros. Tente instalar o pacote lpr dos repositórios e, em seguida, instale o deb e veja se isso funciona.

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

    
por Jorge Castro 05.10.2010 / 01:56
3

Na verdade, me deparei com o mesmo problema. Acontece que eu segui algumas informações irrelevantes e criei um arquivo /etc/init.d/lpd como um softlink para /etc/init.d/cups O script .postrm verifica o lpd e, se existir, tenta iniciar o serviço. Depois que eu deletei o arquivo lpd com link no diretório init.d, a instalação e a remoção do pacote voltaram ao normal.

    
por Matt 20.10.2011 / 01:12
2

O problema aqui parece ser que o pacote conseguiu se instalar pela metade, mas agora seus scripts de manutenção são todos faililng (devido a serem incapazes de iniciar o serviço lpd).

Você deve conseguir resolver isso editando o arquivo /var/lib/dpkg/info/brmfc7340lpr.postrm e comentando (adicionando # ao início da linha) a linha que está tentando iniciar o lpd (ou simplesmente comentar tudo). Você poderá então executar dpkg --configure -a para obter o pacote corretamente instalado antes de poder removê-lo.

Talvez seja necessário editar mais scripts do mantenedor de pacotes para remover o pacote. Todos eles estarão em /var/lib/dpkg/info/ e receberão o nome de brmfc7340lpr.X , em que X pode ser um dos preinst , postinst , prerm , postrm .

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

    
por RAOF 06.10.2010 / 03:04