Notificado cuando yum va a cambiar un archivo controlado por títere

13

¿Es posible recibir una notificación en la consola cuando un paquete que contiene un archivo controlado por puppet está a punto de cambiar ese archivo? Es decir, en yum cuando se realiza la actualización de yum, ¿es posible inyectar una advertencia personalizada?

Brian
fuente

Respuestas:

22

Yum admite complementos, por lo que es completamente posible escribir un complemento que lea el manifiesto de la marioneta en caché y advierta cuando una transacción sobrescribirá un archivo controlado por la marioneta. No estoy al tanto de un complemento existente que haga esto, pero probablemente escribiré uno solo, ya que me gusta la idea.

El complemento verifica todos los paquetes recién instalados / actualizados / degradados, le indica qué archivos administrados por títeres sobrescribirá y solicita una confirmación para hacerlo.

    [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!

El complemento en sí se puede encontrar en mi repositorio de hacks github .


Actualización del 8 de noviembre de 2013:

Como se insinuó en los comentarios, ahora he convertido esto en un proyecto más grande para mejorar la interacción entre Yum y Puppet. Lo puedes encontrar en GitHub .

Dennis Kaarsemaker
fuente
Esto es adorable. Sin embargo, desearía que supiera ignorar las cosas% config (noreplace), ya que en realidad no se sobrescribirán.
Freiheit
Sí, planeo agregar eso, y mucho más. Esta pregunta me dio muchas ideas :)
Dennis Kaarsemaker
Guauu ! Realmente fuiste más allá del llamado del deber aquí. Estoy impresionado. Esto es exactamente lo que mi pregunta estaba tratando de abordar. Estaba pensando en un script de shell, ¡pero esto es mucho mejor! Ahora, instalé su complemento en yum, pero no cargará el complemento de títeres. ¿Alguna idea de por qué? Veo el archivo .pyc, pero ningún archivo .pyo como rhnplugin y security tienen
Brian
No importa, tuve que instalar PyYAML.
Brian
¿Se puede agregar una licencia de software?
Brian
2

Sí, es posible pero no se relaciona con el títere en sí.

Los sistemas Linux tienen soporte para el mecanismo de inotificación que "puede usarse para monitorear y actuar sobre eventos del sistema de archivos". Además, inotify-toolstambién hay un incronprograma que funciona de manera similar a cron pero reacciona a los eventos del sistema de archivos. Creo que puede usarlo para recibir notificaciones sobre el cambio de cualquier archivo.

(Por cierto, si desea ver el /etc/sysctl.confarchivo, le sugiero que compruebe antes de hacerlo: ¿su Linux tiene soporte para el /etc/sysctl.ddirectorio?)

php-codificador
fuente
0

No sé de una manera de implementar tales notificaciones. Es posible configurar algo organizando la transacción yum, determinando la lista de archivos de configuración que podrían verse afectados y luego verificando si Puppet administra alguno de ellos.

Sin embargo, en general, no es una buena práctica administrar un archivo que se actualizará mediante un paquete. En el caso de los archivos de configuración (use rpm -qlc packagename para ver si están marcados como tales), si el paquete contiene una nueva versión, se guarda como filename.rpmnew. Luego se le deja en sus propios dispositivos para combinar los cambios necesarios.

Nos encontramos con un problema en el que Puppet eliminaba un archivo de configuración y luego lo reemplazaba por yum cuando se actualizaba el paquete. Esto causó problemas hasta que la siguiente ejecución de la marioneta eliminó el archivo. Nuestra solución para esa situación fue establecer el contenido del archivo "eliminado" en un comentario para que esté esencialmente vacío. Otra forma de manejarlo sería intentar asegurar que Package ['a'] -> File ['/ etc / a'] de modo que solo se necesite una ejecución de títeres.

jdkindy
fuente
Traté de encontrar algunas mejores prácticas en títeres que dicen "no es una buena práctica administrar un archivo que será actualizado por un paquete". Administro sysctl.conf, especialmente porque hay configuraciones en ese archivo que necesito para que se ejecuten ciertas aplicaciones. ¿Cuál es la alternativa entonces?
Brian
1
Está absolutamente bien administrar configuraciones con marionetas que yum también quiere tocar. RPM generalmente no tocará archivos de configuración personalizados, e incluso si lo hace, Puppet restaurará su contenido.
Dennis Kaarsemaker
Los archivos de configuración solo serán actualizados por RPM / yum si no existen. No es (generalmente) una buena práctica usar Puppet para editar otros archivos en el paquete, ya que sus cambios podrían romper la funcionalidad. Supongo que hubiera sido mejor decir "editar" que "administrar" en mi respuesta, ya que la gestión puede garantizar los permisos adecuados. Si desea editar archivos que no son archivos de configuración, también debe implementar algún tipo de bloqueo o exclusión de versiones para asegurarse de que los paquetes se actualicen a pedido, no automáticamente. De esa manera puede controlar todo el proceso de actualización.
jdkindy
@ 0A0D: Gracias, ese es el comportamiento del que estaba hablando. Desearía tener suficiente representante para comentar sobre la publicación de Dennis Kaarsemaker, ese es el comienzo de una solución elegante. Además, los directorios de configuración ".d" (señalados por php-coder) son muy fáciles de implementar en puppet si el paquete los admite.
jdkindy