-
-
Notifications
You must be signed in to change notification settings - Fork 179
Description
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.
<<<