Repositório de SlackBuilds

SlackBuilds são scripts que automatizam a construção de softwares, economizando tempo e permitindo que o procedimento de construção de um pacote seja compartilhado com mais pessoas. A idéia começou nesta thread. Manter um repositório de SlackBuilds comum a pessoas que utilizam diferentes distribuições em diferentes arquiteturas padrão Slackware.

Baixando o repositório

Você pode usar o Subversion para ter sempre os scripts mais recentes,

svn checkout svn://slack.sarava.org/slackbuilds

Ou obter via web, em

http://slack.sarava.org/slackbuilds/

Como usar

Existem dois tipos de script para construção de pacote:

  • SlackBuild: constrói um pacote de forma limpa.
  • build: constrói o pacote de forma suja, necessitando do slacktrack para não poluir o sistema.

Esses scripts podem ser executados manualmente ou através do nosso aplicativo createpkg, como veremos a seguir.

Criando pacotes com o createpkg

O modo mais prático de utilizar um dos nossos SlackBuild é através do aplicatido createpkg distribuído na nossa suíte de ferramentas Simplepkg:

createpkg nome-do-pacote

Mais informações sobre a utilização do createpkg se encontram em http://slack.sarava.org/simplepkg.

Usando um SlackBuild

Para construir um SlackBuild, entre em sua pasta correspondente e dê o seguinte comando:

ARCH=sua-arquitetura ./nome-do-programa.SlackBuild

Por exemplo, para construir o pacote lm_sensors na arquitetura i386, simplesmente use

ARCH=i486 ./lm_sensors.SlackBuild

O script cuidará de baixar o software, compilá-lo e criar um pacote. Você pode ainda especificar o build id do pacote:

ARCH=i486 BUILD=3rha ./lm_sensors.SlackBuild

Você ainda pode especificar a pasta de arquivos temporários a ser usada pelo script, a pasta de armazenamento dos códigos fontes e até a versão do pacote:

ARCH=i486 BUILD=3rha TMP=/stuff/tmp SRC=/stuff/src ./lm_sensors.SlackBuild

Usando um build

No caso de um build, você precisará de um aplicativo auxiliar para construir o pacote. Nós recomendamos o slacktrack. Com ele, pacotes como o munin podem ser construídos com o comando

ARCH=x86_64 BUILD=2rha slacktrack -jefkzp "munin-1.2.4-x86_64-2rha.tgz" "./munin.build"

Nossos builds suportam todas as opções de linha de comandos usadas para um SlackBuild.

Dependências

Ambos tipos de scripts não foram desenvolvidos para resolver as dependências que cada software necessita. Isso fica a cargo do usuário traçar manualmente. Na medida do possível, o repositório terá scripts de construção para todas as dependências que não estejam em pacotes oficiais.

Política de desenvolvimento

Trabalhamos de forma distribuída (cada desenvolvedor/a adiciona e mantém seus próprios scripts e pacotes), mas mesmo assim precisamos de convenções mínimas para não encavalarmos o desenvolvimento. Aqui vão algumas sugestões:

  • Procure enviar ao repositório apenas scripts que funcionem. Eventualmente, podemos adicionar scripts ainda em fase de testes, mas procure deixar no repositório apenas aquilo que funcione.
  • Em caso de dúvidas quanto à qualidade de um script, contate outro desenvolvedor/a.
  • Caso você esteja fazendo um script de um pacote que já exista no repositório mas que seja de outro desenvolvedor, use o bom senho: se você acha que seu script é de melhor qualidade, substitua-o (o mesmo acontecendo no caso de atualizar a versão de um script já existente). Mesmo assim, certifique-se se a sua versão contém todos os requisitos e procedimentos efetuados pelo script mais antigo antes de fazer a substituição. Em caso de dúvidas, contate o desenvolvedor/a do script antigo.
  • Se quiser, verifique antes de iniciar um novo SlackBuild se ele já não existe um nos projetos similares. Caso afirmativo, considere a possibilidade de verificar se o SlackBuild existente contém dicas para a construção da nossa versão que possam poupar nosso tempo (claro, desde que isso economize tempo).
  • Ao fazer um SlackBuild seguindo o nosso padrão, utilize preferencialmente o mkbuild ao invés de escrer o SlackBuild diretamente.
  • Caso você faça o SlackBuild sem utilizar o mkbuild mas quiser seguir nossas convenções (o que, lembrando novamente, não recomendamos), coloque tudo quanto for possível do nosso padrão, isto é, procure-o seguir o máximo possível para que não haja perda de compatibilidade.

Especificação do formato para os scripts

Esta seção contém, em linhas gerais, nossas convenções de construção de SlackBuilds. Como utilizamos e desenvolvemos o Simplepkg, nossa especifição oficial e mais atualizada é o arquivo generic.mkSlackBuild. A presente seção é, portanto, apenas explicativa do motivo de certas convenções.

Suporte a variáveis de ambiente

Para que o SlackBuild seja o mais genérico possível, ele deve suportar variáveis de ambiente para escolha da pasta temporária, do local onde está o código fonte e os patches:

VERSION: especifica a versão do software a ser utilizada
ARCH: especifica a arquitetura
BUILD: indica o buildnumber
TMP: explicita a pasta temporária
SRC: indica qual pasta se encontra e/ou deve ser armazenado os códigos fontes
CLEANUP: se ''yes'', indica que as pastas onde o pacote feito será apagada após o procedimento
REPOS: indica a pasta para onde o pacote deve ser movido após sua construção (default: $TMP)

