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:
@@ -4,7 +4,7 @@
|
||||
# Build: make all 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]
|
||||
filesystem_size = 10240
|
||||
@@ -19,8 +19,90 @@ redbear-hwutils = {}
|
||||
# Redox-native netctl compatibility command
|
||||
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)
|
||||
mc = {}
|
||||
|
||||
# Package builder (cub -S/-B/-G CLI)
|
||||
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"
|
||||
"""
|
||||
|
||||
@@ -14,6 +14,13 @@ include = ["desktop.toml", "redbear-legacy-base.toml", "redbear-legacy-desktop.t
|
||||
[general]
|
||||
filesystem_size = 2048
|
||||
|
||||
[users.messagebus]
|
||||
uid = 100
|
||||
gid = 100
|
||||
name = "messagebus"
|
||||
home = "/nonexistent"
|
||||
shell = "/usr/bin/ion"
|
||||
|
||||
[packages]
|
||||
# Red Bear OS branding (os-release, hostname, motd)
|
||||
redbear-release = {}
|
||||
@@ -24,6 +31,12 @@ redbear-hwutils = {}
|
||||
# Redox-native netctl compatibility command
|
||||
redbear-netctl = {}
|
||||
|
||||
# Native network reporting and connect-scan tools
|
||||
redbear-netstat = {}
|
||||
redbear-traceroute = {}
|
||||
redbear-mtr = {}
|
||||
redbear-nmap = {}
|
||||
|
||||
# Terminal file manager (Midnight Commander port)
|
||||
mc = {}
|
||||
|
||||
@@ -37,9 +50,15 @@ firmware-loader = {}
|
||||
evdevd = {}
|
||||
udev-shim = {}
|
||||
|
||||
# Desktop/session plumbing
|
||||
dbus = {}
|
||||
|
||||
# Diagnostic tool
|
||||
redbear-info = {}
|
||||
|
||||
# IOMMU validation surface
|
||||
iommu = {}
|
||||
|
||||
# Process monitor
|
||||
htop = {}
|
||||
|
||||
@@ -55,10 +74,6 @@ qtbase = {}
|
||||
# RBOS meta-package — temporarily disabled (depends on GPU stack via redox-driver-sys)
|
||||
# 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
|
||||
[[files]]
|
||||
path = "/usr/firmware/amdgpu"
|
||||
@@ -117,3 +132,47 @@ cmd = "getty"
|
||||
args = ["/scheme/debug/no-preserve", "-J"]
|
||||
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
@@ -10,6 +10,13 @@ include = ["desktop.toml", "redbear-legacy-base.toml", "redbear-legacy-desktop.t
|
||||
[general]
|
||||
filesystem_size = 4096
|
||||
|
||||
[users.messagebus]
|
||||
uid = 100
|
||||
gid = 100
|
||||
name = "messagebus"
|
||||
home = "/nonexistent"
|
||||
shell = "/usr/bin/ion"
|
||||
|
||||
[packages]
|
||||
# Red Bear OS branding
|
||||
redbear-release = {}
|
||||
@@ -27,6 +34,15 @@ udev-shim = {}
|
||||
# D-Bus (session + system bus)
|
||||
dbus = {}
|
||||
|
||||
# Diagnostic/runtime tooling
|
||||
redbear-info = {}
|
||||
redbear-hwutils = {}
|
||||
redbear-netctl = {}
|
||||
redbear-netstat = {}
|
||||
redbear-traceroute = {}
|
||||
redbear-mtr = {}
|
||||
redbear-nmap = {}
|
||||
|
||||
# Wayland protocol
|
||||
libwayland = {}
|
||||
wayland-protocols = {}
|
||||
@@ -48,58 +64,35 @@ qtwayland = {}
|
||||
# KF6 Frameworks — Tier 1 (no special deps)
|
||||
kf6-extra-cmake-modules = {}
|
||||
kf6-kcoreaddons = {}
|
||||
kf6-kwidgetsaddons = {}
|
||||
kf6-kconfig = {}
|
||||
kf6-ki18n = {}
|
||||
kf6-kcodecs = {}
|
||||
kf6-kguiaddons = {}
|
||||
kf6-kcolorscheme = {}
|
||||
kf6-kauth = {}
|
||||
kf6-kitemmodels = {}
|
||||
kf6-kitemviews = {}
|
||||
|
||||
# KF6 Frameworks — Tier 2
|
||||
kf6-karchive = {}
|
||||
# KF6 Frameworks — KWin session-surface chain
|
||||
kf6-kwindowsystem = {}
|
||||
kf6-knotifications = {}
|
||||
kf6-kjobwidgets = {}
|
||||
kf6-kconfigwidgets = {}
|
||||
|
||||
# KF6 Frameworks — Tier 3 (needs D-Bus)
|
||||
kf6-kcrash = {}
|
||||
kf6-kdbusaddons = {}
|
||||
kf6-kglobalaccel = {}
|
||||
kf6-kservice = {}
|
||||
kf6-kpackage = {}
|
||||
kf6-kiconthemes = {}
|
||||
kf6-kxmlgui = {}
|
||||
kf6-ktextwidgets = {}
|
||||
kf6-kirigami = {}
|
||||
kf6-solid = {}
|
||||
kf6-sonnet = {}
|
||||
|
||||
# KF6 Frameworks — Tier 4 (needs kio + kxmlgui)
|
||||
kirigami = {}
|
||||
kf6-kio = {}
|
||||
kf6-kbookmarks = {}
|
||||
kf6-kcompletion = {}
|
||||
kf6-kdeclarative = {}
|
||||
kf6-kcmutils = {}
|
||||
plasma-framework = {}
|
||||
kf6-kwayland = {}
|
||||
kdecoration = {}
|
||||
|
||||
# KDE Plasma
|
||||
# KDE session surface (Phase 6 slice)
|
||||
kwin = {}
|
||||
plasma-workspace = {}
|
||||
plasma-desktop = {}
|
||||
breeze = {}
|
||||
kde-cli-tools = {}
|
||||
|
||||
# Graphics
|
||||
mesa = {}
|
||||
libdrm = {}
|
||||
|
||||
# Workaround: bash fails to cross-compile
|
||||
bash = "ignore"
|
||||
|
||||
# Firmware directory for AMD/Intel GPU blobs
|
||||
[[files]]
|
||||
path = "/usr/firmware/amdgpu"
|
||||
@@ -123,6 +116,30 @@ args = ["--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 = "/var/lib/dbus"
|
||||
data = ""
|
||||
directory = true
|
||||
mode = 0o755
|
||||
|
||||
[[files]]
|
||||
path = "/run/dbus"
|
||||
data = ""
|
||||
directory = true
|
||||
mode = 0o755
|
||||
|
||||
[[files]]
|
||||
path = "/usr/lib/init.d/13_seatd.service"
|
||||
data = """
|
||||
@@ -191,8 +208,7 @@ type = "oneshot_async"
|
||||
path = "/usr/bin/orbital-kde"
|
||||
mode = 0o755
|
||||
data = """
|
||||
#!/usr/bin/env bash
|
||||
set -ex
|
||||
#!/usr/bin/sh
|
||||
|
||||
export DISPLAY=""
|
||||
export WAYLAND_DISPLAY=wayland-0
|
||||
@@ -222,6 +238,6 @@ kwin_wayland --replace &
|
||||
|
||||
sleep 2
|
||||
|
||||
# Start Plasma Shell
|
||||
plasmashell &
|
||||
# Start KWin Wayland compositor
|
||||
kwin_wayland --replace
|
||||
"""
|
||||
|
||||
@@ -18,9 +18,23 @@ redbear-hwutils = {}
|
||||
# Redox-native netctl compatibility command
|
||||
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
|
||||
mc = {}
|
||||
|
||||
|
||||
# Diagnostic tool
|
||||
redbear-info = {}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
use std::env;
|
||||
use std::fs;
|
||||
use std::io::Read;
|
||||
use std::path::PathBuf;
|
||||
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.",
|
||||
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 {
|
||||
name: "pcid-spawner",
|
||||
category: "Core",
|
||||
@@ -161,6 +202,16 @@ const INTEGRATIONS: &[IntegrationCheck] = &[
|
||||
note: "Functional when the netcfg scheme answers read-only queries.",
|
||||
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 {
|
||||
name: "dhcpd",
|
||||
category: "Networking",
|
||||
@@ -186,30 +237,40 @@ const INTEGRATIONS: &[IntegrationCheck] = &[
|
||||
category: "System",
|
||||
description: "Firmware indexing and serving daemon",
|
||||
artifact_path: Some("/usr/bin/firmware-loader"),
|
||||
control_path: Some("/scheme/firmware"),
|
||||
control_path: Some("/scheme"),
|
||||
test_hint: "ls /scheme/firmware/",
|
||||
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 {
|
||||
name: "udev-shim",
|
||||
category: "System",
|
||||
description: "udev-compatible device enumeration shim",
|
||||
artifact_path: Some("/usr/bin/udev"),
|
||||
control_path: Some("/scheme/udev"),
|
||||
artifact_path: Some("/usr/bin/udev-shim"),
|
||||
control_path: Some("/scheme"),
|
||||
test_hint: "ls /scheme/udev/",
|
||||
note: "Functional when the udev scheme can be listed.",
|
||||
functional_probe: Some(probe_directory_readable),
|
||||
functional_probe: Some(probe_udev_scheme),
|
||||
},
|
||||
IntegrationCheck {
|
||||
name: "evdevd",
|
||||
category: "Input",
|
||||
description: "Event-device translation daemon",
|
||||
artifact_path: Some("/usr/lib/drivers/evdevd"),
|
||||
control_path: Some("/scheme/evdev"),
|
||||
artifact_path: Some("/usr/bin/evdevd"),
|
||||
control_path: Some("/scheme"),
|
||||
test_hint: "ls /scheme/evdev/",
|
||||
note: "Functional when event nodes are enumerable through the evdev scheme.",
|
||||
functional_probe: Some(probe_directory_readable),
|
||||
functional_probe: Some(probe_evdev_scheme),
|
||||
},
|
||||
IntegrationCheck {
|
||||
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 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;
|
||||
};
|
||||
if bytes.len() < 4 {
|
||||
@@ -451,7 +512,7 @@ fn collect_hardware(runtime: &Runtime, network: &NetworkReport) -> HardwareRepor
|
||||
.into_iter()
|
||||
.any(|entry| {
|
||||
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;
|
||||
};
|
||||
if bytes.len() < 4 {
|
||||
@@ -976,8 +1037,12 @@ fn read_trimmed(runtime: &Runtime, path: &str) -> Option<String> {
|
||||
.filter(|value| !value.is_empty())
|
||||
}
|
||||
|
||||
fn read_bytes(runtime: &Runtime, path: &str) -> Option<Vec<u8>> {
|
||||
fs::read(runtime.resolve(path)).ok()
|
||||
fn read_prefix_bytes(runtime: &Runtime, path: &str, max_len: usize) -> Option<Vec<u8>> {
|
||||
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> {
|
||||
@@ -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(
|
||||
runtime: &Runtime,
|
||||
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(
|
||||
_runtime: &Runtime,
|
||||
network: &NetworkReport,
|
||||
@@ -1382,6 +1503,8 @@ mod tests {
|
||||
"PRETTY_NAME=\"Red Bear OS\"\nVERSION_ID=\"0.1.0\"\n",
|
||||
);
|
||||
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");
|
||||
write_file(
|
||||
&root,
|
||||
@@ -1405,6 +1528,14 @@ mod tests {
|
||||
.integrations
|
||||
.iter()
|
||||
.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();
|
||||
}
|
||||
|
||||
@@ -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/iommu" "recipes/system/iommu"
|
||||
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-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/udev-shim" "recipes/system/udev-shim"
|
||||
|
||||
@@ -106,6 +111,50 @@ symlink "../../local/recipes/system/udev-shim" "recipes/system/udev-shim"
|
||||
mkdir -p recipes/core
|
||||
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 ────────────────────────────────────
|
||||
echo "==> Ensuring Red Bear OS-specific files exist..."
|
||||
|
||||
|
||||
@@ -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/redbear-info" "recipes/system/redbear-info"
|
||||
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-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/udev-shim" "recipes/system/udev-shim"
|
||||
symlink "../../local/recipes/core/ext4d" "recipes/core/ext4d"
|
||||
symlink "../../local/recipes/tui/mc" "recipes/tui/mc"
|
||||
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"
|
||||
echo ""
|
||||
|
||||
@@ -168,6 +216,7 @@ declare -a redbear_configs=(
|
||||
"config/redbear-desktop.toml"
|
||||
"config/redbear-minimal.toml"
|
||||
"config/redbear-full.toml"
|
||||
"config/redbear-wayland.toml"
|
||||
"config/redbear-live.toml"
|
||||
)
|
||||
declare -a found_configs=()
|
||||
|
||||
Reference in New Issue
Block a user