Script para criação de pacote rpm.
Publicado por Jeferson Alberi da Silva 10/01/2006
[ Hits: 5.460 ]
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 para limpar os caches do proxy (squid)
Instalação do Microsoft Edge no Linux
Nenhum comentário foi encontrado.
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
E a guerra contra bots continua
Tradução do artigo do filósofo Gottfried Wilhelm Leibniz sobre o sistema binário
Conheça o firewall OpenGFW, uma implementação do (Great Firewall of China).
Instalando o FreeOffice no LMDE 6
Anki: Remover Tags de Estilo HTML de Todas as Cartas
Colocando uma opção de redimensionamento de imagem no menu de contexto do KDE
Não consigo acessar os modos de desempenho (3)
Ubuntu — tentando iniciar o windows? (0)
[Shell Script] Script para desinstalar pacotes desnecessários no OpenSuse
[Shell Script] Script para criar certificados de forma automatizada no OpenVpn
[Shell Script] Conversor de vídeo com opção de legenda
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba