4.0 KiB
title, layout, parent, nav_order
| title | layout | parent | nav_order |
|---|---|---|---|
| Dinit | default | Init Systems | 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. Dinit is the default init system in Euri Linux.
Dinit handles dependencies automatically through declarative configuration files, avoiding the complexity of shell-script-based service definitions.
Key concepts
| Concept | What it means |
|---|---|
| Service files | Declarative .conf files in /etc/dinit.d/ |
| Dependencies | Automatic — Dinit figures out start order from depends-on directives |
| Parallel startup | Very fast — starts services concurrently wherever possible |
| Process supervision | Optional — can restart crashed services if type = process |
Basic commands
# Start a service
dinitctl start sshd
# Stop a service
dinitctl stop sshd
# Enable at boot
dinitctl enable sshd
# Disable at boot
dinitctl disable sshd
# Check status
dinitctl status sshd
# List all services
dinitctl list
Example service file
/etc/dinit.d/sshd.conf:
type = process
command = /usr/bin/sshd -D
depends-on = dbus
depends-on = network
Where services live
- System services:
/etc/dinit.d/(config) — enabled via symlinks in/etc/dinit.d/boot.d/ - User services: similar structure under the user's config directory (for
dinit-user-spawn) - Boot-enabling:
dinitctl enable <service>creates a symlink inboot.d/
Service files use a simple key-value syntax. The type can be:
process— supervised (auto-restart on crash)scripted— runs and completes (one-shot tasks)internal— handled internally by dinit
Common tasks
Enable a service at boot
dinitctl enable sshd
Alternatively, create a symlink manually:
ln -s /etc/dinit.d/sshd /etc/dinit.d/boot.d/
Check what's running
dinitctl list
View logs
Dinit itself doesn't handle logging. Services log to syslog or their own log files under /var/log/. Use less /var/log/messages or check per-service log directories.
Comparison with OpenRC
| OpenRC | Dinit | |
|---|---|---|
| Service format | Shell scripts | Declarative config |
| Dependencies | Manual (need/use) |
Automatic |
| Speed | Fast | Very fast (more parallel) |
| Complexity | Low | Medium |
| Supervision | No built-in | Optional |
Troubleshooting
Service fails to start
Check the service file syntax first:
dinitctl start sshd
# If it fails, check:
cat /var/log/messages | grep dinit
Make sure all depends-on services are available (even if not enabled — dinit will start them as dependencies).
"boot" service file missing
Dinit's add_user_svc_dinit in Calamares attempts to create boot.d/ symlinks but does not create a boot service file. This is a known upstream limitation. Workaround: ensure services are enabled via dinitctl enable after install, or use the init-specific package handling in Calamares.
pipewire doesn't start
On Euri Linux, artix-pipewire-launcher is patched to support dinit. If pipewire isn't starting, verify the launcher script at /usr/bin/artix-pipewire-launcher includes dinit in its supported init list. The XDG autostart entry at /etc/xdg/autostart/pipewire.desktop handles starting pipewire on login.
When to use Dinit
Dinit is suitable for users who want fast boot times and automatic dependency resolution without managing shell-script-based service files. It is the default init in Euri Linux and requires no additional configuration.
Users migrating from systemd will find Dinit's declarative service files familiar. Users accustomed to OpenRC or Runit may prefer to switch — see Changing init for instructions.