Método Preferred / Idiomatic para ativar um systemd.service a partir de uma instalação de pacote Debian

4

Eu tenho um pacote Debian customizado que eu construí para o nosso software que cria um serviço systemd. Qual é a maneira preferida / idiomática de ter a instalação do referido pacote ativar / iniciar o serviço no momento da instalação?

O que fiz foi adicionar as três linhas a seguir ao meu script postinst :

systemctl --system daemon-reload
systemctl enable my_service.service
systemctl start my_service.service

Isso funcionou bem até que tentamos incluir o carregamento deste pacote em nossa criação de imagem inicial em execução em debootstrap , quando foi descoberto que systemctl parece querer muitas configurações de ambiente que normalmente não são nesse processo.

    
por Travis Griggs 05.11.2014 / 20:09

1 resposta

1

Eu estou olhando para uma situação semelhante, eu quero configurar serviços em um rootfs debootstrap. Parece que systemctl enable simplesmente lê os alvos na seção [Install] de um arquivo unitário e cria os links simbólicos corretos. Portanto, se você souber quais serviços deseja iniciar em quais destinos, acho que a resposta correta pode ser apenas criar os links simbólicos corretos. por exemplo,

ln -s /etc/systemd/system/multi-user.target.wants/ssh.service \
      /lib/systemd/system/ssh.service

As outras duas etapas ( daemon-reload e start ) que você não deseja fazer ao instalar em um chroot do debootstrap, mas eu acho que o seu problema é como fazer o link simbólico apenas no env do debootstrap e maneira normal de outra forma ....

Editar para o debootstrap

Como acontece, também estou usando debootstrap e descobri que systemctl enable chamadas funcionam bem, desde que o usuário chamador seja root (para evitar o aviso Failed to connect to bus ). daemon-reload e start provavelmente não faz sentido durante uma instalação no chroot, já que você não está em um ambiente ao vivo. Então, o seu postinst provavelmente quer detectar o chroot e pular essas linhas. Ou defina uma variável env ou passe algum sinalizador que seu script do instalador possa ler.

IM_DEBOOTSTRAPPING=yes dpkg -i mypackage.deb  # tells postinst to skip systemctl start
    
por 31.01.2017 / 03:45