feat: add headless-setup-script and OpenSpec artifacts

Implement a 'one-liner' installation script for the MPVJ (Modern PocketVJ)
ecosystem on Raspbian x64 Lite.

- Interactive whiptail UI for Hostname, SSID, and WiFi Password configuration.
- Automated system hardening: hostapd, dnsmasq, avahi-daemon, and Node.js.
- Memory safety for Pi 3B: temporary 1GB swap and NPM concurrency limits.
- Networking failsafe: static AP on wlan0 and DHCP on eth0 with mDNS support.
- OpenSpec artifacts (Proposal, Design, Spec, Tasks) included.
This commit is contained in:
Timothy Hofland
2026-03-10 22:23:58 +01:00
parent 7ad88804f3
commit 7928a2be9b
6 changed files with 380 additions and 0 deletions

View File

@ -0,0 +1,53 @@
# Headless Installer Spec
## Interrogation Phase
### Hostname Selection
- **GIVEN** the script is running
- **WHEN** prompted for a hostname
- **THEN** the system SHALL validate that the name contains only alphanumeric characters and hyphens
- **AND** it SHALL default to `mpvj` if left blank
### WiFi Configuration
- **GIVEN** the interrogation phase
- **WHEN** the user enters a WiFi password
- **THEN** the script SHALL verify it is at least 8 characters long (WPA2 requirement)
- **AND** it SHALL loop back to the prompt if validation fails
- **AND** the script SHALL prompt for a 2-letter ISO Country Code (e.g., US, GB) to unblock the WiFi hardware.
## Installation Phase
### Pre-Flight Checks
- **GIVEN** the start of the installation
- **WHEN** checking system resources
- **THEN** the script SHALL verify that at least 2GB of disk space is available
- **AND** it SHALL abort with a clear error message if space is insufficient.
### System Updates
- **GIVEN** the start of the script
- **WHEN** updating packages
- **THEN** it SHALL use a progress bar (`whiptail --gauge`) to show status
- **AND** it SHALL run in non-interactive mode (`-y`)
### Repository Cloning
- **GIVEN** a valid <REPO_URL> argument
- **WHEN** cloning the repository
- **THEN** it SHALL clone into `/home/pi/mpvj`
- **AND** it SHALL ensure the `pi` user owns the directory
## Summary & Finalization
### Information Display
- **GIVEN** the end of the installation
- **WHEN** all configurations are staged
- **THEN** the script SHALL display a "Don't Miss It" summary box containing:
- Hostname (`.local` address)
- Static IP (`192.168.4.1`)
- WiFi SSID
- WiFi Password
- **AND** it SHALL require the user to press "OK" to proceed to the reboot prompt
### Reboot Confirmation
- **GIVEN** the summary has been acknowledged
- **WHEN** the reboot prompt appears
- **THEN** the system SHALL ONLY reboot if the user selects "Yes"