diff --git a/TODO.md b/TODO.md index c99a97a0..60f173a7 100644 --- a/TODO.md +++ b/TODO.md @@ -1,26 +1,26 @@ -============================================================================== - TODO -============================================================================== +TODO +==== Unsorted TODO list of features and points of investigation that could be useful for improving finit. But what is an improvement to finit? Well, similiar to launchd, the goal of finit is to be a FAST replacement for: -* init -* inetd -* crond -* watchdogd + * init + * inetd + * crond + * watchdogd The main goal is to be FAST. Secondary goals are to be: small, simple and with a very low dependency on external packages. Inetd ----- -Simple way of running Internet services on demand, like the old inetd:: + +Simple way of running Internet services on demand, like the old inetd: inetd SVC [RUNLVL] /path/to/daemon args -- description -Example:: +Example: # Inetd services, launched on demand inetd ssh [2345] /usr/sbin/sshd -i -- SSH Daemon @@ -33,86 +33,100 @@ allowed or deny. Priority -------- + The intent of finit is to monitor not just processes, but also to be able to supervise the entire system and the behavior of certain processes that declare themselves to be finit compliant. -* Integrate the ingenious libev to handle all events: signals, polling - fd's, etc. Because "Event driven software improves concurrency" -- - Dave Zarzycki, Apple. See the `launchd video`_ for more info! -* Add support for a /dev/watchdog plugin to replace watchdogd -* Integrate watchdog plugin with process/system supervisor to optionally - reboot the system when a process stops responding, or when a respawn - limit has been reached, as well as when system load gets too high. + * Integrate the ingenious libev to handle all events: signals, polling + fd's, etc. Because "Event driven software improves concurrency" -- + Dave Zarzycki, Apple. + + See the [launchd video](http://www.youtube.com/watch?v=cD_s6Fjdri8) + for more info! + + * Add support for a /dev/watchdog plugin to replace watchdogd + + * Integrate watchdog plugin with process/system supervisor to optionally + reboot the system when a process stops responding, or when a respawn + limit has been reached, as well as when system load gets too high. Configuration ------------- -* Add support for "init " and SIGHUP to - reload finit.conf, but also -* Add support for inotify to automatically reload finit.conf + + * Add support for `init ` and `SIGHUP` to + have finit reload its `finit.conf`, but also + + * Add support for inotify to automatically reload `finit.conf` Runlevels --------- -* Add support for "runlevel N" to finit.conf -* Improve support for runlevels: startup, running (services from - finit.conf), and shutdown as well as hooks when switching RL, startup - at RL 1 and a default run level. -* Implement initctl stop|start|restart|reload|status and service - stop|start|restart|reload|status on top -* Add PRE and POST hooks for when changing runlevels -* SysV init in Debian uses an rcS.d/ for scripts that should run once at - boot. These scripts are run before the actual runlevel, which is set - in inittab. We could use "task [S]" and "run [S]" (below) for this. -* Add support for a new runlevel 'S' that is started before all other - services in the selected runlevel. + + * Add support for `runlevel N` to `finit.conf` + + * Improve support for runlevels: startup, running (services from + `finit.conf`), and shutdown as well as hooks when switching RL, startup + at RL 1 and a default run level. + + * Implement `initctl stop|start|restart|reload|status ` and + `service stop|start|restart|reload|status` on top + + * Add PRE and POST hooks for when changing runlevels + + * SysV init in Debian uses an `rcS.d/` for scripts that should run + once at boot. These scripts are run before the actual runlevel, + which is set in `inittab(5)`. We could use `task [S]` and `run [S]` + (below) for this. + + * Add support for a new runlevel 'S' that is started before all other + services in the selected runlevel. Services and Tasks ------------------ -Both the "task" and "boot" stanzas below are like "service", share the + +Both the `task` and `boot` stanzas below are like `service`, share the same mechanism for registering callbacks. These callbacks can be used to check a configuration db and return 1 (RUN), 2 (STOP), or 3 (RELOAD). -* Add support for "task [RUNLVL] ..." similar to services, but one-shot. -* Add support for "run [RUNLVL] ..." similar to task, but waits for - completion before continuing with the next task/service -* Add support for service/task/run dependencies -* Add support for "init list" to show running services + * Add support for `task [RUNLVL] ...` similar to services, but one-shot. + * Add support for `run [RUNLVL] ...` similar to task, but waits for + completion before continuing with the next task/service + * Add support for service/task/run dependencies + * Add support for `init list` to show running services It is tempting to say that a task called at runlevel S would be a blocking call, like run, but there are likely use-cases when you want to -call on-shot tasks in parallell with something else, even at boot. Hence +call on-shot tasks in parallel with something else, even at boot. Hence the differentiation between "task" and "run", which are essentially the same, except for the "pause and wait for completion" that "run" has. Miscellaneous ------------- -* Add support for "init -v,--version | version" -* Cleanup move sources from top-level directory to src/ and include/ -* Make sure to install queue.h to $(PREFIX)/include/finit/queue.h -* Move finit.conf "check" command to plugin which checks /etc/fstab - instead. This is the de-facto practise. But keep the check command - for really low-end systems w/o /etc/fstab. + + * Add support for `init -v,--version | version` + * Cleanup move sources from top-level directory to `src/` and `include/` + * Make sure to install `queue.h` to `$(PREFIX)/include/finit/queue.h` + * Move `finit.conf` "check" command to plugin which checks `/etc/fstab` + instead. This is the de-facto practice. But keep the check command + for really low-end systems w/o `/etc/fstab`. Documentation ------------- -* Write man pages for finit and finit.conf, steal from pimd man pages... -* Update Debian finit.conf example with runlevels, tty/console and - dependency handling + + * Write man pages for finit and `finit.conf`, steal from the excellent + `pimd` man pages ... + * Update Debian `finit.conf` example with runlevels, `tty/console` and + dependency handling Investigation ------------- -* `FHS changes`_ affecting runtime status, plugins, etc. -.. _`launchd video`: http://www.youtube.com/watch?v=cD_s6Fjdri8 -.. _`FHS changes`: http://askubuntu.com/questions/57297/why-has-var-run-been-migrated-to-run -.. -.. Local Variables: -.. mode: rst -.. version-control: t -.. End: + * [FHS changes](http://askubuntu.com/questions/57297/why-has-var-run-been-migrated-to-run) + affecting runtime status, plugins, etc. +