fix: comprehensive boot warnings and exceptions — fixable silenced, unfixable diagnosed

Build system (5 gaps hardened):
- COOKBOOK_OFFLINE defaults to true (fork-mode)
- normalize_patch handles diff -ruN format
- New 'repo validate-patches' command (25/25 relibc patches)
- 14 patched Qt/Wayland/display recipes added to protected list
- relibc archive regenerated with current patch chain

Boot fixes (fixable):
- Full ISO EFI partition: 16 MiB → 1 MiB (matches mini, BIOS hardcoded 2 MiB offset)
- D-Bus system bus: absolute /usr/bin/dbus-daemon path (was skipped)
- redbear-sessiond: absolute /usr/bin/redbear-sessiond path (was skipped)
- daemon framework: silenced spurious INIT_NOTIFY warnings for oneshot_async services (P0-daemon-silence-init-notify.patch)
- udev-shim: demoted INIT_NOTIFY warning to INFO (expected for oneshot_async)
- relibc: comprehensive named semaphores (sem_open/close/unlink) replacing upstream todo!() stubs
- greeterd: Wayland socket timeout 15s → 30s (compositor DRM wait)
- greeter-ui: built and linked (header guard unification, sem_compat stubs removed)
- mc: un-ignored in both configs, fixed glib/libiconv/pcre2 transitive deps
- greeter config: removed stale keymapd dependency from display/greeter services
- prefix toolchain: relibc headers synced, _RELIBC_STDLIB_H guard unified

Unfixable (diagnosed, upstream):
- i2c-hidd: abort on no-I2C-hardware (QEMU) — process::exit → relibc abort
- kded6/greeter-ui: page fault 0x8 — Qt library null deref
- Thread panics fd != -1 — Rust std library on Redox
- DHCP timeout / eth0 MAC — QEMU user-mode networking
- hwrngd/thermald — no hardware RNG/thermal in VM
- live preload allocation — BIOS memory fragmentation, continues on demand
This commit is contained in:
2026-05-05 20:20:37 +01:00
parent a5f97b6632
commit f31522130f
81834 changed files with 11051982 additions and 108 deletions
@@ -0,0 +1,43 @@
// Copyright (C) 2017 The Qt Company Ltd.
// Copyright (C) 2017 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtWayland.Compositor
Item {
id: chrome
property alias shellSurface: surfaceItem.shellSurface
property alias surfaceItem: surfaceItem
property alias moveItem: surfaceItem.moveItem
property alias output: surfaceItem.output
//! [position sync]
x: surfaceItem.moveItem.x - surfaceItem.output.geometry.x
y: surfaceItem.moveItem.y - surfaceItem.output.geometry.y
//! [position sync]
ShellSurfaceItem {
id: surfaceItem
onSurfaceDestroyed: chrome.destroy();
}
onXChanged: updatePrimary()
onYChanged: updatePrimary()
function updatePrimary() {
var w = surfaceItem.width
var h = surfaceItem.height
var area = w * h;
var screenW = surfaceItem.output.geometry.width;
var screenH = surfaceItem.output.geometry.height;
var x1 = Math.max(0, x);
var y1 = Math.max(0, y);
var x2 = Math.min(x + w, screenW);
var y2 = Math.min(y + h, screenH);
var w1 = Math.max(0, x2 - x1);
var h1 = Math.max(0, y2 - y1);
if (w1 * h1 * 2 > area) {
surfaceItem.setPrimary();
}
}
}
@@ -0,0 +1,57 @@
// Copyright (C) 2017 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtWayland.Compositor
import QtQuick.Window
WaylandOutput {
id: screen
property variant viewsBySurface: ({})
property alias surfaceArea: background
property alias text: t.text
property alias screen: win.screen
sizeFollowsWindow: true
property bool windowed: false
window: Window {
id: win
x: Screen.virtualX
y: Screen.virtualY
width: 800
height: 800
visibility: windowed ? Window.Windowed : Window.FullScreen
visible: true
WaylandMouseTracker {
id: mouseTracker
anchors.fill: parent
windowSystemCursorEnabled: !clientCursor.visible
Rectangle {
anchors.fill: parent
id: background
Text {
id: t
anchors.centerIn: parent
font.pointSize: 72
}
}
WaylandCursorItem {
id: clientCursor
inputEventsEnabled: false
x: mouseTracker.mouseX
y: mouseTracker.mouseY
seat: comp.defaultSeat
visible: surface != null && mouseTracker.containsMouse
}
}
Shortcut {
sequence: "Ctrl+Alt+Backspace"
onActivated: Qt.quit()
}
}
}
@@ -0,0 +1,92 @@
// Copyright (C) 2017 The Qt Company Ltd.
// Copyright (C) 2017 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQml
import QtQuick
import QtWayland.Compositor
import QtWayland.Compositor.XdgShell
import QtWayland.Compositor.WlShell
import QtQml.Models
WaylandCompositor {
id: comp
ListModel {
id: emulatedScreens
ListElement { name: "left"; virtualX: 0; virtualY: 0; width: 800; height: 600 }
ListElement { name: "middle"; virtualX: 800; virtualY: 0; width: 800; height: 600 }
ListElement { name: "right"; virtualX: 1600; virtualY: 0; width: 800; height: 600 }
}
property bool emulated: Qt.application.screens.length < 2
//! [screens]
Instantiator {
id: screens
model: emulated ? emulatedScreens : Qt.application.screens
delegate: CompositorScreen {
surfaceArea.color: "lightsteelblue"
text: name
compositor: comp
screen: emulated ? Qt.application.screens[0] : modelData
Component.onCompleted: if (!comp.defaultOutput) comp.defaultOutput = this
position: Qt.point(virtualX, virtualY)
windowed: emulated
}
}
//! [screens]
Component {
id: chromeComponent
Chrome {}
}
Component {
id: moveItemComponent
Item {}
}
Item {
id: rootItem
}
WlShell {
onWlShellSurfaceCreated: (shellSurface) => handleShellSurfaceCreated(shellSurface)
}
XdgShell {
onToplevelCreated: (toplevel, xdgSurface) => handleShellSurfaceCreated(xdgSurface)
}
function createShellSurfaceItem(shellSurface, moveItem, output) {
// ![parenting]
var parentSurfaceItem = output.viewsBySurface[shellSurface.parentSurface];
var parent = parentSurfaceItem || output.surfaceArea;
// ![parenting]
var item = chromeComponent.createObject(parent, {
"shellSurface": shellSurface,
"moveItem": moveItem,
"output": output
});
if (parentSurfaceItem) {
item.x += output.position.x;
item.y += output.position.y;
}
output.viewsBySurface[shellSurface.surface] = item;
}
function handleShellSurfaceCreated(shellSurface) {
var moveItem = moveItemComponent.createObject(rootItem, {
"x": screens.objectAt(0).position.x,
"y": screens.objectAt(0).position.y,
"width": Qt.binding(function() { return shellSurface.surface.width; }),
"height": Qt.binding(function() { return shellSurface.surface.height; })
});
//! [createShellSurfaceItems]
for (var i = 0; i < screens.count; ++i)
createShellSurfaceItem(shellSurface, moveItem, screens.objectAt(i));
//! [createShellSurfaceItems]
}
}