Gerador de Pacotes de Instalação

Publicado por Pedro Robson Leão 30/06/2004

[ Hits: 7.505 ]

Download InstallGeraPack.pkg.sh.gz




Este script gera um arquivo tipo auto-extract com opções de inclusão de nota de instalação e script de pós instalação. Para quem não estiver afim de usar rpm pode ser uma boa solução.
Uma outra caracteristica importante deste instalador é criar um backup dos arquivos ja existentes na maquina para casos de arrependimento após a instalação de seus arquivos.
script : geraPack.sh e initPack.sh
Junto com o pacote de instalação, segue o manual de uso dos scripts.

  



Esconder código-fonte

::::::::::::::
geraPack.sh
::::::::::::::
#! /usr/bin/bash

# gerador de arquivo auto instalador.

# /*** Informacoes do cvs ***
# $Author: pleao $
# $Revision: 1.3 $
# $Date: 2004/06/30 16:45:52 $
# $State: Exp $
# $Id: geraPack.sh,v 1.3 2004/06/30 16:45:52 pleao Exp $
# $Source: /Development/Develop/Batches/Common/Scripts/geraPack/geraPack.sh,v $

# *** Change Log ***
# $Log: geraPack.sh,v $
# Revision 1.3  2004/06/30 16:45:52  pleao
# 1) Remove arquivos temporarios mesmo quando o gerador ou instalador eh interrompido por <CTRL+C>.
# 2) Seta o ${EDITOR} como "vi" quando não existir nenhum definido ou quando ${DISPLAY} nao esta definida.
#
# Seria interesante atualizar a versao de todos, inclusive maquinas remotas.
#
# Revision 1.2  2004/06/07 15:48:14  pleao
# Compatibilidade tar e gtar (GNU TAR)
#
# Revision 1.1  2004/06/03 13:43:59  pleao
# Mudanca de repositorio.
#
# Revision 1.5  2004/05/21 21:33:01  pleao
# Ajustes na impressao da versao
#
# Revision 1.4  2004/05/21 21:30:27  pleao
# Ajustes na impressao da versao
#
# Revision 1.3  2004/05/21 21:27:35  pleao
# Inclusao de novos recurso para maior controle dos pacotes.
#
# Revision 1.2  2003/12/10 16:11:36  pleao
# return 0; para funcionar com o makefile.
#
# Revision 1.1  2003/07/31 15:06:01  pleao
# Gerador de pacotes de instalacao.
# Versao inicial.
#

VERSION="\$Id: geraPack.sh,v 1.3 2004/06/30 16:45:52 pleao Exp $";

trap 'cleanTmp && exit 0' 1 2 3 6 9 13 14 15 16 17 23 24 26

function cleanTmp() {
   [ ! -z "${debug}" ] && echo "#-- Apaga arquivos temporarios.";
   rm -f /tmp/intDate.$$ ${tmpfile} /tmp/script.sh  /tmp/note.txt  /tmp/intDate.$$ ;
}

function isGnuTar() {
   tar --version 2>/dev/null | grep GNU
   return $?
}

function usage() {
   printf "Usage: %s [-p (package name)] [-s (post install script)] [-n (note file)] [-l (list files)] [-v version] [-d debug] files ...\n" $0
   cleanTmp;
   exit 2;
}

[ $# == 0 ] && usage $0

[ isGnuTar ] && TARPARM="-P";

pflg=
nflg=
lflg=
sflg=
debug=

while getopts p:n:l:s:dv name ; do
   case $name in
      p)   pflg=1
            pkgname="$OPTARG";;
      n)   nflg=1
            notefile="$OPTARG";;
      l)   lflg=1
            listfile="$OPTARG";;
      s)   sflg=1
            pInstScript="$OPTARG";;
      v)   echo ${VERSION};
            echo "";
            usage $0;;
      d)   debug=1;;
      *)   usage $0;;
   esac
done

if [ ! -z "${lflg}" ] ; then
   [ ! -z "${debug}" ] && echo "#-- Le do arquivo fornecido como lista de entrada.";
   FILES=$( cat ${listfile} );
else
   [ ! -z "${debug}" ] && echo "#-- Le lista da entrada padrao separada por :";
   shift $(($OPTIND - 1));

   FILES=$( echo "$*" );
   FILES=$( echo ${FILES} | sed s/":"/" "/g );

   if [ "${FILES}" == "" ] ; then
      [ ! -z "${debug}" ] && echo "#-- Le da entrada padrao.";
      while read linha; do
         FILES="${FILES} ${linha}";   
      done
   fi
