Por que é necessário reiniciar o HAVEGED?

2

Hoje, instalei o meu sistema Arch Linux (versão de lançamento, systemd).

# systemctl start haveged

deve iniciar o daemon, mas isso não funcionaria. Isto é o que o log tinha a dizer:

systemd[3916]: haveged.service: Failed at step STDIN spawning /usr/bin/haveged: No such file or directory
systemd[1]: haveged.service: Main process exited, code=exited, status=208/STDIN
systemd[1]: haveged.service: Unit entered failed state.
systemd[1]: haveged.service: Failed with result 'exit-code'.

A primeira mensagem de erro no log está errada. /usr/bin/haveged existe, claro. Eu até tentei remover o pacote e reinstalá-lo, mas nada ajudou, o daemon simplesmente não pôde ser iniciado corretamente. Eu até tentei reiniciar o systemd usando systemctl daemon-reload mas sem sucesso.

No final, eu reiniciei o sistema e - voilà - haveged pode ser iniciado corretamente.

Por que essa reinicialização foi necessária? Houve algo que eu poderia ter feito diferente para evitar essa reinicialização?

Atualização: o conteúdo do arquivo de unidade:

$ /usr/lib/systemd/system/haveged.service

[Unit]
Description=Entropy Harvesting Daemon
Documentation=man:haveged(8)

[Service]
ExecStart=/usr/bin/haveged -F -w 1024 -v 1
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target
    
por vic 26.12.2015 / 23:36

1 resposta

3

The first error message in the log is wrong.

Não está errado:)

systemd[3916]: haveged.service: Failed at step STDIN spawning /usr/bin/haveged: No such file or directory

A mensagem principal é Failed at step STDIN

O que isso significa?

Existe uma diretiva StandardInput= :

Controls where file descriptor 0 (STDIN) of the executed processes is connected to. Takes one of null, tty, tty-force, tty-fail or socket.

...

This setting defaults to null

Falha na inicialização do serviço aqui :

r = setup_input(context, params, socket_fd);

setup_input falhou aqui :

case EXEC_INPUT_NULL:
            return open_null_as(O_RDONLY, STDIN_FILENO);

E open_null_as :

    fd = open("/dev/null", flags|O_NOCTTY);
    if (fd < 0)
            return -errno;

    if (fd != nfd) {
            r = dup2(fd, nfd) < 0 ? -errno : nfd;
            safe_close(fd);
    } else
            r = nfd;

Então, open("/dev/null", O_RDONLY|O_NOCTTY) falhou: No such file or directory

Você consegue reproduzi-lo?

  • limpar o pacote
  • reinicializar
  • instale o pacote
  • início do systemctl

Você pode acrescentar a saída de systemctl cat haveged ?

    
por 27.12.2015 / 07:07