Construye tu propio Fedora Remezcla de IoT

Fedora IoT Edition está dirigido a Internet de las cosas. Se introdujo en el artículo Cómo encender un LED con Fedora IoT en 2018. Se basa en RPM-OSTree como tecnología central para obtener algunas propiedades y características ingeniosas que se cubrirán en un momento.

RPM-OSTree es una herramienta de alto nivel basada en libostree que es un conjunto de herramientas que establecen un modelo “similar a git” para comprometer e intercambiar árboles de sistemas de archivos, implementación de dichos árboles, configuración del cargador de arranque y administración de paquetes RPM en capas. Tal sistema se beneficia de las siguientes propiedades:

  • Actualización y reversión transaccional
  • Áreas del sistema de archivos de solo lectura
  • Actualizaciones potencialmente pequeñas a través de deltas
  • Ramificación, incluida la reorganización y las implementaciones múltiples
  • Sistema de archivos reproducible
  • Especificación del sistema de archivos a través de código controlado por versión

El intercambio de árboles de sistemas de archivos y las confirmaciones correspondientes se realiza a través de repositorios OSTree o remotos. Al usar uno de los Fedora En las ediciones basadas en RPM-OSTree, hay controles remotos desde los que el sistema descarga confirmaciones y las aplica, en lugar de descargar e instalar RPM por separado.

A remezclar en el Fedora El ecosistema es una versión alterada y obstinada del sistema operativo. Cubre las necesidades de un nicho específico. Este artículo se sumergirá en el mundo de la creación de sus propias confirmaciones de sistema de archivos basadas en Fedora Edición IoT. Se familiarizará con las herramientas, la terminología, el diseño y los procesos de dicho sistema. Si sigue las instrucciones de esta guía, terminará con su propio Fedora Remezcla de IoT.

Preparativos

Necesitará algunos paquetes para comenzar. En sistemas que no sean ostree, instale los paquetes ostree y rpm-ostree. Ambos están disponibles en el Fedora Repositorios de paquetes de Linux. Además, instale git para acceder a la Fedora Fuentes de especificaciones de IoT ostree.

sudo dnf install ostree rpm-ostree git

Suponiendo que tiene una carpeta vacía de repuesto para trabajar, comience allí creando algunos archivos y carpetas que serán necesarios en el camino.

mkdir .cache .build-repo .deploy-repo .tmp custom

El directorio .cache es utilizado por todos los comandos de compilación alrededor de rpm-ostree. Las carpetas compiladas e implementadas almacenan repositorios separados para mantener el entorno de compilación separado del remix real. El directorio .tmp se usa para combinar las fuentes ascendentes administradas por git (desde Fedora internet de las cosas, para example) con modificaciones guardadas en el directorio personalizado.

A medida que construye su propio OSTree como derivado de Fedora IoT necesitará las fuentes. Clónelos en la carpeta .fedora-iot-spec. Contienen varios archivos de configuración que especifican cómo funciona el sistema de archivos ostree para Fedora IoT está construido, qué paquetes incluir, etc.

git clone -b "f34" https://pagure.io/fedora-iot/ostree.git .fedora-iot-spec

Repositorios OSTree

Cree repositorios para construir y almacenar un sistema de archivos OSTree y su contenido. Un lugar para almacenar confirmaciones y administrar sus metadatos. ¿Esperar lo? ¿Qué es un compromiso de OSTree de todos modos? ¡Me alegra que preguntes! Con rpm-ostree construyes los llamados compromisos de libostree. La terminología se basa aproximadamente en git. Esencialmente funcionan de manera similar. Esas confirmaciones almacenan diferencias de un estado del sistema de archivos al siguiente. Si cambia un blob binario dentro del árbol, la confirmación contiene este cambio. Puede implementar esta versión específica del sistema de archivos en cualquier momento.

Utilice el comando ostree init para crear dos repositorios ostree.

