這是交叉編譯尼克斯的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保留新的Cachix緩存,您可以使用它來加快構建速度:
# 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雙關語的AP信標。這是一個演示,顯示如何構建自己的操作系統,以配置為開箱即用的事情。 (請注意,您需要一個USB WiFi加密狗,我包括Ralink芯片組的內核模塊)
我認為這是整潔的,比安裝通用Linux和在目標上配置服務要好得多。
您可以構建啟動Unifi控制器的圖像,因此您不必購買!如果您有一個Unifi路由器或AP,則使用此控制器來獲得額外的內存和處理能力,這將很有用。目前已通過Beaglebone進行了測試:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/unifi
由於Beaglebone很慢,因此可能需要一段時間才能啟動。
現在支持兩個覆盆子Pi Zeros!它們具有涼爽的OTG功能:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-serial
這將使您通過串行通過其USB端口訪問Raspberry Pi。確保將Micro USB電纜插入數據端口,而不是電源端口。
第一個引導需要更長的時間,因為它調整了SD卡以填充其整個空間,因此串行設備(通常/dev/ttyACM0 )可能需要更長的時間才能顯示。
您還可以將USB端口變成以太網適配器的圖像構建圖像,通過將其插入計算機中,使您可以將SSH插入Raspberry Pi:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-zerow
-I image=images/rpi0-otg-ether
將其複製到SD卡(“安裝”部分),將其插入,等待啟動並顯示為以太網設備,然後僅:
Raspberry Pi 2是32位四核 @ 900MHz ARMV7板,帶有1GB RAM。您可以為Raspberry Pi 2構建,並且可以與Nixops一起使用!
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/raspberrypi-2
-I image=images/nixops
Raspberry Pi 3是64位四核 @ 1.2GHz ARMV8板,帶有1GB RAM。它還具有內置的802.11N WiFi和10/100以太網端口。藍牙在此平台上尚不正常。您可以為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,簽名並將其與特定於供應商的引導加載器代碼相結合的一個很好的例子。這是針對安全靴和64位臂板的很好的參考實現。用:
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/odroid-c2
-I image=images/ssh
我尚未為該董事會建立SD燃燒器,但是它應該很簡單,一旦我購買EMMC,它將實施。
@deadloko的董事會配置剛剛降落!我不擁有該板,因此我不能在每個版本上對其進行測試,但是它應該與Beaglebone相似。用:
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,則您很幸運,此存儲庫定義了一個輸出( outputs目錄),該輸出將構建SD卡映像,該SD卡映像將啟動並將另一個圖像刻錄到EMMC上。您指定要使用通常的-I image=選項燃燒的圖像。
現在,我們使用bmaptool來燃燒更快的圖像,具有完整性檢查,並確保同步文件系統。我們還會壓縮圖像,以便可以將其安全地複製到燃燒器的圖像上。
您要做的就是使用burner輸出:
nix build
-f outputs/burner
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
將結果刻錄到SD卡中(請參閱燃燒到SD卡上)並將其引導到其中。如果配置了該板的LED,則應看到以下模式之一:
(請注意,在BeagleBone上,您必須按下USER按鈕,插入電源,然後如果EMMC上的引導加載程序已經有啟動加載程序,請啟動到您的SD卡中)
如果您正在編寫板的定義,則可能需要啟用此功能的支持,這樣做,只需在crosspkgs/modules/hardware/burner模塊中實現選項,該選項在寫作時僅包含幾個選項:
dd的路徑進入(EMMC設備的路徑)dd之前要運行的腳本您還可以在crosspkgs/modules/hardware/leds模塊中定義LED,燃燒器腳本將用來顯示其狀態。 LED只是/sys/class/leds/ directory中目錄的名稱。
如果您想要一個具體示例,請查看beaglebone圖像定義。
Nixops支持在這裡!這意味著您可以在不重新刷新的情況下管理所有設備!
要開始將基本圖像刻錄到SD卡上(此圖像僅包含SSH和更大的啟動分區以存儲新配置):
nix build -f .
-I nixpkgs=nixpkgs
-I machine=machines/beaglebone
-I image=images/nixops
然後啟動它並添加您的SSH鍵,因為NixOps僅支持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
現在,您可以通過一些新的配置來更新董事會!只需將nixops deploy與設置的IP環境變量部署到您的設備的設置(在這裡我們通過原始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包含系統配置。
有些圖像是帶有用例的成熟演示,而另一些圖像只是您可以使用自己的圖像的模板。
(大小基於Beaglebone構建)
| 姓名 | 尺寸 | 描述 |
|---|---|---|
| 根據 | > 2GB | 交叉構建所需的NIX配置的最小變化 |
| 小型的 | 584MB | 比基礎小,大多數非關鍵服務都關閉了,例如polkit , udisks , containers et。 |
| 微 | 564MB | 小於Mini,本來要閃爍一次並且不會直接更新(但通過閃爍另一個圖像而更新) |
| SSH | 584MB | 基於mini,但訪問SSH |
micro圖像現在不是很微型,但希望很快會很快。它的意思是沒有任何Nix實用程序或守護程序,較小的內核,以及通常需要在板上運行所需的最低限度。目前,它與mini圖像沒有很大的不同。
aircrack-ng發送帶有雙關語名稱的假AP信標為了啟發,要么查看當前的問題,要么需要做什麼。否則,只需嘗試一下,然後將其放入修復程序中,最終將在此處發送的所有修復程序都會在上游發送,以便所有的nixpkgs都可以受益。
另外,將其直接發送到上游並將其鏈接在問題中,可能會在這裡挑選櫻桃。
nix實用程序!nix-channel --update通道也未與圖像打包