How-To :: SlackBuilds na prática!


Veremos aqui como utilizar os arquivos que compõem em SlackBuild, de modo que você possa contribuir com o projeto.

Introdução.

A primeira etapa sem sombra de dúvidas é a leitura da página Submissions Guidelines.

Que explica basicamente que o SlackBuild.org é mantido por um pequeno grupo de colaboradores, cujos pacotes|scripts tem-se a pretensão de serem representativos para a comunidade de usuários do Slackware. Pois, já que não é possível escrever scripts para todo o tipo de aplicativo que os usuários desejam, por isto, a ajuda de cada um é bem-vinda.

Portanto, se uma aplicação não existe no repositório da distribuição, utilize os modelos (Templates) e submeta-o para aprovação, observando as condições para fazê-lo.

Os arquivos.

Todos os arquivos dos quais você depende para contribuir com o SlackBuilds encontram-se no link abaixo:

SlackBuild Script Templates

Ao iniciar o projeto de um novo pacote a ser submetido para apreciação e aprovação, primeiramente crie uma pasta com o nome do programa:

$ mkdir nome-do-programa

Vá até o endereço citado anteriormente e baixe os arquivos necessários para o empacotamento de seu programa (o *-template.SlackBuild, o template.info, o README, o slack-desc e opcionalmente, o doinst.sh):

Obrigatoriamente, você deve renomear os arquivos *-template.SlackBuild e template.info para nome-do-programa.SlackBuild e nome-do-programa.info.

* só torço para que você não escolha um ruby.SlackBuild, porque tá osso empacotar algo assim com a versão mais recente do Ruby (pelo menos no Slackware Current).

Descrição dos arquivos.

O set dos arquivos que compõe um SlackBuild é formado por:

doinst.sh.

Desnecessário algumas vezes, este script é necessário para o pós instalação de determinado programa, pacote de ícones, temas, fontes, etc, além de outras coisas como criação de links, alteração de permissões, etc, exemplo para um doinst.sh que contenha fontes, ícones e temas.

if [ -x /usr/bin/update-desktop-database ]; then
  /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi

if [ -x /usr/bin/update-mime-database ]; then
  /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
fi

if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
  if [ -x /usr/bin/gtk-update-icon-cache ]; then
    /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1
  fi
fi

if [ -x /usr/bin/mkfontdir ]; then
  ( cd /usr/share/fonts/TTF
    mkfontscale .
    mkfontdir .
  )
fi

if [ -x /usr/bin/fc-cache ]; then
  /usr/bin/fc-cache -f
fi

*.info.

Esse arquivo nada mais é que o responsável pelo detalhamento da origem do novo pacote, ou seja, seu nome, homepage, link(s) para download(s) da respectiva versão, o hash md5 da(s) mesma(s), de quais pacotes depende para o seu empacotamento e se houver a necessidade na linha REQUIRES, o campo %README poderá ser adicionado, isto quer dizer que algumas observações foram inseridas no arquivo README, e para concluir, o nome e email do mantenedor do pacote.

Observações:

a. caso não haja links para downloads de uma determinada arquitetura, a linha DOWNLOAD* e MD5SUM* da mesma deverá ficar em branco, ou seja apenas com as aspas duplas;

b. se o código fonte do programa for o mesmo para ambas as arquiteturas, o mesmo que fora exposto acima se aplica ao caso;

c. se a compilação do programa não for possível numa determinada arquitetura, deixe sua linha com a tag UNSUPPORTED:

DOWNLOAD="UNSUPPORTED"

ou:

DOWNLOAD_x86_64="UNSUPPORTED"

d. e na ocorrência do caso acima, a linha MD5SUM para a arquitetura, deverá ficar vazia;

e. se o aplicativo não compilar num sistema x86_64 limpo, ou seja, sem os pacotes de compatibilidades 32bits (multilib), deve-se adicionar a tag UNTESTED:

DOWNLOAD_x86_64="UNTESTED"

