Installation on Raspberry Pi 1 armv6l dietpi/debian #265

Open
opened 2026-10-27 12:29:42 +01:00 by adam · 1 comment
Owner

📝 Problem Description

Compiling and running remoteterm on a raspberry pi 1 is possible but the installation is hacky and not documented.

🚦 Current Behavior

After adding some necessary dependencies (needs documentation too), tweaking the packages.json as instructed by https://github.com/jkingsman/Remote-Terminal-for-MeshCore/issues/364, installing via uv fails on the compilation of cffi (see https://github.com/python-cffi/cffi/issues/285 )

🎯 Expected Behavior

Instructions in the README should enable one to install on a raspberry pi 1 armv6l like all the other linux on more recent architectures.

📋 Steps to Reproduce

  1. Install following the instructions https://github.com/jkingsman/Remote-Terminal-for-MeshCore#install-path-1-clone-and-build
  2. uv run fails on the compilation as described in the python-cffi issue

📡 Radio Node

  • Firmware version: n/a
  • Hardware / board type: n/a

🔌 Connection to the Radio

  • Connected directly to the radio, or through an intermediary?
    Direct
  • Transport: Serial

💻 Environment Information

📸 Screenshots / Debug Logs

uv run uvicorn app.main:app --host 0.0.0.0 --port 8000
[snip]
         src/c/_cffi_backend.c:5307:15: note: ?interned_fields? was declared here                                                                                                              
          5307 |     PyObject *interned_fields;                                                                                                                                                
               |               ^~~~~~~~~~~~~~~                                                                                                                                                 
         arm-linux-gnueabihf-gcc: fatal error: cannot execute ?as?: posix_spawnp: No such file or directory                                                                                    
         compilation terminated.                                                                                                                                                               
         error: Command '['arm-linux-gnueabihf-gcc', '-fno-strict-overflow', '-Wsign-compare', '-DNDEBUG', '-g', '-O2', '-Wall', '-fPIC', '-DFFI_BUILDING=1',                                  
         '-I/usr/include/ffi', '-I/usr/include/libffi', '-I/home/dietpi/.cache/uv/builds-v0/.tmplVK2LB/include', '-I/usr/include/python3.13', '-c', 'src/c/_cffi_backend.c', '-o',             
         'build/temp.linux-armv6l-cpython-313/src/c/_cffi_backend.o']' returned non-zero exit status 1.    

Additional context

Running Meshcore and its tools on low ressources and "old" (big quotes) hardware is super cool !

## 📝 Problem Description Compiling and running remoteterm on a raspberry pi 1 is possible but the installation is hacky and not documented. ## 🚦 Current Behavior After adding some necessary dependencies (needs documentation too), tweaking the packages.json as instructed by https://github.com/jkingsman/Remote-Terminal-for-MeshCore/issues/364, installing via uv fails on the compilation of cffi (see https://github.com/python-cffi/cffi/issues/285 ) ## 🎯 Expected Behavior Instructions in the README should enable one to install on a raspberry pi 1 armv6l like all the other linux on more recent architectures. ## 📋 Steps to Reproduce 1. Install following the instructions https://github.com/jkingsman/Remote-Terminal-for-MeshCore#install-path-1-clone-and-build 2. uv run fails on the compilation as described in the python-cffi issue ## 📡 Radio Node - **Firmware version:** n/a - **Hardware / board type:** n/a - ## 🔌 Connection to the Radio - **Connected directly to the radio, or through an intermediary?** Direct - **Transport:** Serial ## 💻 Environment Information - **OS:** Raspberry Dietpi Debian Trixie Armv6 https://dietpi.com/downloads/images/DietPi_RPi1-ARMv6-Trixie.img.xz - **Browser / Version:** n/a - **RemoteTerm Version:** 3.17.1 ## 📸 Screenshots / Debug Logs ``` uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 [snip] src/c/_cffi_backend.c:5307:15: note: ?interned_fields? was declared here 5307 | PyObject *interned_fields; | ^~~~~~~~~~~~~~~ arm-linux-gnueabihf-gcc: fatal error: cannot execute ?as?: posix_spawnp: No such file or directory compilation terminated. error: Command '['arm-linux-gnueabihf-gcc', '-fno-strict-overflow', '-Wsign-compare', '-DNDEBUG', '-g', '-O2', '-Wall', '-fPIC', '-DFFI_BUILDING=1', '-I/usr/include/ffi', '-I/usr/include/libffi', '-I/home/dietpi/.cache/uv/builds-v0/.tmplVK2LB/include', '-I/usr/include/python3.13', '-c', 'src/c/_cffi_backend.c', '-o', 'build/temp.linux-armv6l-cpython-313/src/c/_cffi_backend.o']' returned non-zero exit status 1. ``` --- **Additional context** Running Meshcore and its tools on low ressources and "old" (big quotes) hardware is super cool ! <!-- github-sync-id:5844794757 -->
Author
Owner

