Skip to content

Support for older Synology models in the NET8 version #1645

@hgzimmer

Description

@hgzimmer

Is your feature request related to a problem? Please describe.
I'd like to perform the upgrade to the new NET8 version of TeslaLogger on my Synology NAS (DS216+).
Currently, the error message "Function not implemented: AH00141: Could not initialize random number generator." prevents this.

Describe the solution you'd like
A way to perform an automatic update on my Synology NAS to the NET8 version (or one-time manual process, but not for every update)

Describe alternatives you've considered
As per the forum, there is a manual approach:
https://tff-forum.de/t/teslalogger-mit-raspberry-pi-mysql-grafana-osm-teil-3/345688/3825

But this would have to be done for each and every update, if I understand correctly.

Additional context
For reference and to allow searching, I'm pasting the forum message below - many thanks to lenin2000 to figure this out:

bei wem ein Problem mit NAS Synology mit Kernelversion
uname -r = 3.10.108
Fehler des Containers teslalogger-webserver wie folgt:

TeslaLogger [:crit] [pid 1:tid 1] (38)Function not implemented: AH00141: Could not initialize random number generator.

Lösung: Ich verstehe es so, dass Sie bereits nach der Anleitung aktualisiert haben :slight_smile:
Die nächsten Schritte sind wie folgt:

Per SSH auf das NAS zugreifen und root werden
bash

sudo -i # falls Sie nicht root sind
Ort auswählen
bash

mkdir -p /volume1/docker/getrandom-shim
Quellcode erstellen
bash

cat > /volume1/docker/getrandom-shim/getrandom_shim.c <<'EOF'
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <stddef.h>

ssize_t getrandom(void *buf, size_t buflen, unsigned int flags) {
errno = 0;
long r = syscall(SYS_getrandom, buf, buflen, flags);
if (r >= 0) return r;
if (errno != ENOSYS) return r; // andere Fehler durchreichen

int fd = open("/dev/urandom", O_RDONLY);
if (fd < 0) return -1;
ssize_t n = read(fd, buf, buflen);
close(fd);
return n;

}
EOF
.so kompilieren (verwenden Sie einen Debian-Container; dieser lädt gcc automatisch)
bash

docker run --rm -v /volume1/docker/getrandom-shim:/work debian:bullseye bash -lc '
set -e
apt-get update
apt-get install -y gcc
cd /work
gcc -O2 -shared -fPIC -o libgetrandom_shim.so getrandom_shim.c
strip libgetrandom_shim.so
'
Überprüfen, ob die Datei vorhanden ist
bash

ls -l /volume1/docker/getrandom-shim/libgetrandom_shim.so
in /volume1/docker/TeslaLogger/docker-compose.yml
Die Datei docker-compose.yml ändern und 2 Volume-Zeilen mit .so und LD_PRELOAD hinzufügen.
Der Abschnitt webserver sollte so aussehen:
yaml

webserver:
image: bassmaster187/teslalogger-webserver:latest
container_name: teslalogger-webserver
restart: always
volumes:
- teslalogger-net8-tmp:/tmp/
- /volume1/docker/getrandom-shim/libgetrandom_shim.so:/opt/shims/libgetrandom_shim.so:ro
# kein leeres ./www nach /var/www/html mounten, um die Dateien aus dem Image nicht zu überschreiben
depends_on:
- teslalogger
- grafana
ports:
- ${WEBSERVER_PORT:-8888}:80
environment:
- TZ=${TZ:-Europe/Berlin}
- LD_PRELOAD=/opt/shims/libgetrandom_shim.so
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/"]
interval: 30s
timeout: 5s
retries: 3
start_period: 30s
labels:
- com.centurylinklabs.watchtower.enable=${WATCHTOWER_ENABLE:-true}
- com.centurylinklabs.watchtower.scope=teslalogger-stack
docker compose
bash
docker compose up -d --force-recreate webserver
Datenbank über WebUI wiederherstellen
Container neu starten
bash

docker compose down
docker compose up -d
Natürlich ist von einer automatischen Aktualisierung keine Rede.
<<<

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions