nixos/atalkd: init (#425554)
This commit is contained in:
		
						commit
						530db85404
					
				@ -857,6 +857,12 @@
 | 
			
		||||
  "modules-services-akkoma-distributed-deployment": [
 | 
			
		||||
    "index.html#modules-services-akkoma-distributed-deployment"
 | 
			
		||||
  ],
 | 
			
		||||
  "module-services-atalkd": [
 | 
			
		||||
    "index.html#module-services-atalkd"
 | 
			
		||||
  ],
 | 
			
		||||
  "module-services-atalkd-basic-usage": [
 | 
			
		||||
    "index.html#module-services-atalkd-basic-usage"
 | 
			
		||||
  ],
 | 
			
		||||
  "module-services-systemd-lock-handler": [
 | 
			
		||||
    "index.html#module-services-systemd-lock-handler"
 | 
			
		||||
  ],
 | 
			
		||||
 | 
			
		||||
@ -1073,6 +1073,7 @@
 | 
			
		||||
  ./services/networking/anubis.nix
 | 
			
		||||
  ./services/networking/aria2.nix
 | 
			
		||||
  ./services/networking/asterisk.nix
 | 
			
		||||
  ./services/networking/atalkd.nix
 | 
			
		||||
  ./services/networking/atftpd.nix
 | 
			
		||||
  ./services/networking/atticd.nix
 | 
			
		||||
  ./services/networking/autossh.nix
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										18
									
								
								nixos/modules/services/networking/atalkd.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								nixos/modules/services/networking/atalkd.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
# atalkd {#module-services-atalkd}
 | 
			
		||||
 | 
			
		||||
atalkd (AppleTalk daemon) is a component inside of the suite of software provided by Netatalk. It allows for the creation of AppleTalk networks, typically speaking over a Linux ethernet network interface, that can still be seen by classic macintosh computers. Using the NixOS module, you can specify a set of network interfaces that you wish to speak AppleTalk on, and the corresponding ATALKD.CONF(5) values to go along with it.
 | 
			
		||||
 | 
			
		||||
## Basic Usage {#module-services-atalkd-basic-usage}
 | 
			
		||||
 | 
			
		||||
A minimal configuration looks like this:
 | 
			
		||||
 | 
			
		||||
```nix
 | 
			
		||||
{
 | 
			
		||||
  services.atalkd = {
 | 
			
		||||
    enable = true;
 | 
			
		||||
    interfaces.wlan0.config = "-router -phase 2 -net 1 -addr 1.48 -zone \"Default\"";
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
It is also valid to use atalkd without setting `services.netatalk.interfaces` to any value, only providing `services.atalkd.enable = true`. In this case it will inherit the behavior of the upstream application when an empty config file is found, which is to listen on and use all interfaces.
 | 
			
		||||
							
								
								
									
										98
									
								
								nixos/modules/services/networking/atalkd.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								nixos/modules/services/networking/atalkd.nix
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,98 @@
 | 
			
		||||
{
 | 
			
		||||
  config,
 | 
			
		||||
  pkgs,
 | 
			
		||||
  lib,
 | 
			
		||||
  utils,
 | 
			
		||||
  ...
 | 
			
		||||
}:
 | 
			
		||||
 | 
			
		||||
let
 | 
			
		||||
  cfg = config.services.atalkd;
 | 
			
		||||
 | 
			
		||||
  # Generate atalkd.conf only if configFile isn't manually specified
 | 
			
		||||
  atalkdConfFile = pkgs.writeText "atalkd.conf" (
 | 
			
		||||
    lib.concatStringsSep "\n" (
 | 
			
		||||
      lib.mapAttrsToList (
 | 
			
		||||
        iface: ifaceCfg: iface + (if ifaceCfg.config != null then " ${ifaceCfg.config}" else "")
 | 
			
		||||
      ) cfg.interfaces
 | 
			
		||||
    )
 | 
			
		||||
  );
 | 
			
		||||
in
 | 
			
		||||
{
 | 
			
		||||
  options.services.atalkd = {
 | 
			
		||||
    enable = lib.mkEnableOption "the AppleTalk daemon";
 | 
			
		||||
 | 
			
		||||
    configFile = lib.mkOption {
 | 
			
		||||
      type = lib.types.nullOr lib.types.path;
 | 
			
		||||
      default = atalkdConfFile;
 | 
			
		||||
      defaultText = "/nix/store/xxx-atalkd.conf";
 | 
			
		||||
      description = ''
 | 
			
		||||
        Optional path to a custom `atalkd.conf` file. When set, this overrides the generated
 | 
			
		||||
        configuration from `services.atalkd.interfaces`.
 | 
			
		||||
      '';
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    interfaces = lib.mkOption {
 | 
			
		||||
      description = "Per-interface configuration for atalkd.";
 | 
			
		||||
      type = lib.types.attrsOf (
 | 
			
		||||
        lib.types.submodule {
 | 
			
		||||
          options.config = lib.mkOption {
 | 
			
		||||
            type = lib.types.nullOr lib.types.str;
 | 
			
		||||
            default = null;
 | 
			
		||||
            description = "Optional configuration string for this interface.";
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
      );
 | 
			
		||||
      default = { };
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  config =
 | 
			
		||||
    let
 | 
			
		||||
      interfaces = map (iface: "sys-subsystem-net-devices-${utils.escapeSystemdPath iface}.device") (
 | 
			
		||||
        builtins.attrNames cfg.interfaces
 | 
			
		||||
      );
 | 
			
		||||
    in
 | 
			
		||||
    lib.mkIf cfg.enable {
 | 
			
		||||
      system.requiredKernelConfig = [
 | 
			
		||||
        (config.lib.kernelConfig.isEnabled "APPLETALK")
 | 
			
		||||
      ];
 | 
			
		||||
      systemd.services.netatalk.partOf = [ "atalkd.service" ];
 | 
			
		||||
      systemd.services.netatalk.after = interfaces;
 | 
			
		||||
      systemd.services.netatalk.requires = interfaces;
 | 
			
		||||
      systemd.services.atalkd =
 | 
			
		||||
        let
 | 
			
		||||
          interfaces = map (iface: "sys-subsystem-net-devices-${utils.escapeSystemdPath iface}.device") (
 | 
			
		||||
            builtins.attrNames cfg.interfaces
 | 
			
		||||
          );
 | 
			
		||||
        in
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
          description = "atalkd AppleTalk daemon";
 | 
			
		||||
          unitConfig.Documentation = "man:atalkd.conf(5) man:atalkd(8)";
 | 
			
		||||
          after = interfaces;
 | 
			
		||||
          wants = [ "network.target" ];
 | 
			
		||||
          before = [ "netatalk.service" ];
 | 
			
		||||
          requires = interfaces;
 | 
			
		||||
 | 
			
		||||
          wantedBy = [ "multi-user.target" ];
 | 
			
		||||
 | 
			
		||||
          path = [ pkgs.netatalk ];
 | 
			
		||||
 | 
			
		||||
          serviceConfig = {
 | 
			
		||||
            Type = "forking";
 | 
			
		||||
            GuessMainPID = "no";
 | 
			
		||||
            DynamicUser = true;
 | 
			
		||||
            AmbientCapabilities = [ "CAP_NET_ADMIN" ];
 | 
			
		||||
            RuntimeDirectory = "atalkd";
 | 
			
		||||
            PIDFile = "/run/atalkd/atalkd";
 | 
			
		||||
            BindPaths = [ "/run/atalkd:/run/lock" ];
 | 
			
		||||
            ExecStart = "${pkgs.netatalk}/bin/atalkd -f ${cfg.configFile}";
 | 
			
		||||
            Restart = "always";
 | 
			
		||||
          };
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
  meta.maintainers = with lib.maintainers; [ matthewcroughan ];
 | 
			
		||||
  meta.doc = ./atalkd.md;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user