Creando una imagen de Ubuntu para ARM “desde cero”
Cuando el desarrollo recién comienza, a menudo no está claro qué paquetes irán a los rootfs de destino.
En otras palabras, es demasiado pronto para adquirir LFS, buildroot o yocto (u otra cosa), pero ya debes comenzar. Para los ricos (tengo eMMC de 4 GB en muestras piloto) hay una manera de distribuir a los desarrolladores una distribución que les permitirá entregar rápidamente algo que falta actualmente, y luego siempre podemos recopilar listas de paquetes y crear una lista para los rootfs de destino.
Este artículo no es nuevo y es una simple instrucción de copiar y pegar.
El propósito del artículo es construir rootfs de Ubuntu para placas ARM (en mi caso, basados en Colibri imx7d).
Construyendo una imagen
Ensamblamos los rootfs de destino para la replicación.
Descomprimiendo la base de Ubuntu
Nosotros mismos elegimos la versión según nuestras necesidades y preferencias. Aquí he dado 20.
$ mkdir ubuntu20
$ cd ubuntu20
$ mkdir rootfs
$ wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04-base-armhf.tar.gz
$ tar xf ubuntu-base-20.04-base-armhf.tar.gz -C rootfs
Comprobando el soporte de BINFMT en el kernel
Si tiene una distribución común, entonces hay soporte para BINFMT_MISC y todo está configurado; si no, estoy seguro de que sabe cómo habilitar el soporte BINFMT en el kernel.
Asegúrese de que BINFMT_MISC esté habilitado en el kernel:
Los archivos y módulos de encabezado del kernel son un asunto aparte. Por supuesto, no instalaremos el gestor de arranque, el kernel, los módulos ni el árbol de dispositivos a través de Ubuntu. Nos llegarán de fuera o las montaremos nosotros mismos o nos las entregará el fabricante de la placa, en cualquier caso esto escapa al alcance de esta instrucción.
Hasta cierto punto, la divergencia de versiones es aceptable, pero es mejor tomarlas de la compilación del kernel.
# apt install --yes linux-headers-generic
Veamos qué pasó y resultó mucho:
# apt clean
# du -d 0 -h / 2>/dev/null
770M /
No olvide establecer una contraseña.
Empaquetando la imagen
$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz
Además, podemos instalar etckeeper con la configuración de autopush.
Bueno, digamos que distribuimos nuestro ensamblaje, comenzó el trabajo sobre la mejor manera de ensamblar posteriormente diferentes versiones de nuestro sistema.
Por supuesto, podemos crear ramas en el dispositivo con anticipación (digamos que creamos un script o servicio que se ejecutará la primera vez que se inicie).