OpenRC on FreeBSD
miwi at FreeBSD.org
Wed Dec 19 14:36:12 UTC 2018
I'd like to reopen the discussion for OpenRC on FreeBSD. Basically this is the second attempt to get it into FreeBSD.
I've opened a review here with a working patch for CURRENT,
To recap the discussion
* First attempt of RFC in March of 2018: https://lists.freebsd.org/pipermail/freebsd-hackers/2018-March/052358.html
* Working group at BSDCan: https://wiki.freebsd.org/DevSummit/201806/OpenRC
Here some key points:
OpenRC provides additional features for service management without requiring kernel changes or replacing pid 1, unlike launchd and other solutions. All rc.d scripts have been converted with a few changes, typically changing the shebang and making sure the start function is named start(). Most service scripts are simplified, usually needing only name, command, and, if required, depends statements.
OpenRC started out as an init system by Roy Marples, developed for the Gentoo Alt (FreeBSD) kernel branch. It was more widely adopted into Gentoo as baselayout v2, and was then split off as a separate BSD-licensed project. It is under active development, portable, and remains BSD licensed today.
OpenRC and RC:
Both can coexist and be chosen with a setting in /boot/loader.conf.
Service supervision and service monitoring: any service can be supervised. Supervised services that crash are automatically restarted. The rc-status command shows how many times a service has restarted.
Device hotplug support and event-driven service management: the hotplug feature allows devd to take actions when devices are connected. For example, a USB wifi adapter can create additional network services when attached. The net-online service can, for example, detect when a network connection is restored, and restart ntp.
Network profiles: using stacked runlevels, different profiles can be established for different networking settings. For instance, different profiles can be used for wired or wireless networking, or for differing wireless networks, as well as dependency caching and parallel startup speed up booting.
The boot process can be run interactively for more effective debugging.
OpenRC uses the term “runlevels” to refer to the context in which a script is running. There are only three at present:
sysinit (the OpenRC system is starting), boot (start base services when the computer is booting), and default (normal execution).
OpenRC, by default, provides a “colorized” text boot, using ANSI color sequences. This can be disabled.
As of July 2017, iXsystems has created OpenRC versions of port service scripts for the entire ports tree. These scripts coexist with the rc.d versions.
OpenRC is a BSD licensed RC init system written in C. From a user perspective, it is very similar to the FreeBSD rc.d init system, making it easy to use and learn.
Tested: OpenRC has been used as the init system for TrueOS since October 2016.
Ken Moore has an OpenRC vs RC.d comparison which can be found here:
I look forward to discuss the features and capabilities of OpenRC.
More information about the freebsd-hackers