mirror of
https://github.com/Screenly/Anthias.git
synced 2026-06-10 09:08:09 -04:00
* feat(install): generic-arm64 best-effort support (Armbian on Rock Pi, Orange Pi, …) Wires up a `generic-arm64` device_type so the installer recognises any aarch64 host that isn't a Raspberry Pi and runs the same Anthias stack on it. Closes #2849 (Tier 1). * `bin/install.sh::set_device_type` + `bin/upgrade_containers.sh` get an `aarch64` fallback branch, INTRO_MESSAGE / unsupported-message copy refreshed, raspberry-pi-tagged ansible tasks skipped on generic-arm64 (same as x86), vchiq strip extended. * ansible: validated set in `site.yml`, `docker_arch_by_device_type` gains `generic-arm64: arm64`. `docker-buildx-plugin` added to the apt-install list — required for MODE=build with `--platform=` Dockerfiles, harmless on pull-mode boards. Pre-existing host_agent service unit hardcoded `~/installer_venv/bin/python` (an ephemeral tmpdir post-#2843); split into a persistent `~/.anthias-venv` that ansible syncs before installing the unit. * image_builder: `generic-arm64` build target, Qt6 + cage + wayland like x86; `va-driver-all` deliberately *not* shipped — Rockchip / Allwinner / Amlogic mainline hwdec goes through V4L2 M2M / request API, not VAAPI, so mesa-va-drivers would be dead weight. * viewer: `start_viewer.sh` reuses the x86 cage path for generic-arm64; `media_player.py` routes generic-arm64 to MPV (the `device_helper.get_device_type()` fallback returns 'pi1' on non-Pi aarch64 hosts, so the proxy needs the DEVICE_TYPE env override that pi4-64 already uses). New test added. * host_agent: `SUPPORTED_INTERFACES` gains `end` prefix — Rockchip GMAC etc. surface as `end0` on systemd predictable naming, which was previously filtered out, leaving the splash page stuck on "Detecting network…". * CI: docker-build matrix + mirror-latest-tags publish `latest-generic-arm64` alongside the existing per-board tags. * Docs: README, marketing site supported-hardware table, and FAQ get a plain-language "Yes, on a best-effort basis" entry that spells out the software-decode trade-off, the SoCs known to work well (RK3399 / RK35xx / Allwinner H6 / Amlogic GXBB-GXL-GXM / S905X3), and the boards to avoid (Allwinner H616 / H618). Per-SoC hardware decode (`rkmpp`, `cedrus`, `meson-vdec`) is the planned Tier-2 follow-up. Validated end-to-end on a Rock Pi 4B (Armbian trixie, RK3399, 1GB RAM) via build-on-device: install completes, web UI reachable, all four asset types (image, H.264 1080p60, H.265 1080p60, webpage) cycle through the viewer cleanly, mpv pure-decode benchmark shows 0 dropped frames over the full 60s of each clip. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ansible-lint): pair become with become_user on .anthias-venv sync task ansible-lint's partial-become rule fires on `become_user:` without a matching `become:` at the same level, even when the play-level become already covers it. Explicit pairing keeps lint quiet without changing runtime behaviour. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix: address Copilot review feedback on generic-arm64 PR - ansible: drop `creates:` guard on the runtime venv sync — `uv sync` is idempotent (sub-second resolver check when nothing changed), so re-running unconditionally means dependency updates from a pyproject.toml / uv.lock change actually land on upgrade instead of silently skipping. Idempotency surfaced via `changed_when` keyed on uv's `+/-/~` package-action prefix so steady-state runs stay `ok`. - ansible: rework docker-buildx-plugin comment to justify the install on its own merits (any MODE=build run needs it because of `FROM --platform=$BUILDPLATFORM` in Dockerfiles) rather than tying it to generic-arm64 lacking published tags — that explanation becomes stale the moment this PR merges and CI publishes them. - viewer: `get_alsa_audio_device()` short-circuits on `DEVICE_TYPE=generic-arm64` before the Pi-firmware dispatch, since the Rock Pi / Orange Pi / Banana Pi class of board has none of the `vc4hdmi*` or `Headphones` ALSA cards. Defers to ALSA's `default` device; operators with a non-standard sink can override via `~/.asoundrc` (already bind-mounted into the viewer container). - tests: new assertions that generic-arm64 routes mpv through `--vo=gpu --gpu-context=wayland` and `--audio-device=alsa/default`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(website): disambiguate Debian release codenames in supported-hardware copy Copilot flagged the previous wording — "running Raspberry Pi OS, Debian, or Armbian (Trixie or Bookworm)" — as misleading: the parenthetical reads as if Raspberry Pi OS and Armbian are themselves "Trixie or Bookworm", but those are Debian codenames, and Armbian builds can also be Ubuntu-based. Split the sentence so the codenames are tied explicitly to Debian. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(ansible): derive is_raspberry_pi from device_type, not architecture Copilot caught that the `is_raspberry_pi` helper in docker.yml was defined as `ansible_architecture in ['aarch64', 'armv7l', 'armv6l']`, which is also true on generic-arm64 (Rock Pi / Orange Pi / …). That silently applied the Pi-only `gpio` group to non-Pi SBCs. device_type is the authoritative discriminator and is validated upstream in ansible/site.yml's pre_tasks, so use it directly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor: rename device_type generic-arm64 → arm64 (parallel to x86) Per review feedback: `generic-arm64` was the original working name for the new aarch64 non-Pi fallback. `arm64` is shorter and parallels `x86` — both are architecture-generic device_types that catch any host without a board-specific image, sitting alongside the per-board labels (pi2 / pi3 / pi4-64 / pi5). User-facing prose still says "generic 64-bit ARM" or "Armbian on Rock Pi / Orange Pi / …" for context. Mechanical s/generic-arm64/arm64/ across install scripts, ansible, image_builder, viewer / start_viewer, host_agent, tests, CI matrix, mirror-latest-tags, Dockerfile.viewer.j2, README. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * review polish on arm64 PR - viewer: get_alsa_audio_device's arm64 short-circuit now logs the registered ALSA cards (from /proc/asound/cards — aplay isn't in the viewer image) once per process when DEVICE_TYPE=arm64, so an operator reporting "no HDMI audio" carries enough breadcrumbs in journalctl alone to pick the right ~/.asoundrc override. - ansible: rewrite the docker-buildx-plugin size claim — 15 MB download / 67 MB extracted, from the deb metadata on arm64. - viewer: MediaPlayerProxy.get_instance comment block split into a two-bullet rationale, calling out the pi4-64 and arm64 cases separately so a future reader doesn't mistake the lead sentence for "pi4-64-only". - install.sh / upgrade_containers.sh: spell out that the aarch64 catch-all in set_device_type is intentional — a future Pi model whose model string drifts past the regexes lands here too, trading software decode + no Pi-boot tweaks for a louder fail. - README + FAQ: tighten the Plymouth caveat from "few seconds of black" to "kernel boot log scrolls until the viewer takes over", which is what actually happens on most U-Boot ARM SBCs. - ansible: rename the docker.yml var from `is_raspberry_pi` to `device_is_pi` now that it's derived from device_type rather than `ansible_architecture`, so the name matches what it does. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: narrow arm64 support to Debian-based Armbian (call out Ubuntu) Copilot flagged that "Armbian" in the new docs is ambiguous — Armbian builds come in both Debian-based (Bookworm/Trixie) and Ubuntu-based (Jammy/Noble) flavours. The installer's ansible role wires Docker's apt repo under download.docker.com/linux/debian/{{ ansible_distribution_release }}, which 404s on the Ubuntu codenames, so an Ubuntu-Armbian user following the current docs would hit a broken install at the very first `apt update`. Narrowing the wording in README, the marketing site's supported-hardware blurb, and the FAQ to "Debian-based Armbian" so users pick the right image. Extending the installer/playbook to handle Ubuntu-based Armbian is a separate follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
140 lines
9.2 KiB
HTML
140 lines
9.2 KiB
HTML
{{ define "main" }}
|
|
<header class="bg-brand-dark py-16 md:py-20 px-6 md:px-12 lg:px-20">
|
|
<div class="max-w-7xl mx-auto">
|
|
<h1 class="text-white text-4xl md:text-5xl font-extrabold tracking-tight">Get Started</h1>
|
|
<p class="text-white/60 text-lg mt-4 max-w-xl">Choose the installation method that works best for your hardware and setup.</p>
|
|
</div>
|
|
</header>
|
|
|
|
<section class="bg-white py-16 lg:py-24 px-6 md:px-12 lg:px-20">
|
|
<div class="max-w-3xl mx-auto">
|
|
<div class="border border-black/10 rounded-lg p-6 md:p-8">
|
|
<div class="flex items-start gap-4">
|
|
<div class="step-number bg-brand-yellow text-brand-dark">1</div>
|
|
<div>
|
|
<h2 class="text-xl font-bold">Install with one command</h2>
|
|
<p class="text-zinc-500 mt-2 leading-relaxed">On a fresh Raspberry Pi OS Lite or Debian installation, run:</p>
|
|
<div class="mt-4 bg-brand-dark rounded-lg p-5">
|
|
<code class="text-brand-yellow font-mono text-sm md:text-base break-all">bash <(curl -sL https://install-anthias.srly.io)</code>
|
|
</div>
|
|
<p class="text-zinc-400 text-sm mt-3">The installer will set up Docker, pull the container images, and start Anthias. This takes around 10–15 minutes depending on your hardware and network speed.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="border border-black/10 rounded-lg p-6 md:p-8 mt-6">
|
|
<div class="flex items-start gap-4">
|
|
<div class="step-number bg-brand-yellow text-brand-dark">2</div>
|
|
<div>
|
|
<h2 class="text-xl font-bold">Open the dashboard</h2>
|
|
<p class="text-zinc-500 mt-2 leading-relaxed">Once the installation completes, open a browser and navigate to your device's IP address. The Anthias web dashboard will be ready at port 80.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="border border-black/10 rounded-lg p-6 md:p-8 mt-6">
|
|
<div class="flex items-start gap-4">
|
|
<div class="step-number bg-brand-yellow text-brand-dark">3</div>
|
|
<div>
|
|
<h2 class="text-xl font-bold">Add your content</h2>
|
|
<p class="text-zinc-500 mt-2 leading-relaxed">Upload images and videos, or add URLs to web pages. Set a schedule for each asset, and Anthias takes care of the rest.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="bg-bg-light py-16 lg:py-24 px-6 md:px-12 lg:px-20">
|
|
<div class="max-w-3xl mx-auto">
|
|
<h2 class="text-2xl font-bold">Alternative installation methods</h2>
|
|
|
|
<div class="mt-8 space-y-6">
|
|
<div class="bg-white border border-black/10 rounded-lg p-6">
|
|
<h3 class="text-lg font-bold">Raspberry Pi Imager</h3>
|
|
<p class="text-zinc-500 mt-2 text-sm leading-relaxed">The quickest path for supported Raspberry Pi models. Open <a class="text-brand-purple no-underline hover:underline" href="https://www.raspberrypi.com/software/" target="_blank" rel="noopener">Raspberry Pi Imager</a> and find Anthias under <strong>Other specific-purpose OS</strong>. Flash the SD card and boot.</p>
|
|
<p class="text-zinc-400 text-xs mt-2">Pi 5 images are not yet available in the Imager. Use the command-line installer or disk images instead.</p>
|
|
</div>
|
|
|
|
<div class="bg-white border border-black/10 rounded-lg p-6">
|
|
<h3 class="text-lg font-bold">Pre-built disk images</h3>
|
|
<p class="text-zinc-500 mt-2 text-sm leading-relaxed">Download a disk image from the <a class="text-brand-purple no-underline hover:underline" href="https://github.com/Screenly/Anthias/releases/latest" target="_blank" rel="noopener">latest GitHub release</a> and flash it to an SD card with Raspberry Pi Imager or balenaEtcher. Images are compressed with Zstandard (.zst).</p>
|
|
</div>
|
|
|
|
<div class="bg-white border border-black/10 rounded-lg p-6">
|
|
<h3 class="text-lg font-bold">balenaHub</h3>
|
|
<p class="text-zinc-500 mt-2 text-sm leading-relaxed">For a fully managed device experience with automatic over-the-air updates. Find Anthias images on <a class="text-brand-purple no-underline hover:underline" href="https://hub.balena.io/fleets-for-good" target="_blank" rel="noopener">balenaHub Fleets for Good</a> for Pi 2 through Pi 5.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="bg-white py-16 lg:py-24 px-6 md:px-12 lg:px-20">
|
|
<div class="max-w-3xl mx-auto">
|
|
<h2 id="supported-hardware" class="text-2xl font-bold">Supported hardware</h2>
|
|
<p class="text-zinc-500 mt-2">Anthias runs on Raspberry Pi single-board computers, 64-bit x86 PCs, and 64-bit ARM single-board computers (Rock Pi, Orange Pi, Banana Pi and similar via Armbian). Supported on Raspberry Pi OS, Debian (Trixie or Bookworm), and the corresponding Armbian builds.</p>
|
|
|
|
<div class="mt-6 overflow-x-auto">
|
|
<table class="w-full text-sm">
|
|
<thead>
|
|
<tr class="border-b border-black/10">
|
|
<th class="text-left py-3 pr-4 font-semibold">Device</th>
|
|
<th class="text-left py-3 pr-4 font-semibold">Architecture</th>
|
|
<th class="text-left py-3 font-semibold">Status</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="text-zinc-600">
|
|
<tr class="border-b border-black/5">
|
|
<td class="py-3 pr-4">Raspberry Pi 5 Model B</td>
|
|
<td class="py-3 pr-4">64-bit</td>
|
|
<td class="py-3"><span class="text-green-700 font-medium">Recommended</span></td>
|
|
</tr>
|
|
<tr class="border-b border-black/5">
|
|
<td class="py-3 pr-4">Raspberry Pi 4 Model B</td>
|
|
<td class="py-3 pr-4">64-bit</td>
|
|
<td class="py-3"><span class="text-green-700 font-medium">Recommended</span></td>
|
|
</tr>
|
|
<tr class="border-b border-black/5">
|
|
<td class="py-3 pr-4">Raspberry Pi 3 Model B+</td>
|
|
<td class="py-3 pr-4">64-bit</td>
|
|
<td class="py-3"><span class="text-zinc-400">Maintenance</span></td>
|
|
</tr>
|
|
<tr class="border-b border-black/5">
|
|
<td class="py-3 pr-4">Raspberry Pi 3 Model B</td>
|
|
<td class="py-3 pr-4">64-bit</td>
|
|
<td class="py-3"><span class="text-zinc-400">Maintenance</span></td>
|
|
</tr>
|
|
<tr class="border-b border-black/5">
|
|
<td class="py-3 pr-4">Raspberry Pi 2 Model B</td>
|
|
<td class="py-3 pr-4">32-bit</td>
|
|
<td class="py-3"><span class="text-zinc-400">Maintenance</span></td>
|
|
</tr>
|
|
<tr class="border-b border-black/5">
|
|
<td class="py-3 pr-4">x86 PC (NUC or similar)</td>
|
|
<td class="py-3 pr-4">64-bit</td>
|
|
<td class="py-3"><span class="text-green-700 font-medium">Recommended</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="py-3 pr-4">Generic 64-bit ARM SBC (Rock Pi, Orange Pi, Banana Pi…)</td>
|
|
<td class="py-3 pr-4">64-bit</td>
|
|
<td class="py-3"><span class="text-amber-600 font-medium">Best-effort</span></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p class="text-zinc-500 text-sm mt-4 leading-relaxed">Generic 64-bit ARM SBCs run the same Anthias stack on <strong>Debian-based Armbian</strong> (Bookworm / Trixie) with software video decode. Ubuntu-based Armbian builds aren’t supported — the installer wires up the Debian Docker apt repository, so Ubuntu releases fail at “apt update”. Hardware video decode varies per SoC and isn’t wired up out of the box — expect software decode (smooth at 720p, stutter-prone at 1080p, CPU-heavy at 4K). Per-SoC hardware decode is a follow-up; see <a class="text-brand-purple no-underline hover:underline" href="https://github.com/Screenly/Anthias/issues/2849" target="_blank" rel="noopener">issue #2849</a>.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="bg-brand-dark py-16 lg:py-24 px-6 md:px-12 lg:px-20">
|
|
<div class="max-w-7xl mx-auto text-center">
|
|
<h2 class="text-white text-3xl lg:text-4xl font-extrabold tracking-tight">Need help?</h2>
|
|
<p class="text-white/50 mt-4 text-lg max-w-lg mx-auto">Check the documentation, ask on the forum, or file an issue on GitHub.</p>
|
|
<div class="flex flex-wrap justify-center gap-4 mt-8">
|
|
<a class="btn-secondary" href="/docs/">Documentation</a>
|
|
<a class="btn-secondary" href="https://forums.screenly.io" target="_blank" rel="noopener">Forum</a>
|
|
<a class="btn-secondary" href="https://github.com/Screenly/Anthias/issues" target="_blank" rel="noopener">Report an Issue</a>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
{{ end }}
|