diff options
author | Rok Garbas <rok@garbas.si> | 2014-01-17 00:30:16 +0000 |
---|---|---|
committer | Domen Kožar <domen@dev.si> | 2014-02-27 13:34:11 +0100 |
commit | 62438c09f7cc811f994510550614c9265b3b1d18 (patch) | |
tree | 63876a41ef82ca27a3cc3004185412115b4ed4e4 /nixos/modules/services | |
parent | 97a0dd9eb92014be027ccc89cb39e43baabe090d (diff) | |
download | nixlib-62438c09f7cc811f994510550614c9265b3b1d18.tar nixlib-62438c09f7cc811f994510550614c9265b3b1d18.tar.gz nixlib-62438c09f7cc811f994510550614c9265b3b1d18.tar.bz2 nixlib-62438c09f7cc811f994510550614c9265b3b1d18.tar.lz nixlib-62438c09f7cc811f994510550614c9265b3b1d18.tar.xz nixlib-62438c09f7cc811f994510550614c9265b3b1d18.tar.zst nixlib-62438c09f7cc811f994510550614c9265b3b1d18.zip |
update couchdb to 1.5.0(current latest) and add service for it
Diffstat (limited to 'nixos/modules/services')
-rw-r--r-- | nixos/modules/services/databases/couchdb.nix | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/nixos/modules/services/databases/couchdb.nix b/nixos/modules/services/databases/couchdb.nix new file mode 100644 index 000000000000..4dc2429786d6 --- /dev/null +++ b/nixos/modules/services/databases/couchdb.nix @@ -0,0 +1,214 @@ +{ config, pkgs, ... }: + +with pkgs.lib; + +let + + cfg = config.services.couchdb; + configFile = pkgs.writeText "couchdb.ini" + '' + [couchdb] + database_dir = ${cfg.databaseDir} + uri_file = ${cfg.uriFile} + view_index_dir = ${cfg. viewIndexDir} + + [httpd] + port = ${toString cfg.port} + bind_address = ${cfg.bindAddress} + + [log] + file = ${cfg.logFile} + ''; + configExtraFile = pkgs.writeText "couchdb-extra.ini" cfg.extraConfig; + +in +{ + + ###### interface + + options = { + + services.couchdb = { + + enable = mkOption { + type = types.bool; + default = false; + description = '' + Whether to run CouchDB Server. + ''; + }; + + package = mkOption { + type = types.path; + default = pkgs.couchdb; + example = literalExample "pkgs.couchdb"; + description = '' + CouchDB package to use. + ''; + }; + + + user = mkOption { + type = types.string; + default = "couchdb"; + description = '' + User account under which couchdb runs. + ''; + }; + + group = mkOption { + type = types.string; + default = "couchdb"; + description = '' + Group account under which couchdb runs. + ''; + }; + + pidFile = mkOption { + type = types.string; + default = "/var/run/couchdb/couchdb.pid"; + description = '' + pid file. + ''; + }; + + # couchdb options: http://docs.couchdb.org/en/latest/config/index.html + + databaseDir = mkOption { + type = types.string; + default = "/var/lib/couchdb"; + description = '' + Specifies location of CouchDB database files (*.couch named). This + location should be writable and readable for the user the CouchDB + service runs as (couchdb by default). + ''; + }; + + uriFile = mkOption { + type = types.string; + default = "/var/run/couchdb/couchdb.uri"; + description = '' + This file contains the full URI that can be used to access this + instance of CouchDB. It is used to help discover the port CouchDB is + running on (if it was set to 0 (e.g. automatically assigned any free + one). This file should be writable and readable for the user that + runs the CouchDB service (couchdb by default). + ''; + }; + + viewIndexDir = mkOption { + type = types.string; + default = "/var/lib/couchdb"; + description = '' + Specifies location of CouchDB view index files. This location should + be writable and readable for the user that runs the CouchDB service + (couchdb by default). + ''; + }; + + bindAddress = mkOption { + type = types.string; + default = "127.0.0.1"; + description = '' + Defines the IP address by which CouchDB will be accessible. + ''; + }; + + port = mkOption { + type = types.int; + default = 5984; + description = '' + Defined the port number to listen. + ''; + }; + + logFile = mkOption { + type = types.string; + default = "/var/log/couchdb.log"; + description = '' + Specifies the location of file for logging output. + ''; + }; + + extraConfig = mkOption { + type = types.string; + default = ""; + description = '' + Extra configuration. Overrides any other cofiguration. + ''; + }; + + customConfigFile = mkOption { + type = types.string; + default = "/var/lib/couchdb/custom.ini"; + description = '' + Custom configuration file. File needs to be readable and writable + from couchdb user/group. + ''; + }; + }; + + }; + + ###### implementation + + config = mkIf config.services.couchdb.enable { + + environment.systemPackages = [ cfg.package ]; + + systemd.services.couchdb = { + description = "CouchDB Server"; + wantedBy = [ "multi-user.target" ]; + + preStart = + '' + if ! test -e ${cfg.pidFile}; then + mkdir -p `dirname ${cfg.pidFile}`; + fi + if ! test -e ${cfg.uriFile}; then + mkdir -p `dirname ${cfg.uriFile}`; + touch ${cfg.uriFile}; + fi + if ! test -e ${cfg.logFile}; then + mkdir -p `dirname ${cfg.logFile}`; + touch ${cfg.logFile}; + fi + if ! test -e ${cfg.customConfigFile}; then + mkdir -p `dirname ${cfg.customConfigFile}`; + touch ${cfg.customConfigFile}; + fi + if ! test -e ${cfg.databaseDir}; then + mkdir -p ${cfg.databaseDir}; + fi + if ! test -e ${cfg.viewIndexDir}; then + mkdir -p ${cfg.viewIndexDir}; + fi + chown ${cfg.user}:${cfg.group} ${cfg.pidFile} + chown ${cfg.user}:${cfg.group} ${cfg.uriFile} + chown ${cfg.user}:${cfg.group} ${cfg.logFile} + chown ${cfg.user}:${cfg.group} ${cfg.customConfigFile} + chown ${cfg.user}:${cfg.group} ${cfg.databaseDir} + chown ${cfg.user}:${cfg.group} ${cfg.viewIndexDir} + ''; + + serviceConfig = { + PermissionsStartOnly = true; + User = cfg.user; + Group = cfg.group; + Type = "forking"; + ExecStart = "${cfg.package}/bin/couchdb -b -o /dev/null -e /dev/null -p ${cfg.pidFile} -a ${configFile} -a ${configExtraFile} -a ${cfg.customConfigFile}"; + #ExecStart = "${cfg.package}/bin/couchdb -b -o /dev/null -e /dev/null -p ${cfg.pidFile} -a ${configFile} -a ${configExtraFile} -a ${cfg.customConfigFile}"; + ExecStop = "${cfg.package}/bin/couchdb -d"; + }; + }; + + users.extraUsers.couchdb = { + description = "CouchDB Server user"; + group = "couchdb"; + uid = config.ids.uids.couchdb; + }; + + users.extraGroups.couchdb.gid = config.ids.gids.couchdb; + + }; +} |