logo

overlay

My own overlay for experimentations, use with caution, no support is provided git clone https://hacktivis.me/git/overlay.git
commit: 84025bfc976624f67662a2f266cdfb89ecc7f9e1
parent 893bf9fa1926074be8e048e345de5a34d0b45d91
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date:   Thu, 21 Mar 2024 16:01:26 +0100

dev-db/redict: new package, add 9999

Diffstat:

Adev-db/redict/files/redict-6.2.1-config.patch40++++++++++++++++++++++++++++++++++++++++
Adev-db/redict/files/redict-sentinel-7.2.0-config.patch27+++++++++++++++++++++++++++
Adev-db/redict/files/redis-sentinel.confd-r116++++++++++++++++
Adev-db/redict/files/redis-sentinel.initd-r122++++++++++++++++++++++
Adev-db/redict/files/redis.confd-r220++++++++++++++++++++
Adev-db/redict/files/redis.initd-625+++++++++++++++++++++++++
Adev-db/redict/files/redis.logrotate6++++++
Adev-db/redict/files/redis.service-414++++++++++++++
Adev-db/redict/files/redis.tmpfiles-22++
Adev-db/redict/metadata.xml13+++++++++++++
Adev-db/redict/redict-9999.ebuild171+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
11 files changed, 356 insertions(+), 0 deletions(-)

