Eu gostaria de instalar um serviço de um *.deb
pacote, vinculá-lo usando update-alternatives
. Em seguida, habilite/inicie o link simbólico. Existem alguns exemplos disso no arquivo debian existente? Se não, como alguém faria isso?
Estou fazendo isso porque quero poder implantar várias versões do meu software na mesma máquina e usar update-alternatives
para escolher qual delas é executada.
Arquivos de controle típicos podem ser assim para algo que usa update-alternatives
e depende do debhelper para serviços:
# myapp99.postinst
update-alternatives --install \
/lib/systemd/system/myapp.service myapp \
/lib/systemd/system/myapp99.service 99
#DEBHELPER#
# myapp99.prerm
update-alternatives --remove myapp lib/systemd/system/myapp99.service
#DEBHELPER#
Mas o problema aqui é operar #DEBHELPER#
depois que eu já o tiver feito.myapp.service
postrm
update-alternatives --remove
Eu poderia mover meu update-alternatives --remove
para depois #DEBHELPER#
no postrm, mas ainda teria um problema em que a limpeza de um pacote antigo não utilizado pararia/desativaria myapp.service
. Tenho certeza de que há outras coisas que não estou considerando também.
Existem pacotes no arquivo debian existente que fazem o que estou tentando fazer?
Estou quase pensando em fazer isso sem debhelper
: Verificar se o link existe antes da instalação e habilitar se for novo. Verificando se o link existe após a limpeza, e parando/desabilitando/mascarando somente se este foi o último fornecedor daquele serviço. Se esse é o único caminho a seguir, tudo bem... Eu prefiro não reinventar a roda e introduzir bugs.
Uma pesquisa de código Debian sugere que o único pacote que faz algo assim é
iptables-persistent
, e não tenho a impressão de que está tentando fazer algo parecido com o que você procura.Não tenho uma maneira infalível de lidar com o que você está propondo; Eu faria diferente:
uma possibilidade seria não enviar vários serviços; em vez disso, construa um pacote comum que envie um serviço e faça com que o serviço use um binário que é tratado usando alternativas;
outra seria enviar vários serviços, mas não configurá-los como alternativas, e confiar no administrador para usar os recursos do systemd para escolher qual instância habilitar.
Neste último caso,
dh_installsystemd --no-enable
será útil (emdebian/rules
).