Setting up and running Nix UML ("nixu") It is possible to run Nix inside a User Mode Linux environment (UML). The Nix expressions for this can be found at https://svn.cs.uu.nl:12443/repos/trace/nixu/. Installation on SuSE Linux 9 Download the latest nixpkgs collection and checkout the nixu trunk with subversion. Install the uml and uml-utilities packages with Nix and run the "make-disk.sh" script which can be found in nixu. After it has built everything (or downloaded everything from the nixpkgs cache which can be used with nix-pull) you can use the "run.sh" script to start the UML. Installation on Fedora Core 1 Installing the Nix UML on Fedora Core 1 is a bit tricky. Nix relies on Berkeley DB and there are issues with Berkeley DB and NPTL kernels (New POSIX Thread Library) on Red Hat based systems. Since the system we build inside UML does not use NPTL we cannot use the Nix we use on the host system to fill the disk once we've booted our the kernel of our UML. The solution is as follows: - install all packages via the nix-pull mechanisms with the MANIFEST from the official nix-pkgs site to avoid that impure builds link against the NPTL glibc on the host system. - install Nix in Nix - in the nixu scripts edit make-disk.sh and fill-disk.sh. In make-disk.sh prefix all nix-* commands with the absolute path to the host-Nix installation bin directory (for example: /nix/bin). In fill-disk.sh replace all /nix/bin paths with a relative path to the Nix installed with Nix (for example: /usr/home/nix/.nix-profile/bin). This should fix the installation problems and the Nix UML should boot flawlessly. Nix UML and 2.6 kernel Installing the current Nix UML packages with a 2.4 kernel on a 2.6 kernel based host system will most likely fail. Linux kernel 2.6 uses NPTL by default, but UML itself seems to be broken somewhat so halfway the system seems to hang. Installing a 2.6 based UML with Nix is not trivial and is not advised. Using the Nix UML By default, the Nix UML comes with very little configuration. Apart from the networking information and mount information, there is nothing. One of the first things to do is to add user and group information, otherwise a lot of tools won't work. There are empty passwd, shadow and group files. Due to some limitations in Nix it is only possible to modify the password file as root. - add a root user: useradd root - edit /etc/passwd and change the UID to 0 ("vim" is provided) - add a root group: groupadd root Adding packages to the UML Nix installation Packages can be added the the Nix UML installation by editing a few files. The first file packages should be added to is 'pkgs.nix'. The other files that should be edited all reside in the "boot" directory. In default.nix the packages should be added as an argument (first line) and given as an argument to the builder (line starting with "inherit"). In "builder.sh" there is a sed expression which subsitutes all occurences of the names of the packages in the files with the right value. If the programs that are added need to be added to $PATH the file "env.sh" has to be edited and the UML has to be recreated. Another option would be to enable networking in the UML and use nix-pull to get all the right packages, however this does not work yet out of the box. A small trick is to symlink /bin/sh to the current version of "sh": # cd /bin # ln -s `which sh` sh We're looking for a more permanent solution to fix this.