ostree --repo=".build-repo" init --mode=bare-user
ostree --repo=".deploy-repo" init --mode=archive

La principal diferencia entre los repositorios es su modo. Cree el repositorio de compilación en modo de “usuario básico” y el repositorio de “producción” en modo de “archivo”. El modo bare* es muy adecuado para entornos de construcción. La parte de “usuario” también permite la operación no raíz y el almacenamiento de atributos extendidos. Cree el otro repositorio en modo de archivo. Almacena objetos comprimidos; haciéndolos fáciles de mover. Si todo eso no significa nada para ti, no te preocupes. Los detalles no importan para su objetivo principal aquí: construir su propio Remix.

Permítanme compartir una pequeña anécdota sobre esto: cuando estaba trabajando en la creación de sistemas basados ​​en ostree en canalizaciones GitLab CI/CD y teníamos que mover los repositorios entre diferentes trabajos, una vez intentamos moverlos sin comprimir en modo de usuario simple a través de cachés Aprendimos que, si bien esto funciona con repositorios de archivo, no funciona con repositorios desnudos*. Los atributos importantes del sistema de archivos se corromperán en el camino.

Sabor personalizado

¿Qué es un Remix sin ninguna personalización? ¡No mucho! Cree algunos archivos de configuración como ajuste para su propio sistema operativo. Suponiendo que desea implementar Remix en un sistema con un controlador de hardware (un frambuesa pipor example) comienzan con un archivo de configuración de vigilancia:

./custom/watchdog.conf
watchdog-device        = /dev/watchdog
max-load-1             = 24
max-load-15            = 9
realtime               = yes
priority               = 1
watchdog-timeout       = 15 # Broadcom BCM2835 limitation

El script de posprocesamiento es un script de shell arbitrario que se ejecuta dentro del árbol del sistema de archivos de destino como parte del proceso de compilación. Permite la personalización de última hora del sistema de archivos en un entorno restringido y (por defecto) sin red. Es un buen lugar para asegurarse de que se establezcan los permisos de archivo correctos para el archivo de configuración de vigilancia personalizado.

./custom/treecompose-post.sh
#!/bin/sh

set -e

# Prepare watchdog
chown root:root /etc/watchdog.conf
chmod 0644 /etc/watchdog.conf

Plantar un Treefile

Fedora IoT es bastante mínimo y mantiene su enfoque principal en la seguridad y las mejores prácticas. El resto depende de usted y de su caso de uso. Como consecuencia, el paquete de vigilancia no se proporciona desde el principio. En RPM-OSTree, el archivo de especificaciones se llama Archivo de árbol y codificado en JSON. En el Treefile, especifica qué paquetes instalar, archivos y carpetas para excluir de los paquetes, archivos de configuración para agregar al árbol del sistema de archivos y unidades systemd para habilitar de forma predeterminada.

./custom/treefile.json
{
  "ref": "OSTreeBeard/stable/x86_64",
  "ex-jigdo-spec": "fedora-iot.spec",
  "include": "fedora-iot-base.json",
  "boot-location": "modules",
  "packages": [
      "watchdog"
  ],
  "remove-files": [
      "etc/watchdog.conf"
  ],
  "add-files": [
      ["watchdog.conf", "/etc/watchdog.conf"]
  ],
  "units": [
      "watchdog.service"
  ],
  "postprocess-script": "treecompose-post.merged.sh"
}

La referencia es básicamente el nombre de la rama dentro del repositorio. Úselo para hacer referencia a esta especificación específica en operaciones rpm-ostree. Con ex-jigdo-spec e include, vincula este Treefile a la configuración del Fedora Fuentes de IoT. Además especificar el Fedora Repo de actualizaciones en la sección de repos. No es parte de las fuentes, por lo que tendrá que agregarlo usted mismo. Más sobre esto en un momento.

Con los paquetes, le indica a rpm-ostree que instale el paquete de vigilancia. Excluya el archivo watchdog.conf y reemplácelo con el del directorio personalizado usando remove-files y add-files. Ahora simplemente habilite el servicio de vigilancia y estará listo para comenzar.

