Salve!
Questa guida vi permetterà di capire ancor meglio (spero), il funzionaento di Linux. In particolare sul come si carica un servizio di sistema e come si crea.
Cosa ci serve
Beh praticamente nulla.... se non il sapere cosa vogliamo lanciare all'avvio, un editor di testo. Gradita (ma non indispensabile) la conoscienza del linguaggio Bash.
Che cos'è un servizio di sistema
E' un programma (o meglio un processo del sistema) che viene lanciato al boot, nella fase di caricamento di Linux (o di qualsiasi altro SO). Ci sono servizi che operano e poi "muoiono", e altri che invece sopravvivono per tutta la durata della sessione. In questo caso sono chiamati "Demoni" (ES: l'icona in basso a destra della connessione di rete è "collegata" a un demone che rileva la connessione e la sconnessione del cavo).
Come si carica un servizio
Visto che un servizio è un programma, e nel momento in cui viene eseguito diviene un processo (o programma attivo) del sistema, ebbene questo dovra essere lanciato da init. Dopo la fase di caricamento del kernel (che è la parte di sistema che dialoga con l'hardware) viene lanciato init, che è il primo ad essere lanciato, ed è quello che lancia tutti gli altri processi del SO (si dice infatti che ogni processo è figlio di init che quindi è evidentemente il padre ).
Cosa sono i runlevel
Quando init inizia a lanciare processi, man mano che la Memoria Centrale (RAM) si riempie di processi, avviene il passaggio a livelli successivi. Ogni livello contiene l'insieme di processi, che vengono lanciati in quel livello. Ogni livello ha una certa priorita e importanza.
Dal sito: http://www.coresis.com/extra/linuxcorsobase
Quote:
Runlevel 0 : /etc/rc.d/rc0.d Questo runlevel avvia la sequenza di arresto del sistema (shutdown)
Runlevel 1: /etc/rc.d/rc1.d Questo runlevel rappresenta la modalità singolo utente, nessun altro utente può collegarsi, il servizio di rete è disabilitato.
Runlevel 2: /etc/rc.d/rc2.d Rappresenta lo stato multiutente, il servizio rete è attivo ma è disabilitato il file sharing.
Runlevel 3: /etc/rc.d/rc3.d In genere è quello predefinito quando si opera in modalità testuale, tutti i servizi sono attivi.
Runlevel 4: /etc/rc.d/rc4.d Inutilizzato. Può essere dedicato ad usi personali
Runlevel 5: /etc/rc.d/rc5.d E' il runlevel predefinito quando si vuole avviare Linux in modalità grafica
Runlevel 6: /etc/rc.d/rc6.d Il runlevel 6 è quello di reboot.
Tanto per chiarire le idee, noi andremo ad inserire i nostri servizi, nel runlevel 5. E non nel 6 altrimenti il nostro processo viene lanciato solo nella fase di "rebbot"
Ma dove sono i servizi del sistema
Sono (almeno su Mandriva) nella cartella /etc/rc.d/init.d raggiungibile anche da /etc/init.d (c'è un link simbolico in "/etc", ossia un collegamento).
Il nostro "runlevel" si trova invece in /etc/rc.d/rc5.d/ oppure (sempre per via del link) in /etc/rc5.d. In questa cartella sono contenuti tuttavia tutti link simbolici. I link (o collegamenti) puntano ai file in /etc/rc.d/init.d e hanno una forma del tipo:
<br />...<br />S95kheader<br />S99drakxtools_http <br />S99local <br />S99wine <br />
Dove la "S" indica che sono dei servizi, il "numero" subito dopo (95, 99...) invece indica la priorita, o meglio l'ordine di lancio dei servizi. Basta comunque dare uno sguardo in /etc/rc5.d perrendere chiare le idee.
Come si crea un servizio
Un servizio è un file bash con una minima struttura. I file bash sono file che contengono comandi shell uno sotto l'altro, e quando viene eseguito un file di questo tipo non si fa altro che eseguire una serie di comandi shell.
Eccone un esempio:<br />#!/bin/sh<br />#<br /># /etc/init.d/nomefile<br /># Subsystem file for nomefile<br />#<br /># chkconfig: 2345 X 05<br /># description: My made-home service <br />#<br /># processname: nomefile<br /><br /><br />comando1<br />comando2<br />comando3<br /><br />RETVAL=$?<br />exit $RETVAL<br />
Una volta creato un file di testo, con dentro quanto ho postato, accingetevi a modificare la dicitura nomefile con il nome che darete al file. Il nome del file dovra essere SENZA punti ne caratteri particolari, insomma siate il piu semplici possibili. Per la lunghezza del nome non credo ci siano problemi.
La riga:<br /># chkconfig: 2345 X 05<br />
va modificata mettendo al posto della "X" un numero. Questo numero rappresenta la priorita del servizio. Mentre "05" indica il runlevel.
La riga:<br /># description: My made-home service<br />
Contiene una semplice descrizione di cio che fa il servizio.Quindi modificate "My made-home service" con quanto piu vi aggrada.
Le righe:<br />comando1<br />comando2<br />comando3<br />
...3 , 4 , 5 , inserite quanti comandi volete. I comandi che si possono inserire sono quelli della shell bash. Quindi ad esempio: modprobe , ifconfig , mkdir , rm ......etc fino ai banali ls e echo....che non sono molto utili in questo contensto
Le righe:<br />RETVAL=$?<br />exit $RETVAL<br />
Non le modificate. Servono al sistema, che riceve un valore di ritorno, dall'esecuzione del servizio. Si puo impostare il tutto in modo da ritornare un "FALLITO" (che appare infatti nella scheramta di boot) se il servizio non si avvia correttamente. Tuttavia occorre conoscere bene il bash, e questo non è lo scopo di questa guida.
Dove metto il file "nomefile"
Il file va messo nella cartella /etc/init.d , quindi bisogna avere i privilegi di root per farlo.
Concludendo
In fine bisogna creare un link simbolico dentro il runlevel 5, che punta al nostro "nomefile". Ad esempio supponiamo di avere in /etc/init.d il nostro servizio "nomefile". Andremo a fare:
<br />ln -s /etc/init.d/nomefile /etc/rc5.d/S<b>X</b>nomefile<br />
ATTENZIONE
Nel comando precedente, la "X" va sostituita con un numero del tipo "00" , "01" ....."94" etc... Cosi facendo avrete in /etc/rc5.d il link S00nomefile oppure S01nomefile .......S99nomefile etc....
Infine
Se la procedura è andata a buon fine, e avete screato correttamente il servizio, questo comparirà nella lista dei servizi, visionabile con drakxservices
Buon Divertimento !
Commenti
Inviato da neo571 il Dom, 04/03/2007 - 11:44.
Ottimo Tutorial
Ottima Guida,
Interessante e Utilissima.
Case Cooler Master Cavalier - Enermax Liberty 500W - Intel Core 2 Duo e6420 - 2X1GB Corsair XMS2 675MHz - Asus P5B-E - Asus Geforce 8500GT - WD Caviar 320GB - Mandriva 2007.1 Spring X86_64
Inviato da kio341 il Dom, 04/03/2007 - 17:35.
Re: Ottimo Tutorial
concordo bella guida!!!
Quote:
qui c'è una piccola imprecisione la "S" indica che il servizio è in Start come K(kill) indica che il servizio è in Stop!!!
vedi da
http://www.debian.org/doc/manuals/reference/reference.it.html
Quote:
Dopo il completamento del processo di boot, init lancia tutti i servizi configurati per girare nel runlevel predefinito. Questo è definito dalla riga per id in /etc/inittab. Debian arriva con id=2.
Debian usa i seguenti runlevel:
*
1 (modalità singolo utente),
*
2 a 5 (varie modalità multiutente) e
*
0 (arresta il sistema)
*
6 (riavvia il sistema).
I runlevel 7, 8, e 9 possono essere utilizzati, ma le loro directory rc non vengono popolate quando i pacchetti vengono installati.
Scambiate i runlevel mediante il comando telinit.
Quando si entra in un runlevel tutti gli script in /etc/rcrunlevel.d/ vengono eseguiti. La prima lettera del nome determina il modo in cui lo script viene lanciato: quelli che iniziano con K vengono lanciati con l'argomento stop. Quelli che iniziano per S vengono lanciati con l'argomento start. Gli script vengono eseguiti in ordine alfabetico; per cui quelli "stop" vengono lanciati prima di quelli "start" e i numeri a due cifre che seguono K o S determinano l'ordine in cui venono eseguiti.
Gli script in /etc/rcrunlevel.d sono infatti semplici collegamenti simbolici agli script in /etc/init.d/. Essi accettano anche argomenti tipo "restart" e "force-reload"; questi ultimi metodi possono essere utilizzati dopo che un sistema è stato avviato per riavviare i servizi o forzarli a ricaricare i loro file di configurazione.
Per esempio:
# /etc/init.d/exim4 reload
Inviato da killer1987 il Sab, 10/03/2007 - 12:38.
Re: Ottimo Tutorial
bella guida... perché non fate un pdf con tutte le guide del sito? sarebbe interessante, no?
Alé Mageia, C'mon Mageia!!! - Wiki Italiano Mandriva - Acer Aspire 5633, intel GMA 950, stamp HP Laserjet 1018, scanner Epson
Inviato da mapi1968 il Lun, 09/07/2007 - 08:16.
Re: Ottimo Tutorial
Un po' di imprecisioni riguardo chkconfig. Se all'interno dello script abbiamo una riga
chkconfig: 2345 55 45
2345 indica i Runlevel di Start
55 il numero di Start
45 il numero di Kill
Concludendo...
è inutile creare i collegamenti se abbiamo configurato correttamente la riga di chkconfig, ci pensa lui:
# chkconfig --add nome_del_servizio
In questo caso verranno creati i collegamenti S55 in Runlevel 2,3,4,5 e K45 in Runlevel 0,1,6
Se il servizio non serve più:
# chkconfig --del nome_del_servizio
http://rpmlinux.org
RSS: http://feedproxy.google.com/rpmlinux/JPTf
Mandriva RPM download repository for 2009.0 2008.1 i586