Variáveis de ambiente que regulam o uso ou não de conjuntos de instruções extras:

HAVE_ALTIVEC: quando setada para "true", fará com que os programas sejam compilados com suporte a altivec

Caso essas variáveis não sejam designadas, valores padrões serão utilizados. Assim, pasta construir o pacote do postfix explicitando a versão 2.2.10, o buildnumber 2rha e o local de armazenamento do código fonte para a pasta /scratch/postfix, usamos

VERSION=2.2.10 BUILD=2rha SRC=/scratch/postfix ./postfix.SlackBuild

Esta convenção permite:

  • manter a árvore dos SlackBuilds separada do código fonte dos programas.
  • permitir facilmente que desenvolvedores de diferentes arquiteturas e versões construam seus pacotes sem precisar modificar os scripts.

ATENÇÂO: o padrão de slackbuilds está passando por algumas alterações. A variável externa SRC será futuramente trocada por SRC_DIR.

slackbuildrc

Para que não seja necessário explicitar os valores de SRC, TMP, ARCH e qualquer outra variável de ambiente toda vez que alguém for criar um pacote, podemos utilizar um arquivo que conterá essas variáveis em formato bash, por exemplo:

SRC=${SRC:=/scratch}
TMP=${TMP:=/scratch/build}
ARCH=${ARCH:=x86_64}

Essas linhas podem ficar em qualquer lugar do profile do seu usuário. Por convenção, usemos o arquivo ~/.slackbuildrc. Considerando que você dará com seu usuário um su para rodar o SlackBuild como root, essas variáveis de ambiente estarão automaticamente ajustadas. Portanto, adicione eu seu .profile a linha

source ~/.slackbuildrc

Você ainda pode criar seus próprios scripts ou aliases que atribuam os valores desejados à essas variáveis de ambiente.

ATENÇÂO: o padrão de slackbuilds está passando por algumas alterações. A variável externa SRC será futuramente trocada por SRC_DIR. Para efetuar a transição, sugerimos que as seguintes entradas sejam mantidas no slackbuildrc:

SRC_DIR=${SRC_DIR:=/pasta/dos/fontes}
SRC=${SRC:=$SRC_DIR}

Obtenção do código fonte

Quando for possível, o script deverá conter rotinas para baixar os fontes caso eles não estejam disponíveis na pasta $SRC/nome-do-pacote e códigos fontes comuns a múltiplos programas podem ser armazenados em $SRC/nome-do-fonte.

Suporte a todas as arquiteturas

Deve suportar o máximo de arquiteturas possíveis, útil para unificarmos o esforço de todas as distros num único conjunto de scripts. A exemplo do Patrick:

  if [ "$ARCH" = "i386" ]; then
    SLKCFLAGS="-O2 -march=i386 -mtune=i686"
  elif [ "$ARCH" = "i486" ]; then
    SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  elif [ "$ARCH" = "s390" ]; then
    SLKCFLAGS="-O2"
  elif [ "$ARCH" = "x86_64" ]; then
    SLKCFLAGS="-O2"
  fi

slack-desc

Quando for possível, o script deve possuir o slack-desc no próprio script. De novo, a exemplo do Patrick:

  cat << EOF > $PKG/install/slack-desc
  (...)
  Descrição do pacote
  (...)
  EOF

Pastas de trabalho

Para evitar bagunça, a pasta de trabalho onde os fontes serão descompactados, onde a compilação e o pacote será montado deverão estar numa pasta do tipo $TMP/nome-do-pacote ao invés de simplesmente em $TMP.

slack-required

Junto com o script deve ser adicionado o arquivo slack-required para que scripts de compilação externos ao sistema de SlackBuilds possam resolver dependências.

build scripts

No caso de scripts .build, fica mais complicado para lidar com locais de armazenamento, já que a criação de pastas temporárias podem acabar indo pro pacote caso o installwatch seja utilizado (como por exemplo no caso do slacktrack). Para contornar esse problema, a recomendação é criar um SlackBuild que chame o slacktrack com as opções apropriadas.

Códigos de saída

Usamos ainda os seguintes códigos de erro para que programas externos consigam determinar falhas no processo de construção de um pacote:

ERROR_WGET = 31: erro ao fazer o download do código fonte
ERROR_MAKE = 32: erro de compilação
ERROR_INSTALL = 33: erro na instalação
ERROR_MD5 = 34: erro no md5sum
ERROR_CONF = 35: erro na configuração do código fonte
ERROR_HELP = 36: este não é um erro
ERROR_TAR = 37: erro no desempacotamento das fontes
ERROR_MKPKG = 38: erro no makepkg
ERROR_GPG = 39: erro na verificação de assinatura do código fonte
ERROR_PATCH = 40: erro na aplicação de patch no código fonte
ERROR_VCS = 41: erro no download do código fonte via sistema de controle de versão
ERROR_MKDIR = 42: erro na criação de um dos diretórios usados

Permissão de execução

Antes de subir pela primeira vez um script no repositório de pacotes, verifique se o mesmo tem permissão 755 para evitar termos que subir o script novamente (o svn não tem um controle de permissões muito bom).

Local de armazenamento

Detalhes em http://listas.sarava.org/wws/arc/slack/2006-11/msg00022.html.

Nome dos scripts e pacotes

Detalhes em