--------------------------------------------------------------------------------
- define how it should work (doc/braindums/big-picture.text)
- define service status in one document, so repeatition stops!
--------------------------------------------------------------------------------
- remove client/ from top level
--------------------------------------------------------------------------------
Generate automatic asciidoc from conf/*
--------------------------------------------------------------------------------
   Ausgaben nach Beendigung vom Starten des Services.

   [ on  ] %s + Ergebnis
   [ off ] %s

   Rekursives herunter/rauffahren
--------------------------------------------------------------------------------
- add error handling to cinit.install.binary
--------------------------------------------------------------------------------
1. Entfernung mount
   -> Example configuration
   -> was man alles machen muss
--------------------------------------------------------------------------------
- add code do implement stopping / restarting with dependency tree
--------------------------------------------------------------------------------
- print service name or cinit: before _everything_ WE print

   - is the reporting ok?

# cinit.create.empty.service: can only be started from the bin directory

- Fix Switching services off !!
- Error codes when shutting down a service?
- Delay dokumentieren
- no_kill dokumentieren

- on.out, on.err, on.in?
   -> reading/writing from/to files

- implement "no_kill" until cinit-0.2 or 0.3?


--------------------------------------------------------------------------------
- Source Logic issues
   - remove FIXME entries (and what should be fixed, too)
--------------------------------------------------------------------------------
Helper scripts, rausgenommen aus Der Doku, muessen fuer
cinit-0.3 ueberprueft werden:

Configure help scripts
~~~~~~~~~~~~~~~~~~~~~~
cinit-conf later
Using prepared scripts

In the bin/ directory of this tarball you'll find at least:

   cinit.add.dependency - add a dependency to a service
   cinit.add.getty      - add a new getty
   cinit.create.empty.service - create an empty service
   cinit.reboot         - reboot in /bin/sh
   cinit.remove.getty   - remove a getty service
   cinit.respawn.off    - switch respawing off
   cinit.respawn.on     - switch respawing on
   cinit.shutdown       - shutdown in /bin/sh

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Optimisations
-------------
   - Installing cinit
      o compiling cinit from source
      o debian / gentoo
   - Configuring
      * add scripts! see below
   - define coding guidelines -> general, with url?
   - Write manpages (use doc/* as base for that)
   - Check Spell and Grammar in documentation
   - write howto:
      o Howto-cinit
      o Howto-cinit-uml

tree_exec
~~~~~~~~~
- only check dependencies (=needs) after the basic run?

Documentation
-------------

developer
~~~~~~~~~
- ST_IN_LIST == startup marker, used to (NOT) insert services into startup
- dep_needs_wants_add is used to add dependencies of a service to the general
  starter list


user
----
- do we really need swapoff? remove umount, swapoff!
   * to services!
   -> they have to do it!
- dependencies with leading '.' (dot) are ignored.
- about cinit-configuration structure
   * cconfig
   * svc/
   * special/ (or however we called it)
      - panic
      - halt
      - poweroff
      - reboot

--------------------------------------------------------------------------------
FAQ
~~~
- DOKU: what happens when a service does not terminate....
   und er als once drin ist
--> Wenn kein ReSPAWN und der Prozess beendet sich nicht,
    dann haengt init!

- multuicall probleme -> busysbox --> GIBT ES NICHT!!
  ---> DOKU DAZU! mit links, doppelt links, aus test
  ---> erklaeren, dass es unproblematisch ist!

--------------------------------------------------------------------------------
csvc:
11:09 < folken23> telmich: oder service allready started. 
--------------------------------------------------------------------------------
cinit:
11:09 < folken23> telmich: zsb. eine grund angabe warum ein dienst nicht gestartet 
                  werden konnte. 
11:09 < folken23> telmich: e.g. file nicht gefunden, service hat nicht 0 
                  zurueckgeworfen. 
                  ---> errno in execute_sth!

Child handlin
~~~~~~~~~~~~~g
- free() everything before starting child

Later
~~~~~
- close(*>2) before forking / executing
   -> close fds, clean environment, etc., ...
   -> do we really need that?
   -> yep, clean environment!
- logging service!
   -> write output $somewhere, wait for syslog?
   -> flush at the end of start-process?
   -> perhaps pipe logging output to a program?
--------------------------------------------------------------------------------
- Doc
   * main.text -> cleanup / remove / split
   * config-dirs
   * FAQ
   * ideas
   * meta.dependencies
      - config/hints/meta depps
   * optimising
      - integrate into other
   * README.text
      - update
   * replacing.init
      - update / integrate
   * special-services.text
      - into configuring/hints?
   * TODO
      - into paths, if necessary
   * updating.cinit
      - update as soon as update is possible?
   * using.rescue
      - update as soon as update is possible?
   * 'os-integration.text'
   * 'daemons.backgrounding'
   * There are some hints on how to migrate to cinit in general and also
   some os specific help in the file 'migrating-init-systems.text',
- CODECHECK:
   * what happens with the wants of the last services?
      - are they added?
      - are they added at the correct position?
- scripts
   * `cinit.check.config` (doc/user/configuring.cinit.text)
      -> circular depedencies!
- Doc.next:
   - installing: report!
      -> write report script.
- Doc later
   * current-init-problems.text
      - current-init-problems.text explains why cinit does not use nor recommends the use of shell scripts.
   * special-services.text

- Begin documentation
   * Check Makefile
   * Integrate Makefile into main Makefile
   * create manpage
   * Write a small manual
      - install
      - configure
      - boot (different OS)
   * generate asciidoc!
- Doc way:
   * installing
   * configuring
      - testconfig!
   * booting
      - different OS / bootloader
   * debugging
- Shutdomn code:
   * begin at init, then shutdown wants/needs, ...
- check that the new wants and need elements are nserted the other way round
   * we go to next, elements must be put before us!
- replace cinit_ipc_logon with cinit_ipc_init...
   * delay ipc code -> after start!

- Cleanup / create object lists
   object-lists/
      cinit
      cservice
      ccontrol
      cinit.halt
      cinit.reboot
      cinit.shutdown (shell script?!?)


TODO.pre9:

   Done:
   - pfad korrigieren (home/..../ -> cinit.release)
   - cg-add nicht aufrufen beim make all!
ser/nico/oeffentlich/computer/projekte/cinit/cinit-0.3pre8/doc'
FILE="size/`date +%Y-%m-%d-%H%M%S`"; ls -l src/cinit > $FILE; cat $FILE; \
   cg-add $FILE
-rwx------ 1 nico nico 72601 2007-04-06 17:52 src/cinit
There is no GIT repository here (.git not found)
make: *** [sizecheck] Fehler 1
   - setup VM for testing: qemu/kvm/virtualbox (no commercial bloaty)
      -> uml!
   - sleep when respawnig!
      -> static delay of five seconds
   do_reboot.c:
      is ipc closed? -> check! => done!
   - ignore msgrcv: Interrupted system call
Session terminated, killing shell...msgq-destroy: Invalid argument
msgq-destroy: Invalid argument
   - do not print an error if /etc/cinit/conf/last is non-existent!
      => print it. Do not not print it, as this can aid debugging.
   include locking via shm, remove test on pid1
      => not necessary imho currently


TODO.pre10:
   Done:
   cleanup client/ comm/ contrib+tools/ util/ tmp/
   Debugging cinit-configuration:
      ls -lR /etc/cinit
      or: cinit.read....

TODO.pre11:
   Remove some debugging, re-introduce DEBUG() macro..
   Fix doc:
   
   make dist should cleanup cc / ld to sane values?
      or do I experiement in tmp/*?

   http://linux.schottelius.org/cinit/browse_source/current/doc/user/config-dirs
   conf/c_halt

   IPC:
      * check msqg-code
      * documentate the ipc functions: update devel/ipc.text
      * check cinit_read_command() (devel/ipc.h)

   do_reboot.c:
      write cinit_svc_shutdown
      - implement do_reboot()
         * so not only booting with cinit works, but also the shutdown
   - write libcinit for use in cmd()
   - find out why gettimeofday() and time() do strange things when called in SIG_CHLD
      => bug opened in glibc, got to code testprogram
   - write cinit.conf.check
      * report broken links in needs/wants
      * report circular dependencies
   - pretty print, reporting is ugly!
   Add handler for ctrl+alt+delete
      * document in paths
         * check whether there's an os-unspecific way to do that
   cleanup bin/
   - write sys-v-init-shutdown-wrapper
      * shutdown
      * halt
      * reboot
      * poweroff
   - write manpages for
      - *.kill
      - cmd
   
   install:
      make install => does not overwrite critical targets
         * cinit
         * *.kill (see client/*)
         * cmd
      make force-install => overwrites /sbin/{halt,poweroff,reboot}?
         => with script that wraps cmd
      make install-template:
         * creates categories
      make install-miniconf:
         * creates categories
         * creates one service starting a shell (depending on the OS!)

      cleanup src/
   finish ipc code so clients can access cinit
   implement CMD_INFO (see comm.h)


TODO.pre12:
   Check and clean doc/
   Remove *TODO*+ROADMAP and leave behin doc/TODO

TODO.pre13:
   code cmd=(cservice ccontrol halt reboot shutdown poweroff)
      => halt/r/... also with kill ...
   Test, release and prepare for final cinit-0.3

TODO.0.3.1
   add log support
      cinit logs to
         -> shm saver
      services log to

TODO unclear
   - create migration scripts
