Commit Graph

199 Commits

Author SHA1 Message Date
ebdc5c08c0 fix(rpi-usb): Remove python3-cryptography from debootstrap
python3-cryptography fails to configure under QEMU ARM64 emulation
during debootstrap due to Rust compilation requirements.

It's already installed via pip later in the build process, which
works reliably cross-architecture.

Fixes rpi400 image build failure.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-06 19:32:30 +02:00
46770abee7 fix(image): Add missing Python deps (python-multipart, email-validator)
Services were failing in restart loops due to missing dependencies:
- python-multipart: required for FastAPI file upload endpoints
- email-validator: required for Pydantic email field validation

Updated build scripts:
- build-image.sh: added both packages
- build-rpi-usb.sh: added email-validator (multipart was present)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-05 07:32:47 +02:00
76a2a1fe71 fix(image): Activate .dpkg-new nginx configs after package slipstream
dpkg leaves .dpkg-new suffix on conffiles when installing over existing
configs. This caused nginx API routing to fail as the module configs
(system.conf, etc.) were not loaded.

Added activation step to all build scripts that renames .dpkg-new files
to their proper .conf names after package installation.

Affected scripts:
- build-image.sh
- build-live-usb.sh
- build-rpi-usb.sh

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-04 13:10:06 +02:00
b1c77a871e fix(slipstream): Filter packages by architecture during image build
Build scripts copied ALL .deb packages without architecture filtering.
When building arm64 images, amd64-only packages (secubox-daemon,
secubox-c3box) were included and dpkg failed with "package architecture
does not match system".

Fixed in:
- build-image.sh: filter by $DEBIAN_ARCH variable
- build-ebin-live-usb.sh: filter for _all.deb and _arm64.deb
- build-live-usb.sh: filter for _all.deb and _amd64.deb

This fixes GitHub Actions workflow failures on arm64 boards.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-02 17:26:37 +02:00
8a0aa57f70 fix(net-detect): Separate VirtualBox VM handling from baremetal x64
VMs with multiple interfaces (NAT + host-only) now correctly configure
all interfaces with DHCP instead of creating a br-lan bridge that
conflicts with VBox's host-only DHCP server.

Changes:
- Add dedicated x64-vm case in get_interface_config()
- Set profile="vm" for VMs to trigger single mode (no bridge)
- In generate_netplan(), detect x64-vm board and configure ALL
  physical interfaces with DHCP instead of WAN-only
- VM profile forces mode="single" in main() to skip bridge creation

This fixes host-only network access for VirtualBox VMs while
preserving router/bridge functionality for baremetal deployments.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 17:33:31 +02:00
254b9df528 feat(live-usb): Improve kiosk launcher and network detection
- Fix vm_type variable sanitization in kiosk launcher
- Enhance network detection for AMD64 hardware
- Improve build-live-usb service configuration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 09:29:58 +02:00
106fd61af3 fix(network): Fix x64-live netplan for real AMD64 hardware
Problem: IP assignment failures on bare metal AMD64 due to broken
netplan wildcard syntax - using wan0: with match: name: "e*" but
no set-name: directive caused conflicts on multi-interface systems.

Solution:
- Split single e* pattern into separate en* and eth* matches
- Different route metrics (100/200) for deterministic routing
- Added br-lan bridge pre-definition for router mode
- Enhanced secubox-net-detect with better logging and patterns
- New secubox-net-reset utility for forcing re-detection

Changes:
- board/x64-live/netplan/00-secubox.yaml: Fixed bootstrap config
- image/build-live-usb.sh: Updated embedded netplan with same fix
- image/sbin/secubox-net-detect: Enhanced interface detection
- image/sbin/secubox-net-reset: New utility script
- CLAUDE.md: Added Debian shell scripting guidelines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-01 06:44:08 +02:00
c4b7ac0f7f feat(eye-remote): Add multi-mode display system v1.9.0
Eye Remote Interactive UI enhancements:
- TTY mode: Serial terminal display from /dev/ttyGS0
- Flash mode: Progress bar with speed/ETA for USB transfers
- Auth mode: QR code generation for backup authentication
- Mode detection via /etc/secubox/gadget-mode

