Deprecation warning: inetd removal, update TODO accordingly

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2021-02-08 17:39:13 +01:00
parent 1a5aabc034
commit 3fb700c17d
2 changed files with 21 additions and 65 deletions
+7 -2
View File
@@ -4,13 +4,18 @@ Change Log
All relevant changes are documented in this file.
[3.2][UNRELEASED] - 2020-04-xx
[3.2][UNRELEASED] - 2021-03-xx
------------------------------
Bug fix release, but also cgroups and a new progress!
Major bug fix release. New features include cgroups and a new progress!
https://twitter.com/b0rk/status/1214341831049252870?s=20
> **Note:** deprecation warning, this is likely the last release with
> built-in inetd support! Current plan is to rip it out at
> the start of the next release cycle. It *may* return as
> a separate stand-alone daemon.
### Changes
* Introducing Finit progress 𝓜𝓸𝓭𝓮𝓻𝓷
* Support for `sysv` start/stop scripts as well as monitoring forking
+14 -63
View File
@@ -1,36 +1,33 @@
Goals of Finit
==============
The intent of finit is to monitor not just processes, but to supervise
an entire system and the behavior of certain processes that declare
themselves to be finit compliant. Similar to launchd, the goal of
finit is to be a replacement for:
Initially Finit aimed to be more than a processes monitor, acting as a
replacement for cron/at and inetd as well. Over time, however, the true
value in the project turned out to be:
* init
* inetd
* crond
* watchdogd
A small and simple replacement, primarily for embedded systems, with a
low dependency on external packages. A compliant software is one that
can run as a damon in the foreground. If it can also touch its PID file
after a reconfiguration (`initctl reload`), the Finit dependency system
can also be used.
> A simple SysV init and systemd replacement, primarily for embedded
> systems, container, and dedicated server applications.
Near Future
-----------
* Remove native inetd support. Relocate to a stand-alone application,
possibly even outside of the Finit project. Will greatly simplify
the remaining bits ...
* ... when inetd support has been removed, we can refactor the .conf
parser, parse user input in a separate process, move process monitor
to separate process (same as parser?), and possibly even ...
* ... add new (complimentary) .svc file format to slowly migrate away
from the very terse one-liner format currently used.
* When a process dies, and Finit does not restart it, we should collect
a `siginfo_t` from the SIGCHLD signal and supply to the user in case
`initctl status <process>` is called to debug the issue.
* Merge UDP redirect service uredir as an UDP inetd variant
* Add `finit.conf` support for UPS notification (SIGPWR) to start a task
using, e.g. <sys/power/{ok,fail,low}> conditions. More info in sig.c
* Add `finit.conf` support for ctrl-alt-delete (SIGINT) and kbrequest,
i.e. KeyboardSignal, (SIGWINCH) behavior. Using conditions to a task,
e.g, <sys/key/ctrlaltdel> and <sys/key/signal> like SIGPWR handling.
* Cron/At support, see below
* Write man pages for finit and `finit.conf`, steal from the excellent
`pimd` man pages ...
@@ -67,53 +64,7 @@ Init
----
Finit in itself is not SysV Init compatible, it doesn't use `/etc/rc.d`
and `/etc/inet.d` scripts to boot the system. However, a plausible way
and `/etc/init.d` scripts to boot the system. However, a plausible way
to achieve compatibility would be to add a plugin to finit which reads
`/etc/inittab` to be able to start standard Linux systems.
Inetd
-----
* Add support for throttling connections.
* Optimize interface filtering by using socket filter. The functions
`inet_*_peek()` and `inetd_is_allowed()` used for interace filtering
should be possible to rewrite as socket filters.
* Optimize HTTP/HTTPS inetd connections by adding basic support for the
`inetd` variant `redir http/tcp@eth0 nowait [2345] 127.0.0.1:8080`,
which would reduce the overhead of spawn the web server on each HTTP
connection, yet still provide a means of filtering access per iface.
Crond
-----
Requirements are quite rudimentary, basic cron functionality, mainly
system-level timed periodic tasks:
* Periodically run a task, in a matching runlevel
* Optionally run as non-root (`crontab -e` as operator)
Proposed syntax:
# Crontab
cron @SPEC [LVLS] /path/to/cmd [ARGS] -- Optional descr
# One-shot 'at' command
at @YY-mm-ddTHH:MM [LVLS] /path/to/cmd [ARGS] -- Optional descr
Notice the ISO date in the `at` notation. The `cron @SPEC` could use
are mo loose notation, e.g. `@hourly`, `@midnight`, `@daily`, `@weekly`,
`@reboot`, etc. The runlevels is extra filtering sugar. E.g., if cron
service is only allowed in runlevels two or three it will not start if
system currently is in runlevel four.
To run a command as another user the `.conf` file must have a that
owner. E.g., `/etc/finit.d/extra.conf` may be owned by operator and
only hold `cron ...` lines.
What would be extremely useful is if `initctl`, or a homegrown `at`,
could support the basic functionality of the `at` command directly from
the shell -- that way setting up one-time jobs would not entail
re-reading `/etc/finit.conf`