Wire native network tools into Red Bear profiles

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-14 22:53:24 +01:00
parent c76d4b8968
commit 2776566e81
7 changed files with 449 additions and 49 deletions
+83 -1
View File
@@ -4,7 +4,7 @@
# Build: make all CONFIG_NAME=redbear-desktop # Build: make all CONFIG_NAME=redbear-desktop
# Live: make live CONFIG_NAME=redbear-desktop # Live: make live CONFIG_NAME=redbear-desktop
include = ["desktop.toml", "redbear-netctl.toml"] include = ["desktop.toml", "redbear-legacy-base.toml", "redbear-legacy-desktop.toml", "redbear-device-services.toml", "redbear-netctl.toml"]
[general] [general]
filesystem_size = 10240 filesystem_size = 10240
@@ -19,8 +19,90 @@ redbear-hwutils = {}
# Redox-native netctl compatibility command # Redox-native netctl compatibility command
redbear-netctl = {} redbear-netctl = {}
# Native network reporting and connect-scan tools
redbear-netstat = {}
redbear-traceroute = {}
redbear-mtr = {}
redbear-nmap = {}
# Firmware loading
firmware-loader = {}
# Input/runtime service prerequisites
evdevd = {}
udev-shim = {}
# Diagnostic tool
redbear-info = {}
# IOMMU validation surface
iommu = {}
# Terminal file manager (Midnight Commander port) # Terminal file manager (Midnight Commander port)
mc = {} mc = {}
# Package builder (cub -S/-B/-G CLI) # Package builder (cub -S/-B/-G CLI)
cub = {} cub = {}
# ── Desktop services (replace legacy desktop-minimal init scripts) ───────────
[[files]]
path = "/usr/lib/init.d/20_orbital.service"
data = """
[unit]
description = "Orbital display server"
requires_weak = [
"10_net.target",
]
[service]
cmd = "orbital"
args = ["orblogin", "launcher"]
envs = { VT = "3" }
type = "oneshot_async"
"""
[[files]]
path = "/usr/lib/init.d/30_console.service"
data = """
[unit]
description = "Console terminals"
requires_weak = [
"20_orbital.service",
]
[service]
cmd = "getty"
args = ["2"]
type = "oneshot_async"
"""
[[files]]
path = "/usr/lib/init.d/31_debug_console.service"
data = """
[unit]
description = "Debug console"
requires_weak = [
"20_orbital.service",
]
[service]
cmd = "getty"
args = ["/scheme/debug/no-preserve", "-J"]
type = "oneshot_async"
"""
[[files]]
path = "/usr/lib/init.d/13_iommu.service"
data = """
[unit]
description = "IOMMU DMA remapping daemon"
requires_weak = [
"00_pcid-spawner.service",
]
[service]
cmd = "/usr/lib/drivers/iommu"
type = "oneshot_async"
"""
+63 -4
View File
@@ -14,6 +14,13 @@ include = ["desktop.toml", "redbear-legacy-base.toml", "redbear-legacy-desktop.t
[general] [general]
filesystem_size = 2048 filesystem_size = 2048
[users.messagebus]
uid = 100
gid = 100
name = "messagebus"
home = "/nonexistent"
shell = "/usr/bin/ion"
[packages] [packages]
# Red Bear OS branding (os-release, hostname, motd) # Red Bear OS branding (os-release, hostname, motd)
redbear-release = {} redbear-release = {}
@@ -24,6 +31,12 @@ redbear-hwutils = {}
# Redox-native netctl compatibility command # Redox-native netctl compatibility command
redbear-netctl = {} redbear-netctl = {}
# Native network reporting and connect-scan tools
redbear-netstat = {}
redbear-traceroute = {}
redbear-mtr = {}
redbear-nmap = {}
# Terminal file manager (Midnight Commander port) # Terminal file manager (Midnight Commander port)
mc = {} mc = {}
@@ -37,9 +50,15 @@ firmware-loader = {}
evdevd = {} evdevd = {}
udev-shim = {} udev-shim = {}
# Desktop/session plumbing
dbus = {}
# Diagnostic tool # Diagnostic tool
redbear-info = {} redbear-info = {}
# IOMMU validation surface
iommu = {}
# Process monitor # Process monitor
htop = {} htop = {}
@@ -55,10 +74,6 @@ qtbase = {}
# RBOS meta-package — temporarily disabled (depends on GPU stack via redox-driver-sys) # RBOS meta-package — temporarily disabled (depends on GPU stack via redox-driver-sys)
# redbear-meta = {} # redbear-meta = {}
# Workaround: bash fails to cross-compile (upstream mkbuiltins.c issue)
# ion (from minimal) is the default shell anyway
bash = "ignore"
# Firmware directory for AMD/Intel GPU blobs # Firmware directory for AMD/Intel GPU blobs
[[files]] [[files]]
path = "/usr/firmware/amdgpu" path = "/usr/firmware/amdgpu"
@@ -117,3 +132,47 @@ cmd = "getty"
args = ["/scheme/debug/no-preserve", "-J"] args = ["/scheme/debug/no-preserve", "-J"]
type = "oneshot_async" type = "oneshot_async"
""" """
[[files]]
path = "/usr/lib/init.d/12_dbus.service"
data = """
[unit]
description = "D-Bus system bus"
requires_weak = [
"10_net.target",
]
[service]
cmd = "ion"
args = [
"-c",
"mkdir -p /var/lib/dbus /run/dbus; rm -f /run/dbus/pid; dbus-uuidgen --ensure; dbus-daemon --system",
]
type = "oneshot_async"
"""
[[files]]
path = "/var/lib/dbus"
data = ""
directory = true
mode = 0o755
[[files]]
path = "/run/dbus"
data = ""
directory = true
mode = 0o755
[[files]]
path = "/usr/lib/init.d/13_iommu.service"
data = """
[unit]
description = "IOMMU DMA remapping daemon"
requires_weak = [
"00_pcid-spawner.service",
]
[service]
cmd = "/usr/lib/drivers/iommu"
type = "oneshot_async"
"""
+48 -32
View File
@@ -10,6 +10,13 @@ include = ["desktop.toml", "redbear-legacy-base.toml", "redbear-legacy-desktop.t
[general] [general]
filesystem_size = 4096 filesystem_size = 4096
[users.messagebus]
uid = 100
gid = 100
name = "messagebus"
home = "/nonexistent"
shell = "/usr/bin/ion"
[packages] [packages]
# Red Bear OS branding # Red Bear OS branding
redbear-release = {} redbear-release = {}
@@ -27,6 +34,15 @@ udev-shim = {}
# D-Bus (session + system bus) # D-Bus (session + system bus)
dbus = {} dbus = {}
# Diagnostic/runtime tooling
redbear-info = {}
redbear-hwutils = {}
redbear-netctl = {}
redbear-netstat = {}
redbear-traceroute = {}
redbear-mtr = {}
redbear-nmap = {}
# Wayland protocol # Wayland protocol
libwayland = {} libwayland = {}
wayland-protocols = {} wayland-protocols = {}
@@ -48,58 +64,35 @@ qtwayland = {}
# KF6 Frameworks — Tier 1 (no special deps) # KF6 Frameworks — Tier 1 (no special deps)
kf6-extra-cmake-modules = {} kf6-extra-cmake-modules = {}
kf6-kcoreaddons = {} kf6-kcoreaddons = {}
kf6-kwidgetsaddons = {}
kf6-kconfig = {} kf6-kconfig = {}
kf6-ki18n = {} kf6-ki18n = {}
kf6-kcodecs = {}
kf6-kguiaddons = {}
kf6-kcolorscheme = {} kf6-kcolorscheme = {}
kf6-kauth = {} kf6-kauth = {}
kf6-kitemmodels = {}
kf6-kitemviews = {}
# KF6 Frameworks — Tier 2 # KF6 Frameworks — KWin session-surface chain
kf6-karchive = {}
kf6-kwindowsystem = {} kf6-kwindowsystem = {}
kf6-knotifications = {} kf6-knotifications = {}
kf6-kjobwidgets = {}
kf6-kconfigwidgets = {} kf6-kconfigwidgets = {}
# KF6 Frameworks — Tier 3 (needs D-Bus)
kf6-kcrash = {} kf6-kcrash = {}
kf6-kdbusaddons = {} kf6-kdbusaddons = {}
kf6-kglobalaccel = {} kf6-kglobalaccel = {}
kf6-kservice = {} kf6-kservice = {}
kf6-kpackage = {} kf6-kpackage = {}
kf6-kiconthemes = {} kf6-kiconthemes = {}
kf6-kxmlgui = {} kirigami = {}
kf6-ktextwidgets = {}
kf6-kirigami = {}
kf6-solid = {}
kf6-sonnet = {}
# KF6 Frameworks — Tier 4 (needs kio + kxmlgui)
kf6-kio = {} kf6-kio = {}
kf6-kbookmarks = {}
kf6-kcompletion = {}
kf6-kdeclarative = {} kf6-kdeclarative = {}
kf6-kcmutils = {} kf6-kcmutils = {}
plasma-framework = {} kf6-kwayland = {}
kdecoration = {}
# KDE Plasma # KDE session surface (Phase 6 slice)
kwin = {} kwin = {}
plasma-workspace = {}
plasma-desktop = {}
breeze = {}
kde-cli-tools = {}
# Graphics # Graphics
mesa = {} mesa = {}
libdrm = {} libdrm = {}
# Workaround: bash fails to cross-compile
bash = "ignore"
# Firmware directory for AMD/Intel GPU blobs # Firmware directory for AMD/Intel GPU blobs
[[files]] [[files]]
path = "/usr/firmware/amdgpu" path = "/usr/firmware/amdgpu"
@@ -123,6 +116,30 @@ args = ["--system"]
type = "oneshot_async" type = "oneshot_async"
""" """
[[files]]
path = "/var/lib/dbus"
data = ""
directory = true
mode = 0o755
[[files]]
path = "/run/dbus"
data = ""
directory = true
mode = 0o755
[[files]]
path = "/var/lib/dbus"
data = ""
directory = true
mode = 0o755
[[files]]
path = "/run/dbus"
data = ""
directory = true
mode = 0o755
[[files]] [[files]]
path = "/usr/lib/init.d/13_seatd.service" path = "/usr/lib/init.d/13_seatd.service"
data = """ data = """
@@ -191,8 +208,7 @@ type = "oneshot_async"
path = "/usr/bin/orbital-kde" path = "/usr/bin/orbital-kde"
mode = 0o755 mode = 0o755
data = """ data = """
#!/usr/bin/env bash #!/usr/bin/sh
set -ex
export DISPLAY="" export DISPLAY=""
export WAYLAND_DISPLAY=wayland-0 export WAYLAND_DISPLAY=wayland-0
@@ -222,6 +238,6 @@ kwin_wayland --replace &
sleep 2 sleep 2
# Start Plasma Shell # Start KWin Wayland compositor
plasmashell & kwin_wayland --replace
""" """
+14
View File
@@ -18,9 +18,23 @@ redbear-hwutils = {}
# Redox-native netctl compatibility command # Redox-native netctl compatibility command
redbear-netctl = {} redbear-netctl = {}
# Native network reporting and connect-scan tools
redbear-netstat = {}
redbear-traceroute = {}
redbear-mtr = {}
redbear-nmap = {}
# Firmware loading
firmware-loader = {}
# Input/runtime service prerequisites
evdevd = {}
udev-shim = {}
# Terminal file manager # Terminal file manager
mc = {} mc = {}
# Diagnostic tool # Diagnostic tool
redbear-info = {} redbear-info = {}
@@ -1,5 +1,6 @@
use std::env; use std::env;
use std::fs; use std::fs;
use std::io::Read;
use std::path::PathBuf; use std::path::PathBuf;
use std::process; use std::process;
@@ -141,6 +142,46 @@ const INTEGRATIONS: &[IntegrationCheck] = &[
note: "Profiles and active profile tracking are readable; profile application remains a separate runtime action.", note: "Profiles and active profile tracking are readable; profile application remains a separate runtime action.",
functional_probe: Some(probe_netctl_surface), functional_probe: Some(probe_netctl_surface),
}, },
IntegrationCheck {
name: "redbear-netstat",
category: "Tool",
description: "Native Red Bear network status reporter",
artifact_path: Some("/usr/bin/redbear-netstat"),
control_path: Some("/scheme/netcfg"),
test_hint: "redbear-netstat",
note: "Functional when the netcfg scheme answers read-only interface, route, and resolver queries.",
functional_probe: Some(probe_smolnetd_surface),
},
IntegrationCheck {
name: "redbear-traceroute",
category: "Tool",
description: "Native UDP-based path tracing utility",
artifact_path: Some("/usr/bin/redbear-traceroute"),
control_path: Some("/scheme/icmp"),
test_hint: "redbear-traceroute 1.1.1.1",
note: "Binary presence proves installation; successful hop tracing still depends on the live ICMP and UDP path in the current runtime.",
functional_probe: Some(probe_icmp_surface),
},
IntegrationCheck {
name: "redbear-mtr",
category: "Tool",
description: "Native path measurement tool built on traceroute probes",
artifact_path: Some("/usr/bin/redbear-mtr"),
control_path: Some("/scheme/icmp"),
test_hint: "redbear-mtr 1.1.1.1",
note: "Binary presence proves installation; useful measurements still depend on the same live ICMP and UDP probe substrate as traceroute.",
functional_probe: Some(probe_icmp_surface),
},
IntegrationCheck {
name: "redbear-nmap",
category: "Tool",
description: "Bounded TCP connect-scan utility",
artifact_path: Some("/usr/bin/redbear-nmap"),
control_path: Some("/scheme/netcfg"),
test_hint: "redbear-nmap 127.0.0.1 22,80,443",
note: "Binary presence proves the scanner is installed; successful scans still depend on live networking and reachable targets.",
functional_probe: Some(probe_smolnetd_surface),
},
IntegrationCheck { IntegrationCheck {
name: "pcid-spawner", name: "pcid-spawner",
category: "Core", category: "Core",
@@ -161,6 +202,16 @@ const INTEGRATIONS: &[IntegrationCheck] = &[
note: "Functional when the netcfg scheme answers read-only queries.", note: "Functional when the netcfg scheme answers read-only queries.",
functional_probe: Some(probe_smolnetd_surface), functional_probe: Some(probe_smolnetd_surface),
}, },
IntegrationCheck {
name: "xhcid",
category: "USB",
description: "xHCI host-controller daemon",
artifact_path: Some("/usr/lib/drivers/xhcid"),
control_path: Some("/scheme"),
test_hint: "lsusb",
note: "Functional when at least one usb.* controller scheme is registered.",
functional_probe: Some(probe_usb_surface),
},
IntegrationCheck { IntegrationCheck {
name: "dhcpd", name: "dhcpd",
category: "Networking", category: "Networking",
@@ -186,30 +237,40 @@ const INTEGRATIONS: &[IntegrationCheck] = &[
category: "System", category: "System",
description: "Firmware indexing and serving daemon", description: "Firmware indexing and serving daemon",
artifact_path: Some("/usr/bin/firmware-loader"), artifact_path: Some("/usr/bin/firmware-loader"),
control_path: Some("/scheme/firmware"), control_path: Some("/scheme"),
test_hint: "ls /scheme/firmware/", test_hint: "ls /scheme/firmware/",
note: "Functional when the firmware scheme is enumerable.", note: "Functional when the firmware scheme is enumerable.",
functional_probe: Some(probe_directory_readable), functional_probe: Some(probe_firmware_scheme),
},
IntegrationCheck {
name: "iommu",
category: "System",
description: "IOMMU DMA-remapping daemon",
artifact_path: Some("/usr/lib/drivers/iommu"),
control_path: Some("/scheme"),
test_hint: "redbear-phase-iommu-check",
note: "Functional when the iommu scheme is registered in /scheme.",
functional_probe: Some(probe_iommu_scheme),
}, },
IntegrationCheck { IntegrationCheck {
name: "udev-shim", name: "udev-shim",
category: "System", category: "System",
description: "udev-compatible device enumeration shim", description: "udev-compatible device enumeration shim",
artifact_path: Some("/usr/bin/udev"), artifact_path: Some("/usr/bin/udev-shim"),
control_path: Some("/scheme/udev"), control_path: Some("/scheme"),
test_hint: "ls /scheme/udev/", test_hint: "ls /scheme/udev/",
note: "Functional when the udev scheme can be listed.", note: "Functional when the udev scheme can be listed.",
functional_probe: Some(probe_directory_readable), functional_probe: Some(probe_udev_scheme),
}, },
IntegrationCheck { IntegrationCheck {
name: "evdevd", name: "evdevd",
category: "Input", category: "Input",
description: "Event-device translation daemon", description: "Event-device translation daemon",
artifact_path: Some("/usr/lib/drivers/evdevd"), artifact_path: Some("/usr/bin/evdevd"),
control_path: Some("/scheme/evdev"), control_path: Some("/scheme"),
test_hint: "ls /scheme/evdev/", test_hint: "ls /scheme/evdev/",
note: "Functional when event nodes are enumerable through the evdev scheme.", note: "Functional when event nodes are enumerable through the evdev scheme.",
functional_probe: Some(probe_directory_readable), functional_probe: Some(probe_evdev_scheme),
}, },
IntegrationCheck { IntegrationCheck {
name: "redox-drm", name: "redox-drm",
@@ -431,7 +492,7 @@ fn collect_hardware(runtime: &Runtime, network: &NetworkReport) -> HardwareRepor
let rtl8125_present = pci_entries.into_iter().any(|entry| { let rtl8125_present = pci_entries.into_iter().any(|entry| {
let config_path = format!("/scheme/pci/{entry}/config"); let config_path = format!("/scheme/pci/{entry}/config");
let Some(bytes) = read_bytes(runtime, &config_path) else { let Some(bytes) = read_prefix_bytes(runtime, &config_path, 4) else {
return false; return false;
}; };
if bytes.len() < 4 { if bytes.len() < 4 {
@@ -451,7 +512,7 @@ fn collect_hardware(runtime: &Runtime, network: &NetworkReport) -> HardwareRepor
.into_iter() .into_iter()
.any(|entry| { .any(|entry| {
let config_path = format!("/scheme/pci/{entry}/config"); let config_path = format!("/scheme/pci/{entry}/config");
let Some(bytes) = read_bytes(runtime, &config_path) else { let Some(bytes) = read_prefix_bytes(runtime, &config_path, 4) else {
return false; return false;
}; };
if bytes.len() < 4 { if bytes.len() < 4 {
@@ -976,8 +1037,12 @@ fn read_trimmed(runtime: &Runtime, path: &str) -> Option<String> {
.filter(|value| !value.is_empty()) .filter(|value| !value.is_empty())
} }
fn read_bytes(runtime: &Runtime, path: &str) -> Option<Vec<u8>> { fn read_prefix_bytes(runtime: &Runtime, path: &str, max_len: usize) -> Option<Vec<u8>> {
fs::read(runtime.resolve(path)).ok() let mut file = fs::File::open(runtime.resolve(path)).ok()?;
let mut bytes = vec![0_u8; max_len];
let read = file.read(&mut bytes).ok()?;
bytes.truncate(read);
Some(bytes)
} }
fn parse_default_route(routes: &str) -> Option<String> { fn parse_default_route(routes: &str) -> Option<String> {
@@ -1019,6 +1084,18 @@ fn probe_usb_surface(
}) })
} }
fn probe_icmp_surface(
runtime: &Runtime,
_network: &NetworkReport,
_hardware: &HardwareReport,
_check: &IntegrationCheck,
) -> Option<String> {
runtime
.read_dir_names("/scheme")
.filter(|entries| entries.iter().any(|name| name == "icmp"))
.map(|_| "icmp scheme is present for probe/error reporting".to_string())
}
fn probe_netctl_surface( fn probe_netctl_surface(
runtime: &Runtime, runtime: &Runtime,
network: &NetworkReport, network: &NetworkReport,
@@ -1055,6 +1132,50 @@ fn probe_smolnetd_surface(
}) })
} }
fn probe_named_scheme(runtime: &Runtime, scheme_name: &str) -> Option<String> {
let names = runtime.read_dir_names("/scheme")?;
names
.into_iter()
.any(|name| name == scheme_name)
.then(|| format!("scheme {scheme_name} is registered in /scheme"))
}
fn probe_firmware_scheme(
runtime: &Runtime,
_network: &NetworkReport,
_hardware: &HardwareReport,
_check: &IntegrationCheck,
) -> Option<String> {
probe_named_scheme(runtime, "firmware")
}
fn probe_udev_scheme(
runtime: &Runtime,
_network: &NetworkReport,
_hardware: &HardwareReport,
_check: &IntegrationCheck,
) -> Option<String> {
probe_named_scheme(runtime, "udev")
}
fn probe_evdev_scheme(
runtime: &Runtime,
_network: &NetworkReport,
_hardware: &HardwareReport,
_check: &IntegrationCheck,
) -> Option<String> {
probe_named_scheme(runtime, "evdev")
}
fn probe_iommu_scheme(
runtime: &Runtime,
_network: &NetworkReport,
_hardware: &HardwareReport,
_check: &IntegrationCheck,
) -> Option<String> {
probe_named_scheme(runtime, "iommu")
}
fn probe_rtl8125_path( fn probe_rtl8125_path(
_runtime: &Runtime, _runtime: &Runtime,
network: &NetworkReport, network: &NetworkReport,
@@ -1382,6 +1503,8 @@ mod tests {
"PRETTY_NAME=\"Red Bear OS\"\nVERSION_ID=\"0.1.0\"\n", "PRETTY_NAME=\"Red Bear OS\"\nVERSION_ID=\"0.1.0\"\n",
); );
write_file(&root, "/usr/bin/redbear-info", ""); write_file(&root, "/usr/bin/redbear-info", "");
write_file(&root, "/usr/bin/redbear-netstat", "");
write_file(&root, "/usr/bin/redbear-nmap", "");
create_dir(&root, "/scheme/netcfg"); create_dir(&root, "/scheme/netcfg");
write_file( write_file(
&root, &root,
@@ -1405,6 +1528,14 @@ mod tests {
.integrations .integrations
.iter() .iter()
.any(|item| item.check.name == "redbear-info")); .any(|item| item.check.name == "redbear-info"));
assert!(report
.integrations
.iter()
.any(|item| item.check.name == "redbear-netstat"));
assert!(report
.integrations
.iter()
.any(|item| item.check.name == "redbear-nmap"));
fs::remove_dir_all(root).unwrap(); fs::remove_dir_all(root).unwrap();
} }
+49
View File
@@ -98,7 +98,12 @@ symlink "../../local/recipes/system/evdevd" "recipes/system/evdevd"
symlink "../../local/recipes/system/firmware-loader" "recipes/system/firmware-loader" symlink "../../local/recipes/system/firmware-loader" "recipes/system/firmware-loader"
symlink "../../local/recipes/system/iommu" "recipes/system/iommu" symlink "../../local/recipes/system/iommu" "recipes/system/iommu"
symlink "../../local/recipes/system/redbear-hwutils" "recipes/system/redbear-hwutils" symlink "../../local/recipes/system/redbear-hwutils" "recipes/system/redbear-hwutils"
symlink "../../local/recipes/system/redbear-info" "recipes/system/redbear-info"
symlink "../../local/recipes/system/redbear-netstat" "recipes/system/redbear-netstat"
symlink "../../local/recipes/system/redbear-netctl" "recipes/system/redbear-netctl" symlink "../../local/recipes/system/redbear-netctl" "recipes/system/redbear-netctl"
symlink "../../local/recipes/system/redbear-traceroute" "recipes/system/redbear-traceroute"
symlink "../../local/recipes/system/redbear-mtr" "recipes/system/redbear-mtr"
symlink "../../local/recipes/system/redbear-nmap" "recipes/system/redbear-nmap"
symlink "../../local/recipes/system/redbear-meta" "recipes/system/redbear-meta" symlink "../../local/recipes/system/redbear-meta" "recipes/system/redbear-meta"
symlink "../../local/recipes/system/udev-shim" "recipes/system/udev-shim" symlink "../../local/recipes/system/udev-shim" "recipes/system/udev-shim"
@@ -106,6 +111,50 @@ symlink "../../local/recipes/system/udev-shim" "recipes/system/udev-shim"
mkdir -p recipes/core mkdir -p recipes/core
symlink "../../local/recipes/core/ext4d" "recipes/core/ext4d" symlink "../../local/recipes/core/ext4d" "recipes/core/ext4d"
# KDE / Phase 6 recipes
mkdir -p recipes/kde
symlink "../../local/recipes/kde/plasma-desktop" "recipes/kde/plasma-desktop"
symlink "../../local/recipes/kde/plasma-workspace" "recipes/kde/plasma-workspace"
symlink "../../local/recipes/kde/plasma-framework" "recipes/kde/plasma-framework"
symlink "../../local/recipes/kde/plasma-wayland-protocols" "recipes/kde/plasma-wayland-protocols"
symlink "../../local/recipes/kde/kwin" "recipes/kde/kwin"
symlink "../../local/recipes/kde/kirigami" "recipes/kde/kirigami"
symlink "../../local/recipes/kde/kirigami" "recipes/kde/kf6-kirigami"
symlink "../../local/recipes/kde/kdecoration" "recipes/kde/kdecoration"
symlink "../../local/recipes/kde/kf6-extra-cmake-modules" "recipes/kde/kf6-extra-cmake-modules"
symlink "../../local/recipes/kde/kf6-kcoreaddons" "recipes/kde/kf6-kcoreaddons"
symlink "../../local/recipes/kde/kf6-kwidgetsaddons" "recipes/kde/kf6-kwidgetsaddons"
symlink "../../local/recipes/kde/kf6-kconfig" "recipes/kde/kf6-kconfig"
symlink "../../local/recipes/kde/kf6-ki18n" "recipes/kde/kf6-ki18n"
symlink "../../local/recipes/kde/kf6-kcodecs" "recipes/kde/kf6-kcodecs"
symlink "../../local/recipes/kde/kf6-kguiaddons" "recipes/kde/kf6-kguiaddons"
symlink "../../local/recipes/kde/kf6-kcolorscheme" "recipes/kde/kf6-kcolorscheme"
symlink "../../local/recipes/kde/kf6-kauth" "recipes/kde/kf6-kauth"
symlink "../../local/recipes/kde/kf6-kitemmodels" "recipes/kde/kf6-kitemmodels"
symlink "../../local/recipes/kde/kf6-kitemviews" "recipes/kde/kf6-kitemviews"
symlink "../../local/recipes/kde/kf6-karchive" "recipes/kde/kf6-karchive"
symlink "../../local/recipes/kde/kf6-kwindowsystem" "recipes/kde/kf6-kwindowsystem"
symlink "../../local/recipes/kde/kf6-knotifications" "recipes/kde/kf6-knotifications"
symlink "../../local/recipes/kde/kf6-kjobwidgets" "recipes/kde/kf6-kjobwidgets"
symlink "../../local/recipes/kde/kf6-kconfigwidgets" "recipes/kde/kf6-kconfigwidgets"
symlink "../../local/recipes/kde/kf6-kcrash" "recipes/kde/kf6-kcrash"
symlink "../../local/recipes/kde/kf6-kdbusaddons" "recipes/kde/kf6-kdbusaddons"
symlink "../../local/recipes/kde/kf6-kglobalaccel" "recipes/kde/kf6-kglobalaccel"
symlink "../../local/recipes/kde/kf6-kservice" "recipes/kde/kf6-kservice"
symlink "../../local/recipes/kde/kf6-kpackage" "recipes/kde/kf6-kpackage"
symlink "../../local/recipes/kde/kf6-kiconthemes" "recipes/kde/kf6-kiconthemes"
symlink "../../local/recipes/kde/kf6-kxmlgui" "recipes/kde/kf6-kxmlgui"
symlink "../../local/recipes/kde/kf6-ktextwidgets" "recipes/kde/kf6-ktextwidgets"
symlink "../../local/recipes/kde/kf6-solid" "recipes/kde/kf6-solid"
symlink "../../local/recipes/kde/kf6-sonnet" "recipes/kde/kf6-sonnet"
symlink "../../local/recipes/kde/kf6-kio" "recipes/kde/kf6-kio"
symlink "../../local/recipes/kde/kf6-kbookmarks" "recipes/kde/kf6-kbookmarks"
symlink "../../local/recipes/kde/kf6-kcompletion" "recipes/kde/kf6-kcompletion"
symlink "../../local/recipes/kde/kf6-kdeclarative" "recipes/kde/kf6-kdeclarative"
symlink "../../local/recipes/kde/kf6-kcmutils" "recipes/kde/kf6-kcmutils"
symlink "../../local/recipes/kde/kf6-kidletime" "recipes/kde/kf6-kidletime"
symlink "../../local/recipes/kde/kf6-kwayland" "recipes/kde/kf6-kwayland"
# ── 4. New files not in upstream ──────────────────────────────────── # ── 4. New files not in upstream ────────────────────────────────────
echo "==> Ensuring Red Bear OS-specific files exist..." echo "==> Ensuring Red Bear OS-specific files exist..."
+49
View File
@@ -143,12 +143,60 @@ symlink "../../local/recipes/system/evdevd" "recipes/system/evdevd"
symlink "../../local/recipes/system/firmware-loader" "recipes/system/firmware-loader" symlink "../../local/recipes/system/firmware-loader" "recipes/system/firmware-loader"
symlink "../../local/recipes/system/redbear-info" "recipes/system/redbear-info" symlink "../../local/recipes/system/redbear-info" "recipes/system/redbear-info"
symlink "../../local/recipes/system/redbear-hwutils" "recipes/system/redbear-hwutils" symlink "../../local/recipes/system/redbear-hwutils" "recipes/system/redbear-hwutils"
symlink "../../local/recipes/system/redbear-netstat" "recipes/system/redbear-netstat"
symlink "../../local/recipes/system/redbear-netctl" "recipes/system/redbear-netctl" symlink "../../local/recipes/system/redbear-netctl" "recipes/system/redbear-netctl"
symlink "../../local/recipes/system/redbear-traceroute" "recipes/system/redbear-traceroute"
symlink "../../local/recipes/system/redbear-mtr" "recipes/system/redbear-mtr"
symlink "../../local/recipes/system/redbear-nmap" "recipes/system/redbear-nmap"
symlink "../../local/recipes/system/redbear-meta" "recipes/system/redbear-meta" symlink "../../local/recipes/system/redbear-meta" "recipes/system/redbear-meta"
symlink "../../local/recipes/system/udev-shim" "recipes/system/udev-shim" symlink "../../local/recipes/system/udev-shim" "recipes/system/udev-shim"
symlink "../../local/recipes/core/ext4d" "recipes/core/ext4d" symlink "../../local/recipes/core/ext4d" "recipes/core/ext4d"
symlink "../../local/recipes/tui/mc" "recipes/tui/mc" symlink "../../local/recipes/tui/mc" "recipes/tui/mc"
symlink "../../local/recipes/system/cub" "recipes/system/cub" symlink "../../local/recipes/system/cub" "recipes/system/cub"
# KDE / Phase 6 recipes
mkdir -p recipes/kde
symlink "../../local/recipes/kde/plasma-desktop" "recipes/kde/plasma-desktop"
symlink "../../local/recipes/kde/plasma-workspace" "recipes/kde/plasma-workspace"
symlink "../../local/recipes/kde/plasma-framework" "recipes/kde/plasma-framework"
symlink "../../local/recipes/kde/plasma-wayland-protocols" "recipes/kde/plasma-wayland-protocols"
symlink "../../local/recipes/kde/kwin" "recipes/kde/kwin"
symlink "../../local/recipes/kde/kirigami" "recipes/kde/kirigami"
symlink "../../local/recipes/kde/kirigami" "recipes/kde/kf6-kirigami"
symlink "../../local/recipes/kde/kdecoration" "recipes/kde/kdecoration"
symlink "../../local/recipes/kde/kf6-extra-cmake-modules" "recipes/kde/kf6-extra-cmake-modules"
symlink "../../local/recipes/kde/kf6-kcoreaddons" "recipes/kde/kf6-kcoreaddons"
symlink "../../local/recipes/kde/kf6-kwidgetsaddons" "recipes/kde/kf6-kwidgetsaddons"
symlink "../../local/recipes/kde/kf6-kconfig" "recipes/kde/kf6-kconfig"
symlink "../../local/recipes/kde/kf6-ki18n" "recipes/kde/kf6-ki18n"
symlink "../../local/recipes/kde/kf6-kcodecs" "recipes/kde/kf6-kcodecs"
symlink "../../local/recipes/kde/kf6-kguiaddons" "recipes/kde/kf6-kguiaddons"
symlink "../../local/recipes/kde/kf6-kcolorscheme" "recipes/kde/kf6-kcolorscheme"
symlink "../../local/recipes/kde/kf6-kauth" "recipes/kde/kf6-kauth"
symlink "../../local/recipes/kde/kf6-kitemmodels" "recipes/kde/kf6-kitemmodels"
symlink "../../local/recipes/kde/kf6-kitemviews" "recipes/kde/kf6-kitemviews"
symlink "../../local/recipes/kde/kf6-karchive" "recipes/kde/kf6-karchive"
symlink "../../local/recipes/kde/kf6-kwindowsystem" "recipes/kde/kf6-kwindowsystem"
symlink "../../local/recipes/kde/kf6-knotifications" "recipes/kde/kf6-knotifications"
symlink "../../local/recipes/kde/kf6-kjobwidgets" "recipes/kde/kf6-kjobwidgets"
symlink "../../local/recipes/kde/kf6-kconfigwidgets" "recipes/kde/kf6-kconfigwidgets"
symlink "../../local/recipes/kde/kf6-kcrash" "recipes/kde/kf6-kcrash"
symlink "../../local/recipes/kde/kf6-kdbusaddons" "recipes/kde/kf6-kdbusaddons"
symlink "../../local/recipes/kde/kf6-kglobalaccel" "recipes/kde/kf6-kglobalaccel"
symlink "../../local/recipes/kde/kf6-kservice" "recipes/kde/kf6-kservice"
symlink "../../local/recipes/kde/kf6-kpackage" "recipes/kde/kf6-kpackage"
symlink "../../local/recipes/kde/kf6-kiconthemes" "recipes/kde/kf6-kiconthemes"
symlink "../../local/recipes/kde/kf6-kxmlgui" "recipes/kde/kf6-kxmlgui"
symlink "../../local/recipes/kde/kf6-ktextwidgets" "recipes/kde/kf6-ktextwidgets"
symlink "../../local/recipes/kde/kf6-solid" "recipes/kde/kf6-solid"
symlink "../../local/recipes/kde/kf6-sonnet" "recipes/kde/kf6-sonnet"
symlink "../../local/recipes/kde/kf6-kio" "recipes/kde/kf6-kio"
symlink "../../local/recipes/kde/kf6-kbookmarks" "recipes/kde/kf6-kbookmarks"
symlink "../../local/recipes/kde/kf6-kcompletion" "recipes/kde/kf6-kcompletion"
symlink "../../local/recipes/kde/kf6-kdeclarative" "recipes/kde/kf6-kdeclarative"
symlink "../../local/recipes/kde/kf6-kcmutils" "recipes/kde/kf6-kcmutils"
symlink "../../local/recipes/kde/kf6-kidletime" "recipes/kde/kf6-kidletime"
symlink "../../local/recipes/kde/kf6-kwayland" "recipes/kde/kf6-kwayland"
status "Custom recipe symlinks ready" status "Custom recipe symlinks ready"
echo "" echo ""
@@ -168,6 +216,7 @@ declare -a redbear_configs=(
"config/redbear-desktop.toml" "config/redbear-desktop.toml"
"config/redbear-minimal.toml" "config/redbear-minimal.toml"
"config/redbear-full.toml" "config/redbear-full.toml"
"config/redbear-wayland.toml"
"config/redbear-live.toml" "config/redbear-live.toml"
) )
declare -a found_configs=() declare -a found_configs=()