Dimonitzem el servidor d'echos
fitxer programaciodimonislinux.pdf del curs
http://acacha.dyndns.org/mediawiki/index.php/Programaci%C3%B3_de_Dimonis_Linux
Podem baixar el codi font de la Farga (anonymous/anonymous): https://svn.lafarga.cpl.upc.edu/dades/svn/plinux/sessio5/echoDimoni/
Els fitxers que es necessiten són:
echoDimoni$ ls -R #->llistat recursiu dins els directoris echod.c echod_estats.c esquelet etc Makefile Makefile~ skeleton ./etc: init.d ./etc/init.d: echod echoDimoni$ make
Compilem i es generen els executables echod i client.
Ara ja tenim compilat el dimoni echod, i ara s'ha d'instal.lar per tal que s'executi en background
$ cd /etc /etc$ ls rc # són els nivells dels dimonis: # rc0: nivell 0, màquina apagada # rc1: nivell 1, sistema monousuari # rc2: debian sempre es queda en aquest nivell # en altres sistemes: nivell 5 (executar entorn gràfic), nivell 6 (reboot) /etc$ ls -l rc0.d/ #-> veiem que estan en color blau (són enllaços).
amb aquesta comanda apareixen els dimonis que arrenquen en el nivell r0. Són els enllaços, on es veu la crida al fitxer en la carpeta init.d
S (start)
K (stop)
el número després de la S o la K indica l'ordre d'execució, com s'executen els serveis en l'inici de la màquina. Són scripts en bash. La plantilla de com s'ha de fer un fitxer d'aquests és un skeleton (no cal reinventar, ja està fet i s'ha d'adaptar)
Per tant, el que nosaltres haurem de fer és a partir del skeleton (/etc/init.d/skeleton) fer un script bash que digui com ha d'engegar, aturar-se i reiniciar el dimoni echod, ficar el script dins de init.d i fer un enllaç simbòlic dins dels nivells on volguem executar-lo.
$ sudo cat /etc/default/rcS
controlar coses que es fan quan s'inicia la màquina
Per ex, TMPTIME=0 diu que cada vegada que s'inicia la màquina s'esborra el contingut de la carpeta /tmp
Podem posar el valor de 60 per dir que ho esborri cada 2 mesos.
Executem el dimoni:
$ ./echod $
veiem que s'està executant en background doncs ens torna a aparèixer el prompt $ de la shell. És a dir, no dóna l'aparença de què és un bucle infinit que està a l'espera de rebre missatges.
$ ps aux joan 21368 0.0 0.0 1544 244 ? S 10:28 0:00 ./echod
des del client enviem un missatge, i efectivament el servidor el rep i la retorna al client, que la rep. Per tant funciona correctament.
Ara he de fer que arrenqui atuomàticament en iniciar el sistema. El posaré en el nivell 5. En comptes de partir del skeleton, partiré d'un script que ja funcoioni, com el cron:
$ cd /etc/init.d /etc/init.d$ cp cron echod /etc/init.d$ sudo joe echod
i el deixo de la següent manera. Fitxer echod
#!/bin/sh # modificat Joan Quintana, 30 oct 08 # Start/stop the echod daemon. # ### BEGIN INIT INFO # Provides: echod (servidor d'ecos) # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Servidor d'ecos. Pràctica # Description: Servidor d'ecos. Necessita el client # ./client missatge -> el servidor contesta 'missatge' que el rep altra vegada el client ### END INIT INFO #comprovem que existeixi el fitxer test -f /home/joan/echoDimoni/echod || exit 0 #LSBNAMES='-l' # Uncomment for LSB name support in /etc/cron.d/ #no sé què és això . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Engegant echod" "echod" start-stop-daemon --start --quiet --pidfile /var/run/echod.pid --name echod --startas /home/joan/echoDimoni/echod -- $LSBNAMES log_end_msg $? ;; stop) log_daemon_msg "Aturant echod" "echod" start-stop-daemon --stop --quiet --pidfile /var/run/echod.pid --name echod log_end_msg $? ;; restart) log_daemon_msg "Reiniciant echod" "echod" start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/echod.pid --name echod start-stop-daemon --start --quiet --pidfile /var/run/echod.pid --name echod --startas /home/joan/echoDimoni/echod -- $LSBNAMES log_end_msg $? ;; *) log_action_msg "Mode d'us: /etc/init.d/echod {start|stop|restart}" exit 2 ;; esac exit 0
i ara faig manualment l'enllaç simbòlic en els nivells 2, 3, 4 i 5:
$ cd /etc/rc2.d $ ls -la $ sudo ln -s /etc/init.d/echod S88echod $ ls -la #comprovem que existeix l'enllaç $ cd /etc/rc3.d $ sudo ln -s /etc/init.d/echod S88echod $ cd /etc/rc4.d $ sudo ln -s /etc/init.d/echod S88echod $ cd /etc/rc5.d $ sudo ln -s /etc/init.d/echod S88echod
Reiniciem, i fem ps aux i enviem un missatge des del client, i comprovem que funciona correctament (compte!, funciona quan ho fem amb els nivells 2, 3, 4 i 5. Quan vaig fer només el link en el nivell 5 no funcionava).
Tots aquests links es poden fer de forma automàtica fent:
$ update-rc.d echod defaults
Això està explicat a Executar un script a l'inici
Recordem que si volem apagar o engegar manualment el servidor d'echos hauré de fer:
$ sudo /etc/init.d/echod * Mode d'us: /etc/init.d/echod {start|stop|restart} $ sudo /etc/init.d/echod restart * Reiniciant echod echod
creat per Joan Quintana Compte