mirror of
https://github.com/openwrt/packages.git
synced 2026-05-31 06:51:51 +08:00
fdcb89b61e
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>
106 lines
2.5 KiB
Bash
106 lines
2.5 KiB
Bash
#!/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
|
|
}
|