Script para criação de pacote rpm.
Publicado por Jeferson Alberi da Silva 10/01/2006
[ Hits: 5.622 ]
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
Script de iniclização do Exim para Funcionamento com MailScanner
Script de backup para Gravador CD-R ou CD-Rw
Cadastro Regras de Controle de Banda - CBQ
Tornando seu Ubuntu uma distro para testes de intrusão
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
UUID da partição efi mudou, multiboot já era...e agora? (0)