aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/modules/virtualisation/containers.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/modules/virtualisation/containers.nix')
-rw-r--r--nixpkgs/nixos/modules/virtualisation/containers.nix75
1 files changed, 46 insertions, 29 deletions
diff --git a/nixpkgs/nixos/modules/virtualisation/containers.nix b/nixpkgs/nixos/modules/virtualisation/containers.nix
index 7d184575640..de97ba3f7bb 100644
--- a/nixpkgs/nixos/modules/virtualisation/containers.nix
+++ b/nixpkgs/nixos/modules/virtualisation/containers.nix
@@ -23,6 +23,15 @@ in
maintainers = [] ++ lib.teams.podman.members;
};
+
+ imports = [
+ (
+ lib.mkRemovedOptionModule
+ [ "virtualisation" "containers" "users" ]
+ "All users with `isNormalUser = true` set now get appropriate subuid/subgid mappings."
+ )
+ ];
+
options.virtualisation.containers = {
enable =
@@ -34,6 +43,31 @@ in
'';
};
+ ociSeccompBpfHook.enable = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Enable the OCI seccomp BPF hook";
+ };
+
+ containersConf = mkOption {
+ default = {};
+ description = "containers.conf configuration";
+ type = types.submodule {
+ options = {
+
+ extraConfig = mkOption {
+ type = types.lines;
+ default = "";
+ description = ''
+ Extra configuration that should be put in the containers.conf
+ configuration file
+ '';
+
+ };
+ };
+ };
+ };
+
registries = {
search = mkOption {
type = types.listOf types.str;
@@ -80,43 +114,26 @@ in
'';
};
- users = mkOption {
- default = [];
- type = types.listOf types.str;
- description = ''
- List of users to set up subuid/subgid mappings for.
- This is a requirement for running rootless containers.
- '';
- };
-
};
config = lib.mkIf cfg.enable {
+ environment.etc."containers/containers.conf".text = ''
+ [network]
+ cni_plugin_dirs = ["${pkgs.cni-plugins}/bin/"]
+
+ ${lib.optionalString (cfg.ociSeccompBpfHook.enable == true) ''
+ [engine]
+ hooks_dir = [
+ "${config.boot.kernelPackages.oci-seccomp-bpf-hook}",
+ ]
+ ''}
+ '' + cfg.containersConf.extraConfig;
+
environment.etc."containers/registries.conf".source = toTOML "registries.conf" {
registries = lib.mapAttrs (n: v: { registries = v; }) cfg.registries;
};
- users.extraUsers = builtins.listToAttrs (
- (
- builtins.foldl' (
- acc: user: {
- values = acc.values ++ [
- {
- name = user;
- value = {
- subUidRanges = [ { startUid = acc.offset; count = 65536; } ];
- subGidRanges = [ { startGid = acc.offset; count = 65536; } ];
- };
- }
- ];
- offset = acc.offset + 65536;
- }
- )
- { values = []; offset = 100000; } (lib.unique cfg.users)
- ).values
- );
-
environment.etc."containers/policy.json".source =
if cfg.policy != {} then pkgs.writeText "policy.json" (builtins.toJSON cfg.policy)
else copyFile "${pkgs.skopeo.src}/default-policy.json";