Distro Recommendations¶
Finit supports two directory layouts for managing service configurations:
- Simple layout - all configuration files directly in
/etc/finit.d/ - Distro layout - separate
available/andenabled/directories
The distro layout is recommended for distributions that need clear
separation between installed and enabled services, and want to use the
initctl enable/disable commands for service management.
Simple Layout¶
Finit supports using a flat directory structure:
/etc/
|-- finit.d/ -- All enabled services
| |-- lighttpd.conf
| `- *.conf
|-- finit.conf -- Bootstrap tasks and services
:
In this layout, you enable a service by placing its .conf file in
/etc/finit.d/ and disable it by removing the file. This works well for
embedded systems or custom setups where services are managed by other tools
or generated dynamically.
No tooling support
The initctl enable/disable commands do not work with this layout.
You must manually manage files in /etc/finit.d/.
Distro Layout¶
Distributions typically want clearer separation between available (installed)
and enabled services. Finit supports this through the available/ and
enabled/ subdirectories:
/etc/
|-- finit.d/
| |-- available/ -- Installed but disabled services
| | |-- httpd.conf
| | |-- ntpd.conf
| | `-- sshd.conf
| |-- enabled/ -- Enabled services (symlinks)
| | `- sshd.conf -- Symlink to ../available/sshd.conf
|-- finit.conf -- Bootstrap tasks and services
:
In this layout: - available/ contains all installed service configurations - enabled/ contains symlinks to configurations that should start at boot - Services are enabled/disabled by creating/removing symlinks
Recommended
This is the recommended layout. In fact, the initctl enable/disable
commands require this layout with both available/ and enabled/
directories and will not work without it.
Managing Services with initctl¶
When using the distro layout, the initctl tool provides convenient commands
for managing service configurations:
list List all .conf in /etc/finit.d/
enable <CONF> Enable .conf by creating symlink in enabled/
disable <CONF> Disable .conf by removing symlink from enabled/
reload Reload *.conf in /etc/finit.d/ (activate changes)
Example usage:
# Enable sshd (creates enabled/sshd.conf -> ../available/sshd.conf)
initctl enable sshd
# Disable httpd (removes enabled/httpd.conf symlink)
initctl disable httpd
# Apply changes (reload configuration and start/stop services)
initctl reload
The .conf suffix is optional - initctl adds it automatically if missing.
Remember initctl reload
Changes made with enable/disable take effect only after running
initctl reload, unless Finit was built with --enable-auto-reload
which automatically detects and applies configuration changes.
Service Overrides¶
The initctl tool only operates on symlinks in the enabled/ directory.
If you place a regular (non-symlink) .conf file directly in the parent
directory (e.g., /etc/finit.d/), initctl will ignore it. This allows
you to create system-level overrides that cannot be accidentally disabled
by package management tools.
Customizing Directory Paths¶
Distributions can customize the directory names and locations at build time
using the Finit configure script:
This changes the default /etc/finit.d/ to /etc/init.d/ and moves the
bootstrap configuration file accordingly.
Remember to set --prefix
Remember to set --prefix and related options appropriately. The default
prefix is /usr/local, which is likely not what you want for a system
init. See the build documentation for details.
Example with custom paths:
/etc/
|-- init.d/
| |-- available/ -- Installed services
| | |-- httpd.conf
| | |-- ntpd.conf
| | `-- sshd.conf
| |-- enabled/ -- Enabled services (symlinks)
| | `- sshd.conf -- Symlink to ../available/sshd.conf
| `- init.conf -- Bootstrap tasks and services
:
Notice how both the service directory and bootstrap configuration file now
use the custom /etc/init.d/ path specified at build time.