Skip to content

Instantly share code, notes, and snippets.

@sorki
Last active August 28, 2018 17:50
Show Gist options
  • Save sorki/567293f90a2307228db5b874ed957889 to your computer and use it in GitHub Desktop.
Save sorki/567293f90a2307228db5b874ed957889 to your computer and use it in GitHub Desktop.
nixops & libvirt
Enable KVM and TUN features.
[me:~/]# mkdir /var/lib/libvirt/images
[me:~/]# mkdir lvirt-test
[me:~/]# # add network.nix and network-libvirt.nix from this gist
[me:~/lvirt-test]# export NIXOPS_DEPLOYMENT=test
[me:~/lvirt-test]# nixops create network.nix network-libvirt.nix
created deployment ‘74f1ffa8-a0b1-11e8-bc0a-0242cdd42284’
74f1ffa8-a0b1-11e8-bc0a-0242cdd42284
[me:~/lvirt-test]# nixops deploy
[me:~/lvirt-test]# nixops ssh hello
let
lvirt = {
deployment.targetEnv = "libvirtd";
deployment.libvirtd.headless = true;
#deployment.libvirtd.memorySize = 1024;
#deployment.libvirtd.vcpu = 2;
deployment.libvirtd.networks = [ { type="bridge"; source="br0"; } ];
};
in
{
network.description = "blah";
hello = lvirt;
#world = lvirt;
}
{
network.description = "libvirt test";
hello =
{ config, lib, pkgs, ...}:
{
imports = [
];
services.postgresql.enable = true;
};
/*
world =
{ config, lib, pkgs, ...}:
{
imports = [
];
};
*/
}
{ config, lib, pkgs, ... }:
# include from configuration.nix, change networking.nat.externalIP
let
nixopsRepo = pkgs.fetchFromGitHub {
owner = "vpsfreecz";
repo = "nixops";
rev = "668a0f9de10c04dbb7df8c1e4f2be7b064834432";
sha256 = "05ahx1snrddb715r1pdbjk1ywfqa829c6wys9icawxygh2ngspki";
};
bridgeName = "br0";
in
{
nix.useSandbox = false;
nix.buildCores = 8;
virtualisation.libvirtd.enable = true;
networking.nat = {
enable = true;
internalInterfaces = [ "${bridgeName}" ];
externalInterface = "venet0";
# Your external IP here
externalIP = "37.205.14.XZ";
forwardPorts = [
# Example
# { destination = "192.168.122.106:22"; sourcePort = 11122;}
];
};
# libvirt uses 192.168.122.0
networking.bridges."${bridgeName}".interfaces = [];
networking.interfaces."${bridgeName}".ipv4.addresses = [
{ address = "192.168.122.1"; prefixLength = 24; }
];
services.dhcpd4 = {
enable = true;
interfaces = [ "${bridgeName}" ];
extraConfig = ''
option routers 192.168.122.1;
option broadcast-address 192.168.122.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 37.205.9.100, 37.205.10.88, 1.1.1.1;
#default-lease-time -1;
#max-lease-time -1;
subnet 192.168.122.0 netmask 255.255.255.0 {
range 192.168.122.100 192.168.122.200;
}
'';
};
nixpkgs.overlays = [
(self: super:
{
nixops = (import "${nixopsRepo}/release.nix" {}).build.x86_64-linux;
}
)
];
environment.systemPackages = with pkgs; [
screen
nixops
git
];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment