Em abril escrevi um artigo sobre um ultilitário que desenvolvi para manter o Slackware atualizado, o slackext. Naquele momento, escrever um utilitário para isso foi o modo que mais me pareceu conveniente para manter uma instalação de Slackware -current multilib atualizada. Eu não conhecia o Slackpkg+.

Há umas duas semanas atrás, estava lendo o feed do Alien Pastures, blog do Eric Hameleers (vencedor do prêmio Best FOSS or Linux Blog of 2013, merecidíssimo!), e li o artigo 'Introducing slackpkg+, an extension to slackpkg for 3rd party repositories'. Se você lê inglês, vá lá na fonte ler sobre isso que é melhor. Este artigo é para os leitores da língua portuguesa.

O Slackpkg+ não é uma ferramenta muito antiga. O primeiro commit dele no GitHub, versão 0.1, é de 12/11/2011. Mas o desenvolvimento parece ter acelerado mesmo a partir de abril deste ano, com a versão 0.9x. Tanto que um cara como o AlienBOB (vulgo Eric Hameleers) escreveu, recomendou e ensinou a usar. E nele eu confio.

A grande vantagem do Slackpkg+ é que ele, como é literalmente um plugin, adiciona ao slackpkg o suporte a múltiplos repositórios, já que este último só suporta os mirrors com o repositório oficial do Slackware. Isto torna o slackpkg oficial capaz de realizar as mesmas operações ele já faz no seu Slackware, mas agora com pacotes oriundos de muitos outros repositórios existentes por aí, tudo em um tapa só, em uma ferramenta só e do jeito certo.

Mas isso adiciona um problema: suponha que eu queria usar os pacotes KDE do AlienBOB, provenientes do ktown. Quando o Patrick Volkerding (BDFL do Slackware) lançar uma nova atualização para o KDE no -current, esses novos pacotes vão sobrescrever os anteriores. Uma bagunça, certo? Errado! O Slackpkg+ tem uma solução elegante para a questão das prioridades dos pacotes.

Certo, mas e aí? Como usa?

Antes de mais nada, baixe e instale o pacote do Slackpkg+ direto do slackfinder.org. Se você usa o meu slackext, pode baixar o e instalar pacote com:

# slackext http://www.slakfinder.org/slackpkg+/

Se não usa, baixe com:

$ wget http://www.slakfinder.org/slackpkg+/

Daí instale com:

# installpkg path_to_slackpkg+/pkg/*.txz

Com o Slackpkg+ instalado, baixe as chaves GPG dos repositórios adicionais:

# slackpkg update gpg

Feito isto, é hora de configurar. O arquivo de configuração está em:

# /etc/slackpkg/slackpkgplus.conf

Veja como configurei o meu (suprimi propositadamente os comentários):

SLACKPKGPLUS=on
VERBOSE=1
PKGS_PRIORITY=( multilib:.* restricted_current:.* restricted:.* alienbob_current:.* alienbob:.* )
REPOPLUS=( slackpkgplus multilib alienbob alienbob_current restricted )
MIRRORPLUS['alienbob']=http://taper.alienbase.nl/mirrors/people/alien/sbrepos/14.0/x86_64/
MIRRORPLUS['restricted']=http://taper.alienbase.nl/mirrors/people/alien/restricted_sbrepos/14.0/x86_64/
MIRRORPLUS['slackpkgplus']=http://slakfinder.org/slackpkg+/
MIRRORPLUS['multilib']=http://taper.alienbase.nl/mirrors/people/alien/multilib/current/
MIRRORPLUS['alienbob_current']=http://taper.alienbase.nl/mirrors/people/alien/sbrepos/current/x86_64/
MIRRORPLUS['restricted_current']=http://taper.alienbase.nl/mirrors/people/alien/restricted_sbrepos/current/x86_64/

Vamos entender essa configuração?

  1. SLACKPKGPLUS: liga ou desliga o danado;
  2. MIRRORPLUS: cada um é um repositório diferente. A URL deve ser a da raiz dos repositórios, ou seja, o diretório que contém o arquivo PACKAGES.TXT.
  3. REPOPLUS: lista os repositórios que você quer colocar em uso. Você pode ter uma linha MIRRORPLUS não comentada, mas ela não será ativada se não estiver listada em REPOPLUS. A ordem dos repositórios não importa aqui.
  4. PKGS_PRIORITY: lemrba que eu falei que a prioridade dos pacotes não é um problema? Pois bem, aqui é onde essa mágica ocorre. Este array diz que pacotes do repositório X tem prioridade sobre Y, sendo que os que são listados primeiro tem precedência sobre os listados por último. Por exemplo: quando eu coloco o multilib:.* em primeiro, eu digo ao Slackpkg+ que os pacotes que tenham o mesmo nome em todos os demais repositórios não devem ser instalados/atualizados sobre os que vierem dos demais repositórios. Isso vale inclusive para os pacotes que vêm do repositório oficial do Slackware, que como você deve ter notado, nem precisa ser listado na configuração do Slackpkg+, pois ele é coisa do slackpkg oficial e possui a menor prioridade.

