2013-02-07 2 views
1

Je travaille sur la construction d'un pacakge rpm cependant j'ai remarqué ce scénario. Quand mes scripts rpm échouent, le RPM est toujours considéré comme installé dans mon système. Je pensais ajouter dans la logique de nettoyage où si une erreur est détectée dans mes scripts rpm, je peux appeler un 'rpm -e' dans mon code et désinstaller le script. Cependant, il semble un peu kludgy. Existe-t-il une manière plus propre de s'assurer que le rpm est désinstallé si le script échoue?rpm paquet échec, paquet encore installé

Merci!

+0

Pouvez-vous nous donner un exemple dans votre fichier de spécifications? Je suppose que c'est dans la section% post de votre fichier spec? Pourquoi ne pas simplement le mettre dans la section% pre, et si le script échoue, il se ferme? – Forrest

+0

Je le fais dans le% post parce que j'ai besoin d'accéder à certains fichiers qui sont seulement disponibles après l'installation du paquet. Si quelque chose dans l'étape% post échoue, le script se termine et imprime une erreur mais le rpm est toujours considéré comme installé quand je fais un "rpm -qa | grep 'nomdupaquet'". Je pensais ajouter de la logique au script pour désinstaller manuellement le paquet en cours si le script échoue. (Aussi dans la section% post). Serait-ce un bon moyen de le faire? – user459811

+1

Comme la réponse d'Aaron dit que ça ne marchera pas, vous devriez regarder migrer n'importe quel code vers la section% post plutôt que de le faire exécuter un script. – Forrest

Répondre

2

Vous ne pouvez pas. Soit %pre échoue et il n'est pas installé, ou vous êtes installé. Vous ne pouvez pas appeler rpm -e car la base de données RPM est verrouillée pour votre transaction. Si quelque chose échoue, je vous recommande d'écrire au STDERR et de vous assurer que vous [re] exécutez chkconfig pour désactiver votre service afin qu'il n'essaie pas de redémarrer la prochaine fois qu'ils redémarrent.

Questions connexes