Red Hat Training
A Red Hat training course is available for Red Hat Satellite
Capítulo 8. RPMs
Como parte de instalações automatizadas, os administradores muitas vezes implantarão aplicações personalizadas não fornecidas pela Red Hat, tais como softwares de backup e de monitoramento. Para fazer isso, este software deve estar num pacote como RPM. Um ambiente de RPM pode ser configurado em um sistema rodando Red Hat Enterprise Linux. Deve ser notado que o build system deve conter a mesma versão de pacotes que são usados em sistemas alvo. Isto significa que um sistema Red Hat Enterprise Linux 5 deve ser usado para construir RPMs para o sistema baseado em Red Hat Enterprise Linux 5 e um sistema Red Hat Enterprise Linux 6 para RPMs Red Hat Enterprise Linux 6.
O pacote
rpm-build
deve ser instalado num sistema build como requerimento mínimo. Você poderá também precisar de pacotes adicionais como compiladores e bibliotecas.
Pacotes RPM prontos para produção devem ser assinados com uma chave GPG, que permite usuários verificar a origem e integridade dos pacotes. A frase passe da chave GPG usada para assinar RPMs deve ser conhecida somente a um grupo de administradores de confiança.
Procedimento 8.1. Criando uma chave GPG
Importante
Os comandos seguintes iniciarão a criação de chave GPG e a exportarão num formato adequado para distribuição a sistemas de clientes. A chave criada deveria ser armazenada de forma segura e ter um backup.
- Crie um diretório para criar uma chave:
mkdir -p ~/.gnupg
- Gere um chave em par:
gpg --gen-key
Você precisará selecionar o tipo de chave, o tamanho de chave e por quanto tempo a chave deveria ser válida (pressione enter para aceitar os valores padrões). Você também precisará especificar um nome, comentário e um endereço de email:Real name: rpmbuild Email address: rpmbuild@example.com Comment: this is a comment You selected this USER-ID: "rpmbuild (this is a comment) <rpmbuild@example.com>" Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
Pressione O para aceitar os detalhes e continuar. - Liste todas as chaves com suas impressões digitais:
gpg --list-keys --fingerprint
- Exporte as chaves:
gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
- Importe a chave ao banco de dados RPM para permitir a verificação de origem e integridade de RPM executando
gpg --import
como root em todos os sistemas alvo:rpm --import EXAMPLE-RPM-GPG-KEY
Isto ocorrerá automaticamente durante instalações em clientes, e devem ser rodadas manualmente. - Uma vez que o RPM foi criado, ele pode ser assinado com a chave GPG e enviado (upload) ao canal correto:
rpm --resign package.rpm rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
- Para verificar um pacote RPM, navegue ate o diretório que contém o pacote e execute os seguintes comandos:
rpm –qip package.rpm rpm -K package.rpm
Procedimento 8.2. Construindo RPMs
- Crie uma conta de usuário sem previlégios chamada
rpmbuild
para construção de pacotes. Isto permitirá diversos administradores compartilhar o ambiente de construção e a chave GPG. - No diretório home para o usuário
rpmbuild
,/home/rpmbuild
, crie um arquivo chamado.rpmmacros
:touch /home/rpmbuild/.rpmmacros
- Abra o arquivo
.rpmmacros
em seu editor de texto preferido, e adicione as seguintes linhas. A_gpg_name
deve corresponder com o nome da chave GPG usada para assinar RPMs:%_topdir %(echo $HOME)/rpmbuild %_signature %gpg %_gpg_name rpmbuild <rpmbuild@example.com>
O lista de diretório para o definido diretório de nível superior (/home/rpmbuild/rpmbuild
no exemplo acima) deve ter o mesmo esquema de diretório que está presente sob/usr/src/redhat
.
Exemplo 8.1. Arquivo de Especificação RPM
O seguinte é um exemplo básico de um arquivo de especificação RPM. Quando em construção, deveria ser localizado no diretório
SPECS
sob o _topdir
como definido no arquivo do usuário .rpmmacros
. A fonte correspondente e arquivos de patch devem estar no diretório SOURCES
.
Name: foo Summary: The foo package does foo Version: 1.0 Release: 1 License: GPL Group: Applications/Internet URL: http://www.example.org/ Source0 : foo-1.0.tar.gz Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root Requires: pam BuildPrereq: coreutils %description This package performs the foo operation. %prep %setup -q %build %install mkdir -p %{buildroot}/%{_datadir}/%{name} cp -p foo.spec %{buildroot}/%{_datadir}/%{name} %clean rm -fr %{buildroot} %pre # Add user/group here if needed %post /sbin/chkconfig --add food %preun if [ $1 = 0 ]; then # package is being erased, not upgraded /sbin/service food stop > /dev/null 2>&1 /sbin/chkconfig --del food fi %postun if [ $1 = 0 ]; then # package is being erased # Any needed actions here on uninstalls else # Upgrade /sbin/service food condrestart > /dev/null 2>&1 fi %files %defattr(-,root,root) %{_datadir}/%{name} %changelog * Mon Jun 16 2003 Some One <one@example.com> - fixed the broken frobber (#86434)