2011-09-13 19 views
25

Sto aggiornando il nostro progetto RPM. Il problema è quando eseguo l'aggiornamento da projectname-1.0-0 a projectname-1.0-1, prima installa il nuovo progetto e disinstalla il vecchio progetto, che, nella vista generale, rimuove completamente il mio progetto. Ho usato l'opzione "vv" durante l'aggiornamento e l'output ha mostrato che la disinstallazione viene eseguita dopo l'installazione.RPM disinstalla l'RPM

Qualcuno può aiutare con questo problema. C'è qualcosa che dovrei cambiare in particolare nelle specifiche RPM o rpmbuild?

risposta

5

Sì. Durante l'installazione di rpm, verranno chiamati% install e% post script. Al termine dell'installazione, verranno chiamati gli script% preun e% postun per disinstallare la versione precedente di rpm. Se non gestiti correttamente, questi script% preun e% postun possono manipolare le modifiche apportate da% install e% post script.

Il numero di giri imposta un argomento $ 1 con valori appropriati per distinguere il numero di versioni di rpm installate. Durante la nuova installazione di projectname-1.0-0,% install e% post script verranno chiamati con $ 1 impostato su 1 che indica che questa è l'unica versione attiva. Quando si esegue l'upgrade a projectname-1.0-1,% install e% post script verranno chiamati con $ 1 impostato su 2. Dopodiché, gli script% preun e% postun verranno chiamati con $ 1 impostato su 1 in modo da ripulire il nome del progetto -1.0-0. Pertanto, scrivendo il file spec basato sul valore $ 1, possiamo gestire gli aggiornamenti in modo efficace.

+0

'% install' non è stato eseguito durante l'installazione RPM ma durante * * accumulo (sì, il nome può essere piuttosto fuorviante). Penso che tu intenda "% pre". –

56

Sì, quando si verifica un aggiornamento RPM, prima installa la nuova versione del pacchetto e quindi disinstalla la versione precedente del pacchetto. Vengono rimossi solo i file del vecchio pacchetto. Ma i tuoi script (vale a dire% pre,% post,% preun,% postun) devono sapere se stanno gestendo un aggiornamento o semplicemente una semplice installazione o disinstallazione.

Il comando rpm passerà un argomento ai propri script, ovvero $ 1, che è un conteggio del numero di versioni del pacchetto installato. La tabella seguente (dalla RedHat RPM Guide di Eric Foster-Johnston) fornisce un campione di valori possibili.

Install the first time:   1 
Upgrade:       2 or higher 
           (depending on the number of versions installed) 
Remove last version of package: 0 

Quindi, nel tuo% preun, probabilmente vuoi controllare se "$ 1 = 0" prima di rimuovere qualsiasi servizio.

Per ulteriori informazioni (e un tavolo migliore) si veda: http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html

+1

Cosa succede se hai già il pacchetto 1.0.0 in produzione e non puoi modificare il suo preun o postun e fanno la cosa sbagliata? Come in override, cos'è il pacchetto 1.0.1 appena installato. – DavidG

+0

RPM ha un flag '--noscripts' per impedire l'esecuzione di script pre o post. Non sei sicuro di cosa sia, se non altro, l'equivalente di yum. –

4

quando si aggiorna un pacchetto RPM, gli script vengono eseguiti in seguente ordine:

1. %Pre of new package 
2. %Post of new package 
3. %Preun of old package 
4. %Postun of old package 

se l'installazione è fresco o aggiornamento, ci è un argomento passato a ogni script che rappresenta il numero di RPM installati dello stesso pacchetto con versioni differenti. Per gli script di post pre & sarà 1 in caso di prima installazione. Per gli script postun & sarà 0 per l'ultima disinstallazione.

Ciò che potrebbe accadere nel tuo caso è che gli script preun o postun potrebbero eliminare file utili per il nuovo pacchetto. Non è necessario preoccuparsi della cancellazione manuale dei file negli script postun, sarà gestito in modo intelligente come RPM stesso.

ref: Upgrading & uninstalling

Problemi correlati