Root cause of silent HDMI on kiosk TVs (framework-pt, LG TV): 1) fresh ISOs installed NO audio stack even though the kiosk launcher expects PipeWire-Pulse — add pipewire/pipewire-pulse/pipewire-alsa/ wireplumber/alsa-utils to the rootfs and put the archipelago user in 'audio' (linger user manager gets no logind seat ACLs on /dev/snd); 2) the kiosk's boot-time Xorg modeset races the i915→HDA audio-component bind, the ELD notify is lost, and every HDMI profile stays 'available: no' forever. Verified live: one off/on modeset re-delivers the ELD and WirePlumber immediately switches to HDMI. New archipelago-audio-router daemon (same splice-from-configs pattern as the kiosk, ISO + include_str! self-heal): routes the card to the best available HDMI profile, keeps the default sink on it, migrates live streams on hot-plug, unmutes (HDMI forced 100% — the TV owns volume), and re-modesets a connected external output once when no ELD reports a monitor. bootstrap::ensure_audio_stack() installs packages + router on already-deployed kiosk nodes via OTA (apt through systemd-run — the service sandbox keeps /usr and dpkg read-only). main.rs also spawns the pine satellite keeper. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Archipelago OS Image Recipes
Build scripts for creating bootable Debian Linux OS images for Archipelago Bitcoin Node OS.
Quick Start
Build the ISO
# 1. Sync latest configs from live dev server
./sync-from-live.sh
# 2. Build components
./scripts/build-backend.sh
./scripts/build-frontend.sh
# 3. Build the ISO
./build-debian-iso.sh
This creates a bootable Debian Live ISO with Archipelago pre-installed.
Write to USB
# Using dd (recommended)
./write-usb-dd.sh /dev/diskN
# Or use Balena Etcher to flash the ISO
See the ISO-BUILD-CHECKLIST.md for a comprehensive build workflow.
See the Architecture documentation for detailed system information.
What's Included
- Debian Linux Base: Debian 13 (Trixie) with security updates applied during ISO/install creation
- Podman: Container runtime for apps (rootless by default)
- Archipelago Backend: Rust-based API server
- Archipelago Frontend: Vue.js web interface
- Systemd Services: Automatic service management
- Network Configuration: NetworkManager for easy setup
Build Output
results/archipelago-installer-x86_64.iso- Bootable hybrid ISO image
Supported Platforms
- x86_64: Dell OptiPlex, HP ProDesk 400 G4 DM, Start9 Server Pure, and other x86_64 machines
- Build Systems: macOS (requires Docker) and Linux (native or Docker)
Installation Methods
1. Live USB Boot
Boot from USB, run in live mode to test, or install to disk.
2. Full Disk Installation
From the live environment, run:
sudo /archipelago/install-to-disk.sh
This installs Archipelago to a target disk using debootstrap.
Directory Structure
image-recipe/
├── build-debian-iso.sh # Main ISO builder
├── write-usb-dd.sh # Write ISO to USB with dd
├── create-fat32-usb.sh # Alternative USB creation
├── archipelago-scripts/ # Scripts included in ISO
│ ├── install-to-disk.sh # Disk installer
│ └── setup-bitcoin.sh # Bitcoin Core setup
├── scripts/ # Build helper scripts
│ ├── build-backend.sh # Compile Rust backend
│ ├── build-frontend.sh # Build Vue.js frontend
│ └── check-dependencies.sh # Verify build requirements
└── results/ # Built ISO output
Requirements
- Docker (for macOS builds)
- xorriso (for ISO creation):
brew install xorriso - 7zip (for ISO extraction):
brew install p7zip