Files
packages/libs/valkey/files/valkey.init
T
Matthew Cather fdcb89b61e 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>
2026-04-24 06:51:29 +03:00

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
}