From 03760c0c03ed4f73637a06cb5ceb3fb254fd64be Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 11 Jun 2009 09:51:27 +0000 Subject: * `installation-cd-big.nix' builds a NixOS installation CD containing an X server and KDE 4. Thanks to squashfs it's only 466 MiB large. `installation-cd-small.nix' builds the original, text-only installation CD. svn path=/nixos/branches/modular-nixos/; revision=15934 --- modules/installer/cd-dvd/installation-cd-base.nix | 185 ++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 modules/installer/cd-dvd/installation-cd-base.nix (limited to 'modules/installer/cd-dvd/installation-cd-base.nix') diff --git a/modules/installer/cd-dvd/installation-cd-base.nix b/modules/installer/cd-dvd/installation-cd-base.nix new file mode 100644 index 00000000000..18300f01ee9 --- /dev/null +++ b/modules/installer/cd-dvd/installation-cd-base.nix @@ -0,0 +1,185 @@ +# This module contains the basic configuration for building a NixOS +# installation CD. + +{config, pkgs, ...}: + +let + + options = { + + system.nixosVersion = pkgs.lib.mkOption { + default = "${builtins.readFile ../../../VERSION}"; + description = '' + NixOS version number. + ''; + }; + + }; + + + # 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" (pkgs.lib.cleanSource ../../..); + + # Put Nixpkgs in a tarball. + nixpkgsTarball = makeTarball "nixpkgs.tar.bz2" (pkgs.lib.cleanSource pkgs.path); + + + # 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 = [./nixos/modules/installer/cd-dvd/installation-cd.nix]; + + # 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 + ]; + + # ISO naming. + isoImage.isoName = "nixos-${config.system.nixosVersion}-${pkgs.stdenv.system}.iso"; + + isoImage.volumeID = "NIXOS_INSTALLATION_CD_${config.system.nixosVersion}"; + + # Use Linux 2.6.29. + boot.kernelPackages = pkgs.kernelPackages_2_6_29; + + # Show the manual. + services.showManual.enable = 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.extraKernelModules = + [ # 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" + ]; + + # 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. + 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 "" + } + ''; + + # To speed up installation a little bit, include the complete stdenv + # in the Nix store on the CD. + isoImage.storeContents = [pkgs.stdenv]; +} -- cgit 1.4.1