277 lines
10 KiB
Text
277 lines
10 KiB
Text
|
- define how it should work (doc/braindums/big-picture.text)
|
||
|
- define service status in one document, so repeatition stops!
|
||
|
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
- rename headers/ -> includes/
|
||
|
- remove client/ from top level
|
||
|
--------------------------------------------------------------------------------
|
||
|
- write about shell scripts in system startup
|
||
|
- write about general behaviour (covering the death)
|
||
|
--------------------------------------------------------------------------------
|
||
|
Generate automatic asciidoc from conf/*
|
||
|
--------------------------------------------------------------------------------
|
||
|
Add handler for ctrl+alt+delete
|
||
|
* document in paths
|
||
|
--------------------------------------------------------------------------------
|
||
|
pre-compile config: conf/*
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
panic:
|
||
|
read configuratio from defaults/panic*
|
||
|
-> write execute_something before!
|
||
|
--------------------------------------------------------------------------------
|
||
|
comm:
|
||
|
tmpnow: search for pid in list,
|
||
|
save the pid in the list, so we know whether our executer died!
|
||
|
--------------------------------------------------------------------------------
|
||
|
Logging / cinit:
|
||
|
fuer unsere eigenen ausgaben auch multilog?
|
||
|
|
||
|
Logger: shared memory?
|
||
|
--------------------------------------------------------------------------------
|
||
|
Implement full starting logic in server?
|
||
|
--------------------------------------------------------------------------------
|
||
|
Build full dependency tree at start? And begin from the end?
|
||
|
--------------------------------------------------------------------------------
|
||
|
comm/*:
|
||
|
int read
|
||
|
int write
|
||
|
--> fuer pipes
|
||
|
|
||
|
run_init_svc
|
||
|
muss alle services wissen, die gestartet werden
|
||
|
|
||
|
start_services_with_deps
|
||
|
gibt pointer auf struktur zurueck
|
||
|
-> Anzahl Services (array!)
|
||
|
-> Service:
|
||
|
Name (Pfad)
|
||
|
Ergebniss
|
||
|
-> beim fehler, die nachricht, strerror?
|
||
|
http://www.opengroup.org/onlinepubs/009695399/functions/strerror.html
|
||
|
|
||
|
|
||
|
Beim starten werden needs und wants als needs behandelt, weil
|
||
|
jeder starter _alle_ services zurueckgeben muss.
|
||
|
|
||
|
Ein Prozess kann maximal 512 abhaengigkeiten haben.
|
||
|
-> open files
|
||
|
|
||
|
|
||
|
Neues cinit:
|
||
|
Wenn service fehlschlaegt, wird eine Struktur zurueckgegeben.
|
||
|
|
||
|
Diese enhaelt:
|
||
|
|
||
|
int success =
|
||
|
enum { SVC_SUCCESS, SVC_FAILED, SVC_NEED_FAILED, ... }
|
||
|
|
||
|
char *reason;
|
||
|
|
||
|
Ausgaben nach Beendigung vom Starten des Services.
|
||
|
|
||
|
[ on ] %s + Ergebnis
|
||
|
[ off ] %s
|
||
|
|
||
|
Rekursives herunter/rauffahren
|
||
|
--------------------------------------------------------------------------------
|
||
|
- add error handling to cinit.install.binary
|
||
|
- remove sigio(), create new functions:
|
||
|
- one for cleaning up the socket
|
||
|
- one for doing the communication (specify two fd's)
|
||
|
- put some logic around exec_svc:
|
||
|
o put waiting code herein -> waiting code to structure!
|
||
|
- cleanup serv/sig_reboot.c:7:
|
||
|
o implement os-specific reboot function
|
||
|
--------------------------------------------------------------------------------
|
||
|
1. Entfernung mount
|
||
|
2. kommunikation ueber
|
||
|
1. einen fork pro service
|
||
|
fork(fork)
|
||
|
3. Socket wird erst nach einem Signal erstellt
|
||
|
-> Konfiguration sollte SIGWHATEVER senden
|
||
|
4. Vielleicht panicen, wenn init fehlschlaegt?
|
||
|
--------------------------------------------------------------------------------
|
||
|
Als naechstes:
|
||
|
|
||
|
- add code do implement stopping / restarting with dependency tree
|
||
|
o add used_by to the list of services
|
||
|
o used_by should be a simple (double?) linked list
|
||
|
--------------------------------------------------------------------------------
|
||
|
Documentation:
|
||
|
- Installing cinit
|
||
|
o compiling cinit from source
|
||
|
o debian / gentoo
|
||
|
- Configuring
|
||
|
--------------------------------------------------------------------------------
|
||
|
Add "used" by to each service, so we can track which services to shutdown.
|
||
|
--------------------------------------------------------------------------------
|
||
|
- perhaps use dnotify?
|
||
|
- recheck warm reboot
|
||
|
- fix cservice
|
||
|
- print service name or cinit: before _everything_ WE print
|
||
|
|
||
|
TESTING:
|
||
|
- does cinit eat zombies?
|
||
|
- is the reporting ok?
|
||
|
- does cservice and ccontrol what's expected?
|
||
|
|
||
|
# cinit.create.empty.service: can only be started from the bin directory
|
||
|
|
||
|
- compile cinit static and other tools dynamically per default
|
||
|
|
||
|
- Fix Switching services off !!
|
||
|
- Remove RUN_RUN_SVCs, move code to run_svc so one can determine which
|
||
|
services failed?
|
||
|
--> sequentieller ablauf!
|
||
|
--> parallel ablauf, struct-array mit namen und ergebnis?
|
||
|
--> for dep in deps/*; do fork(run_svc() ); done
|
||
|
-----> while(any_is_running) { sleep }
|
||
|
-------> array durchsuchen, ergebnis nutzen.
|
||
|
- ueberpruefen von wo aus run_svc() aufgerufen wird
|
||
|
|
||
|
- Fix SIGCHILD problem:
|
||
|
- exec_svc wants to waitpid() itself, so SIG_CHILD makes problems
|
||
|
- respawn_svc: does that need to act on SIGCHLD if the master process
|
||
|
is still running?
|
||
|
- kill respawn -> sigchild cleans up, we do not get waitpid perhaps?
|
||
|
- remove umount code?
|
||
|
- remove zombies, but keep away from SIGCHILD problems
|
||
|
- remove mount /etc/cinit/tmp code
|
||
|
-> how to replace?
|
||
|
- fix bug in Makefile: linking happens twice
|
||
|
- do not kill respawing service, if off exists
|
||
|
- ccontrol
|
||
|
- manpages
|
||
|
- Error codes when shutting down a service?
|
||
|
- Delay dokumentieren
|
||
|
- no_kill dokumentieren
|
||
|
- ddoc zuendefuehren
|
||
|
|
||
|
- remove umount, swapoff?
|
||
|
--> to services?
|
||
|
|
||
|
- on.out, on.err, on.in?
|
||
|
-> reading/writing from/to files
|
||
|
|
||
|
--> Wenn kein ReSPAWN und der Prozess beendet sich nicht,
|
||
|
dann haengt init!
|
||
|
- implement "no_kill" until cinit-0.2 or 0.3?
|
||
|
|
||
|
Doku!!!
|
||
|
|
||
|
--------------------------------------------------------------------------------
|
||
|
- Source Logic issues
|
||
|
- remove FIXME entries (and what should be fixed, too)
|
||
|
- memset for timespecs?
|
||
|
- move umount, swapoff and remount to off of init?
|
||
|
-> cleanup sig_reboot.c
|
||
|
- run_svc:
|
||
|
o we have many strcat()s, perhaps save length of pathbuf and strncat at
|
||
|
pathtmp[strlen(pathbuf)] ?
|
||
|
- do we really need swapoff?
|
||
|
--------------------------------------------------------------------------------
|
||
|
- Documentation
|
||
|
- Write manpages (use doc/* as base for that)
|
||
|
- Check Spell and Grammar in documentation
|
||
|
- write howto:
|
||
|
o Howto-cinit
|
||
|
o Howto-cinit-uml
|
||
|
--------------------------------------------------------------------------------
|
||
|
Things I did not do and I don't know whether we have to care about:
|
||
|
|
||
|
- Porting
|
||
|
- add porting code to other unices?
|
||
|
- like openssh guys do?
|
||
|
|
||
|
- close(*>2) before forking / executing
|
||
|
-> close fds, clean environment, etc., ...
|
||
|
-> do we really need that?
|
||
|
- logging service!
|
||
|
-> write output $somewhere, wait for syslog?
|
||
|
-> flush at the end of start-process?
|
||
|
-> perhaps pipe logging output to a program?
|
||
|
--------------------------------------------------------------------------------
|
||
|
[OLD BUGS]
|
||
|
- remove cinit watcher?
|
||
|
-> sig_child -> cycle through list?
|
||
|
- DOKU: what happens when a service does not terminate....
|
||
|
und er als once drin ist
|
||
|
- MANPAGE!
|
||
|
- execve() fails -> no sleep!!
|
||
|
- multiple zombies sometimes - problemservices
|
||
|
-> zombies of respawn watchers are not caught!
|
||
|
-> sig_chld also therein
|
||
|
-> problematic due to wait for child
|
||
|
-doubled cinit instance
|
||
|
- nur einmal
|
||
|
- free() everything before starting child
|
||
|
- cservice!
|
||
|
- prozess nur einmal -> WARTET! cinit auch!
|
||
|
doku:
|
||
|
cservice einmal starten -> wartet auf ende
|
||
|
cint ersetzt init bei gentoo
|
||
|
an error occuerd-> verbose
|
||
|
multuicall probleme -> busysbox --> GIBT ES NICHT!!
|
||
|
---> DOKU DAZU! mit links, doppelt links, aus test
|
||
|
---> erklaeren, dass es unproblematisch ist!
|
||
|
|
||
|
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.
|
||
|
11:09 < folken23> telmich: oder service allready started.
|
||
|
--------------------------------------------------------------------------------
|
||
|
possible BUGS:
|
||
|
|
||
|
[14:44] freelsd:cinit-0.2.2% ./sbin/cservice -e ein
|
||
|
|
||
|
ein: No such file or directory
|
||
|
Bad address
|
||
|
: Service does not exist
|
||
|
|
||
|
cinit-0.2.2:
|
||
|
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
|
||
|
root 1 96.7 0.0 1580 336 ? R 18:59 5:49 /sbin/cinit
|
||
|
root 2 0.0 0.0 0 0 ? SN 18:59 0:00 [ksoftirqd/0]
|
||
|
root 3 0.0 0.0 0 0 ? S 18:59 0:00 [watchdog/0]
|
||
|
root 4 0.0 0.0 0 0 ? S< 18:59 0:00 [events/0]
|
||
|
root 5 0.0 0.0 0 0 ? S< 18:59 0:00 [khelper]
|
||
|
root 6 0.0 0.0 0 0 ? S< 18:59 0:00 [kthread]
|
||
|
root 10 0.0 0.0 0 0 ? S< 18:59 0:00 \_ [khubd]
|
||
|
root 12 0.0 0.0 0 0 ? S< 18:59 0:00 \_ [kblockd/0]
|
||
|
root 99 0.0 0.0 0 0 ? S 18:59 0:00 \_ [pdflush]
|
||
|
root 100 0.0 0.0 0 0 ? S 18:59 0:00 \_ [pdflush]
|
||
|
root 102 0.0 0.0 0 0 ? S< 18:59 0:00 \_ [aio/0]
|
||
|
root 727 0.0 0.0 0 0 ? S< 18:59 0:00 \_ [kseriod]
|
||
|
root 101 0.0 0.0 0 0 ? S 18:59 0:00 [kswapd0]
|
||
|
root 800 0.0 0.0 0 0 ? S 18:59 0:00 [khpsbpkt]
|
||
|
root 803 0.0 0.0 0 0 ? S 18:59 0:00 [pccardd]
|
||
|
root 838 0.0 0.0 0 0 ? S 18:59 0:00 [kjournald]
|
||
|
root 1923 0.0 0.0 1584 200 ? S 18:59 0:00 /sbin/cinit
|
||
|
root 1924 0.0 0.3 3624 1936 tty2 Rs 18:59 0:00 \_ -zsh
|
||
|
root 1969 0.0 0.0 1580 320 tty2 S 19:05 0:00 \_ cservice -e 3
|
||
|
root 1972 0.0 0.1 2604 828 tty2 R+ 19:05 0:00 \_ ps axuwwf
|
||
|
root 1945 0.0 0.0 0 0 tty2 Z 19:01 0:00 [loadkeys] <defunct>
|
||
|
cinit: [cprofile:profile]
|
||
|
cinit should not be started directly, but by your kernel.
|
||
|
umount raus
|
||
|
/etc/cinit/specials/... rein
|
||
|
|
||
|
1. Doku auf asciidoc umstellen
|
||
|
2. den signalhandler code fixen
|
||
|
3. den tempmount entfernen
|
||
|
|
||
|
--> cinit-0.3-rc1
|
||
|
--------------------------------------------------------------------------------
|
||
|
--------------------------------------------------------------------------------
|
||
|
--------------------------------------------------------------------------------
|
||
|
|
||
|
Optimisations
|
||
|
-------------
|
||
|
|
||
|
tree_exec
|
||
|
~~~~~~~~~
|
||
|
- only check dependencies (=needs) after the basic run?
|