Este es un WIP para compilar a Nixos para correr en objetivos del brazo.
Clon el último lanzamiento:
git clone -b 0.7.0 --recursive --shallow-submodules https://github.com/illegalprime/nixos-on-arm.git
cd nixos-on-arm
Este repositorio se reorganizó para poder construir diferentes tablas si/cuando se escriben diferentes. Para construir el uso:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/BOARD_TYPE
-I image=images/NIX_CONFIGURATION
Este repositorio usa Travis para mantener un caché de Cachix fresco, que puede usar para acelerar sus compilaciones:
# 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-armedMuchas cosas afectan el tamaño de la imagen y recientemente se ha realizado mucho trabajo para minimizarlo:
Todavía hay que hacer muchas cosas para eliminar los restos x86 de ingresar accidentalmente a la imagen (como actualizar PatchShebangs Nixos/Nixpkgs#33956), y los contaminantes se pueden ver ./check-contamination.sh result .
Vea la descripción general de las imágenes para obtener un desglose de los tamaños de imagen.
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
Actualmente, images/ap-puns proporciona un servicio que enviará a AP Beacons of Wifi Puns. Esta es una demostración que muestra cómo se puede construir su propio sistema operativo configurado para hacer algo fuera de la caja. (Tenga en cuenta que necesita un dongle wifi USB, incluí módulos de núcleo para el chipset Ralink)
Creo que es bueno, mucho mejor que instalar un Linux genérico y configurar servicios usted mismo en el objetivo.
¡Puede construir una imagen que inicie un controlador unifi para que no tenga que comprar una! Esto es útil si tiene un enrutador unifi o AP, que utiliza este controlador para memoria adicional y potencia de procesamiento. Actualmente probado con Beaglebone:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
Como el Beaglebone es lento, podría llevar un tiempo arrancar.
¡Ambos ceros de Raspberry Pi son compatibles ahora! Vienen con características geniales de OTG:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
Esto le permitirá alimentar y acceder a la Raspberry Pi a través de la serie a través de su puerto USB. Asegúrese de conectar su cable Micro USB en el puerto de datos, no en el puerto de alimentación.
El primer arranque lleva más tiempo, ya que cambia de tamaño de la tarjeta SD para llenar todo su espacio, por lo que el dispositivo serie (generalmente /dev/ttyACM0 ) podría tardar más en aparecer.
También puede construir una imagen con el puerto USB en un adaptador Ethernet, permitiéndole SSH en la Raspberry Pi conectándolo a su computadora:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
Copiéelo a una tarjeta SD ('Instalación' de la sección), conéctela, espere a que se inicie y se presente como un dispositivo Ethernet, luego solo:
El Raspberry Pi 2 es una placa ARMV7 de 32 bits en quad nore @ 900MHz con 1 GB de RAM. ¡Puedes construir para la Raspberry Pi 2, y funciona con Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
El Raspberry Pi 3 es una placa ARMV8 de 64 bits en cuatro núcleos @ 1.2GHz con 1 GB de RAM. También tiene WiFi 802.11n incorporado y un puerto Ethernet 10/100. Bluetooth aún no funciona en esta plataforma. ¡Puedes construir para la Raspberry Pi 3, y funciona con Nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-3
-I image=images/nixops
Este fue un tablero realmente interesante para trabajar y se tomó mucha ayuda de Jumpnow/Meta-Odoid-C2. Es un buen ejemplo de cómo construir U-Boot, firmarlo y combinarlo con el código de cargador de arranque específico del proveedor. Esta es una implementación de referencia bastante buena para placas de brazo seguros y de 64 bits. Construirlo con:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
Todavía no he implementado construir un quemador SD para este tablero, pero debería ser sencillo y se implementará una vez que compre un EMMC.
¡Configuraciones de tablero para esto acaban de aterrizar gracias a @deadloko! No soy dueño de este tablero, así que no puedo probarlo en cada lanzamiento, pero debería ser similar al BeagleBone. Construirlo con:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/toradex_apalis_imx6
-I image=images/mini
bmap es realmente útil aquí ( nix-shell -p bmap-tools ).
sudo bmaptool copy --nobmap result/sd-image/*.img /dev/sdX
Cuando toda su imagen se sienta, es posible que desee almacenarla en un lugar más permanente en su tablero: el EMMC . Este tipo de almacenamiento es excelente porque no se puede desalojar fácilmente como una tarjeta SD, pero es más difícil de acceder.
Si tiene un puerto de tarjeta SD y un EMMC, tiene suerte, este repositorio define una salida (un directorio en outputs ) que construirá una imagen de tarjeta SD que arrancará y grabará otra imagen en el EMMC. Usted especifica la imagen que desea quemarse con la opción habitual -I image= .
Ahora usamos bmaptool para grabar la imagen que es más rápido, tiene verificaciones de integridad y nos aseguramos de sincronizar el sistema de archivos. También comprimimos la imagen para que pueda copiarse de forma segura a la imagen del quemador.
Todo lo que tiene que hacer es usar la salida burner :
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Quemar el resultado en una tarjeta SD (ver Burning a una tarjeta SD) y arrancarla. Si se configuraron los LED para este tablero, debería ver uno de los siguientes patrones:
(Tenga en cuenta que en BeagleBone debe mantener presionado el botón USER , enchufar la alimentación, luego dejar ir a arranque en su tarjeta SD si ya hay un cargador de arranque en el EMMC)
Si está escribiendo la definición de una placa, es posible que desee habilitar el soporte para esta función, para hacerlo, solo implementa las opciones en el módulo crosspkgs/modules/hardware/burner , que al momento de la escritura consta de solo un par de opciones:
dd la imagen en (la ruta del dispositivo EMMC)dd También puede definir LED en el módulo crosspkgs/modules/hardware/leds , que el script de quemador usará para mostrar su estado. Los LED son solo nombres de directorios en el directorio /sys/class/leds/ .
Eche un vistazo a la definición de imagen beaglebone si desea un ejemplo concreto.
¡El soporte de Nixops está aquí! ¡Eso significa que puede administrar todos sus dispositivos sin volver a flotar!
Para comenzar, grabar una imagen base en una tarjeta SD (esta imagen solo contiene SSH y una partición de arranque más grande para almacenar nuevas configuraciones en):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Luego arrance y agregue su tecla SSH porque Nixops solo admite las teclas 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 Finalmente, cree una implementación de Nixops para sus dispositivos ( iot se puede cambiar a cualquier cosa):
nixops create ./nixops.nix -d iot
¡Ahora está listo para actualizar su tablero con algunas configuraciones nuevas! Simplemente use nixops deploy con la variable de entorno IP establecida en el dispositivo de su dispositivo (aquí implementamos la imagen ap-puns en nuestra imagen original nixops ):
IP=YOUR_DEVICES_IP
nixops deploy
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
-d iot
Si tiene acceso a una conexión serie, puede elegir su generación en el arranque:
------------------------------------------------------------
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:
De lo contrario, puede sacar la tarjeta SD y editar manualmente el archivo /extlinux/extlinux.conf en la partición de arranque. Reemplace DEFAULT nixos-default con DEFAULT nixos-42 en ese archivo para arrancar temporalmente desde la generación 42.
A veces, cuando las cosas salen mal, necesitas probar partes específicas de la compilación, este repositorio está organizado, por lo que es fácil hacerlo.
Digamos que dhcp estaba roto, puede construir solo ese paquete con:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
pkgs.dhcp
Del mismo modo, puede caer en un shell para inspeccionar el proceso de compilación para dhcp como:
nix-shell --pure .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
-A pkgs.dhcp
Entonces puede llamar a genericBuild en la nix-shell y simular edificio ese paquete.
Si desea inspeccionar los valores de configuración finales y otras cosas, puede caer en una repl :
nix repl .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
Entonces la config variable contiene la configuración del sistema.
Algunas imágenes son demostraciones completas con un caso de uso, y otras son solo plantillas para que usted cree sus propias imágenes.
(El tamaño se basa en las compilaciones de Beaglebone)
| Nombre | Tamaño | Descripción |
|---|---|---|
| base | > 2GB | Los cambios más pequeños en la configuración NIX necesaria para construir |
| mini | 584 MB | más pequeño que la base, con la mayoría de los servicios no críticos apagados, como polkit , udisks , containers , etc. |
| micro | 564 MB | más pequeño que mini, destinado a ser flasheado una vez y no actualizado directamente (pero actualizado flashulando otra imagen) |
| ssh | 584 MB | basado en mini pero con acceso ssh |
La micro imagen no es muy micro en este momento, pero espero que sea pronto. Está destinado a no tener ningún utilidad nix o el demonio, un núcleo más pequeño, y generalmente el mínimo necesario para funcionar en el tablero. Actualmente, no es muy diferente de la mini imagen.
aircrack-ng para enviar balizas falsas con nombres de juegos de palabras Para inspiración, mire los problemas actualmente abiertos o lo que hay que hacer. De lo contrario, pruébelo y ponga soluciones a medida que las encuentre, en última instancia, todas las soluciones que terminan aquí se enviarán ascendente para que todos los nixpkgs puedan beneficiarse.
Alternativamente, envíelo directamente aguas arriba y vincule la confirmación en un problema, posiblemente se seleccionará aquí.
nix !nix-channel --update