Como executar o fake-hwclock antes que /var/log/wtmp seja atualizado?

Como executar o fake-hwclock antes que /var/log/wtmp seja atualizado?

Eu tenho um Raspberry Pi e a cada reinicialização vejo esta saída por último:

root@RaspberryPi:~# last | grep boot
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00   still running
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00   still running
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00 - 23:01 (17305+22:01)
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00 - 23:01 (17305+22:01)
reboot   system boot  4.4.0-1055-raspi Thu Jan  1 01:00 - 23:01 (17305+22:01)

Isso ocorre apesar de ter um hwclock falso e um RTC de hardware instalados.

Atualmente o serviço para fake-hwclock.service começa antes de sysinit.target, assim:

[Unit]
Before=sysinit.target

[Service]
ExecStart=/sbin/fake-hwclock load

[Install]
WantedBy=sysinit.target

Como faço para que ele seja executado antes que /var/log/wtmp seja atualizado?

Responder1

Acredito que seja um bug no systemd-update-utmp. Veja meu comentário aqui:https://github.com/systemd/systemd/issues/6057#issuecomment-435247567

Uma solução alternativa é executar o fake-hwclock no initramfs, antes de passar o controle para a instância principal do systemd.

Responder2

Os registros de login wtmp "reboot" são gerenciados pelo serviço systemd-update-utmp systemd. Ele deve iniciar antes do destino sysinit, o que significa que antes que o início seja concluído, este serviço será iniciado SE ainda não tiver sido iniciado. Isso não significa que o systemd-timesyncd será necessariamente iniciado antes do systemd-update-utmp.

Eu testei em meu servidor Arch Linux e consistentemente o systemd-timesyncd sempre roda bem antes do systemd-update-utmp. Por outro lado, eles estão quase sempre a um pid de distância um do outro.

Mas como não está sendo executado explicitamente após o NTP, suponho que isso ainda deva ser considerado um bug.

Do manual do systemd:

"Depois = é oinversode Antes=, ou seja, enquanto Depois= garante que a unidade configurada seja iniciada após a unidade listada terminar de inicializar"

https://www.freedesktop.org/software/systemd/man/systemd.unit.html

O que você deveria fazer:

systemctl edit systemd-update-utmp

[Unit]
After=systemd-timesyncd.service
Wants=systemd-timesyncd.service

informação relacionada