Как вы, вероятно, знаете, по умолчанию при установке пакета в системе на основе 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
?
На случай, если неясно, я действительно хочу оставить что-либо, связанное с управлением шаблонами, за пределами шаблонов, если это возможно.
источник
Ты можешь сделать:
Я не проверял это с chroot, но это должно работать. Сначала он устанавливает переменную среды RUNLEVEL, поэтому процессы, инициированные apt-get , не будут запускать какие-либо службы, потому что они будут «думать», что система работает в одиночном режиме. Поскольку среда модифицируется так, как это может повлиять на будущие команды, необходимо выйти из оболочки, когда модифицированная среда больше не нужна, это достигается с помощью команды выхода в конце. Там могут быть некоторые (редкие?) Пакеты , которые не будут установлены должным образом в одном режиме (но AFAIK это не должно быть проблемой в большинстве случаев).
источник
export RUNLEVEL=1
важной частью здесь? Что именно это вызывает?rsyslog
это был один из «редких» пакетов, который полностью взорвался при попытке установить этот путь. Тем не менее, это может быть полезно, так что вы можете сохранить повышенный голос :)