Il s'agit d'un WIP pour compiler les Nixos pour fonctionner sur des cibles du bras.
Clone la dernière version:
git clone -b 0.7.0 --recursive --shallow-submodules https://github.com/illegalprime/nixos-on-arm.git
cd nixos-on-arm
Ce référentiel a été réorganisé pour pouvoir construire différentes cartes si / quand différentes sont écrites. Pour construire une utilisation:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/BOARD_TYPE
-I image=images/NIX_CONFIGURATION
Ce référentiel utilise Travis pour conserver un cache de cachix frais, que vous pouvez utiliser pour accélérer vos versions:
# 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-armedBeaucoup de choses affectent la taille de l'image et récemment beaucoup de travail a été effectué pour le minimiser:
Beaucoup de choses doivent encore être faites pour supprimer les restes x86 de pénétrer accidentellement dans l'image (comme la mise à jour de PatchShebangs Nixos / NixPKGS # 33956), et les contaminants peuvent être vérifiés en exécutant ./check-contamination.sh result .
Voir la vue d'ensemble des images pour une ventilation des tailles d'image.
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
Actuellement, images/ap-puns fournit un service qui enverra des balises AP de jeux de mots WiFi. Ceci est une démo montrant comment on peut construire son propre système d'exploitation configuré pour faire quelque chose de prêt à l'emploi. (Remarque Vous avez besoin d'un dongle WiFi USB, j'ai inclus des modules de noyau pour le chipset Ralink)
Je pense que c'est bien, bien mieux que d'installer un Linux générique et de configurer les services vous-même sur la cible.
Vous pouvez construire une image qui démarre un contrôleur Unifi afin que vous n'ayez pas à en acheter un! Ceci est utile si vous avez un routeur Unifi ou AP, qui utilise ce contrôleur pour une mémoire supplémentaire et une puissance de traitement. Actuellement testé avec le Beaglebone:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
Étant donné que le Beaglebone est lent, cela pourrait prendre un certain temps pour démarrer.
Les deux Raspberry Pi Zeros sont soutenus maintenant! Ils sont livrés avec des fonctionnalités cool OTG:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
Cela vous permettra d'alimenter et d'accéder au Raspberry Pi via la série via son port USB. Assurez-vous de brancher votre câble micro USB dans le port de données, pas le port d'alimentation.
Le premier démarrage prend plus de temps car il redimensionne la carte SD pour remplir tout son espace, de sorte que le périphérique série (généralement /dev/ttyACM0 ) peut prendre plus de temps à apparaître.
Vous pouvez également construire une image avec transforme le port USB en un adaptateur Ethernet, vous permettant de SSH dans le Raspberry Pi en le branchant sur votre ordinateur:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
Copiez-le sur une carte SD (section «Installation»), branchez-la, attendez qu'il démarque et apparaissent en tant que périphérique Ethernet, puis simplement:
Le Raspberry Pi 2 est un quad Core 32 bits @ 900 MHz ARMV7 avec 1 Go de RAM. Vous pouvez construire pour le Raspberry Pi 2, et cela fonctionne avec Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
Le Raspberry Pi 3 est un quad Core 64 bits à la carte ARMV8 à 1,2 GHz avec 1 Go de RAM. Il dispose également du WiFi 802.11n intégré et du port Ethernet 10/100. Bluetooth ne fonctionne pas encore sur cette plate-forme. Vous pouvez construire pour le Raspberry Pi 3, et cela fonctionne avec Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-3
-I image=images/nixops
C'était une planche vraiment intéressante sur laquelle travailler et beaucoup d'aide a été tirée de Jumpnow / Meta-odroid-C2. C'est un bon exemple de la façon de construire U-Boot, de le signer et de le coupler avec du code de chargeur de démarrage spécifique au fournisseur. Il s'agit d'une assez bonne implémentation de référence pour les cartes Secure-Boot et 64 bits. Construisez-le avec:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
Je n'ai pas encore implémenté la création d'un brûleur SD pour ce tableau, mais il devrait être simple à faire et il sera mis en œuvre une fois que j'aurai acheté un EMMC.
Les configurations de la carte pour cela viennent d'atterrir grâce à @Deadloko! Je ne possède pas ce tableau, donc je ne peux pas le tester à chaque version, mais il devrait être similaire à la Beaglebone. Construisez-le avec:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/toradex_apalis_imx6
-I image=images/mini
bmap est vraiment pratique ici ( nix-shell -p bmap-tools ).
sudo bmaptool copy --nobmap result/sd-image/*.img /dev/sdX
Lorsque votre image est entièrement aplanie, vous voudrez peut-être la stocker dans un endroit plus permanent sur votre planche: l' EMMC . Ce type de stockage est excellent car il ne peut pas être facilement délogé comme une carte SD, mais il est plus difficile d'accès.
Si vous avez un port de carte SD et un EMMC que vous êtes de la chance, ce référentiel définit une sortie (un répertoire en outputs ) qui créera une image de carte SD qui démarrera et brûlera une autre image sur l'EMMC. Vous spécifiez l'image que vous souhaitez brûler avec l'option -I image= habituelle.
Nous utilisons maintenant bmaptool pour brûler l'image sur laquelle est plus rapide, a des vérifications d'intégrité et nous assure de synchroniser le système de fichiers. Nous compressons également l'image afin qu'elle puisse être copiée en toute sécurité sur l'image du brûleur.
Tout ce que vous avez à faire est d'utiliser la sortie burner :
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Brûlez le résultat sur une carte SD (voir Burning sur une carte SD) et démarrez-y. Si les LED pour cette carte ont été configurées, vous devriez voir l'un des modèles suivants:
(Notez que sur le BeagleBone, vous devez maintenir le bouton USER , brancher l'alimentation, puis laisser aller pour démarrer dans votre carte SD s'il y a déjà un chargeur de démarrage sur l'EMMC)
Si vous écrivez la définition d'une carte, vous voudrez peut-être activer la prise en charge de cette fonctionnalité, pour le faire, implémentez simplement les options dans le module crosspkgs/modules/hardware/burner , qui au moment de la rédaction ne se compose que de quelques options:
dd à l'image dans (le chemin du périphérique EMMC)dd ne soit appelé Vous pouvez également définir les LED dans le module crosspkgs/modules/hardware/leds , que le script de brûleur utilisera pour afficher son état. Les LED ne sont que les noms des répertoires dans le /sys/class/leds/ répertoire.
Jetez un œil à la définition de l'image beaglebone si vous voulez un exemple concret.
Le support Nixops est là! Cela signifie que vous pouvez gérer tous vos appareils sans re-flash!
Pour commencer à brûler une image de base sur une carte SD (cette image contient simplement SSH et une partition de démarrage plus grande pour stocker de nouvelles configurations):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Ensuite, démarrez-le et ajoutez votre touche SSH car Nixops ne prend en charge que les touches SSH:
# 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 Enfin, créez un déploiement Nixops pour vos appareils ( iot peut être changé en n'importe quoi):
nixops create ./nixops.nix -d iot
Vous êtes maintenant prêt à mettre à jour votre carte avec de nouvelles configurations! Utilisez simplement nixops deploy avec la variable d'environnement IP définie sur le celui de votre appareil (ici nous déploiez l'image ap-puns sur notre image nixops d'origine):
IP=YOUR_DEVICES_IP
nixops deploy
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
-d iot
Si vous avez accès à une connexion série, vous pouvez choisir votre génération sur Boot:
------------------------------------------------------------
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:
Sinon, vous pouvez retirer la carte SD et modifier manuellement le fichier /extlinux/extlinux.conf dans la partition de démarrage. Remplacez DEFAULT nixos-default par DEFAULT nixos-42 dans ce fichier pour démarrer temporairement à partir de la 42e génération.
Parfois, lorsque vous tournez mal, vous devez tester des parties spécifiques de la construction, ce référentiel est organisé, il est donc facile de le faire.
Disons que dhcp a été cassé, vous pouvez construire juste ce package avec:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
pkgs.dhcp
De même, vous pouvez tomber dans un shell pour inspecter le processus de construction pour dhcp comme:
nix-shell --pure .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
-A pkgs.dhcp
Ensuite, vous pouvez simplement appeler genericBuild dans le nix-shell et simuler la construction de ce package.
Si vous vouliez inspecter les valeurs de configuration finales et autres choses, vous pouvez tomber dans un repl :
nix repl .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
Ensuite, la config variable contient la configuration du système.
Certaines images sont des démos à part entière avec un cas d'utilisation, et d'autres ne sont que des modèles pour que vous puissiez créer vos propres images.
(la taille est basée sur les constructions de Beaglebone)
| Nom | Taille | Description |
|---|---|---|
| base | > 2 Go | Les plus petites modifications de la configuration NIX nécessaires pour se transformer |
| mini | 584 Mo | Plus petit que la base, avec la plupart des services non critiques désactivés, comme polkit , udisks , containers , etc. |
| micro | 564 Mo | Plus petit que Mini, destiné à être flassé une fois et non mis à jour directement (mais mis à jour en clignotant une autre image) |
| ssh | 584 Mo | Basé sur mini mais avec l'accès SSH |
La micro image n'est pas très micro pour le moment, mais j'espère que ce sera bientôt. Il est destiné à ne pas avoir de services publics nix ou le démon, un noyau plus petit, et généralement le strict minimum nécessaire pour courir sur la planche. Actuellement, ce n'est pas très différent de la mini image.
aircrack-ng pour envoyer de fausses balises AP avec des noms de jeu de mots Pour l'inspiration, consultez les problèmes actuellement ouverts ou ce qui doit être fait. Sinon, essayez simplement et mettez des correctifs au fur et à mesure que vous les trouvez, en fin de compte, tous les correctifs qui se retrouvent ici seront envoyés en amont afin que tous les nixpkgs puissent en bénéficier.
Alternativement, envoyez-le directement en amont et liez le commit dans un problème, il sera peut-être sélectionné en cerise ici.
nix !nix-channel --update emballés avec l'image pour une raison