Estoy desarrollando un dispositivo basado en Linux utilizando un alix 2d13.Firmware basado en Linux, ¿cómo implementar una buena forma de actualizar?
He desarrollado un script que se encarga de crear un archivo de imagen, crear las particiones, instalar el gestor de arranque (syslinux), el kernel y el initrd y que se encarga de poner los archivos del sistema de archivos raíz en la partición correcta .
Los archivos de configuración se encuentran en el sistema de archivos tmpfs y se crean al iniciar el sistema mediante un software que lee un archivo XML que reside en una partición propia.
estoy buscando una manera de actualizar el sistema de archivos y he considerado dos soluciones:
- la actualización del firmware es un archivo comprimido que podrían contener kernel, initrd y/o la partición rootfs, en este De esta forma, al reiniciar, initrd se ocupará de dd la imagen rootfs en la partición correcta;
- la actualización del firmware es un archivo comprimido que podría contener dos archivos tar, uno para el arranque y otro para el sistema de archivos raíz.
Cada solución tiene sus propias ventajas: - una imagen de sistema de archivos me deja de eliminar archivos no utilizados, pero necesita una gran cantidad de tiempo y que matará a la memoria flash compacta rápidamente; - un archivo es más pequeño, necesita menos tiempo para la actualización, pero tendré el caos en el sistema de archivos raíz en poco tiempo.
Una solución alternativa podría ser poner una lista de archivos y colocar una secuencia de comandos de actualización previa/posterior en el archivo tar, para que cualquier archivo que no resida en la lista de archivos se elimine.
¿Qué opinas?
me gusta mucho tu solución, al final hice algo muy similar pero sin detección de falla de arranque, pero creo que implementaré algo similar: - reservaré un sector para la escritura de detección de falla de arranque usando operaciones directas de sincronización y sincronización - el kernel de arranque iniciará un initrd que informará un try-to-boot, con marca de tiempo y montará la imagen del sistema operativo - durante el proceso de arranque, el nuevo initrd informará, paso a paso con las marcas de tiempo, las fases de arranque para identificar los problemas - al final reportará en el sector de detección de fallas de arranque "todo listo" –
Para la actualización prefiero descargar el tarball en la partición de datos y, en el reinicio, si el primer initrd detecta el tarball de actualización, manejará el tarball (puede ser seful agregar dos archivos especiales para identificar los archivos para eliminar y ejecutar un script de actualización). Después de la actualización, el primer initrd se aplicará al kernel nuevo, informando el arranque como actualización (para que el archivo tar se pueda eliminar). El tarball, por razones de seguridad, debe estar firmado con una clave privada. Para informar de errores podría utilizar el sector de disco anterior (detección de falla de arranque), solo tiene que hacer la escritura sincronizada para evitar problemas –
Me gusta su idea de "sector de estado". Al menos mueve algunos de los puntos de falla a una sola ubicación de disco, y si ese sector falla, es posible que tenga sectores adicionales y podría intentar una recuperación, o al menos ofrecer un "modo de recuperación"." – Patrick