Averti quand un fichier contrôlé par marionnette va être modifié par yum
13
Est-il possible de recevoir une notification sur la console lorsqu'un package contenant un fichier contrôlé par marionnette est sur le point de modifier ce fichier? Ce qui signifie, en yum lors de la mise à jour de yum, est-il possible d'injecter un avertissement personnalisé?
Yum prend en charge les plugins, il est donc tout à fait possible d'écrire un plugin qui lit le manifeste de marionnettes mis en cache et avertit lorsqu'une transaction écrasera un fichier contrôlé par des marionnettes. Je ne suis pas au courant d'un plugin existant qui fait cela, mais je vais probablement en écrire un juste moi-même car j'aime l'idée.
Le plugin vérifie tous les packages nouvellement installés / mis à niveau / rétrogradés, vous indique les fichiers gérés par les marionnettes qu'il va écraser et vous demande une confirmation pour le faire.
[root@camel ~]# yum update pam
Loaded plugins: puppet, security
Skipping security plugin, no data
Setting up Update Process
Resolving Dependencies
Skipping security plugin, no data
--> Running transaction check
---> Package pam.i386 0:0.99.6.2-12.el5 set to be updated
---> Package pam.x86_64 0:0.99.6.2-12.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================================================================
Package Arch Version Repository Size
===============================================================================================================================================================
Updating:
pam i386 0.99.6.2-12.el5 base 983 k
pam x86_64 0.99.6.2-12.el5 base 982 k
Transaction Summary
===============================================================================================================================================================
Install 0 Package(s)
Upgrade 2 Package(s)
Total download size: 1.9 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): pam-0.99.6.2-12.el5.x86_64.rpm | 982 kB 00:00
(2/2): pam-0.99.6.2-12.el5.i386.rpm | 983 kB 00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 8.7 MB/s | 1.9 MB 00:00
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/pam.d/system-auth
Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/access.conf
Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/limits.conf
Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/pam.d/system-auth
Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/access.conf
Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/limits.conf
Is this ok [y/N]: n
Aborting
[root@camel ~]# yum update pam
Loaded plugins: puppet, security
Skipping security plugin, no data
Setting up Update Process
Resolving Dependencies
Skipping security plugin, no data
--> Running transaction check
---> Package pam.i386 0:0.99.6.2-12.el5 set to be updated
---> Package pam.x86_64 0:0.99.6.2-12.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================================================================
Package Arch Version Repository Size
===============================================================================================================================================================
Updating:
pam i386 0.99.6.2-12.el5 base 983 k
pam x86_64 0.99.6.2-12.el5 base 982 k
Transaction Summary
===============================================================================================================================================================
Install 0 Package(s)
Upgrade 2 Package(s)
Total size: 1.9 M
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/pam.d/system-auth
Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/access.conf
Installing pam-0.99.6.2-12.el5.i386 overwrites puppet-managed file /etc/security/limits.conf
Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/pam.d/system-auth
Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/access.conf
Installing pam-0.99.6.2-12.el5.x86_64 overwrites puppet-managed file /etc/security/limits.conf
Is this ok [y/N]: y
Updating : pam 1/4
Updating : pam 2/4
Cleanup : pam 3/4
Cleanup : pam 4/4
Updated:
pam.i386 0:0.99.6.2-12.el5 pam.x86_64 0:0.99.6.2-12.el5
Complete!
Comme indiqué dans les commentaires, j'ai maintenant transformé cela en un projet plus vaste pour améliorer l'interaction entre Yum et Puppet. Vous pouvez le trouver sur GitHub .
C'est adorable. Je souhaite vraiment qu'il sache ignorer les choses% config (noreplace), car celles-ci ne seront pas écrasées.
freiheit
Oui, je prévois d'ajouter cela, et bien plus encore. Cette question m'a donné beaucoup d'idées :)
Dennis Kaarsemaker
Hou la la ! Vous avez vraiment dépassé l'appel du devoir ici. Je suis impressionné. C'est exactement ce que ma question tentait de répondre. Je pensais à un script shell mais c'est bien mieux! Maintenant, j'ai installé votre plugin dans yum, mais il ne chargera pas le plugin de marionnette. Une idée pourquoi? Je vois le fichier .pyc, mais aucun fichier .pyo comme rhnplugin et la sécurité n'ont
Brian
Peu importe, j'ai dû installer PyYAML.
Brian
Pouvez-vous ajouter une licence logicielle?
Brian
2
Oui, c'est possible, mais cela ne concerne pas la marionnette elle-même.
Les systèmes Linux prennent en charge le mécanisme inotify qui "peut être utilisé pour surveiller et agir sur les événements du système de fichiers". En outre, inotify-toolsil existe également un incronprogramme qui fonctionne de manière similaire à cron, mais il réagit aux événements du système de fichiers. Je pense que vous pouvez l'utiliser pour être averti de la modification d'un fichier.
(BTW, si vous voulez regarder un /etc/sysctl.conffichier, je suggère de vérifier avant de le faire - votre Linux prend-il en charge le /etc/sysctl.drépertoire?)
Je ne connais aucun moyen de mettre en œuvre de telles notifications. Il peut être possible de configurer quelque chose en organisant la transaction yum, en déterminant la liste des fichiers de configuration qui pourraient être affectés, puis en vérifiant si la marionnette gère l'un d'eux.
Cependant, en général, il n'est pas recommandé de gérer un fichier qui sera mis à jour par un package. Dans le cas des fichiers de configuration (utilisez rpm -qlc nom_package pour voir s'ils sont marqués comme tels), si le package contient une nouvelle version, il est enregistré sous le nom de fichier.rpmnew. Vous êtes ensuite laissé à vos propres appareils pour fusionner les modifications nécessaires.
Nous avons rencontré un problème où un fichier de configuration a été supprimé par marionnette puis remplacé par yum lors de la mise à jour du package. Cela a causé des problèmes jusqu'à ce que la prochaine exécution de marionnettes supprime le fichier. Notre solution de contournement pour cette situation était de définir le contenu du fichier "supprimé" sur un commentaire afin qu'il soit essentiellement vide. Une autre façon de le gérer serait d'essayer de garantir que le package ['a'] -> Fichier ['/ etc / a'] de sorte qu'une seule exécution de marionnettes soit nécessaire.
J'ai essayé de trouver quelques bonnes pratiques sur les marionnettes qui disent "ce n'est pas une bonne pratique de gérer un fichier qui sera mis à jour par un package". Je gère sysctl.conf surtout parce qu'il y a des paramètres dans ce fichier dont j'ai besoin pour que certaines applications s'exécutent. Quelle est alors l'alternative?
Brian
1
C'est très bien de gérer des configs avec des marionnettes que miam veut aussi toucher. RPM ne touchera généralement pas les fichiers de configuration personnalisés, et même si c'est le cas, la marionnette restaurera votre contenu.
Dennis Kaarsemaker
Les fichiers de configuration ne seront mis à jour par RPM / yum que s'ils n'existent pas. Il n'est pas (généralement) recommandé d'utiliser des marionnettes pour modifier d'autres fichiers dans le package, car vos modifications pourraient casser la fonctionnalité. Je suppose qu'il aurait été préférable de dire «modifier» que «gérer» dans ma réponse, car gérer peut garantir des autorisations appropriées. Si vous souhaitez modifier des fichiers qui ne sont pas des fichiers de configuration, vous devez également implémenter une sorte de verrouillage ou d'exclusion de version pour vous assurer que les packages sont mis à jour à la demande, pas automatiquement. De cette façon, vous pouvez contrôler l'ensemble du processus de mise à jour.
@ 0A0D: Merci, c'est le comportement dont je parlais. J'aimerais avoir assez de représentants pour commenter le post de Dennis Kaarsemaker - c'est le début d'une solution élégante. De plus, les répertoires de configuration ".d" (notés par le codeur php) sont très faciles à implémenter en marionnette si le paquet les prend en charge.
Oui, c'est possible, mais cela ne concerne pas la marionnette elle-même.
Les systèmes Linux prennent en charge le mécanisme inotify qui "peut être utilisé pour surveiller et agir sur les événements du système de fichiers". En outre,
inotify-tools
il existe également unincron
programme qui fonctionne de manière similaire à cron, mais il réagit aux événements du système de fichiers. Je pense que vous pouvez l'utiliser pour être averti de la modification d'un fichier.(BTW, si vous voulez regarder un
/etc/sysctl.conf
fichier, je suggère de vérifier avant de le faire - votre Linux prend-il en charge le/etc/sysctl.d
répertoire?)la source
Je ne connais aucun moyen de mettre en œuvre de telles notifications. Il peut être possible de configurer quelque chose en organisant la transaction yum, en déterminant la liste des fichiers de configuration qui pourraient être affectés, puis en vérifiant si la marionnette gère l'un d'eux.
Cependant, en général, il n'est pas recommandé de gérer un fichier qui sera mis à jour par un package. Dans le cas des fichiers de configuration (utilisez rpm -qlc nom_package pour voir s'ils sont marqués comme tels), si le package contient une nouvelle version, il est enregistré sous le nom de fichier.rpmnew. Vous êtes ensuite laissé à vos propres appareils pour fusionner les modifications nécessaires.
Nous avons rencontré un problème où un fichier de configuration a été supprimé par marionnette puis remplacé par yum lors de la mise à jour du package. Cela a causé des problèmes jusqu'à ce que la prochaine exécution de marionnettes supprime le fichier. Notre solution de contournement pour cette situation était de définir le contenu du fichier "supprimé" sur un commentaire afin qu'il soit essentiellement vide. Une autre façon de le gérer serait d'essayer de garantir que le package ['a'] -> Fichier ['/ etc / a'] de sorte qu'une seule exécution de marionnettes soit nécessaire.
la source