[[!summary chatGPT: A tutorial on running Nix OS on a Hetzner platform, including extracting the Nix OS installation using VirtualBox and configuring the root server for file deployment.]] [[!meta date="2011-05-10 10:50"]] [[!img media/nixos-lores.png alt="" style="float: right"]] [[!tag nixos hetzner]] # motivation running nix os [1] on a hetzner [2] platform using: * hetzner: root server x2 * virtualbox: to extract all needed files **Note:** my host computer is a 'core 2 duo' and the hetzner target system is a 'amd' system * hetzner: robot and rescue system * nix os: Minimal installation CD, 64-bit Intel/AMD (x86_64-linux) [http://nixos.org/releases/nixos/latest-iso-minimal-x86_64-linux](http://nixos.org/releases/nixos/latest-iso-minimal-x86_64-linux) ## extracting the 'nix os installation' using a virtualbox machine 1. create a new virtual machine in virtualbox 2. use the 'nix os minimal installation cd' iso image and boot it 3. follow the nixos installation guide at [3] (no need for any raid setup here!) 4. (**DON'T FORGET TO ENABLE SSHD IN /mnt/etc/nixos/configuration.nix before doing nixos-install**) **services.sshd.enable = true;** 5. the mountPoint can be set using labels: { mountPoint = "/"; label="nixos"; }; 6. in case you want to use a different version of grub you can add a line like this to configuration.nix: nixpkgs.config.packageOverrides = pkgs : rec { grub2 = pkgs.grub198; }; 7. if the 'grub' installation step failed this is not critical (at this point) we don't need a bootable virtualbox image; we only need the files! after the installation finished, don't reboot (extract the files instead): 1. /mnt contains the installation, so we are now creating a tar.gz from that installation 2. conveniently one can use ssh to create a tar.gz on the host system, so: 3. start sshd on the host system and check that the virtualbox networking is working, then 4. **tar zcvf - /mnt | ssh root@192.168.56.1 "cat > /root/nixos-2011-05-08.tar.gz** now you 'could' remove the virtualbox image, we don't need it anymore. ## root server configuration ### let's create the raid and prepare the system for file deployment: 1. start the rescue system and login using ssh 2. remove all raids (the default debian installation uses md0/md1/md2) 3. (maybe reboot to reflect the changes) 4. create one partition per device: fdisk /dev/sda -> create one giant /dev/sda1 partition fdisk /dev/sdb -> create one giant /dev/sdb1 partition 5. create a new raid (raid1): [sourcecode language="bash"]mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1[/sourcecode] 6. (maybe wait until the raid finished syncing, see 'cat /proc/mdstat') 7. create a filesystem (see nix os manual): mkfs.ext4 -O dir_index -j -L nixos /dev/md0 NOTE: **using nix os the /dev/md0 is often named /dev/md127** 8. mount it on /mnt: mount LABEL=nixos /mnt ### copy the files to the prepared raid: mount LABEL=nixos /mnt cd /mnt wget http://lastlog.de/misc/nixos-2011-05-08.tar.gz i copied this file (created earlier in this documentation) to my other root-server, don't use it: USE YOUR OWN FILES tar xzf nixos-2011-05-08.tar.gz and all needed files are there. **Note:** there are no /dev; /sys; or /proc files contained in the tar file! this is intentional **Note:** in case you don't have a place to put that nixos-*.tar.gz you can copy it to your machine using scp ### install the bootloader manually: the rescue image is based on debian and therefore we can use apt-get to install grub2! apt-get install grub2 grub-install --no-floppy --root-directory=/mnt /dev/sda grub-install --no-floppy --root-directory=/mnt /dev/sdb ### final setup step: add your public ssh key to /mnt/root/.ssh/authorized_keys mkdir /mnt/root/.ssh vi /mnt/root/.ssh/authorized_keys copy'n'paste your pubkey create a key pair if you don't have already: **ssh-keygen** ### software-raid using mdadm it's wise to disable the hard-drive write caches to avoid data loss on a power fail, so add this to your /etc/nixos/configuration.nix: powerManagement.powerUpCommands="/var/run/current-system/sw/sbin/hdparm -W 0 /dev/sda /dev/sdb"; **note:** this can reduce throughput but i think it's totally worth it. ### client machine ssh setup one the client machine (which is used to connect to the hetzner nix os installation later) configure ~/.ssh/config: Host nixos hostname 88.198.52.216 User root IdentityFile ~/.ssh/id_rsa_nixos finally type: ssh nixos and you should get a nixos shell! to debug the setup you can use tools like: * ping * ssh -v <- add the -v to the parameter list of ssh * read the logs of the nixos installation using /mnt/var/log/messages # links * [1] * [2] * [3]