Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

[Shell-Script]Gerar Pacotes para Slackware

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    [Shell-Script]Gerar Pacotes para Slackware

    Gerando Pacotes para Slackware



    Este script foi desenvolvido para gerar pacotes .txz do Slackware diretamente do código fonte.
    Para saber as opções do script use o parâmetro -h:
    ./dgfpacote -h

    Arquivo dgfpacote:

    #!/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
    Créditos: Douglas Giorgio Fim
    Last edited by Lord Beni-Aretz; 19-07-2011, 11:30.
    Não Acha Estranha Essa Frase:
    Eu Sou Hacker e Uso Windows XP!

    Use Débian, Aprenda Slackware e Brinque Muito Com Back|Track


    Fã ->Nickguitar.dll


    Quer ajudar nossso fórum e não sabe como?
    Então click na imagem e ajude-nos com os links off
X
Working...
X