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.
- Creare una directory per la creazione della chiave:
mkdir -p ~/.gnupg
- 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. - Elencare tutte le chiavi con le proprie impronte digitali:
gpg --list-keys --fingerprint
- Esportare le chiavi:
gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
- 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. - 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
- 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
- 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. - Nella home directory per l'utente
rpmbuild
,/home/rpmbuild
, creare un file chiamato.rpmmacros
:touch /home/rpmbuild/.rpmmacros
- 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)