HPLip e bugs no current

Se aventurar com o Slackware-current tem sempre o risco de tropeçar em alguns problemas, quando não diversos. Recentemente (21/08/2015) atualizei minha máquina com o current e dentre os problemas fique sem video (xf86-video-intel) e sem impressora, e provavelmente algum outro problema que não percebi. Mas isto faz parte de diversão e ficar próximo a linha de frente.

A correção para o vídeo veio rápido, com um upgrade na segunda-feira seguinte (24/08/2015), mas o hplip ainda não teve uma correção efetiva, ao menos não para meu hardware. Houve algumas mudanças no hplip-3.15.7, com a adição de patchs (hplip-CommonDefinations.patch e hplip.no.upgrade.diff), mas ainda está tendo alguns problemas. Aparentemente é alguma compatibilidade com a biblioteca PyQt4, mas não sei ao certo. Trabalhar com o current lhe deixa sujeito a estas intempéries.

O objetivo deste texto é dar uma solução simples e rápida para quando não se está com muita paciência para procurar a solução mais adequada, a qual costuma funcionar relativamente bem na maioria dos problemas com o Slackware-current.

Uma Solução

Apés verificar as configurações, uma solução rápida que adoto muito nestes casos é recompilar o pacote:

  • minha primeira alternativa é apenas recompilar o pacote. Em alguns casos é alguma incompatibilidade bibliotecas atualizadas que uma mera recompilação resolve;
  • a segunda alternativa é alterar a versão das fontes para uma versão inferior e em alguns casos até superior.

Geralmente uma das duas ações acima resolve o problema enquanto uma atualização do pacote não sai.

Recompilando o Pacote

O procedimento para recompilar o pacote é simples. Na pasta source/ do espelho do Slackware64-current você encontra as fontes, patchs, scripts (SlackBuild), … para a construção do pacote. Supondo que possua um espelho do Slackware64-current em /home/ftp/linux/Slackware/Slackware64-current, proceda como segue:

SLACKDIR=/home/ftp/linux/Slackware/Slackware64-current
[prompt]mkdir /root/temp
[prompt]cd $SLACKDIR/source
[prompt]find . -name hplip
./ap/hplip
[prompt]cp -a ./ap/hplip /root/temp/
[prompt]cd /root/temp/hplip
ls
doinst.sh.gz         hplip-CommonDefinations.patch.gz  hplip.no.upgrade.diff.gz
hplip-3.15.7.tar.xz  hplip.SlackBuild*                 slack-desc
[prompt]# ls /var/log/packages/hplip-*
/var/log/packages/hplip-3.15.7-x86_64-2
[prompt]BUILD=5 ./hplip.SlackBuild
hplip-3.15.7/
hplip-3.15.7/Makefile.in
hplip-3.15.7/unload.py
hplip-3.15.7/probe.py
...
var/
var/lib/
var/lib/hp/

Slackware package /tmp/hplip-3.15.7-x86_64-5.txz created.
[prompt]

Neste momento o pacote está pronto. Observe que passei a variável BUILD com o valor 5. O BUILD é o último número no nome do pacote. A linha com o ls /var/log/packages/hplip-* é para verificar o BUILD antes de passar para o script hplip.SlackBuild. Isto não é algo fundamental, apenas por uma questão de coerência. Agora é instalar o pacote e testar.

upgradepkg /tmp/hplip-3.15.7-x86_64-5.txz
...
[prompt]

Esta versão do hplip funciona de forma um pouco diferente da hplip-3.15.2, que estava instalado anteriormente. O hp-setup deve ser executado como usuário comum. No momento de escrever no sistema, configurar o cups, a senha do root é solicitada e o sistema é configurado.

Em meu sistema a caixa de diálogo com a solicitação da senha do root não abre e o script congela neste ponto. Não dá para saber se o problema está no diálogo ou antes dele, pois o aplicativo não manda qualquer informação para o console. Tentei as opções -g, -l, … e nada.

Isto me levou a tentativa 2: downgrade na versão do hplip.

