Files
LEDMatrix/scripts/install
ChuckBuildsandClaude Opus 5 94f70eab31 fix(install): render the systemd units from their templates, not from heredocs
The installers carried their own inline copies of units that also exist as
templates under systemd/, and the copies drifted.

install_service.sh renders ledmatrix.service from the template correctly, then
wrote ledmatrix-web.service from a heredoc that predated it -- missing
Wants=network-online.target, RestartSec=10, SyslogIdentifier, CacheDirectory,
CacheDirectoryMode and Environment=USE_THREADING=1. install_web_service.sh had
a third copy, and install_wifi_monitor.sh a fourth, that one already differing
from its template (syslog where the template says journal).

startup_validator.py compares the installed unit against the template, so a
rig installed this way warned on every boot -- and the remedy the warning
names, "re-run scripts/install/install_service.sh", reinstalled the same stale
copy. The warning could never clear. Reproduced on a live rig running exactly
that unit.

All three installers now render systemd/*.service through the same placeholder
substitution. The template gains a __USER__ placeholder rather than hardcoding
User=root, because the web interface runs as whoever installed it.

That last point was a second, independent cause of a permanent warning: the
validator substituted a fixed "root", so any non-root install reported drift
forever. It now reads User= from the installed unit -- an install-time
decision, not something the template dictates -- and compares everything else
strictly. first_time_install.sh already reads the installed User= the same way.

Tests cover a non-root web unit not warning, a genuinely changed directive in
that unit still warning, the User= fallback, and a grep-based guard that no
installer under scripts/install/ contains an inline unit body. That guard is
what found the install_wifi_monitor.sh copy.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014RRtqXDCnvnY6EQwhT5CV9
2026-09-09 18:17:35 -04:00
..
2025-12-27 14:15:49 -05:00
2025-12-27 14:15:49 -05:00

Installation Scripts

This directory contains scripts for installing and configuring the LEDMatrix system.

Scripts

  • one-shot-install.sh - Single-command installer; clones the repo, checks prerequisites, then runs first_time_install.sh. Invoked via curl ... | bash from the project root README.
  • install_service.sh - Installs the main LED Matrix display service (systemd)
  • install_web_service.sh - Installs the web interface service (systemd)
  • install_wifi_monitor.sh - Installs the WiFi monitor daemon service
  • setup_cache.sh - Sets up persistent cache directory with proper permissions
  • configure_web_sudo.sh - Configures passwordless sudo access for web interface actions
  • configure_wifi_permissions.sh - Grants the ledmatrix user the WiFi management permissions needed by the web interface and the WiFi monitor service
  • migrate_config.sh - Migrates configuration files to new formats (if needed)
  • debug_install.sh - Diagnostic helper used when an install fails; collects environment info and recent logs

Usage

These scripts are typically called by first_time_install.sh in the project root (which itself is invoked by one-shot-install.sh), but can also be run individually if needed.

Note: Most installation scripts require sudo privileges to install systemd services and configure system settings.