From c2e4fb29c6bca8fcfd20b834502d5755f9cf7a22 Mon Sep 17 00:00:00 2001 From: "William A. Kennington III" Date: Sun, 13 Sep 2015 23:27:31 -0700 Subject: [PATCH] nixos/lxd: Add service --- nixos/modules/misc/ids.nix | 2 + nixos/modules/module-list.nix | 1 + nixos/modules/virtualisation/lxd.nix | 64 ++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 nixos/modules/virtualisation/lxd.nix diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix index 6819f3ac0ec..195d22f455c 100644 --- a/nixos/modules/misc/ids.nix +++ b/nixos/modules/misc/ids.nix @@ -231,6 +231,7 @@ gateone = 207; namecoin = 208; dnschain = 209; + #lxd = 210; # unused # When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399! @@ -440,6 +441,7 @@ gateone = 207; namecoin = 208; #dnschain = 209; #unused + lxd = 210; # unused # When adding a gid, make sure it doesn't match an existing # uid. Users and groups with the same name should have equal diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index f1494c3b4af..82e0cdc6926 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -487,6 +487,7 @@ ./virtualisation/docker.nix ./virtualisation/libvirtd.nix ./virtualisation/lxc.nix + ./virtualisation/lxd.nix ./virtualisation/amazon-options.nix ./virtualisation/openvswitch.nix ./virtualisation/parallels-guest.nix diff --git a/nixos/modules/virtualisation/lxd.nix b/nixos/modules/virtualisation/lxd.nix new file mode 100644 index 00000000000..488153334bc --- /dev/null +++ b/nixos/modules/virtualisation/lxd.nix @@ -0,0 +1,64 @@ +# Systemd services for lxd. + +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.virtualisation.lxd; + +in + +{ + ###### interface + + options = { + + virtualisation.lxd.enable = + mkOption { + type = types.bool; + default = false; + description = + '' + This option enables lxd, a daemon that manages + containers. Users in the "lxd" group can interact with + the daemon (e.g. to start or stop containers) using the + lxc command line tool, among others. + ''; + }; + + }; + + + ###### implementation + + config = mkIf cfg.enable { + + environment.systemPackages = + [ pkgs.lxd ]; + + systemd.services.lxd = + { description = "LXD Container Management Daemon"; + + wantedBy = [ "multi-user.target" ]; + after = [ "systemd-udev-settle.service" ]; + + # TODO(wkennington): Add lvm2 and thin-provisioning-tools + path = with pkgs; [ acl rsync gnutar xz btrfsProgs ]; + + serviceConfig.ExecStart = "@${pkgs.lxd}/bin/lxd lxd --syslog --group lxd"; + serviceConfig.Type = "simple"; + serviceConfig.KillMode = "process"; # when stopping, leave the containers alone + }; + + users.extraGroups.lxd.gid = config.ids.gids.lxd; + + users.extraUsers.root = { + subUidRanges = [ { startUid = 1000000; count = 65536; } ]; + subGidRanges = [ { startGid = 1000000; count = 65536; } ]; + }; + + }; + +}