couchdb module for CS173Tourney
svn path=/configurations/trunk/tud/; revision=18208
Rob Vermaas committed
Nov 6, 2009 at 14:31 UTC
9758f75ff777bf0ccdc1dd64995f67d7245ee84d
1 file changed
+110
couchdb.nix
new
+110
@@ -0,0 +1,110 @@
1
+{pkgs, config, ...}:
2
+
3
+let
4
+
5
+ inherit (pkgs.lib) mkOption mkIf singleton;
6
+ inherit (pkgs) couchdb getopt;
7
+ modprobe = config.system.sbin.modprobe;
8
+
9
+ couchdbUser = "couchdb";
10
+ couchdbFlags = "-c ${couchdbCfg}";
11
+ couchdbCfg = pkgs.writeText "couchdb.ini" ''
12
+ [Couch]
13
+ ConsoleStartupMsg=Apache CouchDB is starting.
14
+ DbRootDir=${config.services.couchdb.dbRootDir}
15
+ Port=5984
16
+ BindAddress=127.0.0.1
17
+ DocumentRoot=${config.services.couchdb.documentRoot}
18
+ LogFile=${config.services.couchdb.logDir}/couchdb.log
19
+ UtilDriverDir=${couchdb}/lib/couchdb/erlang/lib/couch-0.8.1-incubating/priv/lib
20
+ LogLevel=info
21
+ [Couch Query Servers]
22
+ javascript=${couchdb}/bin/couchjs ${couchdb}/share/couchdb/server/main.js
23
+ '';
24
+
25
+ stateDir = "/var/spool/couchdb";
26
+
27
+ wrapper = pkgs.writeTextFile {
28
+ name = "couchdb-wrapper";
29
+ text = ''
30
+ #!/bin/sh
31
+ HOME=${stateDir} ${couchdb}/bin/couchdb ${couchdbFlags}
32
+ '';
33
+ executable = true;
34
+ destination = "/bin/couchdb";
35
+ };
36
+
37
+in
38
+
39
+{
40
+ options = {
41
+ services.couchdb = {
42
+ enable = mkOption {
43
+ default = false;
44
+ description = ''
45
+ CouchDB
46
+ '';
47
+ };
48
+
49
+ dbRootDir = mkOption {
50
+ default = "/data/couchdb/rootdir";
51
+ description = ''
52
+ DbRootDir in CouchDB configuration file
53
+ '';
54
+ };
55
+
56
+ documentRoot = mkOption {
57
+ default = "/data/couchdb/documentroot";
58
+ description = ''
59
+ DocumentRoot in CouchDB configuration file
60
+ '';
61
+ };
62
+
63
+ logDir = mkOption {
64
+ default = "/data/couchdb/logs";
65
+ description = ''
66
+ Location of CouchDB log files
67
+ '';
68
+ };
69
+
70
+ };
71
+ };
72
+
73
+ config = mkIf config.services.couchdb.enable {
74
+
75
+ environment.systemPackages = [ couchdb ];
76
+
77
+ users.extraUsers = singleton
78
+ { name = couchdbUser;
79
+ uid = 33;
80
+ description = "CouchDB daemon user";
81
+ home = stateDir;
82
+ };
83
+
84
+ jobs.couchdb =
85
+ { description = "CouchDB daemon";
86
+
87
+ startOn = "startup";
88
+ stopOn = "shutdown";
89
+
90
+ preStart =
91
+ ''
92
+ mkdir -m 0755 -p ${stateDir}
93
+ chown ${couchdbUser} ${stateDir}
94
+
95
+ mkdir -m 0755 -p ${config.services.couchdb.logDir}
96
+ chown ${couchdbUser} ${config.services.couchdb.logDir}
97
+
98
+ mkdir -m 0755 -p ${config.services.couchdb.dbRootDir}
99
+ chown ${couchdbUser} ${config.services.couchdb.dbRootDir}
100
+
101
+ mkdir -m 0755 -p ${config.services.couchdb.documentRoot}
102
+ chown ${couchdbUser} ${config.services.couchdb.documentRoot}
103
+ '';
104
+
105
+ exec = "${wrapper}/bin/couchdb";
106
+ };
107
+
108
+ };
109
+
110
+}