diff --git a/dev-db/redict/files/redict-6.2.1-config.patch b/dev-db/redict/files/redict-6.2.1-config.patch @@ -0,0 +1,40 @@ +diff --git a/redict.conf b/redict.conf +index 465d56f..ef56037 100644 +--- a/redict.conf ++++ b/redict.conf +@@ -276,7 +276,7 @@ daemonize no + # + # Note that on modern Linux systems "/run/redis.pid" is more conforming + # and should be used instead. +-pidfile /var/run/redict_6379.pid ++pidfile /run/redict/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 + # 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 /var/log/redict/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 /var/lib/redict/ + + ################################# REPLICATION ################################# + +@@ -967,7 +967,7 @@ acllog-max-len 128 + # limit for maxmemory so that there is some free RAM on the system for replica + # output buffers (but this is not needed if the policy is 'noeviction'). + # +-# maxmemory <bytes> ++maxmemory 64MB + + # MAXMEMORY POLICY: how Redis will select what to remove when maxmemory + # is reached. You can select one from the following behaviors: diff --git a/dev-db/redict/files/redict-sentinel-7.2.0-config.patch b/dev-db/redict/files/redict-sentinel-7.2.0-config.patch @@ -0,0 +1,27 @@ +Rebased from original redis-sentinel-5.0-config.patch + +diff --git a/sentinel.conf b/sentinel.conf +index b7b3604f0..a1d7bfea9 100644 +--- a/sentinel.conf ++++ b/sentinel.conf +@@ -17,7 +17,7 @@ daemonize no + # When running daemonized, Redis Sentinel writes a pid file in + # /var/run/redict-sentinel.pid by default. You can specify a custom pid file + # location here. +-pidfile /var/run/redict-sentinel.pid ++pidfile /run/redict-sentinel.pid + + # Specify the server verbosity level. + # This can be one of: +@@ -31,7 +31,7 @@ loglevel notice + # Specify the log file name. Also the empty string can be used to force + # Sentinel 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 "/var/log/redict/sentinel.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. +-- +2.41.0 + diff --git a/dev-db/redict/files/redis-sentinel.confd-r1 b/dev-db/redict/files/redis-sentinel.confd-r1 @@ -0,0 +1,16 @@ +# Redis-sentinel user. +REDIS_SENTINEL_USER="redis" + +# Redis-sentinel group. +REDIS_SENTINEL_GROUP="redis" + +# Redis-sentinel configuration file. +REDIS_SENTINEL_CONF="/etc/redis/sentinel.conf" + +# Redis-sentinel working directory. +REDIS_SENTINEL_DIR="/tmp" + +# Specify the network service that corresponds to the "bind" setting +# in your sentinel.conf. For example, if you bind to 127.0.0.1, this should +# be set to "net.lo" which provides the loopback interface. +rc_need="net.lo" diff --git a/dev-db/redict/files/redis-sentinel.initd-r1 b/dev-db/redict/files/redis-sentinel.initd-r1 @@ -0,0 +1,22 @@ +#!/sbin/openrc-run +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +: ${REDIS_SENTINEL_DIR:=/tmp} +: ${REDIS_SENTINEL_CONF:=/etc/redis/sentinel.conf} +: ${REDIS_SENTINEL_USER:=redis} +: ${REDIS_SENTINEL_GROUP:=redis} +: ${REDIS_SENTINEL_TIMEOUT:=30} + +command="/usr/sbin/redis-sentinel" +command_args="${REDIS_SENTINEL_CONF}" +command_background="true" +command_user="${REDIS_SENTINEL_USER}:${REDIS_SENTINEL_GROUP}" +pidfile="/run/${RC_SVCNAME}.pid" +retry="${REDIS_SENTINEL_TIMEOUT}" +start_stop_daemon_args="--chdir \"${REDIS_SENTINEL_DIR}\"" + +depend() { + use localmount logger + after keepalived redis +} diff --git a/dev-db/redict/files/redis.confd-r2 b/dev-db/redict/files/redis.confd-r2 @@ -0,0 +1,20 @@ +# Redis user. +REDIS_USER="redis" + +# Redis group. +REDIS_GROUP="redis" + +# Redis configuration file. +REDIS_CONF="/etc/redis/redis.conf" + +# Redis dump directory. +REDIS_DIR="/var/lib/redis" + +# Redis options. +# (Redis expects the first argument to be the configuration file.) +REDIS_OPTS="${REDIS_CONF}" + +# Specify the network service that corresponds to the "bind" setting +# in your redis.conf. For example, if you bind to 127.0.0.1, this should +# be set to "net.lo" which provides the loopback interface. +rc_need="net.lo" diff --git a/dev-db/redict/files/redis.initd-6 b/dev-db/redict/files/redis.initd-6 @@ -0,0 +1,25 @@ +#!/sbin/openrc-run +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +: ${REDIS_DIR:=/var/lib/redis} +: ${REDIS_CONF:=/etc/redis/redis.conf} +: ${REDIS_OPTS:="${REDIS_CONF}"} +: ${REDIS_USER:=redis} +: ${REDIS_GROUP:=redis} +: ${REDIS_TIMEOUT:=30} + +# https://bugs.gentoo.org/631002#c10 +# Force '--daemonize no' to override the config file +command="/usr/sbin/redis-server" +command_args="${REDIS_OPTS} --daemonize no" +command_background="true" +command_user="${REDIS_USER}:${REDIS_GROUP}" +pidfile="/run/${RC_SVCNAME}.pid" +retry="${REDIS_TIMEOUT}" +start_stop_daemon_args="--chdir \"${REDIS_DIR}\"" + +depend() { + use localmount logger + after keepalived +} diff --git a/dev-db/redict/files/redis.logrotate b/dev-db/redict/files/redis.logrotate @@ -0,0 +1,6 @@ +/var/log/redis/redis.log /var/log/redis/sentinel.log { + compress + delaycompress + notifempty + missingok +} diff --git a/dev-db/redict/files/redis.service-4 b/dev-db/redict/files/redis.service-4 @@ -0,0 +1,14 @@ +[Unit] +Description=A persistent key-value database +After=syslog.target network.target + +[Service] +Type=simple +PIDFile=/run/redis/redis.pid +ExecStart=/usr/sbin/redis-server /etc/redis/redis.conf +User=redis +Group=redis + +[Install] +WantedBy=multi-user.target + diff --git a/dev-db/redict/files/redis.tmpfiles-2 b/dev-db/redict/files/redis.tmpfiles-2 @@ -0,0 +1,2 @@ +# redis runtime directory +d /run/redis 0755 redis root - diff --git a/dev-db/redict/metadata.xml b/dev-db/redict/metadata.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>contact@hacktivis.me</email> + <name>Haelwenn (lanodan) Monnier</name> + </maintainer> + <use> + <flag name="tcmalloc"> + Use tcmalloc from <pkg>dev-util/google-perftools</pkg> for allocations. + </flag> + </use> +</pkgmetadata> diff --git a/dev-db/redict/redict-9999.ebuild b/dev-db/redict/redict-9999.ebuild @@ -0,0 +1,171 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +# N.B.: It is no clue in porting to Lua eclasses, as upstream have deviated +# too far from vanilla Lua, adding their own APIs like lua_enablereadonlytable + +inherit edo multiprocessing systemd tmpfiles toolchain-funcs + +if [ ${PV} = "9999" ]; then + inherit git-r3 + EGIT_REPO_URI="https://git.sr.ht/~lanodan/redict" +else + die "live-only for now" + KEYWORDS="amd64 ~arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux" +fi + +DESCRIPTION="A persistent caching system, key-value, and data structures database (personal branch!)" +HOMEPAGE=" + https://git.sr.ht/~lanodan/redict + https://codeberg.org/redict/redict +" + +LICENSE="BSD Boost-1.0 GPL-3" +SLOT="0/$(ver_cut 1-2)" +IUSE="+jemalloc selinux ssl systemd tcmalloc test" +RESTRICT="!test? ( test )" + +REQUIRED_USE="?? ( jemalloc tcmalloc )" + +COMMON_DEPEND=" + jemalloc? ( >=dev-libs/jemalloc-5.1:= ) + ssl? ( dev-libs/openssl:0= ) + systemd? ( sys-apps/systemd:= ) + tcmalloc? ( dev-util/google-perftools ) +" + +RDEPEND=" + ${COMMON_DEPEND} + acct-group/redis + acct-user/redis + selinux? ( sec-policy/selinux-redis ) +" + +BDEPEND=" + ${COMMON_DEPEND} + virtual/pkgconfig +" + +# Tcl is only needed in the CHOST test env +DEPEND=" + ${COMMON_DEPEND} + test? ( + dev-lang/tcl:0= + ssl? ( dev-tcltk/tls ) + )" + +PATCHES=( + "${FILESDIR}"/redict-6.2.1-config.patch + "${FILESDIR}"/redict-sentinel-7.2.0-config.patch +) + +src_prepare() { + default + + # Respect user CFLAGS in bundled lua + sed -i '/LUA_CFLAGS/s: -O2::g' deps/Makefile || die +} + +src_compile() { + tc-export AR CC RANLIB + + local myconf=( + AR="${AR}" + CC="${CC}" + RANLIB="${RANLIB}" + + V=1 # verbose + + # OPTIMIZATION defaults to -O3. Let's respect user CFLAGS by setting it + # to empty value. + OPTIMIZATION='' + # Disable debug flags in bundled hiredis + DEBUG_FLAGS='' + + BUILD_TLS=$(usex ssl) + USE_SYSTEMD=$(usex systemd) + ) + + if use jemalloc; then + myconf+=( MALLOC=jemalloc ) + elif use tcmalloc; then + myconf+=( MALLOC=tcmalloc ) + else + myconf+=( MALLOC=libc ) + fi + + emake -C src "${myconf[@]}" +} + +src_test() { + local runtestargs=( + --clients "$(makeopts_jobs)" # see bug #649868 + + --skiptest "Active defrag eval scripts" # see bug #851654 + ) + + if has usersandbox ${FEATURES} || ! has userpriv ${FEATURES}; then + ewarn "oom-score-adj related tests will be skipped." \ + "They are known to fail with FEATURES usersandbox or -userpriv. See bug #756382." + + runtestargs+=( + # unit/oom-score-adj was introduced in version 6.2.0 + --skipunit unit/oom-score-adj # see bug #756382 + + # Following test was added in version 7.0.0 to unit/introspection. + # It also tries to adjust OOM score. + --skiptest "CONFIG SET rollback on apply error" + ) + fi + + if use ssl; then + edo ./utils/gen-test-certs.sh + runtestargs+=( --tls ) + fi + + edo ./runtest "${runtestargs[@]}" +} + +src_install() { + insinto /etc/redict + doins redict.conf sentinel.conf + use prefix || fowners -R redis:redis /etc/redict /etc/redict/{redict,sentinel}.conf + fperms 0750 /etc/redict + fperms 0644 /etc/redict/{redict,sentinel}.conf + + newconfd "${FILESDIR}/redis.confd-r2" redict + newinitd "${FILESDIR}/redis.initd-6" redict + + systemd_newunit "${FILESDIR}/redis.service-4" redict.service + newtmpfiles "${FILESDIR}/redis.tmpfiles-2" redict.conf + + newconfd "${FILESDIR}/redis-sentinel.confd-r1" redict-sentinel + newinitd "${FILESDIR}/redis-sentinel.initd-r1" redict-sentinel + + insinto /etc/logrotate.d/ + newins "${FILESDIR}/redis.logrotate" ${PN} + + dodoc 00-RELEASENOTES BUGS CONTRIBUTING.md MANIFESTO README.md + + dobin src/redict-cli + dosbin src/redict-benchmark src/redict-server src/redict-check-aof src/redict-check-rdb + fperms 0750 /usr/sbin/redict-benchmark + dosym redict-server /usr/sbin/redict-sentinel + + if use prefix; then + diropts -m0750 + else + diropts -m0750 -o redis -g redis + fi + keepdir /var/{log,lib}/redict +} + +pkg_postinst() { + tmpfiles_process redict.conf + + ewarn "The default redict configuration file location changed to:" + ewarn " /etc/redict/{redict,sentinel}.conf" + ewarn "Please apply your changes to the new configuration files." +}