Todas las opciones de archivos de árbol disponibles están disponibles en el documentación oficial de RPM-OSTree.

Agregar otro repositorio RPM

En su configuración inicial, el OSTree solo usa el inicial Fedora Repositorio de 34 paquetes. Añade el Fedora 34 Repositorio de actualizaciones también. Para hacerlo, agregue el siguiente archivo a su directorio personalizado.

./custom/fedora-34-updates.repo
[fedora-34-updates]
name=Fedora 34 - $basearch - Updates
#baseurl=https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f34&arch=$basearch
enabled=1
repo_gpgcheck=0
type=rpm
gpgcheck=1
#metadata_expire=7d
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-34-$basearch
skip_if_unavailable=False

Ahora dile a rpm-ostree en la especificación de tu Remix que incluya este repositorio. Utilice la sección de repositorios del archivo de árbol.

./custom/treefile.json
{
  ...
  "repos": [
      "fedora-34",
      "fedora-34-updates"
  ],
  ...
}

Construye tu propio Fedora Remezcla de IoT

Tiene todo lo que necesita para construir su primer sistema de archivos basado en ostree. A estas alturas ya configuraste una cierta estructura de proyecto, descargaste el Fedora Especificaciones upstream de IoT, y agregó algunas personalizaciones e inicializó los repositorios de ostree. Todo lo que necesita hacer ahora es juntar todo y crear un sabor agradable. Fedora Salsa IoT Remix.

