Building debian package #128

Open
opened 2026-10-27 09:34:25 +01:00 by adam · 5 comments
Owner

Hi

I saw the installation instructions and it makes my sysadmin heart tremble. However, I saw there was a debian dir there, so I tried to make the package. That worked (except a bunch of warnings, but only about the CHANGES syntax or something), but when I try to start it, I get the above. I've tried to create a venv and install it there, but it didn't help, doesn't look like it's interested in the venv at all. I can probably just pip install --break-system-packages, but I really don't want to. Software should be installable cleanly without messing about.

Any idea what can be done to fix this cleanly?

openshop_repeater@openhop-vm.karlsbakk.net:~$ openhop-repeater
Traceback (most recent call last):
  File "/usr/bin/openhop-repeater", line 33, in <module>
    sys.exit(load_entry_point('openhop-repeater==1.0.5.dev0', 'console_scripts', 'openhop-repeater')())
             ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/bin/openhop-repeater", line 25, in importlib_load_entry_point
    return next(matches).load()
           ~~~~~~~~~~~~~~~~~~^^
  File "/usr/lib/python3.13/importlib/metadata/__init__.py", line 179, in load
    module = import_module(match.group('module'))
  File "/usr/lib/python3.13/importlib/__init__.py", line 88, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 1026, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/usr/lib/python3/dist-packages/repeater/main.py", line 10, in <module>
    from repeater.companion.utils import (
    ...<7 lines>...
    )
  File "/usr/lib/python3/dist-packages/repeater/companion/__init__.py", line 6, in <module>
    from .bridge import RepeaterCompanionBridge
  File "/usr/lib/python3/dist-packages/repeater/companion/bridge.py", line 16, in <module>
    from openhop_core.companion import CompanionBridge
ModuleNotFoundError: No module named 'openhop_core'
openshop_repeater@openhop-vm.karlsbakk.net:~$
Hi I saw the installation instructions and it makes my sysadmin heart tremble. However, I saw there was a debian dir there, so I tried to make the package. That worked (except a bunch of warnings, but only about the CHANGES syntax or something), but when I try to start it, I get the above. I've tried to create a venv and install it there, but it didn't help, doesn't look like it's interested in the venv at all. I can probably just pip install --break-system-packages, but I really don't want to. Software should be installable cleanly without messing about. Any idea what can be done to fix this cleanly? openshop_repeater@openhop-vm.karlsbakk.net:~$ openhop-repeater Traceback (most recent call last): File "/usr/bin/openhop-repeater", line 33, in <module> sys.exit(load_entry_point('openhop-repeater==1.0.5.dev0', 'console_scripts', 'openhop-repeater')()) ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/bin/openhop-repeater", line 25, in importlib_load_entry_point return next(matches).load() ~~~~~~~~~~~~~~~~~~^^ File "/usr/lib/python3.13/importlib/metadata/__init__.py", line 179, in load module = import_module(match.group('module')) File "/usr/lib/python3.13/importlib/__init__.py", line 88, in import_module return _bootstrap._gcd_import(name[level:], package, level) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in _gcd_import File "<frozen importlib._bootstrap>", line 1360, in _find_and_load File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 935, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 1026, in exec_module File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed File "/usr/lib/python3/dist-packages/repeater/main.py", line 10, in <module> from repeater.companion.utils import ( ...<7 lines>... ) File "/usr/lib/python3/dist-packages/repeater/companion/__init__.py", line 6, in <module> from .bridge import RepeaterCompanionBridge File "/usr/lib/python3/dist-packages/repeater/companion/bridge.py", line 16, in <module> from openhop_core.companion import CompanionBridge ModuleNotFoundError: No module named 'openhop_core' openshop_repeater@openhop-vm.karlsbakk.net:~$ <!-- github-sync-id:4866675521 -->
Author
Owner

FWIW, I'm facing similar, and with following their manage.sh install path… leading to a slightly different missing python module error:

/opt/openhop_repeater/venv/bin/python: Error while finding module specification for 'repeater.main' (ModuleNotFoundError: No module named 'repeater')

And I agree with the frightening nature of that manage script. At one point, I ended up with the project directory completely emptied except for a venv dir!

FWIW, I'm facing similar, and with following their `manage.sh install` path… leading to a slightly different missing python module error: ``` /opt/openhop_repeater/venv/bin/python: Error while finding module specification for 'repeater.main' (ModuleNotFoundError: No module named 'repeater') ``` And I agree with the frightening nature of that manage script. At one point, I ended up with the project directory completely emptied except for a `venv` dir! <!-- github-comment-id:5209209609 -->
Author
Owner

Thanks for raising this. I definitely agree that you shouldn’t need to use pip install --break-system-packages, and that isn’t how the normal installer is intended to work.

I think what you’ve hit here is that the Debian packaging and the current manage.sh installation path have drifted apart somewhat.

The current manage.sh installer deliberately creates a dedicated virtual environment at:

/opt/openhop_repeater/venv

All of the Python dependencies, including openhop_repeater and the hardware dependencies, are installed into that venv rather than into the system Python. The systemd service then runs the repeater using:

/opt/openhop_repeater/venv/bin/python -m repeater.main

So on a normal install there should be no need to bypass Debian’s externally-managed Python protection or use --break-system-packages.

There is also migration code in manage.sh specifically for older installations which used the system Python. It removes old PYTHONPATH entries, changes an old /usr/bin/python3 ExecStart to the venv interpreter, cleans up old system-level Python packages and removes stale source trees which could otherwise shadow the package installed in the venv.

From your traceback:

/usr/bin/openhop-repeater

