image: drop initial-setup now the installer creates the account
It was here because the bootc Anaconda flow has no user-creation spoke,
so an install otherwise finished with root locked and no way in. Keeping
it alongside `alloy install` made things worse rather than redundant.
Booting a configured install in QEMU, initial-setup took the console and
blocked on an Anaconda text spoke reading "[!] User creation (No user
will be created)" in front of a perfectly good uid 1000 account. It ships
enabled in both graphical.target.wants and multi-user.target.wants, so
every install would still land in an Anaconda prompt: the exact surface
the installer exists to remove.
Also drops the tty1 drop-in and the preset line, which were configuring a
unit that is no longer installed.
- Co-Authored-By
- Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3 files changed,
+9 insertions,
-33 deletions
| 206 |
206 |
|
# Greeter
|
| 207 |
207 |
|
greetd \
|
| 208 |
208 |
|
tuigreet \
|
| 209 |
|
- |
# First-boot account creation. The bootc Anaconda flow offers no
|
| 210 |
|
- |
# user-creation spoke, so without this an install completes with
|
| 211 |
|
- |
# root locked, greeter set to nologin, and no way to log in.
|
| 212 |
|
- |
# Deliberately NOT initial-setup-gui: with no GUI binary present
|
| 213 |
|
- |
# run-initial-setup takes the TUI branch, which is what Alloy
|
| 214 |
|
- |
# wants regardless of default.target being graphical.target.
|
| 215 |
|
- |
# Retired when the Alloy installer replaces Anaconda (GO task).
|
| 216 |
|
- |
initial-setup \
|
|
209 |
+ |
# No initial-setup. It was here because the bootc Anaconda flow has no
|
|
210 |
+ |
# user-creation spoke, so an install otherwise finished with root
|
|
211 |
+ |
# locked and no way in. `alloy install` creates the account now, and
|
|
212 |
+ |
# keeping it made things worse rather than redundant: it ships enabled
|
|
213 |
+ |
# in both graphical.target.wants and multi-user.target.wants, and on
|
|
214 |
+ |
# first boot it takes the console and blocks on an Anaconda text spoke
|
|
215 |
+ |
# reading "[!] User creation (No user will be created)", in front of a
|
|
216 |
+ |
# perfectly good uid 1000 account. Verified in QEMU 2026-07-20.
|
|
217 |
+ |
# Removing it is what lets first boot reach greetd.
|
| 217 |
218 |
|
# Cursor, GTK theme
|
| 218 |
219 |
|
bibata-cursor-theme \
|
| 219 |
220 |
|
adw-gtk3-theme \
|
| 4 |
4 |
|
# units are enabled or disabled by default. Rationale for each entry:
|
| 5 |
5 |
|
#
|
| 6 |
6 |
|
# - greetd: boot lands on the tuigreet TUI on VT1.
|
| 7 |
|
- |
# - initial-setup: first-boot account creation. greetd carries
|
| 8 |
|
- |
# Alias=display-manager.service and initial-setup
|
| 9 |
|
- |
# declares Before=display-manager.service, so it runs
|
| 10 |
|
- |
# to completion before tuigreet takes the VT. It
|
| 11 |
|
- |
# disables itself once setup succeeds. Without it an
|
| 12 |
|
- |
# install has no loginable account at all.
|
| 13 |
7 |
|
# - tailscaled: opt-in only. Enrollment happens via `alloy tail`
|
| 14 |
8 |
|
# (see docs/CONTINUITY.md — Alloy does not phone home
|
| 15 |
9 |
|
# before the user says yes).
|
| 22 |
16 |
|
# a match fall through to /usr/lib/systemd/system-preset/ defaults.
|
| 23 |
17 |
|
|
| 24 |
18 |
|
enable greetd.service
|
| 25 |
|
- |
enable initial-setup.service
|
| 26 |
19 |
|
|
| 27 |
20 |
|
disable tailscaled.service
|
| 1 |
|
- |
# Put first-boot account creation on the console the user is looking at.
|
| 2 |
|
- |
#
|
| 3 |
|
- |
# Fedora's initial-setup.service sets TTYPath=/dev/tty7, and
|
| 4 |
|
- |
# run-initial-setup contains no chvt, so nothing switches the active VT
|
| 5 |
|
- |
# to it. After plymouth quits the console sits on tty1, which means the
|
| 6 |
|
- |
# account prompt renders to a VT nobody is watching and the machine
|
| 7 |
|
- |
# looks hung on a blank screen.
|
| 8 |
|
- |
#
|
| 9 |
|
- |
# tty1 is free at this point: initial-setup declares Before=getty-pre.target
|
| 10 |
|
- |
# so no getty has spawned, and greetd (Alias=display-manager.service,
|
| 11 |
|
- |
# Conflicts=getty@tty1.service) is held by Before=display-manager.service
|
| 12 |
|
- |
# until initial-setup exits.
|
| 13 |
|
- |
#
|
| 14 |
|
- |
# Revisit if initial-setup ever grows its own VT handling, and drop this
|
| 15 |
|
- |
# entirely when the Alloy installer replaces Anaconda.
|
| 16 |
|
- |
|
| 17 |
|
- |
[Service]
|
| 18 |
|
- |
TTYPath=/dev/tty1
|