Raspberry Pi

From NixOS Wiki
Revision as of 18:51, 21 August 2017 by imported>Makefu

Also consult the page NixOS_on_ARM

Status

The code in master as of June 2015 should be able to prepare a bootable NixOS for Raspberry PI 2.


There are still some drawbacks:

  • NixOS does not provide a /boot/config.txt (the FAT32 partition).

Making NixOS work in the Raspberry PI 2 is mainly the result of the recent work of ambro718, Dezgeg and viric (#nixos@irc.freenode.net).

Download

If you want to test, you can flash this 4GB SD image (DOS partition table + fat32 + ext4 rootfs): link (viric) Template:Notice

Then you should be able to nixos-rebuild any configuration.nix changes.

The image is the result of a "nixos-install" alone. No root password has been set, and it does not include a nixpkgs checkout or channel.

In fact I (viric) created the FS into a NBD, not a real SD, to create this image.

Related Details

For reference, below is the content of /etc/nixos/configuration.nix extracted from the image:

{pkgs, config, ...}:

{
  boot.consoleLogLevel = 7;
  boot.loader.grub.enable = false;
  boot.loader.generationsDir.enable = false;
  boot.loader.raspberryPi.enable = true;
  boot.loader.raspberryPi.version = 2;
  boot.extraTTYs = [ "ttyAMA0" ];
  boot.kernelPackages = pkgs.linuxPackages_rpi;
  boot.kernelParams = [
    #"coherent_pool=6M"
    #"smsc95xx.turbo_mode=N"
    "dwc_otg.lpm_enable=0"
    "console=ttyAMA0,115200"
    "root=/dev/mmcblk0p2"
    "rootfstype=ext4"
    "rootwait"
    #"console=tty1"
    "elevator=deadline"
  ];

  # cpufrequtils doesn't build on ARM
  powerManagement.enable = false;

  fileSystems = {
    "/boot" = { device = "/dev/mmcblk0p1"; fsType = "vfat"; };
    "/" = { device = "/dev/mmcblk0p2"; fsType = "ext4"; };
  };

  networking.hostName = "pi2";
  services.xserver.enable = false;
  services.openssh = {
    enable = true;
    # permitRootLogin = "yes";
    passwordAuthentication = false;
  };

  services.nixosManual.enable = false;

  nixpkgs.config = {
    platform = pkgs.platforms.raspberrypi2;
    allowUnfree = true;
  };

  nix.buildCores = 4;
  nix.binaryCaches = [ ];

  environment.systemPackages = [
    pkgs.ts
    pkgs.vim
    pkgs.git
    pkgs.pigz
    pkgs.cjdns
    pkgs.pv
    pkgs.lzop
    pkgs.nbd
  ];

  security.sudo = {
    enable = true;
    wheelNeedsPassword = false;
  };
}