f. no caso do aplicativo depender de inúmeros pacotes para o seu empacotamento, os mesmo deverão ser ordenados (tanto na linha DOWNLOAD*, como na MD5SUM*, exemplo para o caso dos pacotes contendo drivers Nvidia:

DOWNLOAD="ftp://download.nvidia.com/XFree86/Linux-x86/352.41/NVIDIA-Linux-x86-352.41.run \
          ftp://download.nvidia.com/XFree86/nvidia-installer/nvidia-installer-352.41.tar.bz2 \
	      ftp://download.nvidia.com/XFree86/nvidia-modprobe/nvidia-modprobe-352.41.tar.bz2 \
	      ftp://download.nvidia.com/XFree86/nvidia-persistenced/nvidia-persistenced-352.41.tar.bz2 \
	      ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-352.41.tar.bz2 \
          ftp://download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-352.41.tar.bz2"
MD5SUM="3f9c9fed035fa845e3f6a1ea5f5732f7 \
        76902115efedd712b94e8c367ecefb4c \
        1c816bf20976aaae9b3c3685fc8e9eec \
        d22259e6e3e898d9173bbeeed30c5bec \
        96ceb2bc7ac4a03edfbf96a642cfda64 \
        bde51cb75eb2595555a147b292fd331a"
DOWNLOAD_x86_64="ftp://download.nvidia.com/XFree86/Linux-x86_64/352.41/NVIDIA-Linux-x86_64-352.41.run \
                 ftp://download.nvidia.com/XFree86/nvidia-installer/nvidia-installer-352.41.tar.bz2 \
                 ftp://download.nvidia.com/XFree86/nvidia-modprobe/nvidia-modprobe-352.41.tar.bz2 \
                 ftp://download.nvidia.com/XFree86/nvidia-persistenced/nvidia-persistenced-352.41.tar.bz2 \
                 ftp://download.nvidia.com/XFree86/nvidia-settings/nvidia-settings-352.41.tar.bz2 \
                 ftp://download.nvidia.com/XFree86/nvidia-xconfig/nvidia-xconfig-352.41.tar.bz2"
MD5SUM_x86_64="d828258194ea4672e3935f96402410c2 \
        76902115efedd712b94e8c367ecefb4c \
        1c816bf20976aaae9b3c3685fc8e9eec \
        d22259e6e3e898d9173bbeeed30c5bec \
        96ceb2bc7ac4a03edfbf96a642cfda64 \
        bde51cb75eb2595555a147b292fd331a"

A linha REQUIRES geralmente é a que dá mais trabalho, visto que aqui você deve inserir as dependências do SBo (em sua correta ordem e espaçadas uma da outra).

Observações:

a. nesta seção não deverá haver citações a pacotes disponíveis no repositório oficial do Slackware!;

b. apenas o 1º nível de dependências é admitido, por exemplo se um pacote A depende do pacote B e este depende do C e por aí vai, você deve citar apenas o pacote A;

* programas como o sbotools, sqg (auxiliar para o sbopkg) e slpkg são capazes de lidar com estas dependências de forma a por todas em fila na hora do empacotamento e na referida ordem.

c. dependências opcionais não deverão ser inclusas na linha REQUIRES, mas sim no arquivo README, neste caso, adiciona-se o valor %README na linha REQUIRES, como no exemplo:

REQUIRES="%README%"

Havendo referência ao arquivo README, indicará que informações importantes estão disponíveis no tal arquivo, o que indica que para um correto empacotamento se você não ler o arquivo README, observando questões como dependências e outras, como no exemplo do caso do ffmpeg (visto mais a frente na parte referente ao arquivo README).

Porém, se embora opcional (a presença da tal dependência não for necessária para o empacotamento), mas necessária para o uso do conteúdo do pacote, você pode adicionar esta dependência na linha REQUIRES, exemplo:

REQUIRES="awesome"

E no arquivo README, a tal dependência poderá ser citada assim:

This requires: awesome

Os responsáveis pela análise de seu SlackBuild sempre terão poder de veto ou de modificar seu SlackBuild caso achem necessidade, embora, é costume por parte dos mesmos o contato via email informando os motivos, sugerindo alterações ou justificando o motivo pelo qual seu SlackBuild foi reprovado (ou excluído, até).

E por fim, temos as linhas MAINTAINER e EMAIL, onde você deve inserir seu nome e email.

MAINTAINER="NOME"
EMAIL="EMAIL"

slack-desc.

             |-----handy-ruler------------------------------------------------------|
secure-delete: secure-delete (wipe files, free disk space, swap and memory)
secure-delete:
secure-delete: Gutmann method based tools for securely wiping data.
secure-delete:
secure-delete: Home page: https://www.thc.org/releases.php?q=delete/
secure-delete:
secure-delete:
secure-delete:
secure-delete:
secure-delete:
secure-delete:

Este arquivo provê num breve resumo a descrição do programa e opcionalmente sua homepage, no geral, um arquivo slack-desc é disposto como no exemplo acima, onde:

Após a linha handy-rules serão exatamente (no more no less) que 11 linhas, onde o nome do programa é seguido do sinal :, como no exemplo ( secure-delete: ), observe ainda que a linha superior “handy-rules” deverá deverá ser iniciada exatamente através do alinhamento com a primeira linha nome-do-programa seguido do dois pontos (:), ou seja, assim:

             |-----handy-ruler------------------------------------------------------|
secure-delete: secure-delete (wipe files, free disk space, swap and memory)

Em linhas em branco após os : (dois pontos) não deverá haver espaços.

O texto a ser inserido após os : (dois pontos) não deverá exceder ao final da linha handy-rules, que termina exatamente no último caractere |, sob nenhuma hipótese o texto deverá excedê-lo como no exemplo abaixo:

             |-----handy-ruler------------------------------------------------------|
secure-delete: secure-delete (wipe files, free disk space, swap and memory), this program may be conflict with srm package.

README.

Além de poderem ser inseridas as informações presentes no arquivo slack-desc, este é o arquivo onde você deve especificar se existe alguma dependência opcional para um bom funcionamento do programa, informações adicionais, etc, e como dito vamos ao bem construído README do pacote FFMPEG:

FFmpeg is a complete solution to record, convert and stream audio
and video. It includes libavcodec, the leading audio/video codec
library.

You can enable a lot of optional (not-autodetected) features by
passing variables to the script (VAR=yes/no ./ffmpeg.SlackBuild):
ASS=yes|no (default: no), requires libass
BLURAY=yes|no (default: no), requires libbluray
CELT=yes|no (default: no), requires celt
DC1394=yes|no (default: no), requires libdc1394
DECKLINK=yes|no (default: no), requires decklink-sdk
FAAC=yes|no (default: no), requires faac (creates non-redistributable binary)
FDK_AAC=yes|no (default: no), requires libfdk-aac (creates non-redistributable binary)
FLITE=yes|no (default: no), requires flite
FREI0R=yes|no (default: no), requires frei0r
GSM=yes|no (default: no), requires gsm
IEC61883=yes|no (default: no), requires libiec61883 and libavc1394
ILBC=yes|no (default: no), requires libilbc
JP2=yes|no (default: no), requires openjpeg
LADSPA=yes|no (default: no), requires ladspa_sdk
LAME=yes|no (default: no), requires lame
MODPLUG=yes|no (default: no), requires libmodplug
OPENAL=yes|no (default: no), requires OpenAL
OPENCORE=yes|no (default: no), requires opencore-amr
OPENCV=yes|no (default: no), requires opencv
OPENSSL=yes|no (default: no), creates non-redistributable binary
OPUS=yes|no (default: no), requires opus
PULSEAUDIO=yes|no (default: no), requires pulseaudio
QUVI=yes|no (default: no), requires libquvi
RTMP=yes|no (default: no), requires rtmpdump
SCHROEDINGER=yes|no (default: no), requires schroedinger
SPEEX=yes|no (default: no), requires speex
TWOLAME=yes|no (default: no), requires twolame
VIDSTAB=yes|no (default: no), requires vid.stab
VPX=yes|no (default: no), requires libvpx
X264=yes|no (default: no), requires x264
X265=yes|no (default: no), requires x265
XVID=yes|no (default: no), requires xvidcore
ZVBI=yes|no (default: no), requires zvbi

Additional optional (autodetected) dependencies are jack-audio-connection-kit,
libva and libvdpau.

Make sure to run this script in a real root shell ("su -") and that you
have either tetex or texlive installed.

All of the mentioned requirements are available from SlackBuilds.org

Onde além da descrição do programa, foram incluídas todas as dependências opcionais (detectáveis ou não) pelo script SlackBuild.

E se não bastasse, a informação que talvez seja a responsável por 99,99% das falhas do empacotamento do ffmpeg:

“Make sure to run this script in a real root shell (“su –“) and that you
have either tetex or texlive installed.”

Ou seja, aqueles que como eu usam o sudo para poupar tempo, se lascam devido ao péssimo costume!, para maiores detalhes, veja o Step 3 em:

http://slackbuilds.org/howto/

Ao final do arquivo README, é informado que todas as dependências estão disponíveis no SlackBuilds.org.

*.SlackBuild.

Como já dito, na página de templates existem diferentes modelos para cada tipo de empacotamento, seja ele: python, perl, autotools, cmake, ruby, pegue um como exemplo e modifique-o de acordo.

Esmiuçando like a Jack the Ripper…

O cabeçalho tradicional de um bash script (convencionou-se usar o /bin/sh), já vi discussões a respeito sobre o porque usá-lo em lugar do /bin/bash (acho que até no próprio VOL), mas não convém ao própósito do artigo descrevê-lo.

#!/bin/sh

A introdução básica do programa que compõe o SlackBuild:

# Slackware build script for secure-delete.

O Copyright e a licença utilizada:

# Copyright 2015 SEU NOME, CIDADE, PAÍS. (também pode-se usar o email)
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

A parte referente ao nome, versão, versão do empacotamento e a tradicional TAG (SBo):

PRGNAM=secure-delete
VERSION=${VERSION:-3.1}
BUILD=${BUILD:-4}
TAG=${TAG:-_SBo}

Definição das arquiteturas:

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i486 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

O PWD utilizado, pasta utilizada, diretório onde os arquivos serão direcionados até empacotá-los:

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

Definição da arquitetura que o programa deverá ser empacotado:

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

Em caso de erro: sai!

set -e

Em alguns casos a opção PROGNAM poderá ser utilizada por SRCNAM, assim como a opção VERSION poderá ser substituída por SRCVERSION.

SRCNAM="secure_delete"

Nos exemplos a seguir, ao executar um SlackBuild:

1. será excluída um pasta que contenha exatamente o nome do pacote em /tmp;

2. esta mesma pasta será recriada (em caso de remoção) ou criada em caso da primeira execução;

3. entra-se no diretório de trabalho;

4. será removida a pasta contendo os sources do programa;

5. os sources serão descomprimidos;

6. no exemplo, renomeamos a pasta com os valores $SRCNAM-$VERSION (secure_delete-3.1) para $PRGNAM-$VERSION (secure-delete-3.1);

7. entramos no diretório renomeado;

8. definimos as permissões dos arquivos.

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$SRCNAM-$VERSION.tar.gz
mv $SRCNAM-$VERSION $PRGNAM-$VERSION
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
 \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
  -o -perm 511 \) -exec chmod 755 {} \; -o \
 \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
  -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;

Em seguida, aplicamos um patch para o correto funcionamento do programa:

patch -p1 < $CWD/secure-delete_3.1-6.diff

A seguir o comando make é executado, sendo definido o prefix padrão e o destino dos arquivos (que não funcionará para este caso) rsrs:

make prefix=/usr DESTDIR=$PKG

Strip binaries and libraries:

find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true

Para este caso foi necessário criar a pasta /usr/man/man1, e a cópia das manpages dos programas para a mesma:

mkdir -p $PKG/usr/man/man1
cp -a sfill.1 smem.1 srm.1 sswap.1 $PKG/usr/man/man1

Porém, boa parte dos programas oferecem a possibilidade de definí-las ao rodar o make.

O comando abaixo se encarrega de comprimir no formato .gz as manpages (esquecer de fazer isto já é o suficiente para seu SlackBuild ser reprovado!).

find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done

Criação da pasta do(s) executável(eis):

mkdir -p $PKG/usr/bin

Isto foi necessário porque mesmo tendo definido o prefix padrão como /usr, este programa salva os mesmos em /bin, logo, copiamos então os executáveis para a pasta recém-criada:

cp -a sfill smem srm sswap $PKG/usr/bin

Continuando, definimos os arquivos que compõe a documentação do pacote:

DOCS="CHANGES README secure_delete.doc TODO usenix6-gutmann.doc"

