Creé un paquete deb que instala un servicio.
En nuestros dispositivos integrados, quiero que este paquete habilite automáticamente el servicio. En nuestras estaciones de trabajo de desarrolladores, quiero que los desarrolladores systemctl start foo
manualmente (es un servicio pesado, por lo que solo consume recursos si se ejecuta todo el tiempo en un entorno de escritorio).
¿Cómo puedo solicitar al usuario su decisión durante el apt-get
? ¿paso? ¿Es esa la mejor solución?
Tenga en cuenta que he creado el paquete usando dh_make
y debhelper
y lo habilitó con:
%:
dh [email protected] --with=systemd
override_dh_systemd_enable:
dh_systemd_enable --name=foo foo.service
Respuesta aceptada:
Puede usar ajustes preestablecidos de systemd para determinar si un servicio de systemd se habilitará o deshabilitará de forma predeterminada en el momento de la instalación.
Los ajustes preestablecidos de Debian habilitan de forma predeterminada todos los servicios a medida que se instalan, por lo que solo necesita enviar un ajuste preestablecido a las estaciones de trabajo de desarrollo (el comportamiento predeterminado coincide con lo que desea que suceda en producción), enviando un archivo como /etc/systemd/system-preset/80-foo.preset
que contiene una línea que dice
disable foo.service
Si administra sus estaciones de trabajo de desarrollador mediante un sistema como Puppet, Chef, Ansible, etc., puede usarlos para enviar una configuración preestablecida de systemd, que debería facilitarle la aplicación de la política solo a las estaciones de trabajo de desarrollador y no a la producción. máquinas.
Su paquete .deb debe usar el systemctl preset
comando para habilitar el servicio, ya que ese comando respetará la configuración preestablecida.
Como señalan @JdeBP y @sourcejedi, las macros de Debian en deb-helpers (como dh_systemd_enable
) ya lo hacen, invocan deb-systemd-helper
que usará systemctl preset
de forma predeterminada (con una pequeña advertencia de que si elimina (pero no purga) el paquete y luego lo vuelve a instalar, no habilitará el servicio, incluso si elimina el archivo preestablecido). Consulte este comentario en deb-systemd-helper
's enable
operación:
# We use 'systemctl preset' on the initial installation only. # On upgrade, we manually add the missing symlinks only if the # service already has some links installed. Using 'systemctl # preset' allows administrators and downstreams to alter the # enable policy using systemd-native tools.
Para obtener más información sobre la función systemd de los ajustes preestablecidos, consulte la página man de los ajustes preestablecidos de systemd y del comando systemctl preset
que lo implementa.