61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { pkgs, lib, config, ... }:
 | |
| let
 | |
|   cfg = config.virtualisation.containerd;
 | |
|   containerdConfigChecked = pkgs.runCommand "containerd-config-checked.toml" { nativeBuildInputs = [pkgs.containerd]; } ''
 | |
|     containerd -c ${cfg.configFile} config dump >/dev/null
 | |
|     ln -s ${cfg.configFile} $out
 | |
|   '';
 | |
| in
 | |
| {
 | |
| 
 | |
|   options.virtualisation.containerd = with lib.types; {
 | |
|     enable = lib.mkEnableOption "containerd container runtime";
 | |
| 
 | |
|     configFile = lib.mkOption {
 | |
|       default = null;
 | |
|       description = "path to containerd config file";
 | |
|       type = nullOr path;
 | |
|     };
 | |
| 
 | |
|     args = lib.mkOption {
 | |
|       default = {};
 | |
|       description = "extra args to append to the containerd cmdline";
 | |
|       type = attrsOf str;
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = lib.mkIf cfg.enable {
 | |
|     virtualisation.containerd.args.config = lib.mkIf (cfg.configFile != null) (toString containerdConfigChecked);
 | |
| 
 | |
|     environment.systemPackages = [pkgs.containerd];
 | |
| 
 | |
|     systemd.services.containerd = {
 | |
|       description = "containerd - container runtime";
 | |
|       wantedBy = [ "multi-user.target" ];
 | |
|       after = [ "network.target" ];
 | |
|       path = with pkgs; [
 | |
|         containerd
 | |
|         runc
 | |
|         iptables
 | |
|       ];
 | |
|       serviceConfig = {
 | |
|         ExecStart = ''${pkgs.containerd}/bin/containerd ${lib.concatStringsSep " " (lib.cli.toGNUCommandLine {} cfg.args)}'';
 | |
|         Delegate = "yes";
 | |
|         KillMode = "process";
 | |
|         Type = "notify";
 | |
|         Restart = "always";
 | |
|         RestartSec = "5";
 | |
|         StartLimitBurst = "8";
 | |
|         StartLimitIntervalSec = "120s";
 | |
| 
 | |
|         # "limits" defined below are adopted from upstream: https://github.com/containerd/containerd/blob/master/containerd.service
 | |
|         LimitNPROC = "infinity";
 | |
|         LimitCORE = "infinity";
 | |
|         LimitNOFILE = "infinity";
 | |
|         TasksMax = "infinity";
 | |
|         OOMScoreAdjust = "-999";
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 | 
