You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
desktops: document mode=build parameter + tag lifecycle steps [B]/[R]
Adds the `mode=build` parameter to the command synopsis and the
install lifecycle table. Each step is now tagged:
[B] = runs in both modes (build + runtime)
[R] = runtime-only (skipped when mode=build)
Explains when/why mode=build is used (image-build time, no user)
and how the first boot inherits skel + graphical.target.
Matches armbian/configng#859 (implementation) and armbian/build#9683
(build framework consumer).
Top-level dispatcher. The `de=`, `tier=`, `arch=`, `release=` arguments are parsed positionally from `$@`.
453
+
Top-level dispatcher. The `de=`, `tier=`, `arch=`, `release=`, `mode=` arguments are parsed positionally from `$@`.
454
454
455
455
| Command | Behavior | Required args |
456
456
|---|---|---|
457
-
|`install`| Full install pipeline (see [Lifecycle](#lifecycle-install)). Bails out cleanly on `pkg_install` failure without changing system state. |`de=`, `tier=`|
457
+
|`install`| Full install pipeline (see [Lifecycle](#lifecycle-install)). Bails out cleanly on `pkg_install` failure without changing system state. With `mode=build`: skips user detection, group membership, skel propagation, and DM start/autologin — intended for image-build time when no real user exists. |`de=`, `tier=` (optional: `mode=build`)|
458
458
|`remove`| Disables auto-login, stops the display manager, purges every package recorded in `<de>.packages`, runs `pkg_clean`, switches `default.target` back to `multi-user`, isolates to multi-user.target so the running session also drops to console. |`de=`|
459
459
|`upgrade`| Move an installed desktop to a higher tier. Refuses if the target is the same or lower (use `downgrade`). |`de=`, `tier=`|
460
460
|`downgrade`| Move an installed desktop to a lower tier. Removable set is intersected with the install manifest so user-installed packages are never touched. |`de=`, `tier=`|
@@ -602,33 +602,38 @@ Not called from the desktop install path by default. The `armbian-imager` AppIma
602
602
603
603
The install pipeline in `module_desktops install` is intentionally linear and idempotent-friendly. **Every step that touches system state is gated on the previous step's success.**
604
604
605
+
Steps marked with `[R]` are **runtime-only** — skipped when `mode=build` is passed (image build time, no real user exists). Steps marked with `[B]` run in **both** modes.
606
+
605
607
```{ .text linenums="0" }
606
-
1. Validate args de= and tier= both required; tier must be minimal|mid|full
22. [R] Switch default.target systemctl set-default graphical.target ONLY if step 21 succeeded
631
+
23. [R] Enable auto-login module_desktops auto de=$de
629
632
```
630
633
631
-
If step 10 or 11 fails, the function returns 1 with no further state changes — the manifest is not written, `default.target` stays at `multi-user`, no DM is started. The system is in the same state as if the install had never run.
634
+
**`mode=build`** is used by the Armbian build framework at image-creation time. At that point the rootfs has no regular user (armbian-firstrun creates the first user on first boot), and DM/systemd operations make no sense inside a chroot. The packages, branding, manifests, and `/etc/skel` all land correctly; the first user inherits skel at `useradd` time and armbian-firstrun manages `graphical.target`.
635
+
636
+
If step 11 or 12 fails, the function returns 1 with no further state changes — the manifest is not written, `default.target` stays at `multi-user`, no DM is started. The system is in the same state as if the install had never run.
0 commit comments