Hub service VM compatibility fix:
- Changed from Unix socket to TCP port 8001
- Updated nginx configs for TCP proxy
- Fixes 502 errors in VirtualBox VMs

Also includes:
- FAQ/Troubleshooting wiki page with GitHub issue links
- Kiosk launcher --no-sandbox fix for VMs
- Profile Generator GUI mockup

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-29 10:24:02 +02:00
33304e7b6f feat(build): Add kiosk mode + VirtualBox setup + Profile Generator architecture
VM-x64 Build Improvements:
- Enable kiosk mode by default with GRUB menu entries
- Increase image size to 8GB (5.5GB root) for full package set
- Add proper EFI boot configuration with 3 boot modes
- Pre-generate SSL certificates during build
- Add TTY2 autologin for emergency console access

VirtualBox Support:
- Add scripts/vbox-setup.sh for automated VM setup
- Add wiki/VirtualBox-Setup.md with comprehensive guide
- Support bridged, NAT, and host-only network modes
- Auto-detect network adapter for bridged mode

Architecture Documentation:
- Add docs/architecture/profile-generator.md (v0.2)
- Define tier × board × flavors resolution model
- Document 3 CLI tools: secubox-gen, secubox-build, secubox-fetch
- Add Phase 12-14 roadmap alignment for Ulule Campaign 1

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-29 09:16:36 +02:00
a697925a3f fix(build): Upgrade Python deps + CORS + login endpoint fixes
- Add CORS headers to nginx secubox-proxy.conf for cross-origin API requests
- Fix login.html endpoints: /auth/login -> /login
- Upgrade Python deps in build scripts: pydantic>=2.0, fastapi>=0.100, uvicorn>=0.25
- Add pip upgrade in secubox-core postinst for Debian bookworm compatibility
- Fix display/__init__.py to import existing modules only

Fixes authentication and API issues in VBox and ebin builds.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-28 20:53:40 +02:00
dd384da66a feat(eye-remote): Add display state machine with splash and fallback modes
Display system for Pi Zero Eye Remote (HyperPixel 2.1 Round 480x480):

Splash Screen (splash.py):
- Animated phoenix logo for boot/halt/start/reboot states
- Pulsing glow effects with fire colors
- Progress indicator ring with rotating dots
- Fallback phoenix symbol if logo image missing

Fallback Display Manager (fallback_manager.py):
- Connection state detection (OTG 10.55.0.1, WiFi secubox.local)
- Four modes: OFFLINE, CONNECTING, ONLINE, COMMUNICATING
- Local metrics radar with 6 concentric rings
- 3D rotating cube with module icons when connected
- Rainbow sweep line animation

Touch Analysis Tools:
- touch_analyzer.py: Noise pattern analysis (Y-axis oscillation at stable X)
- touch_calibrate.py: Corner target display for manual calibration
- touch_filter.py: X-stable noise filtering

Radar Variants:
- radar_flashy.py: Vibrant colors with 3D cube
- radar_concentric.py: Balanced metric arcs centered at 12 o'clock
- radar_rainbow.py: Rainbow colorization with sweep
- radar_full.py: Complete feature set

Also includes:
- Hardware Smart-Strip module specs (SBX-STR-01)
- Host configuration for USB OTG network
- Systemd service for USB auto-mode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-28 14:48:00 +02:00
555600d5dd fix(multiboot): Ensure kernel files are properly copied to EFI partition
- Fix glob pattern in bash test (glob in [[ -f ]] doesn't work correctly)
- Use find command instead of glob for reliable kernel detection
- Add fallback to extract ARM64 kernel from live USB image if not in rootfs
- Add verification step in GitHub Actions to check boot files after build
- Sort kernel files by version to get latest when multiple exist

Fixes missing vmlinuz/Image on multiboot USB issue.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 19:29:09 +02:00
32fecbf010 feat(hardware): Add Smart-Strip HMI module (SBX-STR-01) + fix lite profile build
Smart-Strip v1.1:
- RP2350A MCU with TrustZone-M + AT42QT2120 touch IC
- 6× RGB LEDs (SK6812-MINI-E) + 6 capacitive touch zones
- Dual-mode: USB-C 2.0 (HID+CDC) / I²C (0x42)
- Hamiltonien sweep AUTH→MESH following SecuBox charte
- Parser CDC with whitelist grammar (no eval, no dynamic alloc)
- Interactive HTML simulator included

Build fixes:
- Skip X11/kiosk packages for SECUBOX_LITE=1 profiles
- Skip netdata/glances for lite profiles (ESPRESSObin)
- Skip LXC for lite profiles (limited storage)
- ESPRESSObin image now fits in 3584M (548M compressed)

Files:
- docs/hardware/smart-strip-v1.1.md (550-line spec)
- docs/hardware/smart-strip/simulator.html
- packages/secubox-smart-strip/firmware/{parser,ring_buffer}.{c,h}
- packages/secubox-smart-strip/host/secubox_smart_strip.py
- wiki/Smart-Strip.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 19:03:08 +02:00
55166bb258 fix(build): Move complex Python packages to post-debootstrap
python3-cryptography and python3-jose fail during debootstrap due
to complex dependencies. Moving to post-debootstrap apt-get install.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 17:12:21 +02:00
bfe2e9cb98 release: Version 1.9.0
Changes in this release:
- Added comprehensive package dependencies to all build scripts
- Firmware images now fully ready with all deps pre-installed
- Fixed package conflicts (iputils-arping, python3-zmq)
- Build scripts include: Python deps, network tools, security
  services (crowdsec, netdata, glances), X11 packages

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 17:09:29 +02:00
6149354fed fix(build): Move python3-zmq to post-debootstrap installation
python3-zmq has complex dependencies that fail during debootstrap.
Moving it to post-debootstrap apt-get installation resolves this.

Also removed from INCLUDE_PKGS in build-image.sh - installed via pip.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 17:06:47 +02:00
b4415de8a7 fix(build): Use iputils-arping instead of arping
The 'arping' and 'iputils-arping' packages conflict with each other.
Using iputils-arping which provides the arping command needed by
the network fallback scripts.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 17:00:32 +02:00
cadd993862 fix(build): Add all missing package dependencies to build scripts
All build scripts now include comprehensive package lists so firmware
images are fully ready with all dependencies pre-installed. No need
for apt --fix-broken install after boot.

Added packages:
- Python deps: python3-fastapi, python3-uvicorn, python3-httpx,
  python3-psutil, python3-aiosqlite, python3-cryptography,
  python3-jinja2, python3-jwt, python3-aiofiles, python3-pil,
  python3-tomli, python3-pydantic, python3-jose, python3-toml,
  python3-netifaces, python3-zmq
- Network tools: bridge-utils, traceroute, dnsutils, whois, mtr-tiny,
  nmap, arping, avahi-daemon, avahi-utils, haproxy, qrencode
- Services: crowdsec, glances, netdata, mosquitto, coturn, lxc
- X11 packages: kbd, xinit, xserver-xorg-core, chromium, unclutter,
  x11-xserver-utils
- Additional pip: pillow, zmq, pyjwt, textual

Files updated:
- image/build-image.sh (main ARM/x64 builder)
- image/build-live-usb.sh (x64 live USB)
- image/build-rpi-usb.sh (Raspberry Pi ARM64)
- image/build-ebin-live-usb.sh (ESPRESSObin ARM64 live)
- image/profiles/x64-live.conf (profile with package lists)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 16:51:56 +02:00
b115e966b1 fix(network): Remove dummy0 interface causing routing issues
The dummy0 interface was creating unwanted default routes that
interfered with proper network connectivity.

Removed from:
- board/espressobin-v7/netplan/00-secubox.yaml
- board/espressobin-ultra/netplan/00-secubox.yaml
- board/mochabin/netplan/00-secubox.yaml
- image/build-image.sh (systemd-networkd config)
- image/build-live-usb.sh (systemd-networkd config)
- image/profiles/x64-live.conf (kiosk dummy network)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 16:45:31 +02:00
d42745aac3 feat(live-boot): Complete live RAM boot implementation v2.2.4-live
- Install live-boot package and rebuild initramfs with live-boot scripts
- Create squashfs filesystem (878MB) on data partition sda4
- Update boot.scr with live boot parameters (boot=live, toram)
- Fix wiki sidebar links from [[Page|Display]] to [Display](Page)
- Add Eye-Remote wiki page documentation
- Add sync-wiki.sh script for wiki repository sync
- Add patch-multiboot-efi.sh for post-build EFI patching

Partition layout:
- sda1 (512MB): EFI with kernel, initrd, dtbs, boot.scr
- sda2 (3GB): ARM64 rootfs reference
- sda3 (3GB): x86 rootfs for VirtualBox/QEMU
- sda4 (9.5GB): Data + /live/filesystem.squashfs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 13:30:50 +02:00
8a473cc1c2 docs(wiki): Add Multiboot Live OS announcement and documentation
- Add announcement banner on wiki home for v2.2.3 multiboot release
- Create wiki/Multiboot.md with full multiboot documentation
- Add Multiboot and Eye Remote links to sidebar navigation
- Update sidebar version to v2.2.3
- Document Eye Remote Pi Zero as USB gadget for ESPRESSObin boot
- Add partition layout, boot flow, and troubleshooting docs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 11:22:41 +02:00
6d58ae0ac6 fix(multiboot): Use local deb slipstream instead of apt repo
- Removed apt.secubox.in dependency (not ready)
- Install SecuBox packages from output/debs/ directory
- Handles missing debs gracefully

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 10:40:04 +02:00
494e6def67 fix(multiboot): Fix set -e early exit with [[ ]] && pattern
- Changed [[ -z "$VAR" ]] && err to if/then/fi pattern
- This prevents early exit when condition is false with set -e
- Removed --minimal flag to install full SecuBox packages

Note: SecuBox packages on AMD64 still require apt.secubox.in SSL fix

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 10:39:04 +02:00
5cf69c0ce1 feat(multiboot): Add multi-architecture boot system with shared data
Create a multi-boot storage system for Pi Zero Eye Remote that supports:
- ARM64: ESPRESSObin/MOCHAbin via U-Boot boot.scr
- AMD64: Any x86_64 UEFI system via GRUB
- Shared data: Cross-architecture application data on partition 4

Partition layout (16GB+ recommended):
- P1: EFI/FAT32 (512MB) - Boot files for both architectures
- P2: ext4 (3GB) - ARM64 rootfs
- P3: ext4 (3GB) - AMD64 rootfs
- P4: ext4 (remaining) - Shared SecuBox configs, state, logs

Features:
- Automatic bind mounts for /etc/secubox, /var/lib/secubox, /srv/secubox
- eMMC flasher image included in EFI partition
- Debootstrap-based AMD64 rootfs builder
- U-Boot script with USB/MMC detection

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-27 10:13:31 +02:00
8c07f0f90a feat(eye-remote): v1.8.0 - Eye Remote multi-mode USB gadget
- Add 5 USB gadget modes: Normal, Flash, Debug, TTY, Auth
- Add HID keyboard emulation for U-Boot automation
- Add FIDO2/U2F security key mode (Eye Remote)
- Add x64/amd64 live boot support
- Update README.md with Eye Remote documentation
- Update WIKI.md with mode mockups and technical details
- Add INFOGRAPHIC-PROMPT.md for Claude.ai image generation
- Bump version from 1.7.0 to 1.8.0

New files:
- secubox-hid-keyboard.sh: Virtual HID keyboard driver
- INFOGRAPHIC-PROMPT.md: 7 prompts for publicity infographics

Eye Remote transforms the Round UI from a status display
into a full remote control device with debugging, flashing,
and authentication capabilities.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-20 11:33:26 +02:00
3240e441c7 fix(ebin): EspressoBin eMMC boot fixes
- secubox-haproxy: Remove ReadWritePaths sandboxing causing NAMESPACE errors
- secubox-net-fallback: Skip lan* interfaces (DSA downstream ports)
- netplan: Add dummy0 with 10.55.255.1/24 to all board configs
- flash-emmc: Fix eMMC detection using boot0 partition
- flash-emmc.cmd: Support multiple image filenames

Fixes issues encountered when booting SecuBox from EspressoBin V7 eMMC.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-20 07:59:42 +02:00
76cd7c0d96 feat(remote-ui): Add HyperPixel 2.1 Round dashboard for RPi Zero W
Complete Remote UI implementation for SecuBox status display:

- Python/PIL dashboard with direct framebuffer rendering (no Chromium)
- KMS overlay support (vc4-kms-dpi-hyperpixel2r) - tested working
- USB OTG composite gadget (CDC-ECM + CDC-ACM) for host connection
- 6 concentric rings showing CPU, MEM, DISK, LOAD, TEMP, WiFi metrics
- Auto-start systemd service (secubox-dashboard.service)
- install_zerow.sh for SD card preparation with all fixes

Key fixes discovered during debugging:
- Use KMS overlay, not non-KMS (GPIO conflicts on Bookworm)
- Framebuffer is RGB565 (16-bit), not BGRA
- RPi OS Bookworm requires userconf file for SSH credentials
- NetworkManager ignores ifupdown; use direct IP config

Files:
- secubox_dashboard.py: PIL-based live metrics dashboard
- install_zerow.sh: SD card flasher with KMS overlay
- secubox-dashboard.service: Auto-start systemd unit
- 24 module icons (AUTH/WALL/BOOT/MIND/ROOT/MESH)

Tested on: RPi Zero W + HyperPixel 2.1 Round 480x480

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 17:54:09 +02:00
d5fd350e88 fix(kiosk): Skip X11 config on bare metal in kiosk launcher too
Same fix as build-live-usb.sh X11 setup - the kiosk launcher was also
creating X11 config files that corrupted on bare metal.

- Skip config creation entirely for bare metal (vm_type=none)
- Intel/AMD/NVIDIA auto-detection works perfectly without configs
- Sanitize gpu_info for VMs (remove special chars)
- Only create explicit driver configs for VMs that need them

Fixes: "M2G_" parse error in /etc/X11/xorg.conf.d/10-kiosk.conf

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 10:09:09 +02:00
529fcce5a1 fix(network): Skip local IPs in gateway discovery (avoid self-ping)
The fallback script was pinging 192.168.255.1 (dummy0 interface) and
thinking it found a gateway, then assigning 192.168.255.250 to the
ethernet interface - which doesn't provide internet connectivity.

- Add check to skip gateway IPs that are already assigned locally
- Verify ARP discovery results aren't local IPs
- Prevents self-discovery of dummy0 (192.168.255.1)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 09:59:33 +02:00
b226233520 feat(network): Smarter IP auto-discovery with ARP scanning
- Add iputils-arping for ARP-based gateway discovery
- Add arp_discover() function to scan for responding devices
- Expand gateway probe list: .254 variants, 10.x, 172.16.x subnets
- Try ARP discovery before slower ping-based gateway probing
- More reliable network auto-configuration on diverse networks

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 09:57:00 +02:00
cf7ea44c78 fix(kiosk): Skip X11 config on bare metal, disable service sandboxing
- X11 setup now exits early for bare metal (VM_TYPE=none) without
  creating config files - Intel/AMD/NVIDIA auto-detect perfectly
- Remove static fallback 10-modesetting.conf that caused conflicts
- Sanitize GPU_INFO in config comments to remove special chars
- Disable PrivateTmp and ProtectSystem for haproxy, metrics, threats
  services - causes Python symlink namespace errors on some kernels
- Add fix-namespace-errors.sh script for quick fixes on running systems

Fixes: X11 "no screens found" on Intel HD Graphics 630
Fixes: "Failed to set up mount namespacing" for Python services

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 09:52:20 +02:00
f4806bf7fa fix(ci): Fix eMMC image check and RPi multi-initrd copy
- build-all-live-usb.yml: Check for .img.gz first since build-image.sh
  already compresses and removes the .img file
- build-rpi-usb.sh: Handle multiple kernel/initrd files by selecting
  the latest version instead of globbing which breaks cp

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 09:22:23 +02:00
0f970bb8de fix(kiosk): Add VirtualBox VMSVGA graphics driver support (v1.6.7.14)
- Create secubox-x11-setup.service for boot-time VM/driver detection
- VirtualBox VMSVGA controller requires vmware X11 driver (not modesetting)
- Add driver selection: VBox+VMSVGA→vmware, VBox+VBoxVGA→modesetting
- Update secubox-kiosk.service to depend on x11-setup service
- Update secubox-kiosk-launcher v3.3 to defer to setup service
- Change SLIPSTREAM_DEBS default to 1 (126 packages by default)
- Fix EspressoBin live USB boot partition sizing for embedded images

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 09:16:37 +02:00
6d8127433a fix(build): Fix DTB copy in EspressoBin live USB build
- Use find instead of glob to locate DTB directory reliably
- Copy only EspressoBin DTBs (armada-3720-espressobin*.dtb)
- Add logging for DTB count and warning if missing
- Fixes boot failure due to missing device tree files

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 06:03:37 +02:00
1f6fe23afe fix(build): Fix EspressoBin live USB build $HOME and set -e issues
- Fix $HOME issue when running with sudo by using SUDO_USER to get
  original user's home directory for cache lookup
- Change ls to find to avoid set -e failures when no files match
- Add error handling for dpkg installation step
- Fix grep in package count verification to prevent pipefail

Both AMD64 (8GB) and EspressoBin V7 (2GB) live USB images now build
successfully with all 126 SecuBox packages slipstreamed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-15 05:52:38 +02:00
84647e11f9 fix(dashboard): Display real data for memory, storage, network IPs and module versions
- Add IP address discovery to network_summary API endpoint
- Add _get_package_version() helper for fetching installed versions
- Update _svc() to include package versions in status data
- Fix loadNetwork() to use API data instead of hardcoded IPs
- Add loadMemory() and loadDisk() functions for actual used/total values
- Update modules table to display real versions from dpkg
- Make EspressoBin build consistent with AMD64 slipstream (check cache too)

Fixes dashboard showing placeholder values (Memory: -/-, Storage: -/-, etc.)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 17:43:28 +02:00
f838a5b5bb fix(network): Call discover_lan() when DHCP fails (v1.7.0.4)
- Fixed bug where discover_lan() function existed but was never called
- Now probes common gateways (192.168.1.1, 192.168.0.1, etc.) before link-local
- Only falls back to link-local (169.254.1.1) if gateway discovery also fails

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 17:34:51 +02:00
b6960559b1 fix(auth): Correct nginx proxy path and add login page (v1.7.0.3)
- Fix auth.conf nginx proxy to use /auth/ prefix (FastAPI root_path issue)
- Add explicit /api/v1/auth/auth/login location for login endpoint
- Create login.html page with proper authentication flow
- Add GRUB echo module to fix EFI boot error

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 17:11:53 +02:00
4165d6d66c feat(network): Smart auto-IP with ARP collision detection (v1.7.0.2)
- Add ARP-based IP collision detection for multi-device environments
- MAC-based pseudo-random IP offset to spread devices across range
- Gratuitous ARP announcement to prevent IP conflicts
- Fix EspressoBin DSA network: target wan interface, not eth0 CPU port
- Static IP fallback 192.168.255.250 when DHCP unavailable
- Sync all build scripts to version 1.7.0
- Add screenshot script with 90+ module URLs
- Add mock HTML screenshots for documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 16:28:02 +02:00
5f33410b53 fix(ui): Emoji icons not rendering in kiosk sidebar (v1.7.0.1)
- Add Noto Color Emoji font-family to all icon elements
- Separate category icon into .cat-icon element with emoji font
- Put 'Noto Color Emoji' first in font stack (installed on live USB)
- Add explicit emoji font installation in build script
- Update both light and dark sidebar themes

Fixes emoji/icon boxes showing as empty squares on real hardware.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 11:58:07 +02:00
3ee3931a89 feat(ui): Phase 11 version display & boot mode indicators (v1.7.0)
- Dashboard footer: version, boot mode, auth mode, uptime
- Login page: auth mode badge + version display
- Plymouth splash: version v1.7.0 + boot mode indicator
- GRUB menu: descriptive echo messages for each boot option
- New API endpoints: /boot_mode, /auth_mode, /public/info
- Version bump to 1.7.0 across all components

Phase 11 tasks completed: P11-01 through P11-04, P11-07 through P11-09

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 11:52:38 +02:00
b07dc91e9a feat(network): Auto-discover LAN subnet when DHCP fails (v1.6.7.14)
New network fallback logic:
1. Try DHCP first (10s timeout)
2. If fails, probe common gateways:
   - 192.168.1.1, 192.168.0.1, 192.168.2.1
   - 192.168.255.1, 10.0.0.1, 10.0.1.1, 172.16.0.1
3. If gateway responds → auto-configure:
   - IP: <subnet>.250/24
   - Route: default via discovered gateway
   - DNS: gateway + 8.8.8.8 + 1.1.1.1
4. Only use 169.254.1.1 as last resort

Addresses #28

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 10:31:15 +02:00
670e71418f fix(kiosk): VirtualBox X11 detection using systemd-detect-virt (v1.6.7.13)
Problem: VirtualBox with VMSVGA shows as "VMware SVGA" in lspci,
causing wrong driver selection and X11 failure.

Fix: Use systemd-detect-virt as primary VM detection:
- "oracle" → VirtualBox → vboxvideo driver
- "vmware" → VMware → vmware driver
- "kvm"/"qemu" → KVM/QEMU → modesetting driver
- Fall back to lspci for bare metal

Also loads vboxsf module for shared folders support.

Addresses #27

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 10:07:29 +02:00
6735b7f40a fix(install): Lenovo Error 1962 boot fix + wiki updates (v1.6.7.12)
Fixes:
- Add fallback EFI bootloader at /EFI/BOOT/BOOTX64.EFI for Lenovo/HP/Dell
- Add --slipstream flag to build-live-usb.sh (CI fix)
- Fix banner alignment in secubox-flash-disk
- Update kiosk launcher to v1.6.7.12

Wiki:
- Use generic /releases/latest/download/ URLs (no more hardcoded versions)
- Fix script paths (scripts/ → image/)
- Update all languages (EN, FR, DE, ZH)

Tested: Lenovo hardware install - PASSED

Closes #26

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 10:05:03 +02:00
66ad1461ba fix(kiosk): Fix systemd and kiosk launcher bugs (v1.6.7.11)
- Fix StartLimitIntervalSec syntax (was StartLimitInterval)
- Fix platform detection message ("bare-metal" vs "none")
- Fix stale lock file blocking restarts (PID-based cleanup)
- Update kiosk launcher version to v3.2

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-14 07:34:07 +02:00
e27d6e9266 feat(kiosk): Add zenity progress splash before Chromium (v1.6.7.5)
- Add zenity + feh packages for splash display
- secubox-x11-splash: New progress bar with stage indicators
  - X11 Display Server OK
  - Network check
  - nginx check
  - Chromium launch
- Graceful fallback chain: zenity → feh → xmessage → color gradient
- Kiosk launcher integrates splash before Chromium starts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-13 10:16:14 +02:00
f201558649 fix(boot): Remove graphical.target that blocked input (v1.6.7.4)
Root cause: GRUB Kiosk entry used systemd.unit=graphical.target
but no display manager was installed. systemd waited forever
for graphical.target → getty never started → no keyboard input.

Fixes:
- Remove systemd.unit=graphical.target from Kiosk GRUB entry
- Revert getty Type=idle to simple service (v1.6.7.3)
- Enable backup TTYs (tty2-6) for emergency access

Closes #24

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-13 10:01:56 +02:00
7a34189ed4 feat(kiosk): Add VirtualBox debug logging for X11 troubleshooting
- Add generate_debug_report() to secubox-kiosk-launcher
- Capture system info, virtualization, graphics hardware
- Log DRM/KMS devices, kernel modules, Xorg status
- Enhanced error reporting with dmesg and VT status
- Debug reports saved to /tmp/kiosk-debug-*.log
- Add v1.6.7.2 overlay installer scripts
- Add emoji font fixes for navbar icons
- Add screenshots for v1.6.7.1

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-13 08:26:06 +02:00
35c93406e6 fix(auth): Remove duplicate /auth prefix from login endpoint
- Remove prefix="/auth" from secubox_core/auth.py router definition
- Add prefix="/auth" when including auth_router in hub main.py
- Fixes login endpoint from /auth/auth/login to /auth/login

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 21:09:21 +02:00
5fb27ae7fd chore: Bump version to 1.6.7
Changes in v1.6.7:
- Fix X11/VT switching (critical fix - X server now runs as root)
- Add portal users.json reset in firstboot
- Default admin password: secubox (not random)
- Hide Chromium warning banner with --test-type flag
- Hub API auth endpoint at /api/v1/hub/auth/login

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 18:57:06 +02:00