From f798ddd4922d793d5e6ccb7c4111810d549ff4f4 Mon Sep 17 00:00:00 2001 From: Gaspard d'Hautefeuille Date: Wed, 9 Jul 2025 07:55:37 +0200 Subject: [mod] migrate from Redis to Valkey (#4795) This patch migrates from `redis==5.2.1` [1] to `valkey==6.1.0` [2]. The migration to valkey is necessary because the company behind Redis has decided to abandon the open source license. After experiencing a drop in user numbers, they now want to run it under a dual license again. But this move demonstrates once again how unreliable the company is and how it treats open source developers. To review first, read the docs:: $ make docs.live Follow the instructions to remove redis: - http://0.0.0.0:8000/admin/settings/settings_redis.html Config and install a local valkey DB: - http://0.0.0.0:8000/admin/settings/settings_valkey.html [1] https://pypi.org/project/redis/ [2] https://pypi.org/project/valkey/ Co-authored-by: HLFH Co-authored-by: Markus Heiser --- utils/lib_redis.sh | 290 ----------------------------------------------------- 1 file changed, 290 deletions(-) (limited to 'utils/lib_redis.sh') diff --git a/utils/lib_redis.sh b/utils/lib_redis.sh index ba1435a86..3b481dc75 100755 --- a/utils/lib_redis.sh +++ b/utils/lib_redis.sh @@ -1,190 +1,26 @@ #!/usr/bin/env bash # -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*- # SPDX-License-Identifier: AGPL-3.0-or-later -# -# Tools to build and install redis [1] binaries & packages. -# -# [1] https://redis.io/download#installation -# -# 1. redis.devpkg (sudo) -# 2. redis.build -# 3. redis.install (sudo) -# -# systemd commands:: -# -# sudo -H systemctl status searxng-redis -# sudo -H journalctl -u searxng-redis -# sudo -H journalctl --vacuum-size=1M -# -# Test socket connection from client (local user):: -# -# $ sudo -H ./manage redis.addgrp "${USER}" -# # logout & login to get member of group -# $ groups -# ... searxng-redis ... -# $ source /usr/local/searxng-redis/.redis_env -# $ which redis-cli -# /usr/local/searxng-redis/.local/bin/redis-cli -# -# $ redis-cli -s /usr/local/searxng-redis/redis.sock -# redis /usr/local/searxng-redis/redis.sock> set foo bar -# OK -# redis /usr/local/searxng-redis/redis.sock> get foo -# "bar" -# [CTRL-D] - # shellcheck disable=SC2091 # shellcheck source=utils/lib.sh . /dev/null -REDIS_GIT_URL="https://github.com/redis/redis.git" -REDIS_GIT_TAG="${REDIS_GIT_TAG:-6.2.6}" - REDIS_USER="searxng-redis" REDIS_GROUP="searxng-redis" -REDIS_HOME="/usr/local/${REDIS_USER}" -REDIS_HOME_BIN="${REDIS_HOME}/.local/bin" -REDIS_ENV="${REDIS_HOME}/.redis_env" - REDIS_SERVICE_NAME="searxng-redis" REDIS_SYSTEMD_UNIT="${SYSTEMD_UNITS}/${REDIS_SERVICE_NAME}.service" -# binaries to compile & install -REDIS_INSTALL_EXE=(redis-server redis-benchmark redis-cli) -# link names of redis-server binary -REDIS_LINK_EXE=(redis-sentinel redis-check-rdb redis-check-aof) - -REDIS_CONF="${REDIS_HOME}/redis.conf" -REDIS_CONF_TEMPLATE=$(cat < and checkput ${REDIS_GIT_TAG} - useradd : create user (${REDIS_USER}) at ${REDIS_HOME} userdel : delete user (${REDIS_USER}) - addgrp : add to group (${REDIS_USER}) rmgrp : remove from group (${REDIS_USER}) EOF } -redis.devpkg() { - - # Uses OS package manager to install the essential packages to build and - # compile sources - - sudo_or_exit - - case ${DIST_ID} in - ubuntu|debian) - pkg_install git build-essential gawk - ;; - arch) - pkg_install git base-devel - ;; - fedora) - pkg_install git @development-tools - ;; - centos) - pkg_install git - yum groupinstall "Development Tools" -y - ;; - *) - err_msg "$DIST_ID-$DIST_VERS: No rules to install development tools from OS." - return 42 - ;; - esac -} - -redis.build() { - - # usage: redis.build - - rst_title "get redis sources" section - redis.src "${CACHE}/redis" - - if ! required_commands gcc nm make gawk ; then - info_msg "install development tools to get missing command(s) .." - if [[ -n ${SUDO_USER} ]]; then - sudo -H "$0" redis.devpkg - else - redis.devpkg - fi - fi - - rst_title "compile redis sources" section - - pushd "${CACHE}/redis" &>/dev/null - - if ask_yn "Do you run 'make distclean' first'?" Yn; then - $(bash.cmd) -c "make distclean" 2>&1 | prefix_stdout - fi - - $(bash.cmd) -c "make" 2>&1 | prefix_stdout - if ask_yn "Do you run 'make test'?" Ny; then - $(bash.cmd) -c "make test" | prefix_stdout - fi - - popd &>/dev/null - - tee_stderr 0.1 <&1 | prefix_stdout -mkdir -p "$(redis._get_dist)" -cd "${CACHE}/redis/src" -cp ${REDIS_INSTALL_EXE[@]} "$(redis._get_dist)" -EOF - info_msg "redis binaries available at $(redis._get_dist)" -} - - -redis.install() { - sudo_or_exit - ( - set -e - redis.useradd - redis._install_bin - redis._install_conf - redis._install_service - ) - dump_return $? -} redis.remove() { sudo_or_exit @@ -200,57 +36,6 @@ redis.shell() { interactive_shell "${REDIS_USER}" } -redis.src() { - - # usage: redis.src "${CACHE}/redis" - - local dest="${1:-${CACHE}/redis}" - - if [ -d "${dest}" ] ; then - info_msg "already cloned: $dest" - tee_stderr 0.1 <&1 | prefix_stdout -cd "${dest}" -git fetch --all -git reset --hard tags/${REDIS_GIT_TAG} -EOF - else - tee_stderr 0.1 <&1 | prefix_stdout -mkdir -p "$(dirname "$dest")" -cd "$(dirname "$dest")" -git clone "${REDIS_GIT_URL}" "${dest}" -EOF - tee_stderr 0.1 <&1 | prefix_stdout -cd "${dest}" -git checkout tags/${REDIS_GIT_TAG} -b "build-branch" -EOF - fi -} - -redis.useradd(){ - - # usage: redis.useradd - - rst_title "add user ${REDIS_USER}" section - echo - sudo_or_exit - - # create user account - tee_stderr 0.5 < "${REDIS_ENV}" -grep -qFs -- 'source "${REDIS_ENV}"' ~/.profile || echo 'source "${REDIS_ENV}"' >> ~/.profile -EOF -} redis.userdel() { sudo_or_exit @@ -275,81 +60,6 @@ redis.rmgrp() { } - -# private redis. functions -# ------------------------ - -redis._install_bin() { - local src - src="$(redis._get_dist)" - ( - set -e - for redis_exe in "${REDIS_INSTALL_EXE[@]}"; do - install -v -o "${REDIS_USER}" -g "${REDIS_GROUP}" \ - "${src}/${redis_exe}" "${REDIS_HOME_BIN}" - done - - pushd "${REDIS_HOME_BIN}" &> /dev/null - for redis_exe in "${REDIS_LINK_EXE[@]}"; do - info_msg "link redis-server --> ${redis_exe}" - sudo -H -u "${REDIS_USER}" ln -sf redis-server "${redis_exe}" - done - popd &> /dev/null - - ) -} - -redis._install_conf() { - sudo -H -u "${REDIS_USER}" bash < "${REDIS_CONF}" -EOF -} - -redis._install_service() { - systemd_install_service "${REDIS_SERVICE_NAME}" "${REDIS_SYSTEMD_UNIT}" -} - redis._remove_service() { systemd_remove_service "${REDIS_SERVICE_NAME}" "${REDIS_SYSTEMD_UNIT}" } - -redis._get_dist() { - if [ -z "${REDIS_DIST}" ]; then - echo "${REPO_ROOT}/dist/redis/${REDIS_GIT_TAG}/$(redis._arch)" - else - echo "${REDIS_DIST}" - fi -} - -redis._arch() { - local ARCH - case "$(command uname -m)" in - "x86_64") ARCH=amd64 ;; - "aarch64") ARCH=arm64 ;; - "armv6" | "armv7l") ARCH=armv6l ;; - "armv8") ARCH=arm64 ;; - .*386.*) ARCH=386 ;; - ppc64*) ARCH=ppc64le ;; - *) die 42 "ARCH is unknown: $(command uname -m)" ;; - esac - echo "${ARCH}" -} - -# TODO: move this to the right place .. - -bash.cmd(){ - - # print cmd to get a bash in a non-root mode, even if we are in a sudo - # context. - - local user="${USER}" - local bash_cmd="bash" - - if [ -n "${SUDO_USER}" ] && [ "root" != "${SUDO_USER}" ] ; then - user="${SUDO_USER}" - bash_cmd="sudo -H -u ${SUDO_USER} bash" - fi - - printf "%s" "${bash_cmd}" -} -- cgit v1.2.3