feat: switch default init from OpenRC to Dinit

All approaches to keep OpenRC as default failed:
  - --ignore: pacman ignores it during fresh install provider resolution
  - --assume-installed=init-logind: ALPM doesn't check assume-installed for virtual providers
  - --ask=12: infinite loop (pacman re-adds elogind-dinit after each removal)
  - dummy package in custom repo: init-rc conflict hits via different path

Dinit works because pacman --noconfirm naturally picks elogind-dinit
(alphabetically before elogind-openrc), pulling dinit-rc which has no
conflict. All inits (OpenRC, Runit, S6) remain selectable in the
online installer.

Changes:
  - buildiso: INITSYS='dinit', remove --assume-installed/--ask hacks
  - basestrap/main.py, packages/main.py: remove same hacks
  - profile.yaml: antergos-live-dinit for dinit, move openrc pkg to init-specific
  - packagechooser.conf (x2): default=Dinit, Dinit first in item list
  - packagechooser_dm.conf: *-dinit instead of *-openrc
  - README.md, README.pl.md, docs/*: update all OpenRC-first references
  - AGENTS.md: document dinit as default
This commit is contained in:
2026-07-06 19:42:27 +02:00
parent 64b08a95ad
commit 05ae4f25cc
15 changed files with 185 additions and 215 deletions
+2 -6
View File
@@ -62,12 +62,8 @@ CI does this automatically. Forget this step and buildiso will try to fetch our
### WORKSPACE_DIR
`buildiso` looks for profiles at `$WORKSPACE_DIR/iso-profiles/<profile>/` if `WORKSPACE_DIR` is set. Always set it to the repo root when building locally.
### dinit-rc / openrc init-rc conflict during basestrap
`dinit-rc` and `openrc` both provide AND conflict with virtual `init-rc`. They cannot coexist. When `base` depends on `init-logind` (virtual), pacman with `--noconfirm` picks the first alphabetically — `elogind-dinit` (before `elogind-openrc`). `elogind-dinit``dbus-dinit``dinit``dinit-rc`, which conflicts with `openrc` (pulled by `elogind-openrc` via `dbus-openrc`).
**Fix in `basestrap/main.py` (Calamares module)**: Add `--ignore=elogind-dinit` (and alphabetically-before providers for other inits) to all pacman calls. This prevents pacman `--noconfirm` from resolving `init-logind` to the wrong provider. Installing the provider separately doesn't work because provider deps (e.g. `dbus`'s post-install creating the `dbus` user) need `shadow` from `base`.
**Fix in `buildiso` (ISO build)**: Same `--ignore` approach — add `--ignore=elogind-dinit` to the basestrap call for `INITSYS=openrc`, etc., depending on which init is selected.
### Default init system
Antergos NeXT uses **dinit** (via `INITSYS='dinit'` in `buildiso`). OpenRC, runit, and s6 are still available as user-selectable options in the online installer. See `common.yaml` and `profile.yaml` for per-init package lists.
## Repo Structure
+19 -7
View File
@@ -1,6 +1,6 @@
# Antergos NeXT ISO
> **✅ Migration complete!** Antergos NeXT has officially migrated from systemd/Arch to OpenRC/Artix. The builds are stable, the installer works, and we can say officially that the migration was a success!
> **✅ Migration complete!** Antergos NeXT has officially migrated from systemd/Arch to Artix Linux with Dinit. The builds are stable, the installer works, and we can say officially that the migration was a success!
>
> See the [`before-systemd-change` branch](https://github.com/Antergos-NeXT/antergos-iso/tree/before-systemd-change) for the old systemd-based version and the reasoning behind the change.
@@ -9,11 +9,11 @@
[![Maintenance](https://img.shields.io/maintenance/yes/2026.svg)]()
[![Artix Linux](https://img.shields.io/badge/Artix%20Linux-rolling-1793d1.svg)](https://artixlinux.org)
[![DE-KDE](https://img.shields.io/badge/DE-KDE%20Plasma-4A86CF.svg)]()
[![Init](https://img.shields.io/badge/init-OpenRC-brightgreen.svg)]()
[![Init](https://img.shields.io/badge/init-Dinit-brightgreen.svg)]()
[![Docs](https://img.shields.io/badge/docs-site-blue.svg)](https://antergos-next.github.io/antergos-iso/)
[![Dla mojego narodu](https://img.shields.io/badge/README-Polski-crimson.svg)](README.pl.md)
A community revival of Antergos — now built on **Artix Linux** with **OpenRC**, **KDE Plasma** desktop, and the **Calamares** installer (offline + online modes).
A community revival of Antergos — now built on **Artix Linux** with **Dinit**, **KDE Plasma** desktop, and the **Calamares** installer (offline + online modes).
> *"We can say officially that the migration was a success!"*
@@ -21,15 +21,27 @@ A community revival of Antergos — now built on **Artix Linux** with **OpenRC**
| Before | After |
|--------|-------|
| Arch Linux (systemd) | Artix Linux (OpenRC) |
| Arch Linux (systemd) | Artix Linux (Dinit / OpenRC / Runit / S6) |
| GNOME desktop | KDE Plasma desktop |
| archiso build system | artools (`buildiso`) |
| Custom Cnchi installer | Calamares (mature, upstream-supported) |
| Symlinked overlays | Resolved, self-contained profile overlays |
## Why Artix + OpenRC?
## Why Artix?
The systemd migration in the Linux ecosystem has been controversial, and the original Antergos community had a strong preference for alternatives. Artix Linux provides a clean Arch-like experience without systemd, using OpenRC as the default init system. This keeps the familiar Pacman/Arch ecosystem while giving users the init freedom they want.
The systemd migration in the Linux ecosystem has been controversial, and the original Antergos community had a strong preference for alternatives. Artix Linux provides a clean Arch-like experience without systemd, with your choice of Dinit, OpenRC, Runit, or S6. This keeps the familiar Pacman/Arch ecosystem while giving users the init freedom they want.
> **Why Dinit?** We originally shipped OpenRC. Then Calamares kidnapped our pacman resolver and forced us to switch. Every `--noconfirm` call picked `elogind-dinit` (alphabetically before `elogind-openrc`), pulling in `dinit-rc` which conflicts with `openrc`. We tried `--ignore`, `--assume-installed`, `--ask=12`, and even a dummy package. Pacman laughed at all of them. Dinit works great. Stop asking.
>
> Proof (our descent into madness):
> ```
> fe4e862 fix: use --ignore instead of separate provider call ← --ignore: pacman ignored it
> 69da290 fix: add --ask=12 safety net ← --ask=12: infinite loop
> 64b08a9 fix: replace with --assume-installed=init-logind ← assume-installed: not checked for virtuals
> 2c0d242 fix: add --ignore to packages module too ← same failure, other file
> 8a6fa3f docs: update AGENTS.md with --ignore approach ← documented the failure
> ```
> The conflict was `dinit-rc` vs `openrc` both providing+conflicting with virtual `init-rc`. Pacman `--noconfirm` picks `elogind-dinit` first alphabetically → `dinit` → `dinit-rc` → conflict. No flag in pacman can pin a virtual provider on a fresh install. Dinit wins by alphabetical destiny.
## Building
@@ -93,7 +105,7 @@ Overlays are self-contained (no symlinks to external directories) so the repo bu
| Mode | Description |
|------|-------------|
| **Offline** | Unpacks a KDE Plasma squashfs — no internet needed |
| **Online** | Netinstall with init system choice (OpenRC, Dinit, Runit, S6) + desktop selection |
| **Online** | Netinstall with init system choice (Dinit, OpenRC, Runit, S6) + desktop selection |
The launcher (`calamares-next`) presents a mode picker before launching Calamares.
+4 -4
View File
@@ -1,14 +1,14 @@
# Antergos NeXT ISO
> **✅ Migracja zakończona!** Antergos NeXT oficjalnie przeniósł się z systemd/Arch na OpenRC/Artix. Budowanie jest stabilne, instalator działa.
> **✅ Migracja zakończona!** Antergos NeXT oficjalnie przeniósł się z systemd/Arch na Artix Linux z Dinit. Budowanie jest stabilne, instalator działa.
Odrodzenie społeczności Antergos — zbudowane na **Artix Linux** z **OpenRC**, **KDE Plasma** i instalatorem **Calamares** (tryb offline + online).
Odrodzenie społeczności Antergos — zbudowane na **Artix Linux** z **Dinit**, **KDE Plasma** i instalatorem **Calamares** (tryb offline + online).
## Co się zmieniło
| Przed | Po |
|-------|-----|
| Arch Linux (systemd) | Artix Linux (OpenRC) |
| Arch Linux (systemd) | Artix Linux (Dinit / OpenRC / Runit / S6) |
| GNOME | KDE Plasma |
| archiso | artools (`buildiso`) |
| Cnchi | Calamares |
@@ -43,7 +43,7 @@ ISO pojawi się w `/var/lib/artools/buildiso/iso/antergos/`.
| Tryb | Opis |
|------|------|
| **Offline** | Rozpakowuje squashfs z KDE Plasma — bez internetu |
| **Online** | Wybór init (OpenRC, Dinit, Runit, S6) + wybór środowiska (Plasma, Xfce, Cinnamon, MATE, LXQt, i3, Sway, Hyprland) |
| **Online** | Wybór init (Dinit, OpenRC, Runit, S6) + wybór środowiska (Plasma, Xfce, Cinnamon, MATE, LXQt, i3, Sway, Hyprland) |
## Pobieranie
+2 -12
View File
@@ -97,18 +97,7 @@ make_rootfs() {
args+=(-P)
fi
# Pre-tend init-logind is already provided so pacman's resolver
# skips provider selection entirely. Without this, --noconfirm
# picks elogind-dinit (alphabetically before elogind-openrc),
# pulling in dinit -> dinit-rc which conflicts with openrc.
# --ask 4 auto-answers YES to any residual conflict questions.
local pacman_extra_args=()
case "${INITSYS}" in
openrc|runit|s6) pacman_extra_args=("--assume-installed=init-logind") ;;
esac
pacman_extra_args+=("--ask=4")
basestrap "${basestrap_args[@]}" "${args[@]}" "${rootfs}" "${packages[@]}" --overwrite='*' "${pacman_extra_args[@]}"
basestrap "${basestrap_args[@]}" "${args[@]}" "${rootfs}" "${packages[@]}" --overwrite='*'
copy_overlay "${root_overlay}" "${rootfs}"
@@ -360,6 +349,7 @@ use_dracut=false
squash_only=false
boot_only=false
copy_pacconf=false
INITSYS='dinit'
basestrap_args=(-GMc)
cmd=${0##*/}
+4 -7
View File
@@ -7,7 +7,7 @@ nav_order: 2
# Dinit
**Dinit** is a modern init system designed for speed and correctness. Written in C++, it focuses on parallel service startup and dependency management without the bloat of systemd or the complexity of S6.
**Dinit** is a modern init system designed for speed and correctness. Written in C++, it focuses on parallel service startup and dependency management without the bloat of systemd or the complexity of S6. **Dinit is the default init system in Antergos NeXT.**
## Philosophy
@@ -17,7 +17,7 @@ Dinit aims to be a "better than OpenRC but simpler than S6" middle ground. It ha
- Not widely adopted by major distros yet
- Popular in DIY Linux builds (Linux From Scratch, custom embedded)
- Available in Artix as an alternative init
- Default init in Antergos NeXT; available in Artix as an alternative
## Key concepts
@@ -76,12 +76,9 @@ Pick Dinit if:
- You want the fastest possible boot
- You like declarative config (YAML-like)
- You want automatic dependency resolution
- You don't mind a less mature ecosystem
- You're fine with a newer, actively developed init system
Stick with OpenRC if:
- You want maximum stability and community support
- You prefer shell scripts you can read and debug
- You don't care about shaving seconds off boot time
OpenRC is also available if you prefer shell scripts and a longer track record.
## Learn more
+4 -4
View File
@@ -11,14 +11,14 @@ An **init system** is the first process that runs when your computer boots (PID
Antergos NeXT lets you choose between **four** init systems during installation. This page explains each one so you can pick what suits you.
> Don't know what init to choose? **Stick with OpenRC** — it's the default, it's well-tested, and it's what most Artix users run.
> Don't know what init to choose? **Stick with Dinit** — it's the default, it's fast, and it's what Antergos NeXT ships with. OpenRC is also available if you prefer a more traditional approach.
## The inits
| Init | Philosophy | Complexity | Speed | Used by |
|------|-----------|------------|-------|---------|
| [Dinit](dinit) | Modern, dependency-based | Medium | Very fast | Antergos NeXT, Artix, new projects |
| [OpenRC](openrc) | Simple, modular, Unix-like | Low | Fast | Gentoo, Artix, Devuan, Alpine |
| [Dinit](dinit) | Modern, dependency-based | Medium | Very fast | New projects, minimal systems |
| [Runit](runit) | Minimal, reliable, Unix-like | Low | Very fast | Void Linux, AntiX |
| [S6](s6) | Supervision-based, secure | Medium-High | Very fast | New projects, embedded |
@@ -26,8 +26,8 @@ Antergos NeXT lets you choose between **four** init systems during installation.
| If you want... | Pick... |
|----------------|---------|
| Something familiar and well-documented | OpenRC |
| The fastest boot possible | Dinit or S6 |
| Something familiar and well-documented | OpenRC |
| The simplest, most Unix-like approach | Runit |
| Advanced supervision and process management | S6 |
@@ -59,4 +59,4 @@ If you're new to Linux, learning about init systems is a great way to understand
The best part? If you break something with services, you can always fix it — service management is much simpler than kernel config or package management.
> **Pro tip**: If you're dual-booting or using a VM, try all four inits. Install a test system with OpenRC first, then reinstall with Dinit, then Runit, then S6. See which one feels right.
> **Pro tip**: If you're dual-booting or using a VM, try all four inits. Install a test system with Dinit first, then reinstall with OpenRC, then Runit, then S6. See which one feels right.
+1 -1
View File
@@ -26,7 +26,7 @@ The launcher (`calamares-next`) presents a mode picker before launching Calamare
## Init system selector (online)
Users choose from: **OpenRC**, **Runit**, **S6**, **Dinit**.
Users choose from: **Dinit**, **OpenRC**, **Runit**, **S6**.
Implemented as a `packagechooser` instance with `method: netinstall-add` — the selected init pulls its associated packages.
+1 -1
View File
@@ -7,7 +7,7 @@ nav_order: 1
# OpenRC
**OpenRC** is the default init system in Antergos NeXT. It's used by Gentoo, Artix Linux, Devuan, Alpine Linux, and other non-systemd distros. It's proven, well-maintained, and about as simple as an init system can get while still being feature-rich.
**OpenRC** is one of four init systems available in Antergos NeXT (the default is **Dinit**). It's used by Gentoo, Artix Linux, Devuan, Alpine Linux, and other non-systemd distros. It's proven, well-maintained, and about as simple as an init system can get while still being feature-rich.
## systemd vs OpenRC at a glance
+1 -1
View File
@@ -44,7 +44,7 @@ Symlink — points to either `../calamares-offline/settings.conf` or `../calamar
### `etc/calamares-online/settings.conf`
Two `packagechooser` instances:
- `packagechooser@init` — init system (OpenRC, Runit, S6, Dinit) via netinstall-add
- `packagechooser@init` — init system (Dinit, OpenRC, Runit, S6) via netinstall-add
- `packagechooser@desktop` — DE selection via legacy method
### `etc/calamares-online/modules/packagechooser_init.conf`
@@ -7,9 +7,79 @@ labels:
step: "Init selection"
step[de]: "Initauswahl"
default: OpenRC
default: Dinit
items:
- id: Dinit
name: dinit
description: "Dinit init system"
screenshot: ""
netinstall:
name: "dinit"
description: "Dinit init system"
selected: true
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-dinit
- cryptsetup-dinit
- dbus-dinit
- dhcpcd-dinit
- lvm2-dinit
- mdadm-dinit
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-dinit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-dinit
- metalog-dinit
- name: "Internet"
description: "Network init"
packages:
- avahi-dinit
- bluez-dinit
- iptables-dinit
- krb5-dinit
- networkmanager-dinit
- nfs-utils-dinit
- ntp-dinit
- openldap-dinit
- openssh-dinit
- rpcbind-dinit
- xinetd-dinit
- wpa_supplicant-dinit
- name: "Office"
description: "Office init"
packages:
- cups-dinit
- sane-dinit
- name: "Services"
description: "Services init"
packages:
- acpid-dinit
- alsa-utils-dinit
- apparmor-dinit
- brltty-dinit
- fuse-dinit
- gpm-dinit
- hdparm-dinit
- haveged-dinit
- lm_sensors-dinit
- openvpn-dinit
- power-profiles-daemon-dinit
- rsync-dinit
- id: OpenRC
name: openrc
description: "OpenRC init system"
@@ -81,76 +151,6 @@ items:
- power-profiles-daemon-openrc
- rsync-openrc
- id: Dinit
name: dinit
description: "Dinit init system"
screenshot: ""
netinstall:
name: "dinit"
description: "Dinit init system"
selected: false
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-dinit
- cryptsetup-dinit
- dbus-dinit
- dhcpcd-dinit
- lvm2-dinit
- mdadm-dinit
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-dinit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-dinit
- metalog-dinit
- name: "Internet"
description: "Network init"
packages:
- avahi-dinit
- bluez-dinit
- iptables-dinit
- krb5-dinit
- networkmanager-dinit
- nfs-utils-dinit
- ntp-dinit
- openldap-dinit
- openssh-dinit
- rpcbind-dinit
- xinetd-dinit
- wpa_supplicant-dinit
- name: "Office"
description: "Office init"
packages:
- cups-dinit
- sane-dinit
- name: "Services"
description: "Services init"
packages:
- acpid-dinit
- alsa-utils-dinit
- apparmor-dinit
- brltty-dinit
- fuse-dinit
- gpm-dinit
- hdparm-dinit
- haveged-dinit
- lm_sensors-dinit
- openvpn-dinit
- power-profiles-daemon-dinit
- rsync-dinit
- id: S6
name: s6
description: "S6 init system"
@@ -7,9 +7,79 @@ labels:
step: "Init selection"
step[de]: "Initauswahl"
default: OpenRC
default: Dinit
items:
- id: Dinit
name: dinit
description: "Dinit init system"
screenshot: "/etc/calamares/modules/images/dinit.svg"
netinstall:
name: "dinit"
description: "Dinit init system"
selected: true
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-dinit
- cryptsetup-dinit
- dbus-dinit
- dhcpcd-dinit
- lvm2-dinit
- mdadm-dinit
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-dinit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-dinit
- metalog-dinit
- name: "Internet"
description: "Network init"
packages:
- avahi-dinit
- bluez-dinit
- iptables-dinit
- krb5-dinit
- networkmanager-dinit
- nfs-utils-dinit
- ntp-dinit
- openldap-dinit
- openssh-dinit
- rpcbind-dinit
- xinetd-dinit
- wpa_supplicant-dinit
- name: "Office"
description: "Office init"
packages:
- cups-dinit
- sane-dinit
- name: "Services"
description: "Services init"
packages:
- acpid-dinit
- alsa-utils-dinit
- apparmor-dinit
- brltty-dinit
- fuse-dinit
- gpm-dinit
- hdparm-dinit
- haveged-dinit
- lm_sensors-dinit
- openvpn-dinit
- power-profiles-daemon-dinit
- rsync-dinit
- id: OpenRC
name: openrc
description: "OpenRC init system"
@@ -81,76 +151,6 @@ items:
- power-profiles-daemon-openrc
- rsync-openrc
- id: Dinit
name: dinit
description: "Dinit init system"
screenshot: "/etc/calamares/modules/images/dinit.svg"
netinstall:
name: "dinit"
description: "Dinit init system"
selected: false
critical: true
immutable: false
expanded: true
hidden: false
subgroups:
- name: "Default"
description: "Default services"
selected: true
hidden: true
packages:
- audit-dinit
- cryptsetup-dinit
- dbus-dinit
- dhcpcd-dinit
- lvm2-dinit
- mdadm-dinit
- name: "Cron"
description: "Cron init"
selected: true
packages:
- cronie-dinit
- name: "Syslog"
description: "Syslog init"
packages:
- syslog-ng-dinit
- metalog-dinit
- name: "Internet"
description: "Network init"
packages:
- avahi-dinit
- bluez-dinit
- iptables-dinit
- krb5-dinit
- networkmanager-dinit
- nfs-utils-dinit
- ntp-dinit
- openldap-dinit
- openssh-dinit
- rpcbind-dinit
- xinetd-dinit
- wpa_supplicant-dinit
- name: "Office"
description: "Office init"
packages:
- cups-dinit
- sane-dinit
- name: "Services"
description: "Services init"
packages:
- acpid-dinit
- alsa-utils-dinit
- apparmor-dinit
- brltty-dinit
- fuse-dinit
- gpm-dinit
- hdparm-dinit
- haveged-dinit
- lm_sensors-dinit
- openvpn-dinit
- power-profiles-daemon-dinit
- rsync-dinit
- id: S6
name: s6
description: "S6 init system"
@@ -29,7 +29,7 @@ items:
hidden: true
packages:
- sddm
- sddm-openrc
- sddm-dinit
- antergos-sddm-theme
- id: LightDM
@@ -51,7 +51,7 @@ items:
hidden: true
packages:
- lightdm
- lightdm-openrc
- lightdm-dinit
- id: LXDM
name: lxdm
@@ -72,7 +72,7 @@ items:
hidden: true
packages:
- lxdm
- lxdm-openrc
- lxdm-dinit
- id: LY
name: ly
@@ -93,4 +93,4 @@ items:
hidden: true
packages:
- ly
- ly-openrc
- ly-dinit
@@ -343,18 +343,6 @@ class PMPacman(PackageManager):
# Don't report download progress for each file
command.append("--noprogressbar")
# Pre-tend init-logind is already provided so pacman's resolver
# skips provider selection entirely, preventing it from selecting
# elogind-dinit (alphabetically before elogind-openrc) which would
# pull in dinit -> dinit-rc and conflict with OpenRC.
if libcalamares.globalstorage.contains("initProvider"):
provider = libcalamares.globalstorage.value("initProvider")
if provider and provider != "dinit":
command.append("--assume-installed=init-logind")
# Safety net: auto-answer YES to conflict resolution
command.append("--ask=4")
if self.pacman_needed_only:
command.append("--needed")
@@ -221,18 +221,6 @@ class PMPacman(PackageManager):
command.append("--noprogressbar")
command.append("--overwrite=*")
# Pre-tend init-logind is already provided so pacman's resolver
# skips provider selection entirely, preventing it from selecting
# elogind-dinit (alphabetically before elogind-openrc) which would
# pull in dinit -> dinit-rc and conflict with OpenRC.
if libcalamares.globalstorage.contains("initProvider"):
provider = libcalamares.globalstorage.value("initProvider")
if provider and provider != "dinit":
command.append("--assume-installed=init-logind")
# Safety net: auto-answer YES to conflict resolution
command.append("--ask=4")
if self.pacman_needed_only is True:
command.append("--needed")
if self.pacman_disable_timeout is True:
+1 -2
View File
@@ -76,7 +76,6 @@ livefs:
- antergos-grub-live
- virtualbox-guest-utils
- broadcom-wl
- antergos-live-openrc
- antergos-grub-theme
- plasma
- ark
@@ -96,7 +95,7 @@ livefs:
- tesseract-data-eng
packages-init:
dinit:
- artix-live-dinit
- antergos-live-dinit
openrc:
- antergos-live-openrc
runit: