Este é um WIP para cruzar o Nixos para executar alvos de braço.
Clone o lançamento mais recente:
git clone -b 0.7.0 --recursive --shallow-submodules https://github.com/illegalprime/nixos-on-arm.git
cd nixos-on-arm
Este repositório foi reorganizado para poder construir diferentes placas se/quando diferentes forem escritas. Para construir o uso:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/BOARD_TYPE
-I image=images/NIX_CONFIGURATION
Este repositório usa o Travis para manter um cache fresco de Cachix, que você pode usar para acelerar suas construções:
# 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-armedMuitas coisas afetam o tamanho da imagem e, recentemente, muito trabalho foi feito para minimizá -lo:
Muitas coisas ainda precisam ser feitas para remover os remanescentes x86 de entrar acidentalmente na imagem (como atualizar patchshebangs nixos/nixpkgs#33956) e os contaminantes podem ser verificados pela execução ./check-contamination.sh result .
Veja a visão geral das imagens para obter uma quebra de tamanhos de imagem.
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
Atualmente, images/ap-puns fornece um serviço que enviará os beacons da AP de trocadilhos wifi. Esta é uma demonstração mostrando como se pode construir seu próprio sistema operacional configurado para fazer algo pronto para uso. (Observe que você precisa de um dongle wifi USB, incluí módulos de kernel para o chipset Ralink)
Eu acho que é legal, muito melhor do que instalar um Linux genérico e configurar os serviços no alvo.
Você pode construir uma imagem que inicia um controlador unifi para não precisar comprar um! Isso é útil se você tiver um roteador ou AP Unifi, que usa esse controlador para memória extra e poder de processamento. Atualmente testado com o BeagleBone:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
Como o BeagleBone é lento, pode demorar um pouco para inicializar.
Ambos os zeros de Raspberry Pi são suportados agora! Eles vêm com recursos legais de OTG:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
Isso permitirá que você acesse e acesse o Raspberry Pi via serial por meio de sua porta USB. Certifique -se de conectar seu cabo micro USB na porta de dados, não na porta de energia.
A primeira bota leva mais tempo, pois redimensiona o cartão SD para preencher todo o seu espaço; portanto, o dispositivo serial (geralmente /dev/ttyACM0 ) pode levar mais tempo para aparecer.
Você também pode construir uma imagem com a porta USB em um adaptador Ethernet, permitindo que você ssh no Raspberry Pi, conectando -o ao seu computador:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
Copie -o para um cartão SD (seção 'Instalação'), conecte -o, aguarde a inicialização e apareça como um dispositivo Ethernet e, em seguida, apenas:
O Raspberry Pi 2 é uma placa quad core de 32 bits a 900MHz ARMV7 com 1 GB de RAM. Você pode construir para o Raspberry Pi 2 e funciona com o NixOps!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
O Raspberry Pi 3 é uma placa quad core de 64 bits a 1,2GHz ARMV8 com 1 GB de RAM. Ele também possui Wi-Fi 802.11n embutido e 10/100 Ethernet Port. O Bluetooth ainda não funciona nessa plataforma. Você pode construir para o Raspberry Pi 3 e funciona com o NixOps!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-3
-I image=images/nixops
Este foi um quadro realmente interessante para trabalhar e muita ajuda foi retirada do Jumpnow/Meta-Odroid-C2. É um bom exemplo de como criar U-Boot, assiná-lo e unir com o código do carregador de inicialização específico do fornecedor. Esta é uma implementação de referência muito boa para placas de braço segura e de 64 bits. Construa com:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
Ainda não implementei a construção de um queimador de SD para esta placa, mas deve ser fácil de fazer e será implementado assim que eu comprar um EMMC.
Configurações de placa para isso acabaram de aterrar graças a @deadloko! Eu não possuo esta placa, por isso não posso testá -la em todos os lançamentos, mas deve ser semelhante ao BeagleBone. Construa com:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/toradex_apalis_imx6
-I image=images/mini
bmap é realmente útil aqui ( nix-shell -p bmap-tools ).
sudo bmaptool copy --nobmap result/sd-image/*.img /dev/sdX
Quando a sua imagem estiver resolvida, você pode armazená -la em um local mais permanente em sua placa: o EMMC . Esse tipo de armazenamento é ótimo porque não pode ser facilmente desalojado como um cartão SD, mas é mais difícil de acessar.
Se você possui uma porta de cartão SD e um EMMC, está com sorte, este repositório define uma saída (um diretório em outputs ) que criará uma imagem do cartão SD que inicializará e queimará outra imagem no EMMC. Você especifica a imagem que deseja queimada com a opção -I image= usual.
Agora usamos bmaptool para queimar a imagem sobre a qual é mais rápida, possui verificações de integridade e certifique -se de sincronizar o sistema de arquivos. Também comprimimos a imagem para que ela possa ser copiada com segurança para a imagem do queimador.
Tudo o que você precisa fazer é usar a saída burner :
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Queime o resultado em um cartão SD (consulte queima em um cartão SD) e inicialize nele. Se os LEDs para esta placa foram configurados, você deverá ver um dos seguintes padrões:
(Observe que no BeagleBone você deve segurar o botão USER , conectar a energia e, em seguida, solte o seu cartão SD se já houver um carregador de inicialização no EMMC)
Se você estiver escrevendo a definição de uma placa, pode querer permitir o suporte a esse recurso, para fazer isso, basta implementar as opções no módulo crosspkgs/modules/hardware/burner , que no momento da redação consiste em apenas algumas opções:
dd a imagem (o caminho do dispositivo EMMC)dd seja chamado Você também pode definir LEDs no módulo crosspkgs/modules/hardware/leds , que o script do queimador usará para exibir seu status. LEDs são apenas nomes de diretórios no /sys/class/leds/ diretório.
Dê uma olhada na definição da imagem beaglebone , se quiser um exemplo concreto.
O suporte do NixOps está aqui! Isso significa que você pode gerenciar todos os seus dispositivos sem reverter!
Para começar a gravar uma imagem base em um cartão SD (esta imagem contém SSH e uma partição de inicialização maior para armazenar novas configurações):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Em seguida, inicialize -o e adicione sua tecla SSH, porque o NixOps suporta apenas as 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 Por fim, crie uma implantação do NixOps para seus dispositivos ( iot pode ser alterada para qualquer coisa):
nixops create ./nixops.nix -d iot
Agora você está pronto para atualizar seu quadro com algumas novas configurações! Basta usar nixops deploy com a variável de ambiente IP definido para o seu dispositivo (aqui implantamos a imagem ap-puns sobre nossa imagem original nixops ):
IP=YOUR_DEVICES_IP
nixops deploy
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
-d iot
Se você tiver acesso a uma conexão serial, poderá escolher sua geração na inicialização:
------------------------------------------------------------
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:
Caso contrário, você poderá retirar o cartão SD e editar manualmente o arquivo /extlinux/extlinux.conf na partição de inicialização. Substitua DEFAULT nixos-default por DEFAULT nixos-42 nesse arquivo para inicializar temporariamente a partir da 42ª geração.
Às vezes, quando a coisa dá errado, você precisa testar partes específicas da compilação, esse repositório é organizado para que seja fácil fazer isso.
Digamos que dhcp tenha sido quebrado, você pode construir exatamente esse pacote com:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
pkgs.dhcp
Da mesma forma, você pode cair em um shell para inspecionar o processo de construção do dhcp como:
nix-shell --pure .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
-A pkgs.dhcp
Em seguida, você pode ligar para genericBuild na nix-shell e simular a construção desse pacote.
Se você deseja inspecionar os valores finais de configuração e outras coisas, pode entrar em um repl :
nix repl .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
Em seguida, a config variável contém a configuração do sistema.
Algumas imagens são demos de pleno direito com um caso de uso, e outras são apenas modelos para você criar suas próprias imagens.
(O tamanho é baseado fora do beagleBone construções)
| Nome | Tamanho | Descrição |
|---|---|---|
| base | > 2GB | as menores mudanças na configuração do nix necessária para a construção cruzada |
| Mini | 584MB | Menor que a base, com a maioria dos serviços não críticos desligados, como polkit , udisks , containers , etc. |
| micro | 564MB | menor que o mini, destinado a ser piscado uma vez e não é atualizado diretamente (mas atualizado piscando outra imagem) |
| ssh | 584MB | baseado em mini, mas com acesso ssh |
A micro imagem não é muito micro agora, mas espero que seja em breve. Destina -se para não ter nenhum utilitário nix ou o daemon, um kernel menor e geralmente o mínimo necessário para correr no quadro. Atualmente, não é muito diferente da mini imagem.
aircrack-ng para enviar beacons de AP falsos com nomes de trocadilhos Para inspiração, observe as questões atualmente abertas ou o que precisa ser feito. Caso contrário, experimente e coloque as correções ao encontrar, em última análise, todas as correções que acabam aqui serão enviadas a montante para que todos os nixpkgs possam se beneficiar.
Como alternativa, envie-o diretamente a montante e vincule o compromisso em um problema, ele será escolhido aqui.
nix !nix-channel --update