Error state: check-failed utilizando canonical-livepatch

Hola!

Yo utilizo la versión gratuita de canonical-livepatch para tres servidores dedicados (yo virtualizo, y es incómodo perder uptime en las máquinas virtuales).

Casualmente, al activar el servicio en una máquina (utilizando una plantilla Ubuntu 16.04 de OVH) canonical-livepatch funciona momentáneamente, pero al cabo de unas horas aparece un error en el journal:
Bad server status code: 403. URL: https://livepatch.canonical.com/api/machine/<id> {"error": "Invalid Machine Token"}

y a eso debemos sumar un error de tipo check-failed, que impide seguir bajando actualizaciones del servicio, haciendolo inútil.
maverickp@pearl:~$ sudo canonical-livepatch status --verbose
(...)
status:
- kernel: 4.4.0-45.66-generic
running: true
livepatch:
checkState: check-failed
(...)

Resolviendo el error

Al parecer, la plantilla Ubuntu 16.04 de OVH debería generar sistemas diferentes al usarlo para instalar servidores. Genera los pares de claves para SSH por máquina, entre otras cosas, pero la plantilla viene con un parámetro de systemd llamado machine-id, que es el mismo para todos, pero no deberíamos compartir.

canonical-livepatch utiliza éste campo para crear una pareja única machine-id<=>token, creando así el machine-token para la máquina. Si alguien activa su servicio con tu machine-id, tu machine-token será revocado de inmediato.

Necesitamos obtener nuestro machine-id original:

cat /etc/machine-id
5b4291032856154f1caf5ffb5694cdc3

Luego lo cambiamos por otra cadena aleatoria:

head /dev/urandom | md5sum | cut -d " " -f 1 | sudo tee /etc/machine-id

El manual de systemd tiene una utilidad para generar otro machine-id, pero necesita un rootfs no booteado.
Por ese motivo, nos aseguraremos de reiniciar la máquina ahora mismo, para evitar fallas raras.