diff --git a/modules/installer/cd-dvd/installation-cd-base.nix b/modules/installer/cd-dvd/installation-cd-base.nix index 3ec4f3a63de..0fb1156dc71 100644 --- a/modules/installer/cd-dvd/installation-cd-base.nix +++ b/modules/installer/cd-dvd/installation-cd-base.nix @@ -1,20 +1,22 @@ # This module contains the basic configuration for building a NixOS # installation CD. -{config, pkgs, ...}: +{ config, pkgs, ... }: + +with pkgs.lib; let options = { - system.nixosVersion = pkgs.lib.mkOption { + system.nixosVersion = mkOption { default = "${builtins.readFile ../../../VERSION}"; description = '' NixOS version number. ''; }; - installer.configModule = pkgs.lib.mkOption { + installer.configModule = mkOption { example = "./nixos/modules/installer/cd-dvd/installation-cd.nix"; description = '' Filename of the configuration module that builds the CD @@ -38,10 +40,12 @@ let ''; # Put the current directory in a tarball. - nixosTarball = makeTarball "nixos.tar.bz2" (pkgs.lib.cleanSource ../../..); + nixosTarball = makeTarball "nixos.tar.bz2" (cleanSource ../../..); # Put Nixpkgs in a tarball. - nixpkgsTarball = makeTarball "nixpkgs.tar.bz2" (pkgs.lib.cleanSource pkgs.path); + nixpkgsTarball = makeTarball "nixpkgs.tar.bz2" (cleanSource pkgs.path); + + includeSources = true; # A dummy /etc/nixos/configuration.nix in the booted CD that @@ -169,12 +173,14 @@ in # Provide the NixOS/Nixpkgs sources in /etc/nixos. This is required # for nixos-install. - echo "unpacking the NixOS/Nixpkgs sources..." - mkdir -p /etc/nixos/nixos - tar xjf ${nixosTarball}/nixos.tar.bz2 -C /etc/nixos/nixos - mkdir -p /etc/nixos/nixpkgs - tar xjf ${nixpkgsTarball}/nixpkgs.tar.bz2 -C /etc/nixos/nixpkgs - chown -R root.root /etc/nixos + ${optionalString includeSources '' + echo "unpacking the NixOS/Nixpkgs sources..." + mkdir -p /etc/nixos/nixos + tar xjf ${nixosTarball}/nixos.tar.bz2 -C /etc/nixos/nixos + mkdir -p /etc/nixos/nixpkgs + tar xjf ${nixpkgsTarball}/nixpkgs.tar.bz2 -C /etc/nixos/nixpkgs + chown -R root.root /etc/nixos + ''} # Provide a configuration for the CD/DVD itself, to allow users # to run nixos-rebuild to change the configuration of the diff --git a/modules/installer/cd-dvd/iso-image.nix b/modules/installer/cd-dvd/iso-image.nix index 2a0ac4f0e28..b8398825057 100644 --- a/modules/installer/cd-dvd/iso-image.nix +++ b/modules/installer/cd-dvd/iso-image.nix @@ -55,12 +55,21 @@ let }; + # The Grub image. + grubImage = pkgs.runCommand "grub_eltorito" {} + '' + ${pkgs.grub2}/bin/grub-mkimage -o tmp biosdisk iso9660 help linux linux16 sh chain + cat ${pkgs.grub2}/lib/grub/*/cdboot.img tmp > $out + ''; # */ + + # The configuration file for Grub. grubCfg = '' - default 0 - timeout 10 - splashimage /boot/background.xpm.gz + set default = 0 + set timeout = 10 + + #splashimage /boot/background.xpm.gz ${config.boot.extraGrubEntries} ''; @@ -112,11 +121,11 @@ in # Individual files to be included on the CD, outside of the Nix # store on the CD. isoImage.contents = - [ { source = "${pkgs.grub}/lib/grub/${if pkgs.stdenv.system == "i686-linux" then "i386-pc" else "x86_64-unknown"}/stage2_eltorito"; - target = "/boot/grub/stage2_eltorito"; + [ { source = grubImage; + target = "/boot/grub/grub_eltorito"; } - { source = pkgs.writeText "menu.lst" grubCfg; - target = "/boot/grub/menu.lst"; + { source = pkgs.writeText "grub.cfg" grubCfg; + target = "/boot/grub/grub.cfg"; } { source = config.boot.kernelPackages.kernel + "/vmlinuz"; target = "/boot/vmlinuz"; @@ -152,13 +161,15 @@ in # The Grub menu. boot.extraGrubEntries = '' - title Boot from hard disk - root (hd0) + menuentry "Boot from hard disk" { + set root=(hd0) chainloader +1 + } - title NixOS Installer / Rescue - kernel /boot/vmlinuz init=/init systemConfig=/system ${toString config.boot.kernelParams} + menuentry "NixOS Installer / Rescue" { + linux /boot/vmlinuz init=/init systemConfig=/system ${toString config.boot.kernelParams} initrd /boot/initrd + } ''; # Create the ISO image. @@ -168,7 +179,7 @@ in inherit (config.isoImage) isoName compressImage volumeID contents; bootable = true; - bootImage = "/boot/grub/stage2_eltorito"; + bootImage = "/boot/grub/grub_eltorito"; }; boot.postBootCommands = diff --git a/modules/installer/cd-dvd/memtest.nix b/modules/installer/cd-dvd/memtest.nix index fb3aa817855..4bf3ee5a53a 100644 --- a/modules/installer/cd-dvd/memtest.nix +++ b/modules/installer/cd-dvd/memtest.nix @@ -12,8 +12,9 @@ in { boot.extraGrubEntries = '' - title Memtest86+ - kernel ${memtestPath} + menuentry "Memtest86+" { + linux16 ${memtestPath} + } ''; isoImage.contents = diff --git a/release.nix b/release.nix index 26708ed3e73..68e77057c9b 100644 --- a/release.nix +++ b/release.nix @@ -30,10 +30,11 @@ let description = "NixOS installation CD (${description}) - ISO image for ${system}"; maintainers = map (x: lib.getAttr x lib.maintainers) maintainers; }; + inherit iso; } '' ensureDir $out/nix-support - echo "file iso" ${iso}/iso/*.iso* >> $out/nix-support/hydra-build-products + echo "file iso" $iso/iso/*.iso* >> $out/nix-support/hydra-build-products ''; # */