1
0
Fork 0

Document how to get a utm based VM up and running

This commit is contained in:
Onni Hakala 2024-10-09 22:01:02 +03:00
commit a88c2b7d10
No known key found for this signature in database
9 changed files with 245 additions and 0 deletions

14
README.md Normal file
View file

@ -0,0 +1,14 @@
# Steps
Start the utm UTM VM
```
# Create new nix configuration for UTM vm
$ nix flake new -t github:ciderale/nixos-utm my-utm-vm
$ cd my-utm-vm
# Replace the ssh key with the key that comes first from your ssh-agent
$ sed -i'' -e "/ssh-ed25519/ s/.*/ \"$(ssh-add -L | head -n1)\"/" configuration.nix
# Run the UTM installer
export VM_NAME=nixos
nix run github:ciderale/nixos-utm#nixosCreate .#utm
```

12
base.nix Normal file
View file

@ -0,0 +1,12 @@
{modulesPath, ...}: {
disko.devices.disk.disk1.device = "/dev/vda";
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.loader.grub = {
# no need to set devices, disko will add all devices that have a EF02 partition to the list already
# devices = [ ];
efiSupport = true;
efiInstallAsRemovable = true;
};
}

18
configuration.nix Normal file
View file

@ -0,0 +1,18 @@
{
modulesPath,
lib,
pkgs,
...
}: {
environment.systemPackages = map lib.lowPrio [
pkgs.curl
pkgs.gitMinimal
];
services.openssh.enable = true;
users.users.root.openssh.authorizedKeys.keys = [
"ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMsvLc6BEB556NzZU0TarX9WkStle3+tFfvdFLZIco999VEYgnVBIdT37qaQlwhN5K8u+4KFe+P0MlQG7yGgd70= ecdsa-sha2-nistp256"
];
system.stateVersion = "23.11";
}

18
configuration.nix-e Normal file
View file

@ -0,0 +1,18 @@
{
modulesPath,
lib,
pkgs,
...
}: {
environment.systemPackages = map lib.lowPrio [
pkgs.curl
pkgs.gitMinimal
];
services.openssh.enable = true;
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPKyKsE4eCn8BDnJZNmFttaCBmVUhO73qmhguEtNft6y"
];
system.stateVersion = "23.11";
}

11
default.nix Normal file
View file

@ -0,0 +1,11 @@
inputs:
inputs.nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
modules = [
inputs.disko.nixosModules.disko
./base.nix
./configuration.nix
./disk-config.nix
./hardware-configuration.nix
];
}

55
disk-config.nix Normal file
View file

@ -0,0 +1,55 @@
# Example to create a bios compatible gpt partition
{lib, ...}: {
disko.devices = {
disk.disk1 = {
device = lib.mkDefault "/dev/sda";
type = "disk";
content = {
type = "gpt";
partitions = {
boot = {
name = "boot";
size = "1M";
type = "EF02";
};
esp = {
name = "ESP";
size = "500M";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
};
root = {
name = "root";
size = "100%";
content = {
type = "lvm_pv";
vg = "pool";
};
};
};
};
};
lvm_vg = {
pool = {
type = "lvm_vg";
lvs = {
root = {
size = "100%FREE";
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
mountOptions = [
"defaults"
];
};
};
};
};
};
};
}

78
flake.lock Normal file
View file

@ -0,0 +1,78 @@
{
"nodes": {
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1727156717,
"narHash": "sha256-Ef7UgoTdOB4PGQKSkHGu6SOxnTiArPHGcRf8qGFC39o=",
"owner": "nix-community",
"repo": "disko",
"rev": "c61e50b63ad50dda5797b1593ad7771be496efbb",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1726153070,
"narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a",
"type": "github"
},
"original": {
"id": "flake-parts",
"type": "indirect"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1726937504,
"narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9357f4f23713673f310988025d9dc261c20e70c6",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1725233747,
"narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz"
}
},
"root": {
"inputs": {
"disko": "disko",
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

13
flake.nix Normal file
View file

@ -0,0 +1,13 @@
{
description = "Description for the project";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
disko.url = "github:nix-community/disko";
disko.inputs.nixpkgs.follows = "nixpkgs";
};
outputs = inputs @ {flake-parts, ...}: {
nixosConfigurations.utm = import ./default.nix inputs;
};
}

View file

@ -0,0 +1,26 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [];
boot.initrd.availableKernelModules = ["virtio_pci" "xhci_pci" "usb_storage" "usbhid"];
boot.initrd.kernelModules = [];
boot.kernelModules = [];
boot.extraModulePackages = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
}