Dies ist ein WIP -to Cross -Compile -Nixos, um auf Armzielen zu laufen.
Klonen Sie die neueste Veröffentlichung:
git clone -b 0.7.0 --recursive --shallow-submodules https://github.com/illegalprime/nixos-on-arm.git
cd nixos-on-arm
Dieses Repository wurde neu organisiert, um verschiedene Boards erstellen zu können, wenn/wenn verschiedene geschrieben werden. Gebrauch aufbauen:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/BOARD_TYPE
-I image=images/NIX_CONFIGURATION
Dieses Repository verwendet Travis, um einen frischen Cachix -Cache zu behalten, mit dem Sie Ihre Builds beschleunigen können:
# install cachix if you haven't already
nix-env -iA cachix -f https://cachix.org/api/v1/install
# use this cache when building
cachix use cross-armedViele Dinge beeinflussen die Bildgröße und in letzter Zeit wurde viel Arbeit geleistet, um sie zu minimieren:
Viele Dinge müssen noch getan werden, um X86-Überreste aus versehentlich in das Bild zu gelangen (wie beispielsweise die Aktualisierung von Patchshebangs Nixos/Nixpkgs#33956), und Verunreinigungen können durch Laufen überprüft werden ./check-contamination.sh result .
Die Bildübersicht finden Sie in den Bildern.
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
Derzeit bietet images/ap-puns einen Dienst, der AP Beacons von WLAN-Wortspielen versendet. Dies ist eine Demo, die zeigt, wie man ein eigenes Betriebssystem erstellen kann, das so konfiguriert ist, dass sie etwas Out-of-the-Box machen. (Beachten Sie, dass Sie einen USB -WLAN -Dongle benötigen. Ich habe Kernel -Module für den Ralink -Chipsatz eingeschlossen.)
Ich denke, es ist ordentlich, viel besser, als ein generisches Linux zu installieren und Dienste selbst auf dem Ziel zu konfigurieren.
Sie können ein Bild erstellen, das einen Unifi -Controller startet, damit Sie keinen kaufen müssen! Dies ist nützlich, wenn Sie einen Unifi -Router oder AP haben, der diesen Controller für zusätzliche Speicher- und Verarbeitungsleistung verwendet. Derzeit mit dem Beaglebone getestet:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
Da das Beaglebone langsam ist, kann es eine Weile dauern, bis der Beute eingebettet ist.
Beide Raspberry Pi -Zeros werden jetzt unterstützt! Sie kommen mit coolen OTG -Funktionen:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
Auf diese Weise können Sie über einen seriellen USB -Anschluss über Serien mit Strom versorgen und auf den Raspberry Pi zugreifen. Stellen Sie sicher, dass Sie Ihr MICRO -USB -Kabel in den Datenanschluss und nicht in den Stromanschluss anschließen.
Der erste Stiefel dauert länger, da es die SD -Karte verändert, um den gesamten Speicherplatz zu füllen, sodass das serielle Gerät (normalerweise /dev/ttyACM0 ) länger dauert, bis es angezeigt wird.
Sie können auch ein Bild mit dem USB -Anschluss in einen Ethernet -Adapter erstellen, sodass Sie SSH in den Raspberry Pi anschließen können, indem Sie es in Ihren Computer anschließen:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
Kopieren Sie es in eine SD -Karte ("Installation" -Abschnitt), schließen Sie sie an, warten Sie, bis sie startete und als Ethernet -Gerät angezeigt wird, dann nur:
Der Raspberry Pi 2 ist ein 32-Bit-Quad-Core- @ 900-MHz-ARMV7-Board mit 1 GB RAM. Sie können für den Raspberry Pi 2 bauen und es funktioniert mit Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
Der Raspberry Pi 3 ist ein 64-Bit-Quad-Core- @ 1,2-GHz-ARMV8-Board mit 1 GB RAM. Es verfügt außerdem über eingebaute 802.11n WiFi und 10/100 Ethernet-Port. Bluetooth funktioniert noch nicht auf dieser Plattform. Sie können für den Raspberry Pi 3 bauen und es funktioniert mit Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-3
-I image=images/nixops
Dies war ein wirklich interessantes Board, an dem man arbeiten konnte, und es wurde viel Hilfe von Jumpnow/Meta-odroid-C2 genommen. Es ist ein gutes Beispiel dafür, wie man U-Boot erstellt, es unterschreibt und mit dem herstellerspezifischen Bootloadercode kombiniert. Dies ist eine ziemlich gute Referenzimplementierung für Secure-Boot- und 64-Bit-ARM-Boards. Bauen es mit:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
Ich habe noch keinen SD -Brenner für dieses Board implementiert, aber es sollte unkompliziert sein und er wird implementiert, sobald ich einen EMMC kaufe.
Board -Konfigurationen dafür landete nur dank @deadloko! Ich besitze dieses Board nicht, daher kann ich es nicht auf jeder Veröffentlichung testen, aber es sollte dem BeagleBone ähnlich sein. Bauen es mit:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/toradex_apalis_imx6
-I image=images/mini
bmap ist hier sehr praktisch ( nix-shell -p bmap-tools ).
sudo bmaptool copy --nobmap result/sd-image/*.img /dev/sdX
Wenn Ihr Bild nur ausgebügelt ist, möchten Sie es vielleicht an einem dauerhafteren Ort auf Ihrem Board aufbewahren: dem EMMC . Diese Art von Speicher ist großartig, da sie nicht wie eine SD -Karte leicht abgelehnt werden kann, aber es ist schwieriger, zugreifen zu können.
Wenn Sie über einen SD -Kartenanschluss und einen EMMC haben, das Sie haben, definiert dieses Repository eine Ausgabe (ein Verzeichnis in outputs ), das ein SD -Kartenbild erstellt, das ein anderes Bild auf das EMMC startet und verbrennt. Sie geben das Bild an, das Sie mit der üblichen -I image= Option verbrennen möchten.
Wir verwenden jetzt bmaptool , um das Bild zu verbrennen, über das schneller ist, die Integritätsprüfungen aufweist und synchronisiert das Dateisystem. Wir komprimieren das Bild auch so, dass es sicher auf das Brennerbild kopiert werden kann.
Alles, was Sie tun müssen, ist die burner zu verwenden:
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Verbrennen Sie das Ergebnis auf eine SD -Karte (siehe Burning auf einer SD -Karte) und starten Sie hinein. Wenn LEDs für diese Karte konfiguriert wurden, sollten Sie eines der folgenden Muster sehen:
(Beachten Sie, dass Sie auf dem Beaglebone die Taste USER nach unten halten müssen, Strom anschließen und dann in Ihre SD -Karte starten müssen, wenn bereits ein Bootloader auf dem EMMC vorhanden ist.)
Wenn Sie die Definition für ein Board schreiben, möchten Sie möglicherweise die Unterstützung für diese Funktion aktivieren, um dies zu tun, um die Optionen im crosspkgs/modules/hardware/burner -Modul zu implementieren, das zum Zeitpunkt des Schreibens nur aus wenigen Optionen besteht:
dd )dd ausgeführt werden soll, wird aufgerufen Sie können auch LEDs im crosspkgs/modules/hardware/leds -Modul definieren, mit dem das Burner -Skript seinen Status anzeigt. LEDs sind nur Namen von Verzeichnissen im /sys/class/leds/ verzeichnis.
Schauen Sie sich die beaglebone -Bilddefinition an, wenn Sie ein konkretes Beispiel wünschen.
Nixops -Unterstützung ist hier! Das heißt, Sie können alle Ihre Geräte ohne Wiedergabed verwalten!
Um ein Basisbild auf eine SD -Karte zu verbrennen (dieses Bild enthält nur SSH und eine größere Startpartition, um neue Konfigurationen in zu speichern):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Starten Sie es dann und fügen Sie Ihre SSH -Taste hinzu, da Nixops nur SSH -Tasten unterstützt:
# copy over the key
ssh-copy-id root@IP_ADDRESS
# load your SSH keys into your environment
eval $( ssh-agent -s )
ssh-add ~ /.ssh/id_rsa Erstellen Sie schließlich eine Nixops -Bereitstellung für Ihre Geräte ( iot kann in alles geändert werden):
nixops create ./nixops.nix -d iot
Jetzt können Sie Ihr Board mit einigen neuen Konfigurationen aktualisieren! Verwenden Sie einfach nixops deploy mit der IP Umgebungsvariablen, die auf Ihr Gerät eingestellt ist (hier stellen wir das ap-puns -Bild über unser ursprüngliches nixops Bild bereit):
IP=YOUR_DEVICES_IP
nixops deploy
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
-d iot
Wenn Sie Zugriff auf eine serielle Verbindung haben, können Sie Ihre Generation im Boot auswählen:
------------------------------------------------------------
1: NixOS - Default
2: NixOS - Configuration 2 (2019-09-16 14:23 - 19.09pre-git)
3: NixOS - Configuration 1 (1970-01-01 01:32 - 19.09pre-git)
Enter choice:
Andernfalls können Sie die SD -Karte herausnehmen und die Datei /extlinux/extlinux.conf in der Boot -Partition manuell bearbeiten. Ersetzen Sie DEFAULT nixos-default durch DEFAULT nixos-42 in dieser Datei, um vorübergehend aus der 42. Generation zu starten.
Manchmal, wenn etwas schief geht, müssen Sie bestimmte Teile des Builds testen, dieses Repository ist so organisiert, dass es einfach ist, dies zu tun.
Nehmen wir an, dhcp war kaputt, Sie können nur dieses Paket erstellen mit:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
pkgs.dhcp
In ähnlicher Weise können Sie in eine Shell fallen, um den Build -Prozess für dhcp zu inspizieren, wie:
nix-shell --pure .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
-A pkgs.dhcp
Dann können Sie einfach genericBuild im nix-shell anrufen und das Erstellen dieses Pakets simulieren.
Wenn Sie die endgültigen Konfigurationswerte und andere Dinge inspizieren möchten, können Sie in eine repl eingehen:
nix repl .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
Anschließend enthält die config die Systemkonfiguration.
Einige Bilder sind vollwertige Demos mit einem Anwendungsfall, andere sind nur Vorlagen, mit denen Sie Ihre eigenen Bilder erstellen können.
(Die Größe basiert auf Beaglebone -Builds)
| Name | Größe | Beschreibung |
|---|---|---|
| Base | > 2GB | Die kleinsten Änderungen an der NIX-Konfiguration, die zum Kreuzbau erforderlich ist |
| Mini | 584MB | kleiner als die Basis, mit den meisten nicht kritischen Diensten wie polkit , udisks , containers usw. |
| Mikro | 564MB | kleiner als mini, soll einmal geblitzt und nicht direkt aktualisiert werden (aber durch Blinken eines anderen Bildes aktualisiert werden) |
| ssh | 584MB | basierend auf Mini, aber mit SSH -Zugang |
Das micro ist momentan nicht sehr Mikro, aber hoffentlich wird es bald sein. Es soll keine NIX -Dienstprogramme oder den Daemon, einen kleineren Kernel und im Allgemeinen das bloße Minimum haben, das für den Laufen auf dem Brett benötigt wird. Derzeit unterscheidet es sich nicht sehr vom mini -Bild.
aircrack-ng um gefälschte AP Beacons mit Wortspielnamen zu senden Inspiration untersuchen Sie entweder die aktuell offenen Probleme oder was getan werden muss. Probieren Sie es ansonsten einfach nixpkgs und geben Sie Korrekturen ein, sobald Sie sie finden.
Senden Sie es alternativ direkt stromaufwärts und verknüpfen Sie das Commit in einem Problem. Es wird möglicherweise hier kirschverpackt.
nix -Dienstprogramme!nix-channel --update