postinst impede que o arquivo da unidade systemd seja iniciado automaticamente na instalação

1

Estou criando um pequeno pacote Debian para instalar arquivos unitários do systemd, especificamente *.service files.

Meu pacote se parece com:

myservice
      | 
      |--debian
            |- comapat
            |- preinst
            |- postinst
            |- rules
            |- myservice.service

Quando eu instalo meu pacote, os serviços do systemd são desativados automaticamente e não são iniciados.

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 eu instalo meu pacote sem um postinst script , os serviços do systemd são ativados automaticamente e iniciam 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 intera
set -e

echo "3[36m HI I'M A POSTINST SCRIPT 'date +"%s"' 3[39m"

Por que a presença de um postinst sobrescreve a "habilitação e início automáticos" de um serviço systemd?

Que parte do debhelper lida com isso e o que estou perdendo?

Ou o que devo adicionar ao meu script postinst maintainer para que meus serviços sejam instalados e executados na instalação?

NOTAS: Meu ambiente é uma pequena caixa vagabunda com um provedor de caixa virtual. Estou usando a caixa Vagrant do ubuntu-xenial64 . Não tenho certeza se esse ambiente afeta isso.

    
por Wimateeka 09.02.2018 / 16:41

1 resposta

4

Você precisa adicionar o marcador de posição debhelper ao seu postinst :

#DEBHELPER#

Então, seu postinst deve ser parecido com

#!/bin/sh
# POSTINST script for intera
set -e

echo "3[36m HI I'M A POSTINST SCRIPT 'date +"%s"' 3[39m"

#DEBHELPER#

exit 0

Se você não incluir isso, debhelper não adicionará seus postinst snippets gerados automaticamente ao script do mantenedor. Quando você não tem um postinst , ele gera o script inteiro. mas se você tiver sua própria versão, ela apenas alterará o espaço reservado.

    
por 09.02.2018 / 16:59