Índice
- 1. Sumário
- 1. 1 O modelo generic.mkSlackBuild
- 1.1. 1.1 Os Campos
- 1.2. 1.2 As Seções
- 2. 2 Configuração
- 3. 3 Criando o SlackBuild do aplicativo pyrex
- 3.1. 3.1 Descrição dos parâmetros do arquivo .mkbuild
- 3.1.1. 3.1.1 SLACKBUILD AUTHOR e SLACKBUILD AUTHOR INITIALS
- 3.1.2. 3.1.2 DOWNLOAD FOLDER URL
- 3.1.3. 3.1.3 SOURCE NAME, PACKAGE NAME, VERSION e EXTENSION
- 3.1.4. 3.1.4 UNPACKER e UNPACKER FLAGS
- 3.1.5. 3.1.5 SOURCE NAME CONSTRUCTION STRING
- 3.1.6. 3.1.6 DECOMPRESSOR e DECOMPRESSOR TEST FLAG
- 3.1.7. 3.1.7 DOCUMENTATION FILES
- 3.1.8. 3.1.8 PREFIX
- 3.1.9. 3.1.9 NUMBER OF JOBS
- 3.1.10. 3.1.10 SLACK REQUIRED
- 3.1.11. 3.1.11 SLACKBUILD MODEL
- 3.1.12. 3.1.12 SLACKBUILD PATH
- 3.1.13. 3.1.13 Outros Parâmetros
- 3.2. 3.2 Habilitando seções
- 3.3. 3.3 Substituição de seções no modelo
- 4. 4 Exemplo 2: mkbuild do dosbox
- 5. 5 Criando um patch para pequenas alterações
- 5.1. 5.1 Caracteres de controle
- 5.2. 5.2 mkpatch: Alterando uma linha
- 5.3. 5.3 mkpatch: Aplicando uma segunda alteração
- 6. 6 Apêndice-A
- 7. About this document ...
- 7.1. Footnotes
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}'` [prompt]wget $LASTVERSION file not found [prompt]installpkg simplepkg-*.tgz
Para mais informações veja os links abaixo:
- http://slack.sarava.org/simplepkg – Descrição de todo o projeto Simplepkg, por Rhatto – coordenador do projeto Slack.Sarava;
- http://slack.sarava.org/node/25 – Tutorial básico de instalação do Simplepkg, por rafael2k – um grande colaborador.
Sumário
- 1 O modelo generic.mkSlackBuild
- 2 Configuração
- 3 Criando o SlackBuild do aplicativo pyrex
- 3.1 Descrição dos parâmetros do arquivo .mkbuild
- 3.2 Habilitando seções
- 3.3 Substituição de seções no modelo
- 4 Exemplo 2: mkbuild do dosbox
- 5 Criando um patch para pequenas alterações
- 5.1 Caracteres de controle
- 5.2 mkpatch: Alterando uma linha
- 5.3 mkpatch: Aplicando uma segunda alteração
- 6 Apêndice-A
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:
...
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"
...
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 [prompt]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:
- 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;
- O número de linhas de referência é variável e não necessita de linhas de referência ao final da alteração;
- 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 [OPTIONS] [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-03-08
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-03-08
Asking questions are genuinely good thing if you are not
understanding something fully, but this piece of writing presents pleasant understanding yet.