Downgrade do Pacote

Neste caso é necessário alguma alteração no SlackBuild do hplip, mas a edição, geralmente, é simples. Normalmente apenas a remoção dos patchs já resolve o problema. Patchs geralmente é endereçado a uma versão específica da fonte e não deve funcionar em outras. Bom isto não é sempre verdade, de modo que algum teste pode elucidar a questão. Geralmente removo os patchs e vejo no que dá. Se necessário reabilito um patch por vez e observo se o pacote compila, … De uma forma mais objetiva, desative as linhas que aplicam os patch, diff, …

Os patchs são aplicados às fontes antes dos comandos de configuração (./configure) e compilação (geralmente um make) do pacote. No script hplip.Slackbuild são as linhas 68 e 70. Basta adicionar um caractere “#” no inicio das linhas.

rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1
cd $PKGNAM-$VERSION || exit 1
 
#zcat $CWD/hplip.no.upgrade.diff.gz | patch -p1 --verbose || exit 1
 
#zcat $CWD/hplip-CommonDefinations.patch.gz | patch -p1 --verbose || exit 1
 
chown -R root:root .

Agora é baixar a fonte de um hplip inferior e testar. As fontes disponíveis estão em

https://sourceforge.net/projects/hplip/files/hplip/

Neste caso o downgrade para a versão 3.15.6 resolveu o problema. Baixe o tar.gz correspondente:

wget http://sourceforge.net/projects/hplip/files/hplip/3.15.6/hplip-3.15.6.tar.gz
--2015-08-26 11:35:34--  http://sourceforge.net/projects/hplip/files/hplip/3.15.6/hplip-3.15.6.tar.gz
Resolving sourceforge.net (sourceforge.net)... 216.34.181.60
Connecting to sourceforge.net (sourceforge.net)|216.34.181.60|:80... connected.
HTTP request sent, awaiting response... 302 Found
...
[prompt]

em seguida basta recompilar passando a versão da fonte para o SlackBuild:

BUILD=1 VERSION=3.15.6 ./hplip.SlackBuild
hplip-3.15.6/
hplip-3.15.6/Makefile.in
hplip-3.15.6/unload.py
hplip-3.15.6/probe.py
hplip-3.15.6/scan.py
hplip-3.15.6/fax/
...
usr/share/polkit-1/actions/com.hp.hplip.policy
var/
var/lib/
var/lib/hp/

Slackware package /tmp/hplip-3.15.6-x86_64-1.txz created.
[prompt]

Agora é fazer o downgrade e testar.

upgradepkg /tmp/hplip-3.15.6-x86_64-1.txz
...
[prompt]

Como disse acima, em meu caso este downgrade resolveu o problema. Executei o hp-setup como usuário em um terminal e configurei minha impressora MFP M127fn.

Conclusão

Este procedimento pode ser empregado, em princípio, em qualquer pacote do Slackware (ou de qualquer outra distribuição aplicado as devidas alterações) seja o current ou não. Em alguns casos é mais conveniente buscar uma solução mais específica, com alguma consulta à rede, listas e fóruns.

Consulta a rede não tem apresentado muitos resultados relevantes atualmente, por conta do modo “burro” de resolver problemas que esta se popularizando no mundo GNU/Linux, onde cada distribuição tem seus comandos específicos para fazer isto e aquilo, que simplesmente não informam nada sobre o que está sendo feito sobre o sistema.

Isto pode parecer ótimo para o “usuário”, mas do ponto de vista técnico suprime as informações para os desenvolvedores dos comandos mágicos e a mais ninguém. Se não necessitássemos de novos desenvolvedores isto não seria um problema. Mas este comportamento a longo prazo tende a restringir a criação dos novos desenvolvedores, os quais ficam cada vez mais restritos a meros tecladores de comandos mágicos, que em algum momento um profissional capacitado criou.

Um outro ponto muito negativo disto e o isolamento das distribuições, onde as soluções ficam completamente particulares, desinformativas e irrelevantes para outras distribuições.

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.