cp ./.fedora-iot-spec/* .tmp/
cp ./custom/* .tmp/

Combine los scripts de posprocesamiento del Fedora Fuentes ascendentes de IoT y su directorio personalizado.

cat "./.fedora-iot-spec/treecompose-post.sh" "./custom/treecompose-post.sh" > ".tmp/treecompose-post.merged.sh"
chmod +x ".tmp/treecompose-post.merged.sh"

¿Recuerda que especificó treecompose-post.merged.sh como secuencia de comandos de posprocesamiento anteriormente en treefile.json? De ahí viene este archivo.

Tenga en cuenta que todos los archivos (unidades systemd, scripts, configuraciones) mencionados en ostree.json ahora están disponibles en .tmp. Esta carpeta es el contexto de compilación al que están relacionadas todas las referencias.

Está a solo un comando de iniciar su primera compilación de un Fedora Internet de las Cosas Ahora, inicie la compilación con el comando de árbol de composición rpm-ostree. Ahora tome una taza de café, disfrute y espere a que termine la construcción. Eso puede demorar entre 5 y 10 minutos, según el hardware de su host. ¡Hasta luego!

sudo rpm-ostree compose tree --unified-core --cachedir=".cache" --repo=".build-repo" --write-commitid-to="$COMMIT_FILE" ".tmp/treefile.json"

Prepárese para el despliegue

Oh, erm, ¿ya regresaste? Ejem. ¡Bien! – El .build-repo ahora almacena un árbol de sistema de archivos completo de alrededor de 700 a 800 MB de datos comprimidos. Lo último que debe hacer antes de considerar poner esto en la red e implementarlo en su(s) dispositivo(s) (al menos por ahora) es agregar una confirmación con un asunto y metadatos de confirmación arbitrarios y llevar el resultado a la implementación. repositorio

sudo ostree --repo=".deploy-repo" pull-local ".build-repo" "OSTreeBeard/stable/x86_64"

El repositorio de implementación ahora se puede colocar en cualquier servidor web de servicio de archivos y luego se puede usar como un nuevo control remoto ostree… en teoría. Todavía no abordaré el tema de la seguridad de los controles remotos Ostree. Sin embargo, como consejo inicial: siempre firme los compromisos de OSTree con GPG para garantizar la autenticidad de sus actualizaciones. Aparte de eso, solo es cuestión de agregar la configuración remota en su objetivo y usar rpm-ostree rebase para cambiar a este Remix.

Como última cosa antes de salir a hacer cosas al aire libre (como tomar aire fresco, tomar el sol, tomar un helado o lo que sea), eche un vistazo al nuevo sistema de archivos para asegurarse de que todo esté en su lugar.

Explora el sistema de archivos

Use las referencias de ostree para enumerar las referencias disponibles en el repositorio o en su sistema.

$ ostree --repo=".deploy-repo" refs
OSTreeBeard/stable/x86_64

Eche un vistazo a las confirmaciones de una referencia con el registro de ostree.

$ ostree --repo=".deploy-repo" log OSTreeBeard/stable/x86_64
commit 849c0648969c8c2e793e5d0a2f7393e92be69216e026975f437bdc2466c599e9
ContentChecksum:  bcaa54cc9d8ffd5ddfc86ed915212784afd3c71582c892da873147333e441b26
Date:  2021-07-27 06:45:36 +0000
Version: 34
(no subject)

Enumere el contenido del sistema de archivos ostree con ostree ls.

$ ostree --repo=".build-repo" ls OSTreeBeard/stable/x86_64
d00755 0 0      0 /
l00777 0 0      0 /bin -> usr/bin
l00777 0 0      0 /home -> var/home
l00777 0 0      0 /lib -> usr/lib
l00777 0 0      0 /lib64 -> usr/lib64
l00777 0 0      0 /media -> run/media
l00777 0 0      0 /mnt -> var/mnt
l00777 0 0      0 /opt -> var/opt
l00777 0 0      0 /ostree -> sysroot/ostree
l00777 0 0      0 /root -> var/roothome
l00777 0 0      0 /sbin -> usr/sbin
l00777 0 0      0 /srv -> var/srv
l00777 0 0      0 /tmp -> sysroot/tmp
d00755 0 0      0 /boot
d00755 0 0      0 /dev
d00755 0 0      0 /proc
d00755 0 0      0 /run
d00755 0 0      0 /sys
d00755 0 0      0 /sysroot
d00755 0 0      0 /usr
d00755 0 0      0 /var
$ ostree --repo=".build-repo" ls OSTreeBeard/stable/x86_64 /usr/etc/watchdog.conf
-00644 0 0    208 /usr/etc/watchdog.conf

Tenga en cuenta que el archivo watchdog.conf se encuentra en /usr/etc/watchdog.conf. En la implementación arrancada, se encuentra en /etc/watchdog.conf como de costumbre.

A dónde ir desde aquí?

Dio un paso valiente en la construcción de un personalizado Fedora IoT en su máquina local. Primero te presenté los conceptos y el vocabulario para que pudieras entender dónde estabas y hacia dónde querías ir. Luego se aseguró de que todas las herramientas estuvieran en su lugar. Observó los modos y la mecánica del repositorio de ostree antes de analizar una configuración típica de ostree. Para animarlo y hacerlo un poco más interesante, creó un servicio adicional y una configuración lista para funcionar en su(s) dispositivo(s). Para ello añadiste el Fedora Actualiza el repositorio de RPM y luego inicia el proceso de compilación. Por último, pero no menos importante, empaquetó el resultado en un formato listo para colocarse en algún lugar de la red.

Hay muchos más temas que cubrir. Podría explicar cómo configurar un NGINX para servir a los controles remotos de ostree de manera efectiva. O cómo garantizar la seguridad y autenticidad del sistema de archivos y actualizaciones a través de firmas GPG. Además, cómo se modifica manualmente el sistema de archivos y qué herramientas están disponibles para construir el sistema de archivos. También hay más que explicar sobre cómo probar el Remix y cómo crear imágenes flasheables y medios de instalación.

Déjame saber en los comentarios lo que piensas y lo que te importa. Dime qué te gustaría leer a continuación. Si ya construiste Fedora IoT, también estoy feliz de leer sus historias.

Referencias

Related Posts