X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=TODO;h=9dbd40c2432b00e015dfada2fb40c5561c770121;hb=e5fb0448ed8e1f85545688cfcf90a0199ad50d03;hp=b33e495a1b700ec6e34f9c07e1d8d7d5ec21ba8b;hpb=53abf22038f3c3a48325e6dfb3b379b02d2e2d1f;p=oweals%2Fdinit.git diff --git a/TODO b/TODO index b33e495..9dbd40c 100644 --- a/TODO +++ b/TODO @@ -1,37 +1,38 @@ -* 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). @@ -43,15 +44,20 @@ For later: * 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 @@ -63,8 +69,6 @@ Even later / Maybe never: 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