Criação da pasta onde os mesmos serão salvos:

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION

Cópia dos mesmos:

cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION
cp -a debian/changelog $PKG/usr/doc/$PRGNAM-$VERSION/changelog.Debian
cp -a debian/README.Debian $PKG/usr/doc/$PRGNAM-$VERSION/README.Debian
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

Criação da pasta install, onde dependendo do tipo de programa, além do slack-desc, poderá ser adicionado o script doinst.sh:

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh

Observações:

Se em seu SlackBuild houver a criação de links simbólicos, “automagicamente” eles serão direcionados ao script doinst.sh, isto é, sem a sua intervenção, exemplo:

(
ln -s /usr/bin/ffmpeg $PKG/usr/share/exmplayer/ffmpeg
)

Que diz para criar no novo pacote, um link para o executável já presente no sistema.

Ou para o caso a seguir, que criará um link no pacote para algo que só estará disponível quando o mesmo for instalado:

(
ln -s /opt/awemenugen/awemenugen.sh $PKG/usr/bin/awemenugen
)

Ou em outra demonstração, onde ocorre a instalação de ícones de programa:

for res in 16 22 24 32 48 64 128 256; do
   install -Dm644 "$PKG/opt/vivaldi-snapshot/product_logo_${res}.png" \
"$PKG/usr/share/icons/hicolor/${res}x${res}/apps/vivaldi-snapshot.png"
done

