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.