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?
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!
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 .
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?)
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.
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.
@ 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.
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-tools
tym jest teżincron
program, 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.conf
plik, sugeruję sprawdzić przed zrobieniem tego - czy twój Linux ma obsługę/etc/sysctl.d
katalogu?)źródło
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.
źródło