\documentclass[12pt,a4paper,oneside]{article}
%\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[dvips]{graphicx}
%\usepackage{subfigure}
\usepackage{mdwlist}
\usepackage{a4}
%\topmargin -.5in
%\addtolength{\hoffset}{-1.0cm}
%\addtolength{\textwidth}{3.0cm}
%\textwidth = 400pt
%\textheight = 680pt
\makeatletter
%\usepackage[pdftex]{color,graphicx}
%\DeclareGraphicsExtensions{.jpg,.pdf,.mps,.png}
\usepackage[brazil]{babel}
\usepackage[dvips]{graphicx}
%\usepackage{textdraw}
\input texdraw
%\newenvironment{textdraw}{\leavevmode\btexdraw}{\etexdraw}
\newcommand{\rcap}[1]{Capítulo \ref{#1}}
\newcommand{\rfig}[1]{Figura \ref{#1}}
\newcommand{\rtab}[1]{Tabela \ref{#1}}
\newcommand{\rsec}[1]{Seção \ref{#1}}
\makeatother
\begin{document}
\title{Construindo SlackBuilds com mkbuild}
\author{Rudson Alves}
\date{\today}
\maketitle
%\pagenumbering{roman}
\tableofcontents{}
%\listoffigures
%\listoftables
%\abstract{...}
\section{Introdução}
O \textit{mkbuild} é um programa em \textit{script shell} destinado a construção de \textit{Slackbuilds}, \textit{scripts} utilizados para a construção de pacotes no \textit{Slackware}. O texto a seguir apresenta informações úteis para utilizar o \textit{mkbuild} na construção destes \textit{scripts}, bem como configurar e utilizar modelos de \textit{SlackBuilds} e outras personalizações.
\section{O modelo generic.mkSlackBuild}
O \textit{mkbuild} utiliza o modelo padrão \textit{generic.mkSlackBuild}, armazenado em
\begin{verbatim}
/etc/simplepkg/defaults/mkbuild/
\end{verbatim}
Este modelo é uma versão setorizada do \textit{generic.SlackBuild}, levemente modificada. O \textit{generic.SlackBuild} é um modelo genérico de \textit{Slackbuilds} disponibilizado na árvore de \textit{Slackbuilds} do \textit{Slack.Sarava}, para servir como modelo para a construção dos \textit{scripts}. Outros modelos setorizados podem ser utilizados pelo \textit{mkbuild}, a única limitação é quanto ao nome da seção \textit{slackdesc}, que não poderá ser alterada.
\subsection{Os Campos}
O modelo \textit{generic.mkSlackBuild} é um \textit{SlackBuild} genérico com vários campos destacados por duplo colchetes, [[ \dots ]], com mostra o trecho abaixo:
\begin{verbatim}
...
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"
...
\end{verbatim}
Uma breve descrição destes campos é apresentada na tabela abaixo: \\
\\
\begin{tabular}{l|l}
\hline \hline
\textbf{Campo} & \textbf{Descrição}\\
\hline \hline
PROGRAM NAME & nome do programa \\
PROGRAM URL & \textit{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, \dots)\\
SOURCE EXTENSION & extensão da fonte (bz2, gz, \dots) \\
UNPACKER & programa de dessempacotamento (geralmenrte "tar") \\
UNPACKER FLAGS & flags para o desempacotador \\
DOWNLOAD FOLDER URL & \textit{URL} da pasta onde se encontra a fonte \\
DECOMPRESSOR & o descompressor para a fonte (gunzip, bunzip2, \dots) \\
DECOMPRESSOR TEST FLAG & \textit{flag} de teste do descompressor \\
SIGNING KEY URL & \textit{URL} da chave \textit{gpg} do fonte \\
SIGNING KEY & chave \textit{gpg} da fonte \\
MD5SUM EXTENSION & extensão utilizada pelo arquivo \textit{md5sum}\\
PATCH FILES & arquivo \textit{path} \\
NUMBER OF PREFIX SLASHES TO STRIP & \dots \\
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 \\
\hline
\end{tabular}
\\\\
Em alguns casos o nome do pacote difere do nome da fonte, como é o caso da fonte \textit{sigc++}, que gera o pacote de nome \textit{libsiggc++}. Por este motivo que existem os campos \textit{SOURCE NAME} e \textit{PACKAGE NAME}. Para uma compreensão mais profunda destes campos, aconselho fazer uma análise mais rofunda do \textit{script} \textit{generic.SlackBuild}.
\subsection{As Seções}
As seções no modelo \textit{generic.mkSlackBuild}, são iniciadas pela \textit{tag} e terminadas com , como em um código \textit{html}, \underline{sem espaços}.
A única seção que não pode ter seu nome alterado é \textit{slackdesc}. Esta seção é editada de uma forma diferenciada pelo \textit{mkbuild} e a alteração de seu nome poderá gerar erro.
Cada seção possui uma \textit{flag} com os possíveis valores:
\begin{description}
\item[on] habilitado;
\item[off] desabilitado;
\item[all] sempre habilitado.
\end{description}
A intenção destas \textit{flags} é gerar um padrão para as seções, deixando em \textbf{all} as seções que deverão estar sempre habilitadas e \textbf{on} ou \textbf{off} seções que podem ser habilitadas ou desabilitadas de acordo com as necessidades do \textit{SlackBuild} que será construído\footnote{Na versão 1.1.x do mkbuild, todas as seções foram configuradas como \textbf{off}, para simplificar a vizualização do script de configuração \textit{.mkbuild}.}.
As seções padrões do \textit{generic.mkSlackBuild} são listadas na tabela abaixo:
\\\\
\begin{tabular}{l|l|c|c}
\hline
Seção & Descrição & 1.0.x & 1.1.x\\
\hline
head & cabeçalho do \textit{SlackBuild} & all & on \\
slackbuildrc & carrega \textit{script} \textit{slackbuildrc} & off & off \\
set\_variables & inicia as variáveis & all & on \\
slkflags & carrega \textit{flags} para compilação & all & on \\
error\_codes & códigos de erro para o \textit{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 \textit{md5sum} da fonte por código & off & off \\
md5sum\_download\_and\_check\_1 & verifica \textit{md5sum} da fonte por arquivo & off & off \\
gpg\_signature\_check & verifica assinatura \textit{gpg} da fonte & off & off \\
untar\_source & desempacota a fonte & all & on \\
path\_source & aplica \textit{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 \textit{info} & off & off \\
install\_documentation & instala documentação & off & off \\
slackdesc & \textit{slackdesc} do pacote & off & off \\
postinstall\_script & \textit{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 \\
\hline
\end{tabular}
\\\\
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 \textit{mkbuild}. No \textit{mkbuild} versão 1.0.x, as seções \textbf{all} são configuradas no modelo \textit{generic.mkSlackBuild}. A partir da versão 1.1.x estas seções serão definidas como \textbf{on} ou \textbf{all} no \textit{model.mkbuild}, não mais no \textit{generic.mkSlackBuild}.
\section{Configuração}
Por hora, o \textit{mkbuild} utiliza apenas um variável de configuração em /etc/simplepkg/simplepkg.conf. A variável \textit{SLACKBUILDS\_DIR} é necessária para utilizar o \textit{mkbuild} com a opção "\verb!-c!" ou "\verb!--commit!", que incorpora os arquivos \textit{SlackBuild} e \textit{slack-required} à estrutura de diretórios do \textit{Slack.Sarava}, na cópia local.
\section{Criando o SlackBuild de um aplicativo}
Para fazer um \textit{SlackBuild} com o \textit{mkbuild} é necessário criar um arquivo com os parâmetros que deseja que sejam passados para o modelo. Um arquivo de configuração simples, \textit{sample-Pyrex-small.mkbuild}, é apresentado abaixo:
\begin{verbatim}
#--------------------
# 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:
# & maior \\
>= & maior ou igual \\
\hline
\end{tabular}
Os campos \textit{CONDIÇÃO} e \textit{VERSÃO} podem ser omitidos. Cada pacote da dependência deve ser separado por um ":".
Para o \textit{SLACK REQUIRED} definido com a linha:
\begin{verbatim}
[[SLACK REQUIRED]]="dep1 >= 1.1.1: dep2 >= 2.2.2:dep3:dep4:dep5 = 1.0"
\end{verbatim}
\noindent será gerado o arquivo \textit{slack-required} abaixo:
\begin{verbatim}
# Dependency list to Pyrex
#
# dependency [condition] [version]]
dep1 >= 1.1.1
dep2 >= 2.2.2
dep3
dep4
dep5 = 1.0
\end{verbatim}
\subsubsection{SLACKBUILD MODEL}
Este parâmetro contém o nome do modelo utilizado para gerar os \textit{SlackBuilds}. O valor padrão é \textit{generic.mkSlackBuild}. Outros modelos podem ser utilizados adicionando-se o arquivo do modelo no diretório /etc/simplepkg/defaults/mkbuild/. A linha abaixo
\begin{verbatim}
[[SLACKBUILD MODEL]]="generic.mkSlackBuild.2"
\end{verbatim}
\noindent define o modelo \textit{generic.mkSlackBuild.2} para a construção do \textit{SlackBuild}.
\subsubsection{SLACKBUILD PATH}
Este parâmetro é necessário apenas para uso com a opção "\verb!-c!", \textit{commit}. Ele indica o diretório, na estrutura de diretórios do Slack.Sarava, onde o \textit{SlackBuild} construído deverá ser armasenado. Se este parâmetro não for passado, o \textit{mkbuild} irá pesquisá-lo no repositório do \textit{gentoo}, pela \textit{internet}\footnote{Esta pesquisa automática do mkbuild tem se mostrado pouco eficiente. Por isto é aconselhável verifica com um navegador a localização do \textit{SlackBuild} em http://gentoo-portage.com.}. Caso não consiga resolver com esta pesquisa, o \textit{SlackBuild} será colocado em um diretório padrão para \textit{scripts} não classificados, "\verb!others/unclassified/$PKG_NAME!".
\begin{verbatim}
[[SLACKBUILD PATH]]="dev/python/pyrex"
\end{verbatim}
A estrutura de diretórios para armazenamento dos \textit{SlackBuilds} adotadas pelo \textit{Slack.Sarava} segue o mesmo padrão do \textit{portage} do \textit{gentoo}.
\subsubsection{Outros Parâmetros}
Outros parâmetros podem ser passados para substituição no modelo \textit{generic.mkSlackBuild}, como o parâmetro \textit{MD5SUM EXTENSION} no trecho abaixo:
\begin{verbatim}
#[[PATCH FILES]]=""
#[[MD5SUM CODE]]=""
[[MD5SUM EXTENSION]]="047574eb5d1b7848a70d4130035f1f3c"
#[[SIGNING KEY]]=""
#[[SIGNING KEY URL]]=""
#[[PATCH FILES]]=""
\end{verbatim}
Além destes parâmetros padrões do \textit{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:
\begin{verbatim}
[[NEW PARAMETER]]="new value"
\end{verbatim}
O \textit{mkbuild} irá procurar a ocorrência da seqüência \textit{[[NEW PARAMETER]]} no modelo passado por \textit{[[SLACKBUILD MODEL]]} e irá substitui-lo por "\verb!new value!".
\subsection{Habilitando seções}
As seções do modelo \textit{generic.mkSlackBuild} são habilitadas na seção iniciada por "\verb!#>>!" e terminada por "\verb!#<> 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
\end{verbatim}
No caso do exemplo acima, são desabilitadas as seções: \textit{md5sum\_download\_and\_check\_0}, \textit{md5sum\_download\_and\_check\_1}, \textit{gpg\_signature\_check}, \textit{patch\_source}, \textit{compress\_manpages}, \textit{compress\_info\_files} e \textit{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.
\subsubsection{Substituição de seções do modelo}
Em algumas situações pode ser necessário substituir o conteúdo de uma seção. Estas mudanças nas seções são feitas por iniciar uma seção, no arquivo de parâmetros, por "\verb!#>nome_da_seção!" e terminar por "\verb!#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"
#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!" e "\verb!# input file with build rules and variables
Input options:
-a, --author
author name
-ai, --author_initials
author signature
-cs, --const_string
construction string to source name
-u, --url
url address to source
-pn, --pkg_name
package name
-sn, --src_name
source name
-pv, --pkg_version
package version
-md, --model
SlackBuild model file
-j, --jobs
Number of jobs to run simultaneously
--prefix
Prefix install directory
Program options:
-h, --help
this help mesage
-c, --commit
commit SlackBuilds in local svn tree
-n, --new
start a new mkbuild configure file
-v, --version
program version
-V, --verbose
print debug information
EXAMPLES
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
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
. There is NO WARRANTY, to the
extent permitted by law.
\end{verbatim}
Uma opção interessante é a \verb!-c!, utilizada para adicionar e atualizar uma cópia do \textit{SlackBuild} gerado na lista de \textit{SlackBuilds} local.
Slack.Sarava agradece a toda e qualquer contribuição que possa nos ajudar a manter e a desenvolver este projeto.
\end{document}