Red Hat Training

A Red Hat training course is available for Red Hat Satellite

Capitolo 8. RPM

Come parte di installazioni automatizzate gli amministratori spesso implementano applicazioni personalizzate non fornite da Red Hat, come ad esempio software di backup e di monitoraggio. A tale scopo il suddetto software dovrà avere un formato RPM. È possibile impostare un ambiente di compilazione per gli RPM su di un sistema che esegue Red Hat Enterprise Linux. Da notare che il sistema interessato alla compilazione deve avere la stessa versione dei pacchetti usati nei sistemi target. Ciò significa che un sistema Red Hat Enterprise Linux 5 deve essere usato per la compilazione di RPM per sistemi basati su Red Hat Enterprise Linux 5 ed un sistema Red Hat Enterprise Linux 6 per RPM Red Hat Enterprise Linux 6.
Come requisito minimo sarà necessario installare il pacchetto rpm-build sul sistema designato alla compilazione con possibili installazioni, se necessarie, di pacchetti aggiuntivi come compilatori e librerie.
I pacchetti RPM pronti per ambienti di produzione devono essere firmati con una chiave GPG, permettendo così la verifica dell'origine e della loro integrità. La frase d'accesso della chiave GPG usata per la firma degli RPM deve essere conosciuta solo da un gruppo di amministratori fidati.

Procedura 8.1. Creazione di una chiave GPG

Importante

I seguenti comandi inizieranno il processo di creazione della chiave GPG e la esporteranno in un formato idoneo alla distribuzione ai sistemi client. Eseguire il backup della chiave ed archiviarla in una posizione sicura.
  1. Creare una directory per la creazione della chiave:
    mkdir -p ~/.gnupg
    
  2. Generare una coppia di chiavi:
    gpg --gen-key
    
    Scegliere il tipo di chiave, la sua dimensione ed il periodo di validità (premere invia per accettare i valori predefiniti). Specificare altresì un nome, un commento ed un indirizzo 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?
    
    Premere O per accettare le informazioni e continuare.
  3. Elencare tutte le chiavi con le proprie impronte digitali:
    gpg --list-keys --fingerprint
    
  4. Esportare le chiavi:
    gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
    
  5. Per importare la chiave su di un database RPM e svolgere una verifica dell'integrità e dell'origine degli RPM tramite il comando gpg --import come utente root su tutti i sistemi di destinazione:
    rpm --import EXAMPLE-RPM-GPG-KEY
    
    Ciò dovrebbe accadere automaticamente durante le installazioni del client e non deve essere eseguito manualmente.
  6. Una volta creato l'RPM sarà necessario firmarlo con la chiave GPG e caricarlo su di un canale corretto:
    rpm --resign package.rpm
    rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
  7. Per verificare un pacchetto RPM andate alla directory che contiene il pacchetto ed eseguite i seguenti comandi:
    rpm –qip package.rpm
    rpm -K package.rpm

Procedura 8.2. Compilazione degli RPM

  1. Create un account per un utente non privilegiato, rpmbuild, per la compilazione dei pacchetti. Così facendo gli amministratori potranno condividere l'ambiente di compilazione e la chiave GPG.
  2. Nella home directory per l'utente rpmbuild, /home/rpmbuild, creare un file chiamato .rpmmacros:
    touch /home/rpmbuild/.rpmmacros
    
  3. Aprire il file .rpmmacros con l'editor di testo desiderato ed aggiungere le seguenti righe. _gpg_name deve corrispondere al nome per la chiave GPG usata per firmare gli RPM:
    %_topdir            %(echo $HOME)/rpmbuild
    %_signature         %gpg
    %_gpg_name          rpmbuild <rpmbuild@example.com>
    
    L'elenco della directory per la directory di livello superiore (/home/rpmbuild/rpmbuild nell'esempio sopra riportato) deve avere la stessa disposizione presente in /usr/src/redhat.

Esempio 8.1. File di spec RPM

Il seguente è un esempio di base di un file di spec RPM. Durante il processo di compilazione esso deve trovarsi nella directory SPECS nella _topdir come definito dal file .rpmmacros dell'utente, ed i file patch e sorgente corrispondenti dovranno essere nella directory 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)