Unreachable UI after Upgrade

Frozen, blinking red light on the console after an upgrade attempt. Would love any direction on the best way to troubleshoot from here

Logs show a restart cycle with the following error:

Nov 03 00:05:17 amplipi authbind[6843]: ModuleNotFoundError: No module named ‘validators’
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Main process exited, code=exited, status=1/FAILURE
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Failed with result ‘exit-code’.
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Service RestartSec=100ms expired, scheduling restart.
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Scheduled restart job, restart counter is at 27.
Nov 03 00:05:17 amplipi systemd[598]: Stopped Amplipi Home Audio System.
Nov 03 00:05:17 amplipi systemd[598]: Started Amplipi Home Audio System.

The rest of the log is:

Nov 03 00:05:14 amplipi systemd[598]: Stopped Amplipi Home Audio System.
Nov 03 00:05:14 amplipi systemd[598]: Started Amplipi Home Audio System.
Nov 03 00:05:17 amplipi authbind[6843]: Traceback (most recent call last):
Nov 03 00:05:17 amplipi authbind[6843]: File “/usr/lib/python3.7/runpy.py”, line 193, in _run_module_as_main
Nov 03 00:05:17 amplipi authbind[6843]: “main”, mod_spec)
Nov 03 00:05:17 amplipi authbind[6843]: File “/usr/lib/python3.7/runpy.py”, line 85, in _run_code
Nov 03 00:05:17 amplipi authbind[6843]: exec(code, run_globals)
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/main.py”, line 4, in
Nov 03 00:05:17 amplipi authbind[6843]: uvicorn.main()
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/click/core.py”, line 1137, in call
Nov 03 00:05:17 amplipi authbind[6843]: return self.main(*args, **kwargs)
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/click/core.py”, line 1062, in main
Nov 03 00:05:17 amplipi authbind[6843]: rv = self.invoke(ctx)
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/click/core.py”, line 1404, in invoke
Nov 03 00:05:17 amplipi authbind[6843]: return ctx.invoke(self.callback, **ctx.params)
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/click/core.py”, line 763, in invoke
Nov 03 00:05:17 amplipi authbind[6843]: return __callback(*args, **kwargs)
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/main.py”, line 449, in main
Nov 03 00:05:17 amplipi authbind[6843]: h11_max_incomplete_event_size=h11_max_incomplete_event_size,
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/main.py”, line 569, in run
Nov 03 00:05:17 amplipi authbind[6843]: server.run()
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/server.py”, line 60, in run
Nov 03 00:05:17 amplipi authbind[6843]: return asyncio.run(self.serve(sockets=sockets))
Nov 03 00:05:17 amplipi authbind[6843]: File “/usr/lib/python3.7/asyncio/runners.py”, line 43, in run
Nov 03 00:05:17 amplipi authbind[6843]: return loop.run_until_complete(main)
Nov 03 00:05:17 amplipi authbind[6843]: File “/usr/lib/python3.7/asyncio/base_events.py”, line 584, in run_until_complete
Nov 03 00:05:17 amplipi authbind[6843]: return future.result()
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/server.py”, line 67, in serve
Nov 03 00:05:17 amplipi authbind[6843]: config.load()
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/config.py”, line 477, in load
Nov 03 00:05:17 amplipi authbind[6843]: self.loaded_app = import_from_string(self.app)
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/importer.py”, line 24, in import_from_string
Nov 03 00:05:17 amplipi authbind[6843]: raise exc from None
Nov 03 00:05:17 amplipi authbind[6843]: File “/home/pi/amplipi-dev/venv/lib/python3.7/site-packages/uvicorn/importer.py”, line 21, in import_from_string
Nov 03 00:05:17 amplipi authbind[6843]: module = importlib.import_module(module_str)
Nov 03 00:05:17 amplipi authbind[6843]: File “/usr/lib/python3.7/importlib/init.py”, line 127, in import_module
Nov 03 00:05:17 amplipi authbind[6843]: return _bootstrap._gcd_import(name[level:], package, level)
Nov 03 00:05:17 amplipi authbind[6843]: File “”, line 1006, in _gcd_import
Nov 03 00:05:17 amplipi authbind[6843]: File “”, line 983, in _find_and_load
Nov 03 00:05:17 amplipi authbind[6843]: File “”, line 967, in _find_and_load_unlocked
Nov 03 00:05:17 amplipi authbind[6843]: File “”, line 677, in _load_unlocked
Nov 03 00:05:17 amplipi authbind[6843]: File “”, line 728, in exec_module
Nov 03 00:05:17 amplipi authbind[6843]: File “”, line 219, in _call_with_frames_removed
Nov 03 00:05:17 amplipi authbind[6843]: File “./amplipi/asgi.py”, line 27, in
Nov 03 00:05:17 amplipi authbind[6843]: import amplipi.app
Nov 03 00:05:17 amplipi authbind[6843]: File “./amplipi/app.py”, line 63, in
Nov 03 00:05:17 amplipi authbind[6843]: from amplipi.ctrl import Api, ApiResponse, ApiCode # we don’t import ctrl here to avoid naming ambiguity with a ctrl variable
Nov 03 00:05:17 amplipi authbind[6843]: File “./amplipi/ctrl.py”, line 41, in
Nov 03 00:05:17 amplipi authbind[6843]: import amplipi.streams
Nov 03 00:05:17 amplipi authbind[6843]: File “./amplipi/streams/init.py”, line 31, in
Nov 03 00:05:17 amplipi authbind[6843]: from .internet_radio import InternetRadio
Nov 03 00:05:17 amplipi authbind[6843]: File “./amplipi/streams/internet_radio.py”, line 12, in
Nov 03 00:05:17 amplipi authbind[6843]: import validators
Nov 03 00:05:17 amplipi authbind[6843]: ModuleNotFoundError: No module named ‘validators’
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Main process exited, code=exited, status=1/FAILURE
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Failed with result ‘exit-code’.
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Service RestartSec=100ms expired, scheduling restart.
Nov 03 00:05:17 amplipi systemd[598]: amplipi.service: Scheduled restart job, restart counter is at 27.
Nov 03 00:05:17 amplipi systemd[598]: Stopped Amplipi Home Audio System.
Nov 03 00:05:17 amplipi systemd[598]: Started Amplipi Home Audio System.

Sorry about your upgrade failure. We’ve seen this happen several times but haven’t found the root cause yet. We do have a fix for it though. Just upgrade a second time!

Navigate to http://amplipi.local:5001/update. From there you can run the update again.

I would’ve sworn I had tried that, but clearly I didn’t! That worked the charm, thanks!