pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

redict: New package, persistent key-value database with built-in net interface



Module Name:	pkgsrc-wip
Committed By:	Johann Rudloff <johann%sinyax.net@localhost>
Pushed By:	cypheon
Date:		Wed Apr 3 21:51:46 2024 +0200
Changeset:	f604fc26789d5809dcdc3a36858dfcda9cacb68a

Added Files:
	redict/DESCR
	redict/Makefile
	redict/PLIST
	redict/distinfo
	redict/files/redict.sh
	redict/files/smf/manifest.xml
	redict/options.mk
	redict/patches/patch-redict.conf
	redict/patches/patch-src_hyperloglog.c
	redict/patches/patch-src_object.c

Log Message:
redict: New package, persistent key-value database with built-in net interface

Redict is an advanced key-value store. It is similar to memcached but the
dataset is not volatile, and values can be strings, exactly like in memcached,
but also lists, sets, and ordered sets. All these data types can be manipulated
with atomic operations to push/pop elements, add/remove elements, perform
server side union, intersection, and difference between sets, and so forth.
Redict also supports different kinds of sorting.

Redict 7.3.0 is a fork of and is broadly compatible with Redis 7.2.4. The
following notable changes are included:

 * The name has been updated throughout the software from "redis" to "redict".
   As a result, for example, redis-server is now redict-server.
 * The Lua API global has been renamed to "redict". "redis" is an alias for
   this for backwards compatibility.
 * The Modules API symbols have been renamed to RedictModule. Modules are
   binary compatible with Redis Modules targetting Redis 7.2.4.

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=f604fc26789d5809dcdc3a36858dfcda9cacb68a

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 redict/DESCR                           | 16 +++++++
 redict/Makefile                        | 82 ++++++++++++++++++++++++++++++++++
 redict/PLIST                           | 12 +++++
 redict/distinfo                        |  8 ++++
 redict/files/redict.sh                 | 25 +++++++++++
 redict/files/smf/manifest.xml          | 31 +++++++++++++
 redict/options.mk                      | 12 +++++
 redict/patches/patch-redict.conf       | 42 +++++++++++++++++
 redict/patches/patch-src_hyperloglog.c | 23 ++++++++++
 redict/patches/patch-src_object.c      | 15 +++++++
 10 files changed, 266 insertions(+)

