这是交叉编译尼克斯的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通道也未与图像打包