Script para criação de pacote rpm.
Publicado por Jeferson Alberi da Silva 10/01/2006
[ Hits: 5.620 ]
Shell script para criação de pacotes rpm de forma simples. Este cript cria o arquivo fonte .tar.gz e arquivo .spec dos arquivos informados. Para maiores informações consulte o help do mesmo.
#!/bin/bash # Jeferson A SILVA # 20/12/2005 # Declara variáveis do script VERSION_SCRIPT="1.0" FTXTTMP="files.txt" FSPECTMP="template.spec" # Caminho do diretório com a estrutura para geração de pacotes rpm. RPMPATH="/usr/src/RPM" SUMMARY="" NAME="" VERSION="" RELEASE="wsb" LICENSE="GPL" GROUP="System WSB" BUILDARCHITECTURES="noarch" BUILDREQUIRES="bash" REQUIRES="bash" PACKAGER="Jeferson A SILVA <jasilva_cwb@yahoo.com.br>" DESCRIPTION="" FILES="" DATE=`LC_TIME= LANG=en date +%a" "%b" "%d" "%Y` Usage(){ echo "$0, version ${VERSION_SCRIPT}" echo "Copyright (C) 2005-2005, Jeferson A SILVA <jasilva_cwb@yahoo.com.br>" echo "" echo "Este programa é um software livre; você pode redistribuilo e/ou modificá-lo" echo "sob os termos da licença GNU conforme publicado pela mesma; versão 2 da licença," echo "ou alguma versão mais antiga." echo "" echo -e "Usage:" echo -e "\t$0 [options]" echo "" echo -e "General Options:" echo -e "\t--summary\t\t- Obrigatório - Sumário do pacote." echo -e "\t--name\t\t\t- Obrigatório - Nome do pacote." echo -e "\t--version\t\t- Obrigatório - Versão do pacote." echo -e "\t--release\t\t- Release do pacote." echo -e "\t--license\t\t- Tipo de licença do pacote (padrão GPL)." echo -e "\t--group\t\t\t- Grupo a qual o pacote pertence (System WSB)." echo -e "\t--buildarchitectures\t- Arquitetura para qual o pacote esta sendo criado (padrão noarch)." echo -e "\t--buildrequires\t\t- Requerimentos para configuração do pacote (padrão apenas o bash)." echo -e "\t--requires\t\t- Requerimento para instalação do pacote (padrão apenas o bash)." echo -e "\t--packager\t\t- Criador do pacote. Composto por nome <e-mail>" echo -e "\t\t\t\t(padrão: Jeferson A SILVA <jasilva_cwb@yahoo.com.br>)." echo -e "\t--description\t\t- Obrigatório - Descrição do pacote." echo -e "\t--files\t\t\t- Lista dos arquivos que deve ser adicionados ao pacte" echo -e "\t\t\t\tse o mesmo não for informado é assumido que o pacote é composto apenas pelos arquivos" echo -e "\t\t\t\tque se encontram no diretório cujo o nome é composto pelos parametro --name --version" echo -e "\t\t\t\tno diretório atual." echo "" echo -e "Example:" echo -e "\t$0 --summary=\"Pacote criado como exemplo\" --name=\"wasabi\" --version=\"1.0\" --description=\"Exemplo de criação de pacote pelo script\"" echo -e "\t$0 --summary=\"Pacote criado como exemplo\" --name=wasabi --version=1.0 --description=\"Exemplo de criação de pacote pelo script\"" echo -e "\t$0 --summary \"Pacote criado como exemplo\" --name wasabi --version 1.0 --description \"Exemplo de criação de pacote pelo script\"" exit 0 } CopyFiles(){ mkdir -p ${PWD}/${NAME}-${VERSION} if [ ! -z "${FILES}" ] then (tar cvf - ${FILES} | tar xvf - -C ${PWD}/${NAME}-${VERSION}) >/dev/null 2>&1 fi } while [ $# -gt 0 ] do case $1 in --summary*) if echo $1 | grep -q '=' >/dev/null then SUMMARY=`echo $1 | sed 's/^--summary=//'` else SUMMARY=$2 shift fi ;; --name*) if echo $1 | grep -q '=' >/dev/null then NAME=`echo $1 | sed 's/^--name=//'` else NAME=$2 shift fi ;; --version*) if echo $1 | grep -q '=' >/dev/null then VERSION=`echo $1 | sed 's/^--version=//'` else VERSION=$2 shift fi ;; --release*) if echo $1 | grep -q '=' >/dev/null then RELEASE=`echo $1 | sed 's/^--release=//'` else RELEASE=$2 shift fi ;; --license*) if echo $1 | grep -q '=' >/dev/null then LICENSE=`echo $1 | sed 's/^--license=//'` else LICENSE=$2 shift fi ;; --group*) if echo $1 | grep -q '=' >/dev/null then GROUP=`echo $1 | sed 's/^--group=//'` else GROUP=$2 shift fi ;; --buildarchitectures*) if echo $1 | grep -q '=' >/dev/null then BUILDARCHITECTURES=`echo $1 | sed 's/^--buildarchitectures=//'` else BUILDARCHITECTURES=$2 shift fi ;; --buildrequires*) if echo $1 | grep -q '=' >/dev/null then BUILDREQUIRES=`echo $1 | sed 's/^--buildrequires=//'` else BUILDREQUIRES=$2 shift fi ;; --requires*) if echo $1 | grep -q '=' >/dev/null then REQUIRES=`echo $1 | sed 's/^--requires=//'` else REQUIRES=$2 shift fi ;; --packager*) if echo $1 | grep -q '=' >/dev/null then PACKAGER=`echo $1 | sed 's/^--packager=//'` else PACKAGER=$2 shift fi ;; --description*) if echo $1 | grep -q '=' >/dev/null then DESCRIPTION=`echo $1 | sed 's/^--description=//'` else DESCRIPTION=$2 shift fi ;; --files*) if echo $1 | grep -q '=' >/dev/null then FILES=`echo $1 | sed 's/^--files=//'` else FILES=$2 shift fi ;; --help|-help|--h|--info|-info) Usage ;; *) echo "Opcao invalida utilizada na funcao $(basename $0) - $1" Usage ;; esac shift done if [ -z "$SUMMARY" ] | [ -z "$NAME" ] | [ -z "$VERSION" ] | [ -z "$DESCRIPTION" ] then Usage exit 0 fi if [ ! -z "${FILES}" ] then CopyFiles fi # Cria o arquivo temporario com a lista dos diretorios e arquivos do pacote cd ${NAME}-${VERSION} tar cvf /dev/null * 1>../$FTXTTMP cd .. # Executa a compactacao do pacote com tar+gzip ".tar.gz" tar zcvf ${NAME}-${VERSION}-${RELEASE}.tar.gz ${NAME}-${VERSION} 1>/dev/null # Cria o arquivo .spec cat > $FSPECTMP <<EOF1 Summary: ${SUMMARY} Name: ${NAME} Version: ${VERSION} Release: ${RELEASE} License: ${LICENSE} Group: ${GROUP} Source: %{name}-%{version}-%{release}.tar.gz BuildArchitectures: ${BUILDARCHITECTURES} BuildRoot: /var/tmp/%{NAME}-%{RELEASE}/ BuildRequires: ${REQUIRES} Requires: ${REQUIRES} Packager: ${PACKAGER} #Comandos para executar antes da instalacao nesta secao que contem instrucoes para #descompactar e preparar os arquivos fonte para construcao/compilacao. %prep #if [ "\$1" = "1" ]; then # echo "antes de instalar pela 1a vez (-i)..." #elif [ "\$1" = "2" ]; then # echo "antes de instar a nova versao (-U)..." #fi %setup -q -n %{name}-%{version} #Descricao do pacote, nesta secao do arquivo spec que se inclui um resumo sobre o que e o #pacote (o que fazem/sao os programas presentes dentro dele). Um arquivo #spec pode ter varias secoes "%description", um para cada lingua em que o #resumo esta, sendo especificado a linguagem com a opcao "-l" %description -l pt_BR ${DESCRIPTION} #Buid nesta secao que contem instrucoes para construir e compilar os arquivos do #programa que sera empacotado, como configure, make. %build #Comandos de instalacao, nesta secao que contem instrucoes para instalar o pacote, #usualmente um make install, so que ao inves de instalar o pacote no sistema o mesmo #deve ser instalado no diretorio apontado por BuildRoot. %install rm -rf \$RPM_BUILD_ROOT mkdir -p \$RPM_BUILD_ROOT EOF1 for LINE in `cat $FTXTTMP` do if [ ! -z `echo $LINE | grep /$` ] ; then echo "install -m 755 -d \$RPM_BUILD_ROOT/`echo $LINE | grep /$`" >> $FSPECTMP elif [ ! -z `echo $LINE | grep -v /$` ] ; then echo "cp -dp $LINE \$RPM_BUILD_ROOT/$LINE" >> $FSPECTMP fi done cat >> $FSPECTMP <<EOF2 #Diretorios e arquivos do pacote sao especificados como arquivos gerados no BuildRoot (os #arquivos executaveis por exemplo) serao instalados no sistema. Nesta secao ficam os #arquivos especificados que serao copiados durante a instalacao do pacote, incluindo #informacoes de permissao dos arquivos. %files %defattr(-,root,root) EOF2 for LINE in `cat $FTXTTMP` do if [ ! -z `echo $LINE | grep /$` ] ; then echo "%dir /`echo $LINE | grep /$`" >> $FSPECTMP elif [ ! -z `echo $LINE | grep -v /$` ] ; then echo "/$LINE" >> $FSPECTMP fi done cat >> $FSPECTMP <<EOF3 #Secao que contem instrucoes para apagar o conteudo do diretorio apontado por BuildRoot, #para permitir que o conteudo de construcoes de pacotes anteriores nao interfiram com a #construcao atual. O padrao e esta secao conter somente a linha "rm -rf %{buildroot}". %clean rm -rf \$RPM_BUILD_ROOT #Comandos para executar depois da instalacao contem instrucoes diversas que sao executadas #apos a instalacao do pacote no sistema (copia dos arquivos). %post #if [ "\$1" = "1" ]; then # echo "depois de instalar pela 1a vez (-i)..." #elif [ "\$1" = "2" ]; then # echo "depois de instalar a nova versao (-U)..." #fi #Comandos para executar antes da desinstalacao %preun #if [ "\$1" = "1" ]; then # echo "antes de remover a versao antiga (-U)..." #elif [ "\$1" = "0" ]; then # echo "antes de remover definitivamente (-e)..." #fi #Comandos para executar após a desinstalacao, contem instrucoes diversas que sao executadas apos uma #desinstalacao do pacote do sistema. Isso nem sempre e o caso de remocao do pacote, muitas vezes e uma #atualizacao, onde a versao antiga e removida e uma nova instalada. %postun #if [ "\$1" = "1" ]; then # echo "depois de remover a versao antiga (-U)..." #elif [ "\$1" = "0" ]; then # echo "depois de remover definitivamente (-e)..." #fi #Historico "changelog" %changelog * ${DATE} ${PACKAGER} ${VERSION}-${RELEASE} - Criacao do pacote EOF3 # Move arquivo .spec e o fonte .tar.gz para suas respectivas pastas mv $FSPECTMP $RPMPATH/SPECS/${NAME}-${VERSION}.spec mv ${NAME}-${VERSION}-${RELEASE}.tar.gz $RPMPATH/SOURCES/${NAME}-${VERSION}-${RELEASE}.tar.gz if [ "$?" = "0" ] then echo "Arquivos copiados:" echo -e "\t$RPMPATH/SPECS/${NAME}-${VERSION}.spec" echo -e "\t$RPMPATH/SOURCES/${NAME}-${VERSION}-${RELEASE}.tar.gz" else echo "Erro na geração do arquivo spec." fi # Remove arquivo temporario rm -rf $FTXTTMP
Backup do banco de dados Postgresql
slackpigs - veja os pacotes que mais ocupam espaço no Slackware
Update no-ip utilizando Shell Script
Obter ip a partir de um NO-IP ou DYNDNS e atualizar o endereço do MUNIN MESTRE em um nó linux.
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta