diff --git a/ChangeLog.md b/ChangeLog.md index fb0fcd59..7caea149 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -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 diff --git a/doc/TODO.md b/doc/TODO.md index b5a77461..8c66bb1f 100644 --- a/doc/TODO.md +++ b/doc/TODO.md @@ -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 ` 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. 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, and 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` -