diffs:
diff --git a/redict/DESCR b/redict/DESCR
new file mode 100644
index 0000000000..7b5f46eba8
--- /dev/null
+++ b/redict/DESCR
@@ -0,0 +1,16 @@
+Redict is an advanced key-value store. It is similar to memcached but the
+dataset is not volatile, and values can be strings, exactly like in memcached,
+but also lists, sets, and ordered sets. All these data types can be manipulated
+with atomic operations to push/pop elements, add/remove elements, perform
+server side union, intersection, and difference between sets, and so forth.
+Redict also supports different kinds of sorting.
+
+Redict 7.3.0 is a fork of and is broadly compatible with Redis 7.2.4. The
+following notable changes are included:
+
+ * The name has been updated throughout the software from "redis" to "redict".
+   As a result, for example, redis-server is now redict-server.
+ * The Lua API global has been renamed to "redict". "redis" is an alias for
+   this for backwards compatibility.
+ * The Modules API symbols have been renamed to RedictModule. Modules are
+   binary compatible with Redis Modules targetting Redis 7.2.4.
diff --git a/redict/Makefile b/redict/Makefile
new file mode 100644
index 0000000000..b156de8033
--- /dev/null
+++ b/redict/Makefile
@@ -0,0 +1,82 @@
+# $NetBSD$
+
+DISTNAME=	${PKGVERSION}
+PKGNAME=	redict-7.3.0
+CATEGORIES=	databases
+MASTER_SITES=	https://codeberg.org/redict/redict/archive/
+
+MAINTAINER=	pkgsrc-users%NetBSD.org@localhost
+HOMEPAGE=	https://redict.io/
+COMMENT=	Persistent key-value database with built-in net interface
+LICENSE=	gnu-lgpl-v3
+WRKSRC=		${WRKDIR}/redict
+
+TEST_DEPENDS+=	tcl>=8.5:../../lang/tcl
+
+USE_LANGUAGES=		c
+USE_CC_FEATURES=	c99
+USE_TOOLS+=		gmake pkg-config
+
+# Don't let LTO kick in as it is not supported on all platforms.
+MAKE_ENV+=	OPTIMIZATION=${DBG:U-O2:Q}
+# Use standard malloc by default
+MAKE_ENV+=	USE_JEMALLOC=no
+
+.include "../../mk/bsd.prefs.mk"
+
+.include "options.mk"
+
+RCD_SCRIPTS+=		redict
+RCD_SCRIPT_SRC.redict=	${FILESDIR}/redict.sh
+
+DOCDIR=			share/doc/redict
+DOCFILES+=		README.md SECURITY.md TLS.md
+EGDIR=			${PREFIX}/share/examples/${PKGBASE}
+INSTALLATION_DIRS+=	bin ${DOCDIR} ${EGDIR} ${EGDIR}/utils ${EGDIR}/tests
+
+BUILD_DEFS+=		VARBASE REDICT_USER REDICT_GROUP REDICT_DATADIR
+BUILD_DEFS+=		REDICT_LOGDIR REDICT_PIDDIR PKG_SYSCONFDIR
+
+REDICT_USER?=		redict
+REDICT_GROUP?=		redict
+REDICT_DATADIR?=	${VARBASE}/db/redict
+REDICT_LOGDIR?=		${VARBASE}/log/redict
+REDICT_PIDDIR?=		${VARBASE}/run
+
+OWN_DIRS_PERMS+=	${REDICT_DATADIR} ${REDICT_USER} ${REDICT_GROUP} 0770
+OWN_DIRS_PERMS+=	${REDICT_LOGDIR} ${REDICT_USER} ${REDICT_GROUP} 0770
+
+CONF_FILES_PERMS+=	${PREFIX}/share/redict/redict.conf ${PKG_SYSCONFDIR}/redict.conf \
+			${REAL_ROOT_USER} ${REDICT_GROUP} 0640
+
+PKG_GROUPS+=			${REDICT_GROUP}
+PKG_USERS+=			${REDICT_USER}:${REDICT_GROUP}
+PKG_GECOS.${REDICT_USER}=	redict daemon user
+PKG_HOME.${REDICT_USER}=	${REDICT_DBDIR}
+
+FILES_SUBST+=		REDICT_USER=${REDICT_USER}
+FILES_SUBST+=		REDICT_GROUP=${REDICT_GROUP}
+FILES_SUBST+=		REDICT_DATADIR=${REDICT_DATADIR}
+
+SUBST_CLASSES+=			fix-paths
+SUBST_STAGE.fix-paths=		pre-configure
+SUBST_MESSAGE.fix-paths=	Fixing paths.
+SUBST_FILES.fix-paths=		redict.conf
+SUBST_VARS.fix-paths=		REDICT_DATADIR REDICT_LOGDIR REDICT_PIDDIR
+
+CHECK_PORTABILITY_SKIP+=	deps/jemalloc/configure
+
+post-extract:
+	${CHMOD} -R g-w ${WRKSRC}
+
+post-install:
+.for file in ${DOCFILES}
+	${INSTALL_DATA} ${WRKSRC}/${file} ${DESTDIR}${PREFIX}/${DOCDIR}/${file}
+.endfor
+
+do-test:
+	cd ${WRKSRC} && ${SH} runtest
+
+.include "../../mk/pthread.buildlink3.mk"
+.include "../../mk/atomic64.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/redict/PLIST b/redict/PLIST
new file mode 100644
index 0000000000..f4a6362225
--- /dev/null
+++ b/redict/PLIST
@@ -0,0 +1,12 @@
+@comment $NetBSD$
+bin/redict-benchmark
+bin/redict-check-aof
+bin/redict-check-rdb
+bin/redict-cli
+bin/redict-sentinel
+bin/redict-server
+share/doc/redict/README.md
+share/doc/redict/SECURITY.md
+share/doc/redict/TLS.md
+share/redict/redict.conf
+share/redict/sentinel.conf
diff --git a/redict/distinfo b/redict/distinfo
new file mode 100644
index 0000000000..815e985de0
--- /dev/null
+++ b/redict/distinfo
@@ -0,0 +1,8 @@
+$NetBSD$
+
+BLAKE2s (7.3.0.tar.gz) = a2ae5b1b74a211c35613eb43f3875ffaf04e509727f1ae3b4e5257905aab09a3
+SHA512 (7.3.0.tar.gz) = d33f4dfaf728f5a22abe7a6223f3192c39dc41a32e7bcb0f453caaa859f35b512534979c26ced9f4458c19611debd282f37955e930151c0f827035f349647226
+Size (7.3.0.tar.gz) = 3414514 bytes
+SHA1 (patch-redict.conf) = fc87f130d9ca67f0fcb6293dbb2b3ec5cad069ef
+SHA1 (patch-src_hyperloglog.c) = 27ac35394e1da9d9c7b6d433dd08118a59497c64
+SHA1 (patch-src_object.c) = 30ffaec9c7e6135e3a5576cd1a35d7bcec668299
diff --git a/redict/files/redict.sh b/redict/files/redict.sh
new file mode 100644
index 0000000000..850b5ba2d6
--- /dev/null
+++ b/redict/files/redict.sh
@@ -0,0 +1,25 @@
+#!@RCD_SCRIPTS_SHELL@
+#
+# $NetBSD$
+#
+# PROVIDE: redict
+# REQUIRE: DAEMON NETWORKING
+# KEYWORD: shutdown
+
+if [ -f /etc/rc.subr ]; then
+	. /etc/rc.subr
+fi
+
+name="redict"
+rcvar=$name
+command="@PREFIX@/bin/redict-server"
+redict_user="@REDICT_USER@"
+redict_flags="@PKG_SYSCONFDIR@/redict.conf"
+
+if [ -f /etc/rc.subr ]; then
+        load_rc_config $name
+	run_rc_command "$1"
+else
+	echo -n "${name}"
+	@SU@ -m ${redict_user} -c "${command}"
+fi
diff --git a/redict/files/smf/manifest.xml b/redict/files/smf/manifest.xml
new file mode 100644
index 0000000000..5484912dd5
--- /dev/null
+++ b/redict/files/smf/manifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
+<service_bundle type="manifest" name="export">
+  <service name="@SMF_PREFIX@/@SMF_NAME@" type="service" version="1">
+    <create_default_instance enabled="false" />
+    <single_instance />
+    <dependency name="network" grouping="require_all" restart_on="error" type="service">
+      <service_fmri value="svc:/milestone/network:default" />
+    </dependency>
+    <dependency name="filesystem" grouping="require_all" restart_on="error" type="service">
+      <service_fmri value="svc:/system/filesystem/local" />
+    </dependency>
+    <method_context working_directory="@REDIS_DATADIR@">
+      <method_credential user="@REDIS_USER@" group="@REDIS_GROUP@" />
+    </method_context>
+    <exec_method type="method" name="start" exec="@PREFIX@/bin/redis-server %{config_file}" timeout_seconds="60" />
+    <exec_method type="method" name="stop" exec=":kill" timeout_seconds="60" />
+    <property_group name="startd" type="framework">
+      <propval name="duration" type="astring" value="contract" />
+      <propval name="ignore_error" type="astring" value="core,signal" />
+    </property_group>
+    <property_group name="application" type="application">
+      <propval name="config_file" type="astring" value="@PKG_SYSCONFDIR@/redis.conf" />
+    </property_group>
+    <template>
+      <common_name>
+        <loctext xml:lang="C">Redis server</loctext>
+      </common_name>
+    </template>
+  </service>
+</service_bundle>
diff --git a/redict/options.mk b/redict/options.mk
new file mode 100644
index 0000000000..74be67e108
--- /dev/null
+++ b/redict/options.mk
@@ -0,0 +1,12 @@
+# $NetBSD: options.mk,v 1.1 2020/08/19 16:32:40 jperkin Exp $
+
+PKG_OPTIONS_VAR=	PKG_OPTIONS.redict
+PKG_SUPPORTED_OPTIONS=	ssl
+PKG_SUGGESTED_OPTIONS=	ssl
+
+.include "../../mk/bsd.options.mk"
+
+.if !empty(PKG_OPTIONS:Mssl)
+.  include "../../security/openssl/buildlink3.mk"
+MAKE_ENV+=		BUILD_TLS=yes
+.endif
diff --git a/redict/patches/patch-redict.conf b/redict/patches/patch-redict.conf
new file mode 100644
index 0000000000..62564f6133
--- /dev/null
+++ b/redict/patches/patch-redict.conf
@@ -0,0 +1,42 @@
+$NetBSD$
+
+Sane defaults for the config file.
+
+--- redict.conf.orig	2021-02-22 21:23:58.000000000 +0000
++++ redict.conf
+@@ -244,7 +244,7 @@ tcp-keepalive 300
+ # By default redict does not run as a daemon. Use 'yes' if you need it.
+ # Note that redict will write a pid file in /var/run/redict.pid when daemonized.
+ # When redict is supervised by upstart or systemd, this parameter has no impact.
+-daemonize no
++daemonize yes
+ 
+ # If you run redict from upstart or systemd, redict can interact with your
+ # supervision tree. Options:
+@@ -276,7 +276,7 @@ daemonize no
+ #
+ # Note that on modern Linux systems "/run/redict.pid" is more conforming
+ # and should be used instead.
+-pidfile /var/run/redict_6379.pid
++pidfile @REDICT_PIDDIR@/redict.pid
+ 
+ # Specify the server verbosity level.
+ # This can be one of:
+@@ -289,7 +289,7 @@ loglevel notice
+ # Specify the log file name. Also the empty string can be used to force
+ # redict to log on the standard output. Note that if you use standard
+ # output for logging but daemonize, logs will be sent to /dev/null
+-logfile ""
++logfile @REDICT_LOGDIR@/redict.log
+ 
+ # To enable logging to the system logger, just set 'syslog-enabled' to yes,
+ # and optionally update the other syslog parameters to suit your needs.
+@@ -441,7 +441,7 @@ rdb-del-sync-files no
+ # The Append Only File will also be created inside this directory.
+ #
+ # Note that you must specify a directory here, not a file name.
+-dir ./
++dir @REDICT_DATADIR@ 
+ 
+ ################################# REPLICATION #################################
+ 
diff --git a/redict/patches/patch-src_hyperloglog.c b/redict/patches/patch-src_hyperloglog.c
new file mode 100644
index 0000000000..0588baaa05
--- /dev/null
+++ b/redict/patches/patch-src_hyperloglog.c
@@ -0,0 +1,23 @@
+$NetBSD$
+
+Fix the case of the missing llroundl on NetBSD. Patch by Matthias Petermann.
+
+--- src/hyperloglog.c.orig	2020-10-27 07:12:01.000000000 +0000
++++ src/hyperloglog.c
+@@ -11,6 +11,16 @@
+ #include <stdint.h>
+ #include <math.h>
+ 
++#ifdef __NetBSD__
++#include <sys/param.h>
++#if __NetBSD_Version__ < 799007200
++/* llroundl not present in NetBSD libm before 7.99.71 */
++long long int llroundl (long double x) {
++    return (long long int) roundl (x);
++}
++#endif
++#endif
++
+ /* The Redict HyperLogLog implementation is based on the following ideas:
+  *
+  * * The use of a 64 bit hash function as proposed in [1], in order to estimate
diff --git a/redict/patches/patch-src_object.c b/redict/patches/patch-src_object.c
new file mode 100644
index 0000000000..2aa1b6177e
--- /dev/null
+++ b/redict/patches/patch-src_object.c
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_object.c,v 1.3 2015/04/13 11:33:35 fhajny Exp $
+
+Add MirBSD support.
+
+--- src/object.c.orig	2015-04-01 14:01:44.000000000 +0000
++++ src/object.c
+@@ -32,7 +32,7 @@
+ #include <math.h>
+ #include <ctype.h>
+ 
+-#ifdef __CYGWIN__
++#if defined(__CYGWIN__) || defined(__MirBSD__)
+ #define strtold(a,b) ((long double)strtod((a),(b)))
+ #endif
+ 


Home | Main Index | Thread Index | Old Index