 4b11122749
			
		
	
	
		4b11122749
		
	
	
	
	
		
			
			https://github.com/containers/common/blob/master/docs/containers.conf.5.md - Also drop unneeded true from ociSeccompBpfHook
		
			
				
	
	
		
			140 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, pkgs, utils, ... }:
 | |
| let
 | |
|   cfg = config.virtualisation.containers;
 | |
| 
 | |
|   inherit (lib) mkOption types;
 | |
| 
 | |
|   # Once https://github.com/NixOS/nixpkgs/pull/75584 is merged we can use the TOML generator
 | |
|   toTOML = name: value: pkgs.runCommandNoCC name {
 | |
|     nativeBuildInputs = [ pkgs.remarshal ];
 | |
|     value = builtins.toJSON value;
 | |
|     passAsFile = [ "value" ];
 | |
|   } ''
 | |
|     json2toml "$valuePath" "$out"
 | |
|   '';
 | |
| 
 | |
| in
 | |
| {
 | |
|   meta = {
 | |
|     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 =
 | |
|       mkOption {
 | |
|         type = types.bool;
 | |
|         default = false;
 | |
|         description = ''
 | |
|           This option enables the common /etc/containers configuration module.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|     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;
 | |
|         default = [ "docker.io" "quay.io" ];
 | |
|         description = ''
 | |
|           List of repositories to search.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       insecure = mkOption {
 | |
|         default = [];
 | |
|         type = types.listOf types.str;
 | |
|         description = ''
 | |
|           List of insecure repositories.
 | |
|         '';
 | |
|       };
 | |
| 
 | |
|       block = mkOption {
 | |
|         default = [];
 | |
|         type = types.listOf types.str;
 | |
|         description = ''
 | |
|           List of blocked repositories.
 | |
|         '';
 | |
|       };
 | |
|     };
 | |
| 
 | |
|     policy = mkOption {
 | |
|       default = {};
 | |
|       type = types.attrs;
 | |
|       example = lib.literalExample ''
 | |
|         {
 | |
|           default = [ { type = "insecureAcceptAnything"; } ];
 | |
|           transports = {
 | |
|             docker-daemon = {
 | |
|               "" = [ { type = "insecureAcceptAnything"; } ];
 | |
|             };
 | |
|           };
 | |
|         }
 | |
|       '';
 | |
|       description = ''
 | |
|         Signature verification policy file.
 | |
|         If this option is empty the default policy file from
 | |
|         <literal>skopeo</literal> will be used.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|   };
 | |
| 
 | |
|   config = lib.mkIf cfg.enable {
 | |
| 
 | |
|     environment.etc."containers/containers.conf".text = ''
 | |
|       [network]
 | |
|       cni_plugin_dirs = ["${pkgs.cni-plugins}/bin/"]
 | |
| 
 | |
|       [engine]
 | |
|       init_path = "${pkgs.catatonit}/bin/catatonit"
 | |
|       ${lib.optionalString (cfg.ociSeccompBpfHook.enable) ''
 | |
|       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;
 | |
|     };
 | |
| 
 | |
|     environment.etc."containers/policy.json".source =
 | |
|       if cfg.policy != {} then pkgs.writeText "policy.json" (builtins.toJSON cfg.policy)
 | |
|       else utils.copyFile "${pkgs.skopeo.src}/default-policy.json";
 | |
|   };
 | |
| 
 | |
| }
 |