Script para criação de pacote rpm.
Publicado por Jeferson Alberi da Silva 10/01/2006
[ Hits: 5.847 ]
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 para autenticação Velox Empresarial
Script em shell do artigo: Implementando a segurança em servicos de acesso remoto
Iniciar nova instância do Firefox quando o mesmo não está respondendo
facilitando e organizando a configuracao do mrtg com ipfm
Criação de pasta com senha no Apache
Nenhum comentário foi encontrado.
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
VOL já não é mais como antes? (6)
É normal não gostar de KDE? (12)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









