17
|
1 |
|
|
2 |
Compilació:
|
|
3 |
--------------------------------------
|
|
4 |
Per compilar-lo fent servir gcc (crec que com a mínim 3.4, pel c99):
|
|
5 |
$ make
|
|
6 |
|
|
7 |
Per compilar-lo fent servir tcc (que suporta c99, és fàcil d'instal·lar, etc.
|
|
8 |
(Tiny C Compiler, http://fabrice.bellard.free.fr/tcc/ ):
|
|
9 |
$ make -f Makefile.tcc
|
|
10 |
|
46
|
11 |
Per a testejar una mica el programa, hi ha un petit script de test que
|
|
12 |
requereix bash.
|
17
|
13 |
Per a execultar-lo:
|
|
14 |
$ ./test.sh
|
|
15 |
|
|
16 |
|
|
17 |
Els fitxers:
|
|
18 |
--------------------------------------
|
|
19 |
syslog_in_udp <port> Espera missatges pel port UDP especificat
|
|
20 |
(IPv4 i IPv6)
|
|
21 |
syslog_in_npipe <npipe> Espera missatges per la named pipe (ha d'existir!)
|
|
22 |
syslog_in_unix <usocket> Crea i escolta el socket unix per missatges
|
|
23 |
syslog_kernel Executa els anteriors programes, i llegeix de tots
|
|
24 |
alhora.
|
18
|
25 |
unix_writer <usocket> Programa per escriure a un Unix socket
|
17
|
26 |
|
46
|
27 |
|
|
28 |
Configuració del programa:
|
|
29 |
--------------------------------------
|
|
30 |
La configuració la trobem al fitxer "syslog.conf". Aquests són els seus
|
|
31 |
valors per defecte (a config.c):
|
|
32 |
from_unix=unixlog
|
|
33 |
from_npipe=disabled
|
|
34 |
from_udp=disabled
|
|
35 |
to_udp_host=localhost
|
|
36 |
to_udp_port=1235
|
|
37 |
tcp_manager=1234 (No s'utilitza encara!)
|
|
38 |
log_file=file.log
|
|
39 |
|
|
40 |
No hi poden haver espais; el format és <paràmetre>=<valor> per cada línia.
|
|
41 |
Si el fitxer de configuració "syslog.conf" no defineix res d'un paràmetre,
|
|
42 |
valdrà el valor per defecte.
|
|
43 |
Si a un paràmetre li donem el valor "disabled", la part afectada no estarà
|
|
44 |
activa.
|
|
45 |
|
17
|
46 |
Notes:
|
|
47 |
--------------------------------------
|
|
48 |
El programa està escrit en c99.
|
|
49 |
|
46
|
50 |
El programa no gestiona bé lectures de múltiples missatges per cada crida
|
|
51 |
read(). Només pot llegir un missatge per crida.
|
|
52 |
Això és perquè encara en prou feines he implementat alguna cosa de la
|
17
|
53 |
rfc 3164.
|
|
54 |
|
|
55 |
Els syslog_in_* entenen el missatge "close", cosa que fa que morin. Si moren
|
|
56 |
tots els fills de syslog_kernel, el kernel també mor.
|
|
57 |
|
46
|
58 |
Al fitxer syslog_in_udp se li pot passar el paràmetre de port en negatiu,
|
|
59 |
cosa que vol dir que escoltarà també per IPv6 al port "-(port)" donat. Si es
|
|
60 |
dóna en positiu, només escoltarà IPv4.
|
18
|
61 |
|
|
62 |
El codi de llegir la "named pipe" intenta fer el possible amb locks i
|
|
63 |
reobertures de la pipe de manera que no es perdi mai la lectura de la
|
|
64 |
named pipe donada.
|
46
|
65 |
|
|
66 |
Els syslog_in_* ignoren el senyal HUP. El syslog_in_unix capta SIGTERM i
|
|
67 |
SIGINT, perquè a més de tancar els handles, també ha de tancar el unix socket.
|
|
68 |
|
|
69 |
El syslog_kernel pot passar missatges a un servidor udp. També pot escriure
|
|
70 |
els missatges rebuts a un fitxer de log.
|
|
71 |
|
|
72 |
El syslog_kernel entén els senyals:
|
|
73 |
- SIGHUP - rellegir i reaplicar el que digui el fitxer de configuració.
|
|
74 |
- SIGTERM o SIGINT - matar els fills, i després morir ell.
|
|
75 |
(Atenció - si apretem Control-C des d'un xterm, envia SIGINT al grup de
|
|
76 |
processos del terminal; així, si hem executat el kernel, els fills
|
|
77 |
rebran SIGINT igualment)
|
|
78 |
|
|
79 |
No he implementat el SIGUSR1 per a buidar el caché de missatges rebuts a disc.
|
|
80 |
|
|
81 |
El programa dóna informació de debug per stderr.
|
|
82 |
|
|
83 |
El programa no és gaire "error-safe": si no es compleixen certes condicions,
|
|
84 |
el programa simplement abortarà - a vegades amb assert(). De tota manera,
|
|
85 |
tots els casos crítics crec que estan sota control.
|