Beleza! Configurado. Agora é atualizar as informações locais de cada repositório. Para isso, rode:

# slackpkg update

Você vai notar que este processo demora bem mais do que aquele com o slackpkg original. Isso é normal, pois agora, ao invés de um, ele está verificando N repositórios.

A partir daí as novidades começam a aprecer. Tente isso:

# slackpkg search vlc

Veja que lindo:

The list below shows all packages with name matching "vlc".

[ Status           ] [ Repository               ] [ Package                                  ]
  uninstalled          alienbob                     phonon-vlc-0.6.0-x86_64-1alien            
   installed           alienbob                     npapi-vlc-20130408-x86_64-1alien          
   installed           alienbob                     vlc-2.0.8-x86_64-1alien                   
  upgrade              alienbob_current             npapi-vlc-20130408-x86_64-1alien --> npapi-vlc-20130818-x86_64-...  
  upgrade              alienbob_current             vlc-2.0.8-x86_64-1alien --> vlc-20130819-x86_64-1alien  
   installed           restricted                   npapi-vlc-20130408-x86_64-1alien          
   installed           restricted                   vlc-2.0.8-x86_64-1alien                   
  upgrade              restricted_current           npapi-vlc-20130408-x86_64-1alien --> npapi-vlc-20130818-x86_64-...  
  upgrade              restricted_current           vlc-2.0.8-x86_64-1alien --> vlc-20130819-x86_64-1alien 

Sacou, mano? O slackpkg oficial nem sabe da existência do vlc, afinal esse pacote de fato não existe na distribuição oficial do Slackware. Mas como o Slackpkg+ é o cara (ao invés do Obama ou do Lula), ele sabe.

E para atualizar tudo? Simples, como sempre:

# slackpkg upgrade-all

E você verá algo assim:

Atualizando a porra toda, de tudo que é lugar, num tapa só. Rá!

Note que saída do pacotes a serem atualizados mostra também de qual repositório o pacote virá. Viu o multilib lá? Rá, garoto!

Um último e muito importante detalhe sobre a configuração do Slackpkg+. Note que ele é um plugin para o slackpkg oficial do Slackware. Portanto, todos os pacotes que você colocou na lista negra deste não serão atualizados por aquele. Aconselho comentar os seguintes itens do seu /etc/slackpkg/blacklist:

#[0-9]+alien
#[0-9]+compat32

Por outro lado, mantenha os pacotes do sbopkg, do xsb (SlaXBMC) e seus próprios pacotes listados (se você usa isso, é claro):

# This one will blacklist all SBo packages (*ponce are the SBo current repository):
[0-9]+_SBo
[0-9]+ponce

# This one will blacklist all XBMC packages:
[0-9]+xsb

# This one will blacklist my own packages
[0-9]+deny

Quando NÃO usar o Slackpkg+ {#quando-não-usar-o-slackpkg}

O Slackpkg+ é perfeito para manter seu Slackware em ponto de bala. E como toda coisa perfeita, tem problemas e restrições.

Não recomendo o seu uso em repositórios que não disponham de pacotes assinados com GPG e MD5. Ele funciona com esses repositórios, mas não recomendo. A razão disso é que para que ele funcione com os repositórios que não dispõem de assinaturas, todos os demais pacotes de todos os outros repositórios, mesmo aqueles que contenham assinaturas, não serão mais verificados, uma vez que para rodar o slackpkg em um modo compatível com repositórios não assinados você vai precisar fazer isso:

# slackpkg -checkgpg=off upgrade-all

Isso é ruim! Muito ruim! Não use!

Outra circunstância que o Slackpkg+ não funciona (e aí é não funciona mesmo) é quando o repositório não contém o arquivo PACKAGES.TXT. Neste caso, ele não faz uma busca na árvore do repositório para saber quais arquivos .txz existem lá. Ele procura isso apenas no PACKAGES.TXT.

Isso é um problema, por exemplo, quando você tem o XBMC instalado a partir do repositório do SlaXBMC. Como o pessoal do SlaXBMC lança os updates do XBMC em um diretório à parte, a atualização dele no sistema se dá somente através da atualização dos pacotes efetivamente atualizados neste diretório. Só que este diretório não possui o PACKAGES.TXT, e aí o Slackpkg+ não encontra nada.

Para atualizar pacotes nestas circunstâncias eu continuo recomendando o meu slackext, assim:

# slackext http://slackware.org.uk/slaxbmc/14.0/slaxbmc64-14.0/updates/frodo

Só não me caia na besteira de teclar Y quando o slackext te perguntar:

[slackext] PROCEED with the installation? [y,N]

Combinado?!? Há pacotes neste diretório que vão foder com a sua vida e que não devem ser instalados. Você PRECISA saber o que está fazendo e instalar somente o necessário, manualmente.

É isso. Gostou? Odiou? Porra nenhuma? Comenta aí.