Criando pacotes no Slackware Linux

fco

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

[ Hits: 31.745 ]

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 <francisco_ambrozio@yahoo.com.br>
# 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

Resolvendo o problema de gerenciamento de energia - ACPI

Diagnosticando problemas variados em ambientes GNU/Linux (parte 1)

Instalação do Nagios no Ubuntu Linux

Trazendo toda a usabilidade do GNOME 2 para o GNOME 3 do Ubuntu 11.10

Instalando o poderoso gerenciador de redes Nagios 3.0 com Apache2

  
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...........

[9] Comentário enviado por bhuija em 02/05/2023 - 03:10h

That is what I was looking for, what information, present here at this site! https://www.dg-paystub.com/


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts