-* Complete control socket handling and protocol
- - support for pinned-start and pinned-stop
- - support for listing all services
-* Implement a control utility to start/stop services after dinit has started
- - very basic version exists, needs thorough cleanup
-* Clean up tree a little, move source files into "src"
+* Prevent PROCESS services from being starts-on-console without also being runs-on-console.
+
+* shutdown command presently hangs if terminal output blocked (scroll lock
+ via ^S). Should use a buffer as dinit does, and pipe output from subcommands
+ via the buffer too.
+
+* Document utilities (particularly dinitctl) in the README
+
For version 1.0:
----------------
-* Log messages need to be duplicated to file (or to a logging process) once the
- file system comes up read/write.
-* Log messages are completely prevented from going to the console if the console
- is being held by a service, meaning some can get lost. It would be better if
- there was a (limited) buffer.
-* Perhaps need a way to prevent script services from re-starting.
- (eg there's no need to mount filesystems twice; there might be various other
- system initialisations that can't or shouldn't really be "undone" and so do
- not need to be re-done).
-* Add command line arg to start in "PID 1" mode (even if PID != 1).
- Basically, allow running as a system service monitor, without
- requiring that dinit runs as PID 1.
-* if PID != 1, choose a more sensible service definition directory
- (something like $HOME/dinit.d)
-* Documentation including sample service definitions
+* Man pages for all programs (done for dinit, not for dinitctl/shutdown/etc).
* Better error handling, logging of errors (largely done, still some patches
- of code where it may be missing).
+ of code where it may be missing - check TODO's in code).
* Write wtmp entry on startup (see simpleinit)
* Allow running services as a different UID
+* Must be able to specify kill timeout (after which kill -9!)
+* "triggered" service type: external process notifies Dinit when the service
+ has started.
+* Ability to reload stopped services (reload service description)
+
+
+For later:
+----------
* On linux when running with PID != 1, write PID to /proc/sys/kernel/cad_pid so
that we still receive SIGINT from ctrl+alt+del (must be done after /proc is
mounted, possibly could be left to a service script)
-
-For later:
+* Perhaps need a way to prevent script services from re-starting.
+ (eg there's no need to mount filesystems twice; there might be various other
+ system initialisations that can't or shouldn't really be "undone" and so do
+ not need to be re-done).
* Internationalisation
+* More logging options. Can currently log to syslog only (well, with the
+ syslog protocol, to /dev/log). Possibly should be able to log directly
+ to a file, or input stream of another process.
* A service can prevent shutdown/reboot by failing to stop. Maybe make
multiple CTRL-ALT-DEL presses (or ^C since that's more portable) commence
immediate shutdown (or launch a simple control interface).
* Investigate using cn_proc netlink connector (cn_proc.h) to receive process
termination events even when running with PID != 1 (Linux only).
Also, there is the possibility of having a small, simple PID-1 init which
- sends terminated process IDs over a pipe to Dinit.
+ sends terminated process IDs over a pipe to Dinit. Finally, it may be possible
+ to run dinit (and subprocesses) in a new PID namespace (again linux-only).
* Allow logging tasks to memory (growing or circular buffer) and later
- switching to disk logging (allows for filesystem mounted readonly on boot)
-* Rate control on process respawn
+ switching to disk logging (allows for filesystem mounted readonly on boot).
+ But perhaps this really the responsibility of another daemon.
* Allow running services with different resource limits, chroot, cgroups,
namespaces (pid/fs/uid), etc
* Make default control socket location build-time configurable
* Allow specifying a timeout for killing services; if they don't die within
the timeout (after a TERM) then hit them with a KILL.
+* A (perhaps limited) way(s) to modify a service description after it is loaded -
+ eg add/remove dependencies, change properties.
+* Think about detecting runs-on-console dependency conflicts (i.e. if A runs-on-console and
+ B depends on A and runs-on-consle then B can never start).
Even later / Maybe never:
* Support recognising /etc/init.d services automatically (as script services, with
factor.
* Cron-like tasks (if started, they run a sub-task periodically. Stopping the
task will wait until the sub-task is complete).
-* Socket activation of services? Not sure if enough non-SystemD derived
- daemons actually support this to warrant implementing it.
* Allow to run services attached to virtual tty, allow connection to that tty (ala "screen").
* SystemD-like handling of filesystem mounts (see autofs documentation in kernel)
i.e. a mount point gets an autofs attached, and lazily gets mounted when accessed