Criando pacotes no Slackware Linux

fco

Rápido e objetivo: neste artigo abordarei as formas de criar pacotes para o Slackware Linux.

[ Hits: 30.374 ]

Por: Francisco Ambrozio em 23/05/2008 | Blog: http://franciscoambrozio.wordpress.com


Criando um SlackBuild



A segunda maneira é um pouquinho mais trabalhosa pois envolve a criação de um SlackBuild - um script que automatiza a tarefa de compilar e criar um pacote.

Mas, como eu disse anteriormente, esta é a forma mais legal de se criar um pacote Slackware.

Vamos usar o mesmo exemplo (Beep Media Player). Em primeiro lugar, criamos outro diretório para nossa brincadeira, vamos colocar nele os fontes e criar dois arquivos.

$ mkdir beepmedia
$ cd beepmedia
$ mv ~/bmp-0.9.7.1.tar.gz .
$ touch slack-desc
$ touch bmp.SlackBuild


O slack-desc já abordamos como deve ser editado. Vamos ao SlackBuild! Vou colocar o conteúdo aqui e inserir os cometários explanatórios dentro dele.

#!/bin/sh
# Como qualquer script, ele começa com a linha acima identificando
# o interpretador para este script.

# Slackware build script para o Beep Media Player
# Abaixo, incluímos uma licença ao script, colocando-o sob a GPL.

# Copyright 2008 Francisco Ambrozio <[email protected]>
# 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 OROTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IFADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.

# Nas próximas linhas setamos certas variáveis que serão usadas no script.

APP=bmp
VERSION=0.9.7.1
ARCH=${ARCH:-i686}
BUILD=${BUILD:-1_custom}
# Aplicativo, versão, arquitetura e construção, respectivamente

CWD=$(pwd)
TMP=${TMP:-/tmp/build}
PKG=$TMP/package-$APP
# Criamos alguns diretórios para a compilação

# Definimos flags para a compilação
# Se estivéssemos construindo um pacote para um sistema com o gcc
#   abaixo da versão 3.4.x, então precisaríamos usar a flag "-mcpu"
#   ao invés de "-mtune"

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

# Iremos deletar quaisquer diretórios deixados por possíveis compilações
#  passadas e (re)criaremos o diretório do pacote

rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP

# Extrairemos os fontes, se fosse um tar.bz2 usaríamos tar -jxvf
tar -zxvf $CWD/$APP-$VERSION.tar.gz

# Mudamos para o diretório extraído
cd $APP-$VERSION

# Mudaremos propriedade e permissões
chown -R root:root .
find . \
  \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
  -exec chmod 755 {} \; -o \
  \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
  -exec chmod 644 {} \;

# Configuraremos.
#  Aqui vai uma nota: você precisará ter extraído os fontes anteriormente
#   em um diretório qualquer, para verificar as opções que pode (ou deve)
#   habilitar para que o programa funcione corretamente. Apenas execute
#   um ./configure --help e terá boa parte das informações necessárias.
#   As que setei abaixo são "genéricas", funcionam em praticamente qualquer
#   pacote, mas tem algumas que são bem específicas.

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
    --prefix=/usr \
    --sysconfdir=/etc \
    --localstatedir=/var \
    --build=$ARCH-slackware-linux \
    --host=$ARCH-slackware-linux
# Fizemos com estas opções que arquivos de configurações fossem para /etc,
#  arquivos de estado (como logs, por exemplo) para /var e o resto para /usr

# Copilaremos e, se algo der errado, será abortado.

make || exit 1

# Instalaremos no diretório de construção do pacote
#  E aqui vai outra nota, na verdade uma palavra de cautela:
#   Nem todos Makefiles suportam a variável DESTDIR!
#   Para saber se o pacote que deseja compilar possui, volte ao diretório
#   onde temos os fontes extraídos e execute o comando:
#   grep DESTDIR Makefile*
#   Se a saída retornar alguma coisa, mesmo que não entenda nada é
#   porque estamos no caminho certo.
#   SEMPRE execute o processo manual citado anteriormente como USUÁRIO
#   COMUM antes de rodar seu SlackBuild. - palavras de Robby Workman*!
#  * Para que não sabe, Robby Workman é desenvolvedor do Slackware e
#   um dos mantenedores do SlackBuild.org.

make install DESTDIR=$PKG

# Criaremos um diretório para a documentação
mkdir -p $PKG/usr/doc/$APP-$VERSION

# Copiaremos a documentação para o este diretório e ajustaremos as
#  permissões

cp -a AUTHORS ChangeLog COPYING FAQ INSTALL README \
  $PKG/usr/doc/$APP-$VERSION
find $PKG/usr/doc/$APP-$VERSION -type f -exec chmod 644 {} \;
# Aqui, novamente varia de caso para caso. Dê uma olhada no diretório dos
#  fontes para saber quais arquivos copiar


# Abaixo copiamos também SlackBuild para o diretório de documentação
cat $CWD/$APP.SlackBuild > $PKG/usr/doc/$APP-$VERSION/$APP.SlackBuild

# Estamos quase lá! :-)
# Agora criaremos o diretório install e copiaremos o slack-desc para ele

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

# Se precisássemos de algum comando adicional à instalação do pacote
#  do pacote instalado, seria necessário criarmos um arquivo de nome
doinst.sh, com o conteúdo destes comandos e a linha abaixo deveria ser
#  descomentada.
#cat $CWD/doinst.sh > $PKG/install/doinst.sh

# Mesmo do processo do manual, "stripar" bibliotecas e binários

( 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
)

# Comprimir man e info pages
if [ -d $PKG/usr/man ]; then
   ( cd $PKG/usr/man
   find . -type f -exec gzip -9 {} \;
   for i in $(find . -type l) ; do ln -s $(readlink $i).gz $i.gz ; rm $i ; done
   )
fi

if [ -d $PKG/usr/info ]; then
   gzip -9 $PKG/usr/info/*.info
   rm -f $PKG/usr/info/dir
fi

# E finalmente, criamos o pacote!!!
cd $PKG
/sbin/makepkg -l y -c n $TMP/$APP-$VERSION-$ARCH-$BUILD.tgz

Página anterior     Próxima página

Páginas do artigo
   1. Introdução - uma breve geral no sistema de pacotes do Slackware
   2. Manual
   3. Criando um SlackBuild
   4. Conclusão e referências
Outros artigos deste autor

Aos que estão começando...

Gerenciamento de pacotes no Slackware Linux

Leitura recomendada

Instalação do CRUX 3.0 em Virtualbox

Local Web Server visível na Internet com DynDNS

Autofs no Slackware

Servidor web nginx com PHP-FPM e memcached

Virtualização para servidores com VirtualBox

  
Comentários
[1] Comentário enviado por fulllinux em 23/05/2008 - 14:29h

Brother vc já havia me passado uma prévia mas parece que aqui no VOL a leitura fica mais interesante!!!! Sem contar a noite que passamos baixando dependencias para o BMP rodar....hauhauha

Ótimo artigo!

[2] Comentário enviado por grobsch em 23/05/2008 - 15:03h

Um adendo, apesar de sem serventia direta para o Slackware, é legal incluir o slack-required, assim todos saberão as dependências do pacote... O slack-required pode ser criado usando o requiredbuilder (http://www.stabellini.net/requiredbuilder.html)

Os pacotes que preparo para o GoblinX tem slack-required e o repositório assim pode ser usado pelo Slapt-get com checagem de dependências.

[3] Comentário enviado por removido em 24/05/2008 - 00:26h

muito bom Xico ........
apesar de não usar mais o Slackware,
deliciei-me com essa magnífica leitura !!!!!

[4] Comentário enviado por SMarcell em 24/05/2008 - 01:31h

Boa tio Xico! =) Parábens.

Falou!!!

[5] Comentário enviado por maran em 25/05/2008 - 23:37h

Deu prazer em ler este texto, realmente muito bom.
Mas também olha so o autor né!!!!!!!!!!!!!
Grande Xico, grande trabalho.
Parabéns meu velho.....
Abraços

[6] Comentário enviado por corvolino em 05/09/2008 - 09:19h

não consigo entender isso, ja li e re-li.. mas não entra na cabeça ;/

[7] Comentário enviado por flavioacrj em 22/12/2012 - 19:57h

Acho que vou testar, mais uma vez, o Slackware.
Beleza de artigo.

[8] Comentário enviado por lindbergluiz em 17/01/2017 - 12:53h

Show de Bola...........


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts