nixos/lxd: add package options for LXC, LXD and ZFS

Currently, LXD always use pkgs.zfs, even if boot.zfs.enableUnstable is set. This
change provides the option to change the LXC, LXD and ZFS packages, and
determines the default ZFS package based on zfs.enableUnstable.
This commit is contained in:
Hugo Geoffroy 2019-11-19 05:08:49 +01:00
parent c53fa2511a
commit 665d863fce

View File

@ -7,6 +7,7 @@ with lib;
let let
cfg = config.virtualisation.lxd; cfg = config.virtualisation.lxd;
zfsCfg = config.boot.zfs;
in in
@ -26,11 +27,38 @@ in
<command>lxc</command> command line tool, among others. <command>lxc</command> command line tool, among others.
''; '';
}; };
package = mkOption {
type = types.package;
default = pkgs.lxd;
description = ''
The LXD package to use.
'';
};
lxcPackage = mkOption {
type = types.package;
default = pkgs.lxc;
description = ''
The LXC package to use with LXD (required for AppArmor profiles).
'';
};
zfsPackage = mkOption {
type = types.package;
default = with pkgs; if zfsCfg.enableUnstable then zfsUnstable else zfs;
defaultText = "pkgs.zfs";
description = ''
The ZFS package to use with LXD.
'';
};
zfsSupport = mkOption { zfsSupport = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = '' description = ''
enables lxd to use zfs as a storage for containers. Enables lxd to use zfs as a storage for containers.
This option is enabled by default if a zfs pool is configured This option is enabled by default if a zfs pool is configured
with nixos. with nixos.
''; '';
@ -54,15 +82,15 @@ in
config = mkIf cfg.enable { config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.lxd ]; environment.systemPackages = [ cfg.package ];
security.apparmor = { security.apparmor = {
enable = true; enable = true;
profiles = [ profiles = [
"${pkgs.lxc}/etc/apparmor.d/usr.bin.lxc-start" "${cfg.lxcPackage}/etc/apparmor.d/usr.bin.lxc-start"
"${pkgs.lxc}/etc/apparmor.d/lxc-containers" "${cfg.lxcPackage}/etc/apparmor.d/lxc-containers"
]; ];
packages = [ pkgs.lxc ]; packages = [ cfg.lxcPackage ];
}; };
systemd.services.lxd = { systemd.services.lxd = {
@ -71,14 +99,14 @@ in
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = [ "systemd-udev-settle.service" ]; after = [ "systemd-udev-settle.service" ];
path = lib.optional cfg.zfsSupport pkgs.zfs; path = lib.optional cfg.zfsSupport cfg.zfsPackage;
preStart = '' preStart = ''
mkdir -m 0755 -p /var/lib/lxc/rootfs mkdir -m 0755 -p /var/lib/lxc/rootfs
''; '';
serviceConfig = { serviceConfig = {
ExecStart = "@${pkgs.lxd.bin}/bin/lxd lxd --group lxd"; ExecStart = "@${cfg.package.bin}/bin/lxd lxd --group lxd";
Type = "simple"; Type = "simple";
KillMode = "process"; # when stopping, leave the containers alone KillMode = "process"; # when stopping, leave the containers alone
LimitMEMLOCK = "infinity"; LimitMEMLOCK = "infinity";