Então você quer compilar um programa para o Slackware mas não quer usar um SlackBuild, certo? Se você usar a combinação padrão ./configure && make && make install, bagunçará o sistema de gerenciamento de pacotes pkgtool, o que não é de modo algum esperto.

Este artigo foi originalmente escrito e publicado por Luis Cavalheiro na comunidade Slackware do Google+. Traduzido e publicado por Deny Dias sob autorização do autor.

O Slackware não é o Gentoo, por exemplo, então usamos pacotes. 'Certo, cara', você diria, 'usamos pacotes mas eu não encontro o pacote ou SlackBuild para este diacho de software que preciso instalar em meu computador!'. Solução: criar o pacote manualmente, o que é bem fácil no Slackware.

Primeiro, uma breve visão geral sobre os pacotes .t?z. O Slackware usa .tgz, .txz e .tbz, mas estes são apenas arquivos comprimidos .tar.gz, .tar.xz ou .tar.bz com a estrutura de diretórios apropriada e alguns pequenos arquivos de configuração. Ao contrário dos .deb ou .rpm, cheios de bobagens. Para criar um pacote do Slackware, você simplesmente compila o fonte, cria um arquivo de descrição e comprime a coisa toda.

Passo 1: compilando o fonte

Você vai precisar do fonte que deseja instalar, é claro. Faça o download e descompacte-o em um diretório vazio em seu sistema. Eu sugiro enfaticamente que você não faça isso em /usr/src, uma vez que este diretório é acessível apenas pelo root e você, idealmente, você vai compilar como um usuário normal.

Usarei um pacote imaginário como exemplo. Vamos chamá-lo de compile_exemple, e vamos supor que baixamos o código com o nome compile_example.tar.gz. Normalmente, eu rodo estes comandos:

$ mkdir -p ~/compile/compile_example
$ tar -zxvf compile_example.tar.gz -C ~/compile/compile_example
$ cd ~/compile/compile_source

Explicando:

  1. Coloco tudo que compilo na mão no diretório ~/compile;
  2. Obviamente, compile_example é o nome do que vou compilar;
  3. Descomprimir o fonte corretamente usando as opções para para colocar os arquivos no diretório que você criou;

No diretório dos arquivos descompactados, procure o script de configuração. Se você o encontrou, está no lugar certo. Agora rode:

$ sh configure --prefix=/usr --sysconfdir=/etc

Depois dessas duas opções, digite todas as opções das quais necessita para compilar o software. Uma boa maneira de saber quais são as opções extras é usar:

$ sh configure --help | less

Só vai funcionar se o programador criou uma ajuda para configurar, claro. Enfim, agora você pode compilar usando o comando:

$ make

Passo 2: criando o pacote

Agora vamos nas entranhas, quer dizer, root. Como um usuário normal, rode:

$ su -

Você será root, então rode esse comandos:

# mkdir /tmp/compile_example-version
# cd /home/youruser/compile/compile_example
# make install DESTDIR=/tmp/compile_example-version

O primeiro comando como superusuário criará um novo diretório em /tmp usando o nome e a versão do software. O segundo colocará você onde o código foi compilado e o terceiro 'instalará' o software compilado no diretório que você criou. Agora rode:

# mkdir -p /tmp/compile_example-version/usr/doc/compile_example-version
# cp AUTHORS ChangeLog Copyright LICENSE README TODO /tmp/compile_example-version/usr/doc/compile_example-version

Isso incluirá a documentação no pacote. Agora vamos compactar todas as páginas do manual (manpages) com este comando:

# gzip -9 /tmp/compile-example-version/usr/man/man?/*.?

Agora é hora de criar o arquivo de descrição. Execute os comandos:

# mkdir /tmp/compile_example-version/install
# vi /tmp/compile_example-version/install/slack-desc

Este arquivo slack-desc contém a descrição que o installpkg mostra quanto você instala o pacote. Ele é escrito com as seguintes regras:

  1. Devem haver onze, e exatamente onze, linhas começando com o nome do software seguido por dois pontos e um espaço;
  2. Cada uma das linhas deve ter no máximo 70 caracteres de comprimento após o dois pontos e espaço.

Exemplo:

pkgtools: pkgtools (The Slackware package maintenance system)
pkgtools:
pkgtools: This package contains utilities for handling Slackware packages.
pkgtools: Included are the command line utilities 'installpkg', 'removepkg',
pkgtools: 'makepkg', 'explodepkg', and 'upgradepkg' that install, remove,
pkgtools: build, examine, and upgrade software packages. Also included are
pkgtools: 'pkgtool', a menu based program for installing packages, removing
pkgtools: packages, or viewing the packages that are installed on the system,
pkgtools: documentation (man pages), and a few other system admin scripts.
pkgtools:
pkgtools:

Este é o slack-desk do pacote pkgtools. Como você pode ver, a descrição do pacote foi dividida nesta linhas com o prefixo contento o nome do arquivo seguido por dois pontos e um espaço ('pkgtools: ' neste exemplo).

Coloque a descrição do seu pacote aqui e salve o arquivo slack-desc. Agora você pode criar um doinst.sh com comandos extras para serem executados enquanto o pacote está sendo instalado (como criar links simbólicos ou editar algum arquivo com o sed ou... bem, você entendeu). Coloque o arquivo doinst.sh no mesmo diretório que o slack-desc está.

Agora é hora de nomear o pacote. Cada pacote do Slackware segue o padrão nomedopacote-versão-arquitetura-build.t?z. Explicando: nomedopacote é o nome do software e ele DEVE ser igual ao nome que foi escrito no arquivo slack-desc antes do dois pontos. versão é o número da versão do pacote. arquitetura é a arquitetura a qual se destina o sistema: i486 para Slackware x86 ou x86_64 para Slackware64. build é o número para controlar quantas vezes esta versão de software foi empacotada (para corrigir links simbólicos, bugs...). A extensão pode ser .tgz, .txz e .tbz, portanto o padrão de nome .t?z.

Retornando ao compile_example, vamos supor que ele está na versão 0.9.0 e está sendo compilado para um sistema x86_64. O nome do pacote será compile_example-0.9.0-x86_64-1.tgz se essa for a primeira vez que eu compilo a versão 0.9.0 do compile_example e quero usar a compressão .tar.gz.

Depois de toda essa explicação, podemos criar o pacote propriamente dito. Executa os comandos:

# mkdir /tmp/compile_example-version
# makepkg -l y -c n ../compile_example-0.9.0-x86_64-1.tgz

Explicando:

  1. makepkg é o comando que cria os pacotes do Slackware. A opção -l faz com que o makepkg adicione todos os links simbólicos ao doinst.sh e então apague-os do pacote, e -c preserva todas as permissões de arquivos.
  2. O pacote resultante será criado em /tmp.

Agora tudo o que você a fazer é rodar:

# installpkg /tmp/compile_example-0.9.0-x86_64-1.tgz

Para instalar o pacote.