Richard Bucker

Installing NixOS - Short Version

Posted at — Jan 22, 2015

I have been experimenting with NixOS for the last few weeks and every day I find some new reason to like it.My first experiences were with the VirtualBox version. It was easy to use and the default configuration, with KDE, was pleasant even though I went directly to the Konsole and then with ssh. On the list of interesting features:the Nix installer - it’s the foundation of the team’s approach across the projectrelated to the installer is the user partitioned installations… i.e. two users can use different versions of the same program since their environments are partitionedand that the installer is transactionalIt has it’s own approach to containers - which I do not fully understand but seems more like chroot or jail than it does Docker. Additional good news is that the container also works like the package manager … and you can install Docker too.Then I discovered that the project includes a CI, continuous integration, server called hydra. I don’t know much about it except that hydra also uses the same Nix ideas and between the two hydra will work with Windows, OS X, and Linux.Today I installed sshd and started to consider doing a complete install from scratch or at least the closest thing to it. Not knowing how NixOS liked to be installed and that their own manual was a little sparse on the details I found this article that gave me a good head start. I suppose I could just leave the article at that, however, I want my own interpretation of the article in a more concise form; so here we go:download the ISO image, in my case I did the minimal version [no X or desktop]create a VM using VirtualBox and mount the ISO image on the VM’s CDROM (I configured it for 512M and 16GB disk)boot the VMrun some commands and do some workfdisk /dev/sdapress “o” to create a DOS partitionpress “n, p, 1, ENTER, +2G, t, 82” to create the boot/swap partitionpress “n, p, 2, ENTER, ENTER” to allocate the rest of the drive for NixOSmake the swap partition “mkswap -L swap /dev/sda1"turn the swap on “swapon /dev/sda1"format the partition “mkfs.ext4 -L nixos /dev/sda2"mount the formatted partition “mount /dev/disk/by-label/nixos /mnt"generate the default config file “nixos-generate-config –root /mnt"edit the configuration file “nano /mnt/etc/nixos/configuration.nix"boot.loader.grub.device = “/dev/sda”services.openssh.enable = trueI must have janked the user creation because it did not work as expectedinstall NixOS “nixos-install"shutdown the VM “halt"power off the VM from the VirtualBox GUIeject the virtual CDROMadd a second network adapter “host-only"re-start the VMAt this point you are pretty close but if you are using VirtualBox you’ll have to do at least one more thing in order to be able to ssh into your newly minted system.  Create a new user:login as the root user. Right now the root user does not have a passwordchange the root user’s password “passwd"create the new user “useradd -m myusername"change the user’s password “passwd myusername"and if the user is an admin user then you need to add this user to the admin group “user mod -G wheel myusername"Now you should be able to ssh into the VM from your host computer with your newly minted username. I installed vim in my user account because I like it as my preferred editor. At this point I shutdown and created a snapshot so that I could return to this state or create clones of my NixOS installation. I hope to find myself going through a number of use-cases shortly:installing packages from the unstable channelusing containersinstalling the Hydra CItrying to determine the Docker playdetermining the host upgrade workflowphysical drive cryptogolang and other compiler tech as part of the development stackfossil and/or the hydra storageIt’s fun to note that my first 16GB installation left me with 12GB free after the base OS and vim were installed. Based on the way the packages are installed it appears that NixOS is going to take more diskspace than a like Ubuntu or Fedora, however, there may be other economies that are yet to be discovered.