Zamora Teran/olpc-update

From OLPC
< Zamora Teran
Revision as of 17:34, 24 March 2010 by DanielDrake (talk | contribs) (Created page with '== olpc-update == olpc-update es una tecnologia para actualizar el software. El comando se llama <tt>olpc-update</tt>. === Como funciona === ==== Organización del sistema de …')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

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

  1. El programa olpc-update conecta a un servidor que tiene una actualizacion (o encuentra la actualización en un disco USB).
  2. Descarga el archivo contents para la nueva imágen
  3. Compara los 2 archivos contents para ver cuales archivos han cambiados
  4. Hace una copía (pero solo de enlaces fuertes) de la imágen que esta corriendo (para formar un base para la actualización)
  5. 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)
  6. 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
  7. Pone la nueva version en /versions/pristine
  8. 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

olpc-update-query