|
|
| << | < | > | >> |IndicePrefazione xi Argomenti trattati da questo libro xii A chi è rivolto questo libro xiv Ringraziamenti xiv Altro xv A proposito degli autori xvi Capitolo 1 Procedure consigliate e indagine iniziale 1 Predisposizione del sistema al troubleshooting 2 Le quattro fasi dell'indagine 3 Fase 1: indagine iniziale con le vostre competenze 5 Fase 2: ricerca efficace su Internet 9 Fase 3 - Approfondimento dell'indagine: tecniche raccomandate 11 Fase 4: ottenimento di aiuto o nuovi spunti 20 Tecniche di indagine 26 Confronto tra sintomo e causa 26 Troubleshooting dei prodotti commerciali 35 Conclusioni 36 Capitolo 2 Strace e il tracciamento delle chiamate di sistema 37 Che cos'è strace? 37 Maggiori informazioni sul punto di vista del kernel 41 Quando utilizzare strace 44 Un semplice esempio 45 Compilazione statica del programma 49 Opzioni importanti di strace 50 Come seguire i processi figlio 50 Tempistica dell'attività delle chiamate di sistema 51 Modalità verbose 53 Tracciamento di un processo in esecuzione 55 Conseguenze e problemi connessi all'utilizzo di strace 55 strace ed EINTR 56 Esempi di debugging 57 Come ridurre i tempi di avvio agendo su LD_LIBRARY_PATH 57 La variabile di ambiente PATH 60 Tracciamento di inetd o xinetd: il Super Server 60 Errori di comunicazione 63 Utilizzo di strace per indagare situazioni di blocco del sistema 64 Reverse engineering con strace 66 Esempio di tracciamento di una chiamata di sistema 69 Codice di esempio 69 Spiegazione del codice per il tracciamento delle chiamate di sistema 83 Conclusioni 84 Capitolo 3 Il filesystem /proc 85 Informazioni sui processi 86 /proc/self 86 [...] Capitolo 4 Compilazione 117 Il compilatore GNU GCC 117 Breve storia di GCC 118 [...] Capitolo 5 Lo stack 147 Analogia con il mondo reale 148 Stack nelle architetture x86 e x86-64 149 [...] Capitolo 6 Il debugger GNU (GDB) 189 Quando utilizzare un debugger 190 Utilizzo della riga di comando di GDB 191 [...] Capitolo 7 Crash e blocchi nei sistemi Linux 271 Raccolta delle informazioni 272 Analisi del file syslog 272 [...] Capitolo 8 Debugging del kernel con KDB 291 Scaricamento e attivazione di KDB 292 Utilizzo di KDB 293 [...] Capitolo 9 ELF (Executable and Linking Format) 299 Concetti e definizioni di base 301 Simboli 301 [...] Appendice A Strumenti per il troubleshooting 383 Informazioni sui processi e debugging 384 Debugger GDB (GNU Debugger) 384 [...] Appendice B Script per la raccolta dei dati 397 Panoramica 397 [...] Indice analitico 411 |
| << | < | > | >> |Pagina xiPrefazioneLinux si propone oggi come la scelta più adatta per gli utenti aziendali e privati: è potente, stabile quanto i sistemi operativi commerciali, sicuro e, qualità più importante di tutte, open source. Tra i principali fattori che dovrebbero convincere a installare Linux su un computer domestico o aziendale vi sono il servizio e il supporto, anche se, dal momento che lo sviluppo di Linux è curato da migliaia di programmatori volontari in tutto il mondo, non è sempre chiaro a chi fare riferimento quando si ha un problema.
Nel più puro spirito open source, il supporto deve essere considerato in
modo diverso da quanto avviene con i software commerciali: oltre alla vastissima
comunità di esperti di Linux, questo sistema operativo possiede strumenti per il
troubleshooting di avanguardia e, naturalmente, mette a disposizione il proprio
codice sorgente. Tali risorse integrano i classici servizi di supporto
professionali, forniti da aziende del calibro di IBM e da distributori
di primo livello come RedHat e SUSE. L'abilità di sfruttare al meglio queste
risorse aggiuntive è conosciuta in gergo come
self service,
ed è l'argomento primario di questo libro. L'espressione
Self Service Linux
può assumere significati diversi, a seconda di come la interpreta chi la legge:
per chi utilizza Linux in ambito domestico significa conoscere meglio il sistema
operativo, mentre per gli utenti Linux aziendali si riferisce alla capacità di
diagnosticare problemi in modo rapido ed efficiente, incrementando così le
competenze professionali dei propri dipendenti. Per i dirigenti o i responsabili
di azienda che hanno il compito di decidere se passare a Linux, la possibilità
del "self service" significa minori costi di gestione e recupero degli
investimenti più elevato, qualunque sia la versione di Linux adottata. A
prescindere dal vostro profilo utente Linux, è importante che possiate trarre il
massimo vantaggio da questo sistema operativo, in termini sia di esperienza, sia
di investimento.
Argomenti trattati da questo libro In sintesi, questo volume descrive le procedure più efficienti ed efficaci di analisi dei problemi in ambiente Linux, approfondendo la trattazione delle tecniche migliori di troubleshooting e ricerca delle informazioni e delle risorse in Internet e illustrando come utilizzare i principali strumenti di indagine messi a disposizione da Linux stesso. Il Capitolo 1 è un vero e proprio corso intensivo sulle pratiche di diagnosi, che vi sarà di aiuto nel procedere all'individuazione dei problemi in maniera professionale; in esso si descrive dove e come ricercare le informazioni in Internet al fine di procedere all'analisi dei tipi di problemi più comuni. Il Capitolo 2 verte sull'utility strace, senza dubbio lo strumento di uso più frequente nell'indagine dei problemi in ambiente Linux, fornendo utili informazioni sia sul suo utilizzo sia sul suo funzionamento. Nel capitolo troverete anche il codice sorgente di un semplice programma per il tracciamento e l'analisi del kernel mediante l'interfaccia ptrace. Il Capitolo 3 prende in esame il filesystem /proc, che contiene una vera messe di informazioni sull'hardware, il kernel e i processi attivi sul sistema. L'obiettivo di questo capitolo è mettere in evidenza alcune delle caratteristiche e dei trucchi più avanzati utili per il troubleshooting e la diagnostica del sistema: per esempio, viene mostrato come utilizzare la "combinazione magica" di tasti Kernel Magic SysRq in /proc/sys/kernel/sysrq. Il Capitolo 4 contiene informazioni dettagliate sulla compilazione. Probabilmente vi chiederete per quali ragioni un libro sul debugging dei sistemi Linux dedichi un intero capitolo a questo argomento. La risposta è semplice, e sta nel fatto che i problemi di diagnostica in Linux sono diversi da quelli che caratterizzano i sistemi operativi commerciali: la differenza più importante è che il codice sorgente di tutte le utility e del sistema operativo stesso è liberamente disponibile. Questo capitolo vi consentirà di ricompilare un'applicazione includendo le informazioni di debug e di generare un listato misto assembly/sorgente per procedere all'analisi di problemi particolarmente complessi (per esempio, per cercare la riga del codice sorgente che genera una situazione di blocco del programma), oppure per risolvere un inconveniente verificatosi in fase di ricompilazione del kernel di Linux. Il Capitolo 5 è interamente dedicato allo stack, un elemento fondamentale per il buon funzionamento di ogni sistema informatico. Oltre a descrivere nei minimi particolari la struttura dello stack, che dovrebbe essere nota a qualsiasi esperto di Linux, il capitolo analizza una serie di listati di codice sorgente, di cui potrete effettuare il tracciamento dello stack servendovi anche di strumenti e applicazioni alternativi a quelli utilizzati nel testo. Gli esempi di codice proposti non sono utili solo per illustrare come funziona lo stack ma, se applicati nelle funzionalità di debugging di un'applicazione, permettono di risparmiare tempo e sforzi nell'attività di troubleshooting. Il Capitolo 6 esamina nel dettaglio le diverse applicazioni di debugging, in particolare il debugger GDB (GNU Debugger) e la sua interfaccia grafica DDD (Data Display Debugger). Rispetto ad altri sistemi operativi, Linux ha il vantaggio di fornire un ottimo programma di debugging, GDB. I debugger possono essere utilizzati per l'identificazione di molti tipi di problemi e, poiché GDB è disponibile in forma libera e gratuita, vale la pena di studiarne le caratteristiche, sia quelle di base sia quelle più avanzate. In questo capitolo sono descritte tecniche evolute di debugging dei programmi scritti in C++ e delle applicazioni multithread, nonché molte altre funzionalità. Avete mai collegato una finestra di xterm a un processo con GDB? Questo capitolo vi mostrerà come e perché farlo! Il Capitolo 7 presenta una descrizione dettagliata dei blocchi di sistema, i ben noti crash e hang. Nei sistemi operativi cosiddetti "proprietari" generalmente l'arresto del sistema richiede di contattare il servizio di supporto del produttore; con Linux, invece, l'utente finale è in grado di eseguire il debugging anche di un problema di kernel in modo autonomo, o quantomeno reperire le informazioni più importanti sui problemi più frequenti. Dovendo richiedere la consulenza di un esperto, sapere quali dati raccogliere sarà sicuramente utile per velocizzare le operazioni di diagnosi a distanza del problema. Questo capitolo prende in considerazione un'ampia gamma di argomenti, dalla tecnica per collegare una console seriale alla procedura da seguire per trovare la riga del codice che ha provocato una condizione di trap del kernel (Kernel Oops): per esempio, vedrete nel dettaglio come indurre un trap nel kernel ed eseguirne il debugging per rintracciare la riga di codice sorgente che ne è responsabile. Il Capitolo 8 approfondisce il debugging del kernel attraverso KDB, il debugger del kernel. Viene illustrato come attivare e configurare questo strumento, nonché come utilizzare alcuni comandi che la maggior parte degli utenti Linux può usare anche senza esperienza di kernel: per esempio, questo capitolo illustra come scoprire che cosa sta eseguendo un processo a livello del kernel allo scopo di reperire informazioni preziose su un processo bloccato che non può essere terminato con il comando kill. Il Capitolo 9 è interamente riservato alla descrizione dettagliata del formato di file ELF (Executable Linking Format), i cui dettagli sono spesso ignorati o dati per scontati. La conoscenza approfondita dello standard ELF, invece, può aprire innumerevoli strade a nuove tecniche di debugging. Questo capitolo prende in esame le caratteristiche peculiari del formato ELF, proponendo suggerimenti e trucchi che pochi utenti conoscono; troverete l'analisi del codice ELF e istruzioni dettagliate per realizzare, per esempio, l'override delle funzioni usando la variabile di ambiente LD_PRELOAD e la tabella GOT (Global Offset Table). Si parlerà ancora del debugger GDB, per spiegare come utilizzarlo per intercettare manualmente le funzioni che si vogliono ridirigere. L'Appendice A è una sorta di vetrina che espone le utility, le funzionalità e i file più utili presenti in ambiente Linux. Di ogni elemento vengono forniti una breve descrizione, il contesto di utilizzo e riferimenti utili per scaricarne la versione più recente.
L'Appendice B contiene uno script di raccolta dei dati per il
troubleshooting, che vi sarà particolarmente utile nella gestione di sistemi
mission-critical
o se siete utenti che si occupano di supporto remoto. Scoprirete che lo script
in questione, da solo, potrà farvi risparmiare molte ore e persino giorni
nell'attività di debugging remoto di un problema.
|