NixOS on Linode KVM#
Mon, 19 Dec 2016 21:28:08 +0000
This is much easier than you'd think by Googling - but still complicated enough to be worth writing down. Note that this description is rather on the terse side, and probably more understandable if you've done a NixOS install on "regular" hardware previously.
1) create a new Linode instance
2) select it in Linode Manager
3) make some disks: for each of these, go to 'Create a new Disk' and fill in the appropriate fields
- a disk to copy the NixOS ISO onto: give it label='linux iso', type='ext4', size=1024
- disk for
/boot
. We're going to separate this from the root disk, because Grub needs a partition table and Linode usually doesn't like partition tables. Let's give it the label 'boot' and size=1024 again (TBH I have very little idea whether these sizes are appropriate, but this works for me)
- a root disk. I called mine
nixos
. You can make this as big as you like (I used all the rest of my storage allocation)
4) now go to 'create a new configuration profile'
- give it a name something like 'nixos install'
- in Boot Settings, change the Kernel to "Direct Disk"
- in Block Device Assignment, set sda=nixos iso, sdb=boot, sdc=nixos
- change all the Filesystem/Boot Helpers to "no"
5) before you turn it on, go to the Settings tab and disable Lassie - otherwise it just gets confusing having it reboot when you're not expecting
6) first time boot will be into the Rescue system, so go to the Rescue tab and click 'Reboot into Rescue Mode'
7) now connect to it using lish. You should be shown a typical boot sequence ending in something like
Welcome to Finnix![*] Total memory: 1998MiB, shared ramdisk: 1543MiB [*] Finnix media found at sdh [*] System: Intel Xeon E5-2680 v3 2.50GHz [*] Running Linux kernel 4.1.2-finnix on x86_64 [*] Finnix 111 ready; 464 packages, 146M compressed
root@ttyS0:~#
8) now it's time to download the ISO. From the Getting NixOS page, find the URL for the latest 64 bit Minimal Installation CD and then run something rather like
root@ttyS0:~# curl -k https://d3g5gsiof5omrk.cloudfront.net/nixos/16.09/nixos-16.09.1272.81428dd/nixos-minimal-16.09.1272.81428dd-x86_64-linux.iso |dd bs=1M of=/dev/sda root@ttyS0:~# sync root@ttyS0:~# halt
9) Now we can boot into the NixOS installer. Check that you still
have lish running in a terminal window (reconnect to it if not), then
click 'Boot' in the Dashboard. You should see a Grub menu appear:
cursor down to the 'NixOS ... without modeset' option then hit TAB to
edit the command. Append console=ttyS0
, then hit RETURN to boot.
You get a NixOS boot sequence in lish, then
[root@nixos:~]#
10) This is a good time to bring up the NixOS manual in a browser tab, especially if you can't remember what you did last time
11) Create a partition table on /dev/sdb
and a primary partition
that fills it, then put a filesystem on it:
[root@nixos:~]# fdisk /dev/sdbWelcome to fdisk (util-linux 2.28.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
Device /dev/sdb already contains a ext4 signature. The signature will be removed by a write command.
Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x01a28df9.
Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-2097151, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151):
Created a new partition 1 of type 'Linux' and of size 1023 MiB.
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. [ 441.705223] sdb: sdb1 Syncing disks.
[root@nixos:~]# mkfs -t ext4 /dev/sdb1
(This looks verbose but it's almost all default options - what I
actually typed to produce that output was n
, RETURN, RETURN, RETURN,
RETURN, w
, Control-D)
12) mount the disks
[root@nixos:~]# mount /dev/sdc /mnt [root@nixos:~]# mkdir /mnt/boot [root@nixos:~]# mount /dev/sdb1 /mnt/boot
13) now you can run nixos-generate-config --root /mnt
. Edit the generated /mnt/etc/nixos/configuration.nix
and uncomment/amend/check the following items
-
boot.loader.grub.device = "/dev/sdb";
-
services.openssh.enable = true;
-
boot.kernelParams = [ "console=ttyS0" ];
-
boot.loader.grub.extraConfig = "serial; terminal_input serial; terminal_output serial";
- whatever initial user you want to set up under
users.extraUsers.foo
x
14) and run
[root@nixos:~]# nixos-install # stuff happens, at length [root@nixos:~]# umount /mnt/boot [root@nixos:~]# umount /mnt
15) now it's time to try booting from the "hard disk": go back to the Linode Manager and create another Configuration Profile
- kernel = 'Direct Disk'
- /dev/sda = nixos
- /dev/sdb = boot
- root/boot device = /dev/sdb
Select the new profile in Dashboard and hit 'Reboot'. Eventually, you
will see the very welcome Welcome to NixOS
banner and be presented
with a login prompt.
16) Login as root, using the password you set duing nixos-install
.
Check you have network connectivity. Arrange credentials (password or
ssh key or whatever) for whatever non-root user(s) you put in
configuration.nix
. Try ssh into the box. When you're happy it works,
use C-a d to exit lish. Your work here is done.