Erstellen eines Ubuntu-Images für ARM „von Grund auf“
Wenn die Entwicklung gerade erst beginnt, ist oft nicht klar, welche Pakete in die Ziel-Rootfs verschoben werden.
Mit anderen Worten: Es ist noch zu früh, sich LFS, Buildroot oder Yocto (oder etwas anderes) zu schnappen, aber Sie müssen bereits damit beginnen. Für die Reichen (ich habe 4 GB eMMC in Pilotmustern) gibt es einen Ausweg, den Entwicklern eine Distribution zu verteilen, die es ihnen ermöglicht, schnell etwas zu liefern, was derzeit fehlt, und dann können wir jederzeit Paketlisten sammeln und eine Liste dafür erstellen die Ziel-Rootfs.
Dieser Artikel ist nicht neu und eine einfache Anleitung zum Kopieren und Einfügen.
Der Zweck des Artikels besteht darin, Ubuntu-RootFS für ARM-Boards zu erstellen (in meinem Fall basierend auf Colibri imx7d).
Ein Bild aufbauen
Wir stellen die Ziel-RootFS für die Replikation zusammen.
Ubuntu Base auspacken
Wir wählen die Veröffentlichung selbst aus, je nach Bedarf und unseren eigenen Vorlieben. Hier habe ich 20 gegeben.
$ 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
Überprüfung der BINFMT-Unterstützung im Kernel
Wenn Sie eine gemeinsame Distribution haben, gibt es Unterstützung für BINFMT_MISC und alles ist konfiguriert. Wenn nicht, wissen Sie sicher, wie Sie die BINFMT-Unterstützung im Kernel aktivieren.
Stellen Sie sicher, dass BINFMT_MISC im Kernel aktiviert ist:
Kernel-Header-Dateien und -Module sind eine separate Angelegenheit. Natürlich werden wir den Bootloader, den Kernel, die Module und den Gerätebaum nicht über Ubuntu installieren. Sie kommen von außen zu uns oder wir bauen sie selbst zusammen oder sie werden uns vom Plattenhersteller zur Verfügung gestellt, in jedem Fall ist dies jedoch nicht Gegenstand dieser Anleitung.
Bis zu einem gewissen Grad sind Versionsabweichungen akzeptabel, es ist jedoch besser, sie aus dem Kernel-Build zu übernehmen.
# apt install --yes linux-headers-generic
Mal sehen, was passiert ist und es hat sich einiges ergeben:
# apt clean
# du -d 0 -h / 2>/dev/null
770M /
Vergessen Sie nicht, ein Passwort festzulegen.
Das Bild verpacken
$ sudo tar -C rootfs --transform "s|^./||" --numeric-owner --owner=0 --group=0 -c ./ | tar --delete ./ | gzip > rootfs.tar.gz
Zusätzlich können wir etckeeper mit der Autopush-Einstellung installieren
Nehmen wir an, wir haben unsere Baugruppe verteilt und die Arbeit begann damit, wie wir später verschiedene Versionen unseres Systems am besten zusammenbauen können.
etckeeper kann uns helfen.
Sicherheit ist eine persönliche Angelegenheit:
Sie können bestimmte Zweige schützen
Generieren Sie für jedes Gerät einen eindeutigen Schlüssel
Wir können natürlich im Voraus Zweige auf dem Gerät erstellen (sagen wir, wir erstellen ein Skript oder einen Dienst, der beim ersten Start ausgeführt wird).