Red Hat Training

A Red Hat training course is available for Red Hat Satellite

Chapitre 8. RPM

Les administrateurs déploieront souvent des applications personnalisées faisant partie d'installations automatisées, qui ne sont pas fournies par Red Hat, comme des logiciels de sauvegarde et de monitoring. Pour ce faire, le logiciel en question doit être mis sous paquetage de type RPM. Un environnement de construction RPM peut être installé sur un système fonctionnant sous Red Hat Enterprise Linux. Remarquez que le système de construction doit contenir la même version de paquetages que celle utilisée dans les systèmes cibles. Cela signifie qu'un système Red Hat Enterprise Linux 5 doit être utilisé pour construire des RPM pour des systèmes basés sur Red Hat Enterprise Linux 5, et un système Red Hat Enterprise Linux 6 pour des RPM Red Hat Enterprise Linux 6.
Le paquetage rpm-build doit être installé sur le système de construction comme prérequis minimum. Vous pourriez aussi nécessiter des paquetages supplémentaires, comme des compileurs et des bibliothèques.
Les paquetages RPM prêts à la production devraient être signés avec une clé GPG, qui permet aux utilisateurs de vérifier l'origine et l'intégrité des paquetages. La phrase de passe de la clé GPG utilisée pour signer les RPM ne devrait être connue que par un groupe d'administrateurs de confiance.

Procédure 8.1. Créer une clé GPG

Important

Les commandes suivantes initieront la création d'une clé GPG et l'exporteront sous un format convenable pour une distribution aux systèmes client. La clé créée devrait être stockée de manière sûree et une copie de sauvegarde devrait être effectuée.
  1. Créez un répertoire pour la création de la clé :
    mkdir -p ~/.gnupg
    
  2. Générez la paire de clés :
    gpg --gen-key
    
    Vous devrez sélectionner le type de clé, la taille de la clé et pour combien de temps celle-ci devrait être valide (appuyez sur Entrée pour accepter les valeurs par défaut). Vous devrez aussi spécifier un nom, un commentaire et une adresse électronique :
    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?
    
    Appuyez sur O pour accepter les détails et continuer.
  3. Répertoriez toutes les clés avec leurs empreintes :
    gpg --list-keys --fingerprint
    
  4. Exportez les clés :
    gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
    
  5. Importez la clé sur la base de données RPM pour permettre une vérification de l'origine et de l'intégrité RPM en exécutant gpg --import en tant que super-utilisateur (root) sur tous les systèmes cibles :
    rpm --import EXAMPLE-RPM-GPG-KEY
    
    Ceci se produira automatiquement pendant des installations de clients et devra être exécuté manuellement.
  6. Une fois qu'un RPM a été créé, il peut être signé avec la clé GPG et téléchargé sur le correct canal :
    rpm --resign package.rpm
    rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
  7. Pour vérifier un paquetage RPM, rendez-vous sur le répertoire contenant le paquetage et exécutez les commandes suivantes :
    rpm –qip package.rpm
    rpm -K package.rpm

Procédure 8.2. Construire des RPM

  1. Créez un compte utilisateur non-privilégié nommé rpmbuild pour construire des paquetages. Ceci permettra à plusieurs administrateurs de partager l'environnement de construction et la clé GPG.
  2. Dans le répertoire d'accueil de l'utilisateur rpmbuild, /home/rpmbuild, créez un fichier nommé .rpmmacros :
    touch /home/rpmbuild/.rpmmacros
    
  3. Ouvrez le fichier .rpmmacros dans votre éditeur de texte préféré et ajoutez les lignes suivantes. _gpg_name doit correspondre au nom de la clé GPG utilisé pour la signature des RPM :
    %_topdir            %(echo $HOME)/rpmbuild
    %_signature         %gpg
    %_gpg_name          rpmbuild <rpmbuild@example.com>
    
    La liste de répertoires du répertoire du niveau le plus haut défini (dans l'exemple ci-dessus, /home/rpmbuild/rpmbuild) doit posséder la même structure de répertoires que celle présente sous /usr/src/redhat.

Exemple 8.1. Fichier de spécifications RPM

Ci-dessous figure un exemple de base d'un fichier de spécifications RPM. Lors de sa construction, il devrait se trouver dans le répertoire SPECS sous _topdir, comme définit dans le fichier .rpmmacros de l'utilisateur. Les fichiers source et correctif correspondants devraient se trouver dans le répertoire 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)