6c9059e717
modules that should be added to the initrd, but should only be loaded on demand (e.g. by the kernel or by udev). This is especially useful in the installation CD, where we now only load the modules needed by the hardware. * Enable automatic modprobing by udev in the initrd. svn path=/nixos/trunk/; revision=18975
213 lines
6.4 KiB
Nix
213 lines
6.4 KiB
Nix
# This module contains the basic configuration for building a NixOS
|
|
# installation CD.
|
|
|
|
{ config, pkgs, ... }:
|
|
|
|
with pkgs.lib;
|
|
|
|
let
|
|
|
|
options = {
|
|
|
|
system.nixosVersion = mkOption {
|
|
default = "${builtins.readFile ../../../VERSION}";
|
|
description = ''
|
|
NixOS version number.
|
|
'';
|
|
};
|
|
|
|
installer.configModule = mkOption {
|
|
example = "./nixos/modules/installer/cd-dvd/installation-cd.nix";
|
|
description = ''
|
|
Filename of the configuration module that builds the CD
|
|
configuration. Must be specified to support reconfiguration
|
|
in live CDs.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
|
|
# We need a copy of the Nix expressions for Nixpkgs and NixOS on the
|
|
# CD. We put them in a tarball because accessing that many small
|
|
# files from a slow device like a CD-ROM takes too long. !!! Once
|
|
# we use squashfs, maybe we won't need this anymore.
|
|
makeTarball = tarName: input: pkgs.runCommand "tarball" {inherit tarName;}
|
|
''
|
|
ensureDir $out
|
|
(cd ${input} && tar cvfj $out/${tarName} . \
|
|
--exclude '*~' --exclude 'result')
|
|
'';
|
|
|
|
# Put the current directory in a tarball.
|
|
nixosTarball = makeTarball "nixos.tar.bz2" (cleanSource ../../..);
|
|
|
|
# Put Nixpkgs in a tarball.
|
|
nixpkgsTarball = makeTarball "nixpkgs.tar.bz2" (cleanSource pkgs.path);
|
|
|
|
includeSources = true;
|
|
|
|
|
|
# A dummy /etc/nixos/configuration.nix in the booted CD that
|
|
# rebuilds the CD's configuration (and allows the configuration to
|
|
# be modified, of course, providing a true live CD). Problem is
|
|
# that we don't really know how the CD was built - the Nix
|
|
# expression language doesn't allow us to query the expression being
|
|
# evaluated. So we'll just hope for the best.
|
|
dummyConfiguration = pkgs.writeText "configuration.nix"
|
|
''
|
|
{config, pkgs, ...}:
|
|
|
|
{
|
|
require = [${config.installer.configModule}];
|
|
|
|
# Add your own options below and run "nixos-rebuild switch".
|
|
# E.g.,
|
|
# services.sshd.enable = true;
|
|
}
|
|
'';
|
|
|
|
|
|
in
|
|
|
|
{
|
|
require =
|
|
[ options
|
|
./iso-image.nix
|
|
./memtest.nix
|
|
../../hardware/network/intel-3945abg.nix
|
|
../../hardware/network/rt73.nix
|
|
];
|
|
|
|
# ISO naming.
|
|
isoImage.isoName = "nixos-${config.system.nixosVersion}-${pkgs.stdenv.system}.iso";
|
|
|
|
isoImage.volumeID = "NIXOS_INSTALL_CD_${config.system.nixosVersion}";
|
|
|
|
# Use Linux 2.6.29.
|
|
boot.kernelPackages = pkgs.kernelPackages_2_6_29;
|
|
|
|
# Show the manual.
|
|
services.nixosManual.showManual = true;
|
|
|
|
# Let the user play Rogue on TTY 8 during the installation.
|
|
services.rogue.enable = true;
|
|
|
|
# Disable some other stuff we don't need.
|
|
security.sudo.enable = false;
|
|
|
|
# Include only the en_US locale. This saves 75 MiB or so compared to
|
|
# the full glibcLocales package.
|
|
i18n.supportedLocales = ["en_US.UTF-8/UTF-8" "en_US/ISO-8859-1"];
|
|
|
|
# Include some utilities that are useful for installing or repairing
|
|
# the system.
|
|
environment.systemPackages =
|
|
[ pkgs.subversion # for nixos-checkout
|
|
pkgs.w3m # needed for the manual anyway
|
|
pkgs.testdisk # useful for repairing boot problems
|
|
pkgs.mssys # for writing Microsoft boot sectors / MBRs
|
|
pkgs.ntfsprogs # for resizing NTFS partitions
|
|
pkgs.parted
|
|
pkgs.sshfsFuse
|
|
];
|
|
|
|
# The initrd has to contain any module that might be necessary for
|
|
# mounting the CD/DVD.
|
|
boot.initrd.availableKernelModules =
|
|
[ # SATA/PATA support.
|
|
"ahci"
|
|
|
|
"ata_piix"
|
|
|
|
"sata_inic162x" "sata_nv" "sata_promise" "sata_qstor"
|
|
"sata_sil" "sata_sil24" "sata_sis" "sata_svw" "sata_sx4"
|
|
"sata_uli" "sata_via" "sata_vsc"
|
|
|
|
"pata_ali" "pata_amd" "pata_artop" "pata_atiixp"
|
|
"pata_cs5520" "pata_cs5530" /* "pata_cs5535" */ "pata_efar"
|
|
"pata_hpt366" "pata_hpt37x" "pata_hpt3x2n" "pata_hpt3x3"
|
|
"pata_it8213" "pata_it821x" "pata_jmicron" "pata_marvell"
|
|
"pata_mpiix" "pata_netcell" "pata_ns87410" "pata_oldpiix"
|
|
"pata_pcmcia" "pata_pdc2027x" /* "pata_qdi" */ "pata_rz1000"
|
|
"pata_sc1200" "pata_serverworks" "pata_sil680" "pata_sis"
|
|
"pata_sl82c105" "pata_triflex" "pata_via"
|
|
# "pata_winbond" <-- causes timeouts in sd_mod
|
|
|
|
# SCSI support (incomplete).
|
|
"3w-9xxx" "3w-xxxx" "aic79xx" "aic7xxx" "arcmsr"
|
|
|
|
# USB support, especially for booting from USB CD-ROM
|
|
# drives. Also include USB keyboard support for when
|
|
# something goes wrong in stage 1.
|
|
"ehci_hcd"
|
|
"ohci_hcd"
|
|
"uhci_hcd"
|
|
"usbhid"
|
|
"usb_storage"
|
|
|
|
# Firewire support. Not tested.
|
|
"ohci1394" "sbp2"
|
|
|
|
# Virtio (QEMU, KVM etc.) support.
|
|
"virtio_net" "virtio_pci" "virtio_blk" "virtio_balloon"
|
|
|
|
# Wait for SCSI devices to appear.
|
|
"scsi_wait_scan"
|
|
|
|
# Add vfat to enable people to copy the contents of the CD to a
|
|
# bootable USB stick.
|
|
"vfat"
|
|
|
|
# And of course we need to be able to mount the CD.
|
|
"iso9660"
|
|
];
|
|
|
|
boot.initrd.kernelModules = [ "loop" ];
|
|
|
|
# nixos-install will do a pull from this channel to speed up the
|
|
# installation.
|
|
installer.nixpkgsURL = http://nixos.org/releases/nixpkgs/channels/nixpkgs-unstable;
|
|
|
|
boot.postBootCommands =
|
|
''
|
|
export PATH=${pkgs.gnutar}/bin:${pkgs.bzip2}/bin:$PATH
|
|
|
|
# Provide a mount point for nixos-install.
|
|
mkdir -p /mnt
|
|
|
|
# Provide the NixOS/Nixpkgs sources in /etc/nixos. This is required
|
|
# for nixos-install.
|
|
${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
|
|
# running system on the CD/DVD.
|
|
cp ${dummyConfiguration} /etc/nixos/configuration.nix
|
|
'';
|
|
|
|
# Some more help text.
|
|
services.mingetty.helpLine =
|
|
''
|
|
|
|
Log in as "root" with an empty password. ${
|
|
if config.services.xserver.enable then
|
|
"Type `start xserver' to start\nthe graphical user interface."
|
|
else ""
|
|
}
|
|
'';
|
|
|
|
# Have the redistributable firmware of rt73 wifi nics.
|
|
networking.enableRT73Firmware = true;
|
|
|
|
# To speed up installation a little bit, include the complete stdenv
|
|
# in the Nix store on the CD.
|
|
isoImage.storeContents = [pkgs.stdenv];
|
|
}
|