couchdb: add support for version 2.0.0
Version 2.0.0 is installed as a separate package called "couchdb2". When setting the config option "package" attribute to pkgs.couchdb2, a corresponding service configuration will be generated. If a previous 1.6 installation exists, the databases can still be found on the local port (default: 5986) and can be replicated from there. Note that single-node or cluster setup still needs to be configured manually, as described in http://docs.couchdb.org/en/2.0.0/install/index.html.
This commit is contained in:
parent
834de6ebaa
commit
f40b961378
@ -4,20 +4,29 @@ with lib;
|
|||||||
|
|
||||||
let
|
let
|
||||||
cfg = config.services.couchdb;
|
cfg = config.services.couchdb;
|
||||||
configFile = pkgs.writeText "couchdb.ini"
|
useVersion2 = strings.versionAtLeast (strings.getVersion cfg.package) "2.0";
|
||||||
|
configFile = pkgs.writeText "couchdb.ini" (
|
||||||
''
|
''
|
||||||
[couchdb]
|
[couchdb]
|
||||||
database_dir = ${cfg.databaseDir}
|
database_dir = ${cfg.databaseDir}
|
||||||
uri_file = ${cfg.uriFile}
|
uri_file = ${cfg.uriFile}
|
||||||
view_index_dir = ${cfg.viewIndexDir}
|
view_index_dir = ${cfg.viewIndexDir}
|
||||||
|
'' + (if useVersion2 then
|
||||||
|
''
|
||||||
|
[chttpd]
|
||||||
|
'' else
|
||||||
|
''
|
||||||
[httpd]
|
[httpd]
|
||||||
|
'') +
|
||||||
|
''
|
||||||
port = ${toString cfg.port}
|
port = ${toString cfg.port}
|
||||||
bind_address = ${cfg.bindAddress}
|
bind_address = ${cfg.bindAddress}
|
||||||
|
|
||||||
[log]
|
[log]
|
||||||
file = ${cfg.logFile}
|
file = ${cfg.logFile}
|
||||||
'';
|
'');
|
||||||
|
executable = if useVersion2 then "${cfg.package}/bin/couchdb"
|
||||||
|
else ''${cfg.package}/bin/couchdb -a ${configFile} -a ${pkgs.writeText "couchdb-extra.ini" cfg.extraConfig} -a ${cfg.configFile}'';
|
||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
@ -130,7 +139,6 @@ in {
|
|||||||
|
|
||||||
configFile = mkOption {
|
configFile = mkOption {
|
||||||
type = types.string;
|
type = types.string;
|
||||||
default = "/var/lib/couchdb/couchdb.ini";
|
|
||||||
description = ''
|
description = ''
|
||||||
Configuration file for persisting runtime changes. File
|
Configuration file for persisting runtime changes. File
|
||||||
needs to be readable and writable from couchdb user/group.
|
needs to be readable and writable from couchdb user/group.
|
||||||
@ -147,6 +155,9 @@ in {
|
|||||||
|
|
||||||
environment.systemPackages = [ cfg.package ];
|
environment.systemPackages = [ cfg.package ];
|
||||||
|
|
||||||
|
services.couchdb.configFile = mkDefault
|
||||||
|
(if useVersion2 then "/var/lib/couchdb/local.ini" else "/var/lib/couchdb/couchdb.ini");
|
||||||
|
|
||||||
systemd.services.couchdb = {
|
systemd.services.couchdb = {
|
||||||
description = "CouchDB Server";
|
description = "CouchDB Server";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
@ -170,11 +181,20 @@ in {
|
|||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
environment = mkIf useVersion2 {
|
||||||
|
# we are actually specifying 4 configuration files:
|
||||||
|
# 1. the preinstalled default.ini
|
||||||
|
# 2. the module configuration
|
||||||
|
# 3. the extraConfig from the module options
|
||||||
|
# 4. the locally writable config file, which couchdb itself writes to
|
||||||
|
ERL_FLAGS= ''-couch_ini ${cfg.package}/etc/default.ini ${configFile} ${pkgs.writeText "couchdb-extra.ini" cfg.extraConfig} ${cfg.configFile}'';
|
||||||
|
};
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
PermissionsStartOnly = true;
|
PermissionsStartOnly = true;
|
||||||
User = cfg.user;
|
User = cfg.user;
|
||||||
Group = cfg.group;
|
Group = cfg.group;
|
||||||
ExecStart = "${cfg.package}/bin/couchdb -a ${configFile} -a ${pkgs.writeText "couchdb-extra.ini" cfg.extraConfig} -a ${cfg.configFile}";
|
ExecStart = executable;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
53
pkgs/servers/http/couchdb/2.0.0.nix
Normal file
53
pkgs/servers/http/couchdb/2.0.0.nix
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
{ stdenv, fetchurl, erlang, icu, openssl, spidermonkey
|
||||||
|
, coreutils, bash, makeWrapper }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
name = "couchdb-${version}";
|
||||||
|
version = "2.0.0";
|
||||||
|
|
||||||
|
src = fetchurl {
|
||||||
|
url = "mirror://apache/couchdb/source/${version}/apache-${name}.tar.gz";
|
||||||
|
sha256 = "1jkfx6g9anrgmkhrkcn50axcamragranwsciw1rhmi86rglkrbyc";
|
||||||
|
};
|
||||||
|
|
||||||
|
buildInputs = [ erlang icu openssl spidermonkey makeWrapper ];
|
||||||
|
|
||||||
|
patches = [ ./jsapi.patch ];
|
||||||
|
postPatch = ''
|
||||||
|
substituteInPlace src/couch/rebar.config.script --replace '-DHAVE_CURL -I/usr/local/include' "-DHAVE_CURL -I/usr/local/include $NIX_CFLAGS_COMPILE"
|
||||||
|
|
||||||
|
patch bin/rebar <<EOF
|
||||||
|
1c1
|
||||||
|
< #!/usr/bin/env escript
|
||||||
|
---
|
||||||
|
> #!${coreutils}/bin/env escript
|
||||||
|
EOF
|
||||||
|
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Configure a username. The build system would use "couchdb" as
|
||||||
|
# default if none is provided. Note that it is unclear where this
|
||||||
|
# username is actually used in the build, as any choice seems to be
|
||||||
|
# working.
|
||||||
|
configurePhase = ''
|
||||||
|
./configure -u nobody
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
make release
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out
|
||||||
|
cp -r rel/couchdb/* $out
|
||||||
|
wrapProgram $out/bin/couchdb --suffix PATH : ${bash}/bin
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with stdenv.lib; {
|
||||||
|
description = "A database that uses JSON for documents, JavaScript for MapReduce queries, and regular HTTP for an API";
|
||||||
|
homepage = "http://couchdb.apache.org";
|
||||||
|
license = licenses.asl20;
|
||||||
|
platforms = platforms.all;
|
||||||
|
maintainers = with maintainers; [ garbas ];
|
||||||
|
};
|
||||||
|
}
|
60
pkgs/servers/http/couchdb/jsapi.patch
Normal file
60
pkgs/servers/http/couchdb/jsapi.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
diff -ru couch_js/http.c couch_js-patched/http.c
|
||||||
|
--- apache-couchdb-2.0.0/src/couch/priv/couch_js/http.c 2016-09-12 11:28:51.000000000 +0200
|
||||||
|
+++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/http.c 2017-02-10 10:52:33.025854045 +0100
|
||||||
|
@@ -15,7 +15,7 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
-#include <jsapi.h>
|
||||||
|
+#include <js/jsapi.h>
|
||||||
|
#include "config.h"
|
||||||
|
#include "utf8.h"
|
||||||
|
#include "util.h"
|
||||||
|
diff -ru couch_js/main.c couch_js-patched/main.c
|
||||||
|
--- apache-couchdb-2.0.0/src/couch/priv/couch_js/main.c 2016-09-12 11:28:51.000000000 +0200
|
||||||
|
+++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/main.c 2017-02-10 10:52:33.001854154 +0100
|
||||||
|
@@ -20,7 +20,7 @@
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#include <jsapi.h>
|
||||||
|
+#include <js/jsapi.h>
|
||||||
|
#include "config.h"
|
||||||
|
#include "http.h"
|
||||||
|
#include "utf8.h"
|
||||||
|
diff -ru couch_js/utf8.c couch_js-patched/utf8.c
|
||||||
|
--- apache-couchdb-2.0.0/src/couch/priv/couch_js/utf8.c 2016-09-12 11:28:51.000000000 +0200
|
||||||
|
+++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/utf8.c 2017-02-10 10:52:33.009854117 +0100
|
||||||
|
@@ -10,7 +10,7 @@
|
||||||
|
// License for the specific language governing permissions and limitations under
|
||||||
|
// the License.
|
||||||
|
|
||||||
|
-#include <jsapi.h>
|
||||||
|
+#include <js/jsapi.h>
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
static int
|
||||||
|
diff -ru couch_js/util.c couch_js-patched/util.c
|
||||||
|
--- apache-couchdb-2.0.0/src/couch/priv/couch_js/util.c 2016-09-12 11:28:51.000000000 +0200
|
||||||
|
+++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/util.c 2017-02-10 10:52:33.017854081 +0100
|
||||||
|
@@ -13,7 +13,7 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
-#include <jsapi.h>
|
||||||
|
+#include <js/jsapi.h>
|
||||||
|
|
||||||
|
#include "help.h"
|
||||||
|
#include "util.h"
|
||||||
|
diff -ru couch_js/util.h couch_js-patched/util.h
|
||||||
|
--- apache-couchdb-2.0.0/src/couch/priv/couch_js/util.h 2016-09-12 11:28:51.000000000 +0200
|
||||||
|
+++ apache-couchdb-2.0.0-patched/src/couch/priv/couch_js/util.h 2017-02-10 10:52:32.988854212 +0100
|
||||||
|
@@ -13,7 +13,7 @@
|
||||||
|
#ifndef COUCHJS_UTIL_H
|
||||||
|
#define COUCHJS_UTIL_H
|
||||||
|
|
||||||
|
-#include <jsapi.h>
|
||||||
|
+#include <js/jsapi.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int no_eval;
|
@ -10287,6 +10287,10 @@ with pkgs;
|
|||||||
erlang = erlangR16;
|
erlang = erlangR16;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
couchdb2 = callPackage ../servers/http/couchdb/2.0.0.nix {
|
||||||
|
spidermonkey = spidermonkey_1_8_5;
|
||||||
|
};
|
||||||
|
|
||||||
couchpotato = callPackage ../servers/couchpotato {};
|
couchpotato = callPackage ../servers/couchpotato {};
|
||||||
|
|
||||||
dico = callPackage ../servers/dico { };
|
dico = callPackage ../servers/dico { };
|
||||||
|
Loading…
Reference in New Issue
Block a user