about summary refs log tree commit diff
path: root/nixos/modules/virtualisation
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2020-05-01 08:57:10 +0200
committerFrederik Rietdijk <fridh@fridh.nl>2020-05-01 08:57:10 +0200
commit484ee79050976cf1d234b4056d16e5bdc152bed6 (patch)
treec38b8141426c5714ed7bc5f9e1ffe008c813507f /nixos/modules/virtualisation
parentb6474577b04a86a27a555dafa676670fb3902ec8 (diff)
parent2111240b9f7e5704045763fbdc66534609a62a65 (diff)
downloadnixlib-484ee79050976cf1d234b4056d16e5bdc152bed6.tar
nixlib-484ee79050976cf1d234b4056d16e5bdc152bed6.tar.gz
nixlib-484ee79050976cf1d234b4056d16e5bdc152bed6.tar.bz2
nixlib-484ee79050976cf1d234b4056d16e5bdc152bed6.tar.lz
nixlib-484ee79050976cf1d234b4056d16e5bdc152bed6.tar.xz
nixlib-484ee79050976cf1d234b4056d16e5bdc152bed6.tar.zst
nixlib-484ee79050976cf1d234b4056d16e5bdc152bed6.zip
Merge staging-next into staging
Diffstat (limited to 'nixos/modules/virtualisation')
-rw-r--r--nixos/modules/virtualisation/podman.nix50
1 files changed, 31 insertions, 19 deletions
diff --git a/nixos/modules/virtualisation/podman.nix b/nixos/modules/virtualisation/podman.nix
index 35f879840dd9..1dc79272ccb6 100644
--- a/nixos/modules/virtualisation/podman.nix
+++ b/nixos/modules/virtualisation/podman.nix
@@ -4,16 +4,20 @@ let
 
   inherit (lib) mkOption types;
 
+  podmanPackage = (pkgs.podman.override { inherit (cfg) extraPackages; });
+
   # Provides a fake "docker" binary mapping to podman
-  dockerCompat = pkgs.runCommandNoCC "${pkgs.podman.pname}-docker-compat-${pkgs.podman.version}" {
-    outputs = [ "out" "man" ];
-    inherit (pkgs.podman) meta;
+  dockerCompat = pkgs.runCommandNoCC "${podmanPackage.pname}-docker-compat-${podmanPackage.version}" {
+    outputs = [ "out" "bin" "man" ];
+    inherit (podmanPackage) meta;
   } ''
-    mkdir -p $out/bin
-    ln -s ${pkgs.podman}/bin/podman $out/bin/docker
+    mkdir $out
+
+    mkdir -p $bin/bin
+    ln -s ${podmanPackage.bin}/bin/podman $bin/bin/docker
 
     mkdir -p $man/share/man/man1
-    for f in ${pkgs.podman.man}/share/man/man1/*; do
+    for f in ${podmanPackage.man}/share/man/man1/*; do
       basename=$(basename $f | sed s/podman/docker/g)
       ln -s $f $man/share/man/man1/$basename
     done
@@ -52,6 +56,19 @@ in
       '';
     };
 
+    extraPackages = mkOption {
+      type = with types; listOf package;
+      default = [ ];
+      example = lib.literalExample ''
+        [
+          pkgs.gvisor
+        ]
+      '';
+      description = ''
+        Extra packages to be installed in the Podman wrapper.
+      '';
+    };
+
     libpod = mkOption {
       default = {};
       description = "Libpod configuration";
@@ -75,29 +92,24 @@ in
 
   config = lib.mkIf cfg.enable {
 
-    environment.systemPackages = [
-      pkgs.podman # Docker compat
-      pkgs.runc # Default container runtime
-      pkgs.crun # Default container runtime (cgroups v2)
-      pkgs.conmon # Container runtime monitor
-      pkgs.slirp4netns # User-mode networking for unprivileged namespaces
-      pkgs.fuse-overlayfs # CoW for images, much faster than default vfs
-      pkgs.utillinux # nsenter
-      pkgs.iptables
-    ]
-    ++ lib.optional cfg.dockerCompat dockerCompat;
+    environment.systemPackages = [ podmanPackage ]
+      ++ lib.optional cfg.dockerCompat dockerCompat;
 
     environment.etc."containers/libpod.conf".text = ''
       cni_plugin_dir = ["${pkgs.cni-plugins}/bin/"]
-      cni_config_dir = "/etc/cni/net.d/"
 
     '' + cfg.libpod.extraConfig;
 
-    environment.etc."cni/net.d/87-podman-bridge.conflist".source = copyFile "${pkgs.podman.src}/cni/87-podman-bridge.conflist";
+    environment.etc."cni/net.d/87-podman-bridge.conflist".source = copyFile "${pkgs.podman-unwrapped.src}/cni/87-podman-bridge.conflist";
 
     # Enable common /etc/containers configuration
     virtualisation.containers.enable = true;
 
+    assertions = [{
+      assertion = cfg.dockerCompat -> !config.virtualisation.docker.enable;
+      message = "Option dockerCompat conflicts with docker";
+    }];
+
   };
 
 }