frank
Goto Top

Ubuntu: RedisJSON Modul für Redis aus dem Source Code selbst bauen

article-picture
Hier eine Anleitung um das RedisJSON Modul für Redis selbst zu kompilieren. Als Binary bekommt man es im Moment nur als Abonnent der Enterprise Version. Ohne das Abo kann man sich die aktuelle Version aus dem Quellcode selbst bauen. Die offizielle Doku zum RedisJSON Modul findet ihr hier.

Das RedisJSON-Modul bietet JSON-Unterstützung für Redis. Mit RedisJSON können Sie JSON-Werte in einer Redis-Datenbank speichern, aktualisieren und abrufen, ähnlich wie bei jedem anderen Redis-Datentyp.


back-to-topVorbereitung, Voraussetzungen zum Kompilieren


  • Getestet unter Ubuntu 22.04
  • Alle Befehle werden unter der Linux-Bash und als User "frank" und nicht direkt als root durchgeführt! Der Hostname des System lautet: "nexus". Wenn "root" gebraucht wird, benutze ich "sudo" dafür.
  • Es wird das Home-Verzeichnis ~/redis für den Quellcode und das Kompilieren benutzt
  • Alle Tools und Programme, die unter Ubuntu 22.04 zur Entwicklung benötigt werden, müssen vorher installiert werden:

sudo apt update 
sudo apt install build-essential g++ make git
sudo apt install libclang-dev

back-to-topRust Installieren


Zur Installation benötigt man den aktuellen Rust-Compiler. Zum Zeitpunkt der Anleitung war das die Version: 1.64.0. Weitere Infos und alternative Wege zur "Rust"-Installation findest du hier. Hier die einfachste Installation für Ubuntu (als User: frank):

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh  

Es erscheint folgendes:

info: downloading installer

Welcome to Rust!

This will download and install the official compiler for the Rust
programming language, and its package manager, Cargo.

Rustup metadata and toolchains will be installed into the Rustup
home directory, located at:

  /home/frank/.rustup

This can be modified with the RUSTUP_HOME environment variable.

The Cargo home directory is located at:

  /home/frank/.cargo

This can be modified with the CARGO_HOME environment variable.

The cargo, rustc, rustup and other commands will be added to
Cargo's bin directory, located at:  

  /home/frank/.cargo/bin

This path will then be added to your PATH environment variable by
modifying the profile files located at:

  /home/frank/.profile
  /home/frank/.bashrc

You can uninstall at any time with rustup self uninstall and
these changes will be reverted.

Current installation options:


   default host triple: x86_64-unknown-linux-gnu
     default toolchain: stable (default)
               profile: default
  modify PATH variable: yes

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation

Die "Eins" (1) auswählen um mit der Installation fortzufahren. Das Script sollte mit folgendem Text enden:

...
info: default toolchain set to 'stable-x86_64-unknown-linux-gnu'  

  stable-x86_64-unknown-linux-gnu installed - rustc 1.64.0 (a55dd71d5 2022-09-19)

Rust is installed now. Great!

To get started you may need to restart your current shell.
This would reload your PATH environment variable to include
Cargo's bin directory ($HOME/.cargo/bin).  

To configure your current shell, run:
source "$HOME/.cargo/env"  

Das Installationsprogramm hat die ".bashrc" um den "Rust"-Pfad automatisch ergänzt.
Um "Rust" zu aktivieren entweder das Terminal schließen und wieder öffnen oder folgendes ausführen:

source "$HOME/.cargo/env"  

back-to-topQuellcode per git laden


mkdir ~/redis
cd ~/redis
git clone https://github.com/RedisJSON/RedisJSON.git

Will man ein spezielles Release per Git laden kann man das mit der "--branch" Option steuern. Wenn wir z.B. das RedisJSON Release 2.2.0 laden wollen:

git clone https://github.com/RedisJSON/RedisJSON.git --branch v2.2.0

Das hat den Vorteil, das auch die richtige Versionsnummer von Redisearch im Redis-Log und im "redis-cli" erscheint. Ohne die "--branch"-Angabe erscheint als Version eine 99.99.99 (Git=master-xxx).

back-to-topRedisJSON Modul bauen (kompilieren)


cd RedisJSON
cargo build --release

Jetzt lädt er diverse Abhängigkeiten nach (crates.io ...) und startet dann das "Building".

Dieser Vorgang muss mit folgender Ausgabe abschließen:

...
 Compiling redis-module v1.0.1
   Compiling redisjson v99.99.99 (/home/frank/redis/RedisJSON)
    Finished release [optimized + debuginfo] target(s) in 11.93s

Das erstellte Modul liegt nun unter:

~/redis/RedisJSON/target/release/librejson.so

back-to-topRediSearch Modul automatisch beim Start von Redis laden


Das Modul muss nun analog zur Redisearch Anleitung in das Verzeichnis "/var/lib/redis/modules/" kopiert werden.

sudo mkdir /var/lib/redis/modules (wenn noch nicht vorhanden)
sudo cp /home/frank/redis/RedisJSON/target/release/librejson.so /var/lib/redis/modules/.

Jetzt passen wir die Redis-Server Konfigurationsdatei (/etc/redis/redis.conf) an. Dabei öffnen wir die Datei und ergänzen sie im Bereich MODULES :

sudo vi /etc/redis/redis.conf

Tipp: Wer den "vi" nicht beherscht, kann den "vi" durch den Befehl "nano" ersetzen. Also "sudo nano /etc/redis/redis.conf"

################################## MODULES #####################################

# Load modules at startup. If the server is not able to load modules
# it will abort. It is possible to use multiple loadmodule directives.
#
# loadmodule /path/to/my_module.so
# loadmodule /path/to/other_module.so

#loadmodule /var/lib/redis/modules/redisearch.so

loadmodule /var/lib/redis/modules/librejson.so 

################################## NETWORK #####################################

Die Datei "redis.conf" speichern.

Tipp: Ihr könnt die Redis-Library "librejson.so" natürlich hinkopieren wo ihr wollt. Ihr müsst nur den entsprechend Pfad unter "loadmodule" anpassen.

Jetzt den Redis-Server neu starten:

service redis-server restart

Mit "status" kann man den Redis-Server testen und schauen ob alles läuft. Es sollte "Status: "Ready to accept connections" erscheinen.

Im Logfile "/var/log/redis/redis-server.log" sollte der Eintrag: "Module 'ReJSON' loaded from /var/lib/redis/modules/librejson.so" erscheinen.

Hier der Ausschnitt dazu:

1318840:M 11 Oct 2022 21:08:01.182 * <ReJSON> version: 999999 git sha: eddfcb9 branch: master
1318840:M 11 Oct 2022 21:08:01.182 * <ReJSON> Exported RedisJSON_V1 API
1318840:M 11 Oct 2022 21:08:01.182 * <ReJSON> Exported RedisJSON_V2 API
1318840:M 11 Oct 2022 21:08:01.182 * <ReJSON> Enabled diskless replication
1318840:M 11 Oct 2022 21:08:01.182 * <ReJSON> Created new data type 'ReJSON-RL'  
1318840:M 11 Oct 2022 21:08:01.182 * Module 'ReJSON' loaded from /var/lib/redis/modules/librejson.so  

back-to-topRedis und RedisJSON Modul im Betrieb testen


Der Redis-Server sollten nun laufen, dass RedisJSON-Modul erstellt, kopiert und aktiviert sein. Nun testen wir das zur Laufzeit mit Hilfe der "redis-cli":

redis-cli
127.0.0.1:6379> info modules
# Modules
module:name=ReJSON,ver=999999,api=1,filters=0,usedby=[search],using=,options=[handle-io-errors]

Wenn das erscheint, habt ihr alles richtig gemacht! Gratulation face-smile

Wer sich für Redis und RedisJSON interessiert sollte sich folgendes anschauen bzw. durchlesen:


Über Feedback oder Verbesserungen freue ich mich jederzeit. Wenn Euch die Anleitung gefällt klickt bitte auf das "Herz", als kleines Dankeschön face-smile

Gruß
Frank

Content-Key: 4239887509

Url: https://administrator.de/contentid/4239887509

Printed on: April 27, 2024 at 03:04 o'clock