NixOS installation HOWTO -- August 28, 2006 This is small HOWTO of how to build and install the current version of NixOS. Building Install Nix. Checkout nixpkgs from Subversion, as well as nixu. Adapt the scripts in nixu to reflect the location of nixpkgs (default /nixpkgs). Make sure mktemp is installed. Run ./make-disk.sh. Wait. Burning Use your favourite tool to burn the ISO image to a CD. Installing Currently NixOS can only be installed with machines that have a specific hardware set up: An ATA harddisk on the first ATA controller (hda) with: - data partition - swap partition All data on these two partitions will be wiped and the bootloader in the Master Boot Record (MBR) will be overwritten with GRUB. The NixOS installer will drop you into a shell, from which you can run fdisk. Then it expects to find a file called "disklayout" with three variables: SWAP :: partition to use as swap INSTALLDEVICE :: partition that will be /root TARGETDRIVE :: drive on which grub will be installed This file will be read by the install script automatically when you launch the script: # sh fill-disk.sh The configuration data that grub writes to disk might not be correct (should be). When something goes wrong you probably won't have to reinstall. The manual for grub is quite helpful in these cases. Configuring To get NixOS in a working state, do the following: - load the networkdriver. This is machine dependent. On the labmachines (Dell Optiplex GX-260) this is the e1000 driver: # modprobe e1000 In vmware the driver is "pcnet32". - bring the interface up: # ifconfig eth0 up If the interface is different (say, eth1) replace eth0 with the right interface. - if DHCP is used, run a DHCP client to obtain an IP address, routing and resolving information: # dhclient eth0 Otherwise, do this yourself: # ifconfig eth0 netmask # route add default gw # vim /etc/resolv.conf Making syslog work. - copy /etc/services from a working Linux machine to /etc/services on the NixOS machine (needed for sysklogd) - copy /etc/syslog.conf from a working Linux machine to /etc/syslog.conf on the NixOS machine (needed for sysklogd) - launch sysklogd Making logins on virtual consoles work. Logins on virtual consoles are disabled by default. To make them work: - edit /etc/inittab and outcomment the lines with "mingetty" in them - copy /etc/login.defs from a working Linux machine to /etc/login.defs on the NixOS machine (needed for mingetty). Alternatively, do: # touch /etc/login.defs - relaunch init Making hotplugging work -- BROKEN RIGHT NOW Many devices (USB, Firewire) are controlled by so called "hot plugging". The kernel executes a program -- usually /sbin/hotplug, but this is configurable at boottime by setting the right path in /proc/sys/kernel/hotplug -- when a new device is added to the machine. This program makes sure the right kernel modules are loaded and optionally, if enabled, sends a message to udev to create the right device node in /dev (NOTE: this is not enabled in NixOS right now). - mount usbfs (for USB): # mount -t usbfs usbfs /proc/bus/usb - install hotplug package - make symlinks /etc/hotplug, /etc/hotplug.d, /sbin/hotplug (TODO: make this pure) - make sure the kernel and additional modules are prepared well (currently this is hackish, but workable: see kernelscripts/make-kernel.sh for an example) - (optionally:) install udev - make a symlink to /etc/udev/udev.conf - launch udev - plug in a device