valkey: add new package

Valkey is a community fork of the  key-value database Redis.
It is a drop in replacement to Redis so most of the files are
derived from their Redis equivalent.

Co-authored-by: George Sapkin <george@sapk.in>
Signed-off-by: Matthew Cather <mattbob4@gmail.com>
This commit is contained in:
Matthew Cather
2026-02-18 12:19:41 -06:00
committed by George Sapkin
parent e15d62c64a
commit fdcb89b61e
4 changed files with 240 additions and 0 deletions
+109
View File
@@ -0,0 +1,109 @@
#
# Copyright (C) 2026 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=valkey
PKG_VERSION:=9.0.1
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/valkey-io/valkey/archive/refs/tags/$(PKG_VERSION).tar.gz?
PKG_HASH:=9cfbc5f32a2a6058ee0f8c532b9c4d24167cc49d719f091dd75f1bb8353a1fc5
PKG_MAINTAINER:=Matthew Cather <mattbob4@gmail.com>
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=COPYING
PKG_CPE_ID:=cpe:/a:lfprojects:valkey
PKG_FORTIFY_SOURCE:=0
PKG_BUILD_PARALLEL:=1
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
define Package/valkey/Default
SUBMENU:=Database
SECTION:=libs
CATEGORY:=Libraries
URL:=https://valkey.io/
endef
define Package/valkey-server
$(call Package/valkey/Default)
TITLE:=Valkey in-memory key-value data store (server)
DEPENDS:=+libatomic
endef
define Package/valkey-server/description
Valkey is an open source (BSD) high-performance key/value datastore
that supports a variety of workloads such as caching, message queues,
and can act as a primary database. This package contains the Valkey server.
endef
define Package/valkey-cli
$(call Package/valkey/Default)
TITLE:=Valkey in-memory key-value data store (CLI client)
DEPENDS:=+libatomic
endef
define Package/valkey-cli/description
Valkey is an open source (BSD) high-performance key/value datastore.
This package contains the Valkey CLI client.
endef
define Package/valkey-utils
$(call Package/valkey/Default)
TITLE:=Valkey in-memory key-value data store (utilities)
DEPENDS:=+valkey-server
endef
define Package/valkey-utils/description
Valkey is an open source (BSD) high-performance key/value datastore.
This package contains Valkey utilities (valkey-benchmark, valkey-check-aof,
valkey-check-rdb).
endef
MAKE_FLAGS+= \
MALLOC="libc" \
USE_JEMALLOC="no" \
PREFIX="$(PKG_INSTALL_DIR)/usr" \
ARCH=""
TARGET_LDFLAGS += -latomic
define Package/valkey-server/conffiles
/etc/valkey/valkey.conf
/etc/config/valkey
endef
define Package/valkey-server/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/valkey-server $(1)/usr/bin/
$(INSTALL_DIR) $(1)/etc/valkey
$(INSTALL_CONF) $(PKG_BUILD_DIR)/valkey.conf $(1)/etc/valkey/
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_BIN) ./files/valkey.init $(1)/etc/init.d/valkey
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./files/valkey.config $(1)/etc/config/valkey
endef
define Package/valkey-cli/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/valkey-cli $(1)/usr/bin/
endef
define Package/valkey-utils/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/valkey-benchmark $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/valkey-check-aof $(1)/usr/bin/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/valkey-check-rdb $(1)/usr/bin/
endef
$(eval $(call BuildPackage,valkey-server))
$(eval $(call BuildPackage,valkey-cli))
$(eval $(call BuildPackage,valkey-utils))
+13
View File
@@ -0,0 +1,13 @@
config instance 'main'
option enabled '1'
option port '6379'
option bind '127.0.0.1'
option dir '/var/lib/valkey'
option logfile '/var/log/valkey.log'
option maxmemory '64mb'
option maxmemory_policy 'allkeys-lru'
list save '900 1'
list save '300 10'
list save '60 10000'
option appendonly '0'
option appendfilename 'appendonly.aof'
+105
View File
@@ -0,0 +1,105 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2026 OpenWrt.org
START=95
STOP=10
USE_PROCD=1
PROG=/usr/bin/valkey-server
CONF=/etc/valkey/valkey.conf
validate_valkey_section() {
uci_validate_section valkey instance "${1}" \
'enabled:bool:1' \
'port:port:6379' \
'bind:host:127.0.0.1' \
'dir:directory:/var/lib/valkey' \
'logfile:string:/var/log/valkey.log' \
'daemonize:bool:0' \
'maxmemory:string' \
'maxmemory_policy:string' \
'save:list(string)' \
'appendonly:bool:0' \
'appendfilename:string:appendonly.aof'
}
valkey_instance() {
local cfg="$1"
local enabled port bind dir logfile daemonize maxmemory maxmemory_policy save appendonly appendfilename
validate_valkey_section "${cfg}" || {
echo "validation failed"
return 1
}
[ "${enabled}" = "0" ] && return 0
# Create necessary directories
mkdir -p "${dir}"
mkdir -p "$(dirname ${logfile})"
# Generate runtime config
local config_file="/var/etc/valkey-${cfg}.conf"
mkdir -p /var/etc
# Start with base config if exists
if [ -f "$CONF" ]; then
grep -v "^port\|^bind\|^dir\|^logfile\|^daemonize\|^maxmemory\|^save\|^appendonly\|^appendfilename" "$CONF" > "$config_file"
else
> "$config_file"
fi
# Add runtime configuration
cat >> "$config_file" <<-EOF
port ${port}
bind ${bind}
dir ${dir}
logfile ${logfile}
daemonize no
EOF
# Add optional settings
[ -n "${maxmemory}" ] && echo "maxmemory ${maxmemory}" >> "$config_file"
[ -n "${maxmemory_policy}" ] && echo "maxmemory-policy ${maxmemory_policy}" >> "$config_file"
# Add save directives
if [ -n "${save}" ]; then
for save_rule in ${save}; do
echo "save ${save_rule}" >> "$config_file"
done
fi
# Add append-only file settings
if [ "${appendonly}" = "1" ]; then
echo "appendonly yes" >> "$config_file"
[ -n "${appendfilename}" ] && echo "appendfilename ${appendfilename}" >> "$config_file"
fi
procd_open_instance
procd_set_param command "$PROG" "$config_file"
procd_set_param file "$config_file"
procd_set_param respawn ${respawn_threshold:-3600} ${respawn_timeout:-5} ${respawn_retry:-5}
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param user valkey
procd_close_instance
}
start_service() {
# Create valkey user if it doesn't exist
user_exists valkey || user_add valkey 450 450 "Valkey" /var/lib/valkey /bin/false
config_load 'valkey'
config_foreach valkey_instance 'instance'
}
service_triggers() {
procd_add_reload_trigger "valkey"
procd_add_validation validate_valkey_section
}
stop_service() {
# Clean up any leftover socket files
rm -f /tmp/valkey*.sock
}
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
case "$1" in
valkey-server)
valkey-server --version | grep -F "$2"
;;
valkey-cli)
valkey-cli --version | grep -F "$2"
;;
valkey-utils)
valkey-benchmark --version | grep -F "$2"
;;
esac