Ir al contenido

Actualizar y revertir

Una actualización sustituye el binario; no te migra a un producto diferente. El directorio de datos, la clave de firma de auditoría y el material TLS permanecen donde están, y el motor aplica por sí mismo las nuevas migraciones de esquema al arrancar. Esta página guía al operador desde «¿debo instalar esta release?» hasta «necesito recuperar la anterior».

Hay dos formas de avanzar el binario y ambas llegan al mismo punto.

Tu instalaciónVía
Un binario en un host, systemd o Docker Composeolivares upgrade: esta página
Kubernetes / HelmDefine la imagen y deja que el operador haga el rolling update. No ejecutes olivares upgrade dentro de un pod: el despliegue es declarativo y la siguiente reconciliación lo desharía.

--check descarga y verifica el manifiesto del canal, lo compara con lo instalado e imprime lo que ocurriría. No sustituye nada.

Ventana de terminal
olivares upgrade --check

Responde con la versión instalada, la disponible y una línea de estado que será up to date, upgrade available, DOWNGRADE (blocked unless --force-rollback) o UNKNOWN. Lee esa línea en vez de comparar por tu cuenta los dos números de versión.

UNKNOWN no significa «probablemente está bien». Significa que no se pudo medir la versión instalada —por ejemplo, por un directorio de staging de otra arquitectura, un montaje noexec o una compilación desde el código fuente— y tanto la protección antirretroceso como el requisito de versión mínima afirman algo sobre esa versión instalada, por lo que ninguna puede evaluarse. El comando se niega a adivinar. Declara la versión que sabes que está instalada y las protecciones seguirán activas:

Ventana de terminal
olivares upgrade --check --current-version 26.8.0

olivares upgrade sigue un canal de release. Hay 3, declarados en core/release/manifest.go por orden creciente de estabilidad:

Valor de --channelDeclarado como
stablerelease.ChannelStable
securityrelease.ChannelSecurity
ltsrelease.ChannelLTS

Los valores que no figuren en esta tabla se rechazan antes de descargar nada (release.ValidChannel).

stable es la línea de disponibilidad general y la predeterminada. security lleva correcciones fuera de banda y nada más, por lo que un despliegue que la siga recibe releases de seguridad sin recibir releases de funcionalidades.

Elige el canal que corresponda a tu forma de operar y mantenlo:

Ventana de terminal
olivares upgrade --channel security

Una release de seguridad se marca como tal en el manifiesto y --check imprime los avisos que corrige. Si utilizas el canal de seguridad, recibirás esas correcciones fuera de banda respecto a la línea de disponibilidad general.

Ventana de terminal
olivares upgrade

Esto es lo que hace el comando, en orden, y el motivo de cada paso:

  1. Descarga el manifiesto del canal y verifica su firma sin conexión frente a la clave de release Ed25519 integrada en la compilación. El ancla de confianza es la firma, no el transporte. Una compilación sin clave integrada exige que proporciones una con --pubkey; no existe una vía sin verificar.
  2. Se niega a retroceder. Instalar una versión más antigua que la que se está ejecutando se bloquea salvo que pases --force-rollback, lo que registra una entrada de auditoría.
  3. Vincula el artefacto al SHA-256 firmado del manifiesto antes de ejecutar sus bytes.
  4. Sondea el candidato y luego lo sustituye de forma atómica, conservando una copia con timestamp del binario reemplazado. Si el binario recién instalado no arranca, el comando vuelve por sí solo a esa copia.
  5. No altera el proceso en ejecución. El cambio sustituye el archivo en disco. El código nuevo toma el control al reiniciar el servicio.

Añade --yes cuando lo ejecutes desde un script y no haya nadie para responder a la confirmación.

Un despliegue air-gap nunca contacta con un host de actualizaciones. Introduce el bundle por el medio que ya consideres fiable e instálalo desde el archivo local: la verificación es idéntica, porque la red nunca fue aquello en lo que se confiaba.

Instalar desde un bundle requiere una licencia vigente en la máquina. Se comprueba sin conexión frente a la clave de licencia integrada en el binario: no se realiza ninguna llamada, por lo que funciona detrás del air gap. Si aún no has instalado la licencia en la máquina, Instalar una licencia y pasar a enterprise es la página que explica cómo hacerlo. --check no está sujeto a esa condición, así que puedes verificar un bundle antes de preparar nada:

Ventana de terminal
olivares upgrade --bundle ./olivares-release.tar.gz --check # verify only; no license read
olivares upgrade --bundle ./olivares-release.tar.gz --yes # install; needs a live license

Si tu compilación no incluye una clave de release o replicas las releases bajo tu propia clave de firma, indica al comando la clave frente a la que verificas:

Ventana de terminal
olivares upgrade --bundle ./olivares-release.tar.gz --pubkey @/etc/olivares/release.pub

Consulta Instalar en air-gap para saber cómo se produce y transporta el bundle.

Despliegue gradual y comprobaciones desatendidas

Sección titulada «Despliegue gradual y comprobaciones desatendidas»

Un manifiesto puede nombrar una cohorte de despliegue gradual para que una release alcance primero solo a una fracción del estate. --if-eligible hace que un nodo actúe únicamente si pertenece a esa cohorte; de lo contrario, no hace nada:

Ventana de terminal
olivares upgrade --if-eligible --yes

Esa es la forma que ejecuta el temporizador integrado. Para emitir un temporizador y un servicio systemd que la invoquen dentro de una ventana de mantenimiento:

Ventana de terminal
olivares upgrade --install-timer --timer-schedule 'Sun *-*-* 03:00:00'

De forma predeterminada imprime las unidades; --timer-dir las escribe donde indiques. Es opt-in: nada se programa por sí solo.

La consola ofrece la mitad de solo lectura de la misma información: Settings → update status llama a POST /v1/console/update-check, que ejecuta bajo demanda una comprobación del canal configurado. Un despliegue air-gap o sin canal configurado responde 501 y explica el motivo, en lugar de afirmar que no hay actualización.

Ventana de terminal
olivares version
olivares upgrade --check

--check debería indicar ahora up to date. Después, confirma que el propio servicio está sano: la pantalla Health de la consola (/health) o el endpoint de readiness del motor descrito en Monitorizar con Prometheus.

El binario anterior se conserva junto al que lo reemplazó y el comando imprime su ruta cuando realiza el cambio. Revertir consiste en restaurar ese archivo y reiniciar el servicio.

La reversión es segura por diseño, no por suerte: cada cambio de esquema entrega primero una expansión aditiva y deja su contrato destructivo para una release posterior, de modo que el binario de la release anterior sigue funcionando con el esquema actualizado. Por eso revertir significa «volver a colocar el binario antiguo», no «revertir la base de datos».

Si necesitas instalar una release más antigua en vez de restaurar la copia conservada, la protección antirretroceso lo bloquea hasta que lo indiques expresamente:

Ventana de terminal
olivares upgrade --force-rollback --yes

La anulación queda registrada en el audit log. El requisito de versión mínima no puede anularse con esta opción: si un manifiesto declara un mínimo superior a tu versión instalada, pasa por una release intermedia en lugar de intentar saltarlo.

SíntomaQué significaQué hacer
--check imprime UNKNOWNNo se pudo medir la versión instalada, así que no puede afirmarse ningún ordenPasa a --current-version la versión que sabes que está instalada
min_ver dice que tu versión es demasiado antiguaLa release se niega a instalarse directamente sobre la tuyaActualiza primero a la release intermedia indicada
El binario nuevo no arrancaFalló el sondeo posterior al cambioYa se ha vuelto a la copia; revisa los logs e informa sobre la release
--install-timer se activa pero no ocurre nadaEl nodo no pertenece a la cohorte de despliegue gradualEs lo esperado con --if-eligible; la cohorte se amplía conforme avanza el despliegue
”another olivares upgrade is already installing”, exit 5Solo puede actualizar un proceso cada binario. El bloqueo se mantiene durante toda la secuencia de descarga y sustituciónEspera al que está en curso y vuelve a ejecutar el comando. Si no hay ninguno, el kernel ya ha liberado el bloqueo: ejecútalo de nuevo
”it CHANGED while this upgrade was downloading”Otro proceso sustituyó el binario después de preparar el plan: un gestor de paquetes, un despliegue de imagen o una ejecución de gestión de configuraciónVuelve a ejecutarlo: las protecciones se reevalúan frente a lo que realmente está instalado. Si persiste, dos sistemas están gestionando el mismo binario

Un solo agente de actualización por binario. olivares upgrade toma un bloqueo exclusivo sobre el destino durante toda la secuencia de preparación, descarga y sustitución, por lo que una segunda ejecución termina con código 5 en vez de instalar. Instala un temporizador y cambia su --channel, en vez de ejecutar uno por canal: antes, dos instalaciones que terminaban en el mismo segundo sobrescribían mutuamente su copia de reversión, y la reversión automática de la perdedora restauraba entonces el otro binario y declaraba el éxito. Justo antes de sustituirlo, el comando vuelve a leer los bytes del destino y se niega a continuar si no son aquellos sobre los que preparó el plan, porque los veredictos antirretroceso y de versión mínima afirman algo sobre un archivo instalado concreto.

Para cualquier otro problema, Resolución de problemas es la vía general, y la pantalla Logs de la consola (/logs) transmite el log del propio motor.