Em situação anterior, os ícones eram copiados por intermédio do doint.sh, porém, quando o programa era removido, os arquivos permaneciam no sistema.


E para concluir, entramos no diretório onde todos os arquivos foram salvos e iniciamos o empacotamento:

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

Observação:

Em $PKGTYPE, o valor .tgz poderia ser substituído por .txz, porém, por exigir um maior poder de processamento (embora gere um arquivo menos), o .txz não tornou-se o padrão.

E tendo concluido o que deu para descrever dos arquivos, vamos à prática!

Antes de começar.

Nesse ponto veremos a flexibilidade de um SlackBuild.

Comecemos pelo tratamento de nome de pacotes, versões e revisões.

Por nome convém não utilizar terminações como development, snapshots, etc num SlackBuild, pois do contrário o pacote será instalado mas a descrição do mesmo não será vista, assim, caso obtenha algo do tipo, utilize a tag $SRCNAM.

SlackBuilds possuem como versões contendo apenas números e pontos, portanto se baixar um source que contenha traços ou simbolos underline na versão deverá utilizar a tag $SRCVER, o que veremos mais a frentePor nome convém não utilizar terminações como development, snapshots, etc num SlackBuild, pois do contrário o pacote será instalado mas não se verá a descrição do mesmo.

Como exemplo demonstrarei o chato pacote Vivaldi, cujo source é descrito assim ” vivaldi-snapshot_1.0.300.5-1_i386.deb “, assim, temos à vista basicamente 4 campos:

nome: vivaldi-snapshot
versão: _1.0.300.5-1
arquitetura: _i386
tipo: deb

Certo? errado! para que o mesmo sirva, pega-se:

PRGNAM="vivaldi" # o nome aceito pelo sistema.
SRCNAM="vivaldi-snapshot" # o nome que será utilizado como o da fonte.
VERSION=${VERSION:-1.0.300.5} # a versão a ser utilizada.
SRCVER=${SRCVER:-1.0.300.5-1} # a versão do source, cujo -1 de um .deb equivale a linha BUILD=${BUILD:-1} de um SlackBuild.

E na hora da descompactação do source… será outra novela, pois, por causa do sinal underline entre os campos teremos que por $SRCNAM e $SRCVER entre chaves:

ar p $CWD/${SRCNAM}_${SRCVER}_${BITS}.deb data.tar.xz | tar xvJ

Além de inserir um novo campo, o $BITS (também entre chaves), este campo foi obtido do bloco lá no início do Slackbuild:

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
  LIBDIRSUFFIX=""
  BITS="i386"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
  BITS="i386"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
  BITS="amd64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

Pois bem, já que tudo está certo, bastará rodar o SlackBuild e pronto correto?

Depende jovem obi-wan, torça também para que o pacote data.tar.xz não seja alterado para outro formato, seja o padrão .tar.gz ou até mesmo data.tar.lzma, nesse caso, corrija isto.

