Commit Graph

187 Commits

Author SHA1 Message Date
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
71787e94f5 fix(auth): Add portal users.json reset in firstboot
- Create /etc/secubox/users.json with admin user on firstboot
- Default password: secubox (instead of random)
- SHA256 hash password same as portal expects
- Hide Chromium --ignore-certificate-errors warning with --test-type

Credentials: admin / secubox

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 18:36:45 +02:00
b8db604ef1 fix(kiosk): Rewrite X11 startup to fix VT switching issue
- Start Xorg as root directly (required for VT allocation)
- Add proper Xauthority setup with magic cookie
- Explicit chvt 7 to switch to graphical VT
- Wait for X11 socket before launching session
- Run session as kiosk user with correct environment
- Add extensive debug logging

Tested in QEMU: Xorg starts, Chromium runs fullscreen
Version: v1.6.6

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 18:21:01 +02:00
f8d8bacce1 fix(live): v1.6.5 remove sandbox warning, fix input devices, restore splash
- Remove --no-sandbox from Chromium to eliminate warning banner
- Add --disable-infobars to hide any remaining info bars
- Add X11 InputClass sections for libinput keyboard/pointer/touchpad
- Set AutoAddDevices=true, AllowEmptyInput=false in ServerFlags
- Restore 'splash' to kernel cmdline for Plymouth boot splash
- Update version strings to 1.6.5

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 16:56:37 +02:00
f33bc45a0a fix(live): v1.6.4 disable Plymouth splash to prevent boot freeze
- Remove 'splash' from kernel cmdline (Plymouth disabled by default)
- Add secubox-simple fallback theme (minimal, compatible)
- Set secubox-simple as default theme if Plymouth enabled manually
- Keep secubox-3d theme available for advanced users
- Fixes boot freeze on both QEMU/KVM and real hardware

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 16:26:10 +02:00
aae1e2c73a feat(live): v1.6.3 Plymouth 3D theme + kiosk fix
Plymouth:
- New secubox-3d theme with nested cubes + triple lemniscate
- 3 cubes (outer/middle/inner) with desync rotation
- AUTH/MIND/MESH colored lemniscates with glowing heads
- SecuBox color palette integration

Kiosk:
- Fix session script: use --start-fullscreen (not --kiosk)
- Allows Ctrl+Alt+Fn VT switching
- Clean exec chromium (no background process issues)
- Consistent session between build script and launcher

Build:
- Version bump to 1.6.3
- Plymouth theme set to secubox-3d

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 15:55:18 +02:00
5dcc0619ed fix(boot): Improve GRUB install and netplan DHCP
secubox-flash-disk:
- Add efibootmgr verification after GRUB EFI install
- Show manual fix instructions if EFI entry not created
- Mount /dev/pts for chroot compatibility
- Pass target device to grub-install
- Better error handling and summary

netplan (x64-live):
- Remove invalid routes (via: 0.0.0.0)
- Add dhcp4-overrides for proper DNS/routes
- Rename wan to wan0 to avoid conflicts

Fixes Error 1962 on Lenovo ThinkCentre M710q

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-12 08:02:57 +02:00
38988163de fix(live): Plymouth cube theme, auth, flash-disk, netplan
- Plymouth: Integrate secubox-cube theme with 3D rotating module icons
- Auth: Create users.json for portal login (admin/secubox)
- flash-disk: Fix 'local' outside function error on line 236
- netplan: Add br-lan/wan structure for x64-live mode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 17:48:41 +02:00
be03d8d8db fix(build): Add UTF-8 console font and U-Boot flash script
- Add fonts-terminus and kbd packages for UTF-8 box-drawing chars
- Configure console-setup with Terminus font (FONTFACE/FONTSIZE)
- Add vconsole.conf with ter-v16n font for systemd
- Include flash-emmc.scr on boot partition for U-Boot flashing
- Copy embedded eMMC image to boot partition for U-Boot access
- Update README with Live USB Quick Flash instructions
- Bump version to 1.6.1

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 12:29:54 +02:00
cd45e16441 fix(kiosk): Use HTTP for localhost (nginx serves HTTPS only on secubox.local)
- xinitrc: Change KIOSK_URL from https://localhost to http://localhost
- secubox-kiosk.sh: Change default from https://127.0.0.1 to http://127.0.0.1

nginx config serves:
- HTTP on port 80 for localhost/127.0.0.1 (direct content, no redirect)
- HTTPS on port 443 for secubox.local and external access

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 12:06:49 +02:00
a179969b97 feat(x64): Add disk flasher for x64 live USB
- Create secubox-flash-disk tool for flashing to internal storage
  - Smart device detection (NVMe, SATA, eMMC, VirtIO)
  - Safety checks to prevent flashing boot device
  - Interactive device selection with disk info
  - Progress display with pv or dd status
  - Optional root partition resize to fill disk
  - Checksum verification support

- Update secubox-console-tui with x64 flash support
  - Add is_live_x64() detection function
  - Add flash_disk() function calling secubox-flash-disk
  - Show 'd' key option when running x64 live

- Update build-live-usb.sh with --embed-image option
  - Bundle target image in /secubox/ for disk installation
  - Auto-generate checksum if not present

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 10:45:30 +02:00
087e94467c feat(ebin): Add live USB flasher for EspressoBin V7 eMMC
New components for bootable live USB with eMMC flashing capability:

- image/build-ebin-live-usb.sh: Build script for ARM64 live USB
  - SquashFS-based live filesystem
  - Cross-compilation support via QEMU
  - Optional embedded eMMC image for flashing
  - Distroboot configuration for U-Boot

- image/sbin/secubox-flash-emmc: Interactive eMMC flasher
  - Safety checks (won't flash if running from eMMC)
  - Progress display and checksum verification
  - Auto mode for unattended installation
  - Dry-run option for testing

- board/espressobin-v7/boot-live-usb.cmd: U-Boot boot script
  - USB boot priority configuration
  - Live-boot kernel parameters

- board/espressobin-v7/extlinux/extlinux.conf: Distroboot menu
  - Live, To-RAM, Flash, and Rescue boot options

- Updated secubox-console-tui with "Flash to eMMC" menu option

Usage:
  # Build eMMC image first
  sudo bash image/build-image.sh --board espressobin-v7

  # Build live USB with embedded image
  sudo bash image/build-ebin-live-usb.sh \
    --embed-image output/secubox-espressobin-v7-bookworm.img.gz

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 10:24:40 +02:00
b86f8dd382 fix(hub): Fix secubox user creation and socket directory
- Create secubox user explicitly in build script before package install
- Configure tmpfiles.d for /run/secubox at boot time
- Add ExecStartPre with + prefix to hub service for root permissions
- Ensure hub.conf created in nginx secubox.d
- Fix service dependency chain (Wants instead of Requires)
- Change UMask to 0002 for proper socket permissions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-04-11 10:15:23 +02:00