diff options
Diffstat (limited to 'nixos/modules/system/boot/loader/generic-extlinux-compatible')
3 files changed, 0 insertions, 247 deletions
diff --git a/nixos/modules/system/boot/loader/generic-extlinux-compatible/default.nix b/nixos/modules/system/boot/loader/generic-extlinux-compatible/default.nix deleted file mode 100644 index 545b594674f..00000000000 --- a/nixos/modules/system/boot/loader/generic-extlinux-compatible/default.nix +++ /dev/null @@ -1,82 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; - -let - blCfg = config.boot.loader; - dtCfg = config.hardware.deviceTree; - cfg = blCfg.generic-extlinux-compatible; - - timeoutStr = if blCfg.timeout == null then "-1" else toString blCfg.timeout; - - # The builder used to write during system activation - builder = import ./extlinux-conf-builder.nix { inherit pkgs; }; - # The builder exposed in populateCmd, which runs on the build architecture - populateBuilder = import ./extlinux-conf-builder.nix { pkgs = pkgs.buildPackages; }; -in -{ - options = { - boot.loader.generic-extlinux-compatible = { - enable = mkOption { - default = false; - type = types.bool; - description = '' - Whether to generate an extlinux-compatible configuration file - under <literal>/boot/extlinux.conf</literal>. For instance, - U-Boot's generic distro boot support uses this file format. - - See <link xlink:href="http://git.denx.de/?p=u-boot.git;a=blob;f=doc/README.distro;hb=refs/heads/master">U-boot's documentation</link> - for more information. - ''; - }; - - useGenerationDeviceTree = mkOption { - default = true; - type = types.bool; - description = '' - Whether to generate Device Tree-related directives in the - extlinux configuration. - - When enabled, the bootloader will attempt to load the device - tree binaries from the generation's kernel. - - Note that this affects all generations, regardless of the - setting value used in their configurations. - ''; - }; - - configurationLimit = mkOption { - default = 20; - example = 10; - type = types.int; - description = '' - Maximum number of configurations in the boot menu. - ''; - }; - - populateCmd = mkOption { - type = types.str; - readOnly = true; - description = '' - Contains the builder command used to populate an image, - honoring all options except the <literal>-c <path-to-default-configuration></literal> - argument. - Useful to have for sdImage.populateRootCommands - ''; - }; - - }; - }; - - config = let - builderArgs = "-g ${toString cfg.configurationLimit} -t ${timeoutStr}" - + lib.optionalString (dtCfg.name != null) " -n ${dtCfg.name}" - + lib.optionalString (!cfg.useGenerationDeviceTree) " -r"; - in - mkIf cfg.enable { - system.build.installBootLoader = "${builder} ${builderArgs} -c"; - system.boot.loader.id = "generic-extlinux-compatible"; - - boot.loader.generic-extlinux-compatible.populateCmd = "${populateBuilder} ${builderArgs}"; - }; -} diff --git a/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix b/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix deleted file mode 100644 index 576a07c1d27..00000000000 --- a/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ pkgs }: - -pkgs.substituteAll { - src = ./extlinux-conf-builder.sh; - isExecutable = true; - path = [pkgs.coreutils pkgs.gnused pkgs.gnugrep]; - inherit (pkgs) bash; -} diff --git a/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.sh b/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.sh deleted file mode 100644 index 1a0da005029..00000000000 --- a/nixos/modules/system/boot/loader/generic-extlinux-compatible/extlinux-conf-builder.sh +++ /dev/null @@ -1,157 +0,0 @@ -#! @bash@/bin/sh -e - -shopt -s nullglob - -export PATH=/empty -for i in @path@; do PATH=$PATH:$i/bin; done - -usage() { - echo "usage: $0 -t <timeout> -c <path-to-default-configuration> [-d <boot-dir>] [-g <num-generations>] [-n <dtbName>] [-r]" >&2 - exit 1 -} - -timeout= # Timeout in centiseconds -default= # Default configuration -target=/boot # Target directory -numGenerations=0 # Number of other generations to include in the menu - -while getopts "t:c:d:g:n:r" opt; do - case "$opt" in - t) # U-Boot interprets '0' as infinite and negative as instant boot - if [ "$OPTARG" -lt 0 ]; then - timeout=0 - elif [ "$OPTARG" = 0 ]; then - timeout=-10 - else - timeout=$((OPTARG * 10)) - fi - ;; - c) default="$OPTARG" ;; - d) target="$OPTARG" ;; - g) numGenerations="$OPTARG" ;; - n) dtbName="$OPTARG" ;; - r) noDeviceTree=1 ;; - \?) usage ;; - esac -done - -[ "$timeout" = "" -o "$default" = "" ] && usage - -mkdir -p $target/nixos -mkdir -p $target/extlinux - -# Convert a path to a file in the Nix store such as -# /nix/store/<hash>-<name>/file to <hash>-<name>-<file>. -cleanName() { - local path="$1" - echo "$path" | sed 's|^/nix/store/||' | sed 's|/|-|g' -} - -# Copy a file from the Nix store to $target/nixos. -declare -A filesCopied - -copyToKernelsDir() { - local src=$(readlink -f "$1") - local dst="$target/nixos/$(cleanName $src)" - # Don't copy the file if $dst already exists. This means that we - # have to create $dst atomically to prevent partially copied - # kernels or initrd if this script is ever interrupted. - if ! test -e $dst; then - local dstTmp=$dst.tmp.$$ - cp -r $src $dstTmp - mv $dstTmp $dst - fi - filesCopied[$dst]=1 - result=$dst -} - -# Copy its kernel, initrd and dtbs to $target/nixos, and echo out an -# extlinux menu entry -addEntry() { - local path=$(readlink -f "$1") - local tag="$2" # Generation number or 'default' - - if ! test -e $path/kernel -a -e $path/initrd; then - return - fi - - copyToKernelsDir "$path/kernel"; kernel=$result - copyToKernelsDir "$path/initrd"; initrd=$result - dtbDir=$(readlink -m "$path/dtbs") - if [ -e "$dtbDir" ]; then - copyToKernelsDir "$dtbDir"; dtbs=$result - fi - - timestampEpoch=$(stat -L -c '%Z' $path) - - timestamp=$(date "+%Y-%m-%d %H:%M" -d @$timestampEpoch) - nixosLabel="$(cat $path/nixos-version)" - extraParams="$(cat $path/kernel-params)" - - echo - echo "LABEL nixos-$tag" - if [ "$tag" = "default" ]; then - echo " MENU LABEL NixOS - Default" - else - echo " MENU LABEL NixOS - Configuration $tag ($timestamp - $nixosLabel)" - fi - echo " LINUX ../nixos/$(basename $kernel)" - echo " INITRD ../nixos/$(basename $initrd)" - echo " APPEND init=$path/init $extraParams" - - if [ -n "$noDeviceTree" ]; then - return - fi - - if [ -d "$dtbDir" ]; then - # if a dtbName was specified explicitly, use that, else use FDTDIR - if [ -n "$dtbName" ]; then - echo " FDT ../nixos/$(basename $dtbs)/${dtbName}" - else - echo " FDTDIR ../nixos/$(basename $dtbs)" - fi - else - if [ -n "$dtbName" ]; then - echo "Explicitly requested dtbName $dtbName, but there's no FDTDIR - bailing out." >&2 - exit 1 - fi - fi -} - -tmpFile="$target/extlinux/extlinux.conf.tmp.$$" - -cat > $tmpFile <<EOF -# Generated file, all changes will be lost on nixos-rebuild! - -# Change this to e.g. nixos-42 to temporarily boot to an older configuration. -DEFAULT nixos-default - -MENU TITLE ------------------------------------------------------------ -TIMEOUT $timeout -EOF - -addEntry $default default >> $tmpFile - -if [ "$numGenerations" -gt 0 ]; then - # Add up to $numGenerations generations of the system profile to the menu, - # in reverse (most recent to least recent) order. - for generation in $( - (cd /nix/var/nix/profiles && ls -d system-*-link) \ - | sed 's/system-\([0-9]\+\)-link/\1/' \ - | sort -n -r \ - | head -n $numGenerations); do - link=/nix/var/nix/profiles/system-$generation-link - addEntry $link $generation - done >> $tmpFile -fi - -mv -f $tmpFile $target/extlinux/extlinux.conf - -# Remove obsolete files from $target/nixos. -for fn in $target/nixos/*; do - if ! test "${filesCopied[$fn]}" = 1; then - echo "Removing no longer needed boot file: $fn" - chmod +w -- "$fn" - rm -rf -- "$fn" - fi -done |