Agora vamos tratar das manpages e documentações.

Diferentemente de outras distros que costumam guardar as manpages e a documentação do programa em /usr/share, o Slackware usa simplesmente /usr, assim, se ao término do empacotamento suas manpages e a documentação estiverem em /usr/share/man/man* e /usr/share/doc, trate de corrigir isto no SlackBuild, vejam os exemplos:

manpages:

mv $PKG/usr/share/man $PKG/usr/man

Antes de:

find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done

Desta forma, os arquivos estarão exatamente onde esperamos encontrá-los e serão comprimidos via gzip.

* toda manpage deverá ser comprimida via gzip! a não observância dessa regra poderá acarretar na reprovação de seu SlackBuild, salvo se quem moderar seu SlackBuild for muito bonzinho.

Em casos em que o pacote não provê nenhum tipo de manpage, mas você sabe que em algum lugar a mesma existe, você simplesmente pega-os e põe junto a pasta dos arquivos, exemplo para o pacote crip (cujas manpages foram obtidas de um pacote .deb), são eles: crip.1 editcomment.1 e editfilenames.1, logo, insira no SlackBuild, entradas como as seguintes:

MANPAGES="$CWD/crip.1 $CWD/editcomment.1 $CWD/editfilenames.1"

mkdir -p $PKG/usr/man/man1
cp -a $MANPAGES $PKG/usr/man/man1

find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done

Caso não haja manpage ou documentação, apenas ignore, não invente!

documentação:

Assim como no caso das manpages, basta mover a pasta de lugar:

mv $PKG/usr/share/doc $PKG/usr/doc

Para antes de:

DOCS="CHANGES README secure_delete.doc TODO usenix6-gutmann.doc"

Ou antes do bloco que cria a pasta de documentação no pacote:

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION
cp -a debian/changelog $PKG/usr/doc/$PRGNAM-$VERSION/changelog.Debian
cp -a debian/README.Debian $PKG/usr/doc/$PRGNAM-$VERSION/README.Debian
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

Na prática.

Se você conseguiu acompanhar até aqui, na pasta contendo o nome do pacote bastará rodar um:

# ./nome-do-pacote.SlackBuild

Porém, convém gravar todo o seu LOG de modo que possa examiná-lo em caso de erro, para tal faça assim:

# ./nome-do-pacote.SlackBuild 2>&1 | tee nome-do-programa.log

Sugestão de leitura:

SlackBuilds Build Log HOWTO

Se tudo deu certim, instale a bagaça!:

# installpkg /tmp/nome-do-pacote*.tgz

Após a instalação do novo pacote, remova os sources (ou como eu, mova-o para /var/cache/sbopkg):

# rm -fv source-do-programa

Saia do diretório e comprima esta pasta para o formato .tar.gz ou .tar.bz2:

# tar zcvf nome-do-pacote.tar.gz nome-do-pacote/*
ou
# tar jcvf nome-do-pacote.tar.bz2 nome-do-pacote/*

Teste a descompressão do arquivo:

# tar xvf nome-do-pacote.tar.gz
ou
# tar xvf nome-do-pacote.tar.bz2

Abaixo, vemos os passos referentes a atualização de um SlackBuild e seu envio para moderação:

Este slideshow necessita de JavaScript.

E se tudo deu certo, você já pode se dirigir até a página:

SlackBuilds Submission Upload Form

exemplo de atualização de pacote...
exemplo de atualização de pacote…

Observações.

Na imagem acima nota-se que apenas no campo Searchable Keywords nada foi inserido, isto se faz APENAS quando da 1ª submissão de um pacote.

Observa-se também que indiquei um link para verificação do log do empacotamento, de modo a agilizar a aprovação do SlackBuild.

Com isso, encerro minha pequena introdução ao empacotamento de SlackBuilds.

Sugestão de leitura.

Além dos links presentes neste artigo, seguem mais alguns que talvez possa lhe interessar:

SlackBuild Scripts

Writing A SlackBuild Script

Compiling

Building A Package

Different Approach To Buildscripts

happy Slackin procÊs!

Anúncios
How-To :: SlackBuilds na prática!

7 comentários sobre “How-To :: SlackBuilds na prática!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s