nixos/podman: add nvidia runtime support

This commit is contained in:
Phillip Cloud 2021-01-06 06:01:09 -05:00
parent f621108dbc
commit c9955d06be

View File

@ -1,6 +1,7 @@
{ config, lib, pkgs, utils, ... }: { config, lib, pkgs, utils, ... }:
let let
cfg = config.virtualisation.podman; cfg = config.virtualisation.podman;
toml = pkgs.formats.toml { };
inherit (lib) mkOption types; inherit (lib) mkOption types;
@ -53,6 +54,14 @@ in
''; '';
}; };
enableNvidia = mkOption {
type = types.bool;
default = false;
description = ''
Enable use of NVidia GPUs from within podman containers.
'';
};
extraPackages = mkOption { extraPackages = mkOption {
type = with types; listOf package; type = with types; listOf package;
default = [ ]; default = [ ];
@ -78,21 +87,37 @@ in
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable (lib.mkMerge [
{
environment.systemPackages = [ cfg.package ]
++ lib.optional cfg.dockerCompat dockerCompat;
environment.systemPackages = [ cfg.package ] environment.etc."cni/net.d/87-podman-bridge.conflist".source = utils.copyFile "${pkgs.podman-unwrapped.src}/cni/87-podman-bridge.conflist";
++ lib.optional cfg.dockerCompat dockerCompat;
environment.etc."cni/net.d/87-podman-bridge.conflist".source = utils.copyFile "${pkgs.podman-unwrapped.src}/cni/87-podman-bridge.conflist"; virtualisation.containers = {
enable = true; # Enable common /etc/containers configuration
# Enable common /etc/containers configuration containersConf.extraConfig = lib.optionalString cfg.enableNvidia
virtualisation.containers.enable = true; (builtins.readFile (toml.generate "podman.nvidia.containers.conf" {
engine = {
assertions = [{ conmon_env_vars = [ "PATH=${lib.makeBinPath [ pkgs.nvidia-docker ]}" ];
assertion = cfg.dockerCompat -> !config.virtualisation.docker.enable; runtimes.nvidia = [ "${pkgs.nvidia-docker}/bin/nvidia-container-runtime" ];
message = "Option dockerCompat conflicts with docker"; };
}]; }));
};
};
assertions = [
{
assertion = cfg.dockerCompat -> !config.virtualisation.docker.enable;
message = "Option dockerCompat conflicts with docker";
}
{
assertion = cfg.enableNvidia -> !config.virtualisation.docker.enableNvidia;
message = "Option enableNvidia conflicts with docker.enableNvidia";
}
];
}
(lib.mkIf cfg.enableNvidia {
environment.etc."nvidia-container-runtime/config.toml".source = "${pkgs.nvidia-docker}/etc/podman-config.toml";
})
]);
} }