Keine Verbindung zu NextBox Daemon

Hallo,
es war mal wieder Zeit für ein Backup, also steckte ich wie zuvor die USB-HD an. Diesmal führte das jedoch dazu, dass nur noch ein Serverfehler angezeigt wurde (~ Nextcloud hatte keine Verbindung zum Filesystem o.ä.). Reboot per SSH ging noch, aber nur mit Gewalt (“sudo systemctl --force --force reboot”).
Danach kam die NC wieder korrekt hoch. Nur der Daemon scheint es nicht geschafft zu haben (keine LED, blinkt nur ganz kurz alle 10 s oder so), Nextbox-App zeigt nur “NextBox Backend Connection: testing”…

Logs wie folgt:

[PHP] Error: Error: file_get_contents(http://172.18.238.1:18585/status): failed to open stream: Connection refused at /var/www/html/custom_apps/nextbox/lib/Controller/PageController.php#38 at <<closure>>

0. <<closure>>
   OC\Log\ErrorHandler::onError(2, "file_get_conten ... d", "/var/www/html/c ... p", 38, {path: "status"})
1. /var/www/html/custom_apps/nextbox/lib/Controller/PageController.php line 38
   file_get_contents("http://172.18.238.1:18585/status")
2. /var/www/html/lib/private/AppFramework/Http/Dispatcher.php line 218
   OCA\Nextbox\Controller\PageController->forward("status")
3. /var/www/html/lib/private/AppFramework/Http/Dispatcher.php line 127
   OC\AppFramework\Http\Dispatcher->executeController(OCA\Nextbox\Controller\PageController {}, "forward")
4. /var/www/html/lib/private/AppFramework/App.php line 157
   OC\AppFramework\Http\Dispatcher->dispatch(OCA\Nextbox\Controller\PageController {}, "forward")
5. /var/www/html/lib/private/Route/Router.php line 302
   OC\AppFramework\App::main("OCA\\Nextbox\\C ... r", "forward", OC\AppFramework\ ... {}, {path: "status", ... "})
6. /var/www/html/lib/base.php line 993
   OC\Route\Router->match("/apps/nextbox/forward/status")
7. /var/www/html/index.php line 37
   OC::handleRequest()

GET /apps/nextbox/forward/status
from 192.168.178.44 by ... at 2021-10-09T16:31:02+00:00

{"reqId":"...","level":3,"time":"2021-10-09T16:31:02+00:00","remoteAddr":"192.168.178.44","user":"...","app":"PHP","method":"GET","url":"/apps/nextbox/forward/status","message":{"Exception":"Error","Message":"file_get_contents(http://172.18.238.1:18585/status): failed to open stream: Connection refused at /var/www/html/custom_apps/nextbox/lib/Controller/PageController.php#38","Code":0,"Trace":[{"function":"onError","class":"OC\\Log\\ErrorHandler","type":"::","args":[2,"file_get_contents(http://172.18.238.1:18585/status): failed to open stream: Connection refused","/var/www/html/custom_apps/nextbox/lib/Controller/PageController.php",38,{"path":"status"}]},{"file":"/var/www/html/custom_apps/nextbox/lib/Controller/PageController.php","line":38,"function":"file_get_contents","args":["http://172.18.238.1:18585/status"]},{"file":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","line":218,"function":"forward","class":"OCA\\Nextbox\\Controller\\PageController","type":"->","args":["status"]},{"file":"/var/www/html/lib/private/AppFramework/Http/Dispatcher.php","line":127,"function":"executeController","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Nextbox\\Controller\\PageController"},"forward"]},{"file":"/var/www/html/lib/private/AppFramework/App.php","line":157,"function":"dispatch","class":"OC\\AppFramework\\Http\\Dispatcher","type":"->","args":[{"__class__":"OCA\\Nextbox\\Controller\\PageController"},"forward"]},{"file":"/var/www/html/lib/private/Route/Router.php","line":302,"function":"main","class":"OC\\AppFramework\\App","type":"::","args":["OCA\\Nextbox\\Controller\\PageController","forward",{"__class__":"OC\\AppFramework\\DependencyInjection\\DIContainer"},{"path":"status","_route":"nextbox.page.forward"}]},{"file":"/var/www/html/lib/base.php","line":993,"function":"match","class":"OC\\Route\\Router","type":"->","args":["/apps/nextbox/forward/status"]},{"file":"/var/www/html/index.php","line":37,"function":"handleRequest","class":"OC","type":"::","args":[]}],"File":"/var/www/html/lib/private/Log/ErrorHandler.php","Line":92,"CustomMessage":"--"},"userAgent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:93.0) Gecko/20100101 Firefox/93.0","version":"21.0.0.18","id":"6161c41ec8e7e"}

Und:

nextuser@nextbox:~ $ sudo systemctl status nextbox-daemon.service 
 nextbox-daemon.service - NextBox System Daemon
   Loaded: loaded (/lib/systemd/system/nextbox-daemon.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Sat 2021-10-09 17:37:34 BST; 2s ago
  Process: 8173 ExecStart=/usr/bin/nextbox-daemon (code=exited, status=1/FAILURE)
 Main PID: 8173 (code=exited, status=1/FAILURE)

Hey @lothar,

Dieser Fehler ist nach unserer Erfahrung nach meist damit verbunden, dass die interne Festplatte zu wenig Strom bekommt und entsprechend hängt das System diese dann zur Sicherheit aus, das würde auch recht gut mit dem Anstecken der USB-HD zusammenpassen. Bitte stehts darauf achten eine Festplatte mit funktionierender, externer Stromversorgung zu benutzen.

Ansonsten kann ich der Diagnose nicht widersprechen, offensichtlich läuft der nextbox-daemon nicht. Bzw. wenn manchmal die LED kurz aufblinkt, könnte das eine Indikation dafür sein, dass dieser es einfach nicht schafft zu starten. (siehe auch systemctl: Active: activating (auto-restart) und hinten noch der Hinweis, dass der letzte Startversuch 2 Sekunden her war (2s ago).

Hier wäre das /var/log/nextbox.log am interessantesten für uns, damit kann man das Problem bestimmt schnell eingrenzen, das aber bitte nicht hier posten, da könnten potentiell empfindliche Daten enthalten sein, also bitte einmal das log an support@nitrokey.com schicken.

beste Grüße

Danke für die schnelle Antwort! (ganz schön späte Arbeitszeiten :wink: )!
Das (aktuelle) nextbox.log ist unkritisch – endlose Wiederholungen dieser Sequenz:

2021-10-09 21:44:37,107 [i] config    ============================================================
2021-10-09 21:44:37,108 [i] config    ====> starting nextbox-daemon
2021-10-09 21:44:37,121 [i] sysfiles  checking file: '/etc/default/nextbox-updater'
2021-10-09 21:44:37,122 [i] sysfiles  checking file: '/etc/dphys-swapfile'
2021-10-09 21:44:37,122 [i] sysfiles  checking file (for existance only): '/etc/default/ddclient'
2021-10-09 21:44:37,123 [i] sysfiles  checking file: '/etc/systemd/journald.conf'
2021-10-09 21:44:37,124 [i] sysfiles  checking file: '/etc/apt/sources.list.d/nitrokey-nextbox.list'
2021-10-09 21:44:37,124 [i] sysfiles  checking file: '/etc/apt/apt.conf.d/50unattended-upgrades'

mmmh, d.h. direkt danach crasht er, verrückt…
Ja, dann wäre das nächste interessante Log jetzt sowas wie: journalctl -b 0 -u nextbox-daemon, da sollte dann hoffentlich passend zu dem crash ein stack-trace oder ähnliches zu finden sein. (Vorsicht mit dem inhalt, sollte aber unkritisch sein)

Falls das alles keine Einblicke erlaubt, dann kann man mal den nextbox-daemon service stoppen: systemctl stop nextbox-daemon und dann diesen mit der Hand (als root) starten, ungefähr so: nextbox-daemon, dann sollte er ja sofort platzen => juhu ein stacktrace…

Nur der letzte Vorschlag liefert das hier:

Traceback (most recent call last):
  File "/usr/bin/nextbox-daemon", line 33, in <module>
    sys.exit(load_entry_point('nextbox-daemon==0.0.3', 'console_scripts', 'nextbox-daemon')())
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 489, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2793, in load_entry_point
    return ep.load()
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2411, in load
    return self.resolve()
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2417, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python3/dist-packages/nextbox_daemon/start.py", line 24, in <module>
    from nextbox_daemon.jobs import ACTIVE_JOBS
  File "/usr/lib/python3/dist-packages/nextbox_daemon/jobs.py", line 5, in <module>
    import psutil
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 724, in exec_module
  File "<frozen importlib._bootstrap_external>", line 857, in get_code
  File "<frozen importlib._bootstrap_external>", line 525, in _compile_bytecode
ValueError: bad marshal data (invalid reference)

(Aber ich zumindest gehe jetzt erst mal schlafen.)

ja lel, ja das sieht so aus als hätte es wohl zumindest das byte-code file von python auf der sd-karte ein wenig mitgenommen (das ist das zwischen-kompilat von python, was gecached wird auf der festplatte, aber immer regeneriert wird wenn es nicht da ist), je nachdem wie hart das system den shutdown durchdrücken musste durchaus möglich. Aber easy, mal sowas hier loslassen:

find /usr/lib/python3/ -name '*.pyc' 

zur sicherheit mal über die liste scannen/schauen, sobald man sein gewissen beruhig hat dann sowas:

find /usr/lib/python3/ -name '*.pyc' -delete

vielleicht auch selektiver, das passiert ja beim psutil import, also wenn man nur die byte-object files löschen will von psutil, dann sowas:

find /usr/lib/python3/dist-packages/psutil -name '*.pyc' -delete

und ruhig mal einen Blick auf dmesg werfen, nicht dass die SD-Karte vor hat sich schnell aus dieser Welt zu machen, also mal nach “I/O Errors” suchen kann nicht schaden…

Bringt leider auch nichts, habe immer noch diese Ausgabe im Journal:

Oct 10 08:02:56 nextbox systemd[1]: Started NextBox System Daemon.
Oct 10 08:02:57 nextbox nextbox-daemon[2872]: Traceback (most recent call last):
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/bin/nextbox-daemon", line 33, in <module>
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     sys.exit(load_entry_point('nextbox-daemon==0.0.3', 'console_scripts', 'nextbox-daemon')())
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 489, in load_entry_point
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     return get_distribution(dist).load_entry_point(group, name)
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2793, in load_entry_point
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     return ep.load()
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2411, in load
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     return self.resolve()
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2417, in resolve
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     module = __import__(self.module_name, fromlist=['__name__'], level=0)
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/lib/python3/dist-packages/nextbox_daemon/start.py", line 24, in <module>
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     from nextbox_daemon.jobs import ACTIVE_JOBS
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/lib/python3/dist-packages/nextbox_daemon/jobs.py", line 5, in <module>
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     import psutil
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:   File "/usr/lib/python3/dist-packages/psutil/__init__.py", line 95, in <module>
Oct 10 08:02:57 nextbox nextbox-daemon[2872]:     from . import _pslinux as _psplatform
Oct 10 08:02:57 nextbox nextbox-daemon[2872]: ValueError: source code string cannot contain null bytes
Oct 10 08:02:57 nextbox systemd[1]: nextbox-daemon.service: Main process exited, code=exited, status=1/FAILURE
Oct 10 08:02:57 nextbox systemd[1]: nextbox-daemon.service: Failed with result 'exit-code'.
Oct 10 08:03:02 nextbox systemd[1]: nextbox-daemon.service: Service RestartSec=5s expired, scheduling restart.
Oct 10 08:03:02 nextbox systemd[1]: nextbox-daemon.service: Scheduled restart job, restart counter is at 22.
Oct 10 08:03:02 nextbox systemd[1]: Stopped NextBox System Daemon.

PS: Fehler der SD-Karte habe ich keine entdecken können.

und nochmal lölz, ja da steht halt müll “null bytes” in einem der source-files vom psutil. Das ist auf jeden Fall schon mal suboptimal, wo zwei Fehler sind, da sind auch mehr. Man kann problemlos die SD-Karte mit einem frischen Image überbügeln ohne “Nutz”-Daten zu verlieren, die sind alle auf der Festplatte bewusst ausgelagert.

Dafür bietet sich balena-etcher an und das passende image liegt hier: https://www.nitrokey.com/files/ci/nextbox/2021-06-18-NextBox-final.img

Trotzdem schwer zu diagnostizieren ob das wirklich ein Problem ist, oder ob wir hier nur Pech haben, also hätte ich noch folgendes anzubieten:

  • badblocks -sv /dev/mmblk0p2 -o scan.log macht einen nicht-invasiven scan (r/o) und sucht nach bösen Blöcken, geht auch von “innen” während das system läuft
  • vorsicht mit -n und -w, ersteres gilt als allgemein “sicher”, dauert aber ewig und -w vernichtet die Daten, also Obacht
  • dann können wir natürlich noch versuchen die relevanten Pakete einfach neu zu (re-)installieren:
# sicherstellen dass die dpkg-db in ordnung is
dpkg --configure -a 
# mal klein anfangen (direkte nextbox-daemon deps)
apt-get update
apt-get install --reinstall python3 python3-flask python3-requests python3-gpiozero python3-yaml python3-psutil python3-filelock docker.io docker-compose openssl 
# danach kann man beliebig wild werden, aber wenn es weiter geht, dann würde ich danach einfach alles neu draufbügeln, ungefähr so könnte das gehen: 
dpkg --get-selections | grep -v deinstall | awk '{print $1}' | xargs apt-get --reinstall install

spätestens danach ist das auch nicht viel anders als das image zu flashen, na ja doch, lustiger ^^

“apt-get install --reinstall …” hat es behoben. Oder das “apt upgrade” und/oder der Reboot danach. Fehler gab es bei “badblocks -sv” nicht.
Was auch immer der genaue Grund gewesen sein sollte – danke für die umfangreiche Hilfe!

Nebenbei: Habt ihr eine Empfehlung für SD-Karten? Ich habe das vage Gefühl, ich sollte immer eine auf Vorrat haben… :wink:

Sehr gut, alles richtig gemacht…
Ähm SD-Karten, ja ich ganz persönlich würde aktuell wenn ich nicht sparen will so mit 128GB veranschlagen (nicht zum voll machen, sondern wenn viel Platz da ist hab ich automatisch mehr Lebensdauer), da gibt es schon einige SDXCs für gut unter 50€ mit ~100MB/s rein-raus, die kommen mittlerweile mit Lebenszeitgarantie :flushed:

1 Like