Zamora Teran/olpc-update
olpc-update
olpc-update es una tecnologia para actualizar el software. El comando se llama olpc-update.
Como funciona
Organización del sistema de archivos
El sistema de archivos / que parece en la XO no es la organizacion real del disco. En realidad el disco aparece algo así:
/home /security /versions
Así los archivos y programas del sistema se quedan dentro de /versions, y /versions puede tener mas de una version del software al mismo tiempo. Los datos que no son una parte del software mismo son separados (/home y /security) - una división dentro de codigo y datos. Cuando el sistema se enciende, el initramfs hace trucos para que el sistema de archivos parezca normal (con /bin /usr /var y más).
/versions/pristine tiene un directorio por version de la software. Esta copia del software debería ser limpiado todo el tiempo (no hacemos cambios).
Cuando enciende la XO por primera vez, hace una copía del directorio dentro de /versions/pristine, la pone en /versions/run (y a veces la imágen llega con esta copia ya hecha, como es en nuestra situación). El software corre desde este directorio.
En realidad no es una copía - hace el mismo árbol de directorios, y despúes hace un monton de enlaces fuertes (hardlinks), así que los archivos parecen como copías de hecho son enlaces a la misma sección del disco.
El archivo contents
/versions/contents tiene un indice del contenido de la imágen pristine (nombres y tamaños de los archivos, checksums, y más).
La actualización
- El programa olpc-update conecta a un servidor que tiene una actualizacion (o encuentra la actualización en un disco USB).
- Descarga el archivo contents para la nueva imágen
- Compara los 2 archivos contents para ver cuales archivos han cambiados
- Hace una copía (pero solo de enlaces fuertes) de la imágen que esta corriendo (para formar un base para la actualización)
- Descarga los nuevos archivos y archivos cambiados en la actualizacion al lugar donde queda la copía (rompiendo enlaces fuertes para que la imágen pristine y original no cambia)
- Verifica la nueva version con su archivo contents
- Si no verifica bien, signfica que la imágen original no fue limpia, entonces genera un nuevo archivo contents desde la imágen modificada y repite el proceso
- Pone la nueva version en /versions/pristine
- Al reiniciar, el initramfs copia la nueva version pristine hasta /versions/run y la corre.
Puntos interesantes sobre este sistema:
- Solo descarga los archivos nuevos y los archivos cambiados
- No tiene que revisar el sistema original para descargar una actualización (que duraría unos minutos), solo tiene que revisar el archivo contents
- Guarda un máximo de 2 versiones al mismo tiempo (se borran las anteriores)
- Si la imágen pristine no es limpia, todavía es posible hacer la actualización pero dura más tiempo
- Si hay muchas diferencias dentro de las 2 versiones, necesitará bastante espacio en el disco para guardar las 2
- Y todavia no hay una opción de borrar la imágen anterior después de actualizar
Como usar
Con la actividad Terminal, el comando es olpc-update. Necesita argumentos (por ejemplo la dirección del servidor que tiene la actualización), y debes ser root para ejecutar. olpc-update --help muestra más información.
olpc-update-query
Un programa se llama olpc-update-query se ejecuta cada 15 minutos por cron. Este programa es un cliente del Theft deterrence protocol (OATS), para:
- Actualizar activaciónes
- Borrar activaciónes si la XO es robada
- Actualizar la fecha de la XO
- Ejecutar olpc-update para actualizar el software
Aunque ejecuta cada 15 minutos, tiene métricos para solo comunicar con el servidor una vez por día.
Las respuestas desde el servidor tiene firmas y la laptop las verifica con la llave o.
La dirección del servidor queda en el programa (que es de python) y por defecto es antitheft.laptop.org.
Con este sistema, es posible tener actualizaciones del software totalmente automáticas, sin necesitar tocar cada laptop, sin borrar el diario.
Para usar este sistema en Nicaragua, necesitamos configurar un servidor OATS (o tal vez un servidor por escuela). La complicación es que el servidor tiene que firmar los mensajes, eso significa que el servidor necesita la llave privada (y no es buen idea ponerla en todos los XS).
Tenemos 2 opciones:
- Poner el servidor OATS en la oficina y las XOs le comunicarían por internet
- Usar el nuevo sistema de key delegation, así podemos dar permiso a un XS de generar mensajes OATS para unos precisos laptops por un tiempo fijado.
- El XS ya tiene un servidor de OATS
- Este sistema es nuevo y podría ser dificil manejar (necesita mucha organización?)