fix: install init-logind provider before base to avoid dinit-rc/openrc conflict

dinit-rc and openrc both provide AND conflict with virtual init-rc and
cannot coexist. When base depends on init-logind (virtual), pacman with
--noconfirm picks the first alphabetically -- elogind-dinit over
elogind-openrc -- pulling in dinit -> dinit-rc, which conflicts with
openrc (pulled by elogind-openrc via dbus-openrc).

Fix: use operations.insert(0, ...) so elogind-{init} installs as a
separate pacman call BEFORE base, satisfying init-logind before base
needs it.
This commit is contained in:
2026-07-05 21:11:00 +02:00
parent ec65f721b9
commit 81f215166d
2 changed files with 10 additions and 1 deletions
@@ -542,7 +542,11 @@ def run():
if provider in known_inits:
init_pkg = "-".join([base_init, provider])
libcalamares.utils.debug("Init provider package added: {!s}".format(init_pkg))
operations[0]["install"].append(init_pkg)
# Install init-logind provider BEFORE base so pacman doesn't
# pick the wrong one alphabetically (elogind-dinit comes before
# elogind-openrc), which would pull in dinit+dinit-rc and
# conflict with openrc via the init-rc virtual.
operations.insert(0, {"install": [init_pkg]})
libcalamares.globalstorage.insert("initProvider", provider)
break