-
Notifications
You must be signed in to change notification settings - Fork 0
Installation
- Raspberry Pi (3B+ or newer recommended)
- Raspberry Pi OS 64-bit (Bookworm)
- Elgato Stream Deck MK.2
sudo cp deckd /usr/local/bin/
sudo mkdir -p /etc/deckd
sudo cp config.example.toml /etc/deckd/config.toml
# udev rules for non-root USB access
sudo cp udev/40-streamdeck.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
# Service user and systemd
sudo useradd -r -s /usr/sbin/nologin -G plugdev deckd
sudo cp systemd/deckd.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now deckdcurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
sudo apt install -y pkg-config libudev-dev libhidapi-dev
git clone https://github.com/cvrt-jh/deckd.git
cd deckd
cargo build --releasePrefer building natively in a container that matches the target distro. The glibc matches by construction, and on an arm64 host it runs at native speed:
deploy/build-pi.sh # artifact at target/pi/deckdTwo traps make a cross-compiled binary look fine until the service fails to start:
-
crossonly works from an x86_64 host. Its images are published for linux/amd64 only, so on an Apple Silicon Mac every tag fails withno matching manifest for linux/arm64/v8. -
glibc must not be newer than the target's. glibc is backward compatible, not forward. A binary built against 2.39 will not start on Debian Bookworm (2.36):
/lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found
Check any binary before deploying it:
objdump -T deckd | grep -oE 'GLIBC_2\.[0-9]+' | sort -uV | tail -1Do not rely on the build's exit code alone. Confirm the artifact exists and is
the right architecture: an exported CARGO_TARGET_DIR silently redirects output
while the log still reports Finished release profile and the shell exits 0.
Cross-compiling from an x86_64 host still works if the image's glibc is old
enough for the target. Cross.toml in the repo carries the required
libudev-dev:arm64 pre-build step.
deckd --config /etc/deckd/config.toml --check
sudo systemctl status deckd
journalctl -u deckd -f