Copertina
Autore Mark Wilding
CoautoreDan Behman
Titolo Self Service Linux
EdizioneApogeo, Milano, 2006 , pag. 416, cop.fle., dim. 168x240x24 mm , Isbn 978-88-503-2461-3
OriginaleSelf Service Linux [2006]
TraduttoreGeorges Piriou, Marco Tripolini
LettoreFlo Bertelli, 2006
Classe informatica: sistemi
PrimaPagina


al sito dell'editore


per l'acquisto su IBS.IT

per l'acquisto su BOL.IT

per l'acquisto su AMAZON.IT

 

| << |  <  |  >  | >> |

Indice


Prefazione                                               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 xi

Prefazione


Linux 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.

| << |  <  |