Roxora uses Armbian for the hardware layer only. This page lists everything Armbian's build puts into a minimal Ubuntu 24.04 image for the supported boards, says which layer it belongs to, and what Roxora does with it.
- Hardware layer: needed to boot the board and drive its hardware, or part of the boot method. Kept.
- Distro layer: changes how the system looks or behaves compared with stock Ubuntu. Removed, or replaced with what Ubuntu ships.
The lists the build actually uses are in
userpatches/roxora/: bsp-remove.list,
rootfs-remove.list and keep-modified.list. verify/verify-image.sh
checks every image against the same lists.
Source: armbian/build at the commit in armbian.ref
(3b7191306d36, 2026-11-10), and images of both boards built from it without
Roxora's changes.
Board support package
The package is armbian-bsp-cli-<board>-<branch> (for example
armbian-bsp-cli-radxa-rock-4d-edge), plus a transitional
armbian-bsp-cli-<board> that only depends on it. For both supported boards
its files are packages/bsp/common from armbian/build plus a few generated
files; the two packages are identical apart from their names. Roxora builds
the package with the distro-layer files removed, so they are never installed,
and with maintainer scripts that keep only the boot-related steps. The package
keeps Armbian's name and is never upgraded from Armbian's repository (see
Architecture).
Kept
| Path | What it does | Layer | Reason |
|---|---|---|---|
/ |
Board, family, kernel image type, overlay directory |
hardware |
Read by the initramfs hook and the overlay tool |
/, / |
Copies of the boot script and boot environment |
hardware |
Boot method; the postinst restores / and boot.scr from them if they are missing |
/ |
Wraps each initramfs as / with mkimage and points / at it |
hardware |
The boot script loads uInitrd |
/, / |
Removes initramfs files of kernels that are no longer installed |
hardware |
Keeps / consistent across kernel updates |
/, / |
Turns off power management in two Realtek Wi-Fi drivers |
hardware |
Wi-Fi bring-up for USB and SDIO adapters |
/ |
Turns Wi-Fi power save off when an interface appears |
hardware |
Wi-Fi bring-up; SDIO Wi-Fi on these boards drops with power save on |
/ |
Selects the Ethernet configuration of Realtek USB network adapters |
hardware |
USB network adapter bring-up |
/ |
Names V4L2 decoder devices / |
hardware |
Stable names for the hardware video decoders |
/ |
Lets systemd handle AXP PMIC power buttons |
hardware |
Power button; harmless on boards without an AXP PMIC |
/, /, / |
Saves LED triggers at shutdown and restores them at boot |
hardware |
Board LEDs |
/ |
Compiles and installs a user device tree overlay |
hardware |
Device tree overlays |
DEBIAN/ (activate update-initramfs) |
Rebuilds the initramfs when the package changes |
hardware |
Boot method |
Removed
| Path | What it does | Layer | Reason |
|---|---|---|---|
/, 02-armbian-postupdate, 71-armbian-no-recommends, 81-armbian-no-languages, / |
Changes apt: gzip-compressed indexes, no recommended packages, no translations, an update counter after every apt run |
distro |
Changes how apt behaves compared with Ubuntu |
/ |
Downloads a "featured" feed for the login tips |
distro |
Message of the day |
/, /, /, /, /, / |
Keeps / in RAM and writes it back periodically |
distro |
Ramlog default |
/, /, / |
Swap and / on zram |
distro |
Zram default |
/, /, / |
Low battery shutdown for Allwinner PMICs |
distro |
Not used on these boards; disabled by default anyway |
/, / |
Truncates logs every 15 minutes |
distro |
Part of ramlog |
/ |
Counts available updates for the login message |
distro |
Message of the day |
/ to 99-blank (11 scripts), / |
Armbian's login message: header, system info, tips, IP, containers |
distro |
Ubuntu's own message of the day is used |
/, armbian-check-first-login-reboot.sh, / |
First-login wizard: root password, user, locale |
distro |
Replaced by a default account created when the image is built ( roxora, password roxora, to be changed at the first login); root stays locked as on Ubuntu |
/, /, / |
First boot tasks: new SSH host keys, random MAC addresses in armbianEnv.txt, tuning profile |
distro |
Replaced by cloud-init, which regenerates the SSH host keys. The boot environment of these boards sets no MAC address |
/, / |
Grows the root partition and filesystem at first boot |
distro |
Replaced by cloud-init's growpart and resizefs |
/, armbian-disable-autologin.timer |
Removes the console autologin after first login |
distro |
Roxora never enables autologin |
/, / |
Logs hardware information at boot |
distro |
Diagnostics for Armbian's tools |
/, /, / |
At every boot: I/O scheduler none on flash, CPU governor and limits from /, ondemand tuning, unmutes mixer controls, rewrites USB storage quirks into armbianEnv.txt, rewrites logrotate paths for ramlog |
distro |
Generic tuning with no RK3576 specific step; the kernel defaults are used |
/, / |
Re-keys an encrypted root at first boot |
distro |
Not used by Roxora images |
/, /, / |
Changes stock systemd units: no screen clear on tty1, TERM=linux on serial consoles, a module loading timeout |
distro |
Stock Ubuntu units are used |
/, zz-20-override-wifi-powersave-disable.conf |
NetworkManager Wi-Fi defaults |
distro |
NetworkManager is not part of minimal images |
/, /, /, / |
Shell defaults, aliases, profile-sync-daemon |
distro |
Changes the user environment |
/ |
Sysctl defaults copied from the distribution package |
distro |
Ubuntu's own defaults apply |
/ |
Hibernation image size |
distro |
Tuning |
/ (5 files) |
Extra rights for plugdev and netdev users |
distro |
Changes permissions compared with Ubuntu |
/ |
X server defaults |
distro |
No X server in minimal images |
/, /, /, / |
Debug upload, monitor, upgrade and backup tools |
distro |
Armbian's own tools |
/, /, / |
Install to eMMC or NVMe; now only a shim that runs armbian-config |
distro |
armbian-config is not installed, so the shim cannot work |
/ |
Shell library of the removed scripts |
distro |
Nothing kept uses it |
/, / (5 files), / |
Branding |
distro |
Branding |
/, / |
Release support table and build information for the login message and armbian-config |
distro |
Read only by removed tools. armbian.txt is written into the package after the extension runs, so it is deleted from the root filesystem instead |
Maintainer scripts
| Script step | Layer | Action | Reason |
|---|---|---|---|
preinst: set COMPRESS=gzip in / |
hardware |
keep |
Boot method: Armbian's images boot with gzip initramfs files wrapped as uInitrd; Ubuntu's zstd default is not validated on these boards |
preinst: drop vm.swappiness=100 from /, run sysctl --system |
distro |
remove |
Only cleans up after older Armbian packages |
preinst: replace Ubuntu Pro messages with "Support Armbian" |
distro |
remove |
Branding |
preinst: delete old Armbian motd, profile and init files, remove 02-armbian-periodic and the stock unattended-upgrades trigger |
distro |
remove |
Clean-up of older Armbian packages; changes Ubuntu's update settings |
preinst: fix lightdm ownership |
distro |
remove |
No display manager |
postinst: enable ramlog, copy settings from log2ram |
distro |
remove |
Ramlog |
postinst: add RESUME=none to initramfs.conf |
hardware |
keep |
Avoids a boot delay waiting for a resume device that does not exist |
postinst: recreate / and boot.scr when missing or forced |
hardware |
keep |
Boot method |
postinst: link / to /, delete Ubuntu's 00-header and 10-help-text |
distro |
remove |
Message of the day |
postinst: move .dpkg-dist defaults into place |
distro |
remove |
Files of removed services |
postinst: create groups audio video plugdev input dialout netdev bluetooth render users games i2c gpio spi docker, set EXTRA_GROUPS in / |
mixed |
keep i2c gpio spi only |
The udev rules of the kernel use these three groups; adding every new user to many groups changes Ubuntu's defaults |
postinst: enable armbian-hardware-monitor, armbian-hardware-optimize, armbian-zram-config, armbian-led-state |
mixed |
keep armbian-led-state only |
Others are removed |
postrm: disable the services above |
mixed |
keep armbian-led-state only |
|
Package Depends: fping |
distro |
kept as a dependency |
Installing the package requires it; nothing in Roxora runs it |
Other Armbian packages in a minimal noble image
| Package | What it is | Layer | Action | Reason |
|---|---|---|---|---|
linux-image-<branch>-<family>, linux-dtb-<branch>-<family> |
Kernel and device trees |
hardware |
keep, updated from Armbian |
|
linux-u-boot-<board>-<branch> |
U-Boot and its install script |
hardware |
keep, updated from Armbian |
|
armbian-firmware |
Firmware files |
hardware |
keep, updated from Armbian |
|
linux-headers-<branch>-<family> |
Kernel headers |
hardware |
installed only where a board needs DKMS (ROCK 4D Wi-Fi), updated from Armbian with the kernel |
DKMS modules are rebuilt for each new kernel |
armbian-base-files |
Armbian's base-files, with Armbian's / |
distro |
not installed ( KEEP_ORIGINAL_OS_RELEASE=yes); the apt pin keeps the base-files that Armbian's repository publishes from replacing Ubuntu's |
|
fake-ubuntu-advantage-tools |
Empty package that replaces Ubuntu Pro tooling |
distro |
removed after installation |
Armbian installs it unconditionally on Ubuntu; no setting turns it off |
armbian-config |
Armbian's configuration tool, from its own repository github.armbian.com/ |
distro |
not installed, repository not added |
Armbian's build enables this extension for every image; Roxora replaces its two hooks |
armbian-zsh, armbian-plymouth-theme |
Shell setup, boot splash |
distro |
not installed |
Only installed on non-minimal images or with PLYMOUTH=yes |
Changes outside packages
Armbian's build also edits the root filesystem directly. Ubuntu package files it
edits are restored from the packages (checked with dpkg --verify); files it
creates are removed (rootfs-remove.list).
| Change (where in armbian/build) | Layer | Action |
|---|---|---|
journald Storage=volatile, compression and rate limits (distro-specific.sh) |
distro |
restored from systemd |
Ubuntu motd scripts deleted, motd-news disabled (distro-specific.sh, BSP postinst) |
distro |
restored from base-files, and motd-news.timer enabled again |
fake-ubuntu-advantage-tools installed, 20apt-esm-hook.conf emptied (distro-specific.sh) |
distro |
package purged, empty file removed |
unattended-upgrades auto-update config removed and debconf seeded to keep it off ( distro-specific.sh) |
distro |
unattended-upgrades is installed and reconfigured with automatic updates on, as on Ubuntu's server images |
/ installed (distro-specific.sh) |
distro |
removed |
/, all sleep states off (distro-specific.sh) |
hardware |
kept: suspend and resume are not validated on these boards with the edge kernel, and a board that does not wake up needs a power cycle |
initramfs COMPRESS=gzip (distro-specific.sh, BSP preinst) |
hardware |
kept, as part of the boot method |
ondemand.service disabled (distro-specific.sh) |
none |
the unit does not exist on noble |
/, / set to "Armbian ..." (distro-agnostic.sh) |
distro |
restored from base-files |
/ deleted (distro-agnostic.sh) |
distro |
restored from base-files |
kernel.printk uncommented in / (distro-agnostic.sh) |
distro |
restored from procps |
rsyslog xconsole and KLogPermitNonKernelFacility lines commented out (distro-agnostic.sh) |
distro |
restored from rsyslog |
/ text changed (post-tweaks.sh) |
distro |
restored from libc-bin |
PermitRootLogin yes and PubkeyAuthentication yes in / (distro-agnostic.sh) |
distro |
restored from openssh-server's template / |
hosts line of / rewritten (distro-agnostic.sh) |
distro |
restored from libc-bin's template / |
execute bit removed from every / script until the first-login wizard has run (distro-agnostic.sh) |
distro |
execute bit restored; Ubuntu ships them executable |
tmpfs / added to / (partitioning.sh) |
distro |
line removed; Ubuntu keeps / on the root filesystem |
start-stop-daemon left different from dpkg's after removing the build-time diversion (post-tweaks.sh) |
distro |
restored from dpkg |
root password 1234, /, /, root dotfiles from / (distro-agnostic.sh) |
distro |
root locked as on Ubuntu, wizard trigger and aliases removed, dotfiles from base-files |
console autologin overrides for getty@ and serial-getty@ (distro-agnostic.sh) |
distro |
not created ( CONSOLE_AUTOLOGIN=no) |
time zone copied from the build machine ( main-config.sh) |
distro |
Etc/ |
/, / (distro-agnostic.sh) |
distro |
removed; no tuning profile |
/ line added (distro-agnostic.sh) |
distro |
removed (rng-tools is not installed) |
/ with the serial console (distro-agnostic.sh) |
distro |
removed; Ubuntu's PAM setup does not read it |
/ Armbian logo (distro-agnostic.sh) |
distro |
removed; the boot script does not show it |
serial getty enabled on ttyS0 at 1500000 baud (distro-agnostic.sh) |
hardware |
kept |
hostname set to the board name ( distro-agnostic.sh) |
hardware |
kept |
systemd-firstboot.service masked |
hardware |
kept: it would prompt on the serial console at first boot; cloud-init does the first-boot setup |
/ with main noble-utils noble-desktop |
hardware |
kept, pinned; the repository is set in userpatches/ (see architecture.md) |
Audio device names for HDMI, DP and the ES8316 codec ( /, board config) |
hardware |
kept |
netplan 10-dhcp-all-interfaces.yaml, 00-armbian.network.readme, networkd.conf.d/, wait-online --any and apt-daily-upgrade drop-ins (net-systemd-networkd extension) |
distro |
removed; cloud-init writes the network configuration from the image's seed (DHCP on wired Ethernet), as on Ubuntu's server images; on the desktop flavors NetworkManager runs the network instead (architecture.md, Desktop flavors) |
systemctl enable systemd-networkd.service (net-systemd-networkd extension), which also enables systemd-networkd-wait-online.service |
distro |
kept on command line images, where cloud-init's configuration is rendered for systemd-networkd; disabled again on the desktop flavors, where it manages no link and wait-online would hold each boot for two minutes. Ubuntu's systemd package enables neither |
armbian-config.sources (armbian-config extension) |
distro |
not created |
ROCK 4D: AIC8800 Wi-Fi and Bluetooth driver built with DKMS, firmware from Radxa's releases (radxa-aic8800 extension) |
hardware |
kept |
ROCK 4D: update-alternatives makes gcc-14 the default gcc (radxa-aic8800 extension, for the DKMS build of the Wi-Fi driver) |
hardware |
kept; it changes the default compiler on the ROCK 4D image only |
UEFI images: / with Armbian's name in the GRUB menu and the EFI directory, its wallpaper, fonts, menu timeout and splash arguments (grub extension) |
distro |
replaced by Roxora's /: console arguments and menu only, Ubuntu's / for the rest |
UEFI images: /, /, / (grub extension) |
distro |
removed |
UEFI images: efivar, busybox and cloud-initramfs-growroot installed (grub extension) |
distro |
not installed; cloud-init grows the root partition |
UEFI images: files with uboot in their name removed from the BSP package, and the initramfs 99-uboot hook (grub extension) |
hardware |
kept: there is no U-Boot to wrap the initramfs for |
UEFI images: grub-install --removable --no-nvram and update-grub at build time, GPT with an EFI system partition (grub extension) |
hardware |
kept; the boot method of these images |