Notificado quando um arquivo controlado por fantoche será alterado por yum


13

É possível receber uma notificação no console quando um pacote que contém um arquivo controlado por fantoche está prestes a alterar esse arquivo? Ou seja, no yum ao fazer a atualização do yum, é possível injetar um aviso personalizado?

Respostas:


22

O Yum suporta plug-ins, portanto, é totalmente possível escrever um plug-in que leia o manifesto de fantoches em cache e avise quando uma transação substituirá um arquivo controlado por fantoches. Não conheço um plug-in existente que faça isso, mas provavelmente vou escrever apenas um como eu gosto da ideia.

O plug-in verifica todos os pacotes recém-instalados / atualizados / desatualizados, informa quais arquivos gerenciados por fantoches serão substituídos e solicita uma confirmação para isso.

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

O próprio plugin pode ser encontrado no meu repositório de hacks do github .


Atualização de 8 de novembro de 2013:

Como sugerido nos comentários, agora transformei isso em um projeto maior para melhorar a interação entre Yum e Puppet. Você pode encontrá-lo no GitHub .


Isso é adorável. Eu certamente gostaria que ele soubesse ignorar as coisas de% config (noreplace), já que essas não serão realmente substituídas.
Freiheit

Sim, pretendo acrescentar isso e muito mais. Esta questão me deu muitas idéias :)
Dennis Kaarsemaker

Uau ! Você realmente foi além do dever aqui. Eu estou impressionado. Isso é exatamente o que minha pergunta estava tentando resolver. Eu estava pensando em um script de shell, mas isso é muito melhor! Agora, instalei o seu plugin no yum, mas ele não carregará o plugin do fantoche. Alguma idéia do porquê? Eu vejo o arquivo .pyc, mas nenhum arquivo .pyo como rhnplugin e segurança tem
Brian

Deixa pra lá, eu tive que instalar o PyYAML.
18713 Brian

Você pode adicionar uma licença de software?
18713 Brian

2

Sim, é possível, mas não se relaciona com o próprio Boneco.

Os sistemas Linux suportam o mecanismo inotify , que "pode ​​ser usado para monitorar e atuar nos eventos do sistema de arquivos". Além disso, inotify-toolshá também um incronprograma que funciona de maneira semelhante ao cron, mas ele reage aos eventos do sistema de arquivos. Eu acho que você pode usá-lo para ser notificado sobre a alteração de qualquer arquivo.

(BTW, se você quiser assistir o /etc/sysctl.confarquivo, sugiro verificar antes de fazê-lo - o seu Linux tem suporte para o /etc/sysctl.ddiretório?)


0

Não conheço uma maneira de implementar essas notificações. Pode ser possível configurar algo organizando a transação yum, determinando a lista de arquivos de configuração que podem ser afetados e verificando se o fantoche gerencia algum deles.

No entanto, em geral, não é uma boa prática gerenciar um arquivo que será atualizado por um pacote. No caso de arquivos de configuração (use rpm -qlc packagename para ver se estão marcados como tal), se o pacote contiver uma nova versão, ele será salvo como filename.rpmnew. Em seguida, você fica com seus próprios dispositivos para mesclar as alterações necessárias.

Ocorreu um problema em que um arquivo de configuração foi removido pelo fantoche e substituído pelo yum quando o pacote foi atualizado. Isso causou problemas até a próxima execução de marionetes remover o arquivo. Nossa solução alternativa para essa situação foi definir o conteúdo do arquivo "removido" como um comentário para que fique essencialmente vazio. Outra maneira de lidar com isso seria tentar garantir que o Pacote ['a'] -> Arquivo ['/ etc / a'] seja necessário apenas para executar uma marionete.


Tentei encontrar algumas práticas recomendadas no fantoche que diz "não é uma boa prática gerenciar um arquivo que será atualizado por um pacote". Eu gerencio o sysctl.conf, especialmente porque há configurações nesse arquivo que eu preciso para que certos aplicativos sejam executados. Qual é a alternativa então?
Brian

1
É absolutamente bom gerenciar configurações com fantoches que o yum também quer tocar. O RPM geralmente não toca em arquivos de configuração personalizados e, mesmo que isso ocorra, o fantoche restaurará seu conteúdo.
Dennis Kaarsemaker

Os arquivos de configuração serão atualizados apenas pelo RPM / yum se eles não existirem. Não é (geralmente) uma boa prática usar o fantoche para editar outros arquivos no pacote, porque suas alterações podem prejudicar a funcionalidade. Eu acho que teria sido melhor dizer "editar" do que "gerenciar" na minha resposta, pois o gerenciamento pode garantir as permissões adequadas. Se você deseja editar arquivos que não são arquivos de configuração, também deve implementar algum tipo de bloqueio ou exclusão de versão para garantir que os pacotes sejam atualizados sob demanda, não automaticamente. Dessa forma, você pode controlar todo o processo de atualização.
Jdkindy 17/10/2013


@ 0A0D: Obrigado, esse é o comportamento que eu estava falando. Eu gostaria de ter representantes suficientes para comentar o post de Dennis Kaarsemaker - esse é o começo de uma solução elegante. Além disso, os diretórios de configuração ".d" (anotados pelo php-coder) são muito fáceis de implementar no puppet se o pacote os suportar.
Jdkindy 17/10/2013
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.