Files
RedBear-OS/config/redbear-mini.toml
T
vasilito 65ab28dcc5 redbear-mini: raise filesystem_size 512 -> 2048 MB to fit the package set
The mini package set (~350 MB compressed pkgars) extracts to well over 512 MB
uncompressed on the RedoxFS image. Once the "Package base not found" installer
bug was fixed (base now installs), image assembly reached file extraction and
aborted with "No space left on device (os error 28)" filling the 512 MB image.
The installer uses filesystem_size as the literal image size (no content-based
auto-sizing), so it must be large enough for the extracted set plus live
writable headroom. 2048 MB fits with margin. Packages are grown-into, never
trimmed (project ABSOLUTE RULE).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-29 10:24:12 +09:00

551 lines
12 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]
# The mini package set (base + full driver/daemon set, brush/bash/zsh, coreutils,
# console net/diagnostic tools, iwlwifi/bluetooth firmware) is ~350 MB *compressed*
# pkgars; the RedoxFS image holds the uncompressed extraction plus live writable
# headroom, which overflows a 512 MB image (installer aborts with os error 28,
# "No space left on device"). The installer does not content-size the filesystem —
# this value is the literal image size — so it must fit the package set. 2048 MB
# leaves comfortable headroom for a text-only live/recovery target.
filesystem_size = 2048
[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" }
"""