Files
RedBear-OS/local/scripts/build-all-isos.sh
T
vasilito 10caab7085 boot: real Wayland compositor, Intel DRM Gen8-Gen12, kernel 4GB fix, virtio-gpu driver
Comprehensive boot process improvement across the entire stack:

Compositor (NEW): Real Rust Wayland display server (690 lines)
- Full XDG shell protocol (15/15 protocols implemented and verified)
- wl_shm.format, xdg_wm_base, xdg_surface.get_toplevel support
- wl_buffer.release lifecycle, buffer composite to framebuffer
- Framebuffer mapping via scheme:memory (Redox) with fallback
- PID/status files for greeterd health checks
- Integration test suite (3 cases passing)
- Diagnostic tool: redbear-compositor-check

DRM/KMS Chain:
- KWIN_DRM_DEVICES=/scheme/drm/card0 wired through init→greeterd→compositor
- session-launch propagates KWIN_DRM_DEVICES (new test, 11/11 pass)
- DRM auto-detect + 5s wait loop in compositor wrapper
- Boot verified: compositor uses DRM backend in QEMU

Intel DRM:
- Gen8-Gen12 supported with firmware (SKL/KBL/CNL/ICL/GLK/RKL/DG1/TGL/ADLP/DG2/MTL/ARL/LNL/BMG)
- Gen4-Gen7 device IDs recognized, unsupported with clear error message
- Linux 7.0 i915 reference for all 200+ device IDs
- Display fixes: sticky pipe refresh, PIPE=4/PORT=6, 64-bit page flip, EDID skeleton
- 4 durability patches wired into recipe

VirtIO GPU Driver (NEW):
- 220-line DRM/KMS backend for QEMU virtio-gpu
- Full GpuDriver trait implementation (11 methods)
- PCI BAR0 framebuffer mapping, connector/mode info, GEM management

Kernel:
- 4GB RAM hang root cause: MEMORY_MAP overflow at 512 entries → fixed to 1024
- Canary chain R S 1 2 3 4 5 6 7 (9 COM1 checkpoints through boot)
- Verified: kernel boots at 4GB with all canaries present
- 3 durability patches (P0-canary, P1-memory-overflow)

Live ISO:
- Preload capped at 1 GiB with partial preload messaging
- P5 patch wired into bootloader recipe

Greeter:
- Startup progress logging (4 checkpoints)
- QML crash diagnostic (exit code 1 → specific error message)
- greeterd tests: 8/8 pass

Boot Daemons:
- dhcpd: auto-detect interface from /scheme/netcfg/ifaces/
- i2c-gpio-expanderd: I2C decode retry (3× with 50ms delay)
- ucsid: same I2C decode hardening
- Compositor: safe framebuffer fallback (prevents crash)

Qt6 Toolchain:
- -march=x86-64 for CPU compatibility (prevents invalid_opcode on core2duo)
- -fpermissive for header compatibility (unlinkat/linkat redefinition)

Documentation:
- BOOT-PROCESS-IMPROVEMENT-PLAN.md (comprehensive, 320 lines)
- PROFILE-MATRIX.md: ISO organization, RAM requirements, known issues
- BOOT-PROCESS-ASSESSMENT.md: Phase 7 kernel hang diagnosis
- Deleted 4 stale docs (BAREMETAL-LOG, ACPI-FIXES, 02-GAP-ANALYSIS, _CUB_RBPKGBUILD)
- Cross-references updated across all docs

KWin stubs replaced with real compositor delegation.
redbear-kde-session script created for post-login session launch.
30+ files, 10 patches, 3 binaries, 22 tests, 0 errors.
2026-04-28 06:18:37 +01:00

92 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
JOBS="${JOBS:-$(nproc)}"
ALLOW_UPSTREAM="${ALLOW_UPSTREAM:-0}"
BUILD_LOG_DIR="${PROJECT_ROOT}/build/logs"
targets=(redbear-full redbear-mini redbear-grub)
mkdir -p "$BUILD_LOG_DIR"
echo "========================================"
echo " Red Bear OS — Build All ISOs"
echo "========================================"
echo "Targets: ${targets[*]}"
echo "Jobs: $JOBS"
echo "Upstream refresh: $ALLOW_UPSTREAM"
echo "Log dir: $BUILD_LOG_DIR"
echo "========================================"
echo ""
cd "$PROJECT_ROOT"
# Ensure .config has PODMAN_BUILD=0
if ! grep -q '^PODMAN_BUILD?=0' .config 2>/dev/null; then
echo "PODMAN_BUILD?=0" > .config
echo ">>> Set PODMAN_BUILD=0 in .config"
fi
# Build or ensure cookbook binary exists
if [ ! -f "target/release/repo" ]; then
echo ">>> Building cookbook binary..."
cargo build --release 2>&1 | tee "$BUILD_LOG_DIR/cookbook-build.log"
fi
# Determine offline flags
if [ "$ALLOW_UPSTREAM" -eq 1 ]; then
OFFLINE_FLAGS="REPO_OFFLINE=0 COOKBOOK_OFFLINE=false"
else
OFFLINE_FLAGS="REPO_OFFLINE=1 COOKBOOK_OFFLINE=true"
fi
failed=()
for target in "${targets[@]}"; do
logfile="$BUILD_LOG_DIR/${target}-$(date +%Y%m%d-%H%M%S).log"
echo ""
echo "========================================"
echo " BUILDING: $target"
echo " Log: $logfile"
echo "========================================"
# Run clean + live build for this target
if $OFFLINE_FLAGS CI=1 make clean live "CONFIG_NAME=$target" "JOBS=$JOBS" 2>&1 | tee "$logfile"; then
echo ""
echo " OK: $target built successfully"
else
echo ""
echo " FAILED: $target build failed"
failed+=("$target")
fi
done
echo ""
echo "========================================"
echo " Build Summary"
echo "========================================"
for target in "${targets[@]}"; do
iso="build/x86_64/${target}.iso"
if [ -f "$iso" ]; then
size=$(du -h "$iso" | cut -f1)
echo " OK $target ($size) → $iso"
else
echo " MISSING $target ISO"
failed+=("$target")
fi
done
if [ ${#failed[@]} -gt 0 ]; then
echo ""
echo "FAILED targets: ${failed[*]}"
echo "Check logs in: $BUILD_LOG_DIR"
exit 1
fi
echo ""
echo "All ISOs built successfully."
echo "Logs: $BUILD_LOG_DIR"