Como remover um script wrapper do systemd para o serviço sysV e usar um arquivo de unidade?

3

Estou tentando desfazer a configuração ou remover um script% wrapper systemd de um serviço sysV antigo. O wrapper é fornecido por um pacote Debian, então não posso simplesmente deletá-lo.

O wrapper aparece como um artefato e é listado como "gerado" :

$ systemctl list-unit-files | grep -i -E 'rng|rand'
rng-tools.service                      generated
systemd-random-seed.service            static
urandom.service                        static

Eu adicionei um novo serviço systemd para substituí-lo de acordo com Criando e modificando arquivos de unidade do systemd :

# touch /etc/systemd/system/rng-tools.service
# chmod 664 /etc/systemd/system/rng-tools.service
# emacs /etc/systemd/system/rng-tools.service
<edit file>

No entanto, quando tento ativar o novo arquivo de serviço, o antigo script sysV é usado:

# systemctl enable rng-tools
Synchronizing state of rng-tools.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable rng-tools

A pesquisa aumentou 0 ocorrências para remover o wrapper antigo. Eu recebo muitos hits semelhantes, como criar um script de wrapper. Mas eu não encontrei informações sobre como remover uma da base de dados systemd .

Como faço para desconfigurar ou remover um script wrapper do systemd para o serviço sysV?

E aqui está o resultado após a sugestão de Stephen. O novo rng-tools.service está sendo usado:

$ systemctl status rng-tools
● rng-tools.service - Entropy daemon for /dev/random using a hardware RNG
   Loaded: loaded (/etc/systemd/system/rng-tools.service; enabled; vendor preset
   Active: failed (Result: exit-code) since Mon 2018-10-15 07:19:32 EDT; 20min a
 Main PID: 674 (code=exited, status=1/FAILURE)

E:

# journalctl -b -u rng-tools.service
-- Logs begin at Mon 2018-10-15 07:19:29 EDT, end at Mon 2018-10-15 07:49:13 EDT. --
Oct 15 07:19:31 beaglebone systemd[1]: Started Entropy daemon for /dev/random using a hardware RNG.
Oct 15 07:19:31 beaglebone rngd[674]: can't open /dev/hwrng: No such file or directory
Oct 15 07:19:32 beaglebone systemd[1]: rng-tools.service: Main process exited, code=exited, status=1/FAILURE
Oct 15 07:19:32 beaglebone systemd[1]: rng-tools.service: Unit entered failed state.
Oct 15 07:19:32 beaglebone systemd[1]: rng-tools.service: Failed with result 'exit-code'.

E:

# dd if=/dev/hwrng count=16 bs=1
▒▒▒▒ȿ▒3▒▒ ▒▒#16+0 records in
16+0 records out
16 bytes (16 B) copied, 0.00942799 s, 1.7 kB/s

E para completar, aqui está o novo rng-tools.service :

# cat /etc/systemd/system/rng-tools.service
# ...

[Unit]
Description=Entropy daemon for /dev/random using a hardware RNG
After=syslog.target
Requires=syslog.target

[Service]
Type=simple
ExecStart=/usr/sbin/rngd -r /dev/hwrng -f

[Install]
WantedBy=basic.target
    
por jww 15.10.2018 / 12:47

1 resposta

6
Synchronizing state of rng-tools.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable rng-tools

significa apenas que o systemd está "ciente" de que há um script de inicialização sysvinit no estilo presente e que precisa levar isso em consideração ao considerar o estado do serviço rng-tools . Isso não significa que o use o script de inicialização para gerenciar o serviço.

Se um script de inicialização e um arquivo de unidade estiverem presentes, o systemd usará o último (pelo menos, quando o serviço não estiver em execução).

Você pode ver qual arquivo é usado para iniciar um serviço executando systemctl status ; a linha “Loaded” mostrará qual script foi usado. Por exemplo, aqui está um serviço que tem uma unidade systemd e um script de inicialização:

● infnoise.service - Wayward Geek InfNoise TRNG driver
   Loaded: loaded (/lib/systemd/system/infnoise.service; enabled; vendor preset: enabled)

Este é um serviço que tem apenas um script de inicialização:

● sensord.service - LSB: lm-sensors daemon
   Loaded: loaded (/etc/init.d/sensord; generated; vendor preset: enabled)

Verificar seu serviço deve mostrar que o systemd está usando sua nova unidade.

Se tudo mais falhar, você pode excluir /etc/init.d/rng-tools : ele deve ser rastreado como um arquivo de configuração e dpkg notará que ele foi excluído e não será restaurado nos upgrades de pacote. /etc é de propriedade do administrador do sistema, não do sistema de empacotamento, mesmo que os pacotes possam instalar arquivos lá.

    
por 15.10.2018 / 13:12