is being executed and it is loading repeater from:

/usr/lib/python3/dist-packages/

so that installation is definitely going through the system Python rather than the environment that the current installer expects. That also explains why creating a venv manually didn’t help — /usr/bin/openhop-repeater has no reason to use that venv.

The reason manage.sh has become rather large is that it is doing quite a bit more than simply installing a Python package. It currently handles things such as:

  • creating and maintaining the dedicated venv
  • creating the repeater service user and permissions
  • installing the required OS packages
  • configuring the systemd service
  • configuring hardware groups such as gpio, i2c, spi, dialout and plugdev
  • SPI detection/configuration
  • different radio connection methods, including native SPI and CH341 USB-SPI
  • udev configuration
  • Raspberry Pi-specific handling as well as more generic SBC handling
  • architecture-specific wheels for ARM64, ARMv7 and x86_64
  • special handling for platforms such as the Luckfox Pico where some binary wheels aren’t available
  • upgrades and migration from older PyMC/openHop layouts
  • OTA/web upgrades while keeping those upgrades inside the same venv

So there is unfortunately quite a bit of SBC/radio/platform-specific setup wrapped up in it.

That said, I completely agree with the underlying point: installing the software cleanly shouldn’t require messing with the system Python.

The debian/ directory probably needs some attention because at the moment building the .deb isn’t equivalent to installing through manage.sh. Ideally we should either make the Debian package set up/use the same dedicated venv and service layout, or restructure things so the common installation logic is shared rather than maintaining two different installation paths.

I’d actually be very interested in ideas for improving this. If we can move more of the platform-independent setup out of manage.sh, simplify the packaging, or make a proper .deb the main installation mechanism without losing support for all the different SBC/radio combinations, I’d be very happy to simplify it.

Thanks for raising this. I definitely agree that you shouldn’t need to use pip install --break-system-packages, and that isn’t how the normal installer is intended to work. I think what you’ve hit here is that the Debian packaging and the current manage.sh installation path have drifted apart somewhat. The current manage.sh installer deliberately creates a dedicated virtual environment at: /opt/openhop_repeater/venv All of the Python dependencies, including openhop_repeater and the hardware dependencies, are installed into that venv rather than into the system Python. The systemd service then runs the repeater using: /opt/openhop_repeater/venv/bin/python -m repeater.main So on a normal install there should be no need to bypass Debian’s externally-managed Python protection or use --break-system-packages. There is also migration code in manage.sh specifically for older installations which used the system Python. It removes old PYTHONPATH entries, changes an old /usr/bin/python3 ExecStart to the venv interpreter, cleans up old system-level Python packages and removes stale source trees which could otherwise shadow the package installed in the venv. From your traceback: /usr/bin/openhop-repeater is being executed and it is loading repeater from: /usr/lib/python3/dist-packages/ so that installation is definitely going through the system Python rather than the environment that the current installer expects. That also explains why creating a venv manually didn’t help — /usr/bin/openhop-repeater has no reason to use that venv. The reason manage.sh has become rather large is that it is doing quite a bit more than simply installing a Python package. It currently handles things such as: * creating and maintaining the dedicated venv * creating the repeater service user and permissions * installing the required OS packages * configuring the systemd service * configuring hardware groups such as gpio, i2c, spi, dialout and plugdev * SPI detection/configuration * different radio connection methods, including native SPI and CH341 USB-SPI * udev configuration * Raspberry Pi-specific handling as well as more generic SBC handling * architecture-specific wheels for ARM64, ARMv7 and x86_64 * special handling for platforms such as the Luckfox Pico where some binary wheels aren’t available * upgrades and migration from older PyMC/openHop layouts * OTA/web upgrades while keeping those upgrades inside the same venv So there is unfortunately quite a bit of SBC/radio/platform-specific setup wrapped up in it. That said, I completely agree with the underlying point: installing the software cleanly shouldn’t require messing with the system Python. The debian/ directory probably needs some attention because at the moment building the .deb isn’t equivalent to installing through manage.sh. Ideally we should either make the Debian package set up/use the same dedicated venv and service layout, or restructure things so the common installation logic is shared rather than maintaining two different installation paths. I’d actually be very interested in ideas for improving this. If we can move more of the platform-independent setup out of manage.sh, simplify the packaging, or make a proper .deb the main installation mechanism without losing support for all the different SBC/radio combinations, I’d be very happy to simplify it. <!-- github-comment-id:5301054323 -->
Author
Owner

Another update… I've been successfully running the repeater via the openhop/openhop-repeater:main docker image.

On the same RPi 4, using the openhop_repeater/manage.sh to install did install and set up many things, but then is unable to start the service as I reported earlier. (ModuleNotFoundError: No module named 'repeater')

Another update… I've been successfully running the repeater via the `openhop/openhop-repeater:main` docker image. On the same RPi 4, using the `openhop_repeater/manage.sh` to install did install and set up many things, but then is unable to start the service as I reported earlier. (`ModuleNotFoundError: No module named 'repeater'`) <!-- github-comment-id:5471960927 -->
Author
Owner

I've just got it to run by manually installing with the following from https://github.com/openhop-dev/openhop_repeater/blob/1.1.1/manage.sh#L660-L663

/opt/openhop_repeater/venv /bin/python -m pip install \
  --upgrade \
  --no-cache-dir \
  "openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main"

service openhop-repeater start now actually starts the service, and it runs!

I've just got it to run by manually installing with the following from https://github.com/openhop-dev/openhop_repeater/blob/1.1.1/manage.sh#L660-L663 ```sh /opt/openhop_repeater/venv /bin/python -m pip install \ --upgrade \ --no-cache-dir \ "openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main" ``` `service openhop-repeater start` now actually starts the service, and it runs! <!-- github-comment-id:5474038427 -->
Author
Owner

