From 5e3882d20766a3958692ca266d50d9ab4f1662a1 Mon Sep 17 00:00:00 2001 From: Samuel Dionne-Riel Date: Tue, 11 May 2021 18:50:21 -0400 Subject: [PATCH] Change how this is built --- build.sh | 16 ---- configuration.nix | 24 ----- default.nix | 46 +++++++--- nixos/sd-image-aarch64.nix | 46 ---------- nixos/sd-image.nix | 176 ------------------------------------- 5 files changed, 35 insertions(+), 273 deletions(-) delete mode 100755 build.sh delete mode 100644 configuration.nix delete mode 100644 nixos/sd-image-aarch64.nix delete mode 100644 nixos/sd-image.nix diff --git a/build.sh b/build.sh deleted file mode 100755 index 14ffdea..0000000 --- a/build.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u -PS4=" $ " - -# Ugh, I would have liked to do it through a simpler `nix-build`, but as this -# needs to set `NIX_PATH` for use of `` imports, this is the better -# way to go. - -set -x -exec env -i \ - NIXPKGS_ALLOW_UNFREE=1 \ - NIX_PATH="nixpkgs=channel:nixos-unstable" \ - "$(command -v nix-build)" \ - system.nix -A config.system.build.sdImage "$@" diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index 79bae76..0000000 --- a/configuration.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, pkgs, lib, ... }: - -let - uboot = pkgs.uBootPinebookProExternalFirst; -in -{ - imports = [ - - - - ./nixos/sd-image-aarch64.nix - ./pinebook_pro.nix - ]; - - sdImage = { - manipulateImageCommands = '' - (PS4=" $ "; set -x - dd if=${uboot}/idbloader.img of=$img bs=512 seek=64 conv=notrunc - dd if=${uboot}/u-boot.itb of=$img bs=512 seek=16384 conv=notrunc - ) - ''; - compressImage = lib.mkForce false; - }; -} diff --git a/default.nix b/default.nix index 009941d..1566fda 100644 --- a/default.nix +++ b/default.nix @@ -1,17 +1,41 @@ -{ - pkgs ? import { - overlays = [ - (import ./overlay.nix) - ]; - } -}: +{ pkgs ? import {} }: +let pkgs' = pkgs; in let - pkgs' = if builtins.currentSystem == "aarch64-linux" - then pkgs - else pkgs.pkgsCross.aarch64-multiplatform + pkgs = if !isCross then pkgs' else pkgs'.pkgsCross.aarch64-multiplatform; + inherit (pkgs) lib; + isCross = builtins.currentSystem != "aarch64-linux"; + + fromPkgs = path: pkgs.path + "/${path}"; + evalConfig = import (fromPkgs "nixos/lib/eval-config.nix"); + + buildConfig = { system ? "aarch64-linux", configuration ? {} }: + evalConfig { + modules = (lib.optional isCross ./cross-hacks.nix) + ++ [ + "${./.}/pinebook_pro.nix" + configuration + (lib.mkIf isCross { + nixpkgs.crossSystem = { + system = "aarch64-linux"; + }; + }) + ]; + } ; + base = buildConfig {}; in { - pkgs = pkgs'; + inherit (base) pkgs; + + kernel_latest = base.pkgs.linuxPackages_pinebookpro_latest.kernel; + kernel_lts = base.pkgs.linuxPackages_pinebookpro_lts.kernel; + + isoImage = (buildConfig { + configuration = (fromPkgs "nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"); + }).config.system.build.isoImage; + + sdImage = (buildConfig { + configuration = (fromPkgs "nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix"); + }).config.system.build.sdImage; } diff --git a/nixos/sd-image-aarch64.nix b/nixos/sd-image-aarch64.nix deleted file mode 100644 index b55bee3..0000000 --- a/nixos/sd-image-aarch64.nix +++ /dev/null @@ -1,46 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - extlinux-conf-builder = - import { - pkgs = pkgs.buildPackages; - }; -in -{ - imports = [ - ./sd-image.nix - ]; - - boot.loader.grub.enable = false; - boot.loader.generic-extlinux-compatible.enable = true; - - boot.consoleLogLevel = lib.mkDefault 7; - - boot.kernelParams = [ - "cma=32M" - #"console=ttyS0,115200n8" "console=ttyAMA0,115200n8" "console=tty0" - - "console=ttyS2,1500000n8" - "earlycon=uart8250,mmio32,0xff1a0000" "earlyprintk" - - # The last console parameter will be where the boot process will print - # its messages. Comment or move abot ttyS2 for better serial debugging. - "console=tty0" - ]; - - services.mingetty.serialSpeed = [ 1500000 115200 57600 38400 9600 ]; - - boot.initrd.availableKernelModules = [ - ]; - - sdImage = { - populateRootCommands = '' - mkdir -p ./files/boot - ${extlinux-conf-builder} -t 3 -c ${config.system.build.toplevel} -d ./files/boot - ''; - }; - - # the installation media is also the installation target, - # so we don't want to provide the installation configuration.nix. - installer.cloneConfig = false; -} diff --git a/nixos/sd-image.nix b/nixos/sd-image.nix deleted file mode 100644 index 32633ca..0000000 --- a/nixos/sd-image.nix +++ /dev/null @@ -1,176 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; - -let - rootfsImage = pkgs.callPackage ({ - inherit (config.sdImage) storePaths; - #compressImage = false; - populateImageCommands = config.sdImage.populateRootCommands; - volumeLabel = "NIXOS_SD"; - } // optionalAttrs (config.sdImage.rootPartitionUUID != null) { - uuid = config.sdImage.rootPartitionUUID; - }); -in -{ - options.sdImage = { - imageName = mkOption { - default = "${config.sdImage.imageBaseName}-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.img"; - description = '' - Name of the generated image file. - ''; - }; - - imageBaseName = mkOption { - default = "nixos-sd-image"; - description = '' - Prefix of the name of the generated image file. - ''; - }; - - storePaths = mkOption { - type = with types; listOf package; - example = literalExample "[ pkgs.stdenv ]"; - description = '' - Derivations to be included in the Nix store in the generated SD image. - ''; - }; - - rootPartitionUUID = mkOption { - type = types.nullOr types.str; - default = null; - example = "14e19a7b-0ae0-484d-9d54-43bd6fdc20c7"; - description = '' - UUID for the main NixOS partition on the SD card. - ''; - }; - - gapSize = mkOption { - type = types.int; - # This is probably way too much... meh. - default = 30; - internal = true; - description = '' - Gap before the partition, to put u-boot into. - ''; - }; - - populateRootCommands = mkOption { - example = literalExample "''\${extlinux-conf-builder} -t 3 -c \${config.system.build.toplevel} -d ./files/boot''"; - description = '' - Shell commands to populate the ./files directory. - All files in that directory are copied to the - root (/) partition on the SD image. Use this to - populate the ./files/boot (/boot) directory. - ''; - }; - - manipulateImageCommands = mkOption { - default = ":"; - description = '' - Additional manipulations to do to the image. - For example, embedding the right u-boot. - ''; - }; - - compressImage = mkOption { - type = types.bool; - default = true; - description = '' - Whether the SD image should be compressed using - bzip2. - ''; - }; - - }; - - config = { - fileSystems = { - "/" = { - device = "/dev/disk/by-label/NIXOS_SD"; - fsType = "ext4"; - }; - }; - - sdImage.storePaths = [ config.system.build.toplevel ]; - - system.build.sdImage = pkgs.callPackage ({ stdenv, dosfstools, e2fsprogs, - mtools, libfaketime, utillinux, bzip2/*, zstd*/ }: stdenv.mkDerivation { - name = config.sdImage.imageName; - - nativeBuildInputs = [ dosfstools e2fsprogs mtools libfaketime utillinux bzip2 /*zstd */]; - - inherit (config.sdImage) compressImage; - - buildCommand = '' - mkdir -p $out/nix-support $out/sd-image - export img=$out/sd-image/${config.sdImage.imageName} - - echo "${pkgs.stdenv.buildPlatform.system}" > $out/nix-support/system - if test -n "$compressImage"; then - echo "file sd-image $img.bz2" >> $out/nix-support/hydra-build-products - else - echo "file sd-image $img" >> $out/nix-support/hydra-build-products - fi - - #echo "Decompressing rootfs image" - #zstd -d --no-progress "${rootfsImage}" -o ./root-fs.img - cp -v "${rootfsImage}" ./root-fs.img - - # Gap in front of the first partition, in MiB - gap=8 - - # Create the image file sized to fit the gap and /, plus slack. - rootSizeBlocks=$(du -B 512 --apparent-size ./root-fs.img | awk '{ print $1 }') - gapSizeBlocks=$((${toString config.sdImage.gapSize} * 1024 * 1024 / 512)) - imageSize=$((rootSizeBlocks * 512 + gapSizeBlocks * 512 + gap * 1024 * 1024)) - truncate -s $imageSize $img - - # type=b is 'W95 FAT32', type=83 is 'Linux'. - # The "bootable" partition is where u-boot will look file for the bootloader - # information (dtbs, extlinux.conf file). - sfdisk $img <