diff --git a/config/aarch64/ci.toml b/config/aarch64/ci.toml index c44288a..1d184f3 100644 --- a/config/aarch64/ci.toml +++ b/config/aarch64/ci.toml @@ -25,6 +25,7 @@ prompt = false acid = {} acid-bins = {} base = {} +base-initfs = {} bash = {} bash-completion = {} bootloader = {} diff --git a/config/acid.toml b/config/acid.toml index 139e032..6e4e82e 100644 --- a/config/acid.toml +++ b/config/acid.toml @@ -14,10 +14,16 @@ coreutils = {} ion = {} [[files]] -path = "/usr/lib/init.d/10_acid" +path = "/usr/lib/init.d/10_acid.service" data = """ -requires_weak 00_base.target -ion /usr/lib/run_acid.ion +[unit] +description = "Acid test runner" +requires_weak = ["00_pcid-spawner.service"] + +[service] +cmd = "ion" +args = ["/usr/lib/run_acid.ion"] +type = "oneshot_async" """ [[files]] diff --git a/config/auto-test.toml b/config/auto-test.toml index e6f3032..aac5505 100644 --- a/config/auto-test.toml +++ b/config/auto-test.toml @@ -13,10 +13,16 @@ filesystem_size = 1024 auto-test = {} [[files]] -path = "/usr/lib/init.d/30_console" +path = "/usr/lib/init.d/30_console.service" data = """ -requires_weak 10_net.target -ion /usr/lib/run_tests.ion +[unit] +description = "Automated test runner" +requires_weak = ["00_base.target"] + +[service] +cmd = "ion" +args = ["/usr/lib/run_tests.ion"] +type = "oneshot" """ [[files]] diff --git a/config/base.toml b/config/base.toml index 516af8e..e7a04f3 100644 --- a/config/base.toml +++ b/config/base.toml @@ -10,6 +10,7 @@ prompt = false [packages] base = {} +base-initfs = {} bootloader = {} kernel = {} libgcc = {} @@ -21,6 +22,30 @@ userutils = {} uutils = {} ## Configuration files +[[files]] +path = "/usr/lib/init.d/00_base.service" +data = """ +[unit] +description = "Base environment setup (tmpdir)" + +[service] +cmd = "ion" +args = ["-c", "rm -rf /tmp; mkdir -m a=rwxt /tmp"] +type = "oneshot" +""" + +[[files]] +path = "/usr/lib/init.d/00_sudo.service" +data = """ +[unit] +description = "Sudo privilege daemon" + +[service] +cmd = "sudo" +args = ["--daemon"] +type = "oneshot_async" +""" + [[files]] path = "/etc/login_schemes.toml" data = """ @@ -61,13 +86,12 @@ schemes = [ "pty", "sudo", "audio", - "orbital", ] """ [[files]] path = "/etc/hostname" -data = "redox" +data = "redbear" ## Default net configuration (optimized for QEMU) [[files]] @@ -98,15 +122,16 @@ data = """ [[files]] path = "/usr/lib/os-release" data = """ -PRETTY_NAME="Redox OS 0.9.0" -NAME="Redox OS" -VERSION_ID="0.9.0" -VERSION="0.9.0" -ID="redox-os" - -HOME_URL="https://redox-os.org/" -DOCUMENTATION_URL="https://redox-os.org/docs/" -SUPPORT_URL="https://redox-os.org/community/" +PRETTY_NAME="Red Bear OS 0.1.0" +NAME="Red Bear OS" +VERSION_ID="0.1.0" +VERSION="0.1.0" +ID="redbear-os" +ID_LIKE="redox-os" + +HOME_URL="https://github.com/vasilito/Red-Bear-OS-3" +DOCUMENTATION_URL="https://doc.redox-os.org/" +SUPPORT_URL="https://github.com/vasilito/Red-Bear-OS-3/issues" """ # FIXME maybe add VARIANT= and VARIANT_ID= keys depending on the chosen configuration? @@ -176,17 +201,18 @@ path = "/share" data = "usr/share" symlink = true -## legacy orbital directories [[files]] path = "/ui" data = "usr/share/ui" symlink = true +## legacy display font directory [[files]] path = "/usr/share/ui/fonts" data = "/usr/share/fonts" symlink = true +## legacy display icon directory [[files]] path = "/usr/share/ui/icons" data = "/usr/share/icons" @@ -235,6 +261,47 @@ data = "" directory = true mode = 0o1777 +## Device file symlinks +[[files]] +path = "/dev/null" +data = "/scheme/null" +symlink = true + +[[files]] +path = "/dev/random" +data = "/scheme/rand" +symlink = true + +[[files]] +path = "/dev/urandom" +data = "/scheme/rand" +symlink = true + +[[files]] +path = "/dev/zero" +data = "/scheme/zero" +symlink = true + +[[files]] +path = "/dev/tty" +data = "libc:tty" +symlink = true + +[[files]] +path = "/dev/stdin" +data = "libc:stdin" +symlink = true + +[[files]] +path = "/dev/stdout" +data = "libc:stdout" +symlink = true + +[[files]] +path = "/dev/stderr" +data = "libc:stderr" +symlink = true + # User settings [users.root] password = "password" diff --git a/config/desktop-contain.toml b/config/desktop-contain.toml deleted file mode 100644 index a67a148..0000000 --- a/config/desktop-contain.toml +++ /dev/null @@ -1,42 +0,0 @@ -# Desktop configuration using the Contain sandbox - -include = ["desktop.toml"] - -# Override the default settings here - -# General settings -[general] -# Filesystem size in MiB -# filesystem_size = 1024 - -# Package settings -[packages] -# example = {} - -# Override orbital init to use contain_orblogin -[[files]] -path = "/usr/lib/init.d/20_orbital" -data = """ -requires_weak 10_net.target 20_audiod.service -nowait VT=3 orbital contain_orblogin launcher -""" - -# Override console init to use contain -[[files]] -path = "/usr/lib/init.d/30_console" -data = """ -requires_weak 20_orbital -nowait getty --contain 2 -nowait getty --contain /scheme/debug/no-preserve -J -""" - -[[files]] -path = "/etc/contain.toml" -data = """ -pass_schemes = ["rand", "null", "tcp", "udp", "thisproc", "pty", "orbital", "display.vesa"] -sandbox_schemes = ["file"] -files = ["file:/dev/null"] -rofiles = ["file:/etc/passwd", "file:/etc/hostname", "file:/etc/localtime"] -dirs = ["file:/tmp"] -rodirs = ["file:/bin", "file:/ui"] -""" diff --git a/config/desktop-minimal.toml b/config/desktop-minimal.toml index 8ac8f36..7aa8735 100644 --- a/config/desktop-minimal.toml +++ b/config/desktop-minimal.toml @@ -9,23 +9,55 @@ filesystem_size = 256 # Package settings [packages] -orbdata = {} -orbital = {} -orbterm = {} -orbutils = {} +orbdata = "ignore" +orbital = "ignore" +orbterm = "ignore" +orbutils = "ignore" [[files]] -path = "/usr/lib/init.d/20_orbital" +path = "/usr/lib/init.d/20_display.service" data = """ -requires_weak 10_net.target 20_audiod.service -nowait VT=3 orbital orblogin launcher +[unit] +description = "Display setup" +requires_weak = ["00_base.target"] + +[service] +cmd = "ion" +args = ["-c", "true"] +envs = { VT = "3" } +type = "oneshot_async" """ -# Override console config to not switch to VT 2 +# Override: do not activate VT 2 (desktop uses VT 3) +[[files]] +path = "/usr/lib/init.d/29_activate_console.service" +data = "" + +# Override console config to depend on display instead of VT activation [[files]] -path = "/usr/lib/init.d/30_console" +path = "/usr/lib/init.d/30_console.service" data = """ -requires_weak 20_orbital -nowait getty 2 -nowait getty /scheme/debug/no-preserve -J +[unit] +description = "Console terminals" +requires_weak = ["20_display.service"] + +[service] +cmd = "getty" +args = ["2"] +type = "oneshot_async" +respawn = true +""" + +[[files]] +path = "/usr/lib/init.d/31_debug_console.service" +data = """ +[unit] +description = "Debug console" +requires_weak = ["30_console.service"] + +[service] +cmd = "getty" +args = ["/scheme/debug/no-preserve", "-J"] +type = "oneshot_async" +respawn = true """ diff --git a/config/desktop.toml b/config/desktop.toml index c6c92c1..59ae330 100644 --- a/config/desktop.toml +++ b/config/desktop.toml @@ -9,11 +9,12 @@ filesystem_size = 650 # Package settings [packages] -cosmic-edit = {} -cosmic-files = {} -cosmic-icons = {} -cosmic-term = {} +cosmic-edit = "ignore" +cosmic-files = "ignore" +cosmic-icons = "ignore" +cosmic-term = "ignore" dejavu = {} +ext4d = {} freefont = {} hicolor-icon-theme = {} installer-gui = {} diff --git a/config/i586/ci.toml b/config/i586/ci.toml index d333d0f..3432fba 100644 --- a/config/i586/ci.toml +++ b/config/i586/ci.toml @@ -25,6 +25,7 @@ prompt = false # acid = {} # rust require dynamic linking acid-bins = {} base = {} +base-initfs = {} bash = {} bash-completion = {} bootloader = {} diff --git a/config/i586/demo.toml b/config/i586/demo.toml index 4230fc1..e4568ae 100644 --- a/config/i586/demo.toml +++ b/config/i586/demo.toml @@ -26,22 +26,23 @@ path = "/home/user/Welcome.txt" data = """ ############################################################################## # # -# Welcome to Redox! # +# Welcome to Red Bear OS! # # # -# Redox is an operating system written in Rust, a language with focus # -# on safety and high performance. Redox, following the microkernel design, # -# aims to be secure, usable, and free. Redox is inspired by previous kernels # -# and operating systems, such as SeL4, MINIX, Plan 9, and BSD. # +# Red Bear OS (RBOS) is a derivative of Redox, an operating system written # +# in Rust, a language with focus on safety and high performance. Redox, # +# following the microkernel design, aims to be secure, usable, and free. # +# Redox is inspired by previous kernels and operating systems, such as # +# SeL4, MINIX, Plan 9, and BSD. # # # -# Redox _is not_ just a kernel, it's a full-featured Operating System, # +# Red Bear OS _is not_ just a kernel, it's a full-featured Operating System, # # providing packages (memory allocator, file system, display manager, core # # utilities, etc.) that together make up a functional and convenient # # operating system. You can loosely think of it as the GNU or BSD ecosystem, # # but in a memory safe language and with modern technology. # # # -# The website can be found at https://www.redox-os.org. # +# The website can be found at https://github.com/vasilito/Red-Bear-OS-3. # # # -# For things to try on Redox, please see # +# For things to try on Red Bear OS, please see # # https://doc.redox-os.org/book/ch02-06-trying-out-redox.html # # # ############################################################################## diff --git a/config/minimal.toml b/config/minimal.toml index 7ccb60d..368e67b 100644 --- a/config/minimal.toml +++ b/config/minimal.toml @@ -17,10 +17,42 @@ pkgutils = {} kibi = {} [[files]] -path = "/usr/lib/init.d/30_console" +path = "/usr/lib/init.d/29_activate_console.service" data = """ -requires_weak 10_net.target -inputd -A 2 -nowait getty 2 -nowait getty /scheme/debug/no-preserve -J +[unit] +description = "Activate console VT" +requires_weak = ["00_base.target"] + +[service] +cmd = "inputd" +args = ["-A", "2"] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/30_console.service" +data = """ +[unit] +description = "Console terminals" +requires_weak = ["29_activate_console.service"] + +[service] +cmd = "getty" +args = ["2"] +type = "oneshot_async" +respawn = true +""" + +[[files]] +path = "/usr/lib/init.d/31_debug_console.service" +data = """ +[unit] +description = "Debug console" +requires_weak = ["29_activate_console.service"] + +[service] +cmd = "getty" +args = ["/scheme/debug/no-preserve", "-J"] +type = "oneshot_async" +respawn = true """ diff --git a/config/os-test.toml b/config/os-test.toml index 048e31f..c7ebbc9 100644 --- a/config/os-test.toml +++ b/config/os-test.toml @@ -14,9 +14,15 @@ prompt = false os-test-bins = {} # Provides source and cross-compiled binaries [[files]] -path = "/usr/lib/init.d/30_console" +path = "/usr/lib/init.d/30_console.service" data = """ -requires_weak 10_net.target -RUST_BACKTRACE=full os-test-runner -shutdown +[unit] +description = "OS test runner" +requires_weak = ["00_base.target"] + +[service] +cmd = "ion" +args = ["-c", "os-test-runner; shutdown"] +envs = { RUST_BACKTRACE = "full" } +type = "oneshot" """ diff --git a/config/redbear-bluetooth-experimental.toml b/config/redbear-bluetooth-experimental.toml new file mode 100644 index 0000000..fd8cfd0 --- /dev/null +++ b/config/redbear-bluetooth-experimental.toml @@ -0,0 +1,17 @@ +# Red Bear OS Bluetooth Experimental Profile +# +# Standalone build target for the first bounded Bluetooth slice. +# +# This profile extends the existing minimal Red Bear baseline but keeps Bluetooth wiring isolated to +# this profile instead of leaking it into the shared device-service fragments used by all images. +# The current slice is explicit-startup, USB-attached, BLE-first, and intentionally not wired to +# USB-class autospawn yet. + +include = ["redbear-minimal.toml", "redbear-bluetooth-services.toml"] + +[general] +filesystem_size = 2048 + +[packages] +redbear-btusb = {} +redbear-btctl = {} diff --git a/config/redbear-bluetooth-services.toml b/config/redbear-bluetooth-services.toml new file mode 100644 index 0000000..29408c4 --- /dev/null +++ b/config/redbear-bluetooth-services.toml @@ -0,0 +1,17 @@ +# Red Bear OS Bluetooth experimental service wiring +# +# Kept in a dedicated included fragment so the Bluetooth profile can inject +# bounded runtime files and service units without relying on profile-local +# [[files]] behavior. + +[[files]] +path = "/var/lib/bluetooth" +data = "" +directory = true +mode = 0o755 + +[[files]] +path = "/var/run/redbear-btusb" +data = "" +directory = true +mode = 0o755 diff --git a/config/redbear-device-services.toml b/config/redbear-device-services.toml new file mode 100644 index 0000000..98d546d --- /dev/null +++ b/config/redbear-device-services.toml @@ -0,0 +1,128 @@ +# Red Bear OS shared device-service wiring +# +# Shared by profiles that ship the firmware/input/Wi-Fi control compatibility stack. + +[packages] +redbear-quirks = {} +pciids = {} +fatd = {} + +[[files]] +path = "/usr/lib/init.d/12_boot-late.target" +data = """ +[unit] +description = "Late boot services target" +requires_weak = [ + "00_base.target", +] +""" + +[[files]] +path = "/lib/firmware" +data = "" +directory = true +mode = 0o755 + +[[files]] +path = "/usr/bin/usbctl" +data = "/usr/lib/drivers/usbctl" +symlink = true + +[[files]] +path = "/lib/pcid.d/intel_gpu.toml" +data = """ +# PCID configuration for Intel GPU auto-detection +[[drivers]] +name = "Intel GPU (VGA compatible)" +class = 0x03 +vendor = 0x8086 +subclass = 0x00 +command = ["redox-drm"] + +[[drivers]] +name = "Intel GPU (3D controller)" +class = 0x03 +vendor = 0x8086 +subclass = 0x02 +command = ["redox-drm"] +""" + +[[files]] +path = "/lib/pcid.d/amd_gpu.toml" +data = """ +# PCID configuration for AMD GPU auto-detection +[[drivers]] +name = "AMD GPU (VGA compatible)" +class = 0x03 +vendor = 0x1002 +subclass = 0x00 +command = ["redox-drm"] + +[[drivers]] +name = "AMD GPU (3D controller)" +class = 0x03 +vendor = 0x1002 +subclass = 0x02 +command = ["redox-drm"] +""" + +[[files]] +path = "/usr/lib/init.d/05_firmware-loader.service" +data = """ +[unit] +description = "Firmware loading scheme" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "firmware-loader" +type = { scheme = "firmware" } +""" + +[[files]] +path = "/usr/lib/init.d/11_udev.service" +data = """ +[unit] +description = "udev compatibility shim" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "udev-shim" +type = { scheme = "udev" } +""" + +[[files]] +path = "/usr/lib/init.d/11_wifictl.service" +data = """ +[unit] +description = "Wi-Fi control daemon" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", + "05_firmware-loader.service", +] + +[service] +cmd = "redbear-wifictl" +type = { scheme = "wifictl" } +""" + +[[files]] +path = "/usr/lib/init.d/10_evdevd.service" +data = """ +[unit] +description = "Evdev input daemon" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "evdevd" +type = "oneshot_async" +""" diff --git a/config/redbear-full.toml b/config/redbear-full.toml new file mode 100644 index 0000000..9aea15b --- /dev/null +++ b/config/redbear-full.toml @@ -0,0 +1,349 @@ +# Red Bear OS Full Configuration +# Desktop/graphics ISO for bare metal and QEMU. +# +# Build: make live CONFIG_NAME=redbear-full +# QEMU: make all CONFIG_NAME=redbear-full && make qemu +# +# Extends redbear-mini with the full desktop/graphics stack: +# Wayland, Qt6, KF6, KWin, Mesa, DRM drivers, firmware, greeter. + +include = ["redbear-mini.toml"] + +[general] +filesystem_size = 4096 +efi_partition_size = 16 + +[users.messagebus] +uid = 100 +gid = 100 +name = "messagebus" +home = "/nonexistent" +shell = "/usr/bin/ion" + +[packages] +# Firmware loading +redbear-firmware = {} +firmware-loader = {} + +# GPU/graphics stack +redox-drm = {} +mesa = {} +libdrm = {} + +# Wayland protocol +libwayland = {} +wayland-protocols = {} + +# Keyboard/input +libxkbcommon = {} +xkeyboard-config = {} +libevdev = {} +libinput = {} + +# Seat management +seatd = {} + +# Qt6 stack +qtbase = {} +qtdeclarative = {} +qtsvg = {} +qtwayland = {} +qt6-wayland-smoke = {} + +# KF6 Frameworks +kf6-extra-cmake-modules = {} +kf6-kcoreaddons = {} +kf6-kconfig = {} +kf6-ki18n = {} +kf6-kcolorscheme = {} +kf6-kauth = {} +kf6-kwindowsystem = {} +kf6-knotifications = {} +kf6-kconfigwidgets = {} +kf6-kcrash = {} +kf6-kdbusaddons = {} +kf6-kglobalaccel = {} +kf6-kservice = {} +kf6-kpackage = {} +kf6-kiconthemes = {} +kirigami = {} +kf6-kio = {} +kf6-kdeclarative = {} +kf6-kcmutils = {} +kf6-kwayland = {} +kdecoration = {} +kf6-kded6 = {} +kglobalacceld = {} + +# KWin Wayland compositor +kwin = {} + +# Greeter/login stack +redbear-authd = {} +redbear-session-launch = {} +redbear-greeter = {} + +# Core Red Bear umbrella package +redbear-meta = {} + +# Desktop fonts and icons +dejavu = {} +freefont = {} +hicolor-icon-theme = {} +pop-icon-theme = {} + +# Suppress legacy desktop packages +orbdata = "ignore" +orbital = "ignore" +orbterm = "ignore" +orbutils = "ignore" +cosmic-edit = "ignore" +cosmic-files = "ignore" +cosmic-icons = "ignore" +cosmic-term = "ignore" + +[[files]] +path = "/lib/firmware/amdgpu" +data = "" +directory = true +mode = 0o755 + +[[files]] +path = "/usr/lib/fonts" +data = "/usr/share/fonts" +symlink = true + +[[files]] +path = "/usr/lib/init.d/05_boot-essential.target" +data = """ +[unit] +description = "Boot essential services target" +requires_weak = [ + "00_base.target", +] +""" + +[[files]] +path = "/usr/lib/init.d/13_iommu.service" +data = """ +[unit] +description = "IOMMU DMA remapping daemon" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "/usr/bin/iommu" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/12_dbus.service" +data = """ +[unit] +description = "D-Bus system bus" +requires_weak = [ + "12_boot-late.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 = "/usr/lib/init.d/13_redbear-sessiond.service" +data = """ +[unit] +description = "Red Bear session broker (org.freedesktop.login1)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-sessiond" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/13_seatd.service" +data = """ +[unit] +description = "seatd seat management daemon" +requires_weak = [ + "12_dbus.service", + "13_redbear-sessiond.service", +] + +[service] +cmd = "/usr/bin/seatd" +args = ["-l", "info"] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/14_redbear-upower.service" +data = """ +[unit] +description = "UPower D-Bus service (org.freedesktop.UPower)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-upower" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/14_redbear-udisks.service" +data = """ +[unit] +description = "UDisks2 D-Bus service (org.freedesktop.UDisks2)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-udisks" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/14_redbear-polkit.service" +data = """ +[unit] +description = "PolicyKit1 D-Bus service (org.freedesktop.PolicyKit1)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-polkit" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/19_redbear-authd.service" +data = """ +[unit] +description = "Red Bear authentication daemon" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "/usr/bin/redbear-authd" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/20_greeter.service" +data = """ +[unit] +description = "Red Bear greeter service" +requires_weak = [ + "12_dbus.service", + "13_redbear-sessiond.service", + "13_seatd.service", + "19_redbear-authd.service", +] + +[service] +cmd = "/usr/bin/redbear-greeterd" +envs = { VT = "3", REDBEAR_GREETER_USER = "greeter" } +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/29_activate_console.service" +data = """ +[unit] +description = "Activate fallback console VT" +requires_weak = [ + "05_boot-essential.target", +] + +[service] +cmd = "inputd" +args = ["-A", "2"] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/30_console.service" +data = """ +[unit] +description = "Console terminals" +requires_weak = [ + "29_activate_console.service", +] + +[service] +cmd = "getty" +args = ["2"] +type = "oneshot_async" +respawn = true +""" + +[[files]] +path = "/usr/lib/init.d/31_debug_console.service" +data = """ +[unit] +description = "Debug console" +requires_weak = [ + "29_activate_console.service", +] + +[service] +cmd = "getty" +args = ["/scheme/debug/no-preserve", "-J"] +type = "oneshot_async" +respawn = true +""" + +[users.greeter] +password = "" +uid = 101 +gid = 101 +name = "greeter" +home = "/nonexistent" +shell = "/usr/bin/ion" + +[groups.greeter] +gid = 101 +members = ["greeter"] + +[[files]] +path = "/etc/pcid.d/ihdgd.toml" +data = """ +[[drivers]] +name = "Intel GPU (VGA compatible)" +class = 0x03 +vendor = 0x8086 +subclass = 0x00 +command = ["redox-drm"] + +[[drivers]] +name = "Intel GPU (3D controller)" +class = 0x03 +vendor = 0x8086 +subclass = 0x02 +command = ["redox-drm"] +""" + +[[files]] +path = "/etc/pcid.d/virtio-gpud.toml" +data = """ +[[drivers]] +name = "VirtIO GPU" +class = 0x03 +vendor = 0x1af4 +subclass = 0x00 +command = ["redox-drm"] +""" diff --git a/config/redbear-greeter-services.toml b/config/redbear-greeter-services.toml new file mode 100644 index 0000000..d20b0e2 --- /dev/null +++ b/config/redbear-greeter-services.toml @@ -0,0 +1,126 @@ +# Red Bear greeter/login service wiring +# +# This fragment is intended to be included by the active desktop/graphics target. + +[[files]] +path = "/usr/lib/init.d/05_boot-essential.target" +data = """ +[unit] +description = "Boot essential services target" +requires_weak = [ + "00_base.target", +] +""" + +[users.greeter] +password = "" +uid = 101 +gid = 101 +name = "greeter" +home = "/nonexistent" +shell = "/usr/bin/ion" + +[groups.greeter] +gid = 101 +members = ["greeter"] + +[packages] +redbear-authd = {} +redbear-session-launch = {} +redbear-greeter = {} + +[[files]] +path = "/usr/lib/init.d/19_redbear-authd.service" +data = """ +[unit] +description = "Red Bear authentication daemon" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "ion" +args = [ + "-c", + "redbear-authd", +] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/20_display.service" +data = """ +[unit] +description = "Compositor proof (Phase 2: KWin virtual + Qt6 smoke + 60s survival)" +requires_weak = [ + "12_dbus.service", + "13_redbear-sessiond.service", + "13_seatd.service", +] + +[service] +cmd = "redbear-validation-session" +envs = { VT = "3" } +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/20_greeter.service" +data = """ +[unit] +description = "Red Bear greeter service (disabled for Phase 2 compositor proof; re-enable for Phase 3 user sessions)" +requires_weak = [ +] + +[service] +cmd = "ion" +args = ["-c", "true"] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/30_console.service" +data = """ +[unit] +description = "Console terminals" +requires_weak = [ + "29_activate_console.service", +] + +[service] +cmd = "getty" +args = ["2"] +type = "oneshot_async" +respawn = true +""" + +[[files]] +path = "/usr/lib/init.d/29_activate_console.service" +data = """ +[unit] +description = "Activate fallback console VT" +requires_weak = [ + "05_boot-essential.target", +] + +[service] +cmd = "inputd" +args = ["-A", "2"] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/31_debug_console.service" +data = """ +[unit] +description = "Debug console" +requires_weak = [ + "29_activate_console.service", +] + +[service] +cmd = "getty" +args = ["/scheme/debug/no-preserve", "-J"] +type = "oneshot_async" +respawn = true +""" diff --git a/config/redbear-grub-policy.toml b/config/redbear-grub-policy.toml new file mode 100644 index 0000000..33e8098 --- /dev/null +++ b/config/redbear-grub-policy.toml @@ -0,0 +1,9 @@ +# Red Bear OS shared GRUB policy fragment +# Use with any redbear-* profile to make GRUB first-class in installer flows. + +[general] +bootloader = "grub" +efi_partition_size = 16 + +[packages] +grub = {} diff --git a/config/redbear-grub.toml b/config/redbear-grub.toml new file mode 100644 index 0000000..27e3e2f --- /dev/null +++ b/config/redbear-grub.toml @@ -0,0 +1,16 @@ +# Red Bear OS GRUB Configuration +# Text-only ISO with GRUB boot manager for bare metal. +# +# Build: make live CONFIG_NAME=redbear-grub +# +# Identical to redbear-mini but uses GNU GRUB as the boot manager +# instead of the Redox EFI bootloader. + +include = ["redbear-mini.toml", "redbear-grub-policy.toml"] + +[general] +bootloader = "grub" +efi_partition_size = 16 + +[packages] +grub = {} diff --git a/config/redbear-legacy-base.toml b/config/redbear-legacy-base.toml new file mode 100644 index 0000000..1c2a273 --- /dev/null +++ b/config/redbear-legacy-base.toml @@ -0,0 +1,52 @@ +# Red Bear OS overrides for base init services. +# +# 00_base.service: stripped base setup (tmpdir only, no sudo — sudo runs from +# base.toml's 00_sudo.service). ipcd and ptyd are started by +# 00_ipcd.service and 00_ptyd.service from the base recipe. +# 00_drivers / 10_net: no longer overridden — the legacy scripts were removed +# from base.toml. pcid-spawner is started by 00_pcid-spawner.service +# from the base recipe; smolnetd/dhcpd have their own .service files. +# 00_pcid-spawner.service: overridden to oneshot_async. The base recipe uses +# type="oneshot" which blocks init until pcid-spawner exits. On real +# hardware (and QEMU), pcid-spawner can hang waiting for a PCI device +# driver that never responds, blocking the entire rootfs phase including +# getty/login. Using oneshot_async lets init proceed to start console +# services while drivers spawn in the background. + +[packages] +zsh = {} + +[[files]] +path = "/usr/lib/init.d/00_base.service" +data = """ +[unit] +description = "Base environment setup (tmpdir)" + +[service] +cmd = "ion" +args = ["-c", "rm -rf /tmp; mkdir -m a=rwxt /tmp"] +type = "oneshot" +""" + +[[files]] +path = "/etc/init.d/20_audiod.service" +data = """ +[unit] +description = "Audio multiplexer" +default_dependencies = false + +[service] +cmd = "audiod" +type = "oneshot_async" +""" + +[[files]] +path = "/etc/init.d/00_pcid-spawner.service" +data = """ +[unit] +description = "PCI driver spawner (non-blocking)" + +[service] +cmd = "pcid-spawner" +type = "oneshot_async" +""" diff --git a/config/redbear-legacy-desktop.toml b/config/redbear-legacy-desktop.toml new file mode 100644 index 0000000..34b0e7e --- /dev/null +++ b/config/redbear-legacy-desktop.toml @@ -0,0 +1,18 @@ +# Red Bear OS overrides for legacy desktop init services. +# Blank the display and console services inherited from desktop-minimal.toml. + +[[files]] +path = "/usr/lib/init.d/20_display.service" +data = "" + +[[files]] +path = "/usr/lib/init.d/29_activate_console.service" +data = "" + +[[files]] +path = "/usr/lib/init.d/30_console.service" +data = "" + +[[files]] +path = "/usr/lib/init.d/31_debug_console.service" +data = "" diff --git a/config/redbear-mini.toml b/config/redbear-mini.toml new file mode 100644 index 0000000..9b5cb60 --- /dev/null +++ b/config/redbear-mini.toml @@ -0,0 +1,456 @@ +# 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 +# - all non-graphics, non-firmware packages from the full profile +# - no linux-firmware payload, no firmware-loader, no GPU/display drivers + +include = ["minimal.toml", "redbear-legacy-base.toml", "redbear-netctl.toml"] + +[general] +filesystem_size = 1536 + +[users.messagebus] +uid = 100 +gid = 100 +name = "messagebus" +home = "/nonexistent" +shell = "/usr/bin/ion" + +[packages] +# Red Bear OS branding and host utilities. +redbear-release = {} +redbear-hwutils = {} +redbear-quirks = {} + +# Redox-native netctl tooling. +redbear-netctl = {} +redbear-netctl-console = {} +redbear-netstat = {} +redbear-traceroute = {} +redbear-mtr = {} +redbear-nmap = {} + +# Wi-Fi control daemon (firmware-loader excluded — no firmware blobs in mini). +redbear-wifictl = {} + +# Diagnostics and shell-side utilities. +mc = {} +redbear-info = {} + +# Keep package builder utility in live environment. +cub = {} + +# ── PCI device database (critical for pcid-spawner driver matching) ── +pciids = {} + +# ── Filesystem support ── +ext4d = {} +fatd = {} +redoxfs = {} + +# ── System installer ── +installer = {} + +# ── Input / device management ── +evdevd = {} +udev-shim = {} + +# ── D-Bus IPC and session services ── +dbus = {} +redbear-sessiond = {} +redbear-dbus-services = {} +redbear-notifications = {} +redbear-upower = {} +redbear-udisks = {} +redbear-polkit = {} + +# ── IOMMU DMA remapping ── +iommu = {} + +# ── Standard CLI tools (from server profile) ── +bash = {} +bottom = {} +curl = {} +diffutils = {} +findutils = {} +git = {} +htop = {} + +# ── Build / packaging utilities ── +patchelf = {} +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_pcid-spawner.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/issue" +data = """ +########## Red Bear OS ######### +# Login with the following: # +# `user` # +# `root`:`password` # +################################ +""" + +[[files]] +path = "/etc/motd" +data = """ + + _ _ + | | (_) + | | ___ _ ___ _ __ _ _ ___ + | |/ / || |/ _ \\ | '_ \\| | | / __| + | < | || | (_) || |_) | |_| \\__ \\ + |_|\\_\\|_|/ |\\___/ | .__/ \\__,_|___/ + |__/ | | + |_| + + Red Bear OS v0.2.0 "Liliya" — Built on Redox OS + Type 'help' for available commands. +""" + +[[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_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 (non-blocking on live-mini)" +requires_weak = [ + "00_base.target", +] + +[service] +cmd = "gpiod" +type = "oneshot_async" +""" + +[[files]] +path = "/etc/init.d/00_i2cd.service" +data = """ +[unit] +description = "I2C adapter registry (non-blocking on live-mini)" +requires_weak = [ + "00_base.target", +] + +[service] +cmd = "i2cd" +type = "oneshot_async" +""" + +[[files]] +path = "/etc/init.d/00_i2c-dw-acpi.service" +data = """ +[unit] +description = "DesignWare ACPI I2C controller (non-blocking)" +requires_weak = [ + "00_i2cd.service", +] + +[service] +cmd = "dw-acpi-i2cd" +type = "oneshot_async" +""" + +[[files]] +path = "/etc/init.d/00_intel-gpiod.service" +data = """ +[unit] +description = "Intel ACPI GPIO registrar (non-blocking)" +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 (non-blocking on live-mini)" +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 (non-blocking)" +requires_weak = [ + "00_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 (non-blocking on live-mini)" +requires_weak = [ + "00_base.target", + "00_i2cd.service", +] + +[service] +cmd = "ucsid" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/12_boot-late.target" +data = """ +[unit] +description = "Late boot services target" +requires_weak = [ + "00_base.target", +] +""" + +[[files]] +path = "/usr/lib/init.d/11_udev.service" +data = """ +[unit] +description = "udev compatibility shim" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "udev-shim" +type = { scheme = "udev" } +""" + +[[files]] +path = "/usr/lib/init.d/10_evdevd.service" +data = """ +[unit] +description = "Evdev input daemon" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "evdevd" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/11_wifictl.service" +data = """ +[unit] +description = "Wi-Fi control daemon" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "redbear-wifictl" +type = { scheme = "wifictl" } +""" + +[[files]] +path = "/usr/lib/init.d/12_dbus.service" +data = """ +[unit] +description = "D-Bus system bus" +requires_weak = [ + "12_boot-late.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 = "/usr/lib/init.d/13_redbear-sessiond.service" +data = """ +[unit] +description = "Red Bear session broker (org.freedesktop.login1)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-sessiond" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/13_iommu.service" +data = """ +[unit] +description = "IOMMU DMA remapping daemon" +requires_weak = [ + "12_boot-late.target", + "00_pcid-spawner.service", +] + +[service] +cmd = "/usr/bin/iommu" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/14_redbear-upower.service" +data = """ +[unit] +description = "UPower D-Bus service (org.freedesktop.UPower)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-upower" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/14_redbear-udisks.service" +data = """ +[unit] +description = "UDisks2 D-Bus service (org.freedesktop.UDisks2)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-udisks" +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/14_redbear-polkit.service" +data = """ +[unit] +description = "PolicyKit1 D-Bus service (org.freedesktop.PolicyKit1)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "redbear-polkit" +type = "oneshot_async" +""" + +[[files]] +path = "/var/lib/dbus" +data = "" +directory = true +mode = 0o755 + +[[files]] +path = "/run/dbus" +data = "" +directory = true +mode = 0o755 + +[[files]] +path = "/etc/pcid.d/ihdgd.toml" +data = """ +# redbear-live-mini: text-only image; override upstream ihdgd config with empty file +""" + +[[files]] +path = "/etc/pcid.d/virtio-gpud.toml" +data = """ +# redbear-live-mini: text-only image; override upstream virtio-gpud config with empty file +""" + +[[files]] +path = "/etc/pcid.d/00_text_mode_gpu_mask.toml" +data = """ +# redbear-live-mini: no display driver matched; class 0x03 devices are skipped +""" diff --git a/config/redbear-netctl.toml b/config/redbear-netctl.toml new file mode 100644 index 0000000..b50a061 --- /dev/null +++ b/config/redbear-netctl.toml @@ -0,0 +1,106 @@ +# Red Bear OS shared network profile wiring +# +# Shared by redbear-minimal, redbear-desktop, redbear-full, and redbear-kde. + +[[files]] +path = "/etc/netctl" +data = "" +directory = true +mode = 0o755 + +[[files]] +path = "/etc/netctl/examples" +data = "" +directory = true +mode = 0o755 + +[[files]] +path = "/etc/netctl/examples/wired-dhcp" +data = """ +Description='Red Bear wired DHCP profile' +Interface=eth0 +Connection=ethernet +IP=dhcp +""" + +[[files]] +path = "/etc/netctl/wired-dhcp" +data = """ +Description='Red Bear wired DHCP profile' +Interface=eth0 +Connection=ethernet +IP=dhcp +""" + +[[files]] +path = "/etc/netctl/examples/wired-static" +data = """ +Description='Red Bear wired static profile' +Interface=eth0 +Connection=ethernet +IP=static +Address=('192.168.1.10/24') +Gateway='192.168.1.1' +DNS=('1.1.1.1') +""" + +[[files]] +path = "/etc/netctl/examples/wifi-dhcp" +data = """ +Description='Red Bear Wi-Fi DHCP profile' +Interface=wlan0 +Connection=wifi +SSID='example-ssid' +Security=wpa2-psk +Key='example-passphrase' +IP=dhcp +""" + +[[files]] +path = "/etc/netctl/examples/wifi-open" +data = """ +Description='Red Bear Wi-Fi open-network profile' +Interface=wlan0 +Connection=wifi +SSID='example-open-ssid' +Security=open +IP=dhcp +""" + +[[files]] +path = "/etc/netctl/examples/wifi-open-bounded" +data = """ +Description='Red Bear Wi-Fi bounded lifecycle profile' +Interface=wlan0 +Connection=wifi +SSID='example-open-ssid' +Security=open +IP=bounded +""" + +[[files]] +path = "/etc/netctl/wifi-open-bounded" +data = """ +Description='Red Bear Wi-Fi bounded lifecycle profile' +Interface=wlan0 +Connection=wifi +SSID='example-open-ssid' +Security=open +IP=bounded +""" + +[[files]] +path = "/usr/lib/init.d/12_netctl.service" +data = """ +[unit] +description = "Network profile application" +requires_weak = [ + "10_smolnetd.service", + "10_dhcpd.service", +] + +[service] +cmd = "redbear-netctl" +args = ["--boot"] +type = "oneshot_async" +""" diff --git a/config/redbear-wifi-experimental.toml b/config/redbear-wifi-experimental.toml new file mode 100644 index 0000000..350eb5a --- /dev/null +++ b/config/redbear-wifi-experimental.toml @@ -0,0 +1,20 @@ +# Red Bear OS Wi-Fi Experimental Profile +# +# Standalone tracked build target for the current bounded Intel Wi-Fi slice. +# +# This profile extends the existing minimal Red Bear baseline but switches the default active profile +# to the bounded Wi-Fi path and adds the first Intel driver-side package on top of the shared +# firmware/control/profile tooling. + +include = ["redbear-minimal.toml"] + +[general] +filesystem_size = 2048 + +[packages] +# First bounded Intel driver-side package +redbear-iwlwifi = {} + +[[files]] +path = "/etc/netctl/active" +data = "wifi-open-bounded\n" diff --git a/config/redoxer-gui.toml b/config/redoxer-gui.toml index bc50407..8aa1863 100644 --- a/config/redoxer-gui.toml +++ b/config/redoxer-gui.toml @@ -9,10 +9,15 @@ orbital = {} # Override to run inside of orbital [[files]] -path = "/usr/lib/init.d/30_redoxer" +path = "/usr/lib/init.d/30_redoxer.service" data = """ -requires_weak 10_net.target -echo -echo "## running redoxer in orbital ##" -nowait VT=3 orbital redoxerd +[unit] +description = "Redoxer GUI test (orbital)" +requires_weak = ["10_dhcpd.service"] + +[service] +cmd = "orbital" +args = ["redoxerd"] +envs = { VT = "3" } +type = "oneshot_async" """ diff --git a/config/redoxer.toml b/config/redoxer.toml index ce04443..6875066 100644 --- a/config/redoxer.toml +++ b/config/redoxer.toml @@ -15,26 +15,42 @@ pkgutils = {} relibc = {} sed = {} -# Override to not background dhcpd +# Override network services for redoxer (foreground dhcpd) +[[files]] +path = "/usr/lib/init.d/10_smolnetd.service" +data = """ +[unit] +description = "Network stack for redoxer" +requires_weak = ["00_pcid-spawner.service"] + +[service] +cmd = "netstack" +type = "oneshot_async" +""" + [[files]] path = "/usr/lib/init.d/10_dhcpd.service" data = """ [unit] -description = "Network configuration using DHCP" -requires_weak = [ - "10_smolnetd.service", -] +description = "DHCP client (foreground) for redoxer" +requires_weak = ["10_smolnetd.service"] [service] cmd = "dhcpd" -type = "oneshot" +type = "oneshot_async" """ [[files]] -path = "/usr/lib/init.d/30_redoxer" +path = "/usr/lib/init.d/30_redoxer.service" data = """ -requires_weak 10_net.target -ion /usr/lib/run_redoxer.ion +[unit] +description = "Redoxer test runner" +requires_weak = ["10_dhcpd.service"] + +[service] +cmd = "ion" +args = ["/usr/lib/run_redoxer.ion"] +type = "oneshot_async" """ [[files]] diff --git a/config/riscv64gc/ci.toml b/config/riscv64gc/ci.toml index ef207e7..382a421 100644 --- a/config/riscv64gc/ci.toml +++ b/config/riscv64gc/ci.toml @@ -25,6 +25,7 @@ prompt = false # acid = {} # rust require dynamic linking acid-bins = {} base = {} +base-initfs = {} bash = {} bash-completion = {} bootloader = {} diff --git a/config/sys-build.toml b/config/sys-build.toml index 9534edd..7f75662 100644 --- a/config/sys-build.toml +++ b/config/sys-build.toml @@ -14,10 +14,16 @@ bottom = "ignore" kibi = "ignore" [[files]] -path = "/usr/lib/init.d/30_console" +path = "/usr/lib/init.d/30_console.service" data = """ -requires_weak 10_net -ion /usr/lib/sys_build.ion +[unit] +description = "System build test" +requires_weak = ["00_base.target"] + +[service] +cmd = "ion" +args = ["/usr/lib/sys_build.ion"] +type = "oneshot" """ [[files]] diff --git a/config/wayland.toml b/config/wayland.toml index 1bf8d30..a91f005 100644 --- a/config/wayland.toml +++ b/config/wayland.toml @@ -1,94 +1,351 @@ -# Wayland configuration +# Wayland validation-only configuration -include = ["desktop.toml"] +# This is the bounded compositor validation slice. -# Override the default settings here +include = ["desktop.toml", "redbear-legacy-base.toml", "redbear-legacy-desktop.toml", "redbear-device-services.toml", "redbear-netctl.toml"] -# General settings [general] -# Filesystem size in MiB filesystem_size = 2048 -# Package settings +[users.messagebus] +uid = 100 +gid = 100 +name = "messagebus" +home = "/nonexistent" +shell = "/usr/bin/false" + +[groups.messagebus] +gid = 100 +members = ["messagebus"] + [packages] -adwaita-icon-theme = {} -bash = {} -cosmic-app-library = {} -cosmic-comp = {} -gtk3 = {} -libcosmic-wayland = {} -libxcursor = {} -iced-wayland = {} +redbear-release = {} +redbear-hwutils = {} +redbear-info = {} +redbear-netctl = {} +dbus = {} +redbear-sessiond = {} +redbear-dbus-services = {} +firmware-loader = {} +evdevd = {} +udev-shim = {} +seatd = {} mesa = {} "pop-icon-theme.cursors" = {} -smallvil = {} -softbuffer-wayland = {} -wayland-rs = {} -#webkitgtk3 = {} -winit-wayland = {} +kwin = {} xkeyboard-config = {} -# Overridden to launch wayland compositor instead of orblogin [[files]] -path = "/usr/lib/init.d/20_orbital" +path = "/usr/lib/init.d/12_dbus.service" data = """ -requires_weak 10_net.target 20_audiod.service -nowait BROWSER=/bin/netsurf-fb VT=3 orbital orbital-wayland +[unit] +description = "D-Bus system bus" +requires_weak = [ + "00_base.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 = "/usr/bin/orbital-wayland" +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 = """ +[unit] +description = "seatd seat management daemon" +requires_weak = [ + "12_dbus.service", + "13_redbear-sessiond.service", +] + +[service] +cmd = "seatd" +args = ["-l", "info"] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/13_redbear-sessiond.service" +data = """ +[unit] +description = "Red Bear session broker (org.freedesktop.login1)" +requires_weak = [ + "12_dbus.service", +] + +[service] +cmd = "ion" +args = [ + "-c", + "redbear-sessiond", +] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/20_display.service" +data = """ +[unit] +description = "Display session service (Wayland validation)" +requires_weak = [ + "12_dbus.service", + "13_redbear-sessiond.service", + "13_seatd.service", +] + +[service] +cmd = "/usr/bin/redbear-validation-session" +envs = { BROWSER = "/bin/netsurf-fb", VT = "3" } +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/30_console.service" data = """ -#!/usr/bin/env bash +[unit] +description = "Console terminals" +requires_weak = [ + "29_activate_console.service", +] -set -ex +[service] +cmd = "getty" +args = ["2"] +type = "oneshot_async" +respawn = true +""" -# Prepare environment -unset DISPLAY -export COSMIC_BACKEND=winit -export HOME=/root -export LD_DEBUG=all +[[files]] +path = "/usr/lib/init.d/29_activate_console.service" +data = """ +[unit] +description = "Activate display VT" +requires_weak = [ + "20_display.service", +] + +[service] +cmd = "inputd" +args = ["-A", "3"] +type = "oneshot_async" +""" + +[[files]] +path = "/usr/lib/init.d/31_debug_console.service" +data = """ +[unit] +description = "Debug console" +requires_weak = [ + "29_activate_console.service", +] + +[service] +cmd = "getty" +args = ["/scheme/debug/no-preserve", "-J"] +type = "oneshot_async" +respawn = true +""" + +[[files]] +path = "/usr/bin/redbear-validation-session" +mode = 0o755 +data = """ +#!/usr/bin/env sh + +export DISPLAY="" +export WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-0}" +export XDG_SESSION_TYPE=wayland +export LIBSEAT_BACKEND=seatd +export SEATD_SOCK=/run/seatd.sock +export QT_PLUGIN_PATH=/usr/plugins +export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/plugins/platforms +export QML2_IMPORT_PATH=/usr/qml export RUST_BACKTRACE=full export RUST_LOG=debug export XCURSOR_THEME=Pop -export XDG_RUNTIME_DIR=/tmp/run/user/0 +export XKB_CONFIG_ROOT=/usr/share/X11/xkb + +if [ -z "${XDG_RUNTIME_DIR:-}" ]; then + export XDG_RUNTIME_DIR="/tmp/run/user/$(id -u)" +fi + +mkdir -p "$XDG_RUNTIME_DIR" +chmod 700 "$XDG_RUNTIME_DIR" 2>/dev/null || true + +wait_for_path() { + target="$1" + attempts=0 + while [ "$attempts" -lt 30 ]; do + if [ -e "$target" ]; then + return 0 + fi + attempts=$((attempts + 1)) + sleep 1 + done + return 1 +} + +if ! wait_for_path /run/dbus/system_bus_socket; then + echo "system D-Bus socket did not appear" >&2 + exit 1 +fi -# Create XDG runtime directory -#TODO: mkdir -p not working -mkdir -p /tmp/run -mkdir -p /tmp/run/user -mkdir -p /tmp/run/user/0 +sleep 2 -# Compile glib schemas -glib-compile-schemas /usr/share/glib-2.0/schemas/ +wait_for_wayland_socket() { + socket_path="$XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" + attempts=0 + while [ "$attempts" -lt 30 ]; do + if [ -e "$socket_path" ]; then + return 0 + fi + if ! kill -0 "$kwin_pid" 2>/scheme/null; then + return 1 + fi + attempts=$((attempts + 1)) + sleep 1 + done + return 1 +} -# For cosmic-comp (more features) -cosmic-comp wayland-session +if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then + eval "$(dbus-launch --sh-syntax)" +fi -# For smallvil (easier to debug) -#smallvil -c wayland-session& +dbus-update-activation-environment \ + DBUS_SESSION_BUS_ADDRESS \ + DBUS_SESSION_BUS_PID \ + WAYLAND_DISPLAY \ + XDG_SESSION_TYPE \ + XDG_RUNTIME_DIR \ + DISPLAY \ + HOME \ + USER + +if [ -d /usr/share/glib-2.0/schemas ]; then + glib-compile-schemas /usr/share/glib-2.0/schemas/ +fi + +export XCURSOR_THEME="${XCURSOR_THEME:-Pop}" +export XKB_CONFIG_ROOT="${XKB_CONFIG_ROOT:-/usr/share/X11/xkb}" + +if [ -z "${KWIN_DRM_DEVICES:-}" ] && [ -e /scheme/drm/card0 ]; then + export KWIN_DRM_DEVICES=/scheme/drm/card0 +fi + +redbear-compositor --drm & +kwin_pid=$! + +if ! wait_for_wayland_socket; then + echo "kwin_wayland failed to expose $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY" >&2 + exit 1 +fi + +exec /usr/bin/wayland-session """ [[files]] path = "/usr/bin/wayland-session" mode = 0o755 data = """ -#!/usr/bin/env bash - -set -ex - -#env G_MAIN_POLL_DEBUG=1 G_MESSAGES_DEBUG=all LD_DEBUG=all WEBKIT_DEBUG=all MiniBrowser& -printenv -#wayland-rs_simple-window -#winit-wayland_window -#softbuffer-wayland_animation -#iced-wayland_sctk_lazy -libcosmic-wayland_application -#gtk3-widget-factory -#cosmic-app-library run +#!/usr/bin/env ion + +export HOME=/home/root +export USER=root +export LOGNAME=root + +let session_started = "$HOME/.wayland-session.started" +rm -f $session_started +echo "started" > $session_started +export QT_PLUGIN_PATH=/usr/plugins +export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/plugins/platforms +export QML2_IMPORT_PATH=/usr/qml +let smoke_ok = "$HOME/.qt6-wayland-smoke.ok" +let smoke_err = "$HOME/.qt6-wayland-smoke.err" +let smoke_log = "$HOME/.qt6-wayland-smoke.log" +let bootstrap_ok = "$HOME/.qt6-bootstrap-minimal.ok" +let bootstrap_log = "$HOME/.qt6-bootstrap-minimal.log" +let plugin_ok = "$HOME/.qt6-plugin-minimal.ok" +let plugin_err = "$HOME/.qt6-plugin-minimal.err" +let plugin_log = "$HOME/.qt6-plugin-minimal.log" +let smoke_minimal_ok = "$HOME/.qt6-wayland-smoke-minimal.ok" +let smoke_offscreen_ok = "$HOME/.qt6-wayland-smoke-offscreen.ok" +let smoke_wayland_ok = "$HOME/.qt6-wayland-smoke-wayland.ok" +let smoke_minimal_log = "$HOME/.qt6-wayland-smoke-minimal.log" +let smoke_offscreen_log = "$HOME/.qt6-wayland-smoke-offscreen.log" +let smoke_wayland_log = "$HOME/.qt6-wayland-smoke-wayland.log" +rm -f $smoke_ok $smoke_err +rm -f $smoke_log +rm -f $bootstrap_ok $bootstrap_log +rm -f $plugin_ok $plugin_err $plugin_log +rm -f $smoke_minimal_ok $smoke_offscreen_ok $smoke_wayland_ok +rm -f $smoke_minimal_log $smoke_offscreen_log $smoke_wayland_log +if which qt6-wayland-smoke >/scheme/null + if test -f /usr/plugins/platforms/libqminimal.so + echo "=== qminimal ELF header (guest) ===" + stat /usr/plugins/platforms/libqminimal.so + dd if=/usr/plugins/platforms/libqminimal.so bs=64 count=1 | od -An -tx1 + else + echo "=== qminimal ELF header (guest) missing ===" + end + if env LD_DEBUG=all QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=minimal qt6-bootstrap-check > $bootstrap_log ^> $bootstrap_log + touch $bootstrap_ok + else + if test -f $bootstrap_log + cat $bootstrap_log + end + echo "qt6-bootstrap-check minimal failed; see $bootstrap_log" > $smoke_err + end + + if env LD_DEBUG=all QT_DEBUG_PLUGINS=1 QT_PLUGIN_PATH=/usr/plugins QT_QPA_PLATFORM_PLUGIN_PATH=/usr/plugins/platforms qt6-plugin-check /usr/plugins/platforms/libqminimal.so > $plugin_log ^> $plugin_log + touch $plugin_ok + else + if test -f $plugin_log + cat $plugin_log + end + echo "qt6-plugin-check failed; see $plugin_log" > $plugin_err + echo "qt6-plugin-check failed; see $plugin_log" > $smoke_err + end + + if env QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=minimal qt6-wayland-smoke > $smoke_minimal_log ^> $smoke_minimal_log + touch $smoke_minimal_ok + else + echo "qt6-wayland-smoke minimal failed; see $smoke_minimal_log" > $smoke_err + end + + if env QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=offscreen qt6-wayland-smoke > $smoke_offscreen_log ^> $smoke_offscreen_log + touch $smoke_offscreen_ok + else + echo "qt6-wayland-smoke offscreen failed; see $smoke_offscreen_log" > $smoke_err + end + + if env QT_DEBUG_PLUGINS=1 QT_QPA_PLATFORM=wayland qt6-wayland-smoke > $smoke_wayland_log ^> $smoke_wayland_log + touch $smoke_wayland_ok + touch $smoke_ok + else + echo "qt6-wayland-smoke wayland failed; see $smoke_wayland_log" > $smoke_err + end +end """ + [[files]] path = "/etc/gtk-3.0/settings.ini" data = """ diff --git a/config/x11.toml b/config/x11.toml index 06de655..6534874 100644 --- a/config/x11.toml +++ b/config/x11.toml @@ -1,4 +1,8 @@ -# X11 configuration +# X11 compatibility-only configuration + +# This profile is not a primary desktop path. +# Red Bear OS treats KWin Wayland as the production compositor/session path. +# X exists only for compatibility and legacy app/runtime surfaces. include = ["desktop.toml"] @@ -23,10 +27,16 @@ x11-full = {} zenity = {} [[files]] -path = "/usr/lib/init.d/10_dbus" +path = "/usr/lib/init.d/10_dbus.service" data = """ -requires_weak 10_net.target -bash /usr/bin/start-dbus.sh +[unit] +description = "D-Bus system bus (X11)" +requires_weak = ["00_base.target"] + +[service] +cmd = "bash" +args = ["/usr/bin/start-dbus.sh"] +type = "oneshot_async" """ [[files]] @@ -45,18 +55,31 @@ dbus-daemon --system """ [[files]] -path = "/usr/lib/init.d/10_xenv" +path = "/usr/lib/init.d/10_xenv.service" data = """ -requires_weak 10_net.target -glib-compile-schemas /usr/share/glib-2.0/schemas/ +[unit] +description = "Compile glib schemas" +requires_weak = ["00_base.target"] + +[service] +cmd = "glib-compile-schemas" +args = ["/usr/share/glib-2.0/schemas/"] +type = "oneshot" """ # Overridden to launch X instead of orblogin [[files]] -path = "/usr/lib/init.d/20_orbital" +path = "/usr/lib/init.d/20_orbital.service" data = """ -requires_weak 10_dbus 10_xenv 20_audiod.service -nowait BROWSER=/bin/netsurf-fb VT=3 orbital orbital-x11 +[unit] +description = "Orbital display (X11)" +requires_weak = ["10_dbus.service", "10_xenv.service"] + +[service] +cmd = "orbital" +args = ["orbital-x11"] +envs = { BROWSER = "/bin/netsurf-fb", VT = "3" } +type = "oneshot_async" """ [[files]] @@ -124,10 +147,35 @@ mate-session& """ +# Override console config to set DISPLAY=:0 +[[files]] +path = "/usr/lib/init.d/30_console.service" +data = """ +[unit] +description = "Console terminals (X11)" +requires_weak = ["20_orbital.service"] + +[service] +cmd = "getty" +args = ["2"] +envs = { DISPLAY = ":0" } +type = "oneshot_async" +respawn = true +""" + [[files]] -path = "/usr/lib/environment.d/10_x11" +path = "/usr/lib/init.d/31_debug_console.service" data = """ -DISPLAY=:0 +[unit] +description = "Debug console (X11)" +requires_weak = ["30_console.service"] + +[service] +cmd = "getty" +args = ["/scheme/debug/no-preserve", "-J"] +envs = { DISPLAY = ":0" } +type = "oneshot_async" +respawn = true """ @@ -154,4 +202,3 @@ gid = 100 name = "messagebus" home = "/nonexistent" shell = "/usr/bin/false" - diff --git a/config/x86_64/ci.toml b/config/x86_64/ci.toml index b22114c..23ce90a 100644 --- a/config/x86_64/ci.toml +++ b/config/x86_64/ci.toml @@ -29,6 +29,7 @@ adwaita-icon-theme = {} autoconf = {} automake = {} base = {} +base-initfs = {} bash = {} bash-completion = {} binutils = {} diff --git a/config/x86_64/demo.toml b/config/x86_64/demo.toml index 37a0eed..3fb4d53 100644 --- a/config/x86_64/demo.toml +++ b/config/x86_64/demo.toml @@ -46,22 +46,23 @@ path = "/home/user/Welcome.txt" data = """ ############################################################################## # # -# Welcome to Redox! # +# Welcome to Red Bear OS! # # # -# Redox is an operating system written in Rust, a language with focus # -# on safety and high performance. Redox, following the microkernel design, # -# aims to be secure, usable, and free. Redox is inspired by previous kernels # -# and operating systems, such as SeL4, MINIX, Plan 9, and BSD. # +# Red Bear OS (RBOS) is a derivative of Redox, an operating system written # +# in Rust, a language with focus on safety and high performance. Redox, # +# following the microkernel design, aims to be secure, usable, and free. # +# Redox is inspired by previous kernels and operating systems, such as # +# SeL4, MINIX, Plan 9, and BSD. # # # -# Redox _is not_ just a kernel, it's a full-featured Operating System, # +# Red Bear OS _is not_ just a kernel, it's a full-featured Operating System, # # providing packages (memory allocator, file system, display manager, core # # utilities, etc.) that together make up a functional and convenient # # operating system. You can loosely think of it as the GNU or BSD ecosystem, # # but in a memory safe language and with modern technology. # # # -# The website can be found at https://www.redox-os.org. # +# The website can be found at https://github.com/vasilito/Red-Bear-OS-3. # # # -# For things to try on Redox, please see # +# For things to try on Red Bear OS, please see # # https://doc.redox-os.org/book/ch02-06-trying-out-redox.html # # # ############################################################################## diff --git a/config/x86_64/desktop-contain.toml b/config/x86_64/desktop-contain.toml new file mode 100644 index 0000000..cca5dca --- /dev/null +++ b/config/x86_64/desktop-contain.toml @@ -0,0 +1,69 @@ +# Desktop configuration using the Contain sandbox + +include = ["../desktop.toml"] + +# Override the default settings here + +# General settings +[general] +# Filesystem size in MiB +# filesystem_size = 1024 + +# Package settings +[packages] +# example = {} + +# Override orbital init to use contain_orblogin +[[files]] +path = "/usr/lib/init.d/20_orbital.service" +data = """ +[unit] +description = "Orbital display (contain sandbox)" +requires_weak = ["00_base.target"] + +[service] +cmd = "orbital" +args = ["contain_orblogin", "launcher"] +envs = { VT = "3" } +type = "oneshot_async" +""" + +# Override console init to use contain +[[files]] +path = "/usr/lib/init.d/30_console.service" +data = """ +[unit] +description = "Console terminals (contained)" +requires_weak = ["20_orbital.service"] + +[service] +cmd = "getty" +args = ["--contain", "2"] +type = "oneshot_async" +respawn = true +""" + +[[files]] +path = "/usr/lib/init.d/31_debug_console.service" +data = """ +[unit] +description = "Debug console (contained)" +requires_weak = ["30_console.service"] + +[service] +cmd = "getty" +args = ["--contain", "/scheme/debug/no-preserve", "-J"] +type = "oneshot_async" +respawn = true +""" + +[[files]] +path = "/etc/contain.toml" +data = """ +pass_schemes = ["rand", "null", "tcp", "udp", "thisproc", "pty", "orbital", "display.vesa"] +sandbox_schemes = ["file"] +files = ["file:/dev/null"] +rofiles = ["file:/etc/passwd", "file:/etc/hostname", "file:/etc/localtime"] +dirs = ["file:/tmp"] +rodirs = ["file:/bin", "file:/ui"] +""" diff --git a/config/x86_64/server-demo.toml b/config/x86_64/server-demo.toml index ac775ef..9a22550 100644 --- a/config/x86_64/server-demo.toml +++ b/config/x86_64/server-demo.toml @@ -36,18 +36,30 @@ website = {} [[files]] -path = "/usr/lib/init.d/98_keygen_sh" +path = "/usr/lib/init.d/98_keygen_sh.service" data = """ -requires_weak 10_net.target -bash /root/keygen.sh +[unit] +description = "SSH key generation" +requires_weak = ["00_base.target"] + +[service] +cmd = "bash" +args = ["/root/keygen.sh"] +type = "oneshot" """ [[files]] -path = "/usr/lib/init.d/99_rustysd" +path = "/usr/lib/init.d/99_rustysd.service" data = """ -requires_weak 98_keygen_sh -# Undocumented usage of rsdctl, pointing to notifications dir -RSDCTL_ADDR=/var/run/rustysd/control.socket rustysd --conf /etc/rustysd +[unit] +description = "Rustysd service manager" +requires_weak = ["98_keygen_sh.service"] + +[service] +cmd = "rustysd" +args = ["--conf", "/etc/rustysd"] +envs = { RSDCTL_ADDR = "/var/run/rustysd/control.socket" } +type = "oneshot_async" """ [[files]] @@ -125,7 +137,7 @@ path = "/var/www/html/index.php" data = """ sudo bash server.sh # # The server will start port 22 (ssh), 80 (static web) and 8081 (php) -# If you use the Redox OS build system, starting QEMU with `net=redir` +# If you use the Red Bear OS build system, starting QEMU with `net=redir` # should expose those port to 8022, 8080 and 8081. # Try logging in to console via SSH with `ssh user@localhost -p 8022` #