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é?

Brian
la source

Réponses:

22

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!

Le plugin lui-même peut être trouvé dans mon dépôt de hacks github .


Mise à jour du 8 novembre 2013:

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 .

Dennis Kaarsemaker
la source
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?)

php-coder
la source
0

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.

jdkindy
la source
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.
jdkindy
@ 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.
jdkindy