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.
  1. Crie um diretório para criar uma chave:
    mkdir -p ~/.gnupg
    
  2. 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.
  3. Liste todas as chaves com suas impressões digitais:
    gpg --list-keys --fingerprint
    
  4. Exporte as chaves:
    gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
    
  5. 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.
  6. 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
  7. 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

  1. 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.
  2. No diretório home para o usuário rpmbuild, /home/rpmbuild, crie um arquivo chamado .rpmmacros:
    touch /home/rpmbuild/.rpmmacros
    
  3. 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)