fi

tmpfile=/tmp/tmpfile.$$.tar;

[ ! -z "${debug}" ] && echo "#-- Empacota os arquivos a serem intalados.";

outputfile=/tmp/install.`date +%Y%m%d`.$$.sh;
date >/tmp/intDate.$$;

tar ${TARPARM}cvf ${tmpfile} /tmp/intDate.$$ >/dev/null;

for file in ${FILES} ; do
   if [ -a ${file} ] ; then
      [ ! -z "${debug}" ] && echo "#-- Append file ${file}";
      tar ${TARPARM}uvf    ${tmpfile}   ${file} ;
   else
      echo "can't open file ${file}";
   fi
done

if [ ! -z ${nflg} ] ; then
   [ ! -z "${debug}" ] && echo "#-- Copy note file ";
   cp ${notefile} /tmp/note.txt
else
   [ ! -z "${debug}" ] && echo "#-- Edit note file ";
   echo "Descreva informacoes sobre a instalacao aqui :" >/tmp/note.txt;

   [ -z "${EDITOR}"  ]  && EDITOR=vi;
   [ -z "${DISPLAY}" ]  && EDITOR=vi;
   
   ${EDITOR} /tmp/note.txt; 
fi

if [ -a /tmp/note.txt ] ; then
   [ ! -z "${debug}" ] && echo "#-- Acrescenta nota ao pacote";
   echo "" >>/tmp/note.txt
   finger ${USER} | head -3 >>/tmp/note.txt
   uname -a  >>/tmp/note.txt
   date >>/tmp/note.txt
   echo "" >>/tmp/note.txt
   echo "" >>/tmp/note.txt
   echo "" >>/tmp/note.txt
   tar ${TARPARM}uvf ${tmpfile} /tmp/note.txt
fi

if [ ! -z ${sflg} ] ; then
   [ ! -z "${debug}" ] && echo "#-- Copia o script para o tmp";

   cp ${pInstScript} /tmp/script.sh;
fi

if [ -a /tmp/script.sh ] ; then
   [ ! -z "${debug}" ] && echo "#-- Acrescenta o script de pos instalacao";

   tar ${TARPARM}uvf ${tmpfile}  /tmp/script.sh
fi

[ ! -z "${debug}" ] && echo "#-- Encapsula com o instalador e gera permissoes.";

cat `which initPack.sh` ${tmpfile} >>${outputfile}
chmod 755 ${outputfile}

#Limpa arquivos temporarios
cleanTmp;

if [ ! -z ${pflg} ] ; then
   [ ! -z "${debug}" ] && echo "#-- Move tmp file to name info";

   mv ${outputfile} `date +%Y%m%d`.${pkgname}.pkg.sh
else
   [ ! -z "${debug}" ] && echo "#-- Informa o arquivo instalador gerado.";
   echo "Use the file ${outputfile}";
fi

cleanTmp;
exit 0;
::::::::::::::
initPack.sh
::::::::::::::
#! /usr/bin/bash

# cabecalho para o arquivo auto instalador.

# /*** Informacoes do cvs ***
# $Author: pleao $
# $Revision: 1.5 $
# $Date: 2004/06/30 16:45:52 $
# $State: Exp $
# $Id: initPack.sh,v 1.5 2004/06/30 16:45:52 pleao Exp $
# $Source: /Development/Develop/Batches/Common/Scripts/geraPack/initPack.sh,v $

# *** Change Log ***
# Este arquivo nao pode apresentar o changeLog, devido uso da variavel SCRIPTLASTLINE
# que deve conter a ultima linha do arquivo para desatachar o arquivo tarado.

VERSION="\$Id: initPack.sh,v 1.5 2004/06/30 16:45:52 pleao Exp $";

trap 'cleanTmp && exit 0' 1 2 3 6 9 13 14 15 16 17 23 24 26

function cleanTmp() {
   [ ! -z "${debug}" ] && echo "#-- Apaga os arquivos temporarios.";
   rm -f /tmp/script.sh /tmp/note.txt /tmp/intDate.* /tmp/bkpDate.* ${outname} ${tmpfile};
}

function isGnuTar() {
   tar --version 2>/dev/null | grep GNU
   return $?
}

SCRIPTLASTLINE=143;
iam=$( basename ${0} .sh );
outname=/tmp/install.sfx.$$;
tmpfile=/tmp/tmpfile.$$.tar;

[ isGnuTar ] && TARPARM="-P";

lflg=
Lflg=
debug=

while getopts Lldv name ; do
   case $name in
      l)   lflg=1;;
      L)  Lflg=1;;
      d)   debug=1;;
      v)   echo ${VERSION};
            echo "";
            cleanTmp;
            exit 0;;
      *) exit 0;
   esac
done

[ ${iam} == "initPack" ] && exit 0;

[ ! -z "${debug}" ] && echo "#-- Separa o arquivo tar anexado.";

tail +${SCRIPTLASTLINE} $0 >${outname}

if [ -z "${Lflg}" ] ; then
   [ ! -z "${debug}" ] && echo "#-- Mostra notas";
   [ -a /tmp/note.txt ] && rm -f /tmp/note.txt;

   tar ${TARPARM}xvf ${outname} /tmp/note.txt
   [ -a /tmp/note.txt ] && more /tmp/note.txt
   echo "Relacao de arquivos para instalacao";
else
   [ ! -z "${debug}" ] && echo "#-- Não mostra o arquivo de notas";
   lflg=1;
fi

[ ! -z "${debug}" ] && echo "#-- Mostra arquivos a serem instalados.";
tar ${TARPARM}tvf ${outname} | awk '{ print $NF; }' | grep -v "intDate\." | grep -v /tmp/note.txt | grep -v /tmp/script.sh;

[ ! -z "${lflg}" ] && cleanTmp && exit 0

echo -n "Confirma a instalacao dos arquivos (s/n) : "
read conf;

if [ ${conf} != 's' ] ; then
   [ ! -z "${debug}" ] && echo "#-- Apaga os arquivos temporarios.";

   cleanTmp;
   exit 2;
fi

echo "Realizando backup dos arquivos ...";
date >/tmp/bkpDate.$$;

[ ! -z "${debug}" ] && echo "#-- Empacota o backup.";

tar ${TARPARM}cvf ${tmpfile} /tmp/bkpDate.$$ >/dev/null;

for file in $( tar ${TARPARM}tvf ${outname} | awk '{print $NF;}' | grep -v "intDate\." | grep -v /tmp/note.txt | grep -v /tmp/script.sh ); do
   if [ -a ${file} ] ; then
        tar ${TARPARM}uvf ${tmpfile} ${file}
   else
      echo "can't open file ${file}";
   fi
done

[ ! -z "${debug}" ] && echo "#-- Verifica se o diretorio de backup existe";

if [ -d ./pkg_backup ] ; then
   true;
else
   mkdir ./pkg_backup;
fi

[ ! -z "${debug}" ] && echo "#-- Move e compacta o backup";

pkg_out=`date +%Y%m%d%H%M%S`;
mv ${tmpfile} ./pkg_backup/${pkg_out}.bkp.${iam}.tar

[ ! -z "${debug}" ] && echo "#-- Efetua a atualizacao dos arquivos.";

echo "Atualiza com os novos arquivos...";
tar ${TARPARM}xvf ${outname} | grep -v "intDate\." | grep -v /tmp/note.txt | grep -v /tmp/script.sh;

for file in $( tar ${TARPARM}tvf ${outname} | awk '{ print $NF; }' | grep -v "intDate\." | grep -v /tmp/note.txt | grep -v /tmp/script.sh ) ; do
   [ ! -z "${debug}" ] && echo "#-- Atualiza a data de cada arquivo atualizado para a data do log.";

   touch ${file}
   logger -p user.alert "ATUALIZACAO DE SISTEMA ${file}";
   echo "\"$( date +%d%m%Y )\",\"$( date +%H%M%S )\",\"${iam}\",\"${file}\",\"$( tail -8 /tmp/note.txt | head -1 )\",\"$( tail -5 /tmp/note.txt | head -1 )\",\"$( tail -4 /tmp/note.txt | head -1)\",\"${LOGNAME}\"" >> ./pkg_backup/installReport.$( date +%Y%m ).csv;
done

[ ! -z "${debug}" ] && echo "#-- Verifica script de pos instalacao";
if [ -a /tmp/script.sh ] ; then
   echo -n "Deseja executar um script de pos instalacao ? (s/n) : "
   read conf;

   if [ ${conf} == 's' ] ; then
      bash /tmp/script.sh
   fi
fi

cleanTmp;

exit 0;
#------------------------------

Scripts recomendados

Omelete.bsh

Script para softwares de rede

Beryl sem ATI e Nvidia!

Adiciona imagens ao email

mp3towav


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts