Estou criando um pequeno pacote Debian para instalar arquivos de unidade systemd, especificamente *.service
arquivos.
Meu pacote se parece com:
myservice
|
|--debian
|- comapat
|- preinst
|- postinst
|- rules
|- myservice.service
Quando instalo meu pacote, os serviços do systemd são desabilitados automaticamente e não inicializam.
Logo após a instalação, systemctl status myservice
mostra
root@ubuntu-xenial:~# systemctl status myservice
● myservice.service - My Service - echos output and says when it started
Loaded: loaded (/lib/systemd/system/myservice.service; disabled; vendor preset: enabled)
Active: inactive (dead)
No entanto, quando instalo meu pacote sem um postinst
script , os serviços systemd são ativados automaticamente e são iniciados após a instalação.
root@ubuntu-xenial:~# systemctl status myservice
● myservice.service - MyService - echos output and says when it started
Loaded: loaded (/lib/systemd/system/myservice.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-02-09 15:06:36 UTC; 10s ago
Main PID: 5024 (sh)
Tasks: 2
Memory: 172.0K
CPU: 1ms
CGroup: /system.slice/myservice.service
├─5024 /bin/sh -c echo 'myservice.service started' && echo $(date +%s) && sleep infinity
└─5026 sleep infinity
Estou confuso porque meu postinst é "pequeno e burro":
#!/bin/sh -e
# POSTINST script for myservice
set -e
echo "\033[36m HI I'M A POSTINST SCRIPT `date +"%s"` \033[39m"
Por que a presença de um postinst substitui a "ativação e inicialização automáticas" de um serviço systemd?
Que parte do debhelper lida com isso e o que estou perdendo?
Ou o que devo adicionar ao meu postinst
script de manutenção para colocar meus serviços em funcionamento na instalação?
NOTAS: Meu ambiente é uma pequena caixa vagabunda com um provedor de caixa virtual. Estou usando a caixa ubuntu-xenial64 Vagrant . Não tenho certeza se esse ambiente afeta isso.
Você precisa adicionar o
debhelper
espaço reservado ao seupostinst
:Então o seu
postinst
deve se parecerSe você não incluir isso,
debhelper
não adicionará seuspostinst
snippets gerados automaticamente ao seu script de manutenção. Quando você não tempostinst
nenhum, ele apenas gera o script inteiro; mas se você tiver sua própria versão, ela apenas altera o espaço reservado.