Workarounds used to get it running :

  1. Install dependencies :
apt install python3 python3-cffi python3-dev python3-nacl python3.13-venv python3-setuptools python3-wheel 

Install nodejs compiled for armv6 https://unofficial-builds.nodejs.org/

  1. fail to compile the frontend (I have to reproduce so I can copy the error)
  2. Plan B for the frontend :

Use an existing installation of remotterm, tar cvfz remoteterm-frontend.tgz /home/user/remotterm/frontend/dist , scp the remoteterm-frontend.tgz to the pi, untar it tar xvfz remotterm-frontend.tgz, make sure to copy the files in frontend/dist

  1. Create a python venv which uses the system dependencies (to use the compiled cffi) :
python3.13 -m venv .venv_integrated --system-site-packages 
.venv_integrated/bin/activate 
  1. convert the uv.lock into requirements.txt to use pip install :
uv export --format requirements.txt > requirements.txt
  1. remove fingerprints to simplify (maybe optionnal) :
grep '==' requirements.txt > requirements_no_hash.txt
vim requirements_no_hash.txt # remove the \ at the end  of each line (should be scriptable)
  1. extract the top needed dependencies to install them (and not install cffi), this step can be greatly improved :
cat requirements_no_hash.txt | grep -E '(aiosqlite|meshcore|pywebpush|uvicorn|httpx|mqtt|websocket|boto) > minimal_requirements.txt
  1. install extra python dependencies (and mix them with system packages) :
pip install -r minimal_requirements.txt
  1. run 🤞 🎉 :
MESHCORE_SERIAL_PORT=/dev/ttyUSB0 uvicorn app.main:app --host 0.0.0.0 --port 8000

Way too hackish, but it sort of works...

Workarounds used to get it running : 1. Install dependencies : ``` apt install python3 python3-cffi python3-dev python3-nacl python3.13-venv python3-setuptools python3-wheel ``` Install nodejs compiled for armv6 https://unofficial-builds.nodejs.org/ 2. fail to compile the frontend (I have to reproduce so I can copy the error) 3. Plan B for the frontend : Use an existing installation of remotterm, `tar cvfz remoteterm-frontend.tgz /home/user/remotterm/frontend/dist` , scp the remoteterm-frontend.tgz to the pi, untar it `tar xvfz remotterm-frontend.tgz`, make sure to copy the files in `frontend/dist` 4. Create a python venv which uses the system dependencies (to use the compiled cffi) : ``` python3.13 -m venv .venv_integrated --system-site-packages .venv_integrated/bin/activate ``` 5. convert the uv.lock into requirements.txt to use pip install : ``` uv export --format requirements.txt > requirements.txt ``` 6. remove fingerprints to simplify (maybe optionnal) : ``` grep '==' requirements.txt > requirements_no_hash.txt vim requirements_no_hash.txt # remove the \ at the end of each line (should be scriptable) ``` 7. extract the top needed dependencies to install them (and not install cffi), this step can be greatly improved : ``` cat requirements_no_hash.txt | grep -E '(aiosqlite|meshcore|pywebpush|uvicorn|httpx|mqtt|websocket|boto) > minimal_requirements.txt ``` 8. install extra python dependencies (and mix them with system packages) : ``` pip install -r minimal_requirements.txt ``` 9. run 🤞 🎉 : ``` MESHCORE_SERIAL_PORT=/dev/ttyUSB0 uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` Way too hackish, but it sort of works... <!-- github-comment-id:6164846292 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/Remote-Terminal-for-MeshCore#265