Jak zapewne wiesz, domyślnie podczas instalowania pakietu w systemie opartym na Debianie lub Ubuntu, jeśli pakiet zawiera usługę, usługa ta będzie na ogół włączona i uruchomiona automatycznie podczas instalacji pakietu.
To dla mnie problem.
Odkryłem, że muszę zarządzać szablonami do budowania kontenerów LXC. Istnieje kilka kontenerów, każdy odpowiadający wydaniu Debian lub Ubuntu. (Istnieją również pojemniki na bazie Red Hat, ale nie są one tutaj istotne).
/var/lib/libvirt/filesystems/debian6_template
/var/lib/libvirt/filesystems/debian7_template
/var/lib/libvirt/filesystems/ubuntu1004_template
/var/lib/libvirt/filesystems/ubuntu1204_template
Czasami okaże się, że szablony mają brakujący pakiet lub potrzebuję jakiejś innej zmiany, więc chrootuję się w nich, aby zainstalować pakiet. Niestety, kiedy to robię, kończę z uruchomionymi kilkoma kopiami usługi pakietu!
Na przykład okazało się, że szablony nie mają demona syslog, więc zainstalowałem jeden:
for template in /var/lib/libvirt/filesystems/{debian,ubuntu}*_template; do
chroot $template apt-get install rsyslog
done
I natychmiast skończyły się cztery uruchomione rsyslog. Nie wspominając o dwóch kopiach exim4. Ups!
Czytałem gdzieś (choć już nie mogę go ponownie znaleźć), że nie powinno uruchamiać usług, gdy działa w chroot, ale najwyraźniej tak się nie dzieje.
Jeden potencjalnie realny paskudny hack wymaga tymczasowego zastąpienia różnych poleceń, które faktycznie uruchamiają usługi, takich jak start-stop-daemon
i initctl
chociaż jest to o wiele więcej pracy, niż naprawdę chciałem zrobić. Jeśli nie mam innego wyboru ...
Idealnym rozwiązaniem byłoby, gdyby systemy oparte na Debianie przestały robić to badziewie, ale jeśli tego nie zrobi, być może niejasna lub nieudokumentowana opcja wiersza poleceń apt-get
?
W przypadku, gdy nie było to jasne, naprawdę chcę zachować wszystko, co związane z zarządzaniem szablonami poza szablonami, jeśli to możliwe.