I just hit this failure again, after upgrading my repeater to 1.1.4:

/opt/openhop_repeater/venv/bin/python: Error while finding module specification for 'repeater.main' (ModuleNotFoundError: No module named 'repeater')

… and again had to manually fix it with the pip command I noted in my reply to this issue last week.

If at all useful, this was the output from manage.sh on that upgrade to 1.1.4:

Click to expand console log
Using package source: local checkout (/opt/openhop_repeater)
=== Upgrade Progress ===
[1/9] Migrating legacy paths...
    ✓ Removed stale source tree at /opt/openhop_repeater/repeater
[2/9] Ensuring required directories...
[3/9] Backing up configuration...
    ✓ Configuration backed up
[4/9] Updating system dependencies...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
libffi-dev is already the newest version (3.4.8-2).
libusb-1.0-0 is already the newest version (2:1.0.28-1).
sudo is already the newest version (1.9.16p2-3+deb13u2).
jq is already the newest version (1.7.1-6+deb13u3).
python3-pip is already the newest version (25.1.1+dfsg-1+rpt1).
python3-venv is already the newest version (3.13.5-1).
python3-rrdtool is already the newest version (1.7.2-4.2+b5).
wget is already the newest version (1.25.0-2).
swig is already the newest version (4.3.0-1).
build-essential is already the newest version (12.12).
python3-dev is already the newest version (3.13.5-1).
i2c-tools is already the newest version (4.4-2).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package policykit-1 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  polkitd:armhf pkexec:armhf polkitd pkexec

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
polkitd is already the newest version (126-2).
pkexec is already the newest version (126-2).
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
    ✓ No broken package metadata found
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pip in ./venv/lib/python3.13/site-packages (26.2.1)
Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (84.0.0)
Requirement already satisfied: wheel in ./venv/lib/python3.13/site-packages (0.48.0)
Requirement already satisfied: packaging>=24.0 in ./venv/lib/python3.13/site-packages (from wheel) (26.3)
    ✓ Dependencies updated
[5/9] Installing files...
    ✓ openhop-plugin-manager.service installed
    ✓ Files updated
[6/9] Validating and updating configuration...
    Merging configuration...
    ✓ Backup created: /etc/openhop_repeater/config.yaml.backup.20260908_175307
    ✓ Configuration merged successfully
    ✓ Legacy pymc_* paths normalized
    ✓ User settings preserved, new options added
    ✓ Configuration validated and updated
[6.5/9] Ensuring user groups and udev rules...
    ✓ User groups updated
[7/9] Fixing permissions and helper files...
Polkit 0.106 or greater detected, using rules file
>>> Configuring polkit for service management...
    ✓ Permissions updated
[8/9] Installing Python Dependencies...
Note: Using optimized binary wheels for faster installation

>>> Checking for legacy system-pip installation...
    ✓ No broken package metadata found
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pip in ./venv/lib/python3.13/site-packages (26.2.1)
Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (84.0.0)
Requirement already satisfied: wheel in ./venv/lib/python3.13/site-packages (0.48.0)
Requirement already satisfied: packaging>=24.0 in ./venv/lib/python3.13/site-packages (from wheel) (26.3)
    ✓ Cleaned up system-level packages (if any)
    ✓ No stale source-tree paths found
Upgrading openhop_repeater into venv (/opt/openhop_repeater/venv)...
  Checking for R2 wheels (arm64/aarch64/cp313-cp313)...
  Trying install from R2 pre-built wheels...
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Looking in links: https://wheel.pymc.dev/pymc_build_deps/arm64/aarch64/cp313-cp313/index.html
Requirement already satisfied: pycryptodome>=3.23.0 in ./venv/lib/python3.13/site-packages (3.23.0)
Requirement already satisfied: PyNaCl>=1.5.0 in ./venv/lib/python3.13/site-packages (1.6.2)
Requirement already satisfied: cffi in ./venv/lib/python3.13/site-packages (2.1.1)
Requirement already satisfied: pyyaml>=6.0.0 in ./venv/lib/python3.13/site-packages (6.0.3)
Requirement already satisfied: pycparser in ./venv/lib/python3.13/site-packages (from cffi) (3.0)
  ✓ R2 wheels installed
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Processing ./.
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting openhop_core==1.1.3 (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0)
  Downloading openhop_core-1.1.3-py3-none-any.whl.metadata (8.6 kB)
