Gerando pacotes do Slackware

Publicado por Perfil removido (última atualização em 14/07/2011)

[ Hits: 6.618 ]

Download dgfpacote




Este script foi desenvolvido para gerar pacotes .txz "Slackware" diretamente do código fonte.

Para saber as opções do script use o parâmetro -h:

./dgfpacote -h

  



Esconder código-fonte

#!/bin/bash
# -----------------------------------------------------------------------
# - Feito por: Douglas Giorgio Fim               -
# - E-mail: dgf_skt@hotmail.com                  -
# - MSN: dgf_skt@hotmail.com                  -
# - Programa: dgfpacote                     -
# - Versao: 2.0                        -
# -                           -
# - Este script pode ser alterado e distribuido por qualquer pessoa,   -
# - desde que este quadro se mantenha inalterado!         -
# -                            -
# - Obs.: Este script foi desenvolvido para gerar pacotes .txz "Slackware" diretamente do codigo fonte   -
# -----------------------------------------------------------------------


PWD=`pwd`
ARCH=`arch`
DGFBASETMP=/tmp/DGF/TMP
DGFBASE=/tmp/DGF/PKG
PKG=""
DIR=""

if [ ! -z $DGFBASE ]; then
  mkdir -p "$DGFBASE"
fi

if [ ! -z $DGFBASETMP ]; then
  mkdir -p "$DGFBASETMP"
fi

if [ "$ARCH" = "x86_64" ]; then
  if [ -d /usr/lib64 ]; then
    LIB=/usr/lib64
  else
    LIB=/usr/lib
  fi
else
  LIB=/usr/lib
fi

#########################################
# Inicio das Funções
#########################################

HELP() {
echo -e "
Este script foi desenvolvido para gerar pacotes .txz \"Slackware\" diretamente do codigo fonte. Ele é compativel com os seguintes pacotes:
.tar.gz
.tgz
.tar.bz2
.tar
.bz2
.rar
.zip

Formas de uso:
  dgfpacote pacote.tar.gz

Caso ja tenha o pacote descompactado, você pode escolher uma <opções> para setar o diretorio e dar sequencia na criação do pacote, compilar kernel e limpar os restos.

  dgfpacote <opções> \"diretorio\pacote\"

<opções>
  \e[1;01m-c\e[0m - da sequencia na criação do pacote a partir do \e[1;01m./configure\e[0m
  \e[1;01m-m\e[0m - da sequencia na criação do pacote a partir do \e[1;01mmake\e[0m
  \e[1;01m-mi\e[0m - da sequencia na criação do pacote a partir do \e[1;01mmake install\e[0m
  \e[1;01m-mp\e[0m - da sequencia na criação do pacote a partir do \e[1;01mmakepkg\e[0m
  \e[1;01m-mk\e[0m - gera um pacote do kernel a partir do fonte \e[1;01m\"USE SOMENTE PACOTES DO FONTE\"\e[0m 
  \e[1;01m-l\e[0m - limpa/remove os arquivos temporarios
  \e[1;01m-lp\e[0m - limpa/remove o os pacotes criados
  \e[1;01m-h\e[0m - HELP!

É necessário estar logado como root para o funcionamento perfeito do script

Douglas Giorgio Fim
"
}

AVISO() {
echo -e "\e[1;01m############################################################\e[0m"
echo -e "\e[1;01m$1\e[0m"
echo -e "\e[1;01m############################################################\e[0m"
}

ERRO() {
  echo "[ERRO!] O script foi interrompido no processo: $1"
  exit 1
}

DESCOMPACTA() {
  VERIFICA(){
    if [ -d "$DGFBASETMP/$DIRETORIO" ]; then
      echo -n "O diretório já existe, deseja continuar a extração? [N/y] " ; read -n 1 RESPOSTA_VERIFICA
      if [ "$RESPOSTA_VERIFICA" = "" ]; then
   RESPOSTA_VERIFICA=n
      fi
     else
      RESPOSTA_VERIFICA=y
    fi
    RESPOSTA_VERIFICA=`echo $RESPOSTA_VERIFICA | tr [A-Z] [a-z]`
  }
case $PKG in
  *.tar.gz) COMPACTACAO=.tar.gz ; DIRETORIO=`tar -tvf $DIR/$PKG | awk 'NR == 1{print $6}' | sed 's/\(.*\)\/\(.*\)/\1/'` ; VERIFICA ; if [ $RESPOSTA_VERIFICA = y ]; then tar -xzvf $DIR/$PKG -C $DGFBASETMP ; fi ;;
  *.tgz) COMPACTACAO=.tar.gz ; DIRETORIO=`tar -tvf $DIR/$PKG | awk 'NR == 1{print $6}' | sed 's/\(.*\)\/\(.*\)/\1/'` ; VERIFICA ; if [ $RESPOSTA_VERIFICA = y ]; then tar -xzvf $DIR/$PKG -C $DGFBASETMP ; fi ;;
  *.tar.bz2) COMPACTACAO=.tar.bz2 ; DIRETORIO=`tar -tvf $DIR/$PKG | awk 'NR == 1{print $6}' | sed 's/\(.*\)\/\(.*\)/\1/'` ; VERIFICA ; if [ "$RESPOSTA_VERIFICA" = y ]; then tar -xjvf $DIR/$PKG -C $DGFBASETMP ; fi ;;
  *.tar) COMPACTACAO=.tar ; DIRETORIO=`tar -tvf $DIR/$PKG | awk 'NR == 1{print $6}' | sed 's/\(.*\)\/\(.*\)/\1/'` ; VERIFICA ; if [ $RESPOSTA_VERIFICA = y ]; then tar -xvf $DIR/$PKG -C $DGFBASETMP ; fi ;;
  *.bz2) COMPACTACAO=.bz2 ; DIRETORIO=`echo $DIR/$PKG | sed -e 's/'$COMPACTACAO'//g'` ; VERIFICA ; if [ $RESPOSTA_VERIFICA = y ]; then bunzip $DIR/$PKG $DGFBASETMP || bunzip2 $pkg ; fi ;;
  *.rar) COMPACTACAO=.rar ; VERIFICA ; if [ $RESPOSTA_VERIFICA = y ]; then unrar x $DIR/$PKG $DGFBASETMP ; fi ;;
  *.zip) COMPACTACAO=.zip ; VERIFICA ; if [ $RESPOSTA_VERIFICA = y ]; then gunzip $DIR/$PKG $DGFBASETMP ; fi ;;
esac
}

CONFIGURE() {
  CONFIGURE2() {
    if [ -e ./configure ]; then
      ./configure --help || ./configure -help
      COMANDO="./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --libdir=$LIB "
      echo -n "Acrescente os parametros que desejar: $COMANDO" ; read PARAMETROS

      COMANDO="./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --libdir=$LIB $PARAMETROS" && 
      AVISO "$COMANDO" && 
      ./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --libdir=$LIB $PARAMETROS #|| 
#      COMANDO="./configure --prefix=/usr --libdir=$LIB $PARAMETROS" && 
#      AVISO "$COMANDO" && 
#      ./configure --prefix=/usr --libdir=$LIB $PARAMETROS || 
#      COMANDO="./configure --prefix=/usr $PARAMETROS" && 
#      AVISO "$COMANDO" && 
#      ./configure --prefix=/usr $PARAMETROS || ERRO "$COMANDO"
    fi 
  }
  if [ -e $DGFBASETMP/$DIRETORIO/configure ]; then
    cd $DGFBASETMP/$DIRETORIO
    CONFIGURE2
  elif [ -e $DGFBASETMP/$DIRETORIO/src/configure ]; then
    cd $DGFBASETMP/$DIRETORIO/src
    CONFIGURE2
  fi
}

MAKE() {
  MAKE2() {
    echo -n "Acrescente os parametros que desejar no make: " ; read PARAMETROS_MAKE
    COMANDO="make $PARAMETROS_MAKE"
    AVISO "$COMANDO"
    make $PARAMETROS_MAKE || ERRO $COMANDO
  }
  if [ -e $DIR/$DIRETORIO/Makefile ]; then
    MAKE2
  elif [ -e $DIR/$DIRETORIO/src/Makefile ]; then
    cd $DIR/src
    MAKE2
  fi
}

MAKEKERNEL() {
  MAKEKERNEL2() {
    COMANDO="make clean"
    AVISO "$COMANDO"
    make clean || ERRO $COMANDO
    COMANDO="mrproper"
    AVISO "$COMANDO"
    make mrproper || ERRO $COMANDO
    while [ ! -f "$DGFBASETMP/$DIRETORIO/.config" ]; do
      echo "[1] make menuconfig - PADRÃO!"
      echo "[2] make oldconfig "
      echo "[3] make config"
      echo "[4] make xconfig"
      echo "Escolha um modo de configuração: " ; read -n 1 ESCOLHA_CONFIG
      if [ "$ESCOLHA_CONFIG" = "" ]; then
   ESCOLHA_CONFIG=1
      fi
      case $ESCOLHA_CONFIG in
   1)COMANDO="make menuconfig"
     AVISO "$COMANDO"
     make menuconfig || ERRO $COMANDO ;;
   2)COMANDO="make oldconfig"
     AVISO "$COMANDO"
     make oldconfig || ERRO $COMANDO ;;
   3)COMANDO="make config"
     AVISO "$COMANDO"
     make config || ERRO $COMANDO ;;
   4)COMANDO="make xconfig"
     AVISO "$COMANDO"
     make xconfig || ERRO $COMANDO ;;
      esac
    done
    COMANDO="make"
    AVISO "$COMANDO"
    make || ERRO $COMANDO
    COMANDO="make bzImage"
    AVISO "$COMANDO"
    make bzImage
    COMANDO="make modules"
    AVISO "$COMANDO"
    make modules || ERRO $COMANDO
    COMANDO="make targz-pkg"
    AVISO "$COMANDO"
    make targz-pkg
    cd "$DGFBASETMP/$DIRETORIO"
    NUM=1
    NOME_PKG=$DIRETORIO-$ARCH-$NUM.tgz
    while [ -e ../$NOME_PKG ]; do
      let NUM++
      NOME_PKG=$DIRETORIO-$ARCH-$NUM.tgz
    done
    mv $DIRETORIO.tar.gz $DGFBASE/$NOME_PKG
    DIR2=`echo $DIRETORIO`-TMP
    mkdir $DGFBASETMP/$DIR2
  }
  if [ -e $DGFBASETMP/$DIRETORIO/Makefile ]; then
    cd $DGFBASETMP/$DIRETORIO
    MAKEKERNEL2
  elif [ -e $DGFBASETMP/$DIRETORIO/src/Makefile ]; then
    cd $DGFBASETMP/$DIRETORIO/src
    MAKEKERNEL2
  fi
}


MAKE_INSTALL() {
  MAKE_INSTALL2() {
    PARAMETRO_MAKE_INSTALL="INSTALL_TOP=$1 PREFIX=$1 DESTDIR=$1 INSTALL_ROOT=$1 PREFIX_ROOT=$1"
    COMANDO="make install $PARAMETRO_MAKE_INSTALL"
    AVISO "$COMANDO"
    make install ""$PARAMETRO_MAKE_INSTALL""  || ERRO "$COMANDO"
  }
  cd $DGFBASETMP/$DIRETORIO
  DIR2=`echo $DIRETORIO`-TMP
  mkdir $DGFBASETMP/$DIR2
  MAKE_INSTALL2 "$DGFBASETMP/$DIR2"
}


MAKEPKG(){
  cd $DGFBASETMP/$DIR2
  NUM=1
  NOME_PKG=$DIRETORIO-$ARCH-$NUM.txz

  while [ -e $DGFBASE/$NOME_PKG ]; do
    let NUM++
    NOME_PKG=$DIRETORIO-$ARCH-$NUM.txz
  done

  COMANDO="makepkg -l y -c n $DGFBASE/$NOME_PKG"
  AVISO $COMANDO
  makepkg -l y -c n $DGFBASE/$NOME_PKG || ERRO "$COMANDO"
  PACOTE_INSTALADO=`for i in /var/log/packages/* ; do echo $i | sed -e 's/\(.*\)-\(.*\)-\(.*\)-\(.*\)/\1/;s/[ ]//g;s/\(.*\)\/\(.*\)/\2/;s/[ ]//g' ;done`
  PACOTE_INSTALAR=`echo "$DIRETORIO" | sed -e 's/\(.*\)-\(.*\)/\1/;s/[ ]//g'`
  VERIFICACAO_PACOTE=`echo $PACOTE_INSTALADO | grep -w "$PACOTE_INSTALAR"`

  if [ "$VERIFICACAO_PACOTE" = "" ]; then
    if [ -e $DGFBASE/$NOME_PKG ]; then
      RESPOSTA="errada"
      while [ "$RESPOSTA" = "errada" ]; do
   echo -n "Deseja instalar o pacote? $DGFBASE/$NOME_PKG [S/n] : " ; read -n 1 RESPOSTA
   RESPOSTA=`echo $RESPOSTA | tr A-Z a-z`
   if [ -z $RESPOSTA ]; then
     RESPOSTA=s
   fi
   case $RESPOSTA in
     [ys]) AVISO "installpkg $DGFBASE/$NOME_PKG" ; installpkg $DGFBASE/$NOME_PKG ;;
     n) echo ;;
     *) RESPOSTA="errada" ;;
   esac
      done
    fi
  else
    if [ -e $DGFBASE/$NOME_PKG ]; then
      RESPOSTA="errada"
      while [ "$RESPOSTA" = "errada" ]; do
   echo -ne "Existe outro pacote \e[1;01m\"$PACOTE_INSTALAR\"\e[0m instalado, deseja atualizar? $DGFBASE/$NOME_PKG [S/n] : " ; read -n 1 RESPOSTA
   RESPOSTA=`echo $RESPOSTA | tr A-Z a-z`
   if [ -z $RESPOSTA ]; then
     RESPOSTA=s
   fi
   case $RESPOSTA in
     [ys]) AVISO "upgradepkg $DGFBASE/$NOME_PKG" ; upgradepkg $DGFBASE/$NOME_PKG ;;
     n) echo ;;
     *) RESPOSTA="errada" ;;
   esac
      done
    fi
  fi


}

LIMPA() {
  RESPOSTA2="errada"
  while [ "$RESPOSTA2" = "errada" ]; do
    echo "Deseja excluir os restos? "\"$DGFBASETMP/$DIRETORIO\" \"$DGFBASETMP/$DIR2\"" [S/n]" ; read -n 1 RESPOSTA2
    echo
    RESPOSTA2=`echo $RESPOSTA2 | tr A-Z a-z`
    if [ -z $RESPOSTA2 ]; then
      RESPOSTA2=s
    fi

    case $RESPOSTA2 in
      [ys]) rm -rv $DGFBASETMP/$DIRETORIO ; rm -rf $DGFBASETMP/$DIR2 ;;
      n) echo ;;
      *) RESPOSTA2="errada" ;;
    esac
  done 
}

#########################################
# Fim das Funções
#########################################

case $1 in
  -c) if [ -d $2 ]; then
   cd $2
   VAR=$2
   if [ $VAR = './' ]; then
     VAR=$PWD
   fi
      else
   echo "Diretorio invalido!" ; exit 1
      fi
      DIR=`dirname $VAR`
      PKG=`basename $VAR`
      DIRETORIO=$PKG
      CONFIGURE
      MAKE
      MAKE_INSTALL
      MAKEPKG
      LIMPA
      AVISO "O pacote permanece em: $DGFBASE/$NOME_PKG" ;;

  -m) if [ -d $2 ]; then
   cd $2
   VAR=$2
   if [ $VAR = './' ]; then
     VAR=$PWD
   fi
      else
   echo "Diretorio invalido!" ; exit 1
      fi
      DIR=`dirname $VAR`
      PKG=`basename $VAR`
      DIRETORIO=$PKG
      MAKE 
      MAKE_INSTALL
      MAKEPKG
      LIMPA
      AVISO "O pacote permanece em: $DGFBASE/$NOME_PKG" ;;

  -mk) if [ -n $2 ]; then
   if [ -d $2 ]; then
     DIR=`dirname $2`
     PKG=`basename $2`
     DIRETORIO=$PKG
     MAKEKERNEL ; LIMPA
   else
     DIR=`dirname $2`
     PKG=`basename $2`
     DIRETORIO=$PKG
     DESCOMPACTA 
     MAKEKERNEL 
     LIMPA
     AVISO "O pacote permanece em: $DGFBASE/$NOME_PKG"
   fi
      fi ;;

  -mi)if [ -d $2 ]; then
   cd $2
   VAR=$2
   if [ $VAR = './' ]; then
     VAR=$PWD
   fi
      else
   echo "Diretorio invalido!" ; exit 1
      fi
      DIR=`dirname $VAR`
      PKG=`basename $VAR`
      DIRETORIO=$PKG
      MAKE_INSTALL 
      MAKEPKG 
      LIMPA
      AVISO "O pacote permanece em: $DGFBASE/$NOME_PKG" ;;

  -mp)if [ -d $2 ]; then
   cd $2
   VAR=$2
   if [ $VAR = './' ]; then
     VAR=$PWD
   fi
      else
   echo "Diretorio invalido!" ; exit 1
      fi
      DIR=`dirname $VAR`
      DIR2=`basename $VAR`
      DIRETORIO=$PKG
      MAKEPKG 
      LIMPA
      AVISO "O pacote permanece em: $DGFBASE/$NOME_PKG" ;;      

  -l) AVISO "rm -rf $DGFBASETMP/*" ; rm -rf $DGFBASETMP/* ;;

  -lp) AVISO "rm -rf $DGFBASE/*" ; rm -rf $DGFBASE/* ;;

  -h) HELP ;;

  *)
    DIR=`dirname $1`
    PKG=`basename $1`

    DESCOMPACTA
    CONFIGURE
    MAKE
    MAKE_INSTALL
    MAKEPKG
    LIMPA
    AVISO "O pacote permanece em: $DGFBASE/$NOME_PKG"
    exit 1 ;;
esac
exit 1

Scripts recomendados

Instalando a última versão estável do Eclipse com uma única linha

Migração de Aplicações para Ambiente Web - Uma Abordagem Prática

TCPDump do Dia

Renomeia diretorio,subdiretorio e arquivos de maiuscula > minuscula

Barra de progresso


  

Comentários
[1] Comentário enviado por removido em 27/08/2010 - 06:06h

Muito Bom!!!
Gostei muito

[2] Comentário enviado por Fellype em 14/07/2011 - 11:48h

A ideia é boa. É como se fosse um SlackBuild genérico. Mas é necessário especificar em que situações esse script funciona, pois não se pode aplicá-lo a todas as situações possíveis.
Aparentemente ele não funciona com programas que não geram o Makefile através do ./configure ou que não possuem um Makefile 'pré-preparado'.
Exemplos disso são os programas em que a configuração é feita com o comandos qmake e cmake. O qwt (http://qwt.sourceforge.net/) é um exemplo de programa que usa o qmake.

[3] Comentário enviado por removido em 14/07/2011 - 14:31h

ele não é compativel com todos os tipos de compilação, somente os mais comuns, quando não funciona, eu compilo na mão e uso ele para gerar o pacote

[4] Comentário enviado por dark777 em 28/03/2016 - 00:25h

Fera o que vc acha de incluir as funççoes para trabalhar com os tarbals .tar.xz e .zip? pois há muitos codigos fontes compactaos com esta extensão o interessante é se ele realizar dependencias no futuro assim virando um completo instalaor de pacotes com repositorio ao invés de ser apenas um gerador do mesmo ...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts