これは、ARMターゲットで実行するためにnixosを横切るWIPです。
最新リリースのクローン:
git clone -b 0.7.0 --recursive --shallow-submodules https://github.com/illegalprime/nixos-on-arm.git
cd nixos-on-arm
このリポジトリは、異なるボードが書かれている場合にさまざまなボードを構築できるように再編成されました。使用を構築するには:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/BOARD_TYPE
-I image=images/NIX_CONFIGURATION
このリポジトリはTravisを使用して、新鮮なキャシックスキャッシュを保持します。これを使用してビルドを高速化できます。
# 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-armed多くのことが画像のサイズに影響し、最近ではそれを最小限に抑えるために多くの作業が行われました。
x86残骸を誤って画像に入れることから除去するためにはまだ多くのことをしなければなりません(patchshebangs nixos/nixpkgs#33956 ./check-contamination.sh result更新など)。
画像サイズの内訳については、画像の概要を参照してください。
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
現在、 images/ap-puns WiFi PunsのAPビーコンを送信するサービスを提供しています。これは、すぐに何かを実行するように構成された独自のOSを構築する方法を示すデモです。 (USB wifiドングルが必要であることに注意してください。ラリンクチップセットにカーネルモジュールを含めました)
一般的なLinuxをインストールし、ターゲットでサービスを自分で構成するよりもはるかに優れていると思います。
Unifiコントローラーを起動する画像を作成できるため、購入する必要がありません。これは、このコントローラーを使用して余分なメモリと処理能力を使用するUnifiルーターまたはAPがある場合に便利です。現在、ビーグルボーンでテストされています:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
ビーグルボーンは遅いため、起動するのに時間がかかる可能性があります。
両方のRaspberry Pi Zerosが現在サポートされています!クールなOTG機能が付属しています:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
これにより、USBポートを介してシリアルを介してRaspberry Piに電力を供給およびアクセスできます。電源ポートではなく、データポートにマイクロUSBケーブルを接続してください。
SDカードのサイズを変更してスペース全体を埋めるため、最初のブーツは時間がかかります。そのため、シリアルデバイス(通常は/dev/ttyACM0 )が表示されるまでに時間がかかる場合があります。
また、USBポートをイーサネットアダプターに変換して画像を構築することもできます。
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
それをSDカード(「インストール」セクション)にコピーし、プラグインし、起動するのを待って、イーサネットデバイスとして表示するまで、次に次のように表示されます。
Raspberry Pi 2は、1GBのRAMを備えた32ビットのQuad Core @ 900MHz ARMV7ボードです。 Raspberry Pi 2用に構築でき、Nixopsで動作します!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
Raspberry Pi 3は、1GBのRAMを備えた64ビットクアッドコア @ 1.2GHz ARMV8ボードです。また、802.11n WiFiと10/100イーサネットポートも組み込まれています。 Bluetoothはまだこのプラットフォームでは機能していません。 Raspberry Pi 3用に構築でき、Nixopsで動作します!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-3
-I image=images/nixops
これは取り組むべき非常に興味深いボードであり、Jumpnow/Meta-Odroid-C2から多くの支援が取られました。これは、U-Bootを構築し、署名し、ベンダー固有のブートローダーコードと結合する方法の良い例です。これは、Secure-Bootおよび64ビットのアームボードのためのかなり良い参照実装です。それを構築する:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
私はまだこのボード用のSDバーナーの構築を実装していませんが、それは簡単に行う必要があり、EMMCを購入すると実装されます。
@deadlokoのおかげで、これのボード構成が上陸しました!私はこのボードを所有していないので、すべてのリリースでテストすることはできませんが、ビーグルボーンに似ているはずです。それを構築する:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/toradex_apalis_imx6
-I image=images/mini
bmapここで本当に便利です( nix-shell -p bmap-tools )。
sudo bmaptool copy --nobmap result/sd-image/*.img /dev/sdX
あなたの画像がすべてアイロンをかけたら、あなたはそれをあなたのボード上のより永続的な場所、つまりEMMCに保管したいかもしれません。このタイプのストレージは、SDカードのように簡単に取り外すことができないため、素晴らしいですが、アクセスするのは難しいです。
SDカードポートと運が良ければ、このリポジトリは、EMMCに別のイメージを起動および燃やすSDカード画像を構築する出力( outputsのディレクトリ)を定義します。通常の-I image=オプションで焼き付けたい画像を指定します。
bmaptoolを使用して、より速く、整合性チェックを持っている画像を燃やし、ファイルシステムを必ず同期します。また、画像をバーナー画像に安全にコピーできるように圧縮します。
あなたがしなければならないのは、 burner出力を使用することだけです:
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
結果をSDカードに燃やし(SDカードの燃焼を参照)、ブートに入れます。このボードのLEDが構成されている場合、次のパターンのいずれかが表示されます。
(ビーグルボーンでは、 USERボタンを押し続け、電源を接続する必要があることに注意してください。EMMCにすでにブートローダーがある場合は、SDカードに起動してください)
ボードの定義を書いている場合は、この機能のサポートを有効にしたい場合があります。CrossPKGS crosspkgs/modules/hardware/burnerモジュールにオプションを実装するだけです。
ddへのパス(EMMCデバイスのパス)ddが呼び出される前に実行するスクリプトまた、 crosspkgs/modules/hardware/ledsモジュールのLEDを定義することもできます。これは、バーナースクリプトがステータスを表示するために使用するものです。 LEDは、 /sys/class/leds/ディレクトリのディレクトリの名前にすぎません。
具体的な例が必要な場合は、 beaglebone画像定義をご覧ください。
Nixopsのサポートはこちらです!つまり、再フラッシュせずにすべてのデバイスを管理できます!
ベース画像をSDカードに燃やすには(この画像には、新しい構成を保存するためのSSHと大きなブートパーティションが含まれています):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
NixopsはSSHキーのみをサポートしているため、起動して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最後に、デバイスのnixopsデプロイメントを作成します( iotをあらゆるものに変更できます):
nixops create ./nixops.nix -d iot
これで、いくつかの新しい構成でボードを更新する準備ができました! IP環境変数をデバイスに設定してnixops deployを使用してください(ここでは、元のnixops画像にap-puns画像を展開します):
IP=YOUR_DEVICES_IP
nixops deploy
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
-d iot
シリアル接続にアクセスできる場合は、ブーツで世代を選択できます。
------------------------------------------------------------
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:
それ以外の場合、SDカードを取り出して、ブートパーティションで/extlinux/extlinux.confファイルを手動で編集できます。そのファイルのDEFAULT nixos-default DEFAULT nixos-42に置き換えて、第42世代から一時的に起動します。
物事がうまくいかない場合は、ビルドの特定の部分をテストする必要がある場合がありますが、このリポジトリは整理されているため、簡単に行うことができます。
dhcpが壊れていたとしましょう。そのパッケージを次のように構築できます。
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
pkgs.dhcp
同様に、次のようなdhcpのビルドプロセスを検査するためにシェルにドロップできます。
nix-shell --pure .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
-A pkgs.dhcp
次に、 nix-shellでgenericBuildを呼び出して、そのパッケージを構築するだけです。
最終的な構成値やその他のものを検査したい場合は、 replにドロップできます。
nix repl .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
次に、変数configにシステム構成が含まれます。
いくつかの画像は、ユースケースを備えた本格的なデモであり、他の画像はあなたがあなた自身の画像を作成するための単なるテンプレートです。
(サイズはビーグルボーンビルドに基づいています)
| 名前 | サイズ | 説明 |
|---|---|---|
| ベース | > 2GB | クロスビルドに必要なNIX構成の最小変更 |
| ミニ | 584MB | polkit 、 udisks 、 containersなど、ほとんどの非クリティカルなサービスがオフになっているベースよりも小さくなります。 |
| マイクロ | 564MB | ミニよりも小さく、一度フラッシュすることを意図しており、直接更新されません(ただし、別の画像をフラッシュすることで更新されます) |
| SSH | 584MB | ミニに基づいていますが、SSHアクセスがあります |
microイメージは今のところそれほどマイクロではありませんが、うまくいけばすぐにそうなるでしょう。これは、nixユーティリティやデーモン、小さなカーネル、および一般的にボード上で実行するために必要な最小限を持たないことを意図しています。現在、それはmini画像とそれほど違いはありません。
aircrack-ngを使用して、しゃれの名前で偽のAPビーコンを送信しますインスピレーションのために、現在開いている問題または何をする必要があるかを見てください。それ以外の場合は、それを試して、見つけたときに修正を加えてください。最終的に、ここで終わるすべての修正は上流に送信され、すべてのnixpkgs利益を得ることができます。
または、それを直接上流に送信して、問題にコミットをリンクすると、ここでチェリーピックされる可能性があります。
nixユーティリティ!nix-channel --update