Construindo SlackBuilds com mkbuild

O mkbuild é um programa em script shell que auxiliar na construção de pacotes para o Slackware. A grosso modo, o mkbuild é um construtor de Slackbuild1. Ele opera a partir de um arquivo de parâmetros e de modelos de Slackbuilds parametrizados.

Este texto apresenta informações úteis para utilização do mkbuild na construção destes arquivos de parâmetros, bem como configurar e utilizar modelos de SlackBuilds e outras personalizações.

O mkbuild é uma ferramenta distribuída juntamente com o simplepkg, um projeto do grupo Slack.Sarava. Para a utilização desta ferramenta você deverá instalar o pacote conforme as instruções abaixo:

# LASTVERSION=`lynx -dump http://slack.sarava.org/packages/noarch/ \
               | grep 'simplepkg-.*\.tgz' | awk '{print $2}'`
# wget $LASTVERSION
# installpkg simplepkg-*.tgz

Para mais informações veja os links abaixo:

Sumário

1 O modelo generic.mkSlackBuild

O mkbuild utiliza o modelo padrão generic.mkSlackBuild, armazenado em

/etc/simplepkg/defaults/mkbuild/

Este modelo é uma versão setorizada do generic.SlackBuild, levemente modificada. O generic.SlackBuild é um modelo genérico de Slackbuilds criado por nosso colega e colaborador Luís, para servir como modelo para a construção dos Slackbuilds. Outros modelos setorizados podem ser utilizados pelo mkbuild, a única limitação é quanto ao nome da seção slackdesc, que não poderá ser alterada.

1.1 Os Campos

O modelo generic.mkSlackBuild é um SlackBuild genérico com vários campos destacados por duplo colchetes, [[ ...]], com mostra o trecho abaixo:

...
<set_variables> all
# Set variables
CWD="$(pwd)"
SRC_NAME="[[SOURCE NAME]]"
PKG_NAME="[[PACKAGE NAME]]"
ARCH=${ARCH:=[[ARCH]]}
SRC_VERSION=${VERSION:=[[VERSION]]}
PKG_VERSION="$(echo "$SRC_VERSION" | tr '[[:blank:]-]' '_')"
BUILD=${BUILD:=1[[SLACKBUILD AUTHOR INITIALS]]}
...
PREFIX=${PREFIX:=[[PREFIX]]}
PKG_SRC="$TMP/$SRC_NAME-$SRC_VERSION"
</set_variables>
...

Uma breve descrição destes campos é apresentada na tabela abaixo:

Campo Descrição
PROGRAM NAME nome do programa
PROGRAM URL URL da fonte do pacote
SLACKBUILD AUTHOR nome do autor
SOURCE NAME nome da fonte, sem versão ou extensão
PACKAGE NAME nome do pacote e ser gerado
ARCH arquitetura do pacote. Padrão i486
VERSION versão do pacote
SLACKBUILD AUTHOR INITIALS assinatura utilizada pelo autor
PREFIX prefixo da instalação (/usr, /opt, ...)
SOURCE EXTENSION extensão da fonte (bz2, gz, ...)
UNPACKER programa de dessempacotamento (geralmenrte "tar")
UNPACKER FLAGS flags para o desempacotador
DOWNLOAD FOLDER URL URL da pasta onde se encontra a fonte
DECOMPRESSOR o descompressor para a fonte (gunzip, bunzip2, ...)
DECOMPRESSOR TEST FLAG flag de teste do descompressor
SIGNING KEY URL URL da chave gpg do fonte
SIGNING KEY chave gpg da fonte
MD5SUM EXTENSION extensão utilizada pelo arquivo md5sum
PATCH FILES arquivo path
NUMBER OF PREFIX SLASHES TO STRIP ...
SOURCE NAME CONSTRUCTION STRING string para a construção do nome do arquivo. O padrão é $SRC_NAME-$VERSION.tar.$EXTENSION
OTHER CONFIGURE ARGS argumentos de configuração passados ao ./configure
DOCUMENTATION FILES lista de arquivos para a pasta /usr/doc/PACKAGE
SLACK-DESC conteúdo do slack-desc, descrição do pacote
REST OF DOINST.SH conteúdo do doinst.sh


Em alguns casos o nome do pacote difere do nome da fonte, como é o caso da fonte sigc++, que gera o pacote de nome libsiggc++. Por este motivo que existem os campos SOURCE NAME e PACKAGE NAME. Para uma compreensão mais profunda destes campos, aconselho fazer uma análise mais detalhada do modelo generic.mkSlackBuild.

1.2 As Seções

As seções no modelo generic.mkSlackBuild, são iniciadas pela tag <nome_da_seção> e terminadas com </nome_da_seção>, como em um código html, sem espaços.

A única seção que não pode ter seu nome alterado é slackdesc. Esta seção é editada de uma forma diferenciada pelo mkbuild e a alteração de seu nome poderá gerar erro.

Cada seção possui uma flag com os possíveis valores:

on
habilitado;
off
desabilitado;
all
sempre habilitado.

A intenção destas flags é gerar um padrão para as seções, deixando em all as seções que deverão estar sempre habilitadas e on ou off seções que podem ser habilitadas ou desabilitadas de acordo com as necessidades do SlackBuild que será construído2.

As seções padrões do generic.mkSlackBuild são listadas na tabela abaixo:

Seção Descrição 1.0.x 1.1.x
head cabeçalho do SlackBuild all on
slackbuildrc carrega script slackbuildrc off off
set_variables inicia as variáveis all on
slkflags carrega flags para compilação all on
error_codes códigos de erro para o createpkg off off
start_structure cria diretórios para compilação all on
download_source baixa a fonte do pacote off off
md5sum_download_and_check_0 verifica md5sum da fonte por código off off
md5sum_download_and_check_1 verifica md5sum da fonte por arquivo off off
gpg_signature_check verifica assinatura gpg da fonte off off
untar_source desempacota a fonte all on
path_source aplica path a fonte off off
configure configura pacote off off
make_package compila o pacote all on
install_package instala o pacote em diretório temporário all on
strip_binaries limpa binários off off
compress_manpages comprime páginas de manuais off off
compress_info_files comprime arquivos info off off
install_documentation instala documentação off off
slackdesc slackdesc do pacote off off
postinstall_script script de pós-instalação off off
build_package constrói pacote all on
clean_builds remove fontes e instalação temporária off off


A terceira e a quarta colunas da tebela acima apresentam o status padrão para as seções nas versões 1.0.x e 1.1.x do mkbuild. No mkbuild versão 1.0.x, as seções all são configuradas no modelo generic.mkSlackBuild. A partir da versão 1.1.x estas seções serão definidas como on ou off no model.mkbuild, não mais no modelo generic.mkSlackBuild.

2 Configuração

O mkbuild utiliza quatro variáveis de configuração em /etc/simplepkg/simplepkg.conf. São elas:

SLACKBUILDS_DIR
diretório onde serão guardados os SlackBuilds e slack-required gerados. Necessário para o uso com a opção -c, commit. Padrão /var/simplaret/slackbuilds;
MKBUILDS_DIR
diretório onde serão guardados os .mkbuilds criados. Necessário para o uso com a opção -c, commit. Padrão /var/simplaret/mkbuilds;
SLACKBUILDS_SVN
endereço do repositório subversion dos SlackBuilds. Mantenha o valor padrão;
MKBUILDS_SVN
endereço do repositório subversion dos SlackBuilds. Mantenha o valor padrão;
COLOR_MODE
define modo de cores para o mkbuild e createpkg. Padrão none, preto e branco.

3 Criando o SlackBuild do aplicativo pyrex

Para fazer um SlackBuild com o mkbuild é necessário criar um arquivo com os parâmetros que deseja que sejam passados para o modelo. Um arquivo de configuração simples, sample-Pyrex-small.mkbuild, é apresentado abaixo:

#--------------------
# Variables
#--------------------
# Author name
[[SLACKBUILD AUTHOR]]="Adalberto Simão Nader"

#
# Complete URL address or URL base address ( without $SRC_NAME-$VERSION... )
[[DOWNLOAD FOLDER URL]]="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/Pyrex-0.9.5.1a.tar.gz"

#
# Default enable sections:
#      head, set_variables, slkflags, start_structure, untar_source,
#      make_package, install_package, build_package
# Warning: don't remove '#>>' and "#<<" tags.
#>> Start SlackBuild Sections:
 on: head
 on: slackbuildrc
 on: set_variables
 on: slkflags
 on: error_codes
 on: start_structure
 on: download_source
 on: md5sum_download_and_check_0
 on: untar_source
 on: configure
 on: make_package
 on: install_package
 on: strip_binaries
 on: install_documentation
 on: slackdesc
 on: build_package
 on: clean_builds
#<< End SlackBuild Sections

#------------------
# Sections changes
#------------------
#>slackdesc
pyrex: Pyrex by Slack.Sarava
pyrex:
pyrex: Pyrex is a language specially designed for writing Python extension
pyrex: modules. Its designed to bridge the gap between the nice, high-level,
pyrex: easy-to-use world of Python and the messy, low-level world of C.
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
#<slackdesc

Isto é o suficiente para fazer o SlackBuild do Pyrex. Para construir o SlackBuild basta chamar o mkbuild passando este arquivo de parâmetros:

$ mkbuild sample-Pyrex-small.mkbuild
$ ls
pyrex.SlackBuild      pyrex.mkbuild                sample-Pyrex-small.mkbuild
pyrex.SlackBuild.old  sample-Pyrex-large.mkbuild

Ele irá criar os arquivos pyrex.SlackBuild e slack-required, se o parâmetro SLACK REQUIRED for passado. Arquivos antigos serão renomeados para .old.

Um modelo mais completo, com todos os parâmetros, sample-Pyrex-large.mkbuild, é disponibilizado junto com o mkbuild. Nas seções seguintes é apresentado uma breve descrição dos parâmetros e seções deste arquivo de parâmetros.

3.1 Descrição dos parâmetros do arquivo .mkbuild

Embora existam muitos parâmetros no modelo generic.mkSlackBuild, nem todos são necessários para a construção do SlackBuild. Neste exemplo foram passados apenas dois parâmetros:

SLACKBUILD AUTHOR
nome do autor;
DOWNLOAD FOLDER URL
url completa da fonte do pacote.

O mkbuild remove o nome do pacote, versão, assinatura do autor e várias outras informações destes dados, seguindo alguns critérios descritos a seguir.

A sintaxe para a passagem de parâmetros ao mkbuild pelo arquivo de parâmetros .mkbuild é

[[DESCRIÇÃO DO PARÂMETRO]]="Parâmetro entre aspas duplas"

As aspas duplas podem ser omitidas3. O delimitador utilizado pelo mkbuild é o primeiro caracter igual (=) a aparecer na linha e o fim de linha. Qualquer outra ocorrência de caracter igual será lido como parte do parâmetro. O mesmo acontece com comentários colocados após o caracter igual. Por exemplo, na linha abaixo:

[[PARÂMETRO TEST]]=Este parâmetro é um teste            # Este comentário será lido.

a leitura do parâmetro PARÂMETRO TEST retornará:

Este parâmetro é um teste            # Este comentário será lido.

Segue abaixo uma breve descrição dos parâmetros utilizados pelo modelo generic.mkSlackBuild.

3.1.1 SLACKBUILD AUTHOR e SLACKBUILD AUTHOR INITIALS

O parâmetro SLACKBUILD AUTHOR deve conter o nome ou apelido do responsável pelo SlackBuild. A declaração deste parâmetro é obrigatória e sem ele o mkbuild irá interromper a construção do SlackBuild.

[[SLACKBUILD AUTHOR]]="Adalberto Simão Nader"

O parâmetro SLACKBUILD AUTHOR INITIALS é construído a partir da primeira letra de cada nome passado pelo parâmetro SLACKBUILD AUTHOR, em letras minúsculas. Neste caso a assinatura será "asn", as iniciais de Adalberto Simão Nader.

Caso deseje passa outro valor basta adicionar a linha abaixo, ao arquivo de parâmetros.

[[SLACKBUILD AUTHOR INITIALS]]="adal"

3.1.2 DOWNLOAD FOLDER URL

O parâmetro DOWNLOAD FOLDER URL é outro parâmetro obrigatório em um arquivo .mkbuild. Este parâmetro pode conter o endereço completo da fonte do pacote:

[[DOWNLOAD FOLDER URL]]="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/Pyrex-0.9.5.1a.tar.gz"

Neste caso várias informações são removidas deste parâmetro. Este parâmetro pode ainda conter apenas o endereço do diretório de onde a fonte poderá ser encontrada:

[[DOWNLOAD FOLDER URL]]="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"

Neste caso, é necessário a definição de outros parâmetros necessários para a construção do nome do pacote, como SOURCE NAME, PACKAGE NAME, VERSION e EXTENSION, descritos a seguir.

3.1.3 SOURCE NAME, PACKAGE NAME, VERSION e EXTENSION

O SOURCE NAME é removido do URL, caso não seja passado como parâmetro.

Para que o SOURCE NAME seja carregado corretamente, é necessário que o nome da fonte tenha a forma padrão:

NOME-DO-PROGRAMA-VER.SÃO.tar.EXTENSÃO

O nome do programa pode ter vários campos separados por um hífen "-", já a versão, pode possuir vários números, ou mesmo letras, separados por ponto e terminados por um ".tar.". A extensão deve vir logo após o ".tar.".

A variável PACKAGE NAME, é construída com o mesmo valor de SOURCE NAME, mas em letras minúsculas.

Desta forma, a divisão dos campos no exemplo do aplicativo Pyrex, acima, terá o mesmo valor que as declarações dos parâmetros abaixo:

[[SOURCE NAME]]="Pyrex"

[[PACKAGE NAME]]="pyrex"

[[VERSION]]="0.9.5.1a"

[[EXTENSION]]="gz"

Observe que a precedência é a passagem do valor como parâmetro, e não a sua construção.

3.1.4 UNPACKER e UNPACKER FLAGS

UNPACKER contêm o nome do programa desempacotador das fontes, geralmente o comando "tar", enquanto que o parâmetro UNPACKER FLAGS, carrega as flags para o desempacotador. Os seus valores padrões são:

[[UNPACKER]]="tar"
[[UNPACKER FLAGS]]="--no-same-owner --no-same-permissions -xvf"

3.1.5 SOURCE NAME CONSTRUCTION STRING

Deve conter uma string para a construção do nome da fonte. O valor padrão é

[[SOURCE NAME CONSTRUCTION STRING]]="$SRC_NAME-$VERSION.tar.$EXTENSION"

Observe que os parâmetros passados não são processados, como ocorre em uma leitura de uma variável num bash script. Eles são lidos como se fossem uma cadeia de caracteres, por isto não tente escapar o $ na construção do nome, ou o nome da fonte não será construído corretamente na execução do SlackBuild.

Embora a variável $EXTENSION apareça na construção do nome da fonte, seu valor será substituído durante a construção do SlackBuild pelo mkbuild. Por isto que não existe inicialização desta variável no modelo generic.mkSlackBuild.

3.1.6 DECOMPRESSOR e DECOMPRESSOR TEST FLAG

Os parâmetros DECOMPRESSOR e DECOMPRESSOR TEST FLAG são determinados por análise do parâmetro EXTENSION, com os valores apresentados na tabela abaixo:

EXTENSION DECOMPRESSOR DECOMPRESSOR TEST FLAG
gz, GZ gunzip -t
bz2, BZ2 bunzip2 -t
zip, ZIP unzip -t

Caso possua uma fonte comprimida por um compressor diferente, passe estes parâmetros pelo arquivo de parâmetros, .mkbuild.

[[DECOMPRESSOR]]="programa descompressor"
[[DECOMPRESSOR TEST FLAG]]="flag de teste"

3.1.7 DOCUMENTATION FILES

O valor padrão para DOCUMENTATION FILES é

[[DOCUMENTATION FILES]]="NEWS TODO README AUTHORS INSTALL ChangeLog MAINTAINERS COPYING readme.*"

Estes são os nomes mais comuns dos arquivos de documentação, que geralmente são disponibilizados na raiz do diretório das fontes dos programas. O ideal é descompactar a fonte e verificar os arquivos de documentação disponíveis, para passá-los como parâmetro.

3.1.8 PREFIX

A maioria das fontes de programas disponibilizados atualmente, utilizam uma opção "--prefix" no seu configure, para determinar o diretório onde o programa será instalado. Nas versões inferiores a 12.0 do Slackware o valor desta variável variava entre /usr, /opt e /usr/X11. Na versão 12.0, e provavelmente nas superiores, os diretórios /opt e /usr/X11 foram removidos e todos os pacotes estão sendo instalados em /usr. Por isto o seu valor padrão é /usr.

[[PREFIX]]="/usr"

3.1.9 NUMBER OF JOBS

O parâmetro NUMBER OF JOBS é usado para indicar ao comando make o número de processos que podem ser iniciados simultaneamente durante a compilação da fonte. A grande maioria dos programas atuais podem ser compilados em dois ou mais processos simultâneos. Isto reduz sensivelmente o tempo de compilação de um pacote, mesmo que sua máquina possua apenas um processador. Muitos SlackBuilds oficiais do Slackware utilizam este parâmetro configurado para "7" processos, ou seja "-j7". Este parâmetro pode ser passado como um número ou com a flag "-j", como nos exemplos abaixo.

[[NUMBER OF JOBS]]="7"

ou

[[NUMBER OF JOBS]]="-j7"

3.1.10 SLACK REQUIRED

Este parâmetro é composto pela lista de pacotes necessários para a construção do aplicativo. Estes pacotes serão arranjados no arquivo slack-required. O formato para este parâmetro é apresentado na linha abaixo:

DEPENDÊNCIA_1 [CONDIÇÃO_1] [VERSÃO_1]: DEPENDÊNCIA_2 [CONDIÇÃO_2] [VERSÃO_2]: DEPENDÊNCIA_3 [CONDIÇÃO_3] [VERSÃO_3]: ...

As condições possíveis são apresentadas na tabela abaixo:

CONDIÇÃO significado
= igual
> maior
>= maior ou igual

Os campos CONDIÇÃO e VERSÃO podem ser omitidos. Cada pacote da dependência deve ser separado por um ":".

Para o SLACK REQUIRED definido com a linha:

[[SLACK REQUIRED]]="dep1 >= 1.1.1: dep2 >= 2.2.2:dep3:dep4:dep5 = 1.0"

será gerado o arquivo slack-required abaixo:

# Dependency list to Pyrex
#
# dependency [condition] [version]]
dep1            >=              1.1.1
dep2            >=              2.2.2
dep3
dep4
dep5            =               1.0

3.1.11 SLACKBUILD MODEL

Este parâmetro contém o nome do modelo utilizado para gerar os SlackBuilds. O valor padrão é generic.mkSlackBuild. Outros modelos podem ser utilizados adicionando-se o arquivo do modelo no diretório /etc/simplepkg/defaults/mkbuild/. A linha abaixo

[[SLACKBUILD MODEL]]="generic.mkSlackBuild.2"

define o modelo generic.mkSlackBuild.2 para a construção do SlackBuild.

3.1.12 SLACKBUILD PATH

Este parâmetro é necessário apenas para uso com a opção "-c", commit. Ele indica o diretório, na estrutura de diretórios do Slack.Sarava, onde o SlackBuild construído deverá ser armasenado. Se este parâmetro não for passado, o mkbuild irá pesquisá-lo no repositório do gentoo, pela internet4. Caso não consiga resolver com esta pesquisa, o SlackBuild será colocado em um diretório padrão para scripts não classificados, "others/unclassified/$PKG_NAME".

[[SLACKBUILD PATH]]="dev/python/pyrex"

A estrutura de diretórios para armazenamento dos SlackBuilds adotadas pelo Slack.Sarava segue o mesmo padrão do portage do gentoo.

3.1.13 Outros Parâmetros

Outros parâmetros podem ser passados para substituição no modelo generic.mkSlackBuild, como o parâmetro MD5SUM EXTENSION no trecho abaixo:

#[[PATCH FILES]]=""
#[[MD5SUM CODE]]=""
[[MD5SUM EXTENSION]]="047574eb5d1b7848a70d4130035f1f3c"
#[[SIGNING KEY]]=""
#[[SIGNING KEY URL]]=""
#[[PATCH FILES]]=""

Além destes parâmetros padrões do generic.mkSlackBuild, qualquer outro parâmetro pode ser criado e incluído ao modelo. Para isto é necessário que seu nome seja incluído entre duplo colchetes como no exemplo abaixo:

[[NEW PARAMETER]]="new value"

O mkbuild irá procurar a ocorrência da seqüência [[NEW PARAMETER]] no modelo passado por [[SLACKBUILD MODEL]] e irá substitui-lo por "new value".

3.2 Habilitando seções

As seções do modelo generic.mkSlackBuild são habilitadas na seção iniciada por "#>>" e terminada por "#<<", no arquivos de parâmetros. Como as seções estão desabilitadas no modelo padrão, generic.mkSlackBuild, esta seção do arquivo de parâmetros tem apenas que habilitar as seções desejadas do modelo.

#>> Start SlackBuild Sections:
 on: head
 on: slackbuildrc
 on: set_variables
 on: slkflags
 on: error_codes
 on: start_structure
 on: download_source
off: md5sum_download_and_check_0
off: md5sum_download_and_check_1
off: gpg_signature_check
 on: untar_source
off: patch_source
 on: configure
 on: make_package
 on: install_package
 on: strip_binaries
off: compress_manpages
off: compress_info_files
 on: install_documentation
 on: slackdesc
# esta linha é ignorada
off: postinstall_script
 on: build_package
 on: clean_builds
#<< End SlackBuild Sections

No caso do exemplo acima, são desabilitadas as seções: md5sum_download_and_check_0, md5sum_download_and_check_1, gpg_signature_check, patch_source, compress_manpages, compress_info_files e postinstall_script. Linhas iniciadas por uma tralha, #, são ignoradas. Como no modelo generic.mkSlackBuild todas as seções estão desabilitadas ("off"), apenas as seções ligadas necessitam ser habilitadas.

3.3 Substituição de seções no modelo

Em algumas situações pode ser necessário substituir o conteúdo de uma seção. Estas mudanças são feitas iniciando uma seção, no arquivo de parâmetros, pela tag "#>nome_da_seção" e terminar pela tag "#<nome_da_seção". Quando o mkbuild localiza estas seções no arquivo de parâmetros, ele substitui as seções padrões, de mesmo nome, pelo conteúdo definido no arquivo de parâmetros. Por exemplo:

#>untar_source
# Untar program

# Change to temp dir
cd "$TMP"

# Uncompress e untar source
gunzip "$SRC_DIR/$SRC" | tar --no-same-owner --no-same-permissions -xvf || exit $ERROR_TAR

# Change to source dir
cd "$PKG_SRC"
#<untar_source

irá substituir a seção untar_source do modelo generic.mkSlackBuild, pelo conteúdo definido no arquivo de parâmetros acima. A única exceção a esta regra é a seção slackdesc.

#>slackdesc
pyrex: Pyrex by Slack.Sarava
pyrex:
pyrex: Pyrex is a language specially designed for writing Python extension
pyrex: modules. Its designed to bridge the gap between the nice, high-level,
pyrex: easy-to-use world of Python and the messy, low-level world of C.
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
#<slackdesc

Para esta seção, o mkbuild irá substituir o parâmetro [[SLACK-DESC]] pelo conteúdo definido entre "#>slackdesc" e "#<slackdesc", além de redimensionar a régua de orientação do slack-desc.

4 Exemplo 2: mkbuild do dosbox

Embora a documentação do comando mkbuild seja relativamente longa, não é necessário muito esforço para se fazer um SlackBuild de um pacote bem comportado.

Entenda-se por pacote bem comportado, pacotes que podem ser construídos pelos comandos:

 # ./configure && make && make install

e cujo o nome da fonte obedeça o padrão: NOME.DO.PACOTE-VERSÃO.tar.EXTENSÃO. Um bom exemplo disto é o pacote do dosbox, o qual será usado como exemplo nesta seção.

Inicie a construção do .mkbuild com o comando abaixo:

# mkbuild -a "<<seu nome>>" -ai "<<iniciais>>" -n dosbox

Não é necessário o nome e assinatura passados pelas opções -a e -ai, mas é aconselhável. A opção -n diz ao mkbuild para copiar o modelo em /etc/simplepkg/.../model.mkbuild, para o diretório atual com o nome dosbox.mkbuild, e aplicar o nome "dosbox" a este modelo.

Em seguida, edite o arquivo dosbox.mkbuild, com um editor de sua escolha, e preencha os campos com os valores abaixo:

[[DOWNLOAD FOLDER URL]]="http://downloads.sourceforge.net/dosbox/dosbox-0.71.tar.gz"
[[SLACKBUILD PATH]]="games/emulation/dosbox"

#>slackdesc
dosbox: DOSBox.slackBuild by Slack.Sarava
dosbox:
dosbox: DOSBox is a DOS-emulator that uses the SDL-library which makes DOSBox
dosbox: very easy to port to different platforms. DOSBox has already been 
dosbox: ported to many different platforms, such as Windows, BeOS, Linux, 
dosbox: MacOS X...
dosbox:
dosbox: DOSBox also emulates CPU:286/386 realmode/protected mode, Directory 
dosbox: FileSystem/XMS/EMS, Tandy/Hercules/CGA/EGA/VGA/VESA graphics, a 
dosbox: SoundBlaster/Gravis Ultra Sound card for excellent sound 
dosbox: compatibility with older games...
#<slackdesc

Por se tratar de um pacote bem comportado, o dosbox.mkbuild é bem simples. Todas as informações são removidas da URL do programa, não necessitando de mais declarações. O campo SLACKBUILD PATH é necessário apenas se você for enviar o SlackBuild para o repositório do grupo Slack.Sarava. A seção slackdesc também não é necessária, mas é importante, pois informa o conteúdo do pacote durante a instalação.

5 Criando um patch para pequenas alterações

A partir da versão 1.2 do mkbuild é possível fazer pequenas alterações ao modelo generic.mkSlackBuild, com a aplicação de um patch simplificado. Este patch é aplicado ao modelo generic.mkSlackBuild antes que qualquer outra edição seja feita ao modelo.

Um patch simplificado deve ser definido no arquivo de parâmetros .mkbuild entre as tags #p> e #p<, com no exemplo abaixo:

...
#p>
... Alterações ...
#p<
...

As linhas com as alterações devem sempre iniciar com um caracter de controle, seguido pelo conteúdo da linha a ser alterada, removida ou conferida ao modelo generic.mkSlackBuild. O formato do patch usado pelo mkbuild segue o mesmo padrão gerado pelo comando diff -u, com as seguintes diferenças:

  1. Não possui numeração de linhas. A posição das alterações é referenciada por uma ou mais linhas de referência. Uma linha de referência deve ser única, ou em caso de várias linhas, a seqüência deve ser única;
  2. O número de linhas de referência é variável e não necessita de linhas de referência ao final da alteração;
  3. O caracter para separar as alterações é o caracter igual, =.

5.1 Caracteres de controle

Os caracteres de controle são apenas quatro. Com eles é possível fazer todas as alterações por substituição de linha necessárias em um patch. Segue abaixo a descrição destes caracteres de controle:

(espaço)
este caracter de controle serve para definir linhas de referência, necessárias para localizar a posição das alterações no modelo generic.mkSlackBuild;
- (menos)
serve para referenciar linhas que serão removidas do modelo. Este caracter de controle serve ainda para definir linhas de referência, entretanto lembre-se que elas serão removidas;
+ (mais)
serve para indicar linhas que serão adicionadas ao modelo, logo após a referência;
= (igual)
serve para indicar o final de uma alteração e iniciar a próxima. Qualquer coisa colocado após um caracter de controle igual, será ignorado.

Para simplificar a compreensão do funcionamento deste patch simplificado, segue abaixo um exemplo para alterações hipotéticas.

5.2 mkpatch: Alterando uma linha

Neste exemplo, será alterado o conteúdo da variável ARCH para fixá-la em i586. Isto pode ocorre na construção de pacotes de programas pré-compilados ou um pacote binário. Para fazer esta alteração, basta acrescentar o patch abaixo ao final do arquivo .mkbuild:

...
#p>
 PKG_NAME="[[PACKAGE NAME]]"
-ARCH=${ARCH:=[[ARCH]]}
+ARCH=i586
#p<

A primeira linha, PKG_NAME="[[PACKAGE NAME]]", iniciada pelo caracter de controle espaço, é uma linha de referência a ser procurada no modelo generic.mkSlackBuild, posicionando a alteração ao modelo. A segunda linha, com o caracter de controle menos, indica a linha que será removida: ARCH=${ARCH:=[[ARCH]]}". A terceira linha, com o caracter de controle mais, será adicionada logo em seguida: ARCH=i586.

Observe que o mesmo poderia ser feito com o patch abaixo:

...
#p>
-ARCH=${ARCH:=[[ARCH]]}
+ARCH=i586
#p<

Como o caracter de controle menos também serve como referência e a alteração será feita da mesma forma.

5.3 mkpatch: Aplicando uma segunda alteração

Para uma segunda alteração ao modelo, vou alterar a forma de instalação e fazer mais algumas edições a seção strip_binaries:

#p>
-ARCH=${ARCH:=[[ARCH]]}
+ARCH=i586
===
 <install_package> off
-# Install
+# Install Setup
-make install DESTDIR="$PKG" || exit $ERROR_INSTALL
-./setup --prefix="$PKG" || exit $ERROR_INSTALL
===
 # Strip binaries
 ( cd "$PKG"
-  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
-    xargs strip --strip-unneeded 2> /dev/null
-  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
-    xargs strip --strip-unneeded 2> /dev/null
+  find . | xargs file | grep ELF | xargs strip --strip-unneeded 2> /dev/null
#p<

A segunda alteração, troca a linha de comentário adicionado a palavra Setup e por fim o comando de instalação, para a chamada ./setup ...

A terceira alteração é feita à seção strip_binaries, onde os dois comando find são trocados por um terceiro mais simples.

6 Apêndice-A

Vários outros parâmetros podem ser passados ao mkbuild pela linha de comando. Um manual completo destas opções pode ser consultado passando flag --help ou -h, ao mkbuild:

NAME
        mkbuild - create SlackBuild script from .mkbuild input file

SYNOPSIS
        mkbuild [OPIONS] [mkbuild_file]

DESCRIPTION
        <mkbuild_file> input file with build rules and variables

        Input options:
            -a, --author <author_name>
                author name
            -ai, --author_initials <initials>
                author signature
            -bn, --build-number
                change build number
            -cs, --const_string <string>
                construction string to source name
            -u, --url <url_address>
                url address to source
            -pn, --pkg_name <package_name>
                package name
            -sn, --src_name <source_name>
                source name
            -pv, --pkg_version <version>
                package version
            -md, --model <SlackBuild_model>
                SlackBuild model file
            -j, --jobs <jobs_number>
                Number of jobs to run simultaneously
            --prefix <install_dir>
                Prefix install directory
            -pf, --patch-files
                List of patch files
            -npss, --nps-strip
                Number of prefix slashes to strip

        Program options:
        -h, --help
            this help mesage
        -cs, --commit-slackbuild
            commit SlackBuilds in local svn SlackBuild tree
        -cm, --commit-mkbuild
            commit .mkbuild in local svn mkbuild tree
        -c, --commit-all
            commit SlackBuild and .mkbuild files in local svn tree
        -n, --new <mkbuild_name>
            start a new mkbuild configure file
        -v, --version
            program version
        -V, --verbose
            print debug information
        -sp, --slackbuild-path
            print SlackBuild path in Slack.Sarava tree

EXAMPLES
        mkbuild -c pyrex.mkbuild
            build pyrex.SlackBuild and commit .mkbuild and .SlackBuild in
            Slack.Sarava local tree.
        mkbuild -a "Jose Araujo" -ai "ja" -n pyrex
            make a basic pyrex.mkbuild with author name "Jose Araujo" and
            author signature "ja".
        mkbuild --prefix /usr/local pyrex.mkbuild
            build pyrex.SlackBuild with prefix /usr/local and pyrex.mkbuild
            variables and options definitions.

AUTHOR
        Written by Rduson R. Alves

AVAILABILITY
        by svn: svn checkout svn://slack.sarava.org/simplepkg
        this mkbuild is found in branches/0.6/

REPORTING BUGS
        Report bugs to <alves_list@yahoo.com.br>

COPYRIGHT
        Copyright © 2006 Free Software Foundation, Inc.
        This is free software. You may redistribute copies of it under the
        terms of the GNU General Public License
        <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
        extent permitted by law.

Uma opção interessante é a -c, utilizada para adicionar e atualizar uma cópia do SlackBuild gerado na lista de SlackBuilds local.

Slack.Sarava agradece a toda e qualquer contribuição que possa nos ajudar a manter e a desenvolver este projeto.

About this document ...

Construindo SlackBuilds com mkbuild

This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)

Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999, Ross Moore, Mathematics Department, Macquarie University, Sydney.

The command line arguments were:
latex2html -split 0 -nonavigation -show_section_numbers mkbuild.tex

The translation was initiated by on 2008-02-17


Footnotes

...Slackbuild1
SlackBuilds são script utilizado para a construção de um pacote binário de um programa, no Slackware.
... construído2
Na versão 1.1.x do mkbuild, todas as seções foram configuradas como off, para simplificar a vizualização do script de configuração .mkbuild.
... omitidas3
Nas versões inferiores a 0.9.9, do mkbuild, a aspas dupla é o delimitador e por isto é obrigatório. Um parâmetro passado sem o aspas duplo será interpretado como um parâmetro vazio, nestas versões.
...internet4
Esta pesquisa automática do mkbuild tem se mostrado pouco eficiente. Por isto é aconselhável verifica com um navegador a localização do SlackBuild em http://gentoo-portage.com.


2008-02-17

Idioma:

Nível: