Ini adalah WIP untuk melintasi kompilasi nixos untuk menjalankan target lengan.
Klon rilis terbaru:
git clone -b 0.7.0 --recursive --shallow-submodules https://github.com/illegalprime/nixos-on-arm.git
cd nixos-on-arm
Repositori ini direorganisasi untuk dapat membangun papan yang berbeda jika/ketika yang berbeda ditulis. Untuk membangun penggunaan:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/BOARD_TYPE
-I image=images/NIX_CONFIGURATION
Repositori ini menggunakan Travis untuk menyimpan cache Cachix yang baru, yang dapat Anda gunakan untuk mempercepat bangunan Anda:
# 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-armedBanyak hal mempengaruhi ukuran gambar dan baru -baru ini banyak pekerjaan telah dilakukan untuk meminimalkannya:
Banyak hal yang masih harus dilakukan untuk menghapus sisa-sisa x86 dari secara tidak sengaja masuk ke gambar (seperti memperbarui PatchShangs Nixos/Nixpkgs#33956), dan kontaminan dapat diperiksa dengan menjalankan ./check-contamination.sh result .
Lihat ikhtisar gambar untuk rincian ukuran gambar.
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
Saat ini images/ap-puns menyediakan layanan yang akan mengirimkan AP Beacons dari WiFi Puns. Ini adalah demo yang menunjukkan bagaimana seseorang dapat membangun OS mereka sendiri yang dikonfigurasi untuk melakukan sesuatu di luar kotak. (Catatan Anda memerlukan dongle wifi USB, saya memasukkan modul kernel untuk chipset ralink)
Saya pikir itu rapi, jauh lebih baik daripada memasang Linux generik dan mengkonfigurasi layanan sendiri pada target.
Anda dapat membangun gambar yang memulai pengontrol unifi sehingga Anda tidak perlu membelinya! Ini berguna jika Anda memiliki router unifi atau AP, yang menggunakan pengontrol ini untuk memori ekstra dan daya pemrosesan. Saat ini diuji dengan BeagleBone:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
Karena BeagleBone lambat, mungkin perlu beberapa saat untuk boot.
Kedua Zeros Raspberry Pi didukung sekarang! Mereka datang dengan fitur OTG keren:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
Ini akan memungkinkan Anda memberi daya dan mengakses Raspberry Pi melalui serial melalui port USB. Pastikan untuk mencolokkan kabel USB mikro Anda di port data, bukan port daya.
Boot pertama memakan waktu lebih lama karena mengubah ukuran kartu SD untuk mengisi seluruh ruangnya, sehingga perangkat serial (biasanya /dev/ttyACM0 ) mungkin membutuhkan waktu lebih lama untuk muncul.
Anda juga dapat membangun gambar dengan mengubah port USB menjadi adaptor Ethernet, membiarkan Anda SSH ke Raspberry Pi dengan memasukkannya ke komputer Anda:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
Salin ke kartu SD (bagian 'Menginstal'), colokkan, tunggu sampai boot dan muncul sebagai perangkat Ethernet, lalu hanya:
Raspberry Pi 2 adalah papan quad core @ 900MHz 32-bit dengan 1GB RAM. Anda dapat membangun untuk Raspberry Pi 2, dan berfungsi dengan nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
Raspberry Pi 3 adalah papan quad core @ 1.2GHz 64-bit dengan 1GB RAM. Ini juga memiliki wifi 802.11n bawaan, dan port Ethernet 10/100. Bluetooth belum bekerja pada platform ini. Anda dapat membangun untuk Raspberry Pi 3, dan berfungsi dengan nixops!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-3
-I image=images/nixops
Ini adalah papan yang sangat menarik untuk dikerjakan dan banyak bantuan diambil dari Jumpnow/Meta-odroid-C2. Ini adalah contoh yang baik tentang cara membangun u-boot, menandatanganinya, dan memasangkannya dengan kode boot loader khusus vendor. Ini adalah implementasi referensi yang cukup baik untuk papan lengan yang aman dan 64-bit. Bangun dengan:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
Saya belum mengimplementasikan membangun pembakar SD untuk papan ini, tetapi harus mudah dilakukan dan itu akan diimplementasikan setelah saya membeli EMMC.
Konfigurasi papan untuk ini baru saja mendarat berkat @Deadloko! Saya tidak memiliki papan ini sehingga saya tidak dapat mengujinya pada setiap rilis, tetapi harus mirip dengan BeagleBone. Bangun dengan:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/toradex_apalis_imx6
-I image=images/mini
bmap sangat berguna di sini ( nix-shell -p bmap-tools ).
sudo bmaptool copy --nobmap result/sd-image/*.img /dev/sdX
Ketika gambar Anda semua disetrika, Anda mungkin ingin menyimpannya di tempat yang lebih permanen di papan Anda: EMMC . Jenis penyimpanan ini bagus karena tidak dapat dengan mudah dikeluarkan seperti kartu SD, tetapi lebih sulit untuk diakses.
Jika Anda memiliki port kartu SD dan EMMC Anda beruntung, repositori ini mendefinisikan output (direktori dalam outputs ) yang akan membangun gambar kartu SD yang akan boot dan membakar gambar lain ke EMMC. Anda menentukan gambar yang ingin Anda bakar dengan opsi -I image= biasa.
Kami sekarang menggunakan bmaptool untuk membakar gambar yang lebih cepat, memiliki pemeriksaan integritas, dan memastikan untuk menyinkronkan sistem file. Kami juga mengompres gambar sehingga dapat disalin dengan aman ke gambar burner.
Yang harus Anda lakukan adalah menggunakan output burner :
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Bakar hasilnya ke kartu SD (lihat terbakar ke kartu SD) dan boot ke dalamnya. Jika LED untuk papan ini dikonfigurasi, Anda akan melihat salah satu pola berikut:
(Perhatikan bahwa di BeagleBone Anda harus menahan tombol USER , colokkan daya, lalu biarkan boot ke kartu SD Anda jika sudah ada boot loader di EMMC)
Jika Anda menulis definisi untuk papan, Anda mungkin ingin mengaktifkan dukungan untuk fitur ini, untuk melakukannya cukup mengimplementasikan opsi di crosspkgs/modules/hardware/burner , yang pada saat penulisan hanya terdiri dari beberapa opsi:
dd gambar ke (jalur perangkat EMMC)dd dipanggil Anda juga dapat mendefinisikan LED dalam modul crosspkgs/modules/hardware/leds , yang akan digunakan skrip burner untuk menampilkan statusnya. LED hanyalah nama direktori di /sys/class/leds/ direktori.
Lihatlah definisi gambar beaglebone jika Anda menginginkan contoh konkret.
Dukungan nixops ada di sini! Itu artinya Anda dapat mengelola semua perangkat Anda tanpa mengarahkan kembali!
Untuk mulai membakar gambar dasar ke kartu SD (gambar ini hanya berisi SSH dan partisi boot yang lebih besar untuk menyimpan konfigurasi baru di):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
Kemudian boot dan tambahkan tombol SSH Anda karena NixOps hanya mendukung tombol 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 Akhirnya, buat penyebaran nixops untuk perangkat Anda ( iot dapat diubah menjadi apa pun):
nixops create ./nixops.nix -d iot
Sekarang Anda siap memperbarui papan Anda dengan beberapa konfigurasi baru! Cukup gunakan nixops deploy dengan Variabel Lingkungan IP diatur ke perangkat Anda (di sini kami menggunakan gambar ap-puns di atas gambar nixops asli kami):
IP=YOUR_DEVICES_IP
nixops deploy
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/ap-puns
-d iot
Jika Anda memiliki akses ke koneksi serial, Anda dapat memilih generasi Anda saat 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:
Kalau tidak, Anda dapat mengambil kartu SD dan secara manual mengedit file /extlinux/extlinux.conf di partisi boot. Ganti DEFAULT nixos-default dengan DEFAULT nixos-42 di file itu untuk boot sementara dari generasi ke-42.
Terkadang ketika ada yang salah, Anda perlu menguji bagian -bagian tertentu dari build, repositori ini diatur sehingga mudah untuk melakukannya.
Katakanlah dhcp rusak, Anda dapat membangun paket itu dengan:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
pkgs.dhcp
Demikian pula Anda dapat mampir ke shell untuk memeriksa proses pembangunan untuk dhcp seperti:
nix-shell --pure .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
-A pkgs.dhcp
Kemudian Anda bisa memanggil genericBuild di nix-shell dan mensimulasikan bangunan itu.
Jika Anda ingin memeriksa nilai konfigurasi akhir dan hal -hal lainnya, Anda dapat masuk ke repl :
nix repl .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/mini
Kemudian config variabel berisi konfigurasi sistem.
Beberapa gambar adalah demo penuh dengan kasing penggunaan, dan yang lain hanya templat untuk Anda membangun gambar Anda sendiri.
(Ukurannya didasarkan pada pembangun BeagleBone)
| Nama | Ukuran | Keterangan |
|---|---|---|
| basis | > 2GB | Perubahan terkecil pada konfigurasi NIX yang diperlukan untuk membangun silang |
| mini | 584MB | Lebih kecil dari pangkalan, dengan sebagian besar layanan non-kritis dimatikan, seperti polkit , udisks , containers , dll. |
| mikro | 564MB | lebih kecil dari mini, dimaksudkan untuk diseberangi sekali dan tidak diperbarui secara langsung (tetapi diperbarui dengan mem -flash gambar lain) |
| ssh | 584MB | berdasarkan mini tetapi dengan akses ssh |
Gambar micro tidak terlalu mikro sekarang, tapi semoga akan segera. Ini dimaksudkan untuk tidak memiliki utilitas nix atau daemon, kernel yang lebih kecil, dan umumnya minimum yang diperlukan untuk berjalan di papan tulis. Saat ini, tidak jauh berbeda dari gambar mini .
aircrack-ng untuk mengirimkan suar AP palsu dengan nama pun Untuk inspirasi, lihat masalah saat ini terbuka atau apa yang perlu dilakukan. Kalau tidak, coba saja dan masukkan perbaikan saat Anda menemukannya, pada akhirnya semua perbaikan yang berakhir di sini akan dikirim ke hulu sehingga semua nixpkgs dapat memperoleh manfaat.
Atau, kirim langsung ke hulu dan tautkan komit dalam suatu masalah, itu mungkin akan dipilih ceri di sini.
nix !nix-channel --update