From c7f61ee921f648b87a1dc3db57cdaf8507c2ba28 Mon Sep 17 00:00:00 2001 From: Oliver Charles Date: Mon, 10 Jun 2013 21:45:24 +0100 Subject: [PATCH 1/2] memcached: Add NixOS support --- modules/module-list.nix | 1 + modules/services/databases/memcached.nix | 61 ++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 modules/services/databases/memcached.nix diff --git a/modules/module-list.nix b/modules/module-list.nix index 6da86c0c669..651eed4071f 100644 --- a/modules/module-list.nix +++ b/modules/module-list.nix @@ -69,6 +69,7 @@ ./services/backup/sitecopy-backup.nix ./services/databases/4store-endpoint.nix ./services/databases/4store.nix + ./services/databases/memcached.nix ./services/databases/mongodb.nix ./services/databases/mysql.nix ./services/databases/mysql55.nix diff --git a/modules/services/databases/memcached.nix b/modules/services/databases/memcached.nix new file mode 100644 index 00000000000..f5f6be68f7f --- /dev/null +++ b/modules/services/databases/memcached.nix @@ -0,0 +1,61 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + cfg = config.services.memcached; + + memcached = pkgs.memcached; + +in + +{ + + ###### interface + + options = { + + services.memcached = { + + enable = mkOption { + default = false; + description = " + Whether to enable Memcached. + "; + }; + + user = mkOption { + default = "memcached"; + description = "The user to run Memcached as"; + }; + + }; + + }; + + ###### implementation + + config = mkIf config.services.memcached.enable { + + users.extraUsers = singleton + { name = cfg.user; + description = "Memcached server user"; + }; + + environment.systemPackages = [ memcached ]; + + systemd.services.memcached = + { description = "Memcached server"; + + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + + serviceConfig = { + ExecStart = "${memcached}/bin/memcached"; + User = cfg.user; + }; + }; + }; + +} From df6312e2cb842bbe1c612b33bac25f6c562e90cc Mon Sep 17 00:00:00 2001 From: Oliver Charles Date: Sun, 23 Jun 2013 19:07:41 +0100 Subject: [PATCH 2/2] memcached: Add more options and extraOptions support --- modules/services/databases/memcached.nix | 38 +++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/modules/services/databases/memcached.nix b/modules/services/databases/memcached.nix index f5f6be68f7f..a0e264f2299 100644 --- a/modules/services/databases/memcached.nix +++ b/modules/services/databases/memcached.nix @@ -30,6 +30,36 @@ in description = "The user to run Memcached as"; }; + listen = mkOption { + default = "127.0.0.1"; + description = "The IP address to bind to"; + }; + + port = mkOption { + default = 11211; + description = "The port to bind to"; + }; + + socket = mkOption { + default = ""; + description = "Unix socket path to listen on. Setting this will disable network support"; + example = "/var/run/memcached"; + }; + + maxMemory = mkOption { + default = 64; + description = "The maximum amount of memory to use for storage, in megabytes."; + }; + + maxConnections = mkOption { + default = 1024; + description = "The maximum number of simultaneous connections"; + }; + + extraOptions = mkOption { + default = []; + description = "A list of extra options that will be added as a suffix when running memcached"; + }; }; }; @@ -52,7 +82,13 @@ in after = [ "network.target" ]; serviceConfig = { - ExecStart = "${memcached}/bin/memcached"; + ExecStart = + let + networking = if cfg.socket != "" + then "-s ${cfg.socket}" + else "-l ${cfg.listen} -p ${toString cfg.port}"; + in "${memcached}/bin/memcached ${networking} -m ${toString cfg.maxMemory} -c ${toString cfg.maxConnections} ${concatStringsSep " " cfg.extraOptions}"; + User = cfg.user; }; };