Red Hat Training

A Red Hat training course is available for Red Hat Satellite

Capítulo 3. Criando Pacotes Personalizados

Existem diversas tarefas que podem não funcionar ao criar pacotes de software. Este capítulo traz uma visão geral da criação de pacotes a serem entregues pela Red Hat Network. Os tópicos abordados incluem por que usar o RPM, como criar pacotes para a RHN e como assinar pacotes adequadamente.

3.1. Criando pacotes para a Red Hat Network

A Red Hat Network usa a tecnologia Administrador de Pacotes RPM (RPM Package Manager, RPM) para determinar quais softwares devem ser adicionados e atualizados em cada sistema cliente. Os pacotes obtidos pela Red Hat Network geralmente têm o formato RPM. No entanto, também são disponibilizadas imagens ISO inteiras através da aba Software no site da Red Hat Network, mas não para as instalações RHN Satellite Server. Se o seu Satellite tem o suporte ao Solaris habilitado, você pode usar o RHN Push para fazer o upload dos pacotes Solaris aos canais personalizados usados por clientes Solaris.
RPM é uma ferramenta que oferece aos usuários um método simples para instalação, desinstalação, atualização e verificação de pacotes de software. Também permite aos desenvolvedores empacotar o código fonte e versões compiladas de um programa para outros desenvolvedores e usuários finais.

3.1.1. Benefícios do RPM

O RPM oferece as seguintes vantagens:
Atualizações Fáceis
Usando o RPM, você pode atualizar componentes de um sistema separadamente sem precisar reinstalar completamente. Quando a Red Hat lança uma nova versão do Red Hat Enterprise Linux, não é necessário que os usuários o reinstalem para atualizá-lo. O RPM permite atualizações inteligentes, totalmente automatizadas e disponibilizadas em seu sistema. Os arquivos de configuração em pacotes são preservados durante as atualizações de modo que os usuários não percam suas configurações personalizadas. Não há necessidade de arquivos especiais para a atualização de um pacote porque o mesmo arquivo RPM é usado para instalar e atualizar o pacote.
Busca de Pacotes
O RPM provém opções de busca que permitem procurar no banco de dados inteiro por todos os pacotes ou apenas por determinados arquivos. Você também pode facilmente descobrir a qual pacote um arquivo pertence e de onde o pacote originou. Os arquivos contidos no pacote estão num arquivo comprimido, com um cabeçalho binário personalizado contendo informações sobre o pacote e seu conteúdo. O RPM faz uma busca simples e rápida nos cabeçalhos.
Verificação do Sistema
Um outro recurso permite a verificação de pacotes. Se você está preocupado com um arquivo relacionado à um pacote removido, verifique o estado dos arquivos providos por este pacote. A verificação o notifica sobre quaisquer anomalias. Se houver erros, você pode reinstalar os arquivos facilmente. Os arquivos de configuração modificados são preservados durante a instalação.
Recursos do Pristine
O objetivo principal da criação do RPM é permitir o uso dos recursos do software original, conforme distribuído pelos seus autores originais. Com o RPM, os recursos do original podem ser empacotados junto a quaisquer reparos (patches) que foram usados, além das instruções completas para a construção (build). Esta é uma grande vantagem por diversos motivos. Por exemplo: se uma nova versão de um programa é lançada, não é necessário começar do zero para compilá-la. Você pode observar o patch para ver o que precisa fazer. Todos os defaults e alterações já compiladas feitas para que o software seja criado apropriadamente são facilmente visíveis usando esta técnica.
Manter os recursos originais pode parecer importante somente a desenvolvedores, porém resulta num software de melhor qualidade para usuários finais também.

3.1.2. Regras do RPM da RHN

Uma vantagem do RPM é sua habilidade em definir as dependências e identificar os conflitos com acuracidade. A Red Hat Network baseia-se neste aspecto do RPM, oferecendo um ambiente automatizado, ou seja, nenhuma intervenção manual pode ocorrer durante a instalação de um pacote. Sendo assim, ao criar RPMs para distribuir através da Red Hat Network, é imprescindível seguir estas regras:
  1. Entenda o RPM. É essencial ter um conhecimento fundamental dos principais recursos do RPM para criar pacotes apropriadamente. Para mais informações sobre o RPM, comece pelos seguintes recursos:
  2. Ao criar um RPM para um canal filho, crie o pacote numa nova instalação do Red Hat Enterprise Linux com a mesma versão do canal base do filho. Mas antes, certifique-se de aplicar todas as atualizações pela Red Hat Network.
  3. O pacote RPM deve instalar sem usar as opções --force ou --nodeps. Se você não puder instalar um RPM de forma limpa no seu sistema build, a Red Hat Network não poderá instalá-lo num sistema.
  4. O nome do pacote RPM deve ter o formato NVR (nome, versão, lançamento) e deve conter a arquitetura do pacote. O formato apropriado é nome-versão-lançamento.arq.rpm. Por exemplo: um nome válido para um pacote RPM é nomepacote-0.84-1.i386.rpm, onde o nome é nomepacote, a versão é 0.84, lançamento 1 e a arquitetura é i386.
  5. O pacote RPM deve ser assinado pelo seu mantenedor. Pacotes não-assinados podem ser distribuídos pela Red Hat Network, mas o Red Hat Update Agent (up2date) deve ser forçado a aceitá-los. É altamente recomendável assinar pacotes; veja mais detalhes na Seção 3.2, “Assinaturas Digitais dos Pacotes RHN”
  6. Se o pacote for alterado de alguma forma, inclusive na assinatura ou recompilação, a versão ou lançamento deve ser incrementalmente aumentado. Ou seja, o NVRA (incluindo arquitetura) de cada RPM distribuído através da RHN deve corresponder a um único build para evitar ambiguidades.
  7. Nenhum pacote RPM pode se tornar obsoleto.
  8. Se um pacote é dividido em pacotes distintos, seja muito cuidadoso com as dependências. Não divida um pacote existente, a não ser que haja uma boa razão para tanto.
  9. Nenhum pacote pode basear-se na pré-instalação, pós-instalação, pré-desinstalação, ou pós-desinstalação interativas. Se o pacote requer intervenção direta do usuário, não funcionará na Red Hat Network.
  10. Nenhum script de pré-instalação, pós-instalação, pré-desinstalação e pós-desinstalação deve gravar nada no stderr ou stdout. Redirecione as mensagens para /dev/null se não forem necessárias. Caso contrário, salve-as num arquivo.
  11. Quando criar o arquivo de especificações, use as definições do grupo em /usr/share/doc/rpm-<versão>/GRUPOS. Se não há nenhuma ocorrência exata, selecione a próxima ocorrência que achar melhor.
  12. Use a funcionalidade de dependência do RPM para garantir que o programa rode após instalado.

Importante

Não crie um RPM armazenando arquivos e então desarmazenando-os no script de pós-instalação. Isso elimina o propósito do RPM.
Se os arquivos do armazenamento não forem inclusos na lista, não serão verificados ou examinados em busca de conflitos. Na grande maioria dos casos, o próprio RPM pode empacotar e desempacotar arquivos mais efetivamente. Por exemplo: não crie arquivos num %post que você não limpar numa seção %postun.