Ir al contenido

Documentación

Actualizaciones del agente

El agente se actualiza según un horario que se configura, o en el momento en que se pulsa el botón. Esta página explica qué hace fiable a una versión, cuándo la reparte la plataforma por su cuenta y cómo instalar una a mano.

Qué hace que una versión sea fiable

Dos hechos independientes tienen que encajar antes de que un binario nuevo se ejecute en su host: su hash tiene que coincidir con el valor que ha publicado la plataforma, y tiene que llevar una firma válida sobre sus bytes en bruto hecha con la clave de publicación de la plataforma.

  • La suma de comprobación demuestra que la descarga está íntegra. No dice nada sobre quién la ha producido.
  • La firma demuestra quién la ha producido. La comprueba el agente antes de preparar nada, y de nuevo un script que solo root puede modificar antes de instalar el binario.
  • La clave pública que usa esa segunda comprobación pertenece a root. La cuenta de servicio con la que se ejecuta el agente no puede sustituirla, así que comprometer el agente sigue sin conseguir que se ejecute un binario como root.
  • Una versión sin firma se rechaza. También una versión cuya firma no coincide, aunque la suma de comprobación sí lo haga.

Actualizar desde el panel

Cuando un agente está por detrás, el panel lo indica en la parte superior de su página y en la lista de agentes. Al pulsar el botón, la plataforma entrega al agente un enlace de descarga de corta duración por la conexión que ya está abierta.

  • Un agente: el aviso de su página, o la tarjeta de actualización de su pestaña de ajustes.
  • Varios a la vez: selecciónelos en la lista de agentes y actualice la selección. El número del botón solo incluye los agentes que se pueden actualizar ahora mismo.
  • El panel de control tiene un botón directo por cada agente que está por detrás, para no tener que ir a buscarlo.
  • El progreso sobrevive a una recarga de la página: se lee del comando que se está ejecutando, no de algo que recuerde el navegador.
Un agente sin conexión no se puede actualizar. El botón sigue visible con el motivo al lado, porque conviene saber que hay una actualización esperando.

El horario nocturno

Cada agente tiene un horario, y de fábrica está activo a las 03:00 en hora de Europa central. Si a una de las horas configuradas hay una versión más reciente, la plataforma se la entrega al agente igual que lo hace el botón. Lo demás no cambia: el mismo binario firmado, las mismas comprobaciones en el anfitrión, la misma vuelta atrás.

  • Varias horas por agente, seis como mucho, sobre una rejilla de cinco minutos. Seis basta para cada cuatro horas y es lo bastante poco para leerlo de un vistazo.
  • Las horas se leen en el mismo reloj de pared que el resto del panel. Una hora que no existe la noche en que el reloj se adelanta se ejecuta una hora después en lugar de saltarse, y una hora que existe dos veces se ejecuta una sola vez.
  • Hay una ventana de recuperación de quince minutos y ni un minuto más. Una actualización pensada para las 03:00 no se quiere a las 09:00: la noche estaba elegida a propósito.
  • Un agente que estaba desconectado a su hora se salta la noche sin gastar su turno, y toma el siguiente. Un agente que estaba accesible pero ya al día sí gasta el turno, para que su historial demuestre que alguien miró.
  • Como mucho salen cinco agentes de una cuenta por minuto. Una flota de cuarenta descarga unos 22 MB cada uno, desde una sola red, y repartir eso a lo largo de ocho minutos cabe en la ventana de recuperación.
  • Llega un aviso cuando una actualización programada sale bien y cuando alguna falla, agrupado por cuenta. Un agente que falla avisa como mucho una vez al día, para que un anfitrión atascado no llene los avisos con la misma frase.
El botón no desaparece. Una actualización programada y un botón pulsado son la misma operación, y la página del agente guarda un historial de las diez últimas, horario y botón en una sola lista.

Qué ocurre en el host

El agente descarga el binario nuevo junto al suyo, verifica la suma de comprobación y la firma, y solo entonces se cierra. Systemd reinicia el servicio, un paso propiedad de root verifica una vez más el binario preparado, lo instala de forma atómica y comprueba que arranca de verdad antes de conservarlo. Si algo de eso falla, el binario antiguo se queda en su sitio y el servicio vuelve con él.

Hacerlo a mano

No hace falta usar el panel. Todo lo que hace el botón son también un puñado de comandos, y el panel los imprime con la suma de comprobación y la firma actuales ya rellenadas. Los dos pasos que conviene conservar al escribir un script propio son los de verificación:

Los comandos y la salida del terminal están en inglés en todas partes, en el panel y en estas páginas. Un solo texto, una sola verdad: lo que se lee aquí es literalmente lo que devolverá su host.

Verificar la suma de comprobación de lo descargado.

shell
echo "<sha256-from-the-panel>  provibr-agent-linux-x86_64" | sha256sum -c -

Verificar la firma contra la clave pública del host. Este es el paso que una simple descarga no da, y es el que importa.

shell
openssl pkeyutl -verify -pubin -inkey /usr/local/lib/provibr-agent/license-signing.pub -rawin \
  -in ./provibr-agent-linux-x86_64 -sigfile ./provibr-agent-linux-x86_64.sig
Las instalaciones anteriores a la existencia de la firma necesitan que se ejecute el instalador una vez más, para colocar la clave pública y la unidad de servicio actualizada. Hasta que eso ocurra, el panel rechaza la actualización con un motivo claro en lugar de fallar a medias.