TODO 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. now:
  2. * improve error message when service unable to open logfile
  3. * dinitcheck:
  4. * consumer-of:
  5. * check consumed service exists, is output-producing, has log-type=pipe
  6. * logfile:
  7. * check directory is writable
  8. * add preferred alias for "smooth-recovery": "silent-restart"
  9. * "start-interruptible" should work for process & bgprocess services too
  10. * check services cannot be "after"/"before" themselves
  11. * standardise error messages, exception messages. General format, quote types, punctuation, capitalisation
  12. * review exceptions thrown by load_service.h process_service_line - include setting name where possible
  13. For version 0.17:
  14. -----------------
  15. * [DONE] Limit memory use by control connections. Currently clients have command responses queued without
  16. limit; it would be better to stop accepting new commands once a certain amount of response is
  17. buffered.
  18. * [DONE] Externally triggered services (to represent devices etc). Such services will not reach STARTED
  19. state unless the external trigger occurs (eg "dinitctl trigger servicename", details to be
  20. determined).
  21. * [DONE] process input/output chaining (for logging); "log-type = pipe".
  22. * [DONE] Documentation for "log-type = buffer" and "log-type = pipe".
  23. * [DONE] dinitctl command to signal running service process.
  24. * [DONE] "offline" dinitctl enable/disable - i.e. enable or disable a service when dinit isn't running.
  25. For version 1.0 (release requirements):
  26. ---------------------------------------
  27. * Be able to boot and shutdown Linux and FreeBSD (or OpenBSD).
  28. * Documentation must be complete (mostly done; will need updates as other items are completed).
  29. * dinitcheck should be able to resolve variable substitutions using variables from running dinit.
  30. For later (post 1.0):
  31. ---------------------
  32. * jails support
  33. * On linux when running with PID != 1, write PID to /proc/sys/kernel/cad_pid so
  34. that we still receive SIGINT from ctrl+alt+del (must be done after /proc is
  35. mounted, possibly could be left to a service script)
  36. * Proper support for socket activation?
  37. * Perhaps need a way to prevent script services from re-starting.
  38. (eg there's no need to mount filesystems twice; there might be various other
  39. system initialisations that can't or shouldn't really be "undone" and so do
  40. not need to be re-done).
  41. * on shutdown, after a long interval with no activity, display information about
  42. services we are waiting on (and/or, do this when prompted via ^C or C-A-D?)
  43. * Internationalisation
  44. * A service can prevent shutdown/reboot by failing to stop. Maybe make
  45. multiple CTRL-ALT-DEL presses (or ^C since that's more portable) commence
  46. immediate shutdown (or launch a simple control interface).
  47. * When we take down a service or tty session, it would be ideal if we could kill
  48. the whole process tree, not just the leader process (need cgroups or pid
  49. namespace or other mechanism).
  50. * Allow running services with different resource limits, chroot, cgroups,
  51. namespaces (pid/fs/uid), etc
  52. * Support chaining service output to another process (logger) input; if the
  53. service dies the file descriptor of its stdout isn't closed and is reassigned
  54. when the service is restarted, so that minimal output is lost. [Done!]
  55. - even more, it would be nice if a single logger process could be responsible
  56. for receiving output from multiple services. This would require some kind of
  57. protocol for passing new output descriptors to the logger (for when a
  58. service starts).
  59. Even later / Maybe never:
  60. -------------------------
  61. * Support recognising /etc/init.d services automatically (as script services, with
  62. no dependency management - or upstart compatible dependency management)
  63. Also BSD's rc.d style scripts (PROVIDE, REQUIRE).
  64. * Place some reasonable, soft limit on the number of services to be started
  65. simultaneously, to prevent thrashing. Services that are taking a long time
  66. to start don't count to the limit. Maybe use CPU/IO usage as a controlling
  67. factor.
  68. * Cron-like tasks (if started, they run a sub-task periodically. Stopping the
  69. task will wait until the sub-task is complete).
  70. * Allow to run services attached to virtual tty, allow connection to that tty (ala "screen").
  71. * SystemD-like handling of filesystem mounts (see autofs documentation in kernel)
  72. i.e. a mount point gets an autofs attached, and lazily gets mounted when accessed
  73. (or is mounted in parallel). Probably put the functionality in a separate daemon.