Как вы, вероятно, знаете, по умолчанию при установке пакета в системе на основе Debian или Ubuntu, если пакет содержит службу, эта служба обычно включается и запускается автоматически при установке пакета.
Это проблема для меня.
Я обнаружил, что мне нужно управлять шаблонами для создания контейнеров LXC. Существует несколько контейнеров, каждый из которых соответствует выпуску Debian или Ubuntu. (Существуют также контейнеры на основе Red Hat, но они здесь не актуальны.)
/var/lib/libvirt/filesystems/debian6_template
/var/lib/libvirt/filesystems/debian7_template
/var/lib/libvirt/filesystems/ubuntu1004_template
/var/lib/libvirt/filesystems/ubuntu1204_template
Иногда я обнаруживаю, что в шаблонах отсутствует пакет или требуется какое-то другое изменение, поэтому я добавлю в них хром для установки пакета. К сожалению, когда я это делаю, у меня запускается несколько копий службы пакета!
В качестве примера я обнаружил, что в шаблонах нет демона syslog, поэтому я установил его:
for template in /var/lib/libvirt/filesystems/{debian,ubuntu}*_template; do
chroot $template apt-get install rsyslog
done
И быстро запустил четыре запущенных копии rsyslog. Не говоря уже о двух экземплярах exim4. К сожалению!
Я где-то читал (хотя я не могу найти это снова сейчас), что он не должен запускать службы при запуске в chroot, но это явно не происходит здесь.
Один потенциально жизнеспособный неприятный взлом требует временной замены различных команд, которые фактически запускают службы, таких как start-stop-daemon
и initctl
, хотя это намного больше работы, чем я действительно хотел сделать. Если у меня нет другого выбора, хотя ...
Идеальным решением здесь было бы для систем на основе Debian прекратить делать это дерьмо, но если это не удастся, возможно, для скрытой или недокументированной опции командной строки для apt-get
?
На случай, если неясно, я действительно хочу оставить что-либо, связанное с управлением шаблонами, за пределами шаблонов, если это возможно.