databases/redis82: New port

This is the redis 8.2.X branch of redis copied from databases/redis in
preparation for upgrading redis to redis 8.4.X branch.
This commit is contained in:
Muhammad Moinur Rahman
2025-11-20 13:15:54 +01:00
parent 88d96f13b4
commit 47d75dcc83
16 changed files with 451 additions and 0 deletions
+1
View File
@@ -898,6 +898,7 @@
SUBDIR += redis72
SUBDIR += redis74
SUBDIR += redis80
SUBDIR += redis82
SUBDIR += redis_exporter
SUBDIR += redisjson
SUBDIR += retcl
+84
View File
@@ -0,0 +1,84 @@
PORTNAME= redis
DISTVERSION= 8.2.3
CATEGORIES= databases
MASTER_SITES= https://download.redis.io/releases/
PKGNAMESUFFIX= 82
MAINTAINER= bofh@freebsd.org
COMMENT= Persistent key-value database with built-in net interface(8.2.X)
WWW= https://redis.io/
LICENSE= AGPLv3 RSALv2 SSPLv1
LICENSE_COMB= dual
LICENSE_NAME_RSALv2= Redis Source Available License v2
LICENSE_NAME_SSPLv1= Server Side Public License v1
LICENSE_FILE= ${WRKSRC}/LICENSE.txt
LICENSE_PERMS_RSALv2= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
LICENSE_PERMS_SSPLv1= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept
USES= compiler:c11 cpe gmake tcl:test
CPE_VENDOR= redislabs
USE_RC_SUBR= redis sentinel
MAKE_ENV= OPTIMIZATION= \
V=yo
LDFLAGS+= -lpthread -lm -lexecinfo
#PIE_UNSAFE= ld: error: relocation R_X86_64_32 cannot be used against local \
# symbol; recompile with -fPIC
CONFLICTS_INSTALL= redis-devel redis[0-9]*
SUB_FILES= pkg-message
SUB_LIST= PORTNAME=${PORTNAME} \
REDIS_DBDIR=${REDIS_DBDIR} \
REDIS_LOGDIR=${REDIS_LOGDIR} \
REDIS_RUNDIR=${REDIS_RUNDIR} \
REDIS_USER=${USERS}
USERS= redis
GROUPS= redis
PLIST_SUB= REDIS_DBDIR=${REDIS_DBDIR} \
REDIS_GROUP=${GROUPS} \
REDIS_LOGDIR=${REDIS_LOGDIR} \
REDIS_RUNDIR=${REDIS_RUNDIR} \
REDIS_USER=${USERS}
OPTIONS_DEFINE= JEMALLOC TLS
OPTIONS_DEFAULT= TLS
OPTIONS_SUB= yes
JEMALLOC_DESC= Use jemalloc
TLS_DESC= Use TLS (openssl req.)
JEMALLOC_MAKE_ENV= USE_JEMALLOC=yes
TLS_USES= ssl
TLS_MAKE_ENV= BUILD_TLS=yes
BIN_FILES= redis-benchmark redis-check-aof redis-check-rdb redis-cli \
redis-sentinel redis-server
REDIS_DBDIR?= /var/db/redis
REDIS_RUNDIR?= /var/run/redis
REDIS_LOGDIR?= /var/log/redis
post-patch-JEMALLOC-on:
@${REINPLACE_CMD} '78s!Linux!FreeBSD!g' ${WRKSRC}/src/Makefile
post-build:
${SED} ${SUB_LIST:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \
${WRKSRC}/redis.conf > ${WRKDIR}/redis.conf
do-install:
${INSTALL_PROGRAM} ${BIN_FILES:C!^!${WRKSRC}/src/!} ${STAGEDIR}${PREFIX}/bin/
${INSTALL_DATA} ${WRKDIR}/redis.conf ${STAGEDIR}${PREFIX}/etc/redis.conf.sample
${INSTALL_DATA} ${WRKSRC}/sentinel.conf ${STAGEDIR}${PREFIX}/etc/sentinel.conf.sample
${MKDIR} ${STAGEDIR}${REDIS_LOGDIR} \
${STAGEDIR}${REDIS_DBDIR} \
${STAGEDIR}${REDIS_RUNDIR}
do-test:
@cd ${WRKSRC} && ${TCLSH} tests/test_helper.tcl
.include <bsd.port.mk>
+3
View File
@@ -0,0 +1,3 @@
TIMESTAMP = 1762155827
SHA256 (redis-8.2.3.tar.gz) = d88f2361fdf3a3a8668fe5753e29915566109dca07b4cb036427ea6dc7783671
SIZE (redis-8.2.3.tar.gz) = 3902358
@@ -0,0 +1,21 @@
--- deps/Makefile.orig 2025-08-04 11:05:03 UTC
+++ deps/Makefile
@@ -110,7 +110,7 @@ else
ifeq ($(LUA_DEBUG),yes)
LUA_CFLAGS+= -O0 -g -DLUA_USE_APICHECK
else
- LUA_CFLAGS+= -O2
+ LUA_CFLAGS+=
endif
ifeq ($(LUA_COVERAGE),yes)
LUA_CFLAGS += -fprofile-arcs -ftest-coverage
@@ -138,7 +138,7 @@ jemalloc: .make-prerequisites
jemalloc: .make-prerequisites
@printf '%b %b\n' $(MAKECOLOR)MAKE$(ENDCOLOR) $(BINCOLOR)$@$(ENDCOLOR)
- cd jemalloc && ./configure --disable-cxx --with-version=5.3.0-0-g0 --with-lg-quantum=3 --disable-cache-oblivious --with-jemalloc-prefix=je_ CFLAGS="$(JEMALLOC_CFLAGS)" LDFLAGS="$(JEMALLOC_LDFLAGS)" $(JEMALLOC_CONFIGURE_OPTS)
- cd jemalloc && $(MAKE) lib/libjemalloc.a
+ cd jemalloc && ./configure --disable-cxx --with-version=5.3.0-0-g0 --with-lg-quantum=3 --disable-cache-oblivious --with-jemalloc-prefix=je_ CFLAGS="$(JEMALLOC_CFLAGS)" CXXFLAGS="$(JEMALLOC_CFLAGS)" LDFLAGS="$(JEMALLOC_LDFLAGS)" $(JEMALLOC_CONFIGURE_OPTS)
+ cd jemalloc && $(MAKE) CFLAGS="$(JEMALLOC_CFLAGS)" CXXFLAGS="$(JEMALLOC_CFLAGS)" LDFLAGS="$(JEMALLOC_LDFLAGS)" lib/libjemalloc.a
.PHONY: jemalloc
@@ -0,0 +1,41 @@
--- deps/hiredis/Makefile.orig 2025-08-04 11:05:03 UTC
+++ deps/hiredis/Makefile
@@ -15,7 +15,7 @@ HIREDIS_SONAME=$(shell grep HIREDIS_SONAME hiredis.h |
HIREDIS_SONAME=$(shell grep HIREDIS_SONAME hiredis.h | awk '{print $$3}')
# Installation related variables and target
-PREFIX?=/usr/local
+PREFIX?=${PREFIX}
INCLUDE_PATH?=include/hiredis
LIBRARY_PATH?=lib
PKGCONF_PATH?=pkgconfig
@@ -43,10 +43,9 @@ CXX:=$(shell sh -c 'type $${CXX%% *} >/dev/null 2>/dev
# Fallback to gcc when $CC is not in $PATH.
CC:=$(shell sh -c 'type $${CC%% *} >/dev/null 2>/dev/null && echo $(CC) || echo gcc')
CXX:=$(shell sh -c 'type $${CXX%% *} >/dev/null 2>/dev/null && echo $(CXX) || echo g++')
-OPTIMIZATION?=-O3
WARNINGS=-Wall -Wextra -Werror -Wstrict-prototypes -Wwrite-strings -Wno-missing-field-initializers
DEBUG_FLAGS?= -g -ggdb
-REAL_CFLAGS=$(OPTIMIZATION) -fPIC $(CPPFLAGS) $(CFLAGS) $(WARNINGS) $(DEBUG_FLAGS) $(PLATFORM_FLAGS) $(HIREDIS_CFLAGS)
+REAL_CFLAGS=$(OPTIMIZATION) -fPIC $(CFLAGS) $(WARNINGS) $(DEBUG_FLAGS) $(PLATFORM_FLAGS) $(HIREDIS_CFLAGS)
REAL_LDFLAGS=$(LDFLAGS) $(HIREDIS_LDFLAGS)
DYLIBSUFFIX=so
@@ -127,7 +126,16 @@ endif
else
REAL_CFLAGS+=-pedantic
endif
-
+ifeq ($(uname_S),FreeBSD)
+ CFLAGS?=$(CFLAGS)
+ CCLINK?=pthread
+ LDFLAGS?=-L. -Wl,-rpath,.
+ DYLIBNAME?=libhiredis.so
+ DYLIB_MAKE_CMD?=$(CC) -o ${DYLIBNAME} ${OBJ}
+ STLIBNAME?=libhiredis.a
+ STLIB_MAKE_CMD?=ar rcs ${STLIBNAME} ${OBJ}
+ SSL_LDFLAGS+=${OPENSSL_LDFLAGS}
+endif
ifeq ($(uname_S),SunOS)
IS_SUN_CC=$(shell sh -c '$(CC) -V 2>&1 |egrep -i -c "sun|studio"')
ifeq ($(IS_SUN_CC),1)
@@ -0,0 +1,39 @@
--- deps/hiredis/net.c.orig 2025-08-04 11:05:03 UTC
+++ deps/hiredis/net.c
@@ -185,14 +185,34 @@ int redisKeepAlive(redisContext *c, int interval) {
__redisSetError(c,REDIS_ERR_OTHER,strerror(errno));
return REDIS_ERR;
}
-#else
-#if defined(__GLIBC__) && !defined(__FreeBSD_kernel__)
+#elif defined(__GLIBC__)
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &val, sizeof(val)) < 0) {
__redisSetError(c,REDIS_ERR_OTHER,strerror(errno));
return REDIS_ERR;
}
val = interval/3;
+ if (val == 0) val = 1;
+ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &val, sizeof(val)) < 0) {
+ __redisSetError(c,REDIS_ERR_OTHER,strerror(errno));
+ return REDIS_ERR;
+ }
+
+ val = 3;
+ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &val, sizeof(val)) < 0) {
+ __redisSetError(c,REDIS_ERR_OTHER,strerror(errno));
+ return REDIS_ERR;
+ }
+#else
+#if !defined(__sun) && defined(TCP_KEEPIDLE) && defined(TCP_KEEPINTL) && \
+ defined(TCP_KEEPCNT)
+ val = interval;
+ if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &val, sizeof(val)) < 0) {
+ __redisSetError(c,REDIS_ERR_OTHER,strerror(errno));
+ return REDIS_ERR;
+ }
+
+ val = internal/3;
if (val == 0) val = 1;
if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &val, sizeof(val)) < 0) {
__redisSetError(c,REDIS_ERR_OTHER,strerror(errno));
@@ -0,0 +1,15 @@
--- deps/linenoise/Makefile.orig 2019-09-25 10:40:18 UTC
+++ deps/linenoise/Makefile
@@ -1,10 +1,10 @@
STD=
WARN= -Wall
-OPT= -Os
+#OPT= -Os
R_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS)
R_LDFLAGS= $(LDFLAGS)
-DEBUG= -g
+#DEBUG= -g
R_CC=$(CC) $(R_CFLAGS)
R_LD=$(CC) $(R_LDFLAGS)
@@ -0,0 +1,12 @@
--- deps/lua/src/lua_cjson.c.orig 2025-08-04 11:05:03 UTC
+++ deps/lua/src/lua_cjson.c
@@ -47,7 +47,9 @@
#include "strbuf.h"
#include "fpconv.h"
+#if defined(__sun)
#include "../../../src/solarisfixes.h"
+#endif
#ifndef CJSON_MODNAME
#define CJSON_MODNAME "cjson"
+38
View File
@@ -0,0 +1,38 @@
--- redis.conf.orig 2025-08-04 11:05:03 UTC
+++ redis.conf
@@ -307,7 +307,7 @@ tcp-keepalive 300
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
# When Redis is supervised by upstart or systemd, this parameter has no impact.
-daemonize no
+daemonize yes
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
@@ -339,7 +339,7 @@ daemonize no
#
# Note that on modern Linux systems "/run/redis.pid" is more conforming
# and should be used instead.
-pidfile /var/run/redis_6379.pid
+pidfile %%REDIS_RUNDIR%%/redis.pid
# Specify the server verbosity level.
# This can be one of:
@@ -353,7 +353,7 @@ loglevel notice
# Specify the log file name. Also the empty string can be used to force
# Redis 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 %%REDIS_LOGDIR%%/redis.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.
@@ -513,7 +513,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 %%REDIS_DBDIR%%/
################################# REPLICATION #################################
@@ -0,0 +1,39 @@
--- src/Makefile.orig 2025-08-04 11:05:03 UTC
+++ src/Makefile
@@ -67,7 +67,7 @@ endif
STD+=-std=c99
endif
-PREFIX?=/usr/local
+PREFIX:=$(PREFIX)
INSTALL_BIN=$(PREFIX)/bin
INSTALL=install
PKG_CONFIG?=pkg-config
@@ -143,7 +143,6 @@ FINAL_LIBS=-lm -lstdc++
FINAL_CFLAGS=$(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) $(REDIS_CFLAGS)
FINAL_LDFLAGS=$(LDFLAGS) $(OPT) $(REDIS_LDFLAGS) $(DEBUG)
FINAL_LIBS=-lm -lstdc++
-DEBUG=-g -ggdb
# Linux ARM32 needs -latomic at linking time
ifneq (,$(findstring armv,$(uname_M)))
@@ -182,6 +181,11 @@ else
OPENSSL_PREFIX?=/usr/local/opt/openssl
endif
else
+ifeq ($(uname_S),FreeBSD)
+ # FreeBSD
+ FINAL_CFLAGS?= $(CFLAGS) $(REDIS_CFLAGS) -I${PREFIX}/include
+ FINAL_LDFLAGS= $(LDFLAGS) -pthread
+else
ifeq ($(uname_S),AIX)
# AIX
FINAL_LDFLAGS+= -Wl,-bexpall
@@ -231,6 +235,7 @@ else
# All the other OSes (notably Linux)
FINAL_LDFLAGS+= -rdynamic
FINAL_LIBS+=-ldl -pthread -lrt
+endif
endif
endif
endif
@@ -0,0 +1,11 @@
--- src/mkreleasehdr.sh.orig 2024-06-06 11:03:20 UTC
+++ src/mkreleasehdr.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-GIT_SHA1=`(git show-ref --head --hash=8 2> /dev/null || echo 00000000) | head -n1`
-GIT_DIRTY=`git diff --no-ext-diff -- ../src ../deps 2> /dev/null | wc -l`
+GIT_SHA1="00000000"
+GIT_DIRTY="0"
BUILD_ID=`uname -n`"-"`date +%s`
if [ -n "$SOURCE_DATE_EPOCH" ]; then
BUILD_ID=$(date -u -d "@$SOURCE_DATE_EPOCH" +%s 2>/dev/null || date -u -r "$SOURCE_DATE_EPOCH" +%s 2>/dev/null || date -u +%s)
+11
View File
@@ -0,0 +1,11 @@
[
{ type: install
message: <<EOM
To setup "%%PORTNAME%%" you need to edit the configuration file:
%%PREFIX%%/etc/%%PORTNAME%%.conf
To run redis from startup, add %%PORTNAME%%_enable="YES"
in your /etc/rc.conf.
EOM
}
]
+67
View File
@@ -0,0 +1,67 @@
#!/bin/sh
# PROVIDE: redis
# REQUIRE: LOGIN
# BEFORE: securelevel
# KEYWORD: shutdown
# Add the following line to /etc/rc.conf to enable `redis':
#
#redis_enable="YES"
#
# Define profiles here to run separate redis instances:
#
#redis_profiles="foo bar" # Script uses %%PREFIX%%/etc/redis-NAME.conf respectively.
# For correct script working please update pidfile entries in
# redis-NAME.conf files.
. /etc/rc.subr
name="redis"
rcvar="${name}_enable"
extra_commands="reload"
command="%%PREFIX%%/bin/redis-server"
pidfile="%%REDIS_RUNDIR%%/$name.pid"
# read configuration and set defaults
load_rc_config "$name"
: ${redis_enable="NO"}
: ${redis_user="%%REDIS_USER%%"}
: ${redis_config="%%PREFIX%%/etc/$name.conf"}
command_args="${redis_config}"
required_files="${redis_config}"
_profile_exists() {
for _p in ${redis_profiles}; do
[ "${_p}" = "$1" ] && return 1;
done
return 0
}
if [ $# -eq 2 ]; then
_profile=$2
_profile_exists $_profile
_exists=$?
[ ${_exists} -ne 1 ] && {
echo "`basename %%PREFIX%%/etc/rc.d/redis`: no '$2' in 'redis_profiles'"
exit 1
};
echo "-- Profile: ${_profile} --"
config_file="%%PREFIX%%/etc/${name}-${_profile}.conf"
command_args="${config_file}"
pidfile="%%REDIS_RUNDIR%%/${_profile}.pid"
required_files="${config_file}"
elif [ -n "${redis_profiles}" ]; then
_swap=$*; shift; _profiles=$*
_profiles=${_profiles:-${redis_profiles}}
set -- ${_swap}
for _profile in ${_profiles}; do
%%PREFIX%%/etc/rc.d/redis $1 ${_profile}
done
exit 0
fi
run_rc_command "$1"
+39
View File
@@ -0,0 +1,39 @@
#!/bin/sh
# PROVIDE: sentinel
# REQUIRE: LOGIN
# BEFORE: securelevel
# KEYWORD: shutdown
# Add the following line to /etc/rc.conf to enable `sentinel':
#
#sentinel_enable="YES"
#
. /etc/rc.subr
name="sentinel"
rcvar="${name}_enable"
command="/usr/local/bin/redis-sentinel"
pidfile="/var/run/redis/$name.pid"
# read configuration and set defaults
load_rc_config "$name"
: ${sentinel_enable="NO"}
: ${sentinel_user="redis"}
: ${sentinel_config="/usr/local/etc/$name.conf"}
command_args="${sentinel_config} --daemonize yes --pidfile ${pidfile}"
required_files="${sentinel_config}"
start_precmd="${name}_checks"
restart_precmd="${name}_checks"
sentinel_checks()
{
if [ x`id -u ${sentinel_user}` != x`stat -f %u ${sentinel_config}` ]; then
err 1 "${sentinel_config} must be owned by user ${sentinel_user}"
fi
}
run_rc_command "$1"
+19
View File
@@ -0,0 +1,19 @@
Redis is an open source, advanced key-value store. It is often referred
to as a data structure server since keys can contain strings, hashes,
lists, sets and sorted sets.
You can run atomic operations on these types, like appending to a string;
incrementing the value in a hash; pushing to a list; computing set
intersection, union and difference; or getting the member with highest
ranking in a sorted set.
In order to achieve its outstanding performance, Redis works with an
in-memory dataset. Depending on your use case, you can persist it either
by dumping the dataset to disk every once in a while, or by appending each
command to a log.
Redis also supports trivial-to-setup master-slave replication, with very
fast non-blocking first synchronization, auto-reconnection on net split
and so forth.
This is the 8.2.X branch of redis.
+11
View File
@@ -0,0 +1,11 @@
bin/redis-benchmark
bin/redis-check-aof
bin/redis-check-rdb
bin/redis-cli
bin/redis-sentinel
bin/redis-server
@sample etc/redis.conf.sample
@sample(%%REDIS_USER%%,%%REDIS_GROUP%%,) etc/sentinel.conf.sample
@dir(%%REDIS_USER%%,%%REDIS_GROUP%%,) %%REDIS_DBDIR%%
@dir(%%REDIS_USER%%,%%REDIS_GROUP%%,) %%REDIS_LOGDIR%%
@dir(%%REDIS_USER%%,%%REDIS_GROUP%%,) %%REDIS_RUNDIR%%