at 23.11-pre 4.4 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.aerospike; 8 9 aerospikeConf = pkgs.writeText "aerospike.conf" '' 10 # This stanza must come first. 11 service { 12 user aerospike 13 group aerospike 14 paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1. 15 proto-fd-max 15000 16 work-directory ${cfg.workDir} 17 } 18 logging { 19 console { 20 context any info 21 } 22 } 23 mod-lua { 24 system-path ${cfg.package}/share/udf/lua 25 user-path ${cfg.workDir}/udf/lua 26 } 27 network { 28 ${cfg.networkConfig} 29 } 30 ${cfg.extraConfig} 31 ''; 32 33in 34 35{ 36 37 ###### interface 38 39 options = { 40 41 services.aerospike = { 42 enable = mkEnableOption (lib.mdDoc "Aerospike server"); 43 44 package = mkOption { 45 default = pkgs.aerospike; 46 defaultText = literalExpression "pkgs.aerospike"; 47 type = types.package; 48 description = lib.mdDoc "Which Aerospike derivation to use"; 49 }; 50 51 workDir = mkOption { 52 type = types.str; 53 default = "/var/lib/aerospike"; 54 description = lib.mdDoc "Location where Aerospike stores its files"; 55 }; 56 57 networkConfig = mkOption { 58 type = types.lines; 59 default = '' 60 service { 61 address any 62 port 3000 63 } 64 65 heartbeat { 66 address any 67 mode mesh 68 port 3002 69 interval 150 70 timeout 10 71 } 72 73 fabric { 74 address any 75 port 3001 76 } 77 78 info { 79 address any 80 port 3003 81 } 82 ''; 83 description = lib.mdDoc "network section of configuration file"; 84 }; 85 86 extraConfig = mkOption { 87 type = types.lines; 88 default = ""; 89 example = '' 90 namespace test { 91 replication-factor 2 92 memory-size 4G 93 default-ttl 30d 94 storage-engine memory 95 } 96 ''; 97 description = lib.mdDoc "Extra configuration"; 98 }; 99 }; 100 101 }; 102 103 104 ###### implementation 105 106 config = mkIf config.services.aerospike.enable { 107 108 users.users.aerospike = { 109 name = "aerospike"; 110 group = "aerospike"; 111 uid = config.ids.uids.aerospike; 112 description = "Aerospike server user"; 113 }; 114 users.groups.aerospike.gid = config.ids.gids.aerospike; 115 116 systemd.services.aerospike = rec { 117 description = "Aerospike server"; 118 119 wantedBy = [ "multi-user.target" ]; 120 after = [ "network.target" ]; 121 122 serviceConfig = { 123 ExecStart = "${cfg.package}/bin/asd --fgdaemon --config-file ${aerospikeConf}"; 124 User = "aerospike"; 125 Group = "aerospike"; 126 LimitNOFILE = 100000; 127 PermissionsStartOnly = true; 128 }; 129 130 preStart = '' 131 if [ $(echo "$(${pkgs.procps}/bin/sysctl -n kernel.shmall) < 4294967296" | ${pkgs.bc}/bin/bc) == "1" ]; then 132 echo "kernel.shmall too low, setting to 4G pages" 133 ${pkgs.procps}/bin/sysctl -w kernel.shmall=4294967296 134 fi 135 if [ $(echo "$(${pkgs.procps}/bin/sysctl -n kernel.shmmax) < 1073741824" | ${pkgs.bc}/bin/bc) == "1" ]; then 136 echo "kernel.shmmax too low, setting to 1GB" 137 ${pkgs.procps}/bin/sysctl -w kernel.shmmax=1073741824 138 fi 139 if [ $(echo "$(cat /proc/sys/net/core/rmem_max) < 15728640" | ${pkgs.bc}/bin/bc) == "1" ]; then 140 echo "increasing socket buffer limit (/proc/sys/net/core/rmem_max): $(cat /proc/sys/net/core/rmem_max) -> 15728640" 141 echo 15728640 > /proc/sys/net/core/rmem_max 142 fi 143 if [ $(echo "$(cat /proc/sys/net/core/wmem_max) < 5242880" | ${pkgs.bc}/bin/bc) == "1" ]; then 144 echo "increasing socket buffer limit (/proc/sys/net/core/wmem_max): $(cat /proc/sys/net/core/wmem_max) -> 5242880" 145 echo 5242880 > /proc/sys/net/core/wmem_max 146 fi 147 install -d -m0700 -o ${serviceConfig.User} -g ${serviceConfig.Group} "${cfg.workDir}" 148 install -d -m0700 -o ${serviceConfig.User} -g ${serviceConfig.Group} "${cfg.workDir}/smd" 149 install -d -m0700 -o ${serviceConfig.User} -g ${serviceConfig.Group} "${cfg.workDir}/udf" 150 install -d -m0700 -o ${serviceConfig.User} -g ${serviceConfig.Group} "${cfg.workDir}/udf/lua" 151 ''; 152 }; 153 154 }; 155 156}