Requirement already satisfied: pyyaml>=6.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (6.0.3)
Requirement already satisfied: cherrypy>=18.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (18.10.0)
Requirement already satisfied: paho-mqtt>=1.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (2.1.0)
Requirement already satisfied: cherrypy-cors==1.7.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (1.7.0)
Requirement already satisfied: psutil>=5.9.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (7.2.2)
Requirement already satisfied: pyserial>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (3.5)
Requirement already satisfied: pyjwt>=2.8.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (2.13.0)
Requirement already satisfied: ws4py>=0.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (0.6.0)
Requirement already satisfied: httpagentparser>=1.5 in ./venv/lib/python3.13/site-packages (from cherrypy-cors==1.7.0->openhop_repeater==1.1.5.dev0) (1.9.9)
Requirement already satisfied: pycryptodome>=3.23.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (3.23.0)
Requirement already satisfied: PyNaCl>=1.5.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (1.6.2)
Requirement already satisfied: python-periphery>=2.4.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (2.4.1)
Requirement already satisfied: spidev>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (3.8)
Requirement already satisfied: pyusb>=1.2.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (1.3.1)
Requirement already satisfied: cheroot>=8.2.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (11.1.2)
Requirement already satisfied: portend>=2.1.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (3.2.1)
Requirement already satisfied: more-itertools in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (11.1.0)
Requirement already satisfied: zc.lockfile in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.0)
Requirement already satisfied: jaraco.collections in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (5.2.1)
Requirement already satisfied: jaraco.functools in ./venv/lib/python3.13/site-packages (from cheroot>=8.2.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.6.0)
Requirement already satisfied: tempora>=1.8 in ./venv/lib/python3.13/site-packages (from portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (5.12.0)
Requirement already satisfied: cffi>=2.0.0 in ./venv/lib/python3.13/site-packages (from PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (2.1.1)
Requirement already satisfied: pycparser in ./venv/lib/python3.13/site-packages (from cffi>=2.0.0->PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (3.0)
Requirement already satisfied: python-dateutil in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (2.9.0.post0)
Requirement already satisfied: jaraco.context in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (6.1.2)
Requirement already satisfied: typing_extensions in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.16.0)
Requirement already satisfied: jaraco.text in ./venv/lib/python3.13/site-packages (from jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.3.0)
Requirement already satisfied: typer-slim in ./venv/lib/python3.13/site-packages (from jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.24.0)
Requirement already satisfied: six>=1.5 in ./venv/lib/python3.13/site-packages (from python-dateutil->tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (1.17.0)
Requirement already satisfied: typer>=0.24.0 in ./venv/lib/python3.13/site-packages (from typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.27.2)
Requirement already satisfied: shellingham>=1.3.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (1.5.4)
Requirement already satisfied: rich>=13.8.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (15.0.0)
Requirement already satisfied: annotated-doc>=0.0.2 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.0.5)
Requirement already satisfied: markdown-it-py>=2.2.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.2.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (2.21.0)
Requirement already satisfied: mdurl~=0.1 in ./venv/lib/python3.13/site-packages (from markdown-it-py>=2.2.0->rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.1.2)
Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (from zc.lockfile->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (84.0.0)
Downloading openhop_core-1.1.3-py3-none-any.whl (420 kB)
Building wheels for collected packages: openhop_repeater
  Building wheel for openhop_repeater (pyproject.toml) ... done
  Created wheel for openhop_repeater: filename=openhop_repeater-1.1.5.dev0-py3-none-any.whl size=11588 sha256=ca59a9eeb6e40f3de6f943d579007ce88a0a4c94df4ea621db6d10a83c46b3f1
  Stored in directory: /tmp/pip-ephem-wheel-cache-m3ljd3p5/wheels/39/81/70/01475a4ec19576e9a701ea85383d3ea862543920ab0c735ec8
Successfully built openhop_repeater
Installing collected packages: openhop_core, openhop_repeater
  Attempting uninstall: openhop_core
    Found existing installation: openhop_core 1.1.3.dev24
    Uninstalling openhop_core-1.1.3.dev24:
      Successfully uninstalled openhop_core-1.1.3.dev24
  Attempting uninstall: openhop_repeater
    Found existing installation: openhop_repeater 1.1.2.dev260
    Uninstalling openhop_repeater-1.1.2.dev260:
      Successfully uninstalled openhop_repeater-1.1.2.dev260
Successfully installed openhop_core-1.1.3 openhop_repeater-1.1.5.dev0

✓ Package and dependencies upgraded successfully!
[9/9] Reloading systemd and restarting service...
    ✓ Service restarted and active
    ✓ openhop-plugin-manager enabled
    ✓ openhop-plugin-manager restarted
=== Upgrade Complete ===
[mario@pigrunt:/opt/openhop_repeater]  1m22s 1 ± sudo service openhop-repeater status
● openhop-repeater.service - openHop Repeater Daemon
     Loaded: loaded (/etc/systemd/system/openhop-repeater.service; enabled; preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Tue 2026-09-08 17:54:15 PDT; 1s ago
 Invocation: b0166a7d7bcc4489b2aeab3733123477
    Process: 4999 ExecStart=/opt/openhop_repeater/venv/bin/python -m repeater.main --config /etc/openhop_repeater/config>
   Main PID: 4999 (code=exited, status=1/FAILURE)
        CPU: 104ms

And this was the output from the fix:

Click to expand console log
$ cd /opt/openhop_repeater
$ ./venv/bin/activate 
$ VENV_PYTHON=/opt/openhop_repeater/venv/bin/python
$ sudo "$VENV_PYTHON" -m pip install --upgrade --no-cache-dir "openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main"
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main (from openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main)
  Cloning https://github.com/openhop-dev/openhop_repeater.git (to revision main) to /tmp/pip-install-tpem6fs9/openhop-repeater_66cc707f12b74361ab6a152fef7c2256
  Running command git clone --filter=blob:none --quiet https://github.com/openhop-dev/openhop_repeater.git /tmp/pip-install-tpem6fs9/openhop-repeater_66cc707f12b74361ab6a152fef7c2256
  Resolved https://github.com/openhop-dev/openhop_repeater.git to commit 13eb8b2ea8b1cdb4a07ed6e282dc99e3aa8a5a8b
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: openhop_core==1.1.3 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.1.3)
Requirement already satisfied: pyyaml>=6.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (6.0.3)
Requirement already satisfied: cherrypy>=18.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (18.10.0)
Requirement already satisfied: paho-mqtt>=1.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.1.0)
Requirement already satisfied: cherrypy-cors==1.7.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.7.0)
Requirement already satisfied: psutil>=5.9.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (7.2.2)
Requirement already satisfied: pyserial>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.5)
Requirement already satisfied: pyjwt>=2.8.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.13.0)
Requirement already satisfied: ws4py>=0.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.6.0)
Requirement already satisfied: httpagentparser>=1.5 in ./venv/lib/python3.13/site-packages (from cherrypy-cors==1.7.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.9.9)
Requirement already satisfied: pycryptodome>=3.23.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.23.0)
Requirement already satisfied: PyNaCl>=1.5.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.6.2)
Requirement already satisfied: python-periphery>=2.4.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.4.1)
Requirement already satisfied: spidev>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.8)
Requirement already satisfied: pyusb>=1.2.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.3.1)
Requirement already satisfied: cheroot>=8.2.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (11.1.2)
Requirement already satisfied: portend>=2.1.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.2.1)
Requirement already satisfied: more-itertools in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (11.1.0)
Requirement already satisfied: zc.lockfile in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.0)
Requirement already satisfied: jaraco.collections in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (5.2.1)
Requirement already satisfied: jaraco.functools in ./venv/lib/python3.13/site-packages (from cheroot>=8.2.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.6.0)
Requirement already satisfied: tempora>=1.8 in ./venv/lib/python3.13/site-packages (from portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (5.12.0)
Requirement already satisfied: cffi>=2.0.0 in ./venv/lib/python3.13/site-packages (from PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.1.1)
Requirement already satisfied: pycparser in ./venv/lib/python3.13/site-packages (from cffi>=2.0.0->PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.0)
Requirement already satisfied: python-dateutil in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.9.0.post0)
Requirement already satisfied: jaraco.context in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (6.1.2)
Requirement already satisfied: typing_extensions in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.16.0)
Requirement already satisfied: jaraco.text in ./venv/lib/python3.13/site-packages (from jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.3.0)
Requirement already satisfied: typer-slim in ./venv/lib/python3.13/site-packages (from jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.24.0)
Requirement already satisfied: six>=1.5 in ./venv/lib/python3.13/site-packages (from python-dateutil->tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.17.0)
Requirement already satisfied: typer>=0.24.0 in ./venv/lib/python3.13/site-packages (from typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.27.2)
Requirement already satisfied: shellingham>=1.3.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.5.4)
Requirement already satisfied: rich>=13.8.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (15.0.0)
Requirement already satisfied: annotated-doc>=0.0.2 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.0.5)
Requirement already satisfied: markdown-it-py>=2.2.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.2.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.21.0)
Requirement already satisfied: mdurl~=0.1 in ./venv/lib/python3.13/site-packages (from markdown-it-py>=2.2.0->rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.1.2)
Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (from zc.lockfile->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (84.0.0)
Building wheels for collected packages: openhop_repeater
  Building wheel for openhop_repeater (pyproject.toml) ... done
  Created wheel for openhop_repeater: filename=openhop_repeater-1.1.4-py3-none-any.whl size=3718378 sha256=e587e33d3ae07c197379b9c0a6be43628a92584a6a0c020f8d4301a49badda18
  Stored in directory: /tmp/pip-ephem-wheel-cache-evx8eqn9/wheels/76/cd/77/fecc3eaf46fad06405142b76038be543330e2331ad813dc182
Successfully built openhop_repeater
Installing collected packages: openhop_repeater
  Attempting uninstall: openhop_repeater
    Found existing installation: openhop_repeater 1.1.5.dev0
    Uninstalling openhop_repeater-1.1.5.dev0:
      Successfully uninstalled openhop_repeater-1.1.5.dev0
Successfully installed openhop_repeater-1.1.4
$ 
$ sudo service openhop-repeater status
● openhop-repeater.service - openHop Repeater Daemon
     Loaded: loaded (/etc/systemd/system/openhop-repeater.service; enabled; preset: enabled)
     Active: active (running) since Tue 2026-09-08 17:57:45 PDT; 5s ago
 Invocation: 783ad69e152243fda08bacb827e4405f
   Main PID: 5618 (python)
      Tasks: 20 (limit: 1626)
        CPU: 1.663s
     CGroup: /system.slice/openhop-repeater.service
             └─5618 /opt/openhop_repeater/venv/bin/python -m repeater.main --config /etc/openhop_repeater/config.yaml

Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,663 - HTTPServer - INFO - WebSocket endpoint configu>
Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,663 - HTTPServer - INFO - HTTP worker config: thread>
Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,772 - HTTPServer - INFO - HTTP stats server started >
Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,773 - TCPLoRaRadio - INFO - RX callback registered
Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,774 - Dispatcher - INFO - Registered RX callback wit>
Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,775 - TCPLoRaRadio - INFO - Async config push result>
Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,798 - TCPLoRaRadio - INFO - Async config push result>
Sep 08 17:57:48 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:48,150 - MQTTHandler - INFO - Publishing initial status>
Sep 08 17:57:48 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:48,154 - MQTTHandler - INFO - Started status heartbeat >
Sep 08 17:57:48 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:48,970 - RoomServer - INFO - Room 'heepy-room' sync loo>
I just hit this failure again, after upgrading my repeater to `1.1.4`: ``` /opt/openhop_repeater/venv/bin/python: Error while finding module specification for 'repeater.main' (ModuleNotFoundError: No module named 'repeater') ``` … and again had to manually fix it with the `pip` command I noted in my reply to this issue last week. If at all useful, this was the output from `manage.sh` on that upgrade to `1.1.4`: <details> <summary>Click to expand console log</summary> ``` Using package source: local checkout (/opt/openhop_repeater) === Upgrade Progress === [1/9] Migrating legacy paths... ✓ Removed stale source tree at /opt/openhop_repeater/repeater [2/9] Ensuring required directories... [3/9] Backing up configuration... ✓ Configuration backed up [4/9] Updating system dependencies... Reading package lists... Done Building dependency tree... Done Reading state information... Done libffi-dev is already the newest version (3.4.8-2). libusb-1.0-0 is already the newest version (2:1.0.28-1). sudo is already the newest version (1.9.16p2-3+deb13u2). jq is already the newest version (1.7.1-6+deb13u3). python3-pip is already the newest version (25.1.1+dfsg-1+rpt1). python3-venv is already the newest version (3.13.5-1). python3-rrdtool is already the newest version (1.7.2-4.2+b5). wget is already the newest version (1.25.0-2). swig is already the newest version (4.3.0-1). build-essential is already the newest version (12.12). python3-dev is already the newest version (3.13.5-1). i2c-tools is already the newest version (4.4-2). 0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded. Reading package lists... Done Building dependency tree... Done Reading state information... Done Package policykit-1 is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source However the following packages replace it: polkitd:armhf pkexec:armhf polkitd pkexec Reading package lists... Done Building dependency tree... Done Reading state information... Done polkitd is already the newest version (126-2). pkexec is already the newest version (126-2). 0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded. ✓ No broken package metadata found Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: pip in ./venv/lib/python3.13/site-packages (26.2.1) Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (84.0.0) Requirement already satisfied: wheel in ./venv/lib/python3.13/site-packages (0.48.0) Requirement already satisfied: packaging>=24.0 in ./venv/lib/python3.13/site-packages (from wheel) (26.3) ✓ Dependencies updated [5/9] Installing files... ✓ openhop-plugin-manager.service installed ✓ Files updated [6/9] Validating and updating configuration... Merging configuration... ✓ Backup created: /etc/openhop_repeater/config.yaml.backup.20260908_175307 ✓ Configuration merged successfully ✓ Legacy pymc_* paths normalized ✓ User settings preserved, new options added ✓ Configuration validated and updated [6.5/9] Ensuring user groups and udev rules... ✓ User groups updated [7/9] Fixing permissions and helper files... Polkit 0.106 or greater detected, using rules file >>> Configuring polkit for service management... ✓ Permissions updated [8/9] Installing Python Dependencies... Note: Using optimized binary wheels for faster installation >>> Checking for legacy system-pip installation... ✓ No broken package metadata found Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Requirement already satisfied: pip in ./venv/lib/python3.13/site-packages (26.2.1) Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (84.0.0) Requirement already satisfied: wheel in ./venv/lib/python3.13/site-packages (0.48.0) Requirement already satisfied: packaging>=24.0 in ./venv/lib/python3.13/site-packages (from wheel) (26.3) ✓ Cleaned up system-level packages (if any) ✓ No stale source-tree paths found Upgrading openhop_repeater into venv (/opt/openhop_repeater/venv)... Checking for R2 wheels (arm64/aarch64/cp313-cp313)... Trying install from R2 pre-built wheels... Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Looking in links: https://wheel.pymc.dev/pymc_build_deps/arm64/aarch64/cp313-cp313/index.html Requirement already satisfied: pycryptodome>=3.23.0 in ./venv/lib/python3.13/site-packages (3.23.0) Requirement already satisfied: PyNaCl>=1.5.0 in ./venv/lib/python3.13/site-packages (1.6.2) Requirement already satisfied: cffi in ./venv/lib/python3.13/site-packages (2.1.1) Requirement already satisfied: pyyaml>=6.0.0 in ./venv/lib/python3.13/site-packages (6.0.3) Requirement already satisfied: pycparser in ./venv/lib/python3.13/site-packages (from cffi) (3.0) ✓ R2 wheels installed Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Processing ./. Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Collecting openhop_core==1.1.3 (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) Downloading openhop_core-1.1.3-py3-none-any.whl.metadata (8.6 kB) Requirement already satisfied: pyyaml>=6.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (6.0.3) Requirement already satisfied: cherrypy>=18.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (18.10.0) Requirement already satisfied: paho-mqtt>=1.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (2.1.0) Requirement already satisfied: cherrypy-cors==1.7.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (1.7.0) Requirement already satisfied: psutil>=5.9.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (7.2.2) Requirement already satisfied: pyserial>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (3.5) Requirement already satisfied: pyjwt>=2.8.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (2.13.0) Requirement already satisfied: ws4py>=0.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater==1.1.5.dev0) (0.6.0) Requirement already satisfied: httpagentparser>=1.5 in ./venv/lib/python3.13/site-packages (from cherrypy-cors==1.7.0->openhop_repeater==1.1.5.dev0) (1.9.9) Requirement already satisfied: pycryptodome>=3.23.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (3.23.0) Requirement already satisfied: PyNaCl>=1.5.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (1.6.2) Requirement already satisfied: python-periphery>=2.4.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (2.4.1) Requirement already satisfied: spidev>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (3.8) Requirement already satisfied: pyusb>=1.2.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (1.3.1) Requirement already satisfied: cheroot>=8.2.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (11.1.2) Requirement already satisfied: portend>=2.1.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (3.2.1) Requirement already satisfied: more-itertools in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (11.1.0) Requirement already satisfied: zc.lockfile in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.0) Requirement already satisfied: jaraco.collections in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (5.2.1) Requirement already satisfied: jaraco.functools in ./venv/lib/python3.13/site-packages (from cheroot>=8.2.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.6.0) Requirement already satisfied: tempora>=1.8 in ./venv/lib/python3.13/site-packages (from portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (5.12.0) Requirement already satisfied: cffi>=2.0.0 in ./venv/lib/python3.13/site-packages (from PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (2.1.1) Requirement already satisfied: pycparser in ./venv/lib/python3.13/site-packages (from cffi>=2.0.0->PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater==1.1.5.dev0) (3.0) Requirement already satisfied: python-dateutil in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (2.9.0.post0) Requirement already satisfied: jaraco.context in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (6.1.2) Requirement already satisfied: typing_extensions in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.16.0) Requirement already satisfied: jaraco.text in ./venv/lib/python3.13/site-packages (from jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.3.0) Requirement already satisfied: typer-slim in ./venv/lib/python3.13/site-packages (from jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.24.0) Requirement already satisfied: six>=1.5 in ./venv/lib/python3.13/site-packages (from python-dateutil->tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (1.17.0) Requirement already satisfied: typer>=0.24.0 in ./venv/lib/python3.13/site-packages (from typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.27.2) Requirement already satisfied: shellingham>=1.3.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (1.5.4) Requirement already satisfied: rich>=13.8.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (15.0.0) Requirement already satisfied: annotated-doc>=0.0.2 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.0.5) Requirement already satisfied: markdown-it-py>=2.2.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (4.2.0) Requirement already satisfied: pygments<3.0.0,>=2.13.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (2.21.0) Requirement already satisfied: mdurl~=0.1 in ./venv/lib/python3.13/site-packages (from markdown-it-py>=2.2.0->rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (0.1.2) Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (from zc.lockfile->cherrypy>=18.0.0->openhop_repeater==1.1.5.dev0) (84.0.0) Downloading openhop_core-1.1.3-py3-none-any.whl (420 kB) Building wheels for collected packages: openhop_repeater Building wheel for openhop_repeater (pyproject.toml) ... done Created wheel for openhop_repeater: filename=openhop_repeater-1.1.5.dev0-py3-none-any.whl size=11588 sha256=ca59a9eeb6e40f3de6f943d579007ce88a0a4c94df4ea621db6d10a83c46b3f1 Stored in directory: /tmp/pip-ephem-wheel-cache-m3ljd3p5/wheels/39/81/70/01475a4ec19576e9a701ea85383d3ea862543920ab0c735ec8 Successfully built openhop_repeater Installing collected packages: openhop_core, openhop_repeater Attempting uninstall: openhop_core Found existing installation: openhop_core 1.1.3.dev24 Uninstalling openhop_core-1.1.3.dev24: Successfully uninstalled openhop_core-1.1.3.dev24 Attempting uninstall: openhop_repeater Found existing installation: openhop_repeater 1.1.2.dev260 Uninstalling openhop_repeater-1.1.2.dev260: Successfully uninstalled openhop_repeater-1.1.2.dev260 Successfully installed openhop_core-1.1.3 openhop_repeater-1.1.5.dev0 ✓ Package and dependencies upgraded successfully! [9/9] Reloading systemd and restarting service... ✓ Service restarted and active ✓ openhop-plugin-manager enabled ✓ openhop-plugin-manager restarted === Upgrade Complete === [mario@pigrunt:/opt/openhop_repeater] 1m22s 1 ± sudo service openhop-repeater status ● openhop-repeater.service - openHop Repeater Daemon Loaded: loaded (/etc/systemd/system/openhop-repeater.service; enabled; preset: enabled) Active: activating (auto-restart) (Result: exit-code) since Tue 2026-09-08 17:54:15 PDT; 1s ago Invocation: b0166a7d7bcc4489b2aeab3733123477 Process: 4999 ExecStart=/opt/openhop_repeater/venv/bin/python -m repeater.main --config /etc/openhop_repeater/config> Main PID: 4999 (code=exited, status=1/FAILURE) CPU: 104ms ``` </details> And this was the output from the fix: <details> <summary>Click to expand console log</summary> ``` $ cd /opt/openhop_repeater $ ./venv/bin/activate $ VENV_PYTHON=/opt/openhop_repeater/venv/bin/python $ sudo "$VENV_PYTHON" -m pip install --upgrade --no-cache-dir "openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main" Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main (from openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) Cloning https://github.com/openhop-dev/openhop_repeater.git (to revision main) to /tmp/pip-install-tpem6fs9/openhop-repeater_66cc707f12b74361ab6a152fef7c2256 Running command git clone --filter=blob:none --quiet https://github.com/openhop-dev/openhop_repeater.git /tmp/pip-install-tpem6fs9/openhop-repeater_66cc707f12b74361ab6a152fef7c2256 Resolved https://github.com/openhop-dev/openhop_repeater.git to commit 13eb8b2ea8b1cdb4a07ed6e282dc99e3aa8a5a8b Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Requirement already satisfied: openhop_core==1.1.3 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.1.3) Requirement already satisfied: pyyaml>=6.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (6.0.3) Requirement already satisfied: cherrypy>=18.0.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (18.10.0) Requirement already satisfied: paho-mqtt>=1.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.1.0) Requirement already satisfied: cherrypy-cors==1.7.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.7.0) Requirement already satisfied: psutil>=5.9.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (7.2.2) Requirement already satisfied: pyserial>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.5) Requirement already satisfied: pyjwt>=2.8.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.13.0) Requirement already satisfied: ws4py>=0.6.0 in ./venv/lib/python3.13/site-packages (from openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.6.0) Requirement already satisfied: httpagentparser>=1.5 in ./venv/lib/python3.13/site-packages (from cherrypy-cors==1.7.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.9.9) Requirement already satisfied: pycryptodome>=3.23.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.23.0) Requirement already satisfied: PyNaCl>=1.5.0 in ./venv/lib/python3.13/site-packages (from openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.6.2) Requirement already satisfied: python-periphery>=2.4.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.4.1) Requirement already satisfied: spidev>=3.5 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.8) Requirement already satisfied: pyusb>=1.2.1 in ./venv/lib/python3.13/site-packages (from openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.3.1) Requirement already satisfied: cheroot>=8.2.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (11.1.2) Requirement already satisfied: portend>=2.1.1 in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.2.1) Requirement already satisfied: more-itertools in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (11.1.0) Requirement already satisfied: zc.lockfile in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.0) Requirement already satisfied: jaraco.collections in ./venv/lib/python3.13/site-packages (from cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (5.2.1) Requirement already satisfied: jaraco.functools in ./venv/lib/python3.13/site-packages (from cheroot>=8.2.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.6.0) Requirement already satisfied: tempora>=1.8 in ./venv/lib/python3.13/site-packages (from portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (5.12.0) Requirement already satisfied: cffi>=2.0.0 in ./venv/lib/python3.13/site-packages (from PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.1.1) Requirement already satisfied: pycparser in ./venv/lib/python3.13/site-packages (from cffi>=2.0.0->PyNaCl>=1.5.0->openhop_core==1.1.3->openhop_core[hardware]==1.1.3; sys_platform == "linux"->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (3.0) Requirement already satisfied: python-dateutil in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.9.0.post0) Requirement already satisfied: jaraco.context in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (6.1.2) Requirement already satisfied: typing_extensions in ./venv/lib/python3.13/site-packages (from tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.16.0) Requirement already satisfied: jaraco.text in ./venv/lib/python3.13/site-packages (from jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.3.0) Requirement already satisfied: typer-slim in ./venv/lib/python3.13/site-packages (from jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.24.0) Requirement already satisfied: six>=1.5 in ./venv/lib/python3.13/site-packages (from python-dateutil->tempora>=1.8->portend>=2.1.1->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.17.0) Requirement already satisfied: typer>=0.24.0 in ./venv/lib/python3.13/site-packages (from typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.27.2) Requirement already satisfied: shellingham>=1.3.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (1.5.4) Requirement already satisfied: rich>=13.8.0 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (15.0.0) Requirement already satisfied: annotated-doc>=0.0.2 in ./venv/lib/python3.13/site-packages (from typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.0.5) Requirement already satisfied: markdown-it-py>=2.2.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (4.2.0) Requirement already satisfied: pygments<3.0.0,>=2.13.0 in ./venv/lib/python3.13/site-packages (from rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (2.21.0) Requirement already satisfied: mdurl~=0.1 in ./venv/lib/python3.13/site-packages (from markdown-it-py>=2.2.0->rich>=13.8.0->typer>=0.24.0->typer-slim->jaraco.text->jaraco.collections->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (0.1.2) Requirement already satisfied: setuptools in ./venv/lib/python3.13/site-packages (from zc.lockfile->cherrypy>=18.0.0->openhop_repeater @ git+https://github.com/openhop-dev/openhop_repeater.git@main->openhop_repeater[hardware] @ git+https://github.com/openhop-dev/openhop_repeater.git@main) (84.0.0) Building wheels for collected packages: openhop_repeater Building wheel for openhop_repeater (pyproject.toml) ... done Created wheel for openhop_repeater: filename=openhop_repeater-1.1.4-py3-none-any.whl size=3718378 sha256=e587e33d3ae07c197379b9c0a6be43628a92584a6a0c020f8d4301a49badda18 Stored in directory: /tmp/pip-ephem-wheel-cache-evx8eqn9/wheels/76/cd/77/fecc3eaf46fad06405142b76038be543330e2331ad813dc182 Successfully built openhop_repeater Installing collected packages: openhop_repeater Attempting uninstall: openhop_repeater Found existing installation: openhop_repeater 1.1.5.dev0 Uninstalling openhop_repeater-1.1.5.dev0: Successfully uninstalled openhop_repeater-1.1.5.dev0 Successfully installed openhop_repeater-1.1.4 $ $ sudo service openhop-repeater status ● openhop-repeater.service - openHop Repeater Daemon Loaded: loaded (/etc/systemd/system/openhop-repeater.service; enabled; preset: enabled) Active: active (running) since Tue 2026-09-08 17:57:45 PDT; 5s ago Invocation: 783ad69e152243fda08bacb827e4405f Main PID: 5618 (python) Tasks: 20 (limit: 1626) CPU: 1.663s CGroup: /system.slice/openhop-repeater.service └─5618 /opt/openhop_repeater/venv/bin/python -m repeater.main --config /etc/openhop_repeater/config.yaml Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,663 - HTTPServer - INFO - WebSocket endpoint configu> Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,663 - HTTPServer - INFO - HTTP worker config: thread> Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,772 - HTTPServer - INFO - HTTP stats server started > Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,773 - TCPLoRaRadio - INFO - RX callback registered Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,774 - Dispatcher - INFO - Registered RX callback wit> Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,775 - TCPLoRaRadio - INFO - Async config push result> Sep 08 17:57:47 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:47,798 - TCPLoRaRadio - INFO - Async config push result> Sep 08 17:57:48 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:48,150 - MQTTHandler - INFO - Publishing initial status> Sep 08 17:57:48 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:48,154 - MQTTHandler - INFO - Started status heartbeat > Sep 08 17:57:48 pigrunt openhop-repeater[5618]: 2026-09-08 17:57:48,970 - RoomServer - INFO - Room 'heepy-room' sync loo> ``` </details> <!-- github-comment-id:5594244078 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/pyMC_Repeater#128