Script para criação de pacote rpm.
Publicado por Jeferson Alberi da Silva 10/01/2006
[ Hits: 5.896 ]
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
sync2test - sincroniza arquivos do subversion
Como capturar senhas de outros usuários
Script p/ instalar o modem pctel onboard
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Assisti Avatar 3: Fogo e Cinzas (4)
Conky, alerta de temperatura alta (11)









