Files
RedBear-OS/config/redbear-mini.toml
T
vasilito f93d9db2e5 redbear-mini: re-drop lib-only redbear-cli (re-added by first-class-citizen pass)
redbear-cli is a pure Rust lib (no bin); listing it makes repo cook fail with
'no packages found with binaries'. Its arg-parsing is already linked into
mtr/netctl/traceroute. Keeping mini's package list lib-free.
2026-07-29 06:43:13 +09:00

544 lines
11 KiB
TOML

# Red Bear OS Mini Configuration
# Text-only ISO for console/recovery/install on bare metal.
#
# Build: make live CONFIG_NAME=redbear-mini
#
# Target contract:
# - text-login live/recovery/install surface
# - boot framebuffer for VT text consoles via vesad + fbcond
include = ["minimal.toml", "redbear-legacy-base.toml", "redbear-netctl.toml", "redbear-device-services.toml", "redbear-boot-stages.toml"]
[general]
filesystem_size = 512
[users.messagebus]
uid = 100
gid = 100
name = "messagebus"
home = "/nonexistent"
shell = "/usr/bin/zsh"
[packages]
# Red Bear OS branding and host utilities.
redbear-release = {}
redbear-hwutils = {}
redbear-quirks = {}
# Device driver infrastructure (driver-manager owns the boot-time PCI
# match/claim/spawn path; pcid-spawner is retired and removed)
redbear-driver-policy = {}
ehcid = {}
ohcid = {}
uhcid = {}
redbear-input-headers = {}
redbear-btusb = {}
redbear-iwlwifi = {}
redbear-firmware-iwlwifi = {}
# Shared CLI library for redbear-* tools (standardized --help, --version, --log-level, etc.)
# Redox-native netctl tooling.
redbear-netctl = {}
redbear-netctl-console = {}
redbear-netstat = {}
redbear-traceroute = {}
redbear-mtr = {}
redbear-nmap = {}
# Caching DNS daemon (loopback listener + scheme:dns). Wired as a service
# below; see [init] section. Provides positive + negative caching and an
# mDNS responder so the loopback resolver hits cache before upstream.
redbear-dnsd = {}
# NB: text-only mini ships ONLY the small NIC/BT firmware (redbear-firmware-iwlwifi
# ~444K above + redbear-firmware-bluetooth ~444K). The GPU/generic firmware —
# redbear-firmware (~1.9G), redbear-firmware-intel (~396M),
# redbear-firmware-amdgpu (~111M) — is desktop-only dead weight in a text console
# (no GPU accel in text mode); it blew the image ~3G past budget and overflowed
# the installer. Removed here; it belongs to redbear-full.
redbear-firmware-bluetooth = {}
firmware-loader = {}
redbear-wifictl = {}
redbear-btctl = {}
redbear-ufw = {}
# Diagnostics and shell-side utilities.
tlc = {}
#mc = {}
redbear-info = {}
# brush: Rust shell, candidate default login shell (validated in-image before
# switching the [users.*] shell over from zsh).
brush = {}
# Keep package builder utility in live environment.
cub = {}
cpufreqd = {}
thermald = {}
redbear-power = {}
hwrngd = {}
redbear-acmd = {}
redbear-ftdi = {}
redbear-ecmd = {}
redbear-usbaudiod = {}
redbear-usb-hotplugd = {}
driver-params = {}
redbear-meta = {}
redbear-keymapd = {}
redbear-authd = {}
# NB: mini is PURELY TEXT-ONLY. GUI/desktop/session packages (greeter,
# session-launch, compositor, statusnotifierwatcher, accessibility, ime, and
# the whole D-Bus session-services stack below) were bundled here by mistake
# and have been removed — they belong to redbear-full. Text login is the
# initfs getty/brush chain (see the VT/getty/login section further down).
# ── PCI device database (critical for PCI driver matching) ──
pciids = {}
# ── Filesystem support ──
ext4d = {}
fatd = {}
redoxfs = {}
# ── System installer ──
installer = {}
# ── Input / device management ──
evdevd = {}
udev-shim = {}
# ── IOMMU DMA remapping ──
iommu = {}
# ── Standard CLI tools (from server profile) ──
bash = {}
bottom = {}
curl = {}
diffutils = {}
findutils = {}
uutils-tar = {}
bison = {}
flex = {}
meson = {}
ninja-build = {}
m4 = {}
#git = {} # suppressed: cascading rebuild; git not needed for boot/recovery
htop = {}
# ── Build / packaging utilities ──
# patchelf = {} # requires strtold which is missing in relibc
shared-mime-info = {}
# VT/getty/login chain: initfs starts inputd + vesad + fbcond in phase 1,
# then minimal.toml legacy 30_console runs inputd -A 2 + getty 2 + getty debug.
[[files]]
path = "/etc/netctl/active"
data = "wired-dhcp\n"
[[files]]
path = "/etc/init.d/10_smolnetd.service"
data = """
[unit]
description = "Network stack (non-blocking on live-mini)"
requires_weak = [
"00_driver-manager.service",
]
[service]
cmd = "netstack"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/10_dhcpd.service"
data = """
[unit]
description = "DHCP client daemon (non-blocking on live-mini)"
requires_weak = [
"10_smolnetd.service",
]
[service]
cmd = "dhcpd"
args = ["-f"]
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/11_dnsd.service"
data = """
[unit]
description = "Caching DNS daemon (loopback listener + scheme:dns)"
requires_weak = [
"10_dhcpd.service",
]
[service]
cmd = "redbear-dnsd"
type = "oneshot_async"
"""
[[files]]
path = "/etc/issue"
data = """
########## Red Bear OS #########
# Login with the following: #
# `user` #
# `root`:`password` #
################################
"""
# motd is provided by the redbear-release recipe (generated from motd.in
# template with the current git-branch version). Do NOT add a static
# motd [[files]] override here — it creates a collision with recipe
# staging and goes stale when the version bumps.
[[files]]
path = "/etc/init.d/20_audiod.service"
data = """
[unit]
description = "Audio multiplexer (non-blocking on live-mini)"
requires_weak = [
"00_base.target",
]
[service]
cmd = "audiod"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/02_usb_hotplug.service"
data = """
[unit]
description = "USB device hotplug daemon (auto-spawns class drivers)"
requires_weak = [
"00_base.target",
"00_driver-manager.service",
]
[service]
cmd = "redbear-usb-hotplugd"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/02_serial_probe.service"
data = """
[unit]
description = "Serial boot probe marker"
requires_weak = [
"00_base.target",
]
[service]
cmd = "echo"
args = ["RB_SERIAL_PROBE_OK"]
type = "oneshot"
"""
[[files]]
path = "/etc/init.d/00_gpiod.service"
data = """
[unit]
description = "GPIO controller registry"
requires_weak = [
"00_base.target",
]
[service]
cmd = "gpiod"
type = { scheme = "gpio" }
"""
[[files]]
path = "/etc/init.d/00_i2cd.service"
data = """
[unit]
description = "I2C adapter registry"
requires_weak = [
"00_base.target",
]
[service]
cmd = "i2cd"
type = { scheme = "i2c" }
"""
[[files]]
path = "/etc/init.d/00_intel-lpss-i2cd.service"
data = """
[unit]
description = "Intel LPSS I2C controller (PCI + ACPI discovery, DesignWare engine)"
requires_weak = [
"00_i2cd.service",
]
[service]
cmd = "/usr/lib/drivers/intel-lpss-i2cd"
type = { scheme = "i2c-lpss" }
"""
[[files]]
path = "/etc/init.d/00_i2c-dw-acpi.service"
data = """
[unit]
description = "DesignWare ACPI I2C controller"
requires_weak = [
"00_i2cd.service",
]
[service]
cmd = "dw-acpi-i2cd"
type = { scheme = "dw-acpi-i2c" }
"""
[[files]]
path = "/etc/init.d/00_intel-gpiod.service"
data = """
[unit]
description = "Intel ACPI GPIO registrar"
requires_weak = [
"00_gpiod.service",
"00_i2cd.service",
]
[service]
cmd = "intel-gpiod"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/00_i2c-gpio-expanderd.service"
data = """
[unit]
description = "I2C GPIO expander companion bridge"
requires_weak = [
"00_i2cd.service",
"00_gpiod.service",
]
[service]
cmd = "i2c-gpio-expanderd"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/00_i2c-hidd.service"
data = """
[unit]
description = "ACPI I2C HID bring-up daemon"
requires_weak = [
"00_i2cd.service",
"00_intel-lpss-i2cd.service",
"00_i2c-dw-acpi.service",
"00_intel-gpiod.service",
"00_i2c-gpio-expanderd.service",
]
[service]
cmd = "i2c-hidd"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/00_ucsid.service"
data = """
[unit]
description = "USB-C UCSI topology detector"
requires_weak = [
"00_base.target",
"00_i2cd.service",
]
[service]
cmd = "ucsid"
type = { scheme = "ucsi" }
"""
[[files]]
path = "/etc/init.d/12_boot-late.target"
data = """
[unit]
description = "Late boot services target"
requires_weak = [
"00_base.target",
]
"""
[[files]]
path = "/etc/init.d/11_udev.service"
data = """
[unit]
description = "udev compatibility shim"
requires_weak = [
"12_boot-late.target",
"00_driver-manager.service",
]
[service]
cmd = "udev-shim"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/10_evdevd.service"
data = """
[unit]
description = "Evdev input daemon"
requires_weak = [
"12_boot-late.target",
"00_driver-manager.service",
]
[service]
cmd = "evdevd"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/11_wifictl.service"
data = """
[unit]
description = "Wi-Fi control daemon"
requires_weak = [
"12_boot-late.target",
"00_driver-manager.service",
]
[service]
cmd = "redbear-wifictl"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/13_seatd.service"
data = """
[unit]
description = "seatd seat management (no-op on live-mini)"
[service]
cmd = "echo"
args = ["seatd: skipped on live-mini"]
type = "oneshot"
"""
[[files]]
path = "/etc/init.d/13_iommu.service"
data = """
[unit]
description = "IOMMU DMA remapping daemon"
requires_weak = [
"12_boot-late.target",
"00_driver-manager.service",
]
[service]
cmd = "/usr/bin/iommu"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/29_activate_console.service"
data = """
[unit]
description = "Activate console VT"
requires_weak = ["00_base.target"]
[service]
cmd = "inputd"
args = ["-A", "2", "-K", "us"]
type = "oneshot_async"
"""
# NOTE: cpufreqd is already started earlier by 15_cpufreqd.service (from
# redbear-device-services.toml). A second 30_cpufreqd instance used to live here
# and (a) ran cpufreqd twice — double MSR probing + a duplicate 16-line P-state
# dump — and (b) fired at getty time, burying the login banner/prompt under its
# output. Removed; the 15_ instance covers it with settle time before the prompt.
[[files]]
path = "/etc/init.d/30_console.service"
data = """
[unit]
description = "Console terminals"
requires_weak = [
"29_activate_console.service",
"00_ptyd.service",
]
[service]
cmd = "getty"
args = ["2"]
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/31_debug_console.service"
# Serial/debug console handled by fbcond's serial mirror (see minimal.toml).
data = """
[unit]
description = "Debug console (handled by fbcond serial mirror)"
[service]
cmd = "true"
type = "oneshot"
"""
[[files]]
path = "/etc/init.d/00_driver-manager.service"
data = """
[unit]
description = "Driver manager (non-blocking on live-mini)"
[service]
cmd = "driver-manager"
args = ["--hotplug"]
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/00_ipcd.service"
data = """
[unit]
description = "Inter-process communication daemon (non-blocking on live-mini)"
[service]
cmd = "ipcd"
type = "oneshot_async"
"""
[[files]]
path = "/etc/init.d/13_ftdi-probe.service"
data = """
[unit]
description = "FTDI USB serial probe (non-blocking on redbear-mini)"
requires_weak = [
"00_base.target",
]
[service]
cmd = "echo"
args = ["RB_FTDI_PROBE_OK"]
type = "oneshot"
"""
[[files]]
path = "/etc/init.d/00_ptyd.service"
data = """
[unit]
description = "Pseudo-terminal daemon"
[service]
cmd = "ptyd"
# ptyd registers the "pty" scheme and signals readiness by sending its scheme
# cap fd back to init (redox_scheme ready_sync_scheme / ready_with_fd). init's
# scheme-service startup does a call_ro(FD) to receive that fd and register the
# scheme. It MUST therefore be type={scheme="pty"} — NOT "notify". With "notify"
# init does a plain readiness-byte read_exact that ptyd never sends, so init
# blocks forever here (the observed post-switchroot boot hang before the console
# stack). See ptyd/src/main.rs: it is on the SchemeDaemon/ready_with_fd path.
type = { scheme = "pty" }
"""