Powiadomiony, gdy plik kontrolowany przez marionetkę zostanie zmieniony przez yum

13

Czy możliwe jest otrzymanie powiadomienia na konsoli, gdy pakiet zawierający plik kontrolowany przez marionetkę zamierza zmienić ten plik? Oznacza to, że w mniam podczas aktualizacji mum, czy można wprowadzić niestandardowe ostrzeżenie?

Brian
źródło

Odpowiedzi:

22

Yum obsługuje wtyczki, więc jest całkowicie możliwe napisanie wtyczki, która odczytuje buforowany kukiełkowy manifest i ostrzega, kiedy transakcja zastąpi plik kontrolowany przez marionetkę. Nie znam istniejącej wtyczki, która to robi, ale prawdopodobnie napiszę tylko jedną, ponieważ podoba mi się ten pomysł.

Wtyczka sprawdza wszystkie nowo zainstalowane / zaktualizowane / obniżone pakiety, informuje, które pliki zarządzane przez marionetki zostaną zastąpione i prosi o potwierdzenie.

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

Sama wtyczka znajduje się w moim repozytorium hacków github .


Aktualizacja z 8 listopada 2013:

Jak wskazano w komentarzach, teraz przekształciłem to w większy projekt mający na celu poprawę interakcji między Yum a Puppet. Możesz go znaleźć na GitHub .

Dennis Kaarsemaker
źródło
To jest urocze. Na pewno żałuję, że nie zignorował rzeczy% config (noreplace), ponieważ tak naprawdę nie zostaną one nadpisane.
freiheit
Tak, planuję to dodać i wiele więcej. To pytanie dało mi wiele pomysłów :)
Dennis Kaarsemaker
Łał ! Naprawdę wykroczyłeś poza wezwanie do służby. Jestem pod wrażeniem. Właśnie to moje pytanie próbowało rozwiązać. Myślałem o skrypcie powłoki, ale jest o wiele lepszy! Teraz zainstalowałem twoją wtyczkę do yum, ale nie ładuje wtyczki marionetkowej. Masz pomysł, dlaczego? Widzę plik .pyc, ale nie ma pliku .pyo, takiego jak rhnplugin i zabezpieczenia
Brian,
Nieważne, musiałem zainstalować PyYAML.
Brian
Czy możesz dodać licencję na oprogramowanie?
Brian
2

Tak, jest to możliwe, ale nie dotyczy samej Marionetki.

Systemy Linux obsługują mechanizm inotify , który „może być wykorzystywany do monitorowania zdarzeń systemu plików i reagowania na nie”. Poza inotify-toolstym jest też incronprogram, który działa podobnie do crona, ale reaguje na zdarzenia w systemie plików. Myślę, że możesz go użyć do powiadomienia o zmianie dowolnego pliku.

(BTW, jeśli chcesz obejrzeć /etc/sysctl.confplik, sugeruję sprawdzić przed zrobieniem tego - czy twój Linux ma obsługę /etc/sysctl.dkatalogu?)

koder php
źródło
0

Nie znam sposobu na wdrożenie takich powiadomień. Możliwe może być ustawienie czegoś przez zainscenizowanie transakcji yum, określenie listy plików konfiguracyjnych, na które może to mieć wpływ, a następnie sprawdzenie, czy marionetka zarządza którymś z nich.

Jednak ogólnie rzecz biorąc, nie jest dobrą praktyką zarządzanie plikiem, który będzie aktualizowany przez pakiet. W przypadku plików konfiguracyjnych (użyj rpm -qlc nazwa_pakietu, aby sprawdzić, czy są one oznaczone jako takie), jeśli pakiet zawiera nową wersję, zostanie zapisany jako nazwa_pliku.rpmnew. Następnie pozostawiasz swoje własne urządzenia, aby scalić wszelkie potrzebne zmiany.

Wystąpił problem polegający na tym, że plik konfiguracyjny został usunięty przez marionetkę, a następnie zastąpiony przez yum podczas aktualizacji pakietu. Powodowało to problemy do czasu, gdy kolejny bieg marionetek usunął plik. Naszym rozwiązaniem tego problemu było ustawienie zawartości „usuniętego” pliku na komentarz, aby był on zasadniczo pusty. Innym sposobem na poradzenie sobie z tym byłoby próba upewnienia się, że Package ['a'] -> File ['/ etc / a'], tak że potrzebny jest tylko jeden ciąg marionetek.

jdkindy
źródło
Próbowałem znaleźć najlepsze praktyki dotyczące marionetek, które mówią: „zarządzanie dobrymi plikami, które będą aktualizowane przez pakiet, nie jest dobrą praktyką”. Zarządzam sysctl.conf szczególnie dlatego, że w tym pliku znajdują się ustawienia, których potrzebuję do działania niektórych aplikacji. Jaka jest zatem alternatywa?
Brian
1
Absolutnie dobrze jest zarządzać konfiguracjami z marionetką, którą również chcesz dotknąć. RPM zazwyczaj nie dotyka niestandardowych plików konfiguracyjnych, a nawet jeśli tak, marionetka przywróci zawartość.
Dennis Kaarsemaker
Pliki konfiguracyjne zostaną zaktualizowane przez RPM / yum tylko, jeśli nie istnieją. Nie jest (ogólnie) dobrą praktyką używanie lalek do edytowania innych plików w pakiecie, ponieważ twoje zmiany mogą zepsuć funkcjonalność. Myślę, że lepiej byłoby powiedzieć „edytuj” niż „zarządzaj” w mojej odpowiedzi, ponieważ zarządzanie może zapewniać odpowiednie uprawnienia. Jeśli chcesz edytować pliki, które nie są plikami konfiguracyjnymi, powinieneś także wdrożyć blokowanie lub wykluczanie wersji, aby zapewnić aktualizację pakietów na żądanie, a nie automatycznie. W ten sposób możesz kontrolować cały proces aktualizacji.
jdkindy
@ 0A0D: Dzięki, o takim zachowaniu mówiłem. Chciałbym mieć wystarczająco dużo przedstawicieli, aby skomentować post Dennisa Kaarsemakera - to początek eleganckiego rozwiązania. Również katalogi konfiguracji „.d” (zauważone przez kodera php) są bardzo łatwe do zaimplementowania w pacynce, jeśli pakiet je obsługuje.
jdkindy