La guida Debian --------------- Osamu Aoki Traduzione italiana: Davide Di Lazzaro Sezione A.1, `Autori' CVS, gio gen 18 11:52:32 UTC 2007 ------------------------------------------------------------------------------- Estratto -------- La guida Debian (http://qref.sourceforge.net/) è pensata per fornire un'ampio panorama del sistema Debian come una _guida dell'utente post-installazione_. Essa copre molti aspetti dell'amministrazione di sistema attraverso esempi di _comandi da shell_. Vengono proposte lezioni base, trucchi e molte altre informazioni su molti argomenti, tra cui i concetti fondamentali tipici di un sistema Debian, suggerimenti per l' installazione, il sistema Debian di gestione dei pacchetti, il kernel sotto Debian, l'affinamento del sistema, la costruzione di un gateway, editor di testo, CVS, programmazione e GnuPG per i _non sviluppatori_. Avviso di Copyright ------------------- Copyright (C) 2001--2005 by Osamu Aoki Copyright (Chapter 2) (C) 1996--2001 by Software in the Public Interest. Questa guida può essere utilizzata nei termini della GNU General Public License versione 2 o successive. (http://www.gnu.org/copyleft/gpl.html) Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this document into another language, under the above conditions for modified versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English. ------------------------------------------------------------------------------- Contenuti --------- 1. Prefazione 1.1. Il documento ufficiale 1.2. Convenzioni utilizzate 1.3. Script di esempio 1.4. Impostazione di base 1.5. Le basi delle distribuzioni Debian 2. Nozioni fondamentali della Debian 2.1. Gli archivi Debian 2.1.1. Struttura della directory 2.1.2. Le distribuzioni Debian 2.1.3. La distribuzione `stable' 2.1.4. La distribuzione `testing' 2.1.5. La distribuzione `unstable' 2.1.6. La distribuzione `frozen' 2.1.7. Codice dei nomi della distribuzioni Debian 2.1.8. Nomi in codice usati in passato 2.1.9. Da dove vengono i nomi delle distribuzioni? 2.1.10. La directory `pool' 2.1.11. Alcune note storiche su Sid 2.1.12. Pacchetti caricati in `incoming' 2.1.13. Recuperare un vecchio pacchetto 2.1.14. Sezioni per architettura 2.1.15. Il codice sorgente 2.2. Il sistema di gestione dei pacchetti Debian 2.2.1. Panoramica dei pacchetti Debian 2.2.2. Il formato dei pacchetti Debian 2.2.3. Convenzioni nei nomi dei pacchetti Debian 2.2.4. Mantenimento della configurazione locale 2.2.5. Script di gestione Debian 2.2.6. Priorità dei pacchetti 2.2.7. Pacchetti Virtuali 2.2.8. Dipendenze dei pacchetti 2.2.9. Cosa significa "Pre-Depends" 2.2.10. Lo stato dei pacchetti 2.2.11. Evitare l'aggiornamento dei pacchetti 2.2.12. Pacchetti sorgente 2.2.13. Compilare pacchetti binari dai sorgenti 2.2.14. Creare nuovi pacchetti Debian 2.3. Aggiornare un sistema Debian 2.3.1. `dpkg' 2.3.2. APT 2.3.3. `dselect' 2.3.4. Aggiornare un sistema in funzione 2.3.5. File `.deb' scaricati e tenuti in cache 2.3.6. Tenere una registrazione dell'aggiornamento 2.4. La sequenza di boot della Debian 2.4.1. Il programma `init' 2.4.2. I Runlevel 2.4.3. Personalizzare i runlevel 2.5. Supportare le differenze 2.6. Internazionalizzazione 2.7. Debian ed il kernel 2.7.1. Compilare un kernel da un sorgente non-Debian 2.7.2. Gli strumenti per compilare un kernel personalizzato. 2.7.3. Funzioni speciali per trattare con i moduli 2.7.4. Disinstallare un vecchio pacchetto kernel 3. Suggerimenti per l'installazione di un sistema Debian 3.1. Tracce generali per l'installazione di Linux 3.1.1. Le basi della compatibilità hardware 3.1.2. Definire i componenti del PC ed il chipset 3.1.3. Definire i componenti del PC tramite Debian 3.1.4. Definire i componenti del PC tramite altri S.O. 3.1.5. Il mito di Lilo 3.1.6. GRUB 3.1.7. Scegliere i floppy di avvio 3.1.8. Installazione 3.1.9. Quale host ed IP usare per una LAN 3.1.10. Account utenti 3.1.11. Creare i filesystem 3.1.12. Linee guida per la memoria DRAM 3.1.13. Lo spazio di Swap 3.2. Configurare Bash 3.3. Configurare il mouse 3.3.1. Mouse PS/2 3.3.2. Mouse USB 3.3.3. Touchpad 3.4. Configurare NFS 3.5. Configurare Samba 3.6. Configurare la stampante 3.6.1. `lpr'/`lpd' 3.6.2. CUPS(TM) 3.7. Altri consigli di configurazione per l'host 3.7.1. Installate pochi altri pacchetti dopo l'installazione iniziale 3.7.2. Moduli 3.7.3. Impostazione base del CD-RW 3.7.4. Grosse memorie e spegnimento automatico 3.7.5. Strani problemi di accesso con alcuni siti web 3.7.6. Configurazione di PPP per una connessione dial-up 3.7.7. Altri file di configurazione da perfezionare in `/etc' 4. Lezioni di Debian 4.1. Per iniziare 4.1.1. Login come root al prompt dei comandi 4.1.2. Impostare un ambiente minimale per il novizio 4.1.3. Aggiungere un account utente 4.1.4. Muoversi tra le console virtuali 4.1.5. Lo spegnimento del PC 4.1.6. E' tempo di giocare 4.2. Midnight commander (MC) 4.2.1. Migliorare MC 4.2.2. Lanciare MC 4.2.3. Il file manager in MC 4.2.4. Trucchi per la riga di comando in MC 4.2.5. L'editor in MC 4.2.6. Il visualizzatore in MC 4.2.7. Le caratteristiche di lancio automatico di MC 4.2.8. Il fileystem FTP virtuale di MC 4.3. Ambiente di lavoro Unix-like 4.3.1. Combinazioni speciali di tasti 4.3.2. Comandi base Unix 4.3.3. Esecuzione dei comandi 4.3.4. Il comando semplice 4.3.5. Esecuzione dei comandi e variabili d'ambiente 4.3.6. Il percorso di ricerca dei comandi 4.3.7. Opzioni della riga di comando 4.3.8. Metacaratteri della shell 4.3.9. Restituire il valore dei comandi 4.3.10. Tipiche sequenze di comandi 4.3.11. Alias dei comandi 4.4. Elaborazione del testo Unix-like 4.4.1. Le espressioni regolari 4.4.2. Espressioni sostitutive 4.5. Il filesystem Unix-like 4.5.1. Le basi dei file Unix 4.5.2. Il concetto di filesystem in Debian 4.5.3. Permessi di accesso a file e directory 4.5.4. Timestamp 4.5.5. Collegamenti 4.5.6. Named pipe (FIFO) 4.5.7. Socket 4.5.8. Device 4.5.9. Il filesystem `/proc' 4.6. Il sistema X Window 4.6.1. Lanciare il sistema X Window 4.6.2. Il menu di X Window 4.6.3. Sequenze di tasti per X Window 4.7. Studi ulteriori 5. Aggiornare una distribuzione a `stable', `testing' o `unstable' 5.1. Aggiornare da Potato a Woody 5.2. Preparazione per l'aggiornamento 5.3. Aggiornamento 5.3.1. Usare `dselect' 5.3.2. Usare `apt-get' 6. Gestione dei pacchetti in Debian 6.1. Introduzione 6.1.1. Strumenti principali di gestione dei pacchetti 6.1.2. Strumenti utili 6.2. Iniziare la gestione dei pacchetti Debian 6.2.1. Impostare APT 6.2.2. Installare i task 6.2.3. `aptitude' 6.2.4. `dselect' 6.2.5. Tracciare una distribuzione con APT 6.2.6. I comandi di `aptitude', `apt-get' e `apt-cache' 6.3. Comandi di sopravvivenza Debian 6.3.1. Controllo dei bachi in Debian e ricerca di aiuto 6.3.2. Aggiornamento con APT: risoluzione dei problemi 6.3.3. Salvataggio mediante `dpkg' 6.3.4. Recuperare i dati sulla selezione dei pacchetti 6.3.5. Recupero del sistema dopo danneggiamento di `/var' 6.3.6. Installare un pacchetto su un sistema non bootabile 6.3.7. Cosa fare se `dpkg' non funziona 6.4. Comandi del "paradiso" Debian 6.4.1. Informazioni su di un file 6.4.2. Informazioni su di un pacchetto 6.4.3. Installazione automatica con APT 6.4.4. Riconfigurare i pacchetti già installati 6.4.5. Rimozione e purga dei pacchetti 6.4.6. Mantenere vecchi pacchetti 6.4.7. Sistema misto `stable'/`testing'/`unstable' 6.4.8. Potare i file della cache 6.4.9. Salvare/copiare la configurazione del sistema 6.4.10. Portare un pacchetto nel sistema `stable' 6.4.11. Archivio locale dei pacchetti 6.4.12. Convertire od installare un pacchetto binario di altra distribuzione 6.4.13. Comando di installazione automatica 6.4.14. Verificare i file dei pacchetti installati 6.4.15. Ottimizzare `sources.list' 6.5. Altre particolarità di Debian 6.5.1. Il comando `dpkg-divert' 6.5.2. Il pacchetto `equivs' 6.5.3. Comandi alternativi 6.5.4. Uso dei runlevel 6.5.5. Demoni di servizio disabilitati 7. Il kernel Linux su Debian 7.1. Ricompilare il kernel 7.1.1. Il metodo Debian standard 7.1.2. Il metodo classico 7.1.3. I Kernel header 7.2. Kernel 2.4 modulare 7.2.1. PCMCIA 7.2.2. SCSI 7.2.3. Funzioni di rete 7.2.4. Il filesystem EXT3 ( > 2.4.17) 7.2.5. Supporto nel kernel 2.4 per Realtek RTL-8139 7.2.6. Supporto per la porta parallela 7.3. Mettere a punto il kernel tramite il filesystem proc 7.3.1. Troppi file aperti 7.3.2. Intervalli di flush del disco rigido 7.3.3. Vecchie macchine lente e con poca memoria 7.4. Il kernel 2.6 con udev 8. Trucchi per Debian 8.1. Avviare il sistema 8.1.1. "Ho scordato la password di root!" (1) 8.1.2. "Ho scordato la password di root!" (2) 8.1.3. Non riesco a fare il boot 8.1.4. "Voglio disabilitare X al boot!" 8.1.5. Altri trucchi con il boot prompt 8.1.6. Come impostare i parametri di boot (GRUB) 8.2. Registrazione degli eventi 8.2.1. Registrare gli eventi della shell 8.2.2. Registrare gli eventi di X 8.3. Copia ed archiviazione di una intera sottodirectory 8.3.1. Comandi base per copiare una intera sottodirectory 8.3.2. `cp' 8.3.3. `tar' 8.3.4. `pax' 8.3.5. `cpio' 8.3.6. `afio' 8.4. Backup differenziali e sincronizzazione dei dati 8.4.1. Backup differenziale con rdiff 8.4.2. Backup giornalieri con `pdumpfs' 8.4.3. Backup differenziali regolari con RCS 8.5. Recuperare un sistema bloccato 8.5.1. Uccidere un processo 8.5.2. Alt-SysRq 8.6. Alcuni piccoli comandi da ricordare 8.6.1. Pager 8.6.2. Memoria libera 8.6.3. Impostare l'ora (BIOS) 8.6.4. Impostare l'ora (NTP) 8.6.5. Come controllare le funzionalità della console, come lo screensaver 8.6.6. Ricerca dei database amministrativi 8.6.7. Disabilitare il suono (beep) 8.6.8. Messaggi di errore sulla console 8.6.9. Impostare i caratteri corretti per la console 8.6.10. Riportare la console allo stato normale 8.6.11. Convertire file di testo da DOS a Unix 8.6.12. Convertire un file di testo con `recode' 8.6.13. Sostituzione delle espressioni regolari 8.6.14. Modificare un file "in situ" tramite uno script 8.6.15. Estrarre le differenze e fondere gli aggiornamenti da un file sorgente 8.6.16. Convertire grossi file in file più piccoli 8.6.17. Estrarre dati da un file tabella 8.6.18. Parti di script per il piping 8.6.19. Pezzi di script ricorsivi 8.6.20. Brevi follie in Perl script 8.6.21. Catturare il testo od un archivio delle ML da una pagina web 8.6.22. Stampare bene una pagina Web 8.6.23. Stampare bene una pagina di manuale 8.6.24. Unire due file Postscript o PDF 8.6.25. Cronometrare un comando 8.6.26. Il comando `nice' 8.6.27. Programmare gli eventi (`cron', `at') 8.6.28. Scambio di console con `screen' 8.6.29. Testare la rete: le basi 8.6.30. Eliminare la posta dallo spool locale 8.6.31. Rimuovere la posta congelata dallo spool locale 8.6.32. Riinviare il contenuto delle caselle di posta 8.6.33. Ripulire il contenuto di un file 8.6.34. File fantoccio 8.6.35. `chroot' 8.6.36. Come controllare i collegamenti 8.6.37. `mount' il file immagine del disco rigido 8.6.38. Samba 8.6.39. Utilità per filesystem estranei 8.7. Errori tipici da notare 8.7.1. `rm -rf .*' 8.7.2. `rm /etc/passwd' 9. Messa a punto del sistema Debian 9.1. Inizializzazione del sistema 9.1.1. Personalizzare gli script di inizializzazione 9.1.2. Personalizzare i file di log 9.1.3. Ottimizzare l'accesso hardware 9.2. Controllare gli accessi 9.2.1. Restrizione tramite PAM 9.2.2. "Why GNU `su' does not support the `wheel' group" (Perchè GNU `su' non supporta il gruppo `wheel') 9.2.3. Il significato dei vari gruppi 9.2.4. `sudo' -- lavorare con maggiore sicurezza 9.2.5. Controllare l'accesso ai servizi 9.2.6. Centralizzare l'autenticazione -- LDAP 9.3. Masterizzatori 9.3.1. Introduzione 9.3.2. Approccio 1: moduli + `lilo' 9.3.3. Approccio 2: ricompilare il kernel 9.3.4. Procedure post-configurazione 9.3.5. Il file CD-image (avviabile) 9.3.6. Scrivere sul masterizzatore (R, RW): 9.3.7. Creare un file immagine di un CD 9.3.8. CD con le immagini Debian 9.3.9. Backup del sistema su CD-R 9.3.10. Copiare CD musicali su CD-R 9.3.11. Masterizzare i DVD-R, DVD-RW e DVD+RW 9.4. X 9.4.1. Pacchetti del sistema X 9.4.2. Pacchetti per il riconoscimento hardware per X 9.4.3. X server 9.4.4. X client 9.4.5. Le X session 9.4.6. Connessione TCP/IP ad X 9.4.7. Connessioni ad un X server remoto -- `xhost' 9.4.8. Connessioni ad un X server remoto -- `ssh' 9.4.9. L'emulatore di terminale di X -- `xterm' 9.4.10. X resources 9.4.11. Mappatura della tastiiera e dei tasti del puntatore in X 9.4.12. Diventare root in X 9.4.13. Font TrueType in X 9.4.14. Web Browser (grafici) 9.5. SSH 9.5.1. Principi basilari di SSH 9.5.2. Port forwarding -- per il tunneling SMTP/POP3 9.5.3. Connettersi con meno passwords -- RSA 9.5.4. Client SSH differenti 9.5.5. SSH agent 9.5.6. Risoluzione dei problemi con SSH 9.6. Posta 9.6.1. Mail transport agent (MTA) 9.6.2. Ritirare la posta -- Fetchmail 9.6.3. Processare la posta -- Procmail 9.6.4. Processare lo spam con `crm114' 9.6.5. Leggere la posta -- Mutt 9.7. Localizzazione (l10n) 9.7.1. Le basi della localizzazione 9.7.2. I locale 9.7.3. Introduzione ai locale 9.7.4. Attivare le capacità di supporto locale 9.7.5. Attivare un locale in particolare 9.7.6. Formato data ISO 8601 9.7.7. Esempio per US (ISO-8859-1) 9.7.8. Esempio per l'Italiano con euro (ISO-8859-15) 9.7.9. Esempio per un sistema multilingue per X window system 9.7.10. Metodi alternativi di input in X 9.7.11. Emulatori di terminale in X 9.7.12. Supporto UTF-8 per l'emulatore di terminale in X 9.7.13. Esempio per UTF-8 in console framebuffer 9.7.14. Oltre i locale 9.8. Multilingualizzazione (m17n) 10. Configurare la rete 10.1. Le basi dell'IP networking 10.2. Configurazione della rete a basso livello 10.2.1. Configurazione a basso livello -- `ifconfig' and `route' 10.2.2. Configurazione a basso livello -- `ip' 10.2.3. Configrazione di un'interfaccia Wi-Fi. 10.2.4. Configurare un'interfaccia PPP 10.3. Dare un nome al computer 10.3.1. Hostname 10.3.2. Mailname 10.4. Domain Name Service (DNS) 10.4.1. Il risolutore 10.4.2. Gestire le informazioni del nameserver -- `resolvconf' 10.4.3. Salvare i nomi cercati -- `nscd', `dnsmasq', `pdnsd', `bind9' 10.4.4. Fornire un Domain Name Service -- `bind' 10.5. Configurare le interfacce di rete con DHCP 10.6. Configurazione di rete ad alto livello in Debian 10.6.1. Configurare un'interfaccia con un indirizzo IP statico 10.6.2. Configurare un'interfaccia con DHCP 10.6.3. Configurare un'interfaccia Wi-Fi 10.6.4. Configurare un'interfaccia PPP 10.6.5. Configurare un'interfaccia PPPoE 10.6.6. Configurare più interfacce Ethernet per un gateway 10.6.7. Configurare le interfacce virtuali 10.7. Configurazione di rete mediante definizione delle interfacce logiche 10.8. Magie della configurazione di rete 10.8.1. Selezione delle interfacce logice con guessnet 10.8.2. Configurazione di rete automatica con laptop-net 10.9. Gestire nomi inconsistenti delle interfacce dati dal kernel 10.10. Iniziare la configurazione di rete 10.10.1. Iniziare la configurazione di rete all'avvio 10.10.2. Iniziare la configurazione di rete -- `hotplug' 10.10.3. Iniziare la configurazione di rete -- `ifplugd' 10.10.4. Iniziare la configurazione di rete -- `waproamd' 10.10.5. Configurazione di rete e PCMCIA 10.11. Mappatura multilivello 10.12. Configurazione dei servizi di rete 10.13. Risoluzione dei problemi di rete 10.14. Costruire un gateway router 10.14.1. Configurare Netfilter 10.14.2. La tabella di netfilter 10.14.3. Gestione di connessioni multiple di rete 11. Gli Editor 11.1. Editor più popolari 11.2. Editor di salvataggio 11.3. Emacs e Vim 11.3.1. Tracce per Vim 11.3.2. Tracce per Emacs 11.3.3. Lanciare l'editor 11.3.4. Riassunto dei comandi (Emacs e Vim) 11.3.5. Configurare Vim 11.3.6. Ctags 11.3.7. Convertire una schermata da sintassi-evidenziata in sorgente HTML 11.3.8. Dividere lo schermo con `vim' 12. Sistemi per il controllo versione 12.1. Concurrent Version System (CVS) 12.1.1. Installare un server CVS 12.1.2. Esempi di una sessione CVS 12.1.3. Risoluzione dei problemi 12.1.4. Comandi CVS 12.2. Subversion 12.2.1. Installazione di un server Subversion 12.2.2. Muovere un deposito CVS a Subversion 12.2.3. Subversion usage examples 13. Programmazione 13.1. Dove iniziare 13.2. Shell 13.2.1. Bash -- la shell interattiva standard _GNU_ 13.2.2. Le shell POSIX 13.2.3. Parametri della shell 13.2.4. Redirezione 13.2.5. Condizionali 13.2.6. Processamento delle righe di comando 13.3. Awk 13.4. Perl 13.5. Python 13.6. Make 13.7. C 13.7.1. Un semplice programma in C (`gcc') 13.7.2. Debugging 13.7.3. Flex -- un miglior Lex 13.7.4. Bison -- un Yacc migliore 13.7.5. Autoconf 13.8. Web 13.9. Preparazione di documenti 13.9.1. `roff' 13.9.2. SGML 13.9.3. TeX/LaTeX 13.9.4. Literate Programming 13.10. Creare pacchetti debian 13.10.1. Impacchettare un singolo binario 13.10.2. Impacchettare con gli strumenti 14. GnuPG 14.1. Installazione di GnuPG 14.2. Uso di GnuPG 14.3. Gestione di GnuPG 14.4. Usare GnuPG con altre applicazioni 14.5. Uso con Mutt 14.5.1. Uso con Vim 15. Supporto per Debian 15.1. Riferimenti 15.2. Trovare il significato di una parola 15.3. Scoprire la popolarità di un pacchetto Debian 15.4. Il sistema Debian di tracciamento dei bachi 15.5. Liste di messaggi 15.6. Internet Relay Chat (IRC) 15.7. Motori di ricerca 15.8. Siti Web A. Appendice A.1. Autori A.2. Garanzie A.3. Feedback A.4. Formato del documento A.5. Il labirinto di Debian A.6. Citazioni Debian ------------------------------------------------------------------------------- 1. Prefazione ------------- La guida Debian (http://qref.sourceforge.net/) è nata per fornire una descrizione a grandi linee del sistema Debian, intesa come guida utente post-installazione. Il lettore a cui è indirizzata è qualcuno interessato a leggere gli script di shell. Mi aspetto che il lettore abbia acquisito delle conoscenze base dei sistemi tipo Unix, prima di leggere questo documento. Ho fatto una scelta ponderata di _non_ spiegare ogni cosa in dettaglio, se questa può essere trovata in una pagina di manuale, o in una pagina info, oppure in un documento HOWTO. Al posto di dare delle spiegazioni complete, ho tentato di fornire delle informazioni pratiche, fornendo le sequenze esatte dei comandi nel testo principale, oppure negli script di esempio reperibili sotto http://www.debian.org/doc/manuals/debian-reference/examples/. Dovete comprendere il contenuto degli esempi prima di dare i comandi. Il vostro sistema potrebbe richidere sequenze di comandi lievemente diverse. Molte delle informazioni incluse consistono in richiami ai riferimenti più autorevoli, elencati in Sezione 15.1, `Riferimenti'. Questo documento è nato come "guida rapida", poi è cresciuto. Nondimeno, _Keep it short and simple (Sii semplice e conciso)_ (KISS) è il mio principio guida. Per un aiuto sulle procedure di emergenza per il vostro sistema, andate subito a Sezione 6.3, `Comandi di sopravvivenza Debian'. 1.1. Il documento ufficiale --------------------------- L'ultima versione ufficiale del documento è reperibile negli archivi Debian come pacchetto di nome `debian-reference-it' ed anche reperibile da http://www.debian.org/doc/manuals/debian-reference/. L'ultima versione in fase di sviluppo è http://qref.sourceforge.net/Debian/. Il progetto è ospitato presso http://qref.sourceforge.net/, dove questo documento è disponibile per essere scaricato in formato testo, HTML, PDF, SGML e PostScript. 1.2. Convenzioni utilizzate --------------------------- "La guida Debian" fornisce informazioni attraverso brevi comandi `bash'. Le convenzioni utilizzate sono le seguenti: # comando nell'account root $ comando nell'account utente ... descrizione dell'azione Questi esempi di comandi di shell usano `PS2=" "' Vedere Sezione 13.2.1, `Bash -- la shell interattiva standard _GNU_' per maggiori informazioni su Bash. Il riferimento a: * una _pagina di manuale_ in stile UNIX è dato sotto forma di bash(1). * una _pagina TEXINFO_ GNU è dato sotto forma di `info libc'. * un _libro_ è dato sotto forma di _The C Programming Language_. * una _URL_ è dato sotto forma di http://www.debian.org/doc/manuals/debian-reference/. * un _file_ nel sistema è dato sotto forma di `/usr/share/doc/Debian/reference/'. Abbreviazioni: * _LDP_: Linux Documentation Project (http://www.tldp.org/) * _DDP_: Debian Documentation Project (http://www.debian.org/doc/) Altre abbreviazioni vengono definite nel testo prima di essere usate. In questo documento per i documenti LDP si forniscono solo i riferimenti alle URL. Tuttavia, dei documenti LDP ne sono stati fatti dei pacchetti per Debian; quando sono installati, i documenti sono disponibili in `/usr/share/doc/HOWTO/'. Vedere Sezione 15.1, `Riferimenti'. 1.3. Script di esempio ---------------------- Gli script di esempio (http://www.debian.org/doc/manuals/debian-reference/examples/) che accompagnano questo documento nel pacchetto `debian-reference-it' disponibile in `/usr/share/doc/Debian/reference/examples/'. Il punto "." che precede il nome dei file nascosti è convertito in sottolineatura "_". Estensioni aggiuntive sono state date quando ci sono altri script di esempio alternativi. 1.4. Impostazione di base ------------------------- Se il sistema è stato installato con il minimo dei pacchetti, e volete fare l'uso migliore di questo documento, allora è consigliabile dare i seguenti comandi per installare altri pacchetti che contengono documenti utili: # aptitude install mc less ssh vim kernel-package \ manpages-dev doc-debian doc-linux-text \ debian-policy developers-reference maint-guide \ apt-howto harden-doc debian-reference \ libpam-doc glibc-doc samba-doc exim4-doc-html 1.5. Le basi delle distribuzioni Debian --------------------------------------- Debian mantiene tre distribuzioni diverse simultaneamente. Esse sono: * `stable' --- Ottima per organizzare un server, dato che è l'unica a ricevere aggiornamenti per la sicurezza. Vedere Sezione 2.1.3, `La distribuzione `stable''. * `testing' --- la distribuzione preferita per una workstation, siccome contiene le ultime versioni di software per desktop che ha ricevuto un minimo di prove. Vedere Sezione 2.1.4, `La distribuzione `testing''. * `unstable' --- Sul filo del rasoi. la scelta degli sviluppatori Debian Vedere Sezione 2.1.5, `La distribuzione `unstable''. Quando i pacchetti in `unstable' non hanno annunci di bachi release-critical (RC) da almeno una settimana o più, vengono automaticamente passati a `testing'. le distribuzioni Debian hanno dei nomi in codice, come descritto in Sezione 2.1.7, `Codice dei nomi della distribuzioni Debian'. Prima del rilascio di Woody, nell'agosto del 2002, le tre distribuzioni erano, rispettivamente, Potato, Woody, e Sid. Dopo il rilascio di Woody erano diventate, Woody, Sarge, e Sid. Quando verrà rilasciata Sarge, le distribuzioni `stable' ed `unstable' diventeranno Sarge e Sid; verrà quindi creata una nuova `testing' (all'inizio come copia di `stable') e le verrà dato un nuovo nome in codice. Sottoscrivete alla lista di messaggi a basso volume `debian-devel-announce@lists.debian.org' per annunci importanti su Debian. Vedere Sezione 2.1, `Gli archivi Debian'. Se volete usare dei pacchetti con versioni più recenti di quelle rilasciate con la distribuzione che state usando, allora o aggiornate ad una distribuzione più nuova, come descritto in Capitolo 5, `Aggiornare una distribuzione a `stable', `testing' o `unstable'', oppure aggiornate solo i singoli pacchetti. Se questi non possono essere aggiornati facilmente, allora potreste pensare ad un backport, come descritto in Sezione 6.4.10, `Portare un pacchetto nel sistema `stable''. Tracciare `testing' può avere come effetto collaterale di ritardare l'installazione dei pacchetti che contengono aggiornamenti per la sicurezza. Questi vengono caricati in `unstable' e migrano in `testing' solo dopo un certo ritardo. Se mescolate le distribuzioni, p. es. `testing' con `stable' o `unstable' con `stable', vi troverete alla fine a prendere pacchetti fondamentali, tipo `libc6' da `testing' o `unstable', senza garanzie che non contengano bachi. Siete stati avvertiti. Usare `testing' o `unstable' aumenta il rischio di incappare in bachi seri. Potete gestirlo o impiantando uno schema multiboot con una distribuzione Debian più stabile, o con il trucco elegante di usare `chroot', come descritto in Sezione 8.6.35, ``chroot''. Quest'ultimo vi permetterà di far girare distribuzioni Debian diverse contemporaneamente su console differenti. Dopo una spiegazione sui fondamentali della distribuzione Debian in Capitolo 2, `Nozioni fondamentali della Debian', vi verranno fornite alcune informazioni di base per aiutarvi a vivere felicemente con il software più recente, usufruendo dei vantaggi delle distribuzioni `testing' e `unstable' di Debian. Gli impazienti dovrebbero procedere immediatamente a Sezione 6.3, `Comandi di sopravvivenza Debian'. Felice aggiornamento! ------------------------------------------------------------------------------- 2. Nozioni fondamentali della Debian ------------------------------------ Questo capitolo fornisce le informazioni fondamentali sul sistema debian per i non-sviluppatori. Per avere informazioni più autorevoli, vedere: * Debian Policy Manual * Debian Developer's Reference * Debian New Maintainers' Guide reperibili sotto Sezione 15.1, `Riferimenti'. Se state cercando una qualsiasi risposta che li riguarda senza, però, tutti i loro dettagli,andate direttamente a Capitolo 6, `Gestione dei pacchetti in Debian' o ad altri capitoli. Questo capitolo è formato da documenti presi dalla "Debian FAQ", e profondamente riorganizzati, per permettere ad un qualsiasi amministratore di un sistema Debian di avere un solido punto di partenza. 2.1. Gli archivi Debian ----------------------- 2.1.1. Struttura della directory -------------------------------- Il software impacchettato per la debian, è disponibile in una delle numerose directory su ciascun Mirror Debian (http://www.debian.org/mirror/) raggiungibili tramite FTP o HTTP. Queste sono le directory presenti su ciascun mirror, sotto la directory `/debian/': `/dists/': Contiene le "distribuzioni" ed era il luogo canonico di accesso dei pacchetti disponibili nelle versioni rilasciate e pre-rilascio. Alcuni vecchi pacchetti, i files `Contents-*.gz', ed i files `Packages.gz' sono ancora qui. `pool/': Nuova locazione, che contiene fisicamente tutti i pacchetti, sia quelli della versione rilasciata, che quelli pre-rilascio. `tools/': Utilità DOS per creare dischetti boot, partizionare il disco rigido, comprimere/decomprimere i file e lanciare Linux. `doc/': La documentazione base, come le FAQ, le istruzioni per la notifica dei bachi, ecc. `indices/': I file dei Manutentori, ed i file override. `project/': In gran parte materiale solo per sviluppatori, tipo: `project/experimental/': Pacchetti e strumenti ancora in via di sviluppo, in fase alfa. I normali utenti non dovrebbero utilizzare i pacchetti qui contenuti, che possono essere pericolosi persino per i più esperti. `project/orphaned/': Pacchetti lasciati dai loro vecchi manutentori e tolti dalla distribuzione. 2.1.2. Le distribuzioni Debian ------------------------------ Di norma sono tre le distribuzioni contenute nella directory `dists'. Sono definite come la distribuzione `stable', la `testing' e la `unstable'. Talvolta se ne aggiunge una quarta, la `frozen'. Ogni distribuzione viene definita con un collegamento simbolico alla directory reale, tramite un nome proprio nella directory `dists'. 2.1.3. La distribuzione `stable' -------------------------------- Le voci dei pacchetti per la distribuzione `stable', Debian Sarge (3.1r0), vengono inserite nella directory `stable' (collegamento simbolico a `sarge/'): * `stable/main/': Contiene i pacchetti che costituiscono formalmente il rilascio più recente del sistema Debian. Tutti i pacchetti sono totalmente complianti con le Linee guida Debian per il Software Libero (http://www.debian.org/social_contract#guidelines) (DFSG) (disponibile anche come `/usr/share/doc/debian/social-contract.txt' installato da `debian-doc'). * `stable/non-free/': Contiene i pacchetti la cui distribuzione è in qualche modo limitata, tale da richiedere ai distributori delle cautele dovute ai loro requisiti specifici di copyright. Per esempio alcuni pacchetti hanno licenze che ne vietano la distribuzione commerciale. Altri possono essere ridistribuiti, ma sono degli shareware. * `stable/contrib/': Contiene i pacchetti che sono di per sè DFSG-free e DFSG-liberi, ma dipendono in qualche modo da un pacchetto che _non è_ DFSG-libero. Ora, in aggiunta alle locazioni sopra descritte, i nuovi pacchetti sono fisicamente localizzati nella directory `pool' (Sezione 2.1.10, `La directory `pool''). Lo stato attuale dei bachi della distribuzione `stable' è riportato in sulla pagina Web Problemi di Stable (http://ftp-master.debian.org/testing/stable_probs.html). 2.1.4. La distribuzione `testing' --------------------------------- Le voci dei pacchetti per la distribuzione `testing', Debian Etch, sono registrate nella directory `testing' (collegamento simbolico a `etch') dopo aver subito un periodo di prova in `unstable'. Ora, in aggiunta alle locazioni sopra descritte, i nuovi pacchetti sono fisicamente localizzati nella directory `pool' (Sezione 2.1.10, `La directory `pool''). La directory `testing' ha delle sottodirectory, `main', `contrib' e `non-free', che hanno le stesse funzioni che in `stable'. I pacchetti devono essere sincronizzati in tutte le architetture per le quali sono stati compilati e non devono mostrare dipendenze tali da renderli non installabili; devono inoltre avere meno bachi release-critical delle versioni in `unstable'. In questo modo si auspica che `testing' sia sempre molto vicina ad essere candidata al rilascio. Per maggiori dettagli sul meccanismo che regola la distribuzione vedere http://www.debian.org/devel/testing. Lo stato aggiornato della distribuzione `testing' è riportato presso: * update excuses (http://ftp-master.debian.org/testing/update_excuses.html) * testing problems (http://ftp-master.debian.org/testing/testing_probs.html) * bug release-critical (http://bugs.debian.org/release-critical/) * bug del base system (http://bugs.qa.debian.org/cgi-bin/base.cgi) * bug nei pacchetti standard e dei task (http://bugs.qa.debian.org/cgi-bin/standard.cgi) * altri bug e note sul bug squashing party (http://bugs.qa.debian.org/) 2.1.5. La distribuzione `unstable' ---------------------------------- Le voci dei pacchetti della distribuzione `unstable', sempre con nome in codice "Sid", sono registrate nella directory `unstable' (collegamento simbolico a `sid/') dopo essere state caricate nell'archivio Debian, rimanendovi finchè non vengono spostate in `testing'. I nuovi pacchetti sono fisicamente localizzati nella directory `pool' (Sezione 2.1.10, `La directory `pool''). La directory `unstable' ha delle sottodirectory, `main', `contrib' e `non-free', che hanno le stesse funzioni che in `stable'. La distribuzione `unstable' contiene le immagini più recenti del sistema in fase di sviluppo. Gli utenti possono liberamente usare e testare questi pacchetti, ma vengono avvisati del loro precario stato di preparazione. Il vantaggio di usare `unstable' è quello di essere sempre al massimo dell'aggiornamento del progetto Debian relativo al software---siate però pronti a raccogliere i pezzi se qualcosa va storto. Lo stato aggiornato della distribuzione `unstable' è riportato presso la pagina Web Unstable Problems (http://ftp-master.debian.org/testing/unstable_probs.html). 2.1.6. La distribuzione `frozen' -------------------------------- Una volta che la distribuzione testing è sufficientemente matura, diventa frozen; ciò significa che nessun nuovo codice viene più accettato, solo eliminazioni di bachi, se necessari. In aggiunta un nuovo albero testing viene creato nella directory `dists', con un nuovo nome. La distribuzione frozen passa attraverso un ciclo di test (chiamato appunto "test cycles") di qualche mese caratterizzato da aggiornamenti intermittenti ed importanti stabilizzazioni. Viene tenuto un registro dei bug della distribuzione frozen che possono impedire il rilascio di un pacchetto o di tutta la distribuzione. Una volta che il conteggio dei bug scende al di sotto di una valore massimo prestabilito, la distribuzione frozen diventa `stable' e viene rilasciata. La precedente distribuzione stable diventa obsoleta (e finisce in archivio). 2.1.7. Codice dei nomi della distribuzioni Debian ------------------------------------------------- I nomi delle directory localizzate fisicamente nella directory `dists', come `sarge' e `etch', sono semplicemente dei nomi in codice. Quando una distribuzione Debian è nella fase di sviluppo le viene assegnato un nome in codice e non un numero di versione. Lo scopo di questi nomi è di rendere il mirroring delle distribuzioni Debian più semplice (se, ad esempio, una directory reale come `unstable' cambiasse improvvisamente di nome in `stable', una gran quantità di programmi dovrebbe essere nuovamente scaricata senza motivo). Attualmente `stable' è un collegamento simbolico a `sarge' e `testing' è un collegamento simbolico a `etch'. Ciò significa che `Sarge' è la distribuzione attualmente stable e `Etch' è l'attuale testing. `unstable' è un collegamento simbolico permanente a `sid', dato che Sid è sempre la distribuzione unstable. 2.1.8. Nomi in codice usati in passato -------------------------------------- I nomi in codice che sono già stati utilizzati sono: "Buzz" per la release 1.1, "Rex" per la 1.2, "Bo" per la 1.3.x, "Hamm" per la 2.0, "Slink" per la 2.1, "Potato" per la 2.2, "Woody" per la 3.0 e "Sarge" per la 3.1. 2.1.9. Da dove vengono i nomi delle distribuzioni? -------------------------------------------------- Finora sono stati presi dai nomi dei personaggi del film _Toy Story_ della Pixar. * _Buzz_ (Buzz Lightyear) era l'astronauta, * _Rex_ era il tirannosauro, * _Bo_ (Bo Peep) era la bambina che si prese cura della pecorella, * _Hamm_ era il porcellino salvadanaio, * _Slink_ (Slinky Dog) era il cane giocattolo, * _Potato_ era, ovviamente, Mr. Potato, * _Woody_ era il cowboy. * _Sarge_ era il "leader of The Green Plastic Army Men". * _Etch_ (Etch-a-Sketch) era la lavagna. * _Sid_ era il bambino della porta accanto che rompeva i giocattoli. 2.1.10. La directory `pool' --------------------------- Storicamente i pacchetti erano contenuti nella subdirectory di `dists' corrispondente alla distribuzione di cui facevano parte. Questo portò a vari problemi, tipo un grosso consumo di banda di connessione dei mirror ogni volta che venivano fatti dei cambiamenti di grossa entità. Ora i pacchetti vengono tenuti in una grossa "vasca" (pool), strutturata in accordo con il nome del pacchetto sorgente. Per rendere il tutto maneggevole, la vasca è suddivisa in sezioni (`main', `contrib' e `non-free') e per la prima lettera del nome del pacchetto sorgente. Queste directory contengono svariati file: binari per ciascuna architettura ed i pacchetti sorgente da cui i pacchetti binari sono stati generati. E' possibile sapere dove ciascun pacchetto è situato eseguendo un comando tipo: `apt-cache showsrc ' ed andando a leggere la riga "Directory:". Per esempio, i pacchetti `apache' sono immagazzinati in `pool/main/a/apache/'. Essendo molteplici, i pacchetti `lib*' vengono trattati in maniera particolare: per esempio, i pacchetti `libpaper' sono immagazzinati in `pool/main/libp/libpaper/'. Le directory `dists' vengono ancora utilizzate per i file indice usati da programmi tipo `apt'. Inoltre, al momento attuale le vecchie distribuzioni non sono state convertite ad usare le vasche, per cui si troveranno i percorsi contenenti distribuzioni tipo `potato' o `woody' nel campo "Filename" dell'intestazione. Di norma non avete da preoccuparvi di ciò, poichè il nuovo `apt' e probabilmente il vecchio `dpkg-ftp' sono in grado di gestire la cosa senza problemi. Se volete maggiori informazioni, andate a vedere RFC: implementazione dei pool dei pacchetti (http://lists.debian.org/debian-devel-announce/2000/debian-devel-announce-200010/msg00007.html). 2.1.11. Alcune note storiche su Sid ----------------------------------- Quando il Sid attuale non esisteva, l'organizzazione dell'archivio Debian aveva un problema principale: l'assunto che quando un'architettura veniva creata nell'attuale `unstable', sarebbe stata rilasciata quando la distribuzione diventava la nuova `stable'. Però per molte architetture questo non era il caso, con il risultato che quelle directory dovevano essere mosse al momento del rilascio. Fatto poco pratico, poichè lo spostamento avrebbe fagocitato grosse quantità di banda. Gli amministratori dell'archivio hanno evitato questo problema per pacchetti anni piazzando i binari delle architetture ancora non rilasciate in una directory speciale chiamata `sid'. Al momento del loro rilascio esisteva un collegamento dall'architettura a quel momento `stable' a `sid' e da quel momento in poi essa veniva creata all'interno dell'albero `unstable', come di norma. Tutto ciò era motivo di confusione per gli utenti. Con l'avvento della vasca dei pacchetti (vedere Sezione 2.1.10, `La directory `pool'') durante lo sviluppo della distribuzione Woody i pacchetti binari cominciarono ad essere immagazzinati in una locazione canonica nella vasca, indipendentemente dalla distribuzione; in tal modo il rilascio di una distribuzione non determina più la grossa dispersione di banda sui mirror (c'è, ovviamente, un notevole consumo, ma graduale, di banda durante la fase di sviluppo). 2.1.12. Pacchetti caricati in `incoming' ---------------------------------------- I pacchetti che vengono caricati nell'archivio vengono dapprima immagazzinati in http://incoming.debian.org/ prima di accertarsi che provengano realmente da uno sviluppatore Debian (e vengono piazzati nella sottodirectory `DELAYED' in caso di Non-Maintainer Upload (NMU)). Una volta al giorno, vengono mossi da `incoming' ad `unstable'. In caso di emergenza, potreste voler installare i pacchetti da qui, prima che raggiungano `unstable'. 2.1.13. Recuperare un vecchio pacchetto --------------------------------------- Mentre le distribuzioni Debian più recenti vengono tenute nella directory `debian' su ciascun Mirror Debian (http://www.debian.org/mirror/), gli archivi per le distribuzioni più vecchie, tipo Scollegamento , sono tenuti su http://archive.debian.org/ o sotto la directory `debian-archive' di ciascun mirror Debian. I vecchi pacchetti `testing' ed `unstable' sono localizzati in http://snapshot.debian.net/. 2.1.14. Sezioni per architettura -------------------------------- All'interno di ciascun albero directory principale (`dists/stable/main', `dists/stable/contrib', `dists/stable/non-free' `dists/unstable/main', etc.), le voci dei pacchetti binari risiedono all'interno di sottodirectory i cui nomi indicano l'architettura per la quale sono stati compilati. * `binary-all/', per pacchetti architettura-indipendenti. Comprendono, per esempio, scripts Perl o pura documentazione. * `binary-/', per pacchetti che girano su una particolare piattaforma. Ricordate che i reali pacchetti binari per `testing' ed `unstable' non risiedono più in queste directory, ma al livello principale della directory `pool'. I file elenco (`Packages' e `Packages.gz') sono stati comunque mantenuti, per compatibilità con il vecchio sistema. Per sapere quali architetture sono al momento supportate, leggetevi le Note di Rilascio per ciascuna distribuzione. Possono essere trovate presso i siti delle Note di Rilascio per stable (http://www.debian.org/releases/stable/releasenotes) e testing (http://www.debian.org/releases/testing/releasenotes). 2.1.15. Il codice sorgente -------------------------- Il codice sorgente è disponibile per ogni cosa contenuta nel sistema Debian. In più, i termini di licenza della maggior parte dei programmi _richiedono_ che il codice venga distribuito insieme ai programmi, o che un'offerta di fornire il codice li accompagni. Di regola il codice viene reperito nelle directory `source', che sono in parallelo a tutte le directory dei binari architettura-specifiche, o più di recente alla directory `pool' (vedere Sezione 2.1.10, `La directory `pool''). Per scaricare il codice sorgente senza la necessità di essere addentro alla struttura dell'archivio Debian, provate un comando tipo `apt-get source '. Alcuni pacchetti, in particolare `pine', sono disponibili solamente come sorgenti, a causa delle limitazioni delle licenze. (Recentemente è stato fornito il pacchetto `pine-tracker' per facilitare l'installazione di Pine). Le procedure descritte in Sezione 6.4.10, `Portare un pacchetto nel sistema `stable'' e Sezione 13.10, `Creare pacchetti debian' dovrebbero fornire tutto il necessario per compilare un pacchetto manualmente. Il codice sorgente potrebbe non essere disponibile, invece, per i pacchetti delle directory `contrib' e `non-free', che formalmente non fanno parte del sistema Debian. 2.2. Il sistema di gestione dei pacchetti Debian ------------------------------------------------ 2.2.1. Panoramica dei pacchetti Debian -------------------------------------- Normalmente i pacchetti contengono tutti i file necessari all'implementazione di una serie di comandi o di funzionalità. Esistono due tipi di pacchetti: * _Pacchetti binari_, che contengono eseguibili, file di configurazione, pagine man/info, informazioni sul copyright ed altra documentazione. Questi pacchetti vengono distribuiti in un formato specifico alla Debian (vedere Sezione 2.2.2, `Il formato dei pacchetti Debian'); si riconoscono per il suffisso `.deb'. Questi pacchetti possono essere "spacchettati" usando l'utilità tutta Debian `dpkg'; i dettagli si possono vedere alla pagina di manuale corrispondente. * _Pacchetti sorgente_, che consistono in un file `.dsc' che descrive il pacchetto sorgente (inclusi in nomi dei file seguenti), un file `.orig.tar.gz' che contiene i sorgenti originali non modificati in formato tar gzip ed in genere un file `.diff.gz' che contiene le modifiche specifiche per Debian ai sorgenti originali. L'utilità `dpkg-source' impacchetta e spacchetta questo tipo di pacchetti. Per i dettagli, ovviamente, la pagina man corrispondente. L'installazione del software attraverso il sistema dei pacchetti utilizza delle "dipendenze", che sono state dichiarate dal responsabile (manutentore) del pacchetto. Le dipendenze vengono descritte nel file `control', associato a ciascun pacchetto. Ad esempio, il pacchetto contenente il compilatore GNU C (`gcc') "dipende" dal pacchetto `binutils' che include il collegamento e l'assembler. Se si prova ad installare `gcc' senza aver prima installato `binutils', il sistema di gestione dei pacchetti (dpkg) invierà un messaggio di errore riguardo alla necessità di avere anche `binutils' e bloccherà l'installazione di `gcc'. (Questo comportamento può comunque essere scavalcato dall'utente tenace, vedere al riguardo dpkg(8).) Per dettagli aggiuntivi, vedere più sotto in Sezione 2.2.8, `Dipendenze dei pacchetti'. Gli strumenti Debian per la gestione dei pacchetti possono essere usati per: * manipolare e gestire i pacchetti o parte di essi, * aiutare l'utente nella frammentazione dei pacchetti che devono essere trasmessi con un mezzo di limitate capacità come un floppy, * aiutare gli sviluppatori nella costruzione degli archivi dei pacchetti e * aiutare gli utenti nell'installazione dei pacchetti residenti in un archivio remoto Debian. 2.2.2. Il formato dei pacchetti Debian -------------------------------------- Un "pacchetto" Debian, od un file dell'archivio Debian contiene gli eseguibili,le librerie e tutta la documentazione associata ad un gruppo o suite di programmi correlati. I file dell'archivio Debian, di norma, hanno il suffisso `.deb'. [1] I dettagli dei pacchetti binari Debian sono descritti nella pagina di manuale deb(5). Il loro formato interno è soggetto a cambiamenti (tra una versione maggiore e l'altra di Debian), per cui leggete sempre dpkg-deb(1) prima di manipolare i`.deb' file. Almeno fino a Sarge, gli archivi Debian sono sempre stati manipolabili anche dai normali comandi Unix, tipo `ar' e `tar', anche quando i comandi `dpkg' non erano disponibili. [1] Il progetto `debian-installer' ha introdotto dei pacchetti i cui nomi finiscono in `.udeb'. In breve, è un formato micro-`.deb' che non necessita di seguire alla lettera le linee guida Debian, manca di alcune parti, tipo la documentazione ed è pensato per essere utlizzato solo dal `debian-installer', il nuovo programma di installazione Debian, sviluppato per il rilascio di Sarge. I due formati, `.deb' e `.udeb' sono uguali. Il programma `udpkg', usato per gestire i pacchetti `.udeb', ha limitate capacità rispetto a `dpkg' e supporta minori relazioni fra i pacchetti. La differenza di nomi sta nel fatto che i manutentori dell'archivio Debian non erano contenti di avere dei `.deb' che non seguissero le regole, per cui venne scelto un nome diverso per accentuare questa diversità e per rendere meno probabile l'installazione accidentale su sistemi reali. Gli `.udeb' vengono usati in un ramdisk iniziale durante l'installazione di base, solo per creare un sistema Debian molto ristretto. 2.2.3. Convenzioni nei nomi dei pacchetti Debian ------------------------------------------------ Il nome di un pacchetto Debian segue la convenzione seguente: _-_.deb Dove in genere sta per il nome del pacchetto. è la versione del programma originale, è il numero di revisione Debian e è l'architettura per la quale il pacchetto è stato compilato. I file vengono facilmente rinominati, naturalmente. Potete scoprire quale pacchetto è realmente contenuto in un dato file di none dando il comando seguente: dpkg --info Il numero di revisione Debian viene specificato dallo sviluppatore Debian o da chiunque compili il pacchetto. Un cambio nel numero di revisione in genere indica che qualche aspetto nel pacchetto è cambiato. 2.2.4. Mantenimento della configurazione locale ----------------------------------------------- I file che sono considerati modificabili dall'amministratore locale si trovano in `/etc'. Le linee guida Debian prescrivono che tutte le modifiche ai file localmente configurabili vengano mantenute attraverso gli aggiornamenti dei pacchetti. Se una versione predefinita di un file localmente configurabile viene fornita con il pacchetto stesso, allora il file viene etichettato come un "conffile". Il sistema di gestione dei pacchetti non aggiorna i conffile che sono stati modificati dall'amministratore dopo l'ultima installazione del dato pacchetto senza prima aver chiesto il permesso dell'amministratore stesso. D'altro canto, se il conffile non è stato modificato, allora verrà aggiornato insieme al resto del pacchetto. Ciò è sempre auspicabile, così è vantaggiorso minimizzare le modifiche ai conffile. Per elencare i conffile appartenenti ad un dato pacchetto, lanciare: dpkg --status L'elenco segue la riga "Confflies". Per maggiori informazioni sui conffile potete leggere la sezione del Debian Policy Manual intitolata "Configuration files" (Vedere Sezione 15.1, `Riferimenti'). 2.2.5. Script di gestione Debian -------------------------------- Gli script di gestione Debian sono degli script eseguibili che vengono lanciati automaticamente prima o dopo l'installazione di un pacchetto. Insieme ad un file chiamato `control', tutti questi file fanno parte della sezione "control" di un file Debian. I singoli file sono: preinst Questo script viene eseguito prima che il pacchetto venga estratto dal file Debian (`.deb'). Molti script "preinst" interrompono i servizi per i pacchetti che devono essere aggiornati fino a che la loro installazione o aggiornamento non sono completati (a seguire dell'esecuzione con successo dello script "postinst"). postinst Questo script tipicamente completa ogni configurazione richiesta da un pacchetto dopo che è stato estratto dal suo file Debian (`.deb'). Spesso gli script "postinst" richiedono all'utente determinate azioni e/o lo avvertono che, qualora accettasse le impostazioni di base, deve ricordarsi di riconfigurare il pacchetto se la situazione lo richiede. Molti script "postinst", poi, eseguono tutti i comandi necessari a lanciare o far ripartire i servizi, dopo che il pacchetto è stato aggiornato o installato. prerm Questo script ferma tutti i demoni associati con un pacchetto. Viene eseguito prima della rimozione di file associati ad un determinato pacchetto. postrm Modifica i collegamenti od altri file correlati ad un pacchetto e/o rimuove i files creati da esso.(Vedere anche Sezione 2.2.7, `Pacchetti Virtuali'.) Tutti i file di controllo possono essere localizzati nella directory `/var/lib/dpkg/info'. I file correlati con il pacchetto `foo' iniziano, appunto, con il nome "foo" ed hanno le estensioni "preinst", "postinst", ecc. a seconda della funzione. Il file `foo.list' nella stessa directory elenca tutti i file installati con il pacchetto `foo'. (Notate che la localizzazione di questi file è interna a dpkg e può essere soggetta a modifiche.) 2.2.6. Priorità dei pacchetti ----------------------------- Ad ogni pacchetto viene assegnata una _priorità_ dai responsabili della distribuzione, come aiuto al sistema di gestione dei pacchetti. Le priorità sono: * _Richiesto_ (Required): pacchetti necessari al corretto funzionamento del sistema. Comprende tutti gli strumenti necessari alla riparazione di difetti di sistema. Questi pacchetti non devono essere rimossi, pena la completa inutilizzabilità del sistema, probabilmente nemmeno con `dpkg' si riuscirebbe a mettere le cose a posto. I sistemi con solo i pacchetti Richiesti probabilmente sarebbero inutilizzabili, ma hanno abbastanza funzionalità per permettere all'amministratore di sistema di fare un boot ed installare altri programmi. * _Importante_ (Important): pacchetti che si ritrovano probabilmente su qualsiasi sistema Unix o correlato. Altri pacchetti necessari ad un corretto funzionamento del sistema, senza i quali non sarebbe utilizzabile. Tra questi _non_ sono inclusi Emacs o X11 o TeX o qualsiasi altra grossa applicazione. Qui si parla di pacchetti che costituiscono l'infrastruttura di base. * _Standard_: pacchetti comuni su qualsiasi sistema Linux, compreso un sistema ragionevolmente piccolo ma nemmeno troppo limitato all'interfaccia a carattere. Questo è ciò che viene installato di base se l'utente non seleziona altro. Non include grosse applicazioni, però include Emacs (più un pezzo di infrastruttura che un'applicazione) ed un ragionevole sottogruppo di TeX e LaTeX (se è possibile senza X). * _Opzionale_ (Optional): pacchetti che comprendono tutto quello di cui potete aver voglia di installare senza nemmeno sapere che cosa è, o se non avete delle necessità particolari. Comprende X11, una distribuzione completa di TeX e molte applicazioni. * _Extra_: pacchetti che o entrano in conflitto con altri di priorità più alta, probabilmente utili se già sapete a che servono, oppure hanno requisiti speciali che li rendono non consoni come "Opzionali". Notate le differenze fra "Priority: required", "Section: base" ed "Essential: yes" nella descrizione dei pacchetti. "Section: base" significa che il pacchetto viene installato prima tutti su un nuovo sistema. Molti dei pacchetti in "Section: base" hanno "Priority: required" o almenot "Priority: important" e molti di loro sono etichettati con "Essential: yes". "Essential: yes" significa che il pacchetto richiede di specificare un'ulteriore opzione force al sistema di gestione dei pacchetti, tipo `dpkg' quando viene rimosso dal sistema. Per esempio, `libc6', `mawk' e `makedev' sono "Priority: required" and "Section: base" ma non "Essential: yes". 2.2.7. Pacchetti Virtuali ------------------------- Il termine pacchetto virtuale è un termine generico che si applica a tutti i pacchetti di un gruppo che provvede alla medesima funzione. Per esempio, i programmi `tin' e `trn' sono entrambi dei newsreader, in grado di soddisfare qualsiasi dipendenza di un programma che richieda un newsreader su un sistema, al fine di funzionare correttamente. Entrambi, quindi, si dice che provvedano il "pacchetto virtuale" definito `news-reader'. Allo stesso modo `exim' `exim4', `sendmail' e `postfix' forniscono la funzionalità di un agente di trasporto posta (mail transport agent). Perciò, provvedono al pacchetto virtuale `mail transport agent'. Se uno di loro è installato, qualsiasi programma che dipenda dall'installazione di un agente di trasporto posta vedrà le proprie dipendenze soddisfatte dall'esistenza di questo pacchetto virtuale. La Debian ha un meccanismo tale che, se più di un pacchetto che fornisce lo stesso pacchetto virtuale è installato, l'amministratore di sistema è in grado di sceglierne uno come pacchetto preferito. Il comando che viene chiamato in causa è`update-alternatives' e verrà descritto in dettaglio oltre, in Sezione 6.5.3, `Comandi alternativi'. 2.2.8. Dipendenze dei pacchetti ------------------------------- Il sistema dei pacchetti Debian ha una serie di dipendenze che sono utilizzate per esprimere il fatto che un pacchetto, per funzionare, o per funzionare meglio, ha bisogno dell'installazione di un altro pacchetto: * Il Pacchetto A _Dipende_ dal Pacchetto B se B deve essere assolutamente installato per eseguire A. In alcuni casi, esso noN dipende solo da B, ma da una sua specifica versione. In tal caso la dipendenza dalla versione rappresenta un limite inferiore, nel senso che A dipende da qualsiasi versione di B più recente di quella specificata. * Il Pacchetto A _Raccomanda_ il B, se il responsabile del pacchetto giudica che la maggior parte degli utenti non vorrebbe A senza le funzioni fornite anche da B. * Il Pacchetto A _Suggerisce_ B se B contiene file correlati e che migliorano le funzioni di A. La stessa relazione si esprime dichiarando che il Pacchetto B _Migliora_ il Pacchetto B. * Il Pacchetto A _è in Conflitto_ con B quando A non è in grado di funzionare se B è installato nel sistema. Spesso "è in conflitto" è combinato con "Sostituisce". * Il Pacchetto A _Sostituisce_ B quando i file installati da B vengono rimossi o sovrascritti da quelli in A. * Il Pacchetto A _Fornisce_ B quando tutti i file e le funzioni di B vengono incorporate da A. Informazioni più dettagliate possono essere trovate nel _Packaging Manual_ e nel _Policy Manual_. Notate che `dselect' ha un controllo molto più raffinato sui pacchetti contrassegnati da _Raccomanda_ e _Suggerisce_ rispetto ad `apt-get', che prende semplicemente tutti i pacchetti specificati da _Dipende_ e lascia quelli indicati da _Raccomanda_ e _Suggerisce_. Entrambi i programmi nelle forme più moderne utilizzano come back-end APT. 2.2.9. Cosa significa "Pre-Depends" ----------------------------------- `dpkg' conigura sempre un pacchetto da cui ne Dipende un altro prima di configurare quast'ultimo. Tuttavia, `dpkg' in genere spacchetterà il file seguendo un ordine arbitrario, indipendentemente dalle dipendenze. (Spacchettare il file vuol dire che estrarre i file e metterli al posto giusto). Se, però un pacchetto _Pre-Dipende_ da un altro, allora quast'ultimo veràà spacchettato e configurato prima che quello che ne Pre-Dipende sia anche solo spacchettato. [1] L'uso di questo tipo di dipendenza è ridotto al minimo. [1] Questo meccanismo è stato previsto per supportare un aggiornamento sicuro di sistemi dal formato `a.out' al formato `ELF', dove _l'ordine_ in cui i pacchetti venivano estratti risultava critico. 2.2.10. Lo stato dei pacchetti ------------------------------ Lo stato di un pacchetto può essere "sconosciuto", "installa", "rimuovi", "elimina" o "mantieni". Queste etichette "voglio", indicano il volere dell'utente riguardo ad un pacchetto (come indicato dalle azioni dell'utente nella sezione "Scegli" di `dselect' o dal richiamo diretto dell'utente di `dpkg'). Il loro significato è il seguente: * _sconosciuto_ - l'utente non ha mai indicato se vuole il pacchetto * _installa_ - l'utente vuole il pacchetto installato od aggiornato * _rimuovi_ - l'utente vuole che il pacchetto sia rimosso, ma non i suoi file di configurazione. * _elimina_ - l'utente vuole il pacchetto completamente rimosso, compresi i file di configurazione. * _mantieni_ - l'utente non vuole che il pacchetto sia processato, ovvero vuole mantenere la versione attuale con lo stato corrente, qualunque essa sia. 2.2.11. Evitare l'aggiornamento dei pacchetti --------------------------------------------- Esistono due modi per evitare l'aggiornamento di un pacchetto, tramite `dpkg' o, da Woody in poi, tramite APT. Con `dpkg', dovete solo esportare la lista dei pacchetti selezionati con: dpkg --get-selections > Dopodichè modificate il file risultante `', cambiando la riga che contiene il pacchetto da mantenere, tipo `libc6', da: libc6 install a: libc6 hold Salvate il file e ricaricatelo nel database di `dpkg' con: dpkg --set-selections < Se conoscete il nome del pacchetto da mantenere, basta eseguire: echo libc6 hold | dpkg --set-selections Questo processo evita l'aggiornamento dei pacchetti al momento dell'installazione di ciascun file. Lo stesso risultato si ottiene tramite `dselect'. Basta accedere alla schermata [S]cegli, trovare il pacchetto da mantenere nello stato attuale e premere il tasto `=' (o `H'). I cambiamenti saranno effettivi non appena lasciata la schermata [S]cegli. Il sistema APT nella nuova distribuzione Woody ha un meccanismo alternativo per mantenere i pacchetti durante il processo di raccolta di un archivio, utilizzando la `Pin-Priority'. Vedere la pagina di manuale apt_preferences(5), l'http://www.debian.org/doc/manuals/apt-howto/ o il pacchetto `apt-howto'. 2.2.12. Pacchetti sorgente -------------------------- I pacchetti sorgente vengono distribuiti in una directory chiamata `source' e possono essere scaricati o manualmente, oppure tramite il comando apt-get source (vedere apt-get(8) la pagina man su come impostare APT all'uopo). 2.2.13. Compilare pacchetti binari dai sorgenti ----------------------------------------------- Per un dato pacchetto `' avete bisogno di tutti i `.dsc', `.tar.gz' e `.gz' (nota bene: non esiste nessun `.diff.gz' per un pacchetto Debian nativo). Una volta presi, se avete installato il pacchetto `dpkg-dev' il seguente comando: $ dpkg-source -x .dsc estrarrà il pacchetto in una directory denominata `'. Date i seguenti comandi per compilare il pacchetto binario: $ cd foo-versione $ su -c "apt-get update ; apt-get install fakeroot" $ dpkg-buildpackage -rfakeroot -us -uc poi # su -c "dpkg -i ../.deb" per installarlo. Vedere Sezione 6.4.10, `Portare un pacchetto nel sistema `stable''. 2.2.14. Creare nuovi pacchetti Debian ------------------------------------- Per maggiori dettagli al riguardo, leggete la _New Maintainers' Guide_, reperibile nel pacchetto `maint-guide' oppure presso http://www.debian.org/doc/manuals/maint-guide/. 2.3. Aggiornare un sistema Debian --------------------------------- Uno degli scopi della Debian è di fornire un sentiero solido di ed un processo sicuro di aggiornamento. Il sistema di gestione dei pacchetti avverete l'amministratore delle modifiche importanti e talvolta gli chiede di prendere delle decisioni. Dovreste leggere anche le Note di Rilascio; vengono fornite con tutti i CD Debian e sono disponibili sul WWW presso http://www.debian.org/releases/stable/releasenotes oppure http://www.debian.org/releases/testing/releasenotes. Una guida pratica viene fornita in Capitolo 6, `Gestione dei pacchetti in Debian'. Questa sezione fornisce una panoramica generale, cominciando con gli strumenti di gestione dei pacchetti. 2.3.1. `dpkg' ------------- E' il programma principale per la manipolazione dei pacchetti. Per ulteriori informazioni, leggere la pagina di manuale dpkg(8). `dpkg' è fornito con parecchi programmi supplementari di base. * `dpkg-deb': Manipola i files `.deb'. dpkg-deb(1) * `dpkg-ftp': Vecchio comando per il recupero dei pacchetti. dpkg-ftp(1) * `dpkg-mountable': Vecchio comando per il recupero dei pacchetti. dpkg-mountable(1) * `dpkg-split': Divide grossi pacchetti in files più piccoli. dpkg-split(1) `dpkg-ftp' e `dpkg-mountable' sono stati resi obsoleti dall'introduzione del sistema APT. 2.3.2. APT ---------- APT (Advanced Packaging Tool) è un'interfaccia avanzata per il sistema Debian di gestione dei pacchetti e consiste di vari programmi i cui nomi iniziano tipicamente con "apt-". `apt-get', `apt-cache' e `apt-cdrom' sono gli strumenti da riga di comando per maneggiare i pacchetti. Funzionano anche come programmi backend per l'utente di altri strumenti, come `dselect' ed `aptitude'. Per maggiori informazioni, installare `apt' e leggere apt-get(8), apt-cache(8), apt-cdrom(8), apt.conf(5), sources.list(5), apt_preferences(5) (Woody), e `/usr/share/doc/apt/guide.html/index.html'. Esistono fonti di informazione alternative, come APT HOWTO (http://www.debian.org/doc/manuals/apt-howto/). Può essere installato tramite `apt-howto' in `/usr/share/doc/Debian/apt-howto/'. `apt-get upgrade' e `apt-get dist-upgrade' prendono solo i pacchetti elencati sotto "Dipende", mentre lasciano quelli sotto "Raccomanda" e "Suggerisce". Per evitare ciò, usate `dselect'. 2.3.3. `dselect' ---------------- Questo programma rappresenta un'interfaccia utente basata su menu al sistema di gestione dei pacchetti. E' particolarmente utile per prime installazioni ed aggiornamenti su larga scala. Vedere Sezione 6.2.4, ``dselect''. Per ulteriori informazioni, installare `install-doc' e leggere `/usr/share/doc/install-doc/dselect-beginner.en.html' oppure Documentazione per dselect per Principianti (http://www.debian.org/releases/woody/i386/dselect-beginner). 2.3.4. Aggiornare un sistema in funzione ---------------------------------------- Il kernel (filesystem) in Debian supporta la sostituzione dei file anche mentre sono in uso. Quando i pacchetti vengono aggiornati, tutti i servizi forniti da essi vengono riavviati se sono configurati per girare nel runlevel corrente. Il sistema Debian non ha bisogno della modalità singolo utente per aggiornare un sistema in funzione. 2.3.5. File `.deb' scaricati e tenuti in cache ---------------------------------------------- Se avete scaricato i pacchetti nel vostro disco rigido (cosa assolutamente non necessaria, vedere sopra per la descrizione di `dpkg-ftp' o di APT), dopo l'installazione dei pacchetti potete rimuoverli dal vostro sistema. Se si usa APT, i file vengono tenuti nella directory `/var/cache/apt/archives'. Potete cancellarli dopo l'installazione (`apt-get clean'), oppure copiarli sulla stessa directory `/var/cache/apt/archives' di un'altra macchina, per evitare un nuovo download durante la successiva installazione. 2.3.6. Tenere una registrazione dell'aggiornamento -------------------------------------------------- `dpkg' mantiene una registrazione dei pacchetti scompattati, configurati, rimossi e/o eliminati, ma (al momento) non tiene nessuna registrazione dell'attività scritta su terminale durante tali manipolazioni. Il metodo più semplice per aggirare questo impedimento è di lanciare una qualsiasi sessione di `dpkg', `dselect' `apt-get', ecc. all'interno del programma script(1). 2.4. La sequenza di boot della Debian ------------------------------------- 2.4.1. Il programma `init' -------------------------- Come ogni buon appartenente alla famiglia degli Unix, Debian esegue il boot eseguendo il programma `init'. Il file di configurazione di `init' (che è `/etc/inittab') specifica che il primo script da eseguire deve essere `/etc/init.d/rcS'. Quello che accade poi dipende se è installato il pacchetto `sysv-rc' oppure `file-rc'. Quanto segue assume che sia installato `sysv-rc'. (`file-rc' il proprio script `/etc/init.d/rcS' ed usa un file invece che collegamenti simbolici nelle directory rc per controllare quali servizi siano stati avviati ed in quali runlevel.) Il file `/etc/init.d/rcS' del pacchetto `sysv-rc' lancia tutti gli script in `/etc/rcS.d/' per eseguire l'inizializzazione, tipo controllo e montaggio dei filesystem, caricamento dei moduli, lancio dei servizi di rete, impostazione dell'orologio, e così via. Poi, per compatibilità, lancia tutti i file (tranne quelli con `.' nel filename) localizzati in `/etc/rc.boot/'. Quest'ultima è riservata all'amministratore di sistema, ed il suo utilizzo è deprecato. Vedere Sezione 9.1, `Inizializzazione del sistema' e System run levels and init.d scripts (http://www.debian.org/doc/debian-policy/ch-opersys#s-sysvinit) nel Debian Policy Manual per maggiori informazioni. Debian non usa una directory `rc.local' in stile BSD. 2.4.2. I Runlevel ----------------- 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/rc.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/rc.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 2.4.3. Personalizzare i runlevel -------------------------------- La personalizzazione dei runlevel è un compito avanzato di amministrazione di sistema. Il suggerimento seguente vale per gran parte dei servizi. Per abilitare il servizio nel runlevel create il collegamento simbolico `/etc/rc.d/S' con obiettivo `../init.d/'. Il numero di sequenza dovrebbe essere quello che è stato assegnato al servizio quando il pacchetto è stato installato. Per disabilitare il servizio, rinominate il the collegamento simbolico in maniera che il nome inizi con `K' invece che con `S' ed il suo numero di sequenza sia 100 meno . E' conveniente usare un editor di runlevel, come `sysv-rc-conf' o `ksysv' per questi scopi. E' possibile cancellare il collegamento simbolico `S' ad un servizio in una data directory di un dato runlevel invece di rinominarlo. Ciò non disabilita il servizio, ma lo lascia in uno stato "fluttuante", finchè il sistema di inizio `sysv-rc' è interessato: al cambio di runlevel il servizio non sarà nè lanciato nè fermato, ma verrà lasciato così com'è, che stia girando o no. Notate comunque che un servizio lasciato in uno stato tale verrà lanciato se il pacchetto corrispondente verrà aggiornato, che girasse o meno prima dell'aggiornamento. Questo è un limite noto del sistema Debian attuale. Notate anche che dovreste mantenere i collegamenti simbolici `K' di un servizio nei runlevel 0 e 6. Se cancellate tutti i collegamenti simbolici di un servizio, allora durante un aggiornamento il pacchetto corrispodente ripristinerà tutti i collegamenti simbolici al loro stato predefinito iniziale. _Not_ è consigliabile modificare i collegamenti simbolici in `/etc/rcS.d/'. 2.5. Supportare le differenze ----------------------------- Debian offre parecchie opportunità per soddisfare le esigenze (e i desideri) degli amministratori di sistema, senza per questo renderlo inutilizzabile. * `dpkg-divert', vedere Sezione 6.5.1, `Il comando `dpkg-divert''. * `equivs', vedere Sezione 6.5.2, `Il pacchetto `equivs''. * `update-alternative', vedere Sezione 6.5.3, `Comandi alternativi'. * `make-kpkg' può accettare svariati boot loaders. Vedere make-kpkg(1) e Sezione 7.1.1, `Il metodo Debian standard'. Tutti i file in `/usr/local/' appartengono all'amministratore di sistema e Debian non li toccherà. Gran parte dei file in `/etc' sono `conffiles' e Debian non li sovrascriverà in caso di aggiornamento a meno che l'amministratore non lo richieda espressamente. 2.6. Internazionalizzazione --------------------------- Il sistema Debian è internazionalizzato e fornisce il supporto per la visualizzazione e la scrittura dei caratteri in molte lingue, sia da console che sotto X. Molti documenti, pagine di manuali e messaggi di sistema sono stati tradotti in numero sempre crescente di lingue. Durante l'installazione Debian chiede all'utente di scegliere la lingua di installazione (e talvolta una variante locale della stessa). Se il vostro sistema non supporta tutte le caratteristiche della lingua di cui avete bisogno, o se dovete cambiare la lingua od installare una diversa tastiera che supporti la vostra lingua, andate a leggere Sezione 9.7, `Localizzazione (l10n)'. 2.7. Debian ed il kernel ------------------------ Vedere Capitolo 7, `Il kernel Linux su Debian'. 2.7.1. Compilare un kernel da un sorgente non-Debian ---------------------------------------------------- Bisogna comprendere le linee guida Debian nei confronti degli header. Le librerie C Debian sono compilate con le versioni _stabili_ più recenti degli header del _kernel_. Ad esempio, le versione Debian-1.2 usava la versione 5.4.13 degli header. Questa pratica è in contrasto con i pacchetti sorgente del kernel distribuiti in tutti gli archivi Linux FTP, pacchetti che usano versioni persino più recenti degli header. Gli header distribuiti con i sorgenti del kernel sono localizzati in `/usr/include/linux/include/'. Se avete bisogno di compilare un programma con header più recenti di quelli di quelli forniti da `libc6-dev', quando compilate dovete aggiungere alla riga di comando `-I/usr/src/linux/include/'. Un problema del genere è uscito, per esempio, quando si è creato il pacchetto del demone automounter (`amd'). Quando i nuovi kernel cambiavano alcune istruzioni relative al NFS, `amd' aveva necessità di esserne al corrente. Ciò ha richiesto l'inclusione degli header più recenti. 2.7.2. Gli strumenti per compilare un kernel personalizzato. ------------------------------------------------------------ Gli utenti che desiderano (o devono) compilare un kernel personalizzato, sono incoraggiati a scaricare il pacchetto `kernel-package'. Il pacchetto contiene lo script per compilare il pacchetto del kernel e fornisce le capacità di creare un pacchetto Debian kernel-image, semplicemente dando il comando # make-kpkg kernel_image dalla directory principale del kernel sorgente. L'aiuto è disponibile dando il comando # make-kpkg --help o tramite la pagina di manuale make-kpkg(1) e Capitolo 7, `Il kernel Linux su Debian'. L'utente deve scaricarsi a parte il sorgente per il kernel, sia esso il più recente o quello di scelta, dall'archivio Linux preferito, a meno che un pacchetto kernel-source- non sia disponibile (dove sta per la versione del kernel). Lo script di boot Debian `initrd' richiede una speciale patch del kernel, chiamata `initrd'; vedere http://bugs.debian.org/149236. Le istruzioni dettagliate per usare il pacchetto `kernel-package' sono fornite nel file `/usr/share/doc/kernel-package/README.gz'. 2.7.3. Funzioni speciali per trattare con i moduli -------------------------------------------------- Il pacchetto Debian `modconf' fornisce uno script di shell (`/usr/sbin/modconf') che può essere utilizzato per personalizzare la configurazione dei moduli. Lo script presenta un'interfaccia a menu, chiedendo all'utente particolari circa i device drivers caricabili presenti sul proprio sistema. La risposte vengono utilizzate per personalizzare il file `/etc/modules.conf' (che elenca alias ed altri argomenti che devono essere utilizzati insieme ai vari moduli), tramite i file in `/etc/modutils/', e `/etc/modules' (che elencano i moduli che devono essere caricati al boot). Così come i (nuovi) file `Configure.help' ora disponibili per aiutare nella compilazione di kernel personalizzati, il pacchetto `modconf' arriva con tutta una serie di file di aiuto (in `/usr/share/modconf/') che forniscono informazioni dettagliate sugli argomenti appropriati da dare a ciascun modulo. Vedere Sezione 7.2, `Kernel 2.4 modulare' per gli esempi. 2.7.4. Disinstallare un vecchio pacchetto kernel ------------------------------------------------ Si, lo script `kernel-image-.prerm' controlla se il kernel attualmente in uso è lo stesso che state tentando di disinstallare. Perciò potete rimuovere pacchetti kernel che non volete più tramite il comando: # dpkg --purge --force-remove-essential kernel-image- (sostituite con la versione ed il numero di revisione del vostro kernel, naturalmente) ------------------------------------------------------------------------------- 3. Suggerimenti per l'installazione di un sistema Debian -------------------------------------------------------- La documentazione ufficiale sull'installazione di Debian è localizzata presso http://www.debian.org/releases/stable/ e http://www.debian.org/releases/stable/installmanual. Per le versioni in fase di sviluppo è localizzata presso http://www.debian.org/releases/testing/ e http://www.debian.org/releases/testing/installmanual (il lavoro è in corso, talvolta potrebbe non essere reperibile) Sebbene questo capitolo sia stato inizialmente scritto durante i giorni dell'installatore di Potato, gran parte del suo contenuto è stato aggiornato all'installatore di Woody ed essi sono molto simili. Siccome Sarge ne userà uno totalmente nuovo, usate il capitolo come punto di riferimento per quest'ultimo. Anche alcuni pacchetti chiave hanno cambiato nome e priorità. Per esempio, il MTA predefinito di Sarge è `exim4' invece di `exim' e `coreutils' è stato introdotto per sostituire parecchi pacchetti. Potrebbe essere necessario aggiustare le vostre azioni. 3.1. Tracce generali per l'installazione di Linux ------------------------------------------------- Non dimenticate di leggere >url id="http://www.debian.org/CD/netinst/"> se state cercando per un'immagine CD compatta dell'installatore Debian. Usare le distribuzioni `testing' o `unstable' aumenta il rischio di incappare ne i seri bachi. Questo rischio può essere gestito impiantando uno schema multiboot con una versione di Debian più stabile, oppure usando un trucco elegante fornito da `chroot', come descritto in Sezione 8.6.35, ``chroot''. Quest'ultimo permette di usare versioni differenti della Debian simultaneamente su console diverse. 3.1.1. Le basi della compatibilità hardware ------------------------------------------- Linux è compatibile con la maggior parte dei componenti per PC esistenti. Può essere installato praticamente in ogni configurazione. Per quanto mi riguarda, l'installazione è stata semplice come per Windows 95/98/Me. La lista di componenti compatibili cresce di giorno in giorno. Se avete un laptop, andate su: Linux on Laptops (http://www.linux-laptop.net/) per indirizzi per l'installazione divisi per marca e modello. La mia raccomandazione per i componenti di un desktop è, invece, "Siate conservativi." * SCSI invece di IDE per il lavoro, IDE/ATAPI HD per uso privato. * IDE/ATAPI CD-ROM (o CD-RW). * PCI invece di ISA. In particolare per le NIC. * Usate NIC economiche. Tulip per PCI, NE2000 per ISA sono più che buone. * Evitare PCMCIA (notebook) se siete alla prima installazione. * Evitate le tastiere, mouse, ecc. USB..a meno che vogliate accettare una sfida. Per macchine lente, bypassarne il disco rigido ed interfacciarle con macchine più veloci per eseguire l'installazione di Linux può essere una buona idea. 3.1.2. Definire i componenti del PC ed il chipset ------------------------------------------------- Durante l'installazione vi verranno richieste informazioni sull'hardware o sui chipset, informazioni non sempre facili da reperire. Ecco un metodo: 1. Aprite il PC e guardate dentro. 2. Scrivete i numeri presenti sui grossi chip sulle schede grafiche, sulle schede di rete, sui chip situati vicino alle porte seriali ed alle porte IDE. 3. Scrivete i nomi scritti sul dorso delle schede PCI ed ISA. 3.1.3. Definire i componenti del PC tramite Debian -------------------------------------------------- Dare i comandi seguenti all'interno di un sistema Linux già installato, fornisce qualche idea sull'hardware presente e sulla sua configurazione. $ pager /proc/pci $ pager /proc/interrupts $ pager /proc/ioports $ pager /proc/bus/usb/devices Questi comandi possono essere dati durante il processo di installazione dalla console, premendo ALT-F2. Dopo l'installazione iniziale, installando i pacchetti opzionali, tipo `pciutils', `usbutils', e `lshw', potete ottenere informazioni più estese sul sistema. $ lspci -v |pager $ lsusb -v |pager # lshw |pager Uso tipico degli interrupt: * IRQ0: timer output (8254) * IRQ1: controller tastiera * IRQ2: cascata a IRQ8--IRQ15 su PC-AT * IRQ3: porta seriale secondaria (io-port=0x2F8) (`/dev/ttyS1') * IRQ4: porta seriale primaria (io-port=0x3F8) (`/dev/ttyS0') * IRQ5: libero [scheda audio (SB16: io-port=0x220, DMA-low=1, DMA-high=5)] * IRQ6: controller del floppy disk (io-port=0x3F0) (`/dev/fd0', `/dev/fd1') * IRQ7: parport (io-port=0x378) (`/dev/lp0') * IRQ8: rtc * IRQ9: software interrupt (int 0x0A), rediretto a IRQ2 * IRQ10: libero [network interface card (NE2000: io-port=0x300)] * IRQ11: libero [(SB16-SCSI: io-port=0x340, SB16-IDE: io-port=0x1E8,0x3EE)] * IRQ12: PS/2 Mouse * IRQ13: libero (era il coprocessore matematico 80287) * IRQ14: controller IDE primario (`/dev/hda', `/dev/hdb') * IRQ15: controller IDE secondario (`/dev/hdc', `/dev/hdd') Per le vecchie schede ISA non-PnP, potreste voler impostare gli IRQ5, 10 ed 11 come non-PnP dal BIOS. Per i dispositivi USB, le classi sono elencate in `/proc/bus/usb/devices' come `Cls=': * Cls=00 : Inutilizzato * Cls=01 : Audio (altoparlanti, ecc.) * Cls=02 : Comunicazione (MODEM, NIC, ...) * Cls=03 : HID (Human Interface Device: KB, mouse, joystick) * Cls=07 : Stampante * Cls=08 : Memorie di massa (FDD, CD/DVD, HDD, Flash, ...) * Cls=09 : Hub (USB hub) * Cls=255 : Specifico del construttore Se la classe non è 255, Linux supporta il dispositivo. 3.1.4. Definire i componenti del PC tramite altri S.O. ------------------------------------------------------ Una ulteriore fonte di informazione è rappresentata dagli altri sistemi operativi. Installate una distribuzione di Linux commerciale. I sistemi di riconoscimento dell'hardware tendono ad essere migliori della Debian, al momento. Le differenze si livelleranno all'introduzione del `debian-installer' con Sarge. Installate Windows. La configurazione attuale del PC può essere ottenuta cliccando con il pulsante destro del mouse su "Risorse del Computer" e poi "Proprietà", ottenendo informazioni tipo IRQ, indirizzi di porta I/O, DMA. Alcune vecchie schede ISA potrebbero aver bisogno di essere configurate sotto DOS, ed utilizzate di conseguenza. 3.1.5. Il mito di Lilo ---------------------- "Lilo è limitato ai primi 1024 cilindri."Sbagliato! Il nuovo `lilo', usato nella Debian Potato ha il supporto lba32. Se il BIOS o la scheda madre sono abbastanza recenti da supportare lba32, `lilo' dovrebbe essere in grado di caricarsi oltre il vecchio limite dei 1024 cilindri. Se avete tenuto il vostro vecchio `lilo.conf', vi basterà aggiungere una riga con "lba32" da qualche parte vicino all'inizio del file.Vedere `/usr/share/doc/lilo/Manual.txt.gz' 3.1.6. GRUB ----------- Il nuovo boot loader `grub', proveniente dal progetto GNU HURD, può essere installato su un sistema Debian Woody: # apt-get update # apt-get install grub-doc # mc /usr/share/doc/grub-doc/html/ ... leggete il contenuto # apt-get install grub # pager /usr/share/doc/grub/README.Debian.gz ... leggetelo :) Per modificare il menu di GRUB, aprite `/boot/grub/menu.lst'. Guardate Sezione 8.1.6, `Come impostare i parametri di boot (GRUB)' su come impostare i parametri di avvio durante il processo di inizializzazione, dato che sono lievemente diversi da `lilo'. 3.1.7. Scegliere i floppy di avvio ---------------------------------- Per Potato ho apprezzato molto il set di dischi denominato IDEPCI per il desktop. Per Woody, apprezzo il set bf2.4. Entrambi i set usano una versione di `boot-floppies' per creare i floppy di avvio. Se avete una scheda di rete PCMCIA, dovete usare il set di dischi di avvio standard (numero di floppy maggiore, ma tutti i moduli dei driver disponibili) e configurare la NIC nel setup PCMCIA; non provate ad impostare una card NIC dal dall'interfaccia di configurazione della rete standard. Per sistemi particolari, potete creare un disco di salvataggio fatto apposta, sostituendo l'immagine del kernel denominata "linux" sul disco di salvataggio Debian con un'altra immagine compilata apposta altrove per la suddetta macchina. I dettagli dell'operazione li trovate sul `readme.txt' sul dischetto di salvataggio. Il floppy è formattato con il filesystem MSDOS, per cui potete utilizzare qualunque sistema per leggerlo e modificarlo. Ciò dovrebbe rendere la vita più semplice a coloro con particolari schede di rete, ecc... Per Sarge, `debian-installer' e/o `pgi' si pensa verranno usati per creare i floppy di avvio. 3.1.8. Installazione -------------------- Seguite le istruzioni ufficiali reperibili presso http://www.debian.org/releases/stable/installmanual e http://www.debian.org/releases/testing/installmanual (il lavoro è in corso, talvolta potrebbe non essere reperibile). Se installate un sistema tramite i `boot floppies' della distribuzione testing, potreste avere bisogno di aprire un nuovo terminale durante il processo di installazione premendo ALT-F2 e di modificare manualmente le voci di `/etc/apt/sources.list' da "stable" a "testing" per aggiustare le fonti di APT. Io tendo ad installare `lilo' in posti tipo `/dev/hda3', mentre `mbr' in `/dev/hda'. Ciò minimizza il rischio di sovrascrivere le informazioni di boot. Ecco le mie scelte durante l'installazione. * MD5 passwords "si" * shadow passwords "si" * Installazione "avanzata" (dselect **) e scegliere * Escludere emacs (se è selezionato), nvi, tex, telnet, talk(d); * Includere mc, vim, uno fra nano-tiny od elvis-tiny. Vedere Sezione 6.2.4, ``dselect''. Anche se siete dei fanatici di Emacs, evitatelo per ora ed accontentatevi di nano durante l'installazione. Evitate anche di installare altri grossi pacchetti, tipo TEX (Potato faceva questo) a questo stadio. Vedere Sezione 11.2, `Editor di salvataggio' per le ragioni per installare nano-tiny od elvis-tiny. * Rispondo a tutte le domande di configurazione = "y" (sostituisce l'attuale) durante le domande per l'installazione di ciscun pacchetto. * `exim': seleziono 2 per la macchina, dato che invio la posta tramite il server SMTP del mio provider. Per ulteriori informazioni su dselect, vedere Sezione 6.2.4, ``dselect''. 3.1.9. Quale host ed IP usare per una LAN ----------------------------------------- Esempio di configurazione di una LAN (C subnet: 192.168.1.0/24): Internet | +--- Un ISP esterno fornisce il servizio POP (raggiunto da fetchmail) | Un punto di accesso dell'ISP fornisce i servizi DHCP e SMTP | : Modem (Dial-up) | : Porta esterna della macchina gateway della LAN: eth0 (IP dato dal DHCP dell'ISP) usa un vecchio notebook (IBM Thinkpad, 486 DX2 50 MHz, 20 MB RAM) gira Linux con kernel 2.4 e file system ext3. gira il pacchetto "ipmasq" (con patch più sicura, NAT e firewall) gira il pacchetto "dhcp-client" configurato per eth0 (scavalca le impostazioni DNS) gira il pacchetto "dhcp" configurato per eth1 gira "exim" come smarthost (modo 2) gira "fetchmail" con un intervallo lungo (ripiego) gira "bind" come cache name server per Internet dalla LAN come name server autoritativo per il dominio LAN dalla LAN gira "ssh" sulle porte 22 e 8080 (connessione da ovunque) gira "squid" come cache server per l'archivio Debian (per APT) Porta interna della macchina gateway della LAN: eth1 (IP = 192.168.1.1, fisso) | +--- LAN Switch (10 base T) ---+ | | Alcuni clienti IP fissi sulla LAN Alcuni clienti DHCP sulla LAN (IP = 192.168.1.2-127, fisso) (IP = 192.168.1.128-200, dinamico) Vedere Capitolo 10, `Configurare la rete' per i dettagli sulla configurazione del gateway server. Vedere Sezione 10.14, `Costruire un gateway router' per i dettagli sulla configurazione del server gateway per la LAN. 3.1.10. Account utenti ---------------------- Per avere lo stesso aspetto di "famiglia" tra le varie macchine, i primi account che imposto sono sempre gli stessi. Il primo account che creo è sempre uno del tipo "admin" (uid=1000). Tutta la posta per root viene reindirizzata lì. Questo account è aggiunto al gruppo `adm' (vedere Sezione 9.2.2, `"Why GNU `su' does not support the `wheel' group" (Perchè GNU `su' non supporta il gruppo `wheel')'), al quale viene data una certa quota di privilegi di root tramite `su', usando PAM, od il comando `sudo'. Vedere Sezione 4.1.3, `Aggiungere un account utente' per i dettagli. 3.1.11. Creare i filesystem --------------------------- 3.1.11.1. Partizionare il disco rigido -------------------------------------- Per limitare i danni in caso di blocco del sistema, preferisco tenere partizioni diverse per directory diverse. Per esempio, / == (/ + /boot + /bin + /sbin) == 50MB+ /tmp == 100MB+ /var == 100MB+ /home == 100MB+ /usr == 700MB+ con X /usr/local == 100MB Le dimensioni della directory `/usr' dipendono strettamente dal tipo di applicazione X window. `/usr' può essere di soli 300MB per la sola console, mentre 2GB--3GB non sono inusuali se si vogliono installare varie applicazioni di Gnome. Quando `/usr' diventa troppo grande, la cura più efficace è spostare `/usr/share/' in una partizione diversa. Con i nuovi kernel 2.4 pre-impacchettati, `/' può avere bisogno di più di 200MB di spazio. Per esempio, la configurazione attuale della mia macchina che funge da Internet gateway, è la seguente (output del comando `df -h'): Filesystem Size Used Avail Use% Mounted on /dev/hda3 300M 106M 179M 38% / /dev/hda7 100M 12M 82M 13% /home /dev/hda8 596M 53M 513M 10% /var /dev/hda6 100M 834k 94M 1% /var/lib/cvs /dev/hda9 596M 222M 343M 40% /usr /dev/hda10 596M 130M 436M 23% /var/cache/apt/archives /dev/hda11 1.5G 204M 1.2G 14% /var/spool/squid (Le grosse dimensioni di `/var/spool/squid' sono per la funzione di proxy cache e per lo scarico dei pacchetti). Per dare un'idea della struttura delle partizioni, il seguente è il risultato di `fdisk -l': # fdisk -l /dev/hda # commenti /dev/hda1 1 41 309928+ 6 FAT16 # DOS /dev/hda2 42 84 325080 83 Linux # (not used) /dev/hda3 * 85 126 317520 83 Linux # Main /dev/hda4 127 629 3802680 5 Extended /dev/hda5 127 143 128488+ 82 Linux swap /dev/hda6 144 157 105808+ 83 Linux /dev/hda7 158 171 105808+ 83 Linux /dev/hda8 172 253 619888+ 83 Linux /dev/hda9 254 335 619888+ 83 Linux /dev/hda10 336 417 619888+ 83 Linux /dev/hda11 418 629 1602688+ 83 Linux Ci sono alcune partizioni inutilizzate. Queste servono per installare una seconda distribuzione di Linux, o come spazio per espandere qualche directory in crescita. 3.1.11.2. Montare i filesystem ------------------------------ Il montaggio appropriato delle partizioni avviene mediante il seguente `/etc/fstab': # /etc/fstab: static file system information. # # filesystem mount point type options dump pass /dev/hda3 / ext2 defaults,errors=remount-ro 0 1 /dev/hda5 none swap sw 0 0 proc /proc proc defaults 0 0 /dev/fd0 /floppy auto defaults,user,noauto 0 0 /dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0 # # mantenete le partizioni separate /dev/hda7 /home ext2 defaults 0 2 /dev/hda8 /var ext2 defaults 0 2 /dev/hda6 /var/lib/cvs ext2 defaults 0 2 # noatime accelera l'accesso ai file in lettura /dev/hda9 /usr ext2 defaults,noatime 0 2 /dev/hda10 /var/cache/apt/archives ext2 defaults 0 2 # una partizione molto grande come proxy cache /dev/hda11 /var/spool/squid ext2 rw 0 2 # DOS avviabile di backup /dev/hda1 /mnt/dos vfat rw,noauto 0 0 # Linux avviabile di backup (non ancora fatto) /dev/hda2 /mnt/linux ext2 rw,noauto 0 0 # # nfs mounts mickey:/ /mnt/mickey nfs ro,noauto,intr 0 0 goofy:/ /mnt/goofy nfs ro,noauto,intr 0 0 # minnie:/ /mnt/minnie smbfs ro,soft,intr,credentials={filename} 0 2 Per NFS, uso qui le opzioni `noauto,intr' combinate con quella di default `hard'. In tal modo, un processo che si blocca in seguito alla perdita di connessione può essere recuperato mediante Control-C. Usare `rw,auto,soft,intr' per macchine Windows connesse tramite Samba (smbfs), può essere una buona idea. Vedere Sezione 3.5, `Configurare Samba'. Per i floppy, utilizzare `noauto,rw,sync,user,exec' previene la corruzione dei file in caso di rimozione accidentale del disco prima di averlo smontato, però rallenta il processo di scrittura. 3.1.11.3. Montaggio con autofs ------------------------------ Punti chiave per il montaggio automatico (auto mount): * Caricare il modulo `vfat' per permettere a `/etc/auto.misc' di contenere `-fstype=auto': # modprobe vfat # prima del tentativo di accedere al floppy ... oppure automatizzate il processo, # echo "vfat" >> /etc/modules ... e riavviate il sistema. * Impostate `/etc/auto.misc' come segue: floppy -fstype=auto,sync,nodev,nosuid,gid=100,umask=000 :/dev/fd0 ... dove gid=100 è "users". * Create i collegamenti in `/home/', `cdrom' e `floppy', che puntino a `/var/autofs/misc/cdrom' e `/var/autofs/misc/floppy', rispettivamente. * Rendete membro del gruppo "users". 3.1.11.4. Montaggio del NFS --------------------------- Il server esterno NFS (goofy) risiede dietro un firewall (gateway). Dato che sono l'unico ad usarla, ho delle regole di sicurezza sulla LAN molto rilassate. Per abilitare l'accesso NFS, il server NFS necessita di aggiungere `/etc/exports' come segue: # /etc/exports: lista di controllo degli accessi per filesystem che possono # essere esportati ai client NFS. Vedere exports(5). / (rw,no_root_squash) Ciò è richiesto per attivare il server NFS, in aggiunta all'installazione e ad attivazione del server/client NFS. Per semplicità, in genere creo un partizione singola di circa 2GB per installazioni sperimentali e/o secondarie di linux. Opzionalmente condivido le partizioni di swap e `/tmp'. Per questi scopi lo schema a partizioni multiple è eccessivo. Se vi serve un semplice sistema a console, bastano 500MB. 3.1.12. Linee guida per la memoria DRAM --------------------------------------- Di seguito presento alcune (grandi) linee guida per le DRAM. 4MB: Il minimo necessario a far funzionale il kernel di Linux. 16MB: Il minimo per un sistema con console. 32MB: Il minimo per un semplice sistema X. 64MB: Il minimo per X con GNOME/KDE. 128MB: Il giusto per X con GNOME/KDE. 256MB: (o più): Perchè no se ve le potete permettere? Le DRAM sono economiche. L'opzione di boot `mem=4m' (o lilo `append="mem=4m"') vi mostra come il sistema si comporta con soli 4MB di memoria installati. Il parametro di boot per lilo è necessario per sistemi con vecchi BIOS e più di 64MB di memoria. 3.1.13. Lo spazio di Swap ------------------------- Uso la formula seguente: * Ciascuna partizione di swap è di < 128 MB (con vecchi kernel 2.0), < 2 GB (kernel recenti) * Totale = o (1 o 2 volte la RAM installata) o (da 128 MB a 2 GB) come guida generale * Spalmatele su dischi diversi e montatele tutte con le opzioni `sw,pri=1' in `/etc/fstab'. Ciò assicura che il kernel faccia una sorta di RAID di partizioni swap ed offre il massimo di prestazioni di swap. * Usate la porzione centrale del disco rigido quando possibile. Anche se non ne avrete mai bisogno, un pò di spazio swap (128MB) è comunque desiderabile, in modo che un programma che ha un leak di memoria rallenti progressivamente il sistema prima di bloccarlo definitivamente. 3.2. Configurare Bash --------------------- Modifico gli script di inizio della shell a mio piacimento: /etc/bash.bashrc Sostituire con copia privata /etc/profile Mantenere la copia della distribuzione ( \w -> \W) /etc/skel/.bashrc Sostituire con copia privata /etc/skel/.profile Sostituire con copia privata /etc/skel/.bash_profile Sostituire con copia privata ~/.bashrc Sostituire con copia privata per tutti gli account ~/.profile Sostituire con copia privata per tutti gli account ~/.bash_profile Sostituire con copia privata per tutti gli account Per i dettagli vedere i miei esempi. (http://www.debian.org/doc/manuals/debian-reference/examples/) Mi piace un sistema trasparente, così imposto `umask' a 002 o 022. `PATH' viene impostato dai seguenti file di configurazione, in questo ordine. /etc/login.defs - prima del PATH impostato per la shell /etc/profile ( può chiamare /etc/bash.bashrc) ~/.bash_profile ( può chiamare ~/.bashrc) 3.3. Configurare il mouse ------------------------- 3.3.1. Mouse PS/2 ----------------- In caso di un mouse PS/2 con scheda madre ATX, il flusso del segnale deve essere: mouse -> /dev/psaux -> gpm -> /dev/gpmdata = /dev/mouse -> X In questo caso si crea un collegamento simbolico `/dev/mouse' che punta a `/dev/gpmdata' per rendere felici alcune utilità di configurazione e per rendere facile la reconfigurazione. (Per esempio se decidete di non usare per niente il demone gpm, basta puntare il collegamento simbolico `/dev/mouse' a `/dev/psaux' dopo essersi liberati del demone `gpm'.) Il flusso del segnale permette di deconnettere e reinizializzare la tastiera ed il mouse riavviando `gpm' dopo la riconnessione. X rimarrà funzionante! Il protocollo del flusso del segnale tra l'output di `gpm' e l'input di X può essere implementato in due modi, come "ms3" (protocollo del mouse seriale Microsoft a 3 pulsanti) o come "raw" (usa lo stesso protocollo del mouse che è connesso) e questa scelta condiziona la scelta del protocollo usato nella configurazione di X. Mostrerò gli esempi di configurazione usando un mouse Logitech a 3 pulsanti (mouse tradizionale nello stile Unix) PS/2 come modello. Se siete tra gli sfortunati la cui scheda grafica non è supportata dal nuovo X4 e dovete utilizzare il vecchio X3 (alcune schede ATI 64), configurate `/etc/X11/XF86Config' invece di `/etc/X11/XF86Config-4' come negli esempi seguenti, durante l'installazione dei pacchetti di X3. 3.3.1.1. Approccio con protocollo ms3 ------------------------------------- /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/psaux | Section "InputDevice" responsiveness= | Identifier "Configured Mouse" repeat_type=ms3 | Driver "mouse" type=autops2 | Option "CorePointer" append="" | Option "Device" "/dev/mouse" sample_rate= | Option "Protocol" "IntelliMouse" | EndSection Usando questo approccio, le modifiche del tipo di mouse vanno fatte solo in `gpm.conf', mentre la configurazione di X rimane costante. Vedere i miei script di esmpio (http://www.debian.org/doc/manuals/debian-reference/examples/). 3.3.1.2. Approccio con protocollo raw ------------------------------------- /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/psaux | Section "InputDevice" responsiveness= | Identifier "Configured Mouse" repeat_type=raw | Driver "mouse" type=autops2 | Option "CorePointer" append="" | Option "Device" "/dev/mouse" sample_rate= | Option "Protocol" "MouseManPlusPS/2" | EndSection Usando questo approccio, le modifiche del tipo di mouse vanno fatte sia in `gpm.conf' che aggiustando la configurazione di X. 3.3.1.3. Come adattarsi ai diversi tipi di mouse ------------------------------------------------ Il dispositivo di `gpm' denominato `autops2' si suppone sia in grado di riconoscere la gran parte dei mouse PS/2 sul mercato. Sfortunatamente non sempre funziona e non è disponibile nelle versioni pre-Woody. Provate ad usare `ps2', o `imps2' in `gpm.conf' al posto di `autops2' in questi casi. Per scoprire quali tipi di mouse gpm conosce date: `gpm -t help'. Vedere gpm(8). Se utilizzate un mouse a 2 pulsanti PS/2, impostate il protocollo di X in modo da abilitare `Emulate3Buttons'. La differenza di protocollo fra un mouse a 2 pulsanti e quello a 3 viene riconosciuta ed impostata automaticamente da `gpm' dopo aver premuto il pulsante di mezzo una volta. Per il protocollo X con Sezione 3.3.1.2, `Approccio con protocollo raw' o senza `gpm', usate: * `IntelliMouse': mouse seriale (ripetitore `gpm' con "ms3") * `PS/2': mouse PS/2 (provatelo sempre, prima) * `IMPS/2': qualsiasi mouse PS/2 (2, 3, o con rotella, migliore) * `MouseManPlusPS/2': Mouse Logitech PS/2 * `...' Per saperne di più vedere Supporto per il mouse in XFree86 (http://www.xfree86.org/current/mouse.html). Il mouse con rotella classico Microsoft funziona al meglio con: /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/psaux | Section "InputDevice" responsiveness= | Identifier "Configured Mouse" repeat_type=raw | Driver "mouse" type=autops2 | Option "CorePointer" append="" | Option "Device" "/dev/mouse" sample_rate= | Option "Protocol" "IMPS/2" | Option "Buttons" "5" | Option "ZAxisMapping" "4 5" | EndSection Per alcuni nuovi notebook Toshiba ultrapiatti: Attivare `gpm' prima di PCMCIA nello script di inizializzazione del System-V. Ciò evita che il sistema si pianti. Strano, ma vero. 3.3.2. Mouse USB ---------------- Accertatevi di avere tutte le funzioni del kernel richieste attivate o alla compilazione, oppure tramite i moduli: * Sotto "Input core support": * "Input core support" (CONFIG_INPUT, `input.o'), * "Mouse support" (CONFIG_INPUT_MOUSEDEV, `mousedev.o'), * Sotto "USB support": * "Support for USB" (CONFIG_USB, `usbcore.o'), * "Preliminary USB device filesystem" (CONFIG_USB_DEVICEFS), * "UHCI" o "OHCI" (CONFIG_USB_UHCI || CONFIG_USB_UHCI_ALT || CONFIG_USB_OHCI, `usb-uhci.o' || `uhci.o' || `usb-ohci.o'), * "USB Human Interface Device (full HID) support" (CONFIG_USB_HID, `hid.o'), e * "HID input layer support" (CONFIG_USB_HIDINPUT) Qui, i nomi in minuscolo sono i nomi dei moduli Se non usate devfs, create un device node `/dev/input/mice' con major 13 e minor 63 come segue: # cd /dev # mkdir input # mknod input/mice c 13 63 Per i tipici mouse a 3 pulsanti _USB_, le combinazioni di configurazione dovrebbero essere: /etc/gpm.conf | /etc/X11/XF86Config-4 =========================+====================================== device=/dev/input/mice | Section "InputDevice" responsiveness= | Identifier "Generic Mouse" repeat_type=raw | Driver "mouse" type=autops2 | Option "SendCoreEvents" "true" append="" | Option "Device" "/dev/input/mice" sample_rate= | Option "Protocol" "IMPS/2" | Option "Buttons" "5" | Option "ZAxisMapping" "4 5" | EndSection Vedere il Linux USB Project (http://www.linux-usb.org/) per maggiori informazioni. 3.3.3. Touchpad --------------- Sebbene il touchpad di un portatile emuli un mouse PS/2 a 2 tasti come comportamento predefinito, il pacchetto `tpconfig' permette il controllo totale del dispositivo. Per esempio, `OPTIONS="--tapmode=0"' in `/etc/default/tpconfig' disabilta lo scomodo comportamento "click by tap". Impostate `/etc/gpm.conf' come segue per usare sia il touchpad che il mouse esterno USB in console: device=/dev/psaux responsiveness= repeat_type=ms3 type=autops2 append="-M -m /dev/input/mice -t autops2" sample_rate= 3.4. Configurare NFS -------------------- Impostate NFS tramite `/etc/exports'. # apt-get install nfs-kernel-server # echo "/ *.domainname-for-lan-hosts(rw,no_root_squash,nohide)" \ >> /etc/exports Per i dettagli vedere i miei esempi. (http://www.debian.org/doc/manuals/debian-reference/examples/) 3.5. Configurare Samba ---------------------- Riferimenti: * http://www.samba.org/ * il pacchetto `samba-doc' Impostare Samba in modalità "share" è molto più semplice, dato che crea dei dischi di share sul modello di WfW. E' comunque molto meglio l'impostazione in modalità "user". Samba può essere configurato con `debconf' o `vi': # dpkg-reconfigure --priority= samba # in Woody # vi /etc/samba/smb.conf Per i dettagli vedere i miei esempi. (http://www.debian.org/doc/manuals/debian-reference/examples/) L'aggiunta di un nuovo utente al file `smbpasswd' può essere fatta tramite `smbpasswd': $su -c "smbpasswd -a nomeutente" Per la migliore compatibilità, usate password criptate. Impostate il `os level' sulla base delle equivalenze di sistema seguenti (maggiore il numero, più alta la priorità come server). 0: Samba con attitudini molto lasse (non sarà mai un master browser) 1: Wfw 3.1, Win95, Win98, Win/me? 16: Win NT WS 3.51 17: Win NT WS 4.0 32: Win NT SVR 3.51 33: Win NT SVR 4.0 255: Samba con poteri estesi Accertatevi che gli utenti siano membri del gruppo a cui appartiene la directory che offre l'accesso condiviso e che il percorso alla directory abbia il bit di esecuzione impostato. 3.6. Configurare la stampante ----------------------------- Il metodo tradizionale è `lpr'/`lpd'. Esiste un nuovo sistema CUPS(TM) (Common UNIX Printing System). PDQ è un altro approccio. Vedere il Linux Printing HOWTO (http://www.tldp.org/HOWTO/Printing-HOWTO.html) per maggiori informazioni. 3.6.1. `lpr'/`lpd' ------------------ Per i vari tipi di spooler `lpr'/`lpd' (`lpr', `lprng', e `gnulpr'), impostate `/etc/printcap' come segue se sono connessi ad una stampante solo testo o PostScript (le basi): |:\ :sd=/var/spool/lpd/:\ :mx#0:\ :sh:\ :lp=/dev/lp0: Cosa significano le righe precedenti: * Riga di intestazione: --- nome dello spool, = alias * mx#0 --- dimensione massima del file illimitata * sh --- sopprime la stampa dell' header di pagina * lp=/dev/lp0 --- stampante locale, oppure porta@host se remota Questa è una buona configurazione se siete connessi ad una stampante PostScript. In più è una buona configurazione anche se state stampando da una macchina Windows tramite Samba per qualsiasi stampante supportata da Windows (la comunicazione bidirezionale non è supportata). Dovete solo selezionare la configurazione della stampante corrispondente sulla macchina Windows. Se non avete una stampante PostScript dovete impostare un sistema di filtro usando `gs'. Esistono molti strumenti di autoconfigurazione per l'impostazione di `/etc/printcap'. Una qualsiasi di queste combinazioni è un'opzione: * `gnulpr', (`lpr-ppd') e `printtool' --- Io uso questa. * `lpr' e `apsfilter' * `lpr' e `magicfilter' * `lprng' e `lprngtool' * `lprng' e `apsfilter' * `lprng' e `magicfilter' Per lanciare gli strumenti grafici di configurazione, tipo `printtool', vedere Sezione 9.4.12, `Diventare root in X' per ottenere i privilegi di root. Gli spool creati con `printtool' usano `gs' ed agiscono come stampanti PostScript. Per cui, quando vi accedete, usate i driver delle stampanti PostScript. Sul lato Windows, lo standard è "Apple LaserWriter". 3.6.2. CUPS(TM) --------------- Installazione del Common UNIX Printing System (o CUPS(TM)): # apt-get install cupsys cupsys-bsd cupsys-client cupsys-driver-gimpprint # apt-get install foomatic-db-engine foomatic-db-hpijs # apt-get install foomatic-filters-ppds foomatic-gui In Sarge, usando `aptitude', potete selezionare "Print Server Task". KDE e Gnome forniscono un ambiente per la facile configurazione delle stampanti. In alternativa, potete configurare il sistema con qualsiasi browser se avete installato `swat' is installed: $ http://localhost:631 Per esempio, per aggiungere la vostra stampante collegata ad una porta qualsiasi all'elenco delle stampanti accessibili: * cliccate "Printers" dalla pagina principale e poi "Add Printer", * date "root" come username e la sua password, * procedete ad aggiungere la stampante seguendo le istruzioni, * tornate alla pagina "Printers" e cliccate "Configure Printer" e * procedete alla configurazione delle dimensioni della carta, risoluzione, e degli altri parametri. per maggiori informazioni http://localhost:631/documentation.html e http://www.cups.org/cups-help.html. 3.7. Altri consigli di configurazione per l'host ------------------------------------------------ 3.7.1. Installate pochi altri pacchetti dopo l'installazione iniziale --------------------------------------------------------------------- Una volta qui, avete un piccolo, ma funzionante, sistema Debian. E' il momento giusto per installare i pacchetti più grandi. * Lanciate `tasksel'. Vedere Sezione 6.2.2, `Installare i task'. Potete scegliere fra i seguenti task, se ne avete bisogno: * Utente finale (End-user) --- X window system * Sviluppo (Development) --- C e C++ * Sviluppo --- Python * Sviluppo --- Tcl/Tk * Miscellanea --- ambiente TeX/LaTeX * Per gli altri, preferisco usare `tasksel' come guida guardando fra i loro componenti elencati sotto ed installandoli selettivamente attraverso `dselect'. * Lanciate `dselect'. La prima cosa che dovreste fare è selezionare il vostro editor preferito e tutti i programmi di cui avete bisogno. Potete installare tutte le varianti di Emacs in un colpo solo. Vedere Sezione 6.2.4, ``dselect'' e Sezione 11.1, `Editor più popolari'. Potete anche sostituire alcuni dei pacchetti di default con quelli più completi. * ... * ... In genere modifico `/etc/inittab' per un facile spegnimento. ... # Cosa succede quando si preme CTRL-ALT-DEL. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now ... 3.7.2. Moduli ------------- I moduli per i driver dei vari dispositivi vengono configurati durante l'installazione iniziale. `modconf' fornisce la possibilità di configurare i moduli in un secondo momento attraverso un'interfaccia a menu. Questo programma è estremamente utile quando alcuni moduli vengono tralasciati durante l'installazione iniziale, o quando è stato installato un nuovo kernel in un momento successivo. Tutti i nomi dei moduli da precaricare devono essere elencati in `/etc/modules'. Io uso anche `lsmod' e `depmod' per controllarli manualmente. Assicuratevi anche di aggiungere alcune righe a `/etc/modules' per gestire IP masquerading (ftp, ecc.) per i kernel 2.4. Vedere Sezione 7.2, `Kernel 2.4 modulare', specificatamente Sezione 7.2.3, `Funzioni di rete'. 3.7.3. Impostazione base del CD-RW ---------------------------------- Per i masterizzatori IDE e kernel 2.4, modificate i seguenti file: /etc/lilo.conf (aggiungere append="hdc=ide-scsi ignore=hdc" lanciate lilo per attivarlo) /dev/cdrom (collegamento simbolico # cd /dev; ln -sf scd0 cdrom) /etc/modules (aggiungere "ide-scsi" e "sg". "sr" a seguire, se necessario.) Vedere Sezione 9.3, `Masterizzatori' per i dettagli. 3.7.4. Grosse memorie e spegnimento automatico ---------------------------------------------- Modificate `/etc/lilo.conf' come segue per impostare i parametri al boot in caso di grosse memorie (per i kernel 2.2) e per lo spegnimento automatico (per apm): append="mem=128M apm=on apm=power-off noapic" Lanciate `lilo' per attivare queste nuove impostazioni. <`apm=power-off' è necessario per un kernel SMP e `noapic' è necessario per ridurre i problemi del mio hardware SMP un pò bacato. Si può fare lo stesso direttamente al boot prompt. Vedere Sezione 8.1.5, `Altri trucchi con il boot prompt'. Se apm è compilato come modulo, come avviene automaticamente nei kernel Debian 2.4, lanciate `# insmod apm power_off=1' dopo il boot, oppure impostate `/etc/modules' con: # echo "apm power_off=1" >>/etc/modules In alternativa, compilare il supporto ACPI ottiene lo stesso scopo con i kernel più nuovi, e sembra essere più "amichevole" con SMP (richiede una scheda madre recente). I kernels 2.4 su schede madri più recenti dovrebbero riconoscere correttamente le grosse memorie. CONFIG_PM=y CONFIG_ACPI=y ... CONFIG_ACPI_BUSMGR=m CONFIG_ACPI_SYS=m ed aggiungete le seguenti righe a `/etc/modules' in quest'ordine. ospm_busmgr ospm_system Oppure ricompilate il kernel con tutte le opzioni precedenti su "y". Nel caso dell'ACPI, non serve alcun parametro di boot. 3.7.5. Strani problemi di accesso con alcuni siti web ----------------------------------------------------- I kernel Linux recenti attivano l'ECN di default, cosa che può causare problemi di accesso ad alcuni siti web con dei cattivi routers. Per controllare lo stato dell'ECN: # cat /proc/sys/net/ipv4/tcp_ecn ... oppure # sysctl net.ipv4.tcp_ecn Per disattivarlo usate: # echo "0" > /proc/sys/net/ipv4/tcp_ecn ... oppure # sysctl -w net.ipv4.tcp_ecn=0 Per disabilitare TCP ECN ad ogni boot, aprite `/etc/sysctl.conf' ed aggiungete: net.ipv4.tcp_ecn = 0 3.7.6. Configurazione di PPP per una connessione dial-up -------------------------------------------------------- Installate il pacchetto `pppconfig' per impostare un accesso dial-up con PPP. # apt-get install pppconfig # pppconfig ... seguite le istruzioni per configurare PPP # adduser dip ... permette a di accedere a PPP L'accesso dial-up PPP può essere iniziato dall'utente (): $ pon # inizia l'accesso PPP al vostro IP ... gustatevi Internet $ poff # termina l'accesso PPP, è facoltativo Vedere Sezione 10.2.4, `Configurare un'interfaccia PPP' per maggiori dettagli. 3.7.7. Altri file di configurazione da perfezionare in `/etc' ------------------------------------------------------------- Potreste voler aggiungere un file `/etc/cron.deny', che manca nella installazione Debian standard (potete copiare `/etc/at.deny'). ------------------------------------------------------------------------------- 4. Lezioni di Debian -------------------- Questa sezione fornisce delle coordinate di base per orientarsi nel mondo Debian, mirate all'utente inesperto. Se è un pò di tempo che utilizzate un sistema Unix-like, probabilmente saprete già tutto di quello che verrà spiegato qui. In tal caso, usatela come ripasso. 4.1. Per iniziare ----------------- Dopo aver installato Debian sul vostro PC, dovete imparare alcune cose per renderlo utile. Partiamo a tambur battente con le lezioni. 4.1.1. Login come root al prompt dei comandi -------------------------------------------- Dopo il reboot vi si presenterà o la schermata grafica di accesso al sistema, oppure quella a carattere, a seconda della vostra selezione iniziale dei pacchetti. Per semplicità, se avete davanti la schermata grafica, premete Ctrl-Alt-F1 [1] per accedere alla schermata di accesso a carattere. Supponiamo che il vostro hostname sia `', il prompt del login sarà così: login: Digitate `root' , premete il tasto Enter e digitate la password scelta durante il processo di installazione. In Debian,come da tradizione del mondo Unix, la password è dipendente anche dal maiuscolo/minuscolo. Dopo di ciò, il sistema parte con il messaggio di benvenuto e vi presenta il prompt dei comandi di root in attesa di un vostro comando. [2] login: root Password: Last login: Sun Oct 26 19:04:09 2003 on tty3 Linux 2.4.22-1-686 #6 Sat Oct 4 14:09:08 EST 2003 i686 GNU/Linux Most of the programs included with the Debian GNU/Linux system are freely redistributable; the exact distribution terms for each program are described in the individual file in /usr/share/doc/*/copyright Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@:root# A questo punto siete pronti per amministrare il sistema dal prompt dei comandi di root. L'account root è anche chiamato utente privilegiato o superuser. Tramite questo account potete fare qualsiasi cosa: * leggere, modificare e rimuovere qualsiasi file del sistema, indipendentemente dai loro permessi * impostare i permessi ed il proprietario di qualsiasi file del sistema * impostare la password di qualsiasi utente senza privilegi nel sistema * accedere a qualsiasi account senza bisogno di password E' un'idea veramente pessima condividere l'accesso all'account di root condividendone la password. Il modo giusto di condividere i privilegi dell'amministratore è mediante l'uso di programmi come sudo(8). Notate che è considerata una buona abitudine in ambito Unix accedere prima ad un account senza privilegi, anche quando si pensa di eseguire delle attività di amministrazione di sistema. Utilizzate i comandi `sudo', `super', o `su -c' per guadagnare dei privilegi di root limitati quando ne avete necessità. Vedere Sezione 9.2.4, ``sudo' -- lavorare con maggiore sicurezza'. [3] [1] I tasti Ctrl-sinistro, Alt-sinistro ed F1 vanno premuti insieme. [2] Notate che, se avete modificato il messaggio di benvenuto in in `/etc/motd', this will be different. [3] Devo ammettere che ho utilizzato l'account di root più spesso di quanto necessario, solo perchè era più comodo ed io poco scrupoloso. 4.1.2. Impostare un ambiente minimale per il novizio ---------------------------------------------------- Credo che imparare ad usare un sistema operativo sia come imparare una nuova lingua. Sebbene le guide siano utili, uno deve fare pratica con strumenti che lo possano aiutare. In questo contesto, credo sia una buona idea installare alcuni pacchetti aggiuntivi, tipo `mc', `vim', `lynx', `doc-linux-text' e `debian-policy'. [1] # apt-get update ... # apt-get install mc vim lynx doc-linux-text debian-policy ... Se avete questi pacchetti già installati, non accadrà nulla. [1] Può essere una buona idea installare anche `gpm', `emacs21' e `doc-linux-html'. Vedere Sezione 3.3, `Configurare il mouse' e Capitolo 11, `Gli Editor'. 4.1.3. Aggiungere un account utente ----------------------------------- Durante l'installazione avrete creato un account utente senza privilegi, che utilizzerete per ricevere le mail inviate all'account di root. [1] Dato che non volete usare questo account speciale per le esercitazioni che andrete a fare, dovrete creare un nuovo account utente. Supponiamo che vogliate come username `', digitate: root@:root# adduser ... rispondete a tutte le domande eccolo creato. [2] Prima di andare avanti, impariamo alcune cose. [1] Tendo a chiamare questo account `admin', ma potete dargli il nome che preferite. [2] Potete aggiungere l'utente `' al gruppo `adm' per concedere l'accesso il lettura ai molti file log contenuti in `/var/log/'. Vedere passwd(5), group(5), shadow(5), group(5), vipw(8) e vigr(8). Per i significati ufficiali di utente e gruppo leggetevi una versione recente del documento Users and Groups (/usr/share/doc/base-passwd/users-and-groups.html). 4.1.4. Muoversi tra le console virtuali --------------------------------------- In un sistema Debian standard esistono 6 pseudo-terminali disponibili, cioè potete usare lo schermo a carattere VGA del PC come 6 terminali VT-100 intercambiabili. Potete passare da uno all'altro premendo simultaneamente i tasti Alt-sinistro ed uno dei tasti F1--F6. Ciascun (pseudo)terminale permette i login indipendenti agli account. L'ambiente multiutente è una grande ed avvincente caratteristica di Unix. Se premete accidentalmente Alt-F7 su un sistema con X Window System e lo schermo mostra l'interfaccia grafica di login, potete riguadagnare l'accesso all'interfaccia a carattere premendo Ctrl-Alt-F1. Per abituarvi, provate a muovervi tra le varie console e a tornare indietro su quella di partenza. 4.1.5. Lo spegnimento del PC ---------------------------- Come qualsiasi moderno sistema operativo, in cui i file vengono tenuti in memoria, il sistema Debian una procedura di arresto appropriata, prima che l'interruttore possa essere spento con sicurezza, per mantenere l'integrità dei file. Date il seguente comando dal prompt di root per spegnere il sistema: # shutdown -h now Questo è per la normale modalità multiutente. In modalità singolo utente, sempre da prompt di root, è invece: # poweroff -i -f In alternativa, potete premere Ctrl-Alt-Delete (o Ctrl-Alt-Canc per la tastiera italiana) per spegnere. [1] Attendete finchè non appare la scritta "System halted", poi spegnete il computer. Se le funzioni APM o ACPI sono state attivate dal BIOS e su Linux, il sistema si spegnerà da solo. Per i dettagli, vedere Sezione 3.7.4, `Grosse memorie e spegnimento automatico'. [1] I tasti Ctrl-sinistro, Alt-sinistro e Delete (o Canc) vanno premuti comtemporaneamente da console. In un sistema standard, ciò provoca il reboot. Potete modificare `/etc/inittab' per avere il comando `shutdown' comando con l'opzione `-h', come descritto in Sezione 3.7.1, `Installate pochi altri pacchetti dopo l'installazione iniziale'. 4.1.6. E' tempo di giocare -------------------------- Ora siete pronti per giocare con Debian senza rischi, finchè utilizzate l'account utente senza privilegi `'. [1] Accediamo come `'. Se eravate al prompt di root, premete Ctrl-D [2] per chiudere l'attività della shell di root e tornare al prompt del login. Inserite lo username appena creato `' e la password corrispondente. [3] Vi si presenterà il seguente prompt dei comandi. @:$ Da ora in poi l'esempio utilizzerà dei prompt semplificati per maggiore chiarezza. Userò: * `#' : prompt della shell di root * `$' : prompt della shell di un utente senza privilegi Cominceremo ad imparare il sistema Debian nel modo più facile Sezione 4.2, `Midnight commander (MC)' e poi in quello più giusto Sezione 4.3, `Ambiente di lavoro Unix-like'. [1] Ciò è possibile perchè il sistema Debian è, anche dopo l'installazione di base, già configurato con i giusti permessi dei file, prevenendo danneggiamenti del sistema da parte di utenti non privilegiati. Ovviamente potranno sempre esistere delle falle che potranno essere sfruttate, ma coloro che se ne preoccupano non dovrebbero leggere questa sezione, ma il Securing Debian Manual (http://www.debian.org/doc/manuals/securing-debian-howto/). [2] I tasti Ctrl-sinistro e d vanno premuti insieme. Non c'è bisogno di premere il tasto del maiuscolo, anche se questi caratteri di controllo vengono definiti come "control D" con il maiuscolo. [3] Se inserite `root' invece di `' e la password corrispondente, avrete l'accesso all'account `root' account. Questa procedura vi servirà per riguadagnare l'accesso all'account `root'. 4.2. Midnight commander (MC) ---------------------------- Midnight commander (MC) può essere considerato come uno di quei coltellini svizzeri multiuso, per la console Linux ed altri terminali. Ciò offre al novizio un'esperienza con una console con menu, molto più semplice per imparare i comandi Unix standard. Usate questo comando per esplorare il sistema Debian. E' il modo migliore per imparare. Esplorate alcune locazioni chiave usando solo i tasti cursore ed il tasto Enter: * `/etc' e le sue sottodirectory. * `/var/log' e le sue sottodirectory. * `/usr/share/doc' e le sue sottodirectory. * `/sbin' e `/bin' 4.2.1. Migliorare MC -------------------- Per far cambiare ad MC la directory di lavoro in uscita, dovete modificare `~/.bashrc' (o `/etc/bash.bashrc', chiamato da `.bashrc'), come spiegato nella sua pagina di manuale, mc(1), sotto l'opzione `-P'. [1] [1] Se non capite esattamente di cosa sto parlando, potete farlo in seguito. 4.2.2. Lanciare MC ------------------ $ mc MC si prende cura di tutte le operazioni sui file tramite il proprio menu, richiedendo il minimo sforzo da parte dell'utente. Basta premere F1 per accedere alla schermata di aiuto. Potete giocare con MC premendo i tasti cursore ed i tasti funzione. [1] [1] Se siete in un terminale, tipo `kon' e `Kterm' per il giapponese, che utilizza dei caratteri grafici speciali, aggiungendo `-a' alla riga di comando di MC può aiutare a prevenire dei problemi. 4.2.3. Il file manager in MC ---------------------------- Come default vengono presentate due finestre affiancate che mostrano la lista di file contenuti nelle directory correnti. Un'altra modalità utile è impostare la finestra di destra ad "informazioni", per avere tute le informazioni su file, tipo privilegi di accesso, ecc. A seguire si riportano i tasti fondamentali. Se il demone `gpm' sta girando, potete usare anche il mouse. (Ricordatevi di premere il tasto maiscolo per avere il normale comportamento sotto MC per taglia ed incolla). * F1: Menu aiuto * F3: File viewer interno * F4: Editor interno * F9: Attiva il menu a cascata * F10: Esce da Midnight commander * Tab: Muove tra le due finestre * Insert: Marca il file per operazioni con più file, tipo copia * Del: Cancella il file (Fate attenzione---impostate MC in modalità cancellazione sicura) * Tasti cursore: Si spiegano da sè 4.2.4. Trucchi per la riga di comando in MC ------------------------------------------- * Qualsiasi comando `cd' cambierà la directory mostrata sullo schermo selezionato. * Control-Invio o Alt-Invio copiano il nome del file sulla riga di comando. Usatelo insieme ai comandi `cp' o `mv' durante l'editing da riga di comando. * Alt-Tab mostra le scelte per i suffissi di file. * Si possono stabilire le directory di partenza per ciascuna finestra, come argomenti per MC; per esempio, `mc /etc /root'. * Esc + == F (cioè, Esc + `1' = F1, ecc.; Esc + `0' = F10) * Tasto Esc == tasto Alt (= Meta, M-); cioè, premete Esc + `c' per Alt-C. 4.2.5. L'editor in MC --------------------- L'editor interno ha un sistema di taglia ed incolla interessante. Premendo F3 si marca l'inizio della selezione, un secondo F3 ne segna la fine e la evidenzia. Muovete ora il cursore. Premendo F6 l'area selezionata viene mossa dove è il cursore. Con F5 l'area verrà copiata dove è il cursore. F2 salva il file, F10 esce. Gran parte dei tasti cursori ha un funzionamento intuitivo. Questo editor può essere lanciato direttamente per un determinato file: $ mc -e file_da_modificare $ mcedit file_da_modificare Non è un editor multifinestra, si può ottenere lo stesso effetto utilizzando più console. Per copiare da una finestra all'altra, usate la combinazione Alt-F per passare da una console ad un'altra e"File->Insert file" o "File->Copy to file" per muovere parti di un file in un altro. L'editor interno può essere sostituito da qualsiasi editor esterno preferiate. Molti programmi usano variabili d'ambiente tipo `EDITOR' o `VISUAL' per decidere quale editor usare. Se vi trovate male con `vim', impostatele a `mcedit' aggiungendo queste righe a `~/.bashrc': ... export EDITOR=mcedit export VISUAL=mcedit ... Raccomando comunque di impostarle a `vim', se possibile. Abituarsi ai comandi di `vim' sarebbe la cosa giusta da fare, dato che gli editor-Vi sono una costante nel mondo Linux/Unix. [1] [1] In effetti, `vi' o `nvi' sono programmi che trovate ovunque. Ho scelto `vim', invece, per il novizio, poichè offre un aiuto in linea attraverso il tasto F1, pur essendo simile è più potente dei programmi sopracitati. 4.2.6. Il visualizzatore in MC ------------------------------ Molto valido. E' uno strumento notevole per la ricerca di parole nei documenti. Lo uso sempre per i file nella directory `/usr/share/doc'. Rappresenta uno dei modi più rapidi di girare tra la massa di informazioni su Linux. Può essere lanciato direttamente con: $ mc -v file_da_vedere 4.2.7. Le caratteristiche di lancio automatico di MC ---------------------------------------------------- Premete Invio su un file, ed il programma appropriato si prenderà cura del suo contenuto. E' una caratteristica di MC molto utile. eseguibile: Esegue il comando file man, html: Dirotta il contenuto al viewer corrispondente file tar.gz, deb: Sfoglia il contenuto come fosse una sottodirectory Per permettere a queste utilità di svolgere il loro compito, i file da leggere non devono essere segnati come eseguibili. Cambiatene lo stato tramite il comando `chmod', oppure attraverso il menu file di MC. 4.2.8. Il fileystem FTP virtuale di MC -------------------------------------- MC può essere utilizzato per accedere a file tramite Internet, usando FTP. Attivate il menu premendo F9, poi attivate il file system virtuale FTP premendo `p'. Inserite una URL sotto forma di `username:passwd@nomehost.nomedomain', che raggiungerà una directory remota che apparirà come una locale. Provate `http.us.debian.org/debian' come URL e scorrete l'archivio dei file Debian. Vedere Sezione 2.1, `Gli archivi Debian' per come sono organizzati. 4.3. Ambiente di lavoro Unix-like --------------------------------- Nonostante MC vi permetta di fare qualsiasi cosa, è bene che impariate come usare gli strumenti da riga di comando invocati dal prompt della shell e che familiarizziate con l'ambiente di lavoro Unix-like. [1] [1] In questa lezione, il termine shell significa `bash'. Per approfondire il significato delle varie shell, vedere Sezione 13.2, `Shell'. 4.3.1. Combinazioni speciali di tasti ------------------------------------- Nell'ambiente Unix-like, esistono alcune combinazioni di tasti che hanno un significato particolare. [1] * Ctrl-U: Cancella la riga prima del cursore. * Ctrl-H: Cancella il carattere prima del cursore. * Ctrl-D: Termina l'input. (eshe dalla shell se la state usando) * Ctrl-C: Termina l'esecuzione di un programma. * Ctrl-Z: Ferma temporaneamente un programma. (mette il job in background vedere Sezione 4.3.10.1, ``comando &'') * Ctrl-S: Interrompe l'output a schermo. [2] * Ctrl-Q: Riattiva l'output a schermo. la shell di default, `bash', prevede l'editing della cronologia ed il completamento mediante il tasto tab per facilitarne l'uso interattivo. * freccia su: Lancia la ricerca della cronologia dei comandi. * Ctrl-R: Lancia la ricerca incrementale della cronologia dei comandi. * TAB: Completa l'input del nome del file sulla riga di comando. * Ctrl-V TAB: Inserisce TAB senza espandere la riga di comando. Altre combinazioni importanti da ricordare: * Ctrl-Alt-Del: Reboot/arresta il sistema, vedere Sezione 3.7.1, `Installate pochi altri pacchetti dopo l'installazione iniziale'. * Tasto-sinistro-e-sposta il mouse: Seleziona e copia negli appunti. * Tasto centrale del: Incolla il contenuto degli appunti dove è il cursore. * Tasto Meta (terminologia Emacs) viene tradizionalmente assegnato al tasto Alt sinsitro. Alcuni sistemi possono essere configurati per utilizzare come tasto Meta il tasto Windows. Per usare il mouse sotto la console a caretteri Linux, dovete avere `gpm' lanciato come demone. [3] Vedere Sezione 3.3, `Configurare il mouse'. [1] Su una normale console a caratteri Linux solo il Ctrl sinistro ed il tasto Alt, funzionano come ci si aspetta. [2] Potete disabilitare questa caratteristica del terminale tramite stty(1). [3] Nell'ambiente grafico X le funzioni del mouse sono identiche quando usate il programma Xterm. 4.3.2. Comandi base Unix ------------------------ Impariamo i comandi base Unix. [1] Provate tutti i comandi dall'account utente senza privilegi `' : * `pwd' * Mostra il nome della directory attuale/di lavoro. * `whoami' * Mostra il nome utente attuale. * `file ' * Mostra il tipo per il dato file . * `type -p ' * Mostra la localizzazione del comando `'. * `which ' fa la stessa cosa. [2] * `type ' * Mostra le informazioni sul comando `'. * `apropos ' * Trova i comandi correlati a `'. * `man -k ' fa la stessa cosa. * `whatis ' * Mostra una linea di spegazione sul comando `'. * `man -a ' * Mostra la spiegazione sul comando `'. (Unix style) * `info ' * Mostra una spiegazione più lunga sul comando `'. (stile GNU) * `ls' * Elenca il contenuto della directory. (file non puntati e directory) [3] * `ls -a' * Elenca il contenuto della directory. (tutti i file e directory) * `ls -A' * Elenca il contenuto della directory. (quasi tutti i file e directory, ovvero salta "`..'" e "`.'") * `ls -la' * Elenca tutto il contenuto della directory con informazioni dettagliate. Vedere Sezione 4.5.2, `Il concetto di filesystem in Debian'. * `ls -d' * Elenca tutte le directory sotto la directory corrente. * `lsof ' * Mostra lo stato del file `'. * `mkdir ' * Crea una nuova directory `' sotto la directory corrente. * `rmdir ' * Rimuove la directory `' nella directory corrente. * `cd ' * Cambia directory nella directory `' nella directory corrente o in quella elencata nella variabile `CDPATH'. Vedere il comando `cd' in builtins(7). * `cd /' * Cambia directory in quella di root. * `cd' * Cambia directory nella home dell'utente attuale. * `cd /' * Cambia directory seguendo il percorso assoluto `/'. * `cd ..' * Va nella directory superiore. * `cd ~' * Va nella home directory dell'utente `'. * `cd -' * Va nella directory precedente. * `''. [4] * `touch ' * Crea un file vuoto `'. * `cp ' * Copia un file esistente `' in muovo file `'. * `rm ' * Rimuove il file `'. * `mv ' * Rinomina un file esistente `' in `'. * `mv ' * Muove un file esistente `' in una nuova locazione con un nuovo nome `'. La directory `' deve esistere. * `chmod 600 ' * Rende un file esistente `' non-leggibile e non-scrivibile dagli altri utenti. (non-eseguibile per tutti) * `chmod 644 ' * Rende un file esistente `' leggibile ma non-scrivibile dagli altri utenti. (non-eseguibile per tutti) * `chmod 755 ' * Rende un file esistente `' leggibile ma non-scrivibile per gli altri utenti. (eseguibile per tutti) * `top' * Mostra le informazioni sui processi a tutto schermo. Digitate "q" per uscire. * `ps aux | pager' * Mostra le informazioni su tutti i processi in esecuzione usando un output in stile BSD. Vedere Sezione 4.3.10.2, ``comando1 | comando2''. * `ps -ef | pager' * Mostra le informazioni su tutti i processi in esecuzione usando un output in stile Unix system-V. * `ps aux | grep -e "[e]xim4*"' * Mostra tutti i processi che usano `exim' o `exim4'. Imparate le espressioni regolari dalla grep(1) pagina di manuale digitando `man grep'. [5] * `ps axf | pager' * Mostra le informazioni su tutti i processi in esecuzione usando un output in arte ASCII. * `kill <1234>' * Uccide un processo idenficato dal numero: <1234>. Vedere Sezione 8.5.1, `Uccidere un processo'. * `grep -e "" *.html' * Trova un "" in tutti i file che terminano per `.html' nella directory corrente e li mostra tutti. * `gzip ' * Comprime `' per creare `.gz' usando la codifica Lempel-Ziv (LZ77). * `gunzip .gz' * Decomprime `.gz' per creare `'. * `bzip2 ' * Comprime `' per creare `.bz2' utilizzando l'algoritmo di compressione del testo Burrows-Wheeler e la codifica Huffman. (Migliore compressione di `gzip') * `bunzip2 .bz2' * Decomprime `.bz2' per creare `'. * `tar -xvvf ' * Estrae i file dall'archivio `.tar'. * `tar -xvvzf .tar.gz' * Estrae i file dall'archivio gzippato `.tar.gz'. * `tar -xvvf --bzip2 ' * Estrae i file dall'archivio `.tar.bz2'. [6] * `tar -cvvf .tar /' * Archivia il contenuto della cartella `/' in un archivio `.tar'. * `tar -cvvzf .tar.gz /' * Archivia il contenuto della cartella `/' in un archivio `.tar.gz' compresso. * `tar -cvvf --bzip2 .tar.bz2 /' * Archivia il contenuto della cartella `/' in `.tar.bz2'. [7] * `zcat README.gz | pager' * Mostra il contenuto del compresso `README.gz' usando il paginatore di default. * `zcat README.gz > foo' * Crea un file `foo' con il contenuto non compresso di `README.gz'. * `zcat README.gz >> foo' * Appende il contenuto non compresso di `README.gz' alla fine del file `foo'. (Se non esiste, prima lo crea.) * `find . -name ' * trova i file con i nomi corrispondenti usando il `' della shell. (più lento) * `locate -d . ' * find i file con i nomi corrispondenti usando il `' della shell. (più rapido, se si usa un database generato regolarmente) Come esercizio, attraversate le directory e sbirciate nel sistema usando i comandi sopraelencati. Se avete dubbi sui comandi, assicuratevi di aver letto le pagine di manuale. Per esempio, un buon inizio sono questi comandi: $ man man $ man bash $ man ls Questo è anche il momento giusto per lanciare `vim' e premere il tasto F1. Dovreste leggere almeno le prime 35 righe. Poi fate un pò di esercizio in linea muovendo il cursore su `|tutor|' e premendo Ctrl-]. Vedere Capitolo 11, `Gli Editor' per impararne di più sugli editor. Notate che molti comandi Unix-like, compresi quelli provenienti da GNU e BSD, mostreranno delle brevi informazioni di aiuto se invocati in uno dei modi seguenti (o senza argomenti, in alcuni casi): $ --help $ -h Come esercizio, provate anche gli esempi in Capitolo 8, `Trucchi per Debian'. [1] Qui uso "Unix" nel suo significato generico. Qualsiasi clone di Unix in genere offre comandi equivalenti. il sistema Debian non fa eccezione. Non preoccupatevi se alcuni comandi non funzionano come desiderate. Questi esempi non sono stati pensati per essere eseguiti in questo ordine. [2] Se si usa `alias' nella shell, il loro output sarà differente. [3] Unix ha la tradizione di nascondere il file il cui nome comincia con "`.'". Sono generalmente file che contengono informazioni di configurazione e preferenze dell'utente. [4] Il paginatore di default di un sistema Debian di base è `more' che non ha lo scorrimento indietro. Installando il pacchetto `less' tramite `apt-get install less', `less' diventa il paginatore di default, così potrete scorrere all'indietro tramite i tasti cursore. [5] `[' e `]' nelle espressioni regolari permettono a `grep' di evitare di trovare corrispondenze con sè stesso. Il `4*' nella espressione regolare significa 0 o più ripetizioni del carattere 4, per cui permette a `grep' di trovare corrispondenze sia con `exim' che con `exim4'. Sebbene `*' sia usato come metacarattere sia nei nomi dei file della shell che nelle espressioni regolari, ha significati differenti. [6] Qui si è usata l'opzione `--bzip2' al posto della più breve `-j' per essere sicuri che funzioni anche con le versioni più vecchie di `tar' in Potato. [7] Di nuovo, `--bzip2' viene usato per garantire la compatibilità. 4.3.3. Esecuzione dei comandi ----------------------------- Avete avuto un assaggio su come usare il sistema Debian. Addentriamoci ora nei meccanismi di esecuzione dei comandi. [1] [1] Qui la realtà è stata semplificata, per venire incontro al neofit. Vedere bash(1) per una spiegazione più completa. 4.3.4. Il comando semplice -------------------------- Un comando semplice è una sequenza di 1. compiti della variabile (opzionale) 2. nome comando 3. argomenti (opzionale) 4. redirezioni (opzionale: `>' , `>>' , `<' , `<<' , etc.) 5. operatore di controllo (opzionale: `&&' , `||' ; , `;' , `&' , `(' , `)' ) Per comandi più complessi, con quotazioni e sostituzioni, vedere Sezione 13.2.6, `Processamento delle righe di comando'. 4.3.5. Esecuzione dei comandi e variabili d'ambiente ---------------------------------------------------- Una tipica esecuzione di un comando usa una sequenza di shell coma la seguente: [1] $ date Sun Oct 26 08:17:20 CET 2003 $ LC_ALL=fr_FR date dim oct 26 08:17:39 CET 2003 In questo caso il programma `date' viene eseguito in primo piano. La variabile di ambiente `LC_ALL' è: * non impostata (default del sistema, `C') per il primo comando * impostata a `fr_FR' (locale Francese) per il secondo comando Gran parte delle esecuzioni dei comandi non sono generalmente preceduti da una definizione della variabile di ambiente. In riferimento all'esempio precedente, potete eseguire, in alternativa: $ LC_ALL=fr_FR $ date dim oct 26 08:17:39 CET 2003 Come potete vedere, il risultato del comando viene influenzato dalla variabile di ambiente, che produrrà un risultato in francese. Se volete che la variabile di ambiente venga inglobata dai sottoprocessi (quando chiamate uno script della shell, per esempio), dovete "esportarla", usando: $ export LC_ALL [1] Per ottenereTo il risultato seguente, dovreste installare il locale Francese, vedere Sezione 9.7.2, `I locale'. Ciò non è essenziale per la lezione. Viene fatto solo per mostrare gli effetti potenziali. 4.3.6. Il percorso di ricerca dei comandi ----------------------------------------- Quando date un comando nella shell, essa lo cerca nella lista di directory contenuta nella variabile `PATH'. Il valore di `PATH' viene anche chiamato percorso di ricerca della shell. In una installazione Debian di base, la variabile `PATH' degli account utenti può non comprendere `/sbin/'. Quindi, se volete lanciare un comando tipo `ifconfig' da `/sbin/', dovete modificare `PATH' in maniera da includerlo. La variabile `PATH' viene di solito impostata dal file di inizializzazione `~/.bash_profile', vedere Sezione 3.2, `Configurare Bash'. 4.3.7. Opzioni della riga di comando ------------------------------------ Alcuni comandi richiedono degli argomenti. Gli argomenti che cominciano con `-' o con `--' vengono chiamati opzioni e controllano il comportamento del comando. $ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100 In questo caso l'argomento `-R' modifica il comportamento di `date' per dare come risultato una stringa con una data compatibile RFC-2822. 4.3.8. Metacaratteri della shell -------------------------------- Spesso capita che vogliate che un comando funzioni su un gruppo di file, senza digitarli tutti. Il modello di espansione dei nomi dei file che utlizza _metacaratteri_ facilita questo compito. * `*' * Comprende un qualsiasi gruppo di 0 o più caratteri. * Non comprende un file che inizia per "`.'". * `?' * Comprende esattamente un unico carattere. * `[...]' * Comprende esattamente qualsiasi carattere contenuto fra le parentesi * `[a-z]' * Comprende esattamente qualsiasi carattere compreso fra `a' e `z'. * `[^...]' * Comprende esattamente qualsiasi carattere diverso da quelli contenuti tra parentesi (escluso "^"). Come esempio, provate da voi e ragionateci su: $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt $ echo *.txt 1.txt 2.txt $ echo * 1.txt 2.txt 3.c 4.h $ echo *.[hc] 3.c 4.h $ echo .* . .. .5.txt $ echo .[^.]* .5.txt $ echo [^1-3]* 4.h $ cd ..; rm -rf junk 4.3.9. Restituire il valore dei comandi --------------------------------------- Ogni comando restituisce il suo stato in uscita come valore restituito. * valore restituito = 0 se il comando è stato eseguito con successo. * valore restituito = non-zero se il comando termina con errori. Si può accedere al valore restituito attraverso la variabile di shell `$?' subito dopo l'esecuzione. $ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1 Notate che, quando il valore restituito viene usato nel contesto logico della shell, il _successo_ viene trattato come il _VERO_ in logica. Ciò è poco intuitivo, dato che _successo_ ha valore _zero_. Vedere Sezione 13.2.5, `Condizionali'. 4.3.10. Tipiche sequenze di comandi ----------------------------------- Proviamo a ricordare i seguenti comandi idiomatici della shell. Vedere Sezione 13.2.3, `Parametri della shell', Sezione 13.2.4, `Redirezione', Sezione 13.2.5, `Condizionali', e Sezione 13.2.6, `Processamento delle righe di comando' dopo aver letto questi idiomi. 4.3.10.1. `comando &' --------------------- Il `comando' viene eseguito nella subshell nello _sfondo_. I lavori nello sfondo permettono all'utente di lanciare più programmi in una singola shell. La gestione dei processi nello sfondo coinvolge i fondamentali della shell: `jobs', `fg', `bg', e `kill'. Leggete le sezioni della pagina di manuale bash(1) sotto "SIGNALS", "JOB CONTROL", e "SHELL BUILTIN COMMANDS". [1] [1] Il sistema Debian è un sistema multi-tasking. 4.3.10.2. `comando1 | comando2' ------------------------------- Lo standard output di `comando1' viene dato allo standard input di `comando2' . Entrambi i comandi possono essere eseguiti _contemporaneamente_. Questa si chiama _pipeline_. 4.3.10.3. `comando1 ; comando2' ------------------------------- `comando1' e `comando2' sono eseguiti _in sequenza_. 4.3.10.4. `comando1 && comando2' -------------------------------- `comando1' viene eseguito. Se con successo, `comando2' viene eseguito _in sequenza_. Verrà restituito un successo se sia `comando1' _che_ `comando2' sono stati eseguiti con successo. 4.3.10.5. `comando1 || comando2' -------------------------------- `comando1' viene eseguito. Se non con successo, allora anche `comando2' viene eseguito _in sequenza_. Verrà restituito un successo se `comando1' _oppure_ `comando2' sono stati eseguiti con successo. 4.3.10.6. `comando > ' --------------------------- Redireziona lo standard output di `comando' ad un file `'. (sovrascrive) 4.3.10.7. `comando >> ' ---------------------------- Redireziona lo standard output di `comando' ad un file `'. (appende) 4.3.10.8. `comando > 2>&1' -------------------------------- Redireziona sia lo standard output che lo standard error di `comando' ad un file `'. 4.3.10.9. `comando < ' --------------------------- Redireziona lo standard input di `comando' ad un file `'. Provate: $ ' * Corrispondenza con la fine di una parola. * `[abc...]' * Questa lista di caratteri ha corrispondenza con uno qualsiasi dei caratteri "`abc...'". * `[^abc...]' * Questa lista di caratteri negat ha corrispondenza con qualsiasi carattere tranne quelli "`abc...'". * `r*' * Ha corrispondenza con nessuna o più espressioni regolari identificate da "`r'". * `r+' * Ha corrispondenza co una o più espressioni regolari identificate da "`r'". * `r?' * Ha corrispondenza con nessuna od una espressione regolare identificata da "`r'". * `r1|r2' * Ha corrispondenza con una delle espressioni regolari identificate da "`r1'" or "`r2'". * `(r1|r2)' * Ha corrispondenza con una delle espressioni regolari identificate da "`r1'" or "`r2'" e la tratta come una espressione regolare _tra parentesi_. In BRE i _metacaratteri_ "`+ ? ( ) { } |'" perdono il loro significato speciale; al loro posto si usano le versioni con la backslash "`\+ \? \( \) \{ \} \|'". Perciò il costrutto `(r1|r2)' deve essere protetto come `\(r1|r2\)'. Siccome `emacs', sebbene sia di base BRE, tratta "`+ ?'" come _metacaratteri_, non c'è necessità di proteggerli. Vedere Sezione 4.4.2, `Espressioni sostitutive' per come il costrutto viene utilizzato. Per esempio, `grep' può essere utilizzato per eseguita una ricerca di testo mediante l'espressione regolare: $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL GNU GENERAL PUBLIC LICENSE GNU GENERAL PUBLIC LICENSE Yoyodyne, Inc., hereby disclaims all copyright interest in the program 4.4.2. Espressioni sostitutive ------------------------------ Per le espressioni sostitutive, i caratteri seguenti hanno significati speciali: * `&' * Rappresenta la corrispondenza dell'espressione regolare. (usate `\&' in `emacs') * `\' * Rappresenta l' -esima corrispondenza dell'espressione regolare _tra parentesi_. Nelle stringhe sostitutive in Perl si usa, `$' al posto di `\' e `&' non alcun significato speciale meaning. Per esempio: $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/' zzz=1abc2efg3hij4= $ echo zzz1abc2efg3hij4 | \ sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/' zzzefg3hij4===1abc $ echo zzz1abc2efg3hij4 | \ perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/' zzz=&= Ponete particolare attenzione allo stile delle espressioni regolari _tra parentesi_ e a come le stringhe corrispondenti siano state usate nel processo di sostituzione del testo dai vari strumenti. Queste espressioni regolari possono anche essere usate per i movimenti del cursore e la sostituzione del testo negli editor. Per imparare questi comandi, leggete le loro pagine di manuale. 4.5. Il filesystem Unix-like ---------------------------- Nei sistemi operativi GNU/Linux e negli altri Unix-like, i _file_ sono organizzati in _directory_. [1] Tutti i _file_ e le _directory_ sono organizzati in un unico grande albero, la gerarchia dei file, la cui radice è `/'. Questi file e directory possono essere sparsi su vari device. Il comando mount(8) attacca il file system trovato su un device al grande albero. Al contrario, il comando umount(8) lo staccherà nuovamente. [1] Le _directory_ vengono chiamate _cartelle_ in altri sistemi. 4.5.1. Le basi dei file Unix ---------------------------- I principi basilari: * I nomi dei file dipendono dai caratteri maiuscoli o minuscoli. Ovvero, `MIOFILE' e `MioFile' sono file _differenti_. * La root directory è definita semplicemente come `/'. Non confondete questa "root" con l'utente root. Vedere Sezione 4.1.1, `Login come root al prompt dei comandi'. * Ciascuna directory ha un nome che può contenere sia lettere che simboli _tranne_ `/'. [1] La root directory fa eccezione; il suo nome è `/' (pronunciato "slash" o "la root directory") e non può essere rinominata. * Ciascun file o directory viene designato da un _fully-qualified filename_, _absolute filename_, o _path_, che fornisce la sequenza delle directory che devono esserre attraversate per raggiungerlo. I tre termini sono sinonimi. Tutti gli absolute filenames iniziano con la directory `/', e c'è una `/' fra ciascuna directory o file nel filename. La prima `/' è il nome della directory, mentre le altre sono dei semplici separatori per distinguere le varie parti del. Le parole possono confondere. Prendiamo il seguente esempio: /usr/share/keytables/us.map.gz Questo è un fully-qualified filename; alcuni lo chiamano _path_. Comunque sia, ci si riferisce anche a `us.map.gz' da solo come un filename. [2] * La root directory ha un certo numero di branche, come `/etc/' e `/usr/'. Queste sottodirectory a turno si dividono in altre sottodirectory, come `/etc/init.d/' e `/usr/local/'. Il loro insieme è definito _l'albero delle directory_. Potete immaginare l'absolute filename come un percorso che parte dalla base dell'albero (`/') fino alla fine di qualche ramo (un file). Sentirete anche definire l'albero delle directory come se fosse un albero _genealogico_: per cui le sottodirectory hanno dei _genitori_, ed un path mostra la completa storia familiare di un file. Esiste anche un path relativo, cha ha inizio altrove rispetto alla root directory. Ricordate che la directory `../' si riferisce alla directory genitore. * Non esiste alcuna directory corrispondente ad un dispositivo fisico, tipo il vostro disco rigido. In ciò sta la differenza rispetto a CP/M, DOS, e Windows, dove tutti i paths iniziano con il nome di un dispositivo, come `C:\'. Vedere Sezione 4.5.2, `Il concetto di filesystem in Debian'. Le pratiche migliori e più dettagliate per la gerarchia dei file vengono descritte nelFilesystem Hierarchy Standard (/usr/share/doc/debian-policy/fhs/fhs.txt.gz). per iniziare, dovreste ricordare i seguenti fatti: * `/' * Una semplice `/' rappresenta la root directory. * `/etc/' * E' il luogo dei file di configurazione generale del sistema. * `/var/log/' * E' il luogo per i file di log del sistema. * `/home/' * E' la directory che contiene tutte le home directory di tutti gli utenti non privilegiati. [1] Anche se _potete_ usare qualsiasi lettera o simbolo per il nome di un file, in pratica è una cattiva idea. E' meglio evitare quei caratteri che hanno spesso un significato speciale nella riga di comando, compresi spazi, tabulazioni, a capo ed altri caratteri speciali: `{ } ( ) [ ] ' ` " \ / > < | ; ! # & ^ * % @ $' . Per separare le parole in un nome, buone scelte sono il punto, il trattino e la sottolineatura. Potete anche iniziare ciascuna parola in maiuscolo, `ComeQuesta'. [2] Esiste anche un altro utilizzo per la parole _path_. Vedere Sezione 4.3.6, `Il percorso di ricerca dei comandi'. Il suo significato viene in genere reso chiaro dal contesto. 4.5.2. Il concetto di filesystem in Debian ------------------------------------------ Seguendo la tradizione Unix, il sistema Debian fa sì che i filesystem sotto i quali i dati fisici sui dischi rigidi e sugli altri dispositivi di memorie di massa e l'interazione con i dispositivi hardware tipo le console su schermo e le console remotes vengano rappresentati in maniera unificata. Ciascun file, directory, pipe, o dispositivo fisico in un sistema Debian ha una struttura di dati chiamata _inode_ che descrive gli attributi ad esso associati, come l'utente a cui appartiene (proprietario), il gruppo a cui appartiene, la data di ultimo accesso, ecc.. Vedere /usr/include/linux/fs.h per la definizione precisa di `struct inode' nel sistema Debian GNU/Linux. Questa rappresentazione unificata di entità fisiche risulta molto potente, in quanto permette l'uso degli stessi comandi per lo stesso tipo di operazioni su dispositivi complatamente differenti Tutti i vostri file potrebbero risiedere su un disco --- oppure potreste averne 20, alcuni connessi a computer diversi situati altrove sulla rete. Non potreste distinguerli guerdando semplicemente l'albero delle directory, e quasi tutti i comandi lavorerebbero alla stessa maniera, non importa su quale dispositivo(i) fisico(i) i file risiedono realmente. 4.5.3. Permessi di accesso a file e directory --------------------------------------------- I permessi di accesso a file e directory vengono definiti separatamente per ciascuna delle seguenti tre categorie di utenti: * l' _utente_ che è proprietario del file (u), * gli altri utenti nel _gruppo_ a cui il file appartiene (g) e * tutti gli _altri_ utenti (o). Dato un file, ciascun permesso corrispondente permette: * _read (lettura)_ (r): di esaminare il contenuto del file, * _write (scrittura)_ (w): di modificare e * _execute (esecuzione)_ (x): di eseguire il file come un comando. Data una directory, ciascun permesso corrispondente permette: * _read_ (r): di elencare i contenuti della directory, * _write_ (w): di aggiungere o rimuovere i file nella directory e * _execute_ (x): di accedere ai file nella. In questo caso il permesso in _esecuzione_ sulla directory non solo permette di leggere i file nella directory, ma anche di vedere i lori attributi, come le dimensioni e la data dell'ultima modifica. per mostrare le informazioni sui permessi (e molto altro) dei file e delle directory si usa `ls'. Vedere ls(1). Quando `ls' viene invocato con l'opzione `-l' mostrerà le seguenti informazioni, nell'ordine: * _tipo di file_ (primo carattere) * `-': normale * `d': directory * `l': collegamento simbolico * `c': character device node * `b': block device node * `p': named pipe * `s': socket * i _permessi_ di accesso al file (i nove caratteri successivi, consistenti di tre caratteri per ciascuno, utente, gruppo ed altri, in quest'ordine) * il _numero di hard links_ al file * il nome dell' _utente_ a cui appartiene * il nome del _gruppo_ a cui il file appartiene * le _dimensioni_ del file in caratteri (bytes) * _data ed ora_ del file (mtime) * il _nome_ del file. Per cambiare il proprietario del file, si usa `chown' dall'account di root. Per cambiarne il gruppo, si utlizza `chgrp' o dall'account del proprietario, o da quello di root. Per cambiare i permessi di accesso al file ed alla directory, si usa `chmod' dall'account del proprietario, o da quello di root. La sintassi di base per manipolare un dato file `foo' file è: # chown foo # chgrp foo # chmod [ugoa][+-=][rwx][,...] foo Vedere chown(1), chgrp(1), e chmod(1) per i dettagli. Per esempio, per rendere proprietario di una directory l'utente e condivisa da un gruppo , eseguite i seguenti comandi dall'account di root: # cd /una/locazione/ # chown -R : . # chmod -R ug+rwX,o=rX . Esistono altri tre bit di permessi speciali: * _set user ID_ (s o S invece della x di user), * _set group ID_ (s o S invece della x di group), and * _sticky bit_ (t o T invece della x di other). In questo caso l'output di `ls -l' per detti bit viene dato in maiuscolo se la modalità nascosta per i bit di esecuzione non è impostata. Impostare _set user ID_ su un file eseguibile permette all'utente di eseguirlo con l'owner ID del file (per esempio _root_). Allo stesso modo, impostare _set group ID_ su un eseguibile permette all'utente di eseguirlo con il group ID del file (per esempio _root_). Poichè queste impostazioni possono causare seri problemi di sicurezza, abilitarle richide estrema cautela. Impostare _set group ID_ su una directory abilita lo schema di creazione dei file stile BSD, dove tutti i file creati nella directory appartengono al _gruppo_ della directory. Impostare lo _sticky bit_ in una directory previene la rimozione di un file in detta directory da un utente che non sia il proprietario del file. Per rendere sicuro il contenuto di un file in una directory scrivibile da tutti, come ad esempio `/tmp' o in diretory scrivibile dal gruppo, non bisogna solamente disabilitare i permessi in _scrittura_ del file, ma anche impostare lo _sticky bit_ nella directory. Altrimenti il file potrebbe essere rimosso e sostituito da un nuovo fiole con lo stesso nome, da qualsiasi utente con accesso in scrittura alla directory. Ecco alcuni esempi interessanti sui permessi. $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd crw-rw---- 1 root dip 108, 0 Jan 18 13:32 /dev/ppp -rw-r--r-- 1 root root 1051 Jan 26 08:29 /etc/passwd -rw-r----- 1 root shadow 746 Jan 26 08:29 /etc/shadow -rwsr-xr-- 1 root dip 234504 Nov 24 03:58 /usr/sbin/pppd $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src drwxrwxrwt 4 root root 4096 Feb 9 16:35 /tmp drwxrwsr-x 10 root staff 4096 Jan 18 13:31 /usr/local drwxrwsr-x 3 root src 4096 Jan 19 08:36 /usr/src drwxrwsr-x 2 root mail 4096 Feb 2 22:19 /var/mail drwxrwxrwt 3 root root 4096 Jan 25 02:48 /var/tmp Esiste un metodo numerico alternativo di descrivere i permessi per i comandi chmod(1). Questo metodo usa numeri da 3 a 4 cifre in ottale (base 8). Ogni cifra corrisponde a: * 1a cifra facoltativa: la somma di _set user ID_ (=4), _set group ID_ (=2), e _sticky bit_ (=1) * 2a cifra: la somma dei permessi _lettura_ (=4), _scrittura_ (=2), e _esecuzione_ (=1) per l' _utente_ * 3a cifra: idem per il _gruppo_ * 4a cifra: idem per _other_ Suona complicato, ma è in effetti molto semplice. Se guardate alle prime (2-10) colonne dell'output del comando `ls -l' e le leggete come una rappresentazione binaria (base 2) dei permessi dei file ("-" essendo "0" e "rwx" essendo "1"), il valore numerico diventa una rappresentazione in ottale dei permessi. [1] Provate ad esempio: $ touch $ chmod u=rw,go=r $ chmod 644 $ ls -l -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 -rw-r--r-- 1 penguin penguin 0 Nov 3 23:30 La maschera di default dei permessi può essere impostata tramite il comando di shell `umask'. Vedere builtins(7). [1] Oviamente questo metodo funziona solo per i numeri a 3 cifre. 4.5.4. Timestamp ---------------- Per un file GNU/Linux, ci sono tre tipi di timestamp: * _mtime_: orario di modifica (`ls -l'), * _ctime_: orario di cambio di stato (`ls -lc'), e * _atime_: orario dell'ultimo accesso (`ls -lu'). Notate che _ctime_ non è l'orario di creazione del file. * La sovrascrittura di un file cambierà tutti e tre, _mtime_, _ctime_, e _atime_. * Il cambio di permessi od utente modificherà _ctime_ e _atime_. * La lettura di un file ne cambierà _atime_. Notate che anche una semplice lettura del file in un sistema Debian causerà una normale operazione di scrittura del file, per aggiornare le informazioni relative a _atime_ nell' _inode_. Montare un filesystem con l'opzione `noatime' farà si che il sistemi salti questa operazione, risultando un tempo di accesso del file più breve in lettura. Vedere mount(8). Usate il comando touch(1) per cambiare i timestamp dei file esistenti. 4.5.5. Collegamenti ------------------- Due sono i metodi per associare un dato file con un diverso nome . * un _collegamento_ è un nome duplicato di un file esistente (`ln '), * un _collegamento simbolico_, o "symlink", è un file speciale che punta ad un altro file (`ln -s '). Vedere il seguente esempio per i cambiamenti nella conta dei collegamenti e le sottili differenze nel risultato del comando `rm'. $ echo "Contenuto Originale" > $ ls -l -rw-r--r-- 1 osamu osamu 4 Feb 9 22:26 $ ln # hard link $ ln -s # symlink $ ls -l -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 lrwxrwxrwx 1 osamu osamu 3 Feb 9 22:28 -> -rw-r--r-- 2 osamu osamu 4 Feb 9 22:26 $ rm $ echo "Nuovo Contenuto" > $ cat Contenuto Originale $ cat Nuovo Contenuto Il collegamento simbolico ha sempre i permessi nominali di accesso impostati su "rwxrwxrwx", come mostrato nell'esempio precedente, con i permessi effettivi dettati dai permessi del file a cui punta. La directory `.' è collegata alla directory nella quale appare, per cui la conta dei collegamenti di qualsiasi nuova directory parte da 2. La directory `..' e collegata alla directory genitore, per cui la conta dei collegamenti della directory aumenta all'aggiungere nuove sottodirectory. 4.5.6. Named pipe (FIFO) ------------------------ Una named pipe è un file che agisce come una pipe. Inserite qualcosa in un file da un lato ed esce dall'altro. Da qui il nome FIFO, o First-In-First-Out: la prima cosa che infilate nella pipe è anche la prima ad uscirne. Se avviate un processo di scrittura verso una named pipe, il processo non terminerà finchè l'informazione che viene scritta non è letta dalla pipe. Se avviate un processo di lettura dalla pipe, il processo aspetterà prima di terminare che non ci sia altro da leggere. Le dimesioni della pipe sono sempre zero --- non memorizza dati, si limita ad unire due processi, come il carattere `|' della shell. Comunque, poichè questa pipe ha un nome, i due processi non devono necessariamente stare sulla riga di comando, nè essere lanciati dallo stesso utente. Provate facendo quanto segue: $ cd; mkfifo miapipe $ echo "hello" >miapipe & # gira nello sfondo [1] <5952> $ ls -l miapipe prw-r--r-- 1 penguin penguin 0 2003-11-06 23:18 miapipe $ cat miapipe hello [1]+ Done echo hello >miapipe $ ls miapipe prw-r--r-- 1 penguin penguin 0 2003-11-06 23:20 miapipe $ rm miapipe 4.5.7. Socket ------------- Il socket è simile alla named pipe (FIFO) è permette ai processi di scambiarsi informazioni. per il socket questi processi non devono girare allo stesso tempo, nè devono essere figli dello stesso genitore. Questo è il traguardo di qualsiasi comunicazione interprocesso. Lo scambio di informazioni può avvenire attraverso una rete, fra host differenti. 4.5.8. Device ------------- Un device fa riferimento ad un dispositivo fisico o virtuale presente nel sistema, come il disco rigido, la scheda grafica, lo schermo o la tastiera. Esempio di dispositivo virtuale è la console, rappresentata da `/dev/console'. Esistono due tipi di device: * _character device_ * Vi può accedere un carattere alla volta, cioè la più piccola unità di dati che vi può essere scritta è un carattere (byte). * _block device_ * Qui vi si può accedere in unità maggiori, chiamte blocchi, che contengono un numero di caratteri. Il disco rigido è un block device. Potete leggere e scrivere sui device, anche se il file potrebbe contenere dati binari, incomprensibili ai comuni mortali. Scrivere direttamente i dati su questi file può essere utile per diagnosticare problemi nelle connessioni hardware. Per esempio, inviare un file di testo al device della stampante `/dev/lp0' oppure inviare i comandi del modem alla porta seriale appropriata `/dev/ttyS0'. Attenzione che, se eseguite imprudentemente, queste manovre possono portare a disastri notevoli. 4.5.8.1. `/dev/null' ecc. ------------------------- `/dev/null' è un device speciale che elimina qualsiasi cosa gli si vada a scrivere. Se c'è qualcosa che non volete, gettatela in `/dev/null'. E' fondamentalmente un pozzo senza fondo. Se andate a leggere `/dev/null', ottenete immediatamente un carattere end-of-file (EOF). `/dev/zero' is simile, solo che se andate a leggerlo, ottenete il carattere `\0' (diverso dal numero zero in ASCII). Vedere Sezione 8.6.34, `File fantoccio'. 4.5.8.2. Numeri dei nodi dei device ----------------------------------- I numeri dei nodi dei device lanciando `ls' come: $ ls -l /dev/hda /dev/ttyS0 /dev/zero brw-rw---- 1 root disk 3, 0 Mar 14 2002 /dev/hda crw-rw---- 1 root dialout 4, 64 Nov 15 09:51 /dev/ttyS0 crw-rw-rw- 1 root root 1, 5 Aug 31 03:03 /dev/zero Qui, * `/dev/hda' ha come numero primario 3 e come secondario 0. E' accessibile in lettura/scrittura dall'utente che appartiene al gruppo `disk', * `/dev/ttyS0' ha come numero primario 4 e come secondario 64. E' accessibile in lettura/scrittura dall'utente che appartiene al gruppo `dialout' group e * `/dev/zero' ha come numero primario 1, secondario 5. E' accessibile in lettura/scrittura da chiunque. Nei vecchi sistemi il processo di installazione crea i nodi dei device tramite il comando `/sbin/MAKEDEV' command. Vedere MAKEDEV(8). Nei sistemi più recenti il filesystem sotto `/dev' viene popolato automaticamente in maniera analoga al filesystem `/proc'. 4.5.9. Il filesystem `/proc' ---------------------------- Il filesystem `/proc' è uno pseudo-filesystem e contiene informazioni sul sistema e sui processi in corso. La gente in genere si spaventa quando nota un file in particolare - `/proc/kcore' - che è generalmente enorme. Esso è (più o meno) una copia della memoria del vostro computer. Viene utilizzato per il debug del kernel. In pratica non esiste da nessuna parte, per cui non preoccupatevi delle sue dimensioni. Vedere Sezione 7.3, `Mettere a punto il kernel tramite il filesystem proc' and proc(5). 4.6. Il sistema X Window ------------------------ Vedere Sezione 9.4, `X'. 4.6.1. Lanciare il sistema X Window ----------------------------------- X Window può essere lanciato automaticamente con `xdm'-come demone per il login grafico, o digitando quanto segue da console. $ exec startx 4.6.2. Il menu di X Window -------------------------- Poichè l'ambiente di X è in grado di ospitare molti window manager, le loro interfacce variano molto. Ricordate che cliccando col pulsante destro del mouse sulla root window evidenzierà il menu delle scelte. Questo è sempre disponibile. * Per avviare la shell, lanciate Xterm dal menu: * "XShells" --> "XTerm". * Per scorrere graficamente le pagine web, lanciate Mozilla dal menu: * "Apps" --> "Net" --> "Mozilla Navigator". * Per visualizzare graficamente file in PDF, lanciate xpdf del menu: * "Apps" --> "Viewers" --> "Xpdf". Se vi manca la voce nel menu, installate i pacchetti corrispondenti. Vedere Sezione 6.2, `Iniziare la gestione dei pacchetti Debian'. 4.6.3. Sequenze di tasti per X Window ------------------------------------- Alcune combinazioni da ricordare quandi si è in X: * Ctrl-Alt-F1 fino a F6: Passa ad altri pseudo-terminali (da X-window, DOSEMU, ecc.) * Alt-F7: Torna ad X * Ctrl-Alt-meno: Modifica la risoluzione dello schermo in X (il meno si riferisce al tastierono numerico) * Ctrl-Alt-più: Modifica la risoluzione in X dalla parte opposta (il più si riferisce al tastierino numerico) * Ctrl-Alt-Backspace: Termina il server X * Alt-X, Alt-C, Alt-V: Le normali combinazioni Windows/Mac per Taglia, Copia, Incolla con Ctrl- in alcuni programmi tipo Netscape Composer vengono sostituite da Alt-. 4.7. Studi ulteriori -------------------- In questo momento, vi raccomando la lettura delle guide fondamentali da The Linux Documentation Project: Guides (http://www.tldp.org/guides.html): * "The Linux System Administrators' Guide", * Copre tutti gli aspetti del mantenimento di un sistema in funzione, gestione degli account utente, backup, configurazione del sistema. * pacchetto: `sysadmin-guide' * file: /usr/share/doc/sysadmin-guide/html/index.html * web: http://www.tldp.org/LDP/sag/index.html * "The Linux Network Administrator's Guide, Second Edition", * Riferimento per l'amministrazione di rete in ambiente Linux. * pacchetto: `(not available)' * file: (not applicable) * web: http://www.tldp.org/LDP/nag2/index.html * _Linux: Rute User's Tutorial and Exposition_ * Un bel libro e versione on line che copre l'amministrazione dei sistemi GNU/Linux. * Di Paul Sheer * Pubblicato da Prentice Hall * Pacchetto: `rutebook' (da `non-free') * File: `/usr/share/doc/rutebook/' Vedere Capitolo 15, `Supporto per Debian' per ulteriori fonti di apprendimento. ------------------------------------------------------------------------------- 5. Aggiornare una distribuzione a `stable', `testing' o `unstable' ------------------------------------------------------------------ Le note ufficiali di rilascio per l'aggiornamento si trovano presso http://www.debian.org/releases/stable/releasenotes e http://www.debian.org/releases/testing/releasenotes (lavoro in corso). L'aggiornamento alle distribuzioni `stable', `testing' o `unstable' può richiedere vari passaggi, nel seguente ordine: * Aggiornamento a Woody (se il sistema è antecedente ad esso) * Aggiornamenti a `stable' * Aggiornamenti a `testing' * Aggiornamenti a `unstable' Debian non supporta gli aggiornamenti che saltino i rilasci intermedi. 5.1. Aggiornare da Potato a Woody --------------------------------- Questa procedura separatamente perchè l'APT di Potato non aveva tutte le funzioni descritte nella pagina di manuale attuale. apt_preferences(5). Dopo aver inserito i puntatori per Woody in `/etc/apt/sources.list', aggiornate APT ed i pacchetti fondamentali alle versioni di Woody facendo quanto segue. # apt-get update # apt-get install libc6 perl libdb2 debconf # apt-get install apt apt-utils dselect dpkg Poi aggiornate il resto del sistema a Woody. # apt-get upgrade # apt-get dist-upgrade 5.2. Preparazione per l'aggiornamento ------------------------------------- Potete eseguire l'aggiornamento da una distribuzione all'altra prendendo i pacchetti dalla rete. Ciò può essere fatto come segue. Procuratevi una lista pulita di depositi per `stable': # cd /etc/apt # cp -f sources.list sources.list.old # :>sources.list # apt-setup noprobe Se volete aggiornare a `testing', allora aggiungete i riferimenti a `testing' a questa nuova lista. Se volete farlo a `unstable', aggiungete i riferimenti ad `unstable'. # cd /etc/apt # grep -e "^deb " sources.list >srcs # :>sources.list # cp -f srcs sources.list # sed -e "s/stable/testing/" srcs >>sources.list # sed -e "s/stable/unstable/" srcs >>sources.list # apt-get update # apt-get install apt apt-utils Vedere Sezione 6.2, `Iniziare la gestione dei pacchetti Debian' per l'arte della messa a punto di `/etc/apt/sources.list' e `/etc/apt/preferences'. 5.3. Aggiornamento ------------------ Dopo aver impostato appropriatamente `/etc/apt/sources.list' e `/etc/apt/preferences' come descritto sopra, potete iniziare l'aggiornamento. Notate che il tracciamento della distribuzione `testing' di Debian può avere come effetto colaterale il ritardo nell'installazione dei pacchetti contenenti correzioni per la sicurezza, poicè detti pacchetti vengono caricati su `unstable' e solo dopo un lasso di tempo migrano in `testing'. Vedere Capitolo 6, `Gestione dei pacchetti in Debian' per le basi e Sezione 6.3.2, `Aggiornamento con APT: risoluzione dei problemi' se incontrate problemi. 5.3.1. Usare `dselect' ---------------------- Se un sistema ha molti pacchetti, inclusi i pacchetti `-dev', ecc., il metodo seguente tramite `dselect' è il metodo di scelta per un più raffinato controllo sui pacchetti. # dselect update # da fare sempre prima di un aggiornamento # dselect select # sceglie i pacchetti addizionali Quando `dselect' parte, tutti i pacchetti correnti verranno selezionati. `dselect' potrà mostrarvi pacchetti addizionali basati su `Dipende', `Suggerisce', e `Raccomanda'. Se non volete altri pacchetti, basta pigiare `Q' per uscire di nuovo da `dselect'. # dselect install Dovrete rispondere ad alcune domande sulla configurazione dei pacchetti durante questa perte del processo, per cui tenete con voi i vostri appunti e prendetevi del tempo per questa parte. Vedere Sezione 6.2.4, ``dselect''. Usate `dselect'. _Funziona sempre :)_ 5.3.2. Usare `apt-get' ---------------------- # apt-get update # apt-get -t stable upgrade # apt-get -t stable dist-upgrade # apt-get -t testing upgrade # apt-get -t testing dist-upgrade # apt-get -t unstable upgrade # apt-get -t unstable dist-upgrade Una volta che il vostro sistema ha raggiunto Sarge, è consigliabile usare `aptitude' al posto di `apt-get'. (`aptitude' accetta molte delle opzioni che accetta anche `apt-get', comprese quelle sopra.) Per aggiornare e seguire le impostazioni date da `dselect': # apt-get dselect-upgrade Vedere Sezione 2.2.8, `Dipendenze dei pacchetti'. ------------------------------------------------------------------------------- 6. Gestione dei pacchetti in Debian ----------------------------------- `aptitude' è attualmente l'interfaccia preferita per APT, l'Advanced Package Tool. Ricorda quali pacchetti avete deliberatamente installato e quali in base alle dipendenze; questi ultimi vengono disinstallati automaticamente da `aptitude' queo non sono più necessari ai pacchetti installati deliberatamente. Ha funzionalità avanzate di filtro sui pacchetti, ma possono essere difficili da configurare. `synaptic' è attualmente l'interfaccia grafica Gtk preferita per APT. Le sue funzionalità di filtro sono più facili da usare rispetto ad `aptitude'. Ha anche il supporto sperimentale per le Debian Package Tags (http://debtags.alioth.debian.org/). Per ridurre il carico sui depositi Debian e per velocizzare i vostri download, dovreste prendere i pacchetti dai mirror Debian. Se dovete installare lo stesso pacchetto su più macchine sulla vostra rete locale, impostate un proxy HTTP locale useo `squid' per i pacchetti scaricati con APT. Impostate, se necessario, la variabile d'ambiente `http_proxy', oppure il valore di `http' in `/etc/apt/apt.conf'. Sebbene l'a funzionalità di pinning di APT, descritta in apt_preferences(5) sia potente, i suoi effetti possono essere difficili da comprendere e gestire. Consideratela una Funzione Avanzata. L'uso del metodo descritto in Sezione 8.6.35, ``chroot'' è preferibile per assicurare al contempo stabilità del sistema ed accesso alle versioni più recenti del software. Questo capitolo fa riferimento ad un sistema successivo a Woody Alcune funzionalità potrebbero richiedere un sistema Sarge o successivo. 6.1. Introduzione ----------------- Se la lettura di tutta la documentazione per gli sviluppatori è troppo per voi, leggete questo capitolo per primo ed iniziate a gustare in pieno il potere della Debian con le distribuzioni `testing'/`unstable' :-) 6.1.1. Strumenti principali di gestione dei pacchetti ----------------------------------------------------- dpkg -- Installatore dei pacchetti Debian apt-get -- Interfaccia a riga di comeo per APT aptitude -- Interfaccia avanzata testo e riga di comeo per APT synaptic -- Interfaccia grafica Gtk di APT dselect -- installatore Debian dei pacchetti tasksel -- Installatore dei task Questi strumenti non non sono tutti alternativi fra loro. Per esempio, `dselect' usa sia APT che `dpkg'. APT usa `/var/lib/apt/lists/*' per tenere traccia dei pacchetti disponibili, mentre `dpkg' usa `/var/lib/dpkg/available'. Se avete installato dei pacchetti useo direttamente `aptitude' od un'altra interfaccia ad APT, e volete usare `dselect' per installare dei pacchetti, assicuratevi di aggiornare il file `/var/lib/dpkg/available' tramite la voce `[A]ggiorna' del menu di `dselect' (o con il comeo "`dselect update'"). `apt-get' installa automaticamente tutti i pacchetti dai quali un pacchetto richiesto Dipende. Non installa i pacchetti che Raccomea o Suggerisce. `aptitude', al contrario, può essere configurato per installare i pacchetti che un pacchetto richiesto Raccomea o Suggerisce. `dselect' presenta all'utente una lista di pacchetti che un pacchetto richiesto Raccomea o Suggerisce e permette una loro selezione caso per caso. Vedere Sezione 2.2.8, `Dipendenze dei pacchetti'. 6.1.2. Strumenti utili ---------------------- dpkg-reconfigure - riconfigura un pacchetto già installato (se utilizza debconf) dpkg-source - gestisce il pacchetto con il file sorgente dpkg-buildpackage - automatizza la creazione di un pacchetto apt-cache - controlla l'archivio dei pacchetti nella cache locale 6.2. Iniziare la gestione dei pacchetti Debian ---------------------------------------------- 6.2.1. Impostare APT -------------------- Impostate `sources.list' come descritto in Sezione 5.2, `Preparazione per l'aggiornamento'. [1] Fate riferimento anche a Capitolo 3, `Suggerimenti per l'installazione di un sistema Debian', Capitolo 5, `Aggiornare una distribuzione a `stable', `testing' o `unstable'' e Sezione 11.2, `Editor di salvataggio'. [1] Se state traccieo `testing' o `unstable', potete rimuovere i riferimenti a `stable' da `/etc/apt/sources.list' e da `/etc/apt/preferences'. Ciò perchè `testing' origina come una copia di `stable'. 6.2.2. Installare i task ------------------------ E' possibile installare un gruppo di pacchetti tipicamente richiesto per un determinato utilizzo del sistema Debian. Questo gruppo di pacchetti è chiamato "task". Il modo più semplice per installare i task al momento dell'installazione iniziale è useo `tasksel'. Notate che dovete eseguire dselect update prima di utilizzarlo. Anche `aptitude' può installare i task ed è lo strumento racomeato per questo scopo. Permette di deselzionare singoli pacchetti all'interno dei task prima di procedere all'installazione. 6.2.3. `aptitude' ----------------- `aptitude' è un nuovo installatore di pacchetti basato su menu, simile a `dselect', ma costruito da zero sopra APT. Può essere utilizzato in alternativa ad `apt-get' per gran parte dei comandi. Vedere aptitude(1) e `/usr/share/doc/aptitude/README'. Una volta cominciato ad usare `aptitude', è meglio continuare ad usarlo invece che come metodo alternativo di installazione dei pacchetti; altrimenti perdete il vantaggio di avere `aptitude' che mantiene una traccia di tutti i pacchetti installati deliberatamente. `aptitude' in modalità a tutto schermo accetta comandi sotto forma singole lettere, di norma in minuscolo. Tasti degni di nota sono: Tasto Azione F10 Menu ? Aiuto per i comandi u Aggiorna le informazioni relative all'archivio dei pacchetti + Marca il pacchetto nuovo da installare o da aggiornare - Marca il pacchetto da rimuovere (mantiene la configurazione) _ Marca il pacchetto da eliminare (rimuove la configurazione) = Pone il pacchetto in attesa U Marca tutti i pacchetti aggiornabili da aggiornare g Scarica ed installa i pacchetti selezionati q Esce dalla schermata corrente e salva le modifiche x Esce dalla schermata corrente e non salva le modifiche Enter Mostra le informazioni su un pacchetto C Mostra il changelog di un pacchetto l Cambia i limiti per il pacchetto mostrato / Cerca la prima corrispondenza \ Ripete l'ultima ricerca Come `apt-get', `aptitude' installa i pacchetti da cui un pacchetto selezionato Dipende. `aptitude' offre anche l'opzione di prendere tutti i pacchetti che un dato pacchetto Raccomea o Suggerisce. Potete modificare questo comportamento tramite `F10 -> Options -> Dependency heling' nel suo menu. Altri vantaggi di `aptitude' sono: * `aptitude' offre l'accesso a tutte le versioni di un pacchetto. * `aptitude' registra le azioni in `/var/log/aptitude'. * `aptitude' facilita il tenere traccia di software obsoleto elenceolo in "Obsolete e Locally Created Packages". * `aptitude' include un sistema abbastanza potente per la ricerca di pacchetti particolari e per limitare i pacchetti mostrati. Gli utenti familiari con `mutt' ci si abitueranno rapidamente, poichè mutt è stata l'ispirazione per la sintassi. Vedere "SEARCHING, LIMITING, e EXPRESSIONS" in `/usr/share/doc/aptitude/README'. * `aptitude' nella modalità a tutto schermo ha la funzione di `su' incastonata e può essere fatto girare da normale utente finchè non si ha realmente bisogno dei privilegi amministrativi. 6.2.4. `dselect' ---------------- Nelle versioni stabili da Potato in su, `dselect' era il principale strumento di gestione dei pacchetti. Per Sarge, considerate invece di usare `aptitude'. Una volta lanciato, `dselect' seleziona automaticamente tutti i pacchetti "Essenziali", "Importanti", e "Steard". `dselect' presenta un'interfaccia utente un pò strana. Comunque sia, sono in tanti ad essersi abituati. Quattro sono i comandi ambigui (Maiuscolo significa MAIUSCOLO!): Tasto Azione Q Esci. Conferma la selezione corrente ed esce comunque (prevale sulle dipendenze) R Torna indietro. Non intendevo farlo. D Dannazione! Non mi interessa cosa ne pensa dselect. Fallo e basta! U Riporta tutto allo stato sUggerito Useo `D' e `Q', potete scegliere delle selezioni che presentano conflitti di dipendenze a vostro rischio e pericolo. Usate questi comand con cura. Aggiungete una linea con l'opzione "expert" in `/etc/dpkg/dselect.cfg' per ridurne il "rumore". Se la vostra macchine è lenta nell'esecuzione di `dselect', prendete in considerazione di eseguire `dselect' su un'altra macchina (più veloce) per trovare i pacchetti che vi servono, poi usate `apt-get install' sulla macchina lenta per installarli. 6.2.5. Tracciare una distribuzione con APT ------------------------------------------ Per tracciare la distribuzione `testing' man mano che cambia, modificate il vostro `/etc/apt/preferences' in maniera che somigli a quanto segue: Package: * Pin: release a=testing Pin-Priority: 800 Package: * Pin: release a=stable Pin-Priority: 600 Notate che il tracciamento della distribuzione `testing' può avere come effetto il ritardo nell'installazione degli aggiornamenti per la sicurezza. Tali pacchetti vengono prima caricati in `unstable' e poi migrano in `testing' solo dopo un lasso di tempo. Vedere apt_preferences(5) per esempi più complessi che permettono, per esempio, di tracciare `testing' mentre si installano pacchetti selezionati da `unstable'. Esempi di che bloccano alcuni pacchetti a determinate versioni, mentre si tracciano altri pacchetti via via che vengono rilasciati, sono disponibili nella sottodirectory degli esempi (http://www.debian.org/doc/manuals/debian-reference/examples/) come `preferences.testing' e `preferences.unstable'. Se mischiate le distribuzioni, p.es. `testing' con `stable' o `unstable' con `stable', vi troverete infine a prendere pacchetti fondamentali, come `libc6' da `testing' o `unstable' e non c'è garanzia che essi non conterranno bachi. Siete stati avvertiti. Un altro esempio, `preferences.stable', forza tutti i pacchetti ad essere degradati a `stable'. Il declassamento di un _pacchetto_ da una versione più recente ad una meno non è ufficialmente supportato in Debian. Tuttavia, potreste aver bisogno di declassare un dato pacchetto per reinstallarne una versione che sia funzionante, queo quella più nuova non lo è. Queste versione precedenti le trovate localmente in `/var/cache/apt/archives/' o remotamente in http://snapshot.debian.net/. Vedere anche Sezione 6.3.3, `Salvataggio mediante `dpkg''. Anche il declassamento di una _distribuzione_ ad una meno recente non è ufficialmente supportato e quasi sicuramente causerà problemi. Tuttavia, se siete disperati, può valer la pena tentarlo come ultima risorsa. 6.2.6. I comandi di `aptitude', `apt-get' e `apt-cache' ------------------------------------------------------- Mentre tracciate `testing', come descritto sopra, potete gestire il sistema con i comandi seguenti: * `aptitude upgrade' (o `apt-get upgrade' o `aptitude dist-upgrade' o `apt-get dist-upgrade') Tracciano la distribuzione `testing' --- aggiornano tutti i pacchetti del sistema dopo aver installato le versioni dei pacchetti da cui Dipende, dalla distribuzione `testing'. [1] * `apt-get dselect-upgrade' Traccia `testing' --- aggiorna tutti i pacchetti in accordo con la selezioni di `dselect'. * `aptitude install /unstable' Installa da `unstable', mentre installa le sue dipendenze da `testing'. * `aptitude install -t unstable ' Installa da `unstable', mentre installa le sue dipendenze anche da `unstable' impostando la Pin-Priority di `unstable' a 990. * `apt-cache policy ' Controlla lo stato dei pacchetti . * `aptitude show | less' (o `apt-cache show | less') Controlla le informazioni per i pacchetti . * `aptitude install ' Installa la data versione <2.2.4-1> del pacchetto . * `aptitude install ' Installa il pacchetto e rimuove * `aptitude remove ' Rimuove il pacchetto ma non i suoi file di configurazione. * `aptitude purge ' Rimuove insieme ai suoi file di configurazione. Nell'esempio sopra, dando ad `apt-get' l'opzione `-u' gli fa scrivere una lista di tutti i pacchetti da aggiornare e aspettare l'utente prima di intraprendere le azioni. Quanto segue gli fa sempre `apt-get' fare così: $ cat >> /etc/apt/apt.conf << . // Mostra sempre i pacchetti che devono essere aggiornati (-u) APT::Get::Show-Upgraded "true"; . Utilizzare l'opzione `--no-act' per simulare le azioni senza realmente installare, rimuovere, ecc. alcun pacchetto. [1] La differenza fra `upgrade' e `dist-upgrade' è evidente solo queo nuove versioni dei pacchetti hanno relazioni di dipendenza diverse rispetto alle vecchie versioni. Vedere apt-get(8) per i dettagli. `aptitude upgrade' e `aptitude dist-upgrade' lanciano `aptitude' in modalità riga di comando. Potete passare a tutto schermo premendo il tasto `e'. 6.3. Comandi di sopravvivenza Debian ------------------------------------ Conoscendoli, potrete vivere una vita di _eterni_ "upgrade" :-) 6.3.1. Controllo dei bachi in Debian e ricerca di aiuto ------------------------------------------------------- Se avete dei problemi con un pacchetto in particolare, controllate prima questi siti e poi, eventualmente, cercate aiuto o segnalate un baco. (`lynx', `links' e `w3m' funzionano tutti bene): $ lynx http://bugs.debian.org/ $ lynx http://bugs.debian.org/ # se conoscete il nome del pacchetto $ lynx http://bugs.debian.org/ # se conoscete il numero del baco segnalato Cercate su Google (www.google.com) includendo nelle frasi da ricercare "site:debian.org". Se avete ancora dubbi, leggete i manuali. Impostate `CDPATH' come segue: export CDPATH=.:/usr/local:/usr/share/doc e digitate $ cd $ pager README.Debian # se esiste $ mc Maggiori fonti di supporto sono descritte in Capitolo 15, `Supporto per Debian'. 6.3.2. Aggiornamento con APT: risoluzione dei problemi ------------------------------------------------------ Problemi di dipendenze possono accadere quando si esegue l'aggiornamento in `unstable' o `testing', come descritto in Sezione 5.3, `Aggiornamento'. Molte volte ciò accade poichè un pacchetto da aggiornare presenta delle nuove dipendenze che non vengono soddisfatte. Problemi del genere vengono risolti usando # apt-get dist-upgrade Se questo non funziona, allora ripetete uno dei seguenti comandi finchè il problema non si risolve da sè: # aptitude -f upgrade # continua l'aggiornamento nonostante l'errore ... oppure # aptitude -f dist-upgrade # continua il dist-upgrade nonostante l'errore Alcuni script di aggiornamento realmente difettosi possono causare problemi ricorrenti. Per risolvere tali situazioni è in genere buona cosa ispezionare gli script `/var/lib/dpkg/info/packagename.<{post-,pre-}{inst,rm}>' del pacchetto responsabile e poi eseguire: # dpkg --configure -a # configura tutti i pacchetti installati parzialmente Se uno script lamenta la mancanza di un file di configurazione, date un'occhiata in `/etc' per il file di configurazione corrispondente. Se ne esiste uno con l'estensione `.dpkg-new' (o qualcosa di simile), `mv' per rimuovere il suffisso. Problemi di dipendenze possono accadere installando i pacchetti in `unstable' o `testing'. Esistono dei metodi per aggirare le dipendenze. # aptitude -f install # ignora le dipendenze difettose Un metodo alternativo consiste nell'utilizzare il pacchetto `equivs'. Vedere `/usr/share/doc/equivs/README.Debian' e Sezione 6.5.2, `Il pacchetto `equivs''. 6.3.3. Salvataggio mediante `dpkg' ---------------------------------- Se siete in un vicolo cieco con APT, potete scaricare i pacchetti dai mirror Debian ed installarli con `dpkg'. Se non avete accesso alla rete, potete cercare le copie dei pacchetti in `/var/cache/apt/archives/'. # dpkg -i fetchmail_6.2.5-4_i386.deb Se l'installazione di un pacchetto fallisce a causa di violazioni delle dipendenze e avete realmente bisogno di quel pacchetto, potete scavalcare i controlli sulle dipedenze usando le opzioni di `dpkg' `--ignore-depends', `--force-depends' ed altre ancora. Vedere dpkg(8) per i dettagli. 6.3.4. Recuperare i dati sulla selezione dei pacchetti ------------------------------------------------------ Se `/var/lib/dpkg/status' diventa illeggibile per una qualsivoglia ragione, il sistema Debian perde i dati sulla selezione dei pacchetti, soffrendone in maniera severa. Cercate il vecchio file `/var/lib/dpkg/status-old', oppure `/var/backups/dpkg.status.*'. Tenere `/var/backups/' in una partizione separata può essere una buona idea, dato che questa directory contiene molti dei dati fondamentali del sistema. Se il vecchio file `/var/lib/dpkg/status' non è disponibile, potete ancora recuperare le informazioni dalle directory in `/usr/share/doc/'. # ls /usr/share/doc | \ grep -v [A-Z] | \ grep -v '^texmf$' | \ grep -v '^debian$' | \ awk '{print $1 " install"}' | \ dpkg --set-selections # dselect --expert # reinstalla il sistema, deseleziona se necessario 6.3.5. Recupero del sistema dopo danneggiamento di `/var' --------------------------------------------------------- Dato che la directory `/var' contiene dati che vengono regolarmente aggiornati, tipo la posta, è più suscettibile di corruzione di, p. es., `/usr/' Metterla in una partizione separata limita i rischi. Se accade l'irreparabile, bisogna ricostruirla per salvare il sistema Debian. Procuratevi una directory `/var' con il contenuto ridotto all'osso, da un sistema Debian minimale e funzionante, basato su una versione uguale o più vecchia, per esempio `var.tar.gz (http://people.debian.org/~osamu/pub/)' e piazzatela nella root directory del sistema danneggiato. Poi, # cd / # mv var var-old # se vi è rimasto qualcosa di utile # tar xvzf var.tar.gz # usate il file preso da Woody # aptitude # o dselect Ciò dovrebbe restituirvi un sistema funzionante. Potete velocizzare la procedura di recupero delle selezioni dei pacchetti usando la tecnica descritta in Sezione 6.3.4, `Recuperare i dati sulla selezione dei pacchetti'. ([FIXME]: This procedure needs more experiments to verify.) 6.3.6. Installare un pacchetto su un sistema non bootabile ---------------------------------------------------------- Fate il boot in Linux mediante un floppy o CD di salvataggio Debian, o tramite una partizione alternativa se avete un sistema con multiboot in Linux. Vedere Sezione 8.1, `Avviare il sistema'. Montate il sistema non bootabile su `/target' ed usate il modo chroot di installazione di `dpkg'. # dpkg --root /target -i Poi configurate il tutto e risolvete i problemi. A proposito, se tutto quello che impedisce il boot è un `lilo' malfunzionante, potete fare il boot con un disco di salvataggio Debian standard. Al prompt del boot, ammettendo che la partizione root della vostra installazione è su `/dev/hda12' e volete un runlevel 3, digitate: boot: rescue root=/dev/ 3 A questo punto avrete accesso ad un sistema pressochè perfettamente funzionante con il kernel su dischetto. (Potranno esserci inconvenienti minori dovuti alla mancanza di moduli o di funzioni particolari del kernel.) 6.3.7. Cosa fare se `dpkg' non funziona --------------------------------------- Un `dpkg' malfunzionante può rendere impossibile l'installazione di qualsiasi file `.deb'. Una procedura come la seguente vi aiuterà ad uscire da questa situazione. (Nella prima riga, potete sostituire "links" con il vostro browser da terminale preferito.) $ links http:///debian/pool/main/d/dpkg/ ... scarica un valido dpkg__.deb $ su password: ***** $ ar x dpkg__.deb # mv data.tar.gz /data.tar.gz # cd / # tar xzfv data.tar.gz Per `i386', `http://packages.debian.org/dpkg' può anche essere utilizzata come URL. 6.4. Comandi del "paradiso" Debian ---------------------------------- L'_Illuminazione_ ottenuta con questi comandi salverà una persona dall'eterno ciclo del karma dell'inferno degli aggiornamenti, permettendogli di raggiungere il _nirvana_ Debian. :-) 6.4.1. Informazioni su di un file --------------------------------- Per scoprire a quale pacchetto un file appartiene: $ dpkg {-S|--search} modello # trova i modelli nei pacchetti installati $ wget http://ftp.us.debian.org/debian/dists// $ zgrep -e pattern # trova l'elenco dei file con la stessa radice (o il file) nell'archivio Debian Potete utilizzare anche dei comandi specifici per i pacchetti: # aptitude install dlocate $ dlocate # alternativa rapida a dpkg -L e dpkg -S ... # aptitude install auto-apt # strumento per l'installazione a richiesta dei pacchetti # auto-apt update # crea un database per auto-apt $ auto-apt search # effettua una ricerca completa nell'archivio pacchetti 6.4.2. Informazioni su di un pacchetto -------------------------------------- Cerca le informazioni negli archivi dei pacchetti e le visualizza. Accertatevi che APT sia indirizzato verso l'archivio(i) appropriato(i) modificando `/etc/apt/sources.list'. Se volete vedere come si comportano i pacchetti in `testing'/`unstable' rispetto a quelli correntemente installati utilizzate `apt-cache policy'--- un comando molto utile. # apt-get check # aggiorna la cache e controlla le dipendenze $ apt-cache search # cerca un pacchetto a partire dalla descrizione $ apt-cache policy # informazioni su priorità e distribuzione di un pacchetto $ apt-cache show -a # mostra la descrizione di un pacchetto per ogni distribuzione $ apt-cache showsrc # mostra la descrizione del pacchetto sorgente corrispondente $ apt-cache showpkg # Informazioni per il debug # dpkg --audit|-C # cerca i pacchetti parzialmente installati $ dpkg {-s|--status} ... # descrizione del pacchetto installato $ dpkg -l ... # stato del pacchetto installato (1 linea) $ dpkg -L ... # elenca i file installati per un dato pacchetto `apt-cache showsrc' non è documentato al momento del rilascio di Woody, ma funziona :) E' sempre possibile trovare informazioni sui pacchetti in (Io uso `mc'): /var/lib/apt/lists/* /var/lib/dpkg/available Il confronto dei file seguenti fornisce informazioni su cosa è realmente accaduto nelle ultime sessioni di installazione. /var/lib/dpkg/status /var/backups/dpkg.status* 6.4.3. Installazione automatica con APT --------------------------------------- Per una installazione automatica, senza controllo alcuno, aggiungete la seguente riga a `/etc/apt/apt.conf': Dpkg::Options {"--force-confold";} Questo è l'equivalente di `aptitude -y install '. o `apt-get -q-y install '. Siccome in questo modo si risponde "si" a tutte le domande, usate questo trucco con accortezza. Vedere apt.conf(5) e dpkg(1). Si può configurare qualsiasi pacchetto in un secondo momento seguendo Sezione 6.4.4, `Riconfigurare i pacchetti già installati'. 6.4.4. Riconfigurare i pacchetti già installati ----------------------------------------------- Usate i seguenti comandi per riconfigurare un pacchetto già installato. # dpkg-reconfigure --priority= [...] # dpkg-reconfigure --all # riconfigura tutti i pacchetti # dpkg-reconfigure locales # genera qualsiasi locale extra # dpkg-reconfigure --p= xserver-xfree86 # riconfigura il server X Eseguite questo tramite `debconf' se avete la necessità di cambiarne la configurazione dei messaggi in modo permanente. Alcuni programmi hanno degli script speciali di configurazione. [1] apt-setup - crea /etc/apt/sources.list install-mbr - installa un manager di Master Boot Record tzconfig - imposta il fuso orario locale gpmconfig - imposta il demone per mouse gpm eximconfig - configura Exim (MTA) texconfig - configura teTeX apacheconfig - configura Apache (httpd) cvsconfig - configura CVS sndconfig - configura il sistema audio ... update-alternatives - imposta i comandi predefiniti, p.e. vim per vi update-rc.d - Gstione degli script di inzializzazione del System-V update-menus - Il sistema dei menu Debian ... [1] Alcuni script `*config' stanno scomparendo nelle nuove versioni di Sarge e la funzionalità di configurazione dei pacchetti viene trasferita al sistema `debconf'. 6.4.5. Rimozione e purga dei pacchetti -------------------------------------- Rimuove un pacchetto mantenendone la configurazione: # aptitude remove ... # dpkg --remove ... Rimuove un pacchetto e la sua configurazione: # aptitude purge ... # dpkg --purge ... 6.4.6. Mantenere vecchi pacchetti --------------------------------- Per esempio, per mantenere `libc6' e `libc6-dev' con `dselect' e `aptitude install ' si può procedere come segue: # echo -e "libc6 hold\nlibc6-dev hold" | dpkg --set-selections `aptitude install ' non verrà impedito da quell'"hold". Per mantenere un pacchetto forzandone un declassamento automatico con `aptitude upgrade ' oppure `aptitude dist-upgrade', aggiungete le seguenti linee ad `/etc/apt/preferences': Package: libc6 Pin: release a=stable Pin-Priority: 2000 Qui la voce "`Package:'" non può usare termini tipo "`libc6*'". Se dovete mantenere tutti i pacchetti binari correlati al pacchetto sorgente `glibc' in una versione sincronizzata, dovete elencarli esplicitamente. Il comando seguente mostra i pacchetti tenuti in sospeso (non aggiornati): dpkg --get-selections "*"|grep -e "hold$" 6.4.7. Sistema misto `stable'/`testing'/`unstable' -------------------------------------------------- `apt-show-versions' può elencare le versioni dei pacchetti disponibili per ciascuna distribuzione. $ apt-show-versions | fgrep /testing | wc ... quanti pacchetti avete da testing $ apt-show-versions -u ... elenco di pacchetti aggiornabili $ aptitude install `apt-show-versions -u -b | fgrep /unstable` ... aggiorna tutti i pacchetti da unstable alle loro versioni più recenti 6.4.8. Potare i file della cache -------------------------------- L'installazione dei pacchetti tramite APT lascia i loro file archiviati in `/var/cache/apt/archives' e questi vanno rimossi. # aptitude autoclean # rimuove solo pacchetti inutili # aptitude clean # rimuove tutti i pacchetti nella cache 6.4.9. Salvare/copiare la configurazione del sistema ---------------------------------------------------- Per fare una copia locale dello stato della selezione dei pacchetti: # debconf-get-selections > # dpkg --get-selections "*" > # oppure usare \* `"*"' fa includere anche i nomi dei pacchetti marcati con "elimina". Potete poi trasferire questo file su un altro computer ed installarlo con: # dselect update # debconf-set-selections < # dpkg --set-selections < # apt-get -u dselect-upgrade # dselect install 6.4.10. Portare un pacchetto nel sistema `stable' ------------------------------------------------- Se si eseguono degli aggiornamenti parziali di un sistema `stable', può essere buona cosa ricreare un pacchetto all'interno del proprio ambiente a partire dai sorgenti. In tal modo si eviteranno dei massicci aggiornamenti di pacchetti, dovuti alle loro dipendenze. Per prima cosa, aggiungete le linee seguenti a `/etc/apt/sources.list': deb-src http://http.us.debian.org/debian testing \ main contrib non-free deb-src http://http.us.debian.org/debian unstable \ main contrib non-free Ogni linea che inizia con `deb-src' qui è divisa in due parti per ragioni di stampabilità, ma in `sources.list' dovranno essere ciascuna su un'unica riga. Poi recuperate i sorgenti e costruite un pacchetto locale: $ apt-get update # aggiorna la lista dei pacchetti sorgente $ apt-get source $ dpkg-source -x $ cd ... controlla i pacchetti necessari (Build-depends nel file .dsc) e li installa. Avete bisogno anche del pacchetto "fakeroot". $ dpkg-buildpackage -rfakeroot ...oppure (senza "signature") $ dpkg-buildpackage -rfakeroot -us -uc utilizzate "debsign" in seguito, se necessario ...poi per installare il pacchetto $ su -c "dpkg -i " Normalmente, per soddisfare le dipendenze si ha la necessità di installare alcuni pacchetti con il suffisso "-dev". `debsign' è contenuto nel pacchetto `devscripts'. `auto-apt' può aiutare nel soddisfare queste dipendenze. `fakeroot' evita l'uso non necessario del root account. In Woody, questi problemi di dipendenze possono essere semplificati. Per esempio per compilare solo il sorgente del pacchetto `pine': # apt-get build-dep pine # apt-get source -b pine 6.4.11. Archivio locale dei pacchetti ------------------------------------- Per creare un archivio locale dei pacchetti che sia compatibile con APT e `dselect', bisogna creare `Packages' ed i file dei pacchetti devono essere organizzati in un particolare albero directory. Si può creare un deposito locale `deb' simile ad un archivio ufficiale Debian in questo modo: # aptitude install dpkg-dev # cd # install -d # i pacchetti sono fisicamente localizzati qui # install -d dists//
/binary- # ls -1 | sed 's/_.*$/
/' | uniq > # editor # adjust e
# dpkg-scanpackages / \ > dists//
/binary-/Packages # cat > dists//
/Release << EOF Archive: Version: <3.0> Component:
Origin: Label: Architecture: EOF # echo "deb file:
" \ >> /etc/apt/sources.list In alternativa, un altro metodo per creare un archivio locale `deb', molto alla bruta: # aptitude install dpkg-dev # mkdir # mv # dpkg-scanpackages /dev/null | \ gzip - > /Packages.gz # echo "deb file: ./" >> /etc/apt/sources.list Questi archivi possono essere raggiunti da remoto tramite HTTP od FTP, modificeo le voci in `/etc/apt/sources.list' di conseguenza. 6.4.12. Convertire od installare un pacchetto binario di altra distribuzione ---------------------------------------------------------------------------- `alien' permette la conversione dei pacchetti binari nei formati Red Hat `rpm', Stampede `slp', Slackware `tgz', e Solaris `pkg', in pacchetti Debian `deb'. Se volete usare un pacchetto proveniente da un'altra distribuzione di Linux al posto di quello installato sul vostro sistema, potete utilizzare `alien' per convertirlo nel formato che più preferire. `alien' supporta anche pacchetti LSB. 6.4.13. Comando di installazione automatica ------------------------------------------- `auto-apt' è uno strumento di installazione dei pacchetti a richiesta $ sudo auto-apt update ... aggiorna il database $ auto-apt -x -y run Entering auto-apt mode: /bin/bash Exit the command to leave auto-apt mode. $ less /usr/share/doc/med-bio/copyright # access non-existing file ... Installa il pacchetto che fornisce questo file. ... Installa anche le dipendenze 6.4.14. Verificare i file dei pacchetti installati -------------------------------------------------- `debsums' permette la verifica dei file dei pacchetti installati contro gli MD5 checksums. Alcuni pacchetti non hanno MD5 checksums. Una soluzione temporanea per gli amministratori di sistema: # cat >>/etc/apt/apt.conf.d/90debsums DPkg::Post-Install-Pkgs {"xargs /usr/bin/debsums -sg";}; ^D da Joerg Wendle (non testata). 6.4.15. Ottimizzare `sources.list' ---------------------------------- In breve, sforzi sovrumani per creare un `sources.list' ottimizzato, non hanno prodotto per me miglioramenti, da una località negli . Ho scelto manualmente un sito vicino usando `apt-setup'. `apt-spy' crea automaticamente `sources.list', basandosi su latenza e larghezza di banda. `netselect-apt' crea un `sources.list' ancora più completo, ma usa un metodo meno efficace per la scelta del mirror migliore (comparazione dei tempi di ping). # aptitude install apt-spy # cd /etc/apt ; mv sources.list sources.list.org # apt-spy -d testing -l sources.apt 6.5. Altre particolarità di Debian ---------------------------------- 6.5.1. Il comando `dpkg-divert' ------------------------------- Le _deviazioni_ dei files rappresentano un modo di forzare `dpkg' a non installare un file nella sua posizione predefinita, ma in una posizione _deviata_. Le _deviazioni_ possono essere utilizzate tramite gli script dei pacchetti Debian per muovere un file quando causa un conflitto. Gli amministratori di sistema possono usare una deviazione anche per scavalcare un file di configurazione di un pacchetto, oppure quando alcuni file (non marcati come conffiles) devono essere salvaguardati da `dpkg', durante l'installazione di una nuova versione di un dato file (vedere Sezione 2.2.4, `Mantenimento della configurazione locale'). # dpkg-divert [--add] # aggiunge la "deviazione" # dpkg-divert --remove # rimuove la "deviazione" Di solito è una buona idea non usare `dpkg-divert' a meno che non sia strettamente necessario. 6.5.2. Il pacchetto `equivs' ---------------------------- Se compilate un programma dai sorgenti, è meglio debianizzarlo in un pacchetto (`*.deb'). Usate `equivs' solo come ultima risorsa. Package: equivs Priority: extra Section: admin Description: Aggira le dipendenze dei pacchetti Debian. E' un pacchetto vuoto che può essere usato per creare dei pacchetti Debian contenenti solo le informazioni sulle dipendenze. 6.5.3. Comandi alternativi -------------------------- Per lanciare `vim' con il comando `vi', usate `update-alternatives': # update-alternatives --display vi ... # update-alternatives --config vi Selection Comme ----------------------------------------------- 1 /usr/bin/elvis-tiny 2 /usr/bin/vim *+ 3 /usr/bin/nvi Enter to keep the default[*], or type selection number: 2 Le alternative del sistema in Debian sono contenute in `/etc/alternatives' come collegamenti simbolici. Per impostare il vostro ambiente X Window preferito, usate invece `update-alternatives' su `/usr/bin/x-session-manager' e `/usr/bin/x-window-manager'. Per i dettagli, vedere Sezione 9.4.5.1, `Personalizzare le X session'. `/bin/sh' è un collegamento simbolico a `/bin/bash' o `/bin/dash'. E' più sicuro usare `/bin/bash' per mantenere la compatibilità con vecchi script in contaminati da bash, ma più corretto utilizzare `/bin/dash' per rinforzare la compatibilità POSIX. L'aggiornamento al kernel 2.4 tende ad impostare il collegamento su `/bin/dash' 6.5.4. Uso dei runlevel ----------------------- Una volta installati, gran parte dei pacchetti Debian configura i propri servizi per girare nei runlevel da 2 a 5. Quindi, non esistono differenze fra i runlevel 2, 3, 4 e 5 su un sistema Debian non personalizzato; Debian lascia all'amministratore la possibilità di personalizzare i runlevel, come descritto in Sezione 2.4.3, `Personalizzare i runlevel'. Ciò differisce dal modo in cui i runlevel sono usati da altre distribuzioni popolarin GNU/Linux. Una modifica che potreste voler fare e disabilitare `xdm' o `gdm' nel runlevel 2 in maniera da non lanciare l'X display manager al termine della sequenza di boot; potete lanciarlo passando al runlevel 3. Per maggiori informazioni sui runlevel, vedere Sezione 2.4.2, `I Runlevel'. 6.5.5. Demoni di servizio disabilitati -------------------------------------- Gli sviluppatori Debian hanno molto a cuore la sicurezza del sistema. Molti demoni di servizio sono installati con il minimo dei servizi abilitati. Se avete dei dubbi (su Exim, DHCP, ...) controllate `ps aux' oppure il contenuto di `/etc/init.d/*' e di `/etc/inetd.conf'. Controllate anche `/etc/hosts.deny' in Sezione 9.2.1, `Restrizione tramite PAM'. Anche il comando `pidof' è utile (vedere pidof(8)). X11 non permette connessioni TCP/IP (remote) predefinite nelle versioni più recenti di Debian. Vedere Sezione 9.4.6, `Connessione TCP/IP ad X'. Anche l'X forwarding in SSH è disabilitato. Vedere Sezione 9.4.8, `Connessioni ad un X server remoto -- `ssh''. ------------------------------------------------------------------------------- 7. Il kernel Linux su Debian ---------------------------- Debian ha i suoi modi per la ricompilazione del kernel e dei relativi moduli. Vedere anche Sezione 2.7, `Debian ed il kernel'. 7.1. Ricompilare il kernel -------------------------- Utilizzare `gcc', `binutils' e `modutils' da Debian `unstable' può essere di aiuto nel compilare l'ultimissimo kernel Linux. Vedere `/usr/share/doc/kernel-package/README.gz', in particolare la parte finale, per le informazioni ufficiali. Dato che la compilazione del kernel è qualcosa in continua evoluzione, è un soggetto difficile da trattare, persino lo sviluppatore più ammirato può fare confusione: Manoj Srivastava ha scritto: `--initrd' richiede una patch cramfs solo per Debian. Herbert Xu ha scritto: No, non ne ha bisogno, tutto quello che serve per usare un filesystem diverso da CRAMFS è di impostare MKIMAGE in `/etc/mkinitrd/mkinitrd.conf'. Siate accorti, e fate affidamento sul `/usr/share/doc/kernel-package/README.gz' di Manoj e Kent. Accertatevi di ottenere l'ultima versione di unstable del pacchetto `kernel-package' se state per compilare la versione più recente del kernel. `initrd' non serve per un kernel compilato solo per una macchina. Io lo uso perchè voglio che sia quasi lo stesso di quello fornito da kernel-image. Se usate `initrd', leggetevimkinitrd(8) e mkinitrd.conf(5). Vedere anche http://bugs.debian.org/149236. 7.1.1. Il metodo Debian standard -------------------------------- Controllate anche i rapporti sui bachi per `kernel-package' `gcc', `binutils' e `modutils'. Usatene le versioni più recenti, se necessario. La compilazione di un proprio kernel dai sorgenti in un sistema Debian richiede una cura speciale. Per compilare più "kernel-images", utilizzate il nuovo `--append_to_version' con `make-kpkg'. # apt-get install debhelper modutils kernel-package libncurses5.dev # apt-get install kernel-source-<2.4.18> # usate la versione più recente # apt-get install fakeroot # vi /etc/kernel-pkg.conf # inserisco il mio nome ed email $ cd /usr/src # la directory di compilazione $ tar -bzip2 -xvf kernel-source-<2.4.18>.tar.bz2 $ cd kernel-source-<2.4.18> # se è il vostro sorgente $ cp /boot/config-<2.4.12-386>.config # usa il config corrente come default $ make menuconfig # personalizzate a vostro piacimento $ make-kpkg clean # deve essere eseguito (per: man make-kpkg) $ fakeroot make-kpkg --append_to_version -<486> --initrd \ --revision= kernel_image \ modules_image # modules_image è per pcmcia.cs*, ecc. $ cd .. # dpkg -i kernel-image*.deb pcmcia-cs*.deb # install `make-kpkg kernel_image' esegue in realtà `make oldconfig' ed `make dep' Se non usate initrd, non mettete `-initrd'. Se si vogliono i moduli da pcmcia-cs o nessun modulo pcmcia, si deve selezionare "General setup --->" e "PCMCIA/CardBus support --->" in `make menuconfig' ed impostando la configurazione come "< > PCMCIA/CardBus support" (cioè, deselezionate la casella). Su una macchina SMP, impostate CONCURRENCY_LEVEL in accordo con kernel-pkg.conf(5). 7.1.2. Il metodo classico ------------------------- Scaricate i sorgenti originali da: * Linux: http://www.kernel.org/ * pcmcia-cs: http://pcmcia-cs.sourceforge.net/ oppure utilizzate i sorgenti equivalenti da debian ed eseguite i seguenti comandi: # cd /usr/src # tar xfvz linux-.tar.gz # rm -rf linux # ln -s linux- linux # tar xfvz pcmcia-cs-.tar.gz # ln -s pcmcia-cs- pcmcia # cd linux # make menuconfig ... configurate a vostro piacimento ... # make dep # make bzImage ... modifiche per lilo / grub ... ... muovete /usr/src/linux/arch/i386/boot/bzImage in boot ... ... /sbin/lilo o qualunque altra cosa serva per grub # make modules; make modules_install # cd ../pcmcia # make config # make all # make install ... aggiungete i nomi dei moduli richiesti a /etc/modules # shutdown -r now ... fate il boot con il nuovo kernel ... 7.1.3. I Kernel header ---------------------- Molti programmi "normali" non hanno bisogno dei kernel header, anzi, possono corrompersi se li utilizzate direttamente; dovrebbero invece essere compilati rispetto agli headers con cui _`glibc' è stato compilato_, ovvero le versioni contenute in `/usr/include/linux' e `/usr/include/asm' del sistema Debian. Per cui non ponete i collegamenti simbolici alle directory in `/usr/src/linux' da `/usr/include/linux' e `/usr/include/asm', come diversamente suggerito in alcuni documenti ormai obsoleti. Se avete _bisogno_ di kernel header particolari per qualche applicazione kernel-specifica, modificate il(i) makefile in modo da includere nei percorsi dei puntatori a `/include/linux' e `/include/asm'. 7.2. Kernel 2.4 modulare ------------------------ I nuovi kernel debian 2.4 forniti dai pacchetti kernel-image-2.4. sono altamente modularizzati. Per farli funzionare come avete deciso, dovrete essere sicuri che i moduli siano stati attivati. Sebbene abbia molti esempi per `/etc/modules' nella sezione seguente da utilizzare come correzione rapida, so che il modo giusto per correggere questi problemi correlati ai moduli è di fornire un alias per il dispositivo in un file contenuto in `/etc/modutils/', essendoci abbastanza alias disponibili con i kernel attuali. Alcuni moduli possono essere auto attivati dai programmi di riconoscimento hardware, tipo `discover'. Vedere anche Sezione 9.4.2, `Pacchetti per il riconoscimento hardware per X' Vedere Sezione 2.7.3, `Funzioni speciali per trattare con i moduli' e `Documentation/*.txt' nel sorgente Linux source per informazioni più accurate. 7.2.1. PCMCIA ------------- `/etc/modules' deve contenere i seguenti driver, affinchè PCMCIA funzioni: # Driver ISA PnP isa-pnp # Driver PCMCIA di basso livello # yenta_socket # non sembra essere necessario nel mio caso. Il resto viene configurato dagli script PCMCIA (del pacchetto `pcmcia-cs'), da `depmod' e da `kmod'. Penso che `isa-pnp' mi sia stato necessario perchè il mio laptop è un vecchio ISA-PCMCIA. I modelli più recenti con CardBus-PCMCIA non lo richiedono. Voce del generoso Miquel van Smoorenburg : "Ho semplicemente rimosso tutta la roba correlata con pcmcia dal mio laptop, qui al lavoro, compreso cardmgr, ecc., ed ho installato un kernel 2.4 con supporto per cardbus, insieme al nuovo pacchetto `hotplug' da woody. Se avete delle PC card a 32 bit non avete bisogno del pacchetto pcmcia, il kernel 2.4 ha i servizi per esse già inseriti. Il driver tulip standard dovrebbe funzionare bene con la vostra card dcollegamenti. ---Mike." Vedere Linux PCMCIA HOWTO (http://www.tldp.org/HOWTO/PCMCIA-HOWTO.html) e Sezione 10.10.5, `Configurazione di rete e PCMCIA'. 7.2.2. SCSI ----------- [NON TESTATO]`/etc/modules' deve contenere i seguenti driver affinchè SCSI funzioni: # SCSI core scsi_mod # Driver generico SCSI sg # Disco SCSI sd_mod # Tutti gli altri moduli hardware necessari ... Forse `depmod' può prendersi cura di alcuni dei moduli summenzionati. 7.2.3. Funzioni di rete ----------------------- `/etc/modules' deve contenere i seguenti driver per le funzioni extra di rete: # net/ipv-4 ip_gre ipip # net/ipv-4/netfilter # iptable (nell'ordine) ip_tables ip_conntrack ip_conntrack_ftp iptable_nat iptable_filter iptable_mangle # ip_nat_ftp ip_queue # ipt_LOG ipt_MARK ipt_MASQUERADE ipt_MIRROR ipt_REDIRECT ipt_REJECT ipt_TCPMSS ipt_TOS ipt_limit ipt_mac ipt_mark ipt_multiport ipt_owner ipt_state ipt_tcpmss ipt_tos ipt_unclean # #ipchains #ipfwadm Quanto sopra non è ottimizzato al meglio. `depmod' potrebbe prendersi cura di alcuni dei moduli. 7.2.4. Il filesystem EXT3 ( > 2.4.17) ------------------------------------- L'attivazione di un filesystem "journaled" con il tipo EXT3 FS richiede i seguenti passi, usando un pacchetto kernel-image Debian precompilato ( > 2.4.17): # cd /etc; mv fstab fstab.old # sed 's/ext2/ext3,ext2/g' fstab # vi /etc/fstab ... impostate il filesystem di root ad "auto" invece di "ext3,ext2" # cd /etc/mkinitrd # echo jbd >>modules # echo ext3 >>modules # echo ext2 >>modules # cd / # apt-get update; apt-get install kernel-image-<2.4.17-686-smp> ... installa l'ultimo kernel ed imposta il boot (lilo viene lanciato a questo punto) # tune2fs -j -i 0 # tune2fs -j -i 0 ... Per tutti i filesystem EXT2 convertiti a EXT3 # shutdown -r now A questo punto il journaling EXT3 è attivato. Avere le voci "type" in `fstab' come `ext3,ext2' assicura, in caso il kernel non supportasse EXT3, un tranquillo ritorno ad EXT2 per le partizioni non-root. Se avete un kernel 2.4 già installato e non lo volete reinstallare, date gli stessi comandi `apt-get' di cui sopra e poi: # mkinitrd -o /boot/initrd.img-<2.4.17-686-smp> /lib/modules/<2.4.17-686-smp> # lilo # tune2fs -j -i 0 # tune2fs -j -i 0 ... per tutti i filesystem EXT2 convertiti a EXT3 # shutdown -r now A questo punto il journaling EXT3 è attivato. Qualora `/etc/mkinitrd/modules' non fosse stato impostato al lancio di `mkinitrd' e si volessero aggiungere alcuni moduli al boot: ... al prompt di initrd per entrare in shell (entro 5 sec.), premete INVIO # insmod jbd # insmod ext3 # modprobe ext3 si prende cura di tutto # insmod ext2 # ^D ... continuate il boot Sui messaggi al boot (`dmesg'), potrà apparire "cramfs: wrong magic", messaggio noto per essere inoffensivo. Questo problema è stato risolto in Sarge (10/2002). Vedere http://bugs.debian.org/135537 ed il EXT3 File System mini-HOWTO (http://www.zip.com.au/~akpm/linux/ext3/ext3-usage.html) oppure `/usr/share/doc/HOWTO/en-txt/mini/extra/ext3-mini-HOWTO.gz' per ulteriori informazioni. Alcuni sistemi hanno sperimentato dei gravi blocchi del kernel, quando EXT3 è attivato (fino al 2.4.17) ma, per quanto mi riguarda, non ho avuto problemi. 7.2.5. Supporto nel kernel 2.4 per Realtek RTL-8139 --------------------------------------------------- Per qualche motivo, il modulo per RTL-8139 non si chiama più rtl8139, ma 8139too. All'aggiornamento del kernel da 2.2 a 2.4, dovrete modificare a mano `/etc/modules' per inserire il nuovo nome del modulo. 7.2.6. Supporto per la porta parallela -------------------------------------- In `kernel-image-2.4.*', il supporto per la porta parallela è fornito come modulo. Attivatelo con: # modprobe lp # echo lp >> /etc/modules Vedere `Documentation/parport.txt' nel sorgente Linux. 7.3. Mettere a punto il kernel tramite il filesystem proc --------------------------------------------------------- Il comportamento del kernel Linux può essere modificato al volo usando il filesystem proc. Per le informazioni di base sulle modifiche ai parametri del kernel attraverso il filesystem `/proc', leggete `Documentation/sysctl/*' nella directory Linux. Potete vedere alcuni esempi di manipolazione dei parametri del kernel in `/etc/init.d/networking' e Sezione 3.7.5, `Strani problemi di accesso con alcuni siti web'. Vedere sysctl.conf(5) su come impostare la configurazione del kernel all'avvio attraverso `/proc', con lo script `/etc/init.d/procps.sh' generalmente lanciato da `/etc/rcS.d/S30procps.sh'. 7.3.1. Troppi file aperti ------------------------- Il kernel può dare un messaggio del tipo "Too many open files" (troppi file aperti). Ciò è dovuto al basso valore predefinito (8096) per `file-max'. Per risolvere il problema, date il seguente comando da root (oppure mettetelo in uno script di inizio in `/etc/rcS.d/*'. # echo "65536" >/proc/sys/fs/file-max # per i kernel 2.2 e 2.4 # echo "131072" >/proc/sys/fs/inode-max # solo per kernel 2.2 oppure mettete quanto segue in `/etc/sysctl.conf' per avere una modifica permanente: file-max=65536 # per kernel 2.2 e 2.4 inode-max=131072 # solo per 2.2 7.3.2. Intervalli di flush del disco rigido ------------------------------------------- Potete modificare gli intervalli di flush mediante il filesystem proc. Quanto segue riduce gli intervalli dai cinque secondi predefiniti ad un secondo. # echo "40 0 0 0 100 30000 60 0 0" > /proc/sys/vm/bdflush Ciò può avere un minimo impatto negativo nella performance I/O. Però assicura il contenuto dei file, tranne che per l'ultimo secondo, più breve dei cinque predefiniti. Questo è vero anche per i filesystem journaled. 7.3.3. Vecchie macchine lente e con poca memoria ------------------------------------------------ Per alcuni vecchi sistemi con poca memoria, può ancora essere utile abilitare l'over-commit della memoria tramite il filesystem proc. # echo 1 > /proc/sys/vm/overcommit_memory 7.4. Il kernel 2.6 con udev --------------------------- Udev è un rimpiazzo dinamico per `/dev'. I nomi dei device devon essere molto corti. Devfs, usato nel kernel 2.4, è obsoleto. Potete abilitarlo installando il kernel Debian 2.6 `kernel-image-2.6.' con il pacchetto `udev'. ------------------------------------------------------------------------------- 8. Trucchi per Debian --------------------- 8.1. Avviare il sistema ----------------------- Per informazioni dettagliate sul prompt del boot, vedere il BootPrompt-HOWTO (http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html) dal LDP. 8.1.1. "Ho scordato la password di root!" (1) --------------------------------------------- E' possibile fare il boot del sistema ed accedere all'account di root, anche se non se ne conosce la password, basta avere accesso alla tastiera. (Premesso che che non esistono altre password richieste dal BIOS, o dal boot-loader tipo `lilo' che possono impedirvi l'accesso al sistema). Questa procedura non richiede alcun disco di boot, nè cambiamenti al BIOS. In questo contesto, "Linux" è l'etichetta per lanciare il kernel in una installazione Debian standard. Alla schermata di boot di `lilo', non appena appare `boot:' (in alcuni sistemi si deve premere il tasto maiuscolo per prevenire il boot automatico) e se `lilo' usa il framebuffer dovete premere TAB per vedere le opzioni che digitate), date: boot: Linux init=/bin/sh Il sistema avvia il kernel ed esegue `/bin/sh' invece dello standard `init'. A questo punto avete ottenuto i privilegi di root e la shell di root. Siccome, però `/' è montata in sola lettura e molte altre partizioni non sono state ancora montate, avete bisogno di eseguire quanto segue per avere un sistema ragionevolmente funzionante. init-2.03# mount -n -o remount,rw / init-2.03# mount -avt nonfs,noproc,nosmbfs init-2.03# cd /etc init-2.03# vi passwd init-2.03# vi shadow (Se il secondo campo di dati all'interno di `/etc/passwd' è "x" per ogni username, il vostro sistema usa le shadow password, per cui dovrete modificare `/etc/shadow'.) Per disabilitare la password di root, modificate il secondo campo nel file password in maniera che risulti vuoto. Ora potete fare il reboot ed il log in come root senza una password. Quando fa il boot nel runlevel 1, Debian (almeno dopo Potato) richiede una password, mentre alcune distribuzioni più vecchie no. E' buona cosa avere un piccolo editor in `/bin' nel caso in cui `/usr' non fosse accessibile (vedere Sezione 11.2, `Editor di salvataggio'). Considerate anche l'installazione del pacchetto `sash'. Se il sistema diventa non più avviabile, eseguite: boot: Linux init=/bin/sash `sash' funziona come sostituto interattivo di `sh' persino quando `/bin/sh' è inutilizzabile. Ha un collegamento statico ed include molte utilità di base al suo interno (digitate "help" al prompt per una lista di riferimento). 8.1.2. "Ho scordato la password di root!" (2) --------------------------------------------- Fate il boot da qualunque set di dischi di emergenza boot/root. Se, per esempio, `' è la partizione di root originale, i seguenti comandi permetteranno di aprire il file password facilmente come sopra. # mkdir # mount # cd /etc # vi shadow # vi passwd Il vantaggio di questo approccio rispetto al metodo precedente è che non richiede la conoscenza della password di `lilo' (se esiste). Però, bisogna essere in grado di impostare il BIOS, se non lo è già, in modo che il boot del sistema sia da floppy o da CD. 8.1.3. Non riesco a fare il boot -------------------------------- Nessun problema, persino se non vi siete presi la briga di fare un dischetto di boot durante l'installazione. Se `lilo' non funziona, usate come disco di boot il disco di installazione di Debian (il primo) ed eseguite il boot da questo disco. Al prompt del boot, assumendo che la partizione di root del vostro Linux è su `' e che volete il runlevel 3, digitate: boot: rescue root= 3 A questo punto siete entrati in un sistema pressochè funzionante in toto, basato sul kernel del dischetto. (Potrete avere piccole noie, dovute alla mancanza di alcuni moduli). Vedere anche Sezione 6.3.6, `Installare un pacchetto su un sistema non bootabile' se avete un sistema danneggiato. Se volete crearvi un vostro boot floppy, leggete il `readme.txt' sul rescue disk. 8.1.4. "Voglio disabilitare X al boot!" --------------------------------------- Avere `unstable/sid' è divertente, ma `xdm', `gdm', `kdm', e `wdm' difettosi lanciati durante il boot possono fare molto male. Primo, guadagnate la shell di root digitando quanto segue al prompt del boot: boot: vga=normal s Dove è l'etichetta per l'immagine del kernel che andate a lanciare, "vga=normal" vi assicura che `lilo' si esegue in uno schermo normale VGA ed "s" (o "S") è il parametro dato ad `init' per invocare la modalità singolo utente. Al prompt date la password di root. Esistono vari modi per disabilitare tutti i demoni che lanciano X: * eseguite `update-rc.d dm stop 99 1 2 3 4 5 6 .' * inserite "exit 0" all'inizio di tutti i file `/etc/init.d/dm'. * rinominate tutti i file `/etc/rc<2>.d/S99dm' `/etc/rc2.d/K99dm'. * rimuovete tutti i file `/etc/rc<2>.d/S99dm'. * eseguite `:>/etc/X11/default-display-manager' Qui il numero in `rc<2>.d' deve corrispondere al runlevel specificato in `/etc/inittab'. `dm' significa tutti gli `xdm', `gdm', `kdm', e `wdm'. L'unico, vero modo Debian è il primo della lista. L'ultimo è semplice, ma funziona solo sulla Debian e richiede una nuova impostazione in seguito tramite `dpkg-reconfigure'. Gli altri sono metodi generici per disabilitare i demoni. Avete sempre la possibilità di lanciare X con il comando `startx' da qualsiasi shell. 8.1.5. Altri trucchi con il boot prompt --------------------------------------- Potete fare il boot in un particolare runlevel e configurazione tramite il prompt di `lilo'. Dettagli si trovano nel BootPrompt-HOWTO (http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html) (LDP). Se volete fare il boot nel runlevel 4, date il seguente comando al prompt di `lilo'. boot: Linux 4 Se si vuole il boot in modalità singolo utente, conoscendo la password di root, potete usare uno dei seguenti esempi al prompt di `lilo'. boot: Linux S boot: Linux 1 boot: Linux -s Se si vuole il boot con meno memoria di quanta il sistema ne abbia (mettiamo 48M in un sistema con 64M), basta dare il seguente comando al prompt di `lilo': boot: Linux mem=48M Evitate di specificare più memoria di quanta ne abbiate, altrimenti il kernel si pianterà inevitabilmente. Se si hanno più di 64M, per esempio 128M, con vecchi kernel o BIOS bisogna specificare il comando `mem=128M' al prompt, od includere una riga simile in `/etc/lilo.conf', altrimenti non verrà utilizzata memoria sopra i 64MB. 8.1.6. Come impostare i parametri di boot (GRUB) ------------------------------------------------ GRUB è un nuovo boot manager proveniente dal progetto Hurd, molto più flessibile di Lilo, ma con un modo di maneggiare i parametri di boot lievemente differente. grub> find /vmlinuz grub> root (hd0,0) grub> kernel /vmlinuz root=/dev/hda1 grub> initrd /initrd grub> boot Dovete conoscere come Hurd nomina i device: the Hurd/GRUB Linux MSDOS/Windows (fd0) /dev/fd0 A: (hd0,0) /dev/hda1 C: (solitamente) (hd0,3) /dev/hda4 F: (solitamente) (hd1,3) /dev/hdb4 ? Vedere `/usr/share/doc/grub/README.Debian.gz' e `/usr/share/doc/grub-doc/html/' per i dettagli. 8.2. Registrazione degli eventi ------------------------------- 8.2.1. Registrare gli eventi della shell ---------------------------------------- L'amministrazione di sistema in ambiente Unix richiede dei compiti molto più elaborati che in un ambiente di un normale PC. E' importante conoscere le modalità di configurazione di base, per poter risolvere i problemi del sistema. Le interfacce grafiche di configurazione basate su X sono carine e convenienti, ma comunque limitate, specialmente in casi di emergenza. In questo contesto, la registrazione degli eventi della shell è una buona pratica, specialmente come root. Emacs: Usate M-x `shell' per iniziare la registrazione in un buffer e C-x C-w per scrivere il buffer su un file. Shell: Usate il comando `screen' con "^A H" come decritto in Sezione 8.6.28, `Scambio di console con `screen'' od il comando `script'. $ script Script started, file is typescript ... fate quello che dovete ... Ctrl-D $ col -bx savefile $ vi savefile Si può usare quanto segue invece di `script': $ bash -i 2>&1 | tee typescript 8.2.2. Registrare gli eventi di X --------------------------------- Se dovete registrare l'immagine di una applicazione di X, incluso `xterm', usate `gimp' (GUI). Può catturare ogni singola finestra, oppure lo schermo intero. Alternative sono `xwd' (`xbase-clients'), `import' (`imagemagick'), o `scrot' (`scrot'). 8.3. Copia ed archiviazione di una intera sottodirectory -------------------------------------------------------- 8.3.1. Comandi base per copiare una intera sottodirectory --------------------------------------------------------- Se avete necessità di riarrangiare la struttura dei file, muovete il contenuto, compresi i collegamenti con: Metodo standard: # cp -a /partenza/directory /destinazione/directory # richiede GNU cp # (cd /partenza/directory && tar cf - . ) | \ (cd /destinazione/directory && tar xvfp - ) Se è coinvolto un collegamento, è necessario un metodo più "pedante": # cd /percorso/alla/vecchia/directory # find . -depth -print0 | afio -p -xv -0a /mount/point/della/nuova/directory Da remoto: # (cd /origine/directory && tar cf - . ) | \ ssh user@host.dom (cd /destinazione/directory && tar xvfp - ) Se non ci sono collegamenti: # scp -pr user1@host1.dom:/origine/directory \ user2@host2.dom:/destinazione/directory Qui `scp' <==> `rcp' e `ssh' <==> `rsh'. Le seguenti informazioni comparative su come copiare una intera sottodirectory sono state presentate da Manoj Srivastava nella lista debian-user@lists.debian.org. 8.3.2. `cp' ----------- Tradizionalmente, `cp' non è mai stato un gran candidato per tali scopi, poichè non dereferenzia i collegamenti simbolici, nè preserva i collegamenti. Un'altro fattore da considerare è lo spezzettamento dei files (files con buchi). GNU `cp' ha superato questi limiti; comunque su un sistema non GNU, `cp' potrebbe avere ancora problemi. In più, usando `cp' non si possono creare archivi che siano piccoli e facilmente trasportabili. % cp -a . newdir 8.3.3. `tar' ------------ Tar è andato oltre alcuni dei problemi che aveva `cp' con i collegamentos simbolici. Comunque sia, sebbene `cpio' sia in grado di trattare file speciali,il tradizionale `tar' no. Il modo in cui `tar' tratta collegamenti multipli ad un file è di porre solo una copia del collegamento sul nastro, ma il nome collegato a quella copia è il _solo_ utilizzabile per recuperare il file; `cpio' invece, mette una copia per ciascun collegamento, ma per recuperare il file potete usare uno qualsiasi dei nomi. Nella transizione da Potato a Woody, il comando `tar' ha cambiato l'opzione per i file `.bz2', per cui usate `--bzip2' negli script al posto della forma breve `-I' (Potato) o `-j' (Woody). 8.3.4. `pax' ------------ E' l'utilità POSIX Portable Archive Interchange (IEEE Std 1003.2-1992, pagine 380--388 (sezione 4.48) e pagine 936--940 (sezione E.4.48)), nuova di zecca. `pax' legge, scrive ed elenca i membri di un file archivio, e ne copia le directory secondo le gerarchie. Le operazioni di `pax' sono indipendenti dal formato dell'archivio e supportano una grossa varietà di formati diversi. Le implementazioni di `pax' sono ancora molto nuove. # apt-get install pax $ pax -rw -p e . newdir oppure $ find . -depth | pax -rw -p e newdir 8.3.5. `cpio' ------------- `cpio' copia i file dentro o fuori un archivio `cpio' o `tar'. L'archivio può essere un'altro file sul disco rigido, un nastro magnetico, oppure una pipe. $ find . -depth -print0 | cpio --null --sparse -pvd new-dir 8.3.6. `afio' ------------- `afio' è un metodo migliore per trattare con archivi in formato `cpio'. In genere è più veloce di `cpio', ha maggiori opzioni per i nastri e tratta in maniera più gentile con le corruzioni dei dati in entrata. Supporta gli archivi multi-volume durante le operazioni in modalità interattiva. `afio' può creare archivi molto più sicuri di quelli compressi con `tar' o `cpio'. `afio' è anche ottimo come "motore per l'archiviazione" negli script di backup. $ find . -depth -print0 | afio -px -0a new-dir Tutti i miei backup su nastro usano `afio'. 8.4. Backup differenziali e sincronizzazione dei dati ----------------------------------------------------- I backup differenziali e la sincronizzazione dei dati possono essere implementati con vari metodi: * `rcs': backup con storico, solo testo * `rdiff-backup': backup con storico. I collegamenti simbolici sono OK. * `pdumpfs': backup con storico all'interno di un filesystem. Collegamenti simbolici OK. * `rsync': sincronizzazione ad 1 via * `unison': sincronizzazione a 2 vie * `cvs': sincronizzazione multivia con server backup e storico, solo testo, maturo. Vedere Sezione 12.1, `Concurrent Version System (CVS)'. * `arch': sincronizzazione multivia con server backup e storico, non esiste qualcosa come una "working directory". * `subversion': sincronizzazione multivia con server backup e storico, Apache. La combinazione di uno dei metodi menzionati con uno dei metodi di archiviazione descritti in Sezione 8.3, `Copia ed archiviazione di una intera sottodirectory' associati ad un job automatico regolare descritto in Sezione 8.6.27, `Programmare gli eventi (`cron', `at')' creeranno un ottimo sistema per il backup. Mostrerò tre utilità facili da usare. 8.4.1. Backup differenziale con rdiff ------------------------------------- `rdiff-backup' fornisce dei backup semplici e validi con lo storico differenziale per file di qualsiasi tipo, compresi i collegamenti simbolici. Per salvare gran parte di `~/' su `/mnt/backup': $ rdiff-backup --include ~/tmp/keep --exclude ~/tmp ~/ /mnt/backup Per recuperare i dati vecchi tre giorni da questo archivio in `~/old': $ rdiff-backup -r 3D /mnt/backup ~/old Vedere rdiff-backup(1). 8.4.2. Backup giornalieri con `pdumpfs' --------------------------------------- `pdumpfs' è un sistema semplice per il backup giornaliero, simile a `dumpfs' di Plan), che conserva ogni snapshot giornaliero. Potete accedere in ogni monento agli snapshot passati per recuperare un determinato file di un tale giorno. Fate il backup della vostra directory home con `pdumpfs' e `cron'! `pdumpfs' produce uno snapshot `YYYY/MM/DD' nella directory di destinazione. Tutti i file sorgenti vengono copiati nella directory di snapshot per la prima volta. La seconda volta e le succesive, `pdumpfs' copia solo i file aggiornati o nuovi, immagazzinando quelli immodificati come collegamenti ai file dello snapshot del giorno precedente per salvare spazio su disco. $ pdumpfs [] Vedere pdumpfs(8). 8.4.3. Backup differenziali regolari con RCS -------------------------------------------- `Changetrack' registra regolarmente i cambiamenti ai file di testo di configurazione negli archivi RCS. Vedere changetrack(1). # apt-get install changetrack # vi changetrack.conf 8.5. Recuperare un sistema bloccato ----------------------------------- 8.5.1. Uccidere un processo --------------------------- Lanciate `top' per vedere quale processo si comporta in maniera "sconveniente". Premete "P" per ordinarli per utilizzo di cpu, "M" per consumo di memoria e "k" per uccidere il processo.In alternativa potete usare i comandi in stile BSD `ps aux | less' od in stile System V `ps -efH | less'. La sintassi del System V mostra l'ID dei processi padri `PPID' che può essere usato per uccidere i figli zombie (defunti). Usate `kill' per uccidere (o mandare il segnale a) un processo per ID del processo, `killall' per fare lo stesso con il nome del comando a cui il processo appartiene. Segnali più frequentemente usati: 1: HUP, riavvia il demone 15: TERM, uccisione normale 9: KILL, uccisione "dura" 8.5.2. Alt-SysRq ---------------- L'assicurazione contro i malfunzionamenti di sistema è un'opzione di compilazione del kernel, denominata "Magic SysRQ key". Premendo `ALT-SysRq' su un sistema i386, seguito da uno dei tasti `r 0 k e i s u b', fa la "magia". Un'r'aw riavvia la tastiera quando cose tipo X si bloccano. Cambiare il loglevel a 0 riduce i messagi di errore. sa'k' (system attention key) uccide tutti i processi sulla console virtuale attuale. t'e'rminate uccide tutti i processi su terminale corrente tranne init. k'I'll uccide tutti i processi, tranne `init'. `S'ync, `'u'mount, e re`b'oot sono utili per uscire da situazioni veramente spinose. I kernel debian standard non sono compilati al momento con questa opzione attivata. Ricompilate il kernel per farlo. Informazioni dettagliate le trovate in `/usr/share/doc/kernel-doc-/Documentation/sysrq.txt.gz' o `/usr/src//Documentation/sysrq.txt.gz'. 8.6. Alcuni piccoli comandi da ricordare ---------------------------------------- 8.6.1. Pager ------------ `less' è il pager (browser del contenuto dei file). Premete `h' per aiuto. Fa molto di più di `more'. `less' può essere potenziato mediante l'esecuzione di `eval $(lesspipe)' o `eval $(lessfile)' nello script di inizializzazione della shell. Per ulteriori notizie guardate in `/usr/share/doc/lessf/LESSOPEN'. L'opzione `-R' permette l'output di caratteri raw ed abilita le sequenze ANSI con escape colorate. Vedere less(1). `w3m' può essere un pager alternativo utile per alcuni sistemi di codifica (EUC). 8.6.2. Memoria libera --------------------- `free' e `top' danno buone informazioni sulle risorse di memoria. Non vi preoccupate sulle dimensioni della memoria "used" nella riga "Mem:", ma leggete quella sotto. (38792 nell'esempio qui sotto). $ free -k # per una macchina con 256MB total used free shared buffers cached Mem: 257136 230456 26680 45736 116136 75528 -/+ buffers/cache: 38792 218344 Swap: 264996 0 264996 L'esatto ammontare della memoria fisica può essere confermato da `grep '^Memory' /var/log/dmesg', che in questo caso dà "Memory: 256984k/262144k available (1652k kernel code, 412k reserved, 2944k data, 152k init)". Total = 262144k = 256M (1k=1024, 1M=1024k) Free to dmesg = 256984k = Total - kernel - reserved - data - init Free to shell = 257136k = Total - kernel - reserved - data Circa 5MB non sono utilizzabili dal sistema, perchè a disposizione del kernel. 8.6.3. Impostare l'ora (BIOS) ----------------------------- # date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show Questo imposterà l'orologio del sistema e dell'hardware a MM/GG hh:mm, CCYY. Le ore sono allineate al fuso locale, ma l'orologio dell'hardware utilizza lo UTC. Se l'ora dell'hardware (BIOS) è impostata su GMT, modificate le impostazioni a `UTC=yes' in `/etc/default/rcS'. 8.6.4. Impostare l'ora (NTP) ---------------------------- Riferimento: Managing Accurate Date and Time HOWTO (http://www.tldp.org/HOWTO/TimePrecision-HOWTO/index.html). 8.6.4.1. Impostare l'ora tramite una connessione Internet permanente -------------------------------------------------------------------- Impostazione automatica dell'ora esatta tramite un server remoto: # ntpdate Se avete una connessione permanente, è bene averlo in `/etc/cron.daily'. 8.6.4.2. Impostare l'ora tramite una connessione Internet sporadica ------------------------------------------------------------------- Usate il pacchetto `chrony'. 8.6.5. Come controllare le funzionalità della console, come lo screensaver -------------------------------------------------------------------------- Per disabilitare lo screensaver, usate i comandi seguenti: In console: # setterm -powersave off Lanciate la console kon2 (kanji) con: # kon -SaveTime 0 In X: # xset s off or # xset -dpms or # xscreensaver-command -prefs Leggete le pagine di manuale corrispondenti per controllare le altre funzionalità della console. Vedere anche stty(1) per modificare e stampare le impostazioni della riga di comando. 8.6.6. Ricerca dei database amministrativi ------------------------------------------ Glibc offre getent(1) per la ricerca di voci inserite nei database amministrativi, cioè, passwd, group, hosts, services, protocols, o networks. getent database [chiave...] 8.6.7. Disabilitare il suono (beep) ----------------------------------- Potete sempre staccare gli altoparlanti del PC ;-) Per la shell Bash: echo "set bell-style none">> ~/.inputrc 8.6.8. Messaggi di errore sulla console --------------------------------------- Per placare i messaggi di errore sullo schermo, il primo posto da vedere è `/etc/init.d/klogd'. Impostate `KLOGD="-c <3>"' in questo script ed eseguite `/etc/init.d/klogd restart'. metodo alternativo è eseguire `dmesg -n<3>'. I livelli di errore significano: * 0: KERN_EMERG, il sistema è inutilizzabile * 1: KERN_ALERT, un'azione va presa immediatamente * 2: KERN_CRIT, condizioni critiche * 3: KERN_ERR, condizioni di errore * 4: KERN_WARNING, condizioni di allarme * 5: KERN_NOTICE, condizione normale ma significativa * 6: KERN_INFO, informazioni * 7: KERN_DEBUG, massaggi di debug Se c'è un particolare ed inutile messaggio di errore che vi perseguita, considerate l'ipotesi di una banalissima patch per il kernel, tipo `shutup-abit-bp6' (disponibile presso in the examples subdirectory (http://www.debian.org/doc/manuals/debian-reference/examples/)). Un altro posto da guardare può essere `/etc/syslog.conf'; controllate per vedere se qualche messaggio viene inviato alla console. 8.6.9. Impostare i caratteri corretti per la console ---------------------------------------------------- Agli schermi di console nei sistemi simil-Unix si accede generalmente tramite librerie (n)curses. Queste offrono all'utente un metodo indipendente dal terminale di aggiornamento dei caratteri, con una ottimizzazione ragionevole. Vedere ncurses(3X) e terminfo(5). Su un sistema Debian molte sono le voci predefinite: $ toe | less # tutte le voci $ toe /etc/terminfo/ | less # voci riconfigurabili dall'utente Esportate la vostra selezione come variabile d'ambiente `TERM'. Se la voce terminfo per `xterm' non funziona con un `xterm' non-Debian, cambiate il tipo di terminale da "xterm" ad una delle versioni con minori opzioni tipo "xterm-r6", quando accedete da remoto ad un sistema Debian. Vedere `/usr/share/doc/libncurses5/FAQ' per ulteriori informazioni. "dumb" è il minimo comun denominatore per terminfo. 8.6.10. Riportare la console allo stato normale ----------------------------------------------- Quando lo schermo impazzisce dopo `$ cat ' (potreste non essere in grado di vedere il comando dato mentre lo state digitando): $ reset 8.6.11. Convertire file di testo da DOS a Unix ---------------------------------------------- Converte file un di testo DOS (fine riga = `^M^J') in un file Unix di testo (end-of-line = `^J'). # apt-get install sysutils $ dos2unix 8.6.12. Convertire un file di testo con `recode' ------------------------------------------------ Quanto segue converte i file di testo fra gli stili di fine riga DOS, Mac, e Unix: $ recode /cl../cr < > $ recode /cr.. < > $ recode ../cl < > `recode', libero, converte i file tra i vari set di caratteri e surface con: $ recode /../ \ < > I set caratteri comunemente usati sono (vedere anche Sezione 9.7.3, `Introduzione ai locale') [1] : * `us' --- ASCII (7 bit) * `l1' --- ISO Latin-1 (ISO-8859-1, Europa occidentale, 8 bit) * `EUCJP' --- EUC-JP per Giapponese (Unix) * `SJIS' --- Shift-JIS per Giapponese (Microsoft) * `ISO2022JP' --- Mail encoding per Giapponese (7 bit) * `u2' --- UCS-2 (Universal Character Set, 2 byte) * `u8' --- UTF-8 (Universal Transformation Format, 8 bit) Surface comuni sono [2] : * `/cr' --- A capo come fine riga (Mac text) * `/cl' --- A capo con nuova riga come fine riga (DOS text) * `/' --- Nuova riga come fine riga (Unix text) * `/d1' --- Bytewise decimal dump leggibile * `/x1' --- Bytewise hexidecimal dump leggibile * `/64' --- Testo codificato base64 * `/QP' --- Testo codificato Quoted-Printable Per maggiori notizie, leggere la descrizione pertinente in `info recode'. Esistono anche degli strumenti di conversione più specializzati: * conversione del set di caratteri: * `iconv' --- locale encoding conversions * `konwert' --- fancy encoding conversions * conversione dei file binari: * `uuencode' e `uudecode' --- per Unix. * `mimencode' --- per la posta. [1] `recode' permette degli alias più convenienti di `iconv'. [2] Fine riga: * A capo significa ASCII 13, ASCII 0xD, ^M, or \r . * Nuova riga significa ASCII 10, ASCII 0xA, ^J, or \n . 8.6.13. Sostituzione delle espressioni regolari ----------------------------------------------- Sostituisce tutte le istanze con in tutti i file ...: $ perl -i -p -e 's///g;' ... `-i' sta per "in-place editing", `-p' è per "implicit loop over ...". se la sostituzione è complessa, potete recuperare più facilmente gli errori usando il parametro `-i.bak' al posto di `-i'; così si mantiene ogni file originale, aggiungendo `.bak' come estensione. 8.6.14. Modificare un file "in situ" tramite uno script ------------------------------------------------------- Lo script seguente rimuove le righe 5--10 e le righe 16--20 "in situ". #!/bin/bash ed $1 < o a seconda della localizzazione del file: $ diff -u > $ diff -u > Il file diff (chiamato anche file patch) è usato per inviare gli aggiornamenti di un programma. Chi lo riceve applicherà questo aggiornamento ad un altro con: $ patch -p0 < $ patch -p1 < Se avete tre versioni dello stesso codice sorgente, potete farle confluire più efficacemente tutte insieme usando `diff3': $ diff3 -m > 8.6.16. Convertire grossi file in file più piccoli -------------------------------------------------- $ split -b 650m # divide il file in pezzetti di 650 MB $ cat x* > # riunisce i file in un unico file 8.6.17. Estrarre dati da un file tabella ---------------------------------------- Consideramo un file di testo chiamato `DPL' in cui tutti i nomi dei project leader Debian precedenti e la data di inizio della carica siano elencati in un formato con separazioni date da spazi. Ian Murdock August 1993 Bruce Perens April 1996 Ian Jackson January 1998 Wichert Akkerman January 1999 Ben Collins April 2001 Bdale Garbee April 2002 Martin Michlmayr March 2003 Awk viene usato frequentemente per estrarre i dati da questo tipo di file. $ awk '{ print $3 }' , , e combinati. Fate attenzione nell'uso di questi trucchi con IFS. Possono accadere strane cose quando la shell inetrpreta alcune parti degli script come proprio _input_. $ IFS=":," # usa ":" e "," come IFS $ echo IFS=$IFS, IFS="$IFS" # echo è un Bash built-in IFS= , IFS=:, $ date -R # solo l'output di un comando Sat, 23 Aug 2003 08:30:15 +0200 $ echo $(date -R) # sub shell --> input alla shell principale Sat 23 Aug 2003 08 30 36 +0200 $ unset IFS # riporta IFS al predefinito $ echo $(date -R) Sat, 23 Aug 2003 08:30:50 +0200 8.6.18. Parti di script per il piping ------------------------------------- Gli script seguenti fanno cose utili come parti di una pipe. find /usr | egrep -v "/usr/var|/usr/tmp|/usr/local" # trova tutti i file /usr escludendone alcuni xargs -n 1 # lancia i comandi per tutti gli oggetti da stdin xargs -n 1 echo | # divide oggetti separati da spazi in righe xargs echo | # unisce tutte le linee in un'unica riga grep -e | # estrae le righe contenenti cut -d: -f3 -| # estrae il terzo campo separato da : (file passwd, ecc.) awk '{ print $3 }' | # estrae il terzo campo separato da spazi bianchi awk -F'\t' '{ print $3 }' | # estrae il terzo campo separato da tabulazione col -bx | # rimuove il backspace ed espande le tabs in spazi expand -| # espande le tabs sort -u| # trova e rimuove i doppioni tr '\n' ' '| # concatena le righe in una riga unica tr '\r' ''| # rimuove il CR (carriage return, a capo) tr 'A-Z' 'a-z'| # converte il maiuscolo in minuscolo sed 's/^/# /'| # commenta ogni riga sed 's/\<.ext>//g'| # rimuove <.ext> sed -n -e 2p| # stampa la seconda riga head -n 2 -| # stampa le prime due righe tail -n 2 -| # stampa le ultime due righe 8.6.19. Pezzi di script ricorsivi --------------------------------- Il metodo seguente di agire ricorsivamente su ciascun file cercando corrispondenze `*.' assicura la gestione corretta dei nomi bizzarri dei file, tipo quelli con gli spazi, ed esegue il processo equivalente: * Shell loop (E' un input multiriga con `PS2="> "') [1]: for in *.; do if test -f "$"; then "$" fi done * combibnazione di `find' e `xargs': find . -type f -maxdepth 1 -name '*.' -print0 | \ xargs -0 -n 1 * un comando `find' con l'opzione `-exec': find . -type f -maxdepth 1 -name '*.' \ -exec '{}' \; * un breve script di shell con `find' e l'opzione `-exec': find . -type f -maxdepth 1 -name '*.' \ -exec sh -c " '{}' && echo 'successful'" \; [1] Se digitate tutto su una riga, dove aggiungere dei punti e virgola, "`;'", per marcare la fine dei comandi della shell. 8.6.20. Brevi follie in Perl script ----------------------------------- Sebbene tutti gli script Awk possano essere riscritti con Perl usando a2p(1), gli ad una riga di Awk sono convertiti meglio a script in perl ad una riga manualmente. Per esempio awk '($2=="1957") { print $3 }' | può essere scritto in uno dei seguenti modi: perl -ne '@f=split; if ($f[1] eq "1957") { print "$f[2]\n"}' | perl -ne 'if ((@f=split)[1] eq "1957") { print "$f[2]\n"}' | perl -ne '@f=split; print $f[2] if ( $f[1]==1957 )' | perl -lane 'print $F[2] if $F[1] eq "1957"' | Siccome tutti gli spazi tra gli argomenti di `perl' nelle righe sopra possono essere rimossi traendo vantaggio dalla conversione automatica tra numeri e stringhe in Perl: perl -lane 'print$F[2]if$F[1]eq+1957' | Vedere perlrun(1) per le opzioni da riga di comando. Per altri pazzi script in Perl, http://perlgolf.sourceforge.net può essere interessante. 8.6.21. Catturare il testo od un archivio delle ML da una pagina web -------------------------------------------------------------------- Il seguente comando legge la pagina web e la copia in un file di testo. Molto utile quando si copiano delle configurazioni dalla rete. $ lynx -dump http:// > Anche `links' e `w3m' possono essere usati, con piccole differenze nel rendering. Se si tratta di un archivio di una lista di messaggi, usate `munpack' per ottenere i contenuti mime dal testo. 8.6.22. Stampare bene una pagina Web ------------------------------------ Quanto segue stampa una pagina Web in un file o stampante PostScript. $ apt-get install html2ps $ html2ps | lpr Vedere Sezione 3.6.1, ``lpr'/`lpd''. Controllate anche i pacchetti `a2ps' e `mpage' per la creazione di file PostScript. 8.6.23. Stampare bene una pagina di manuale ------------------------------------------- Quanto segue stampa una pagina di manuale in un file o stampante PostScript. $ man -Tps | lpr $ man -Tps | mpage -2 | lpr 8.6.24. Unire due file Postscript o PDF --------------------------------------- Si possono unire due file Postscript o PDF. $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite \ -sOutputFile= -f $ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \ -sOutputFile= -f 8.6.25. Cronometrare un comando ------------------------------- Mostra il tempo utilizzato da un processo. # time >/dev/null real 0m0.035s # tempo sull'orologio a muro (tempo realmente passato) user 0m0.000s # tempo in modalità utente sys 0m0.020s # tempo in modalità kernel 8.6.26. Il comando `nice' ------------------------- Usate `nice' (dal pacchetto GNU `shellutils') per impostare il valore nice di un comando quando viene lanciato. `renice' (`bsdutils') o `top' possono dare il renice ad un processo. Un valore di nice di 19 rappresenta il processo più lento (priorità bassa); valori negativi sono "not-nice", con -20 che rappresenta un processo molto veloce (alta priorità). Solo il superuser può impostare valori di nice negativi. # nice -19 # molto nice # nice --20 # molto veloce Talvolta un valore estremo di nice fa più danni che bene al sistema. Usate questo comando con cautela. 8.6.27. Programmare gli eventi (`cron', `at') --------------------------------------------- Usate `cron' e `at' per programmare i task in Linux. Vedere at(1), crontab(5), crontab(8). Eseguite il comando `crontab -e' per creare o modificare un file crontab per impostare degli eventi regolarmente programmati. Ecco un esempio di file crontab: # usa /bin/sh per eseguire i comandi, non importa cosa dice /etc/passwd SHELL=/bin/sh # invia ogni output a `paul', non importa a chi appartiene crontab MAILTO=paul # Min Hour DayOfMonth Month DayOfWeek comando # esecuzione alle 00:05, ogni giorno 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 # esecuzione alle 14:15 il primo giorno del mese -- output inviato a paul 15 14 1 * * $HOME/bin/monthly # esecuzione alle 22:00 i giorni feriali (Lun-Ven) (1-5), annoia Joe. % per una nuova riga, l'ultimo % per cc: 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%.%% 23 */2 1 2 * echo "run 23 minutes after 0am, 2am, 4am ..., on Feb 1" 5 4 * * sun echo "run at 04:05 every sunday" # esecuzione alle 03:40 il primo lunedi di ogni mese 40 3 1-7 * * [ "$(date +%a)" == "Mon" ] && command -args Usate il comando `at' per programmare gli eventi che accadono una sola volta: $ echo ''| at 3:40 monday 8.6.28. Scambio di console con `screen' --------------------------------------- Il programma `screen' vi permette di far girare terminali virtuali multipli ciascuno con la propria shell interattiva, su un singolo terminale fisico, o su una finestra di emulazione di terminale. Anche se usate le console virtuali di Linux o finestre xterm multiple, vale comunque la pena di esplorare `screen' per la sua ricchezza di opzioni, che includono * storico per lo scrollback, * copia-incolla * registrazione dell'output, * digraph entry, e * l'abilità di _staccare_ un'intera sessione di `screen' dal vostro terminale e di riattacarla in seguito. 8.6.28.1. Scenario: accesso remoto ---------------------------------- Se accedete frequentemente ad una macchina Linux da terminale remoto o tramite un programma di terminale VT100,, `screen' renderà la vostra vita molto più semplice con la funzione _detach_. 1. Supponiamo che siate connessi mediante una connessione dialup e che state conducendo una sessione di `screen' con editors e altri programmi aperti su molte finestre. 2. Improvvisamente dovete abbandonare il terminale, ma non volete perdere tutto il lavoro alla deconnessione. 3. Basta digitare `^A d' per _staccare_ la sessione, poi deconnettersi. (Oppure, più veloce ancora, digitate `^A DD' per dire a `screen' di staccare la sessione e deconnettersi da solo.) 4. Quando vi riconnettete di nuovo, date il comando `screen -r', e `screen' magicamente _riattaccherà_ tutte le finestre che avevate aperto. 8.6.28.2. Comandi tipici di `screen' ------------------------------------ Una volta lanciato `screen', tutto l'input della tastiera viene indirizzato alla finestra corrente, tranne il tasto di comando, di default `^A'. Tutti i comandi per `screen' vengono dati premendo `^A' più un tasto singolo [più alcuni parametri]. Comandi utili: ^A ? mostra una schermata di aiuto (mostra i comandi da tastiera) ^A c crea una nuova finestra e passa ad essa ^A n va alla finestra successiva ^A p va alla finestra precedente ^A <0> va alla finestra numero <0> ^A w mostra una lsta di finestre ^A a manda un Ctrl-A alla finestra corrente come input da tastiera ^A h scrive una copia della finestra corrente su file ^A H inizia/termina la registrazione della finestra corrente su file ^A ^X blocca il terminale (protetto da password) ^A d stacca la sessione dal terminale ^A DD stacca la sessione ed esce Questo è solo un piccolo assaggio dei comandi e caratteristiche di `screen'. Se c'è qualcosa che volete che `screen' faccia, è probabile che lo sappia fare! Vedere screen(1) per i dettagli. 8.6.28.3. Backspace e/o Ctrl-H durante una sessione di `screen' --------------------------------------------------------------- Se notate che il backspace e/o Ctrl-H non funzionano appropriatamente mentre state facendo girare `screen', aprite `/etc/screenrc', trovate la riga bindkey -k kb stuff "\177" e commentatela (cioè, aggiungete "#" come primo carattere). 8.6.28.4. Programma equivalente a `screen' per X ------------------------------------------------ Vedetevi `xmove'. Vedere xmove(1). 8.6.29. Testare la rete: le basi -------------------------------- Installate i pacchetti `netkit-ping', `traceroute', `dnsutils', `ipchains' (per Kernel 2.2), `iptables' (per Kernel 2.4), e `net-tools' e: $ ping # prova la connessione internet $ traceroute # traccia i pacchetti IP $ ifconfig # prova la configurazione dell'host $ route -n # prova la configurazione di routing $ dig <[@dns-server.com] host.dom [{a|mx|any}]> |less # controlla i record DNS di tramite # per <{mx|any}> record $ ipchains -L -n |less # controlla il packet filter (kernel 2.2) $ iptables -L -n |less # controlla il packet filter (kernel 2.4) $ netstat -a # scopre tutte le porte aperte $ netstat -l --inet # trova le porte in ascolto $ netstat -ln --tcp # trova le porte tcp in ascolto (numerico) 8.6.30. Eliminare la posta dallo spool locale --------------------------------------------- Per eliminare la posta: # exim -q # elimina la posta in attesa # exim -qf # elimina tutta la posta # exim -qff # elimina persino la posta "congelata" `-qff' può essere migliore come opzione per lo script `/etc/ppp/ip-up.d/exim'. Per Sarge, sostituite `exim' con `exim4'. 8.6.31. Rimuovere la posta congelata dallo spool locale ------------------------------------------------------- Per rimuovere la posta bloccata dallo spool locale assieme al messaggio di errore nell'invio: # exim -Mg `mailq | grep frozen | awk '{ print $3 }'` Per Sarge, sostituite `exim' con `exim4'. 8.6.32. Riinviare il contenuto delle caselle di posta ----------------------------------------------------- Se la vostra directory home è piena e `procmail' non è riuscito ad inviare la posta, dovete inviarla a mano alle varie caselle di posta della directory home, da `/var/mail/'. Dopo aver fatto spazio nella vostra directory home, lanciate: # /etc/init.d/exim stop # formail -s procmail # /etc/init.d/exim start Per Sarge, sostituite `exim' con `exim4'. 8.6.33. Ripulire il contenuto di un file ---------------------------------------- Per ripulire un file dal suo contenuto, come ad esempio un file di log, non usate `rm' per cancellarlo, e poi crearne un nuovo vuoto, poichè ci potrebbero essere ancora degli accessi al file nell'intervallo fra i comandi. Quanto segue è il modo sicura di ripulire un file dal suo contenuto. $ :> 8.6.34. File fantoccio ---------------------- I comandi seguenti creano dei file fantoccio o vuoti: $ dd if=/dev/zero of= bs=1k count=5 # 5KB di zeri $ dd if=/dev/urandom of= bs=1M count=7 # 7MB di contenuto casuale $ touch # crea un file di 0B (se il file esiste, aggiorna mtime) Per esempio, i seguenti comandi eseguiti dalla shell del boot floppy Debian cancelleranno tutto il contenuto del disco rigido `/dev/hda'. # dd if=/dev/urandom of=/dev/hda ; dd if=/dev/zero of=/dev/hda 8.6.35. `chroot' ---------------- Il programma `chroot', chroot(8), ci permette di far girare istanze diverse dell'ambiente GNU/Linux su un sistema singolo e simultaneamente senza dover fare il reboot. Si può far girare un programma che utilizza molta memoria come `apt-get' o `dselect' su una macchina host mentre si monta via NFS una macchina satellite sull'host in lettura/scrittura e con il chroot point che agisce come punto di montaggio della macchina satellite. 8.6.35.1. Far girare versioni diverse di Debian con `chroot' ------------------------------------------------------------ Si può creare facilmente un ambiente chroot Debian tramite il comando `debootstrap' in Woody. Per esempio, per creare Sid sotto chroot in mentre si ha a disposizione un accesso veloce ad Internet: main # cd / ; mkdir main # debootstrap sid ... guardatelo mentre si scarica l'intero sistema main # echo "proc-sid /proc proc none 0 0" >> /etc/fstab main # mount proc-sid /proc -t proc main # cp /etc/hosts /etc/hosts main # chroot /bin/bash chroot # cd /dev; /sbin/MAKEDEV generic ; cd - chroot # apt-setup # set-up /etc/apt/sources.list chroot # vi /etc/apt/sources.list # punta su unstable chroot # dselect # potete usare aptitude, installate mc e vim :-) A questo punto dovreste avere un sistema Debian completo e funzionante, dove giocare senza paura di danneggiare la vostra installazione Debian principale. Il trucco di `debootstrap' può anche essere usato per installare la Debian su un sistema senza usare il disco di installazione Debian ma uno di una qualsiasi altra distribuzione GNU/Linux. Vedere http://www.debian.org/releases/stable/i386/apcs04. 8.6.35.2. Impostare il login per `chroot' ----------------------------------------- Digitare `chroot /bin/bash' è semplice, ma tiene in giro ogni sorta di variabile d'ambiente che magari non vorreste, inoltre ha altri problemi. Un approccio sicuramente migliore è di lanciare un altro processo di login su un terminale virtuale separato, da dove fare direttamente il login in chroot. Dato che su un sistema Debian standard da `tty1' a `tty6' girano le consoles Linux e su `tty7' ci gira il X Window System, impostiamo per esempio `tty8' per una console "chrooted". Dopo aver creato il sistema chroot come descritto in Sezione 8.6.35.1, `Far girare versioni diverse di Debian con `chroot'', digitate dalla shell di root del sistema principale: main # echo "8:23:respawn:/usr/sbin/chroot "\ "/sbin/getty 38400 tty8" >> /etc/inittab main # init q # ricarica init 8.6.35.3. Impostare X per `chroot' ---------------------------------- Volete far girare gli ultimissimi X e GNOME con sicurezza nel vostro chroot? Ciò è interamente possibile! Il seguente esempio farà girare GDM sul terminale virtuale `vt9'. Per prima cosa installate un sistema chroot usando il metodo descritto in Sezione 8.6.35.1, `Far girare versioni diverse di Debian con `chroot''. Da root del sistema principale, copiate i file chiave di configurazione nel sistema chroot. main # cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4 main # chroot # od usate la console di chroot chroot # cd /dev; /sbin/MAKEDEV generic ; cd - chroot # apt-get install gdm gnome x-window-system chroot # vi /etc/gdm/gdm.conf # date s/vt7/vt9/ nella sezione [servers] chroot # /etc/init.d/gdm start Qui `/etc/gdm/gdm.conf' è stato modificato per lanciare la console virtuale da `vt7' a `vt9'. A questo punto potete andare facilmente avanti e indietro tra gli ambienti X completi del vostro sistema chroot e principale semplicemente saltando fra i terminali virtuali; p.es. usando Ctrl-Alt-F7 e Ctrl-Alt-F9. Buon divertimento! [FIXME] Add a comment and link to the init script of the chrooted gdm. 8.6.35.4. Far girare altre distribuzioni con `chroot' ----------------------------------------------------- Si può creare facilmente un ambiente chroot con un'altra distribuzione. Installate un sistema in una o più partizioni separate mediante l'installer dell'altra distribuzione. Se la sua partizione di root è in `'. main # cd / ; mkdir main # mount -t ext3 main # chroot /bin/bash Il resto è simile a Sezione 8.6.35.1, `Far girare versioni diverse di Debian con `chroot'', Sezione 8.6.35.2, `Impostare il login per `chroot'', e Sezione 8.6.35.3, `Impostare X per `chroot''. 8.6.35.5. Compilare i pacchetti con `chroot' -------------------------------------------- Esiste un pacchetto chroot più specializzato, `pbuilder', che costruisce un sistema chroot e compila un pacchetto al suo interno. E' un sistema ideale per controllare se le dipendenze di compilazione di un pacchetto sono corrette e per essere certi che dipendenze non necessarie o sbagliate non esistano nel pacchetto risultante. 8.6.36. Come controllare i collegamenti --------------------------------------- potete controllare se due file sono lo stesso file con due collegamenti tramite: $ ls -li 8.6.37. `mount' il file immagine del disco rigido ------------------------------------------------- Se `' contiene l'immagine del contenuto di un disco rigido ed il disco originale aveva una configurazione che dà = (bytes/settore) * (settori/cilindro), allora quanto segue lo monterà in `/mnt': # mount -o loop,offset= /mnt Notate cha molti dischi rigidi hanno 512 bytes/settore. 8.6.38. Samba ------------- Le basi per ottenere un file da Windows: # mount -t smbfs -o \ # monta i file Windows su Linux # smbmount \ -o "" # smbclient -L <192.168.1.2> # elenca le condivisioni su un computer I PC collegati tramite Samba possono essere controllati sotto Linux tramite: # smbclient -N -L | less # nmblookup -T "*" 8.6.39. Utilità per filesystem estranei --------------------------------------- Molti filesystem estranei hanno il supporto per il kernel Linux, per cui possono essere raggiunti semplicemente montando i dispositivi che li contengono. Per alcuni filesystem, esistono anche degli strumenti specializzati per accedervi senza montarne i dispositivi. Ciò si ottiene con programmi che girano nello user space, per cui il supporto specifico nel kernel per i filesystem non è necessario. * `mtools': per filesystem MSDOS filesystem (MS-DOS, Windows) * `cpmtools': per CP/M * `hfsutils': per HFS (Macintosh nativo) * `hfsplus': per HFS+ (moderno Macintosh) Per creare e controllare filesystem MS-DOS FAT, `dosfstools' è utile. 8.7. Errori tipici da notare ---------------------------- Ecco alcuni esempi di azioni pericolose. Il loro impatto negativo negativo verrà potenziato se state usando un account privilegiato: `root'. 8.7.1. `rm -rf .*' ------------------ In "`rm -rf .*'", "`.*'" si espande ad includere "`.'" e "`..'", e se vi capita di avere i privilegi in scrittura sulla directory superiore, finirete col rimuovere anche tutte le directory _vicine_ alla directory corrente. * "`rm -rf .'" : rimuove tutto nella directory corrente e la directory stessa. * "`rm -rf *'" : rimuove tutti i file non-punto e le directory non-punto nella directory corrente * "`rm -rf .[^.]*'" : rimuove tutti i file punto e directory punto nella directory corrente. * "`rm -rf .*'" : rimuove tutto nella directory superiore e la directory stessa. 8.7.2. `rm /etc/passwd' ----------------------- Perdere dei file importanti come `/etc/passwd' a causa della propria stupidità è pesante. Il sistema Debian ne effettua dei backup regolari in `/var/backups/'. Quando recuperate questi file, potreste impostare manualmente i giusti permessi. # cp /var/backups/passwd /etc/passwd # chmod 644 /etc/passwd Vedere anche Sezione 6.3.4, `Recuperare i dati sulla selezione dei pacchetti'. ------------------------------------------------------------------------------- 9. Messa a punto del sistema Debian ----------------------------------- Questo capitolo descrive solo i principi basilari della configurazione del sistema tramite l'interfaccia a carattere. Un prerequisito di questo capitolo è aver letto Capitolo 3, `Suggerimenti per l'installazione di un sistema Debian'. Per coloro interessati alla sicurezza, si raccomanda caldamente di leggere il Securing Debian Manual (http://www.debian.org/doc/manuals/securing-debian-howto/), che si può anche reperire come pacchetto `harden-doc'. 9.1. Inizializzazione del sistema --------------------------------- debian; usa il sistema di script System V. Vedere Sezione 2.4.1, `Il programma `init'' per un'introduzione. 9.1.1. Personalizzare gli script di inizializzazione ---------------------------------------------------- Il modo più semplice di controllare il comportamento di uno script di inizializzazione è modificando i compiti assegnati alle variabili d'ambiente nel file con lo stesso nome dello script nella directory `/etc/default/*'. [1] Per esempio, `/etc/default/hotplug' può essere utlizzato per controllare il comportamento di `/etc/init.d/hotplug'. Il file `/etc/init.d/rcS' può essere utilizzato per personalizzare i default al boot per `motd', `sulogin', etc. Se non riuscite ad ottenere il comportamento che volete modificando dette variabili, potete allora modificare gli script stessi: sono tutti file di configurazione. [1] I file in `/ect/default/' contengono _solo_ i compiti delle variabili d'ambiente. Ciascun file è così strettamente correlato allo script corrispondente che questi compiti scavalcano qualsiasi impostazione predefinita della variabile nello script. La scelta del nome della directory è peculiare a Debian (http://lists.debian.org/debian-devel/2003/debian-devel-200308/msg02114.html). E' grosso modo l'equivalente di `/etc/sysconfig' di Red Hat ed altre distribuzioni. 9.1.2. Personalizzare i file di log ----------------------------------- La modalità del log del sistema può essere configurata tramite `/etc/syslog.conf'. Date un'occhiata al pacchetto `colorize' per un programma che assegna colori differenti ai vari file di log. Vedere anche syslogd(8) e syslog.conf(5). 9.1.3. Ottimizzare l'accesso hardware ------------------------------------- Esistono alcune configurazioni hardware la cui ottimizzazione e lasciata da Debian alla cura dell'amministratore di sistema. * `hdparm' * Ottimizzazione dell'accesso all'hard disk. Molto efficiente. * Pericolosa. Dovete leggere prima hdparm(8). * `hdparm -tT ' per provare la velocità di accesso al disco. * `hdparm -q -c3 -d1 -u1 -m16 ' per accelerare un moderno sistema IDE. (Può essere pericoloso.) * `setcd' * Ottimizzazione dell'accesso al lettore CD * `setcd -x <2>' per rallentare a velocità <2>x. * Vedere setcd(1). * `setserial' * Collezione di strumenti per la gestione delle porte seriali. * `scsitools' * Collezione di strumenti per la gestione di hardware SCSI. * `memtest86' * Collezione di strumenti per la gestione dell'hardware di memoria. * `hwtools' * Collezione di strumenti per la gestione dell'hardware a basso livello. * `irqtune': modifica la priorità dell'IRQ delle periferiche per concedere alte priorità e servizi veloci alle periferiche (tipo porte seriali, modem) che ne hanno bisogno. In tal modo è possibile ottenere accelerazioni 3X del throughput delle seriali/modem. * `scanport': effettua la scansione dello spazio I/O da 0x100 a 0x3ff cercando periferiche ISA installate. * `inb': un trucchetto piccolo e veloce che legge una porta I/O port e ne mostra il valore in esadecimale e binario. * `schedutils' * Utilità del Linux scheduler. * sono compresi `taskset', `irqset', `lsrt', e `rt'. * Insieme a `nice' e `renice' (non incluso), permettono un controllo completo dei parametri di scheduling dei processi. Montare un filesystem con l'opzione `noatime' è anch'esso molto efficace nel velocizzare l'accesso in lettura ai file. Vedere fstab(5) e mount(8). Alcuni componenti hardware possono essere messi a punto direttamente dal kernel stesso, tramite il filesystem proc. Vedere Sezione 7.3, `Mettere a punto il kernel tramite il filesystem proc'. Esistono molte utilità di configurazione hardware-specifiche in Debian. Molte di loro sono specifiche per i bisogni dei PC portatili. Ecco alcuni pacchetti interssanti disponibili in Debian: * `tpconfig' - Programma per la configurazione del touchpad * `apmd' - Utilità per Advanced Power Management (APM) * `acpi' - mostra le informazioni sui device ACPI * `acpid' - Utilità per usare ACPI * `lphdisk' - prepara la partizione per l'ibernazione per i Phoenix NoteBIOS * `sleepd' - mette il portatile in sleep durante l'inattività * `noflushd' - permette il rallentamento dei dischi inattivi * `big-cursor' - cursori del mouse più grandi per X * `acme' - Abilita i "multimedia buttons" dei portatili * `tpctl' - Strumenti di configurazione hardware per IBM ThinkPad * `mwavem' - Supporto per i modem Mwave/ACP * `toshset' - Accede a gran parte delle interfacce per l'hardware dei portatitili Toshiba * `toshutils' - Toshiba laptop utilities * `sjog' - Programma per usare il "Jog Dial" dei portatili Sony Vaio * `spicctrl' - Programma per il controllo della luminosità dello schermo dei Sony Vaio ACPI è un'infrastruttura più nuova di APM per la gestione dei profili energetici. Alcuni di questi pacchetti richiedono speciali moduli del kernel. In molti casi sono già inclusi nei sorgenti più recenti. In caso di problemi potreste dover applicare da voi l'ultima patch. 9.2. Controllare gli accessi ---------------------------- 9.2.1. Restrizione tramite PAM ------------------------------ PAM (Pluggable Authentication Modules) forniscono il controllo sul login. /etc/pam.d/* # file di controllo PAM /etc/pam.d/login # file di controllo PAM per il login /etc/security/* # parametri dei moduli PAM /etc/securetty # controlla il login di root da console (login) /etc/login.defs # controlla i vari comportamenti del login (login) Se volete dei terminali senza password, ma insicuri, modificate a vostro rischio e pericolo il contenuto di `/etc/pam.d/login' come segue. #auth required pam_unix.so nullok auth required pam_permit.so Trucchetti simili possono essere applicati a `xdm', `gdm', ... , per un accesso senza password alla console X. Al contrario, se volete applicare una buona politica di password, installate `cracklib2' e modificate `/etc/pam.d/passwd' come segue. password required pam_cracklib.so retry=3 minlen=6 difok=3 Le password utilizzabili solo una volta per l'attivazione degli account possono anche essere utili. Per fare ciò, usate il comando `passwd' con l'opzione `-e'. Vedere passwd(1). Il numero massimo di processi può essere impostato con `ulimit -u 1000' nella Bash shell oppure tramite `/etc/security/limits.conf' da PAM. Altri parametri, come `core' possono essere impostati allo stesso modo. Il valore iniziale di `PATH' può essere impostato tramite `/etc/login.defs' prima che intervenga lo script di inizializzazione della shell. La documentazione per PAM è contenuta nel pacchetto `libpam-doc'. La _Linux-PAM System Administrator's Guide_ copre gli aspetti della configurazione di, quali moduli sono disponibili, ecc. La documentazione comprende, inoltre, la _The Linux-PAM Application Developers' Guide_ e la _The Linux-PAM Module Writers' Guide_. 9.2.2. "Why GNU `su' does not support the `wheel' group" (Perchè GNU `su' non supporta il gruppo `wheel') ---------------------------------------------------------------------------- Questa è la famosa frase al termine della vecchia pagina di `info su', di Richard M. Stallman. Per non preoccuparsi: l'attuale `su' in Debian usa PAM, così che potete ridurre la capacità di usare `su' a qualsiasi gruppo usando `pam_wheel.so' in `/etc/pam.d/su'. Quanto segue imposta il gruppo `adm' group di un sistema Debian come equivalente del gruppo `wheel' di BSD, permettendo `su' senza la password per i suoi membri. # configurazione anti-RMS in /etc/pam.d/su auth required pam_wheel.so group=adm # I membri del gruppo wheel possono dare su senza la password auth sufficient pam_wheel.so trust group=adm 9.2.3. Il significato dei vari gruppi ------------------------------------- Alcuni gruppi interessanti: * il gruppo `root' è il gruppo wheel di default per `su' se `pam_wheel.so' è utilizzato senza l'argomento `group='. * `adm' può leggere il file di log. * `cdrom' può essere usato localmente per fornire ad una serie di utenti l'accesso ad un drive CD-ROM. * `floppy' può essere usato localmente per fornire ad una serie di utenti l'accesso ad un drive floppy. * `audio' può essere usato localmente per fornire ad una serie di utenti l'accesso ad un device audio. * `src' è proprietario del codice sorgente, compresi i file in `/usr/src'. può essere usato localmente per fornire ad un utente la possibilità di modificare il codice sorgente del sistema. * `staff': la sua appartenenza è utile per personale di helpdesk o amministratori di sistema aggiunti, dando loro la possibilità di fare modifiche in `/usr/local' e di creare delle directory in `/home'. Per una lista completa, leggete la sezione "FAQ" del Securing Debian Manual (http://www.debian.org/doc/manuals/securing-debian-howto/), che può anche essere reperita come pacchetto `harden-doc' in Woody. Anche il nuovo pacchetto `base-passwd' (>3.4.6) contiene una lista autorevole: `/usr/share/doc/base-passwd/users-and-groups.html'. 9.2.4. `sudo' -- lavorare con maggiore sicurezza ------------------------------------------------ L'uso che faccio di `sudo' è fondamentalmente a protezione dalla mia stessa stupidità. Reputo l'uso di `sudo' un'alternativa migliore al continuo uso del sistema come root. Per voi le cose possono essere diverse. Installate `sudo' ed attivatelo impostando le opzioni in `/etc/sudoers (http://www.debian.org/doc/manuals/debian-reference/examples/)'. Controllate anche le caratteristiche del gruppo `sudo' in `/usr/share/doc/sudo/OPTIONS'. La configurazione di esempio fornisce ai membri del gruppo "staff" accesso a qualsiasi comando come root tramite `sudo' nonchè accesso ai membri di "src" a comandi selezionati come root, sempre tramite `sudo'. Il vantaggio di `sudo' è che richiede solo la password utente, e che l'attività e monitorizzata. E' un modo carino per dare un minimo di autorità ad un amministratore alle prime armi. Per esempio: $ sudo chown -R : . Ovviamente se conoscete la password di root (come la maggior parte degli utenti casalinghi) qualunque comando può essere eseguito come root da un account utente: $ su -c "shutdown -h now" Password: (So che dovrei restringere i privilegi dell'account admin in `sudo'. Dato che è il mio server casalingo, non me ne sono ancora preso la briga.) Per un programma differente che permetta agli utenti ordinari di eseguire comandi con privilegi di root, vedere il pacchetto `super'. 9.2.5. Controllare l'accesso ai servizi --------------------------------------- Il _super-server_ Internet `inetd', viene lanciato al boot da `/etc/rc2.d/S20inetd' (per RUNLEVEL=2), che è un collegamento simbolico a `/etc/init.d/inetd'. In breve, `inetd' permette il lancio di un demone per richiamarne altri, riducendo il carico sul sistema. Ogni volta che arriva la richiesta di un servizio, il suo protocollo ed il servizio vengono identificati guardando nel database contenuto in `/etc/protocols' e in `/etc/services'. `inetd' cerca, poi, un normale servizio Internet nel database `/etc/inetd.conf', oppure un servizio basato su Sun-RPC in `/etc/rpc.conf'. Per la sicurezza del sistema, accertatevi di disabilitare i servizi inutilizzati in `/etc/inetd.conf'. I servizi Sun-RPC devono essere attivi per il NFS ed altri programmi basati su RPC. Talvolta `inetd' non lancia il server interessato direttamente, ma lancia il wrapper del demone TCP/IP `tcpd' con il nome del server come argomento in `/etc/inetd.conf'. In questo caso `tcpd' lancia il server appropriato dopo aver registrato la richiesta e fatto alcuni controlli addizionali, utilizzando `/etc/hosts.deny' e `/etc/hosts.allow'. Se avete problemi con l'accesso remoto in un sistema Debian recente, commentate "ALL: PARANOID" in `/etc/hosts.deny', se esiste. Per i dettagli, vedere inetd(8), inetd.conf(5), protocols(5), services(5), tcpd(8), hosts_access(5), e hosts_options(5). Per maggiori informazioni su Sun-RPC, vedere rpcinfo(8) , portmap(8), e `/usr/share/doc/portmap/portmapper.txt.gz'. 9.2.6. Centralizzare l'autenticazione -- LDAP --------------------------------------------- Usate il Lightweight Directory Access Protocol (LDAP) Riferimenti: * OpenLDAP (http://www.openldap.org/) * OpenLDAP Admin Guide nel pacchetto `openldap-guide' * LDP: LDAP Linux HOWTO (http://www.tldp.org/HOWTO/LDAP-HOWTO/index.html) * LDP: LDAP Implementation HOWTO (http://www.tldp.org/HOWTO/LDAP-Implementation-HOWTO/index.html) * OpenLDAP, extensive use reports (http://portal.aphroland.org/~aphro/ldap-docs/ldap.html) * Open LDAP with Courier IMAP and Postfix (http://alinux.washcoll.edu/docs/plc/postfix-courier-howto.html) 9.3. Masterizzatori ------------------- I masterizzatori con interfaccia ATAPI/IDE sono di recente diventati un'opzione molto popolare. Rappresentano un supporto valido per il backup e l'archiviazione per l'utente casalingo che ha bisogno di capacità di < 640 MB. Per le informazioni più autorevoli, consultate il LDP CD-Writing-HOWTO (http://www.tldp.org/HOWTO/CD-Writing-HOWTO.html). 9.3.1. Introduzione ------------------- Primo, ogni danneggiamento di dati inviati al masterizzatore porterà ad un danno irreparabile del CD. Prendete il masterizzatore con il buffer più grande possibile. Se i soldi non sono un problema, prendetene uno con interfaccia SCSI. Se potete scegliere quale interfaccia IDE connettere, prendete quello su bus PCI (sulla scheda madre), piuttosto che su bus ISA (schede SB16, ecc.). etc.). Quando il masterizzatore è connesso su IDE, deve essere comandato dal driver IDE-SCSI, non dall'IDE-CD. Deve essere attivato anche il driver generico SCSI. Esistono due approcci per ottenere ciò, per i kernel delle moderne distribuzioni (aggiornato a Marzo 2001). Per il kernel 2.6, dovreste usare il driver ordinario IDE ed accedere al masterizzatore direttamente con il nome del device, tipo `/dev/hd'. In questo modo, potete usare il DMA. 9.3.2. Approccio 1: moduli + `lilo' ----------------------------------- Aggiungete la riga seguente a `/etc/lilo.conf' se state usando un kernel Debian standard. Se usate opzioni multiple, separatele da spazi: append="hd=ide-scsi ignore=hd" Dove la collocazione del masterizzatore, a cui si accede tramite il driver ide-scsi, è indicata da `hd', dove rappresenta uno dei seguenti: hda se master sulla prima porta IDE hdb se slave sulla prima porta IDE hdc se master sulla seconda porta IDE hdd se slave sulla seconda porta IDE hde ... hdh per un drive su porta IDE esterna, ATA66/100 Date i comandi seguenti per l'attivazione dopo la configurazione: # lilo # shutdown -h now 9.3.3. Approccio 2: ricompilare il kernel ----------------------------------------- Debian usa `make-kpkg' per creare il kernel. Usate il nuovo `--append_to_version' con make-kpkg per produrre più kernel. Vedere Capitolo 7, `Il kernel Linux su Debian'. Usate le seguenti impostazioni attraverso `make menuconfig': * bzImage * Escludete il driver IDE CD (non è obbligatorio, ma rende le cose più semplici) * Compilate ide-scsi e sg, direttamente nel kernel o come moduli 9.3.4. Procedure post-configurazione ------------------------------------ Il supporto del kernel per il CD-writer può essere attivato al boot con il seguente: # echo ide-scsi >>/etc/modules # echo sg >>/etc/modules # cd /dev; ln -sf scd0 cdrom L'attivazione manuale può essere fatta con: # modprobe ide-scsi # modprobe sg Dopo il reboot, potete controllarne l'installazione con: $ dmesg|less # apt-get install cdrecord # cdrecord -scanbus [Da Warren Dodge] Talvolta sorgono conflitti fra `ide-scsi' e `ide-cd' se ci sono sia un lettore che un masterizzatore nel sistema. Provate ad aggiungere la riga seguente al vostro `/etc/modutils/aliases', lanciando poi `update-modules', e facendo il reboot. pre-install ide-scsi modprobe ide-cd Ciò determina il caricamento del driver IDE prima di `ide-scsi'. Il driver IDE `ide-cd' prende il controllo del CD_ROM ATAPI---qualsiasi che non gli sia stato detto di _ignorare_. Ciò lascia solo i device ignorati al controllo di `ide-scsi'. 9.3.5. Il file CD-image (avviabile) ----------------------------------- Per creare un CD-ROM con files contenuti nella `target-directory/' come `cd-image.raw' (avviabile, con il formato Joliet TRANS.TBL abilitato; se non lo volete avviabile, togliete le opzioni `-b' e `-c'), inserite un boot floppy nel drive e, # dd if= # mkisofs -r -V -b -c -J -T \ -o Una trucco divertente è fare dei CD-ROM avviabili in DOS. Se una normale immagine DOS di un boot floppy è contenuta in `', il CD-ROM eseguirà il boot come se nel primo floppy drive (A:) ci fosse un floppy DOS. Più interessante potrebbe essere farlo con freeDOS. Il file CD-image può essere ispezionato montandolo sul device loop. # mount -t iso9660 -o ro,loop /cdrom # cd /cdrom # mc # umount /cdrom 9.3.6. Scrivere sul masterizzatore (R, RW): ------------------------------------------- Primo test con (in caso di velocità 2x) # nice --10 cdrecord -dummy speed=2 dev=0,0 Se tutto va bene, scrivete sul CD-R con # nice --10 cdrecord -v -eject speed=2 dev=0,0 Oppure, sul CD-RW con # nice --10 cdrecord -v -eject blank=fast speed=2 dev=0,0 Alcune periferiche CD-RW funzionano meglio con # nice --10 cdrecord -v blank=all speed=2 dev=0,0 seguito da # nice --10 cdrecord -v -eject speed=2 dev=0,0 Sono necessari due passaggi per prevenire i timeout SCSI durante la fase di blanking dall'interferire con la fase di masterizzazione. Il valore dell'argomento di `nice' può richiedere qualche aggiustamento. 9.3.7. Creare un file immagine di un CD --------------------------------------- Alcuni CD-R e CD commerciali hanno dei settori spuri alla fine, cosa che rende impossibile la copia tramite `dd' (il CD di Windows 98 è uno di questi). Il pacchetto `cdrecord' ha il comando `readcd'. Usatelo per copiare qualsiasi CD in un file immagine. Se è un disco di dati, montatelo ed eseguite `mount' per vedere le dimensioni reali. Dividete il numero ottenuto (in blocchi = 1024 bytes) per 2 per avere il numero reale di settori del CD (2048 bytes). Lanciate `readcd' con le opzioni ed usate l'immagine risultante per bruciare il CD-R/RW. # readcd dev=,, # select function 11 Impostate tutti e tre i parametri a 0 per la maggior parte dei casi. Talvolta il numero di settori dato da `readcd' è eccessivo! Utilizzate il numero ottenuto da un montaggio reale per i migliori risultati. Dovrebbe essere notato che l'uso di `dd' ha alcuni problemi se usato su CD-ROM. La prima esecuzione del comando `dd' può causare un messaggio di errore e produrre un'immagine del disco più piccola con perdita della coda. La seconda esecuzione di `dd' può produrre un'immagine più grande, con dati spuri attaccati alla fine su alcuni sistemi se le dimensioni dei dati non sono specificate. Solo la seconda esecuzione di `dd' con le dimensioni corrette dei dati specificate e senza espellere il CD dopo un messaggio di errore, sembra evitare questi problemi. Se, per esempio, le dimensioni dell'immagine mostrate da `df' sono di `46301184' blocchi, usate il comando seguente due volte per ottenere l'immagine corretta (queste sono mie informazioni empiriche): # dd if=/dev/cdrom of=cd.img bs=2048 count=$((46301184/2)) 9.3.8. CD con le immagini Debian -------------------------------- Per le informazioni più aggiornate sui CD Debian visitate il Sito Debian CD (http://www.debian.org/CD/). Se avete una connessione Internet veloce, potete prendere in considerazione l'installazione via rete usando: * alcune immagini floppy (http://www.debian.org/distrib/floppyinst). * una immagine minima su CD avviabile (http://www.debian.org/CD/netinst/). Se non avete una connessione veloce, considerate l'acquisto dei CD dai Venditori di CD (http://www.debian.org/CD/vendors/). Non sprecate banda scaricando i CD immagine standard a meno di non essere un tester di CD immagine (anche con il nuovo metodo jigdo). Un'mmagine degna di nota è KNOPPIX - Live Linux Filesystem On CD (http://www.knopper.net/knoppix/index-en.html). Questo CD farà il boot in un sistema Debian perfettamente funzionante senza installarsi sul disco rigido. 9.3.9. Backup del sistema su CD-R --------------------------------- Per copiare i file di configurazione chiave e di dati sul CD-R, usate lo script di "backup" backup (http://www.debian.org/doc/manuals/debian-reference/examples/). Vedete anche Sezione 8.3, `Copia ed archiviazione di una intera sottodirectory' e Sezione 8.4, `Backup differenziali e sincronizzazione dei dati'. 9.3.10. Copiare CD musicali su CD-R ----------------------------------- Non testato da me: # apt-get install cdrecord cdparanoia # cdparanoia -s -B # cdrecord dev=0,0,0 speed=2 -v -dao -eject defpregap=1 -audio *.wav oppure, # apt-get install cdrdao #disk at once # cdrdao read-cd --device /dev/cdrom --paranoia-mode 3 mio_cd # legge il cd # cdrdao write --device /dev/cdrom --speed 8 mio_cd # scrive un nuovo CD `cdrdao' esegue una copia conforme (senza pause, ecc...) 9.3.11. Masterizzare i DVD-R, DVD-RW e DVD+RW --------------------------------------------- Per masterizzare i DVD, avete due approcci: * Usate `growisofs' con `mkisofs'. * Ricompilate `cdrecord' con l'opzione dvd per creare un pacchetto locale come da `/usr/share/doc/cdrecord/README.DVD.Debian'. 9.4. X ------ L'ambiente grafico X è fornito da Xfree86 (http://www.xfree86.org/). Due sono le versioni principali del server X disponibili su un sistema Debian: Le serie di XFree86 Versione 3.3 (XF3) e XFree86 Versione 4.x (XF4) sono basate sulle specifiche X11R6 di X.Org (http://www.x.org/). Per le basi di X, fate riferimento a X(7), l'LDP XWindow-User-HOWTO (http://www.tldp.org/HOWTO/XWindow-User-HOWTO.html), ed il Remote X Apps mini-HOWTO (http://www.tldp.org/HOWTO/mini/Remote-X-Apps.html). Per una guida per l'utente Debian-specifica, leggete `/usr/share/doc/xfree86-common/FAQ.gz' fornito dal pacchetto `xfree86-common'. Questa contiene una interessante ed autorevole revisione dei problemi chiave di Branden Robinson. Sezione 9.4.3, `X server' è un programma su host locale che mostra una finestra X e/o un desktop sul monitor di un utente (CRT, LCD) ed accetta input da tastiera e mouse. Sezione 9.4.4, `X client' è un programma su un host (locale o remoto) su cui girano applicazioni compatibili con X window. Queste definizioni ribaltano il concetto normale di "server" e "client". Molteplici sono i modi di far accettare al "server X" (lato schermo) connessioni remote da un "client X" (lato applicazione): * il metodo `xhost' * meccanismo della lista degli host (molto poco sicuro). * protocollo non criptato (soggetto ad attacchi tipo eavesdropping). * Se possibile, non utilizzatelo. * Vedere Sezione 9.4.7, `Connessioni ad un X server remoto -- `xhost'' and xhost(1x). * il metodo _`xauth'_ * meccanismo MIT dei cookie magici (non sicuro, ma migliore di `xhost'). * protocollo non criptato (soggetto ad attacchi tipo eavesdropping). * usatelo solo per connessioni locali, dato che chiede meno CPU di `ssh -X'. * Vedere Sezione 9.4.12, `Diventare root in X' e xauth(1x). * `xdm', `wdm', `gdm', `kdm', ... * meccanismo MIT dei cookie magici (non sicuro, come `xauth'). * Vedere xdm(1x) e Xsecurity(7) per le basi del controllo degli accessi allo schermo X. * Vedere wdm(1x), gdm(8), e kdm.options(5) per maggiori informazioni, se sono installati. * Vedere Sezione 2.4.3, `Personalizzare i runlevel' su come disabilitare `xdm' per avere una cosole Linux al boot senza rimuovere il pacchetto `xdm'. * il metodo _`ssh -X'_ * meccanismo del port forwarding tramite shell sicura (_sicuro_). * procollo criptato (uno spreco di risorse se usato localmente). * usatelo per connessioni remote. * Vedere Sezione 9.4.8, `Connessioni ad un X server remoto -- `ssh''. Tutti i metodi di connessione remota, tranne `ssh', richiedono l'abilitazione della connessione TCP/IP sul server X. Vedere Sezione 9.4.6, `Connessione TCP/IP ad X'. 9.4.1. Pacchetti del sistema X ------------------------------ Per facilitare l'installazione di X esistono alcuni (meta)pacchetti in Woody. `x-window-system-core' Questo metapacchetto fornisce i componenti essenziali per una singola postazione con l' X Window System. Fornisce le librerie X, un X server `xserver-xfree86', una serie di font ed un gruppo di X client base e di utilità. `x-window-system' Fornisce in sostanza tutti i componenti dell' X Window System così come sono stati sviluppati dall' XFree86 Project, ed una serie di programmi accessori storicamente popolari. (Da notare che dipende da `x-window-system-core', `twm', e `xdm', cioè non è necessario installare `x-window-system-core' se installate questo.) `xserver-common-v3' Files ed utilità comuni agli X server XFree86 3.x (XF3) `xserver-*' Pacchetti supplementari per XF3 server per supportare hardware non supportato dal nuovo XF4 server per qualsiasi ragione. Alcune vecchie ATI mach64 non sono supportate in XF4, alcune schede video si piantano brutalmente nella versione di XF4 per Woody, ecc. (Per una lista di pacchetti disponibili, usate `apt-cache search xserver-|less'. Tutti questi XF3 server dipendono da `xserver-common-v3'.) Per la maggior parte dei casi il pacchetto da installare è `x-window-system'. (Se volete il login da console, assicuratevi di diasbilitare `xdm' come descritto in Sezione 8.1.4, `"Voglio disabilitare X al boot!"'.) 9.4.2. Pacchetti per il riconoscimento hardware per X ----------------------------------------------------- Per abilitare il riconoscimento dell' hardware durante la fase di configurazione di X, installate i seguenti pacchetti prima di installare X: * `discover' --- sistema di identificazione hardware. * `mdetect' --- Strumento di autoidentificazione del mouse. * `read-edid' --- strumento per la raccoglta di informazioni sull'hardware per monitor VESA PnP. 9.4.3. X server --------------- Vedere XFree86(1x) per informazioni sull' X server. Invocare l' X server da una console locale: $ startx -- : p.es.: $ startx -- :1 vt8 -bpp 16 ... parte su vt8 connesso ao localhost:1 in modalità 16 bpp Gli argomenti dati dopo `--' sono per l' X server. Notate che, quando si usa uno script `~/.xserverrc' per la personalizzazione dell'avvio dell' X server, bisogna essere certi di `exec' l' X server reale. Non fare ciò può causare rallentamenti nell'avvio e nell'uscita del server. Per esempio: #!/bin/sh exec /usr/bin/X11/X -dpi 100 -nolisten tcp 9.4.3.1. Configurare l' X server (versione 4) --------------------------------------------- Per (ri-)configurare l' XF4 server, # dpkg-reconfigure --priority=low xserver-common # dpkg-reconfigure --priority=low xserver-xfree86 genererà il file `/etc/X11/XF86Config-4' e configurerà X usando lo script `dexconf'. 9.4.3.2. Configurare l' X server (versione 3) --------------------------------------------- Per (ri-)configurare l' X3 server, # dpkg-reconfigure --priority=low xserver-common-v3 # dpkg-reconfigure --priority=low xserver-mach64 genererà il file `/etc/X11/XF86Config' e configurerà X usando lo script `xf86config-v3'. 9.4.3.3. Configurazione manuale dell' X server ---------------------------------------------- Per aggiungere delle personalizzazioni utente a `/etc/X11/XF86Config-4', _non modificate il file di configurazione compreso fra il testo_: ### BEGIN DEBCONF SECTION [snip] ### END DEBCONF SECTION Invece, _aggiungete le personalizzazioni prima del testo_. Per esempio, per usare una scheda video personalizzata, aggiungete qualcosa di simile al testo seguente all' _inizio_ del file: Section "Device" Identifier "Custom Device" Driver "ati" Option "NoAccel" EndSection Section "Screen" Identifier "Custom Screen" Device "Custom Device" Monitor "Generic Monitor" DefaultDepth 24 Subsection "Display" Depth 8 Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubsection Subsection "Display" Depth 16 Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubsection Subsection "Display" Depth 24 Modes "1280x960" "1152x864" "1024x768" "800x600" "640x480" EndSubsection EndSection Section "ServerLayout" Identifier "Custom" Screen "Custom Screen" InputDevice "Generic Keyboard" "CoreKeyboard" InputDevice "Configured Mouse" "CorePointer" EndSection Per Sarge (`testing' al momento di scrivere), se volete mantenere le personalizzazioni dell'utente a `/etc/X11/XF86Config' attraverso gli aggiornamenti, lanciate da root il comando seguente: # cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.custom # md5sum /etc/X11/XF86Config-4 > /var/lib/xfree86/XF86Config-4.md5sum # dpkg-reconfigure xserver-xfree86 Per ottenere un _abbellimento dei caratteri_, dovete modificare `/etc/X11/XF86Config-4' come descritto in Sezione 9.4.13, `Font TrueType in X'. Controllate anche le altre parti della vostra confiurazione di X. Impostazioni errate per il monitor possono dare più mal di testa dei caratteri brutti, quindi assicuratevi che il refresh rate sia il più alto che il vostro monitor possa gestire (85 Hz è ottimo, 75 Hz buono, 60 Hz doloroso). 9.4.4. X client --------------- La maggior parte dei programmi X client possono essere lanciati con un comando tipo questo: client $ xterm -geometry 80x24+30+200 -fn 6x10 -display :0 & Dove gli argomenti opzionali vogliono dire: * `-geometry x++': le dimensioni iniziali e la posizione della finestra. * `-fn ': il font da usare per il testo. `' può essere: * a14: Font di grandezza normale * a24: Font di grandezza aumentata * ... (controllate i font disponibili con `xlsfont'.) * `-display ': il nome dell' X server da usare. `' può essere: * `:' significa schermo `' sul display `' dell' host `'; l' X server per questo display è in ascolto sulla porta TCP 6000+D. * `/unix:' significa schermo `' sul display dell' host `'; l' X server per questo display è in ascolto sullo UNIX domain socket `/tmp/.X11-unix/XD' (in tal modo è raggiungibile solo da `'). * `<:D.S>' è equivalente a `/unix:', dove `' è il nome dell'host locale. Il `' predefinito per il programma X client program (lato applicazione) può essere impostato tramite la variabile d'ambiente DISPLAY. Per esempio, prima di lanciare un programma X client l'esecuzione di uno dei seguenti comandi permette ciò: $ export DISPLAY=:0 # il predefinito, macchina locale, utilizzando il primo schermo X $ export DISPLAY=:0.2 $ export DISPLAY=localhost:0 Il suo lancio può essere personalizzato tramite `~/.xinitrc'. Per esempio: xrdb -load $HOME/.Xresources xsetroot -solid gray & xclock -g 50x50-0+0 -bw 0 & xload -g 50x50-50+0 -bw 0 & xterm -g 80x24+0+0 & xterm -g 80x24+0-0 & twm Come descritto in Sezione 9.4.5.1, `Personalizzare le X session', ciò scavalca ogni normale esecuzione di `Xsession', quando lanciato da `startx'. Usate questo approccio solo come ultima risorsa. Vedere xsetroot(1x), xset(1x), e Sezione 9.4.10, `X resources'. 9.4.5. Le X session ------------------- Una X session (X server + X client) può essere lanciata da: * `startx': script wrapper per `initx' per lanciare l' X server e client dalla console di Linux. Se `~/.xinitrc' non esiste, `/etc/X11/Xsession' viene lanciato tramite `/etc/X11/xinit/xinitrc'. * `xdm', `gdm', `kdm', o `wdm': demoni di X display manager per lanciare l' X server e client e per controllare il login da un'interfaccia grafica. `/etc/X11/Xsession' viene eseguito direttamente. Si può avere l'accesso alla console come da Sezione 8.1.4, `"Voglio disabilitare X al boot!"'. 9.4.5.1. Personalizzare le X session ------------------------------------ Lo script di inizializzazione predefinito, `/etc/X11/Xsession' è, in effetti, una combinazione di `/etc/X11/Xsession.d/50xfree86-common_determine-startup' e di `/etc/X11/Xsession.d/99xfree86-common_start'. L'esecuzione di `/etc/X11/Xsession' viene in qualche modo influenzata da `/etc/X11/Xsession.options' ed è fondamentalmente l'esecuzione del programma che viene trovato per primo nella seguente lista dal comando `exec': 1. `~/.xsession' o `~/.Xsession', se è definito. 2. `/usr/bin/x-session-manager', se è definito. 3. `/usr/bin/x-window-manager', se è definito. 4. `/usr/bin/x-terminal-emulator', se è definito. L'esatto significato di questi comandi è determinato dal sistema alternativo Debian descritto in Sezione 6.5.3, `Comandi alternativi'. Per esempio: # update-alternatives --config x-session-manager ... oppure # update-alternatives --config x-window-manager Per rendere qualsiasi X window manager quello predefinito mentre si mantengono installati i session manager di GNOME e KDE, sostituite `/etc/X11/Xsession.d/50xfree86-common_determine-startup' con quello allegato al secondo bug report in http://bugs.debian.org/168347 (Spero che venga presto incluso.) e modificate `/etc/X11/Xsession.options' come segue per disabilitare l' X session manager: # /etc/X11/Xsession.options # # configuration options for /etc/X11/Xsession # See Xsession.options(5) for an explanation of the available options. # Default enabled allow-failsafe allow-user-resources allow-user-xsession use-ssh-agent # Default disabled (enable them by uncommenting) do-not-use-x-session-manager #do-not-use-x-window-manager Senza le summenzionate modifiche al sistema, `gnome-session' e `kdebase' sono i pacchetti che contengono questi X session manager. Rimuovendoli si permette all'X window manager preferito di essere quello predefinito. (Idee migliori?) Su un sistema in cui `/etc/X11/Xsession.options' contiene una riga `allow-user-xsession' non preceduta da altri caratteri, qualsiasi utente che definisse un proprio `~/.xsession' o `~/.Xsession' sarebbe in grado di personalizzare le azioni di `/etc/X11/Xsession'. L'ultimo comando nel file `~/.xsession' dovrebbe essere sotto forma di `exec ' per lanciare il vostro X window/session manager preferito. Un buon esempio del file `~/.xsession' si trova in `/usr/share/doc/xfree86-common/examples/xsession.gz'. Io lo uso per impostare il window manager, accesso allo schermo e lingua per ciascun utente. Vedere Sezione 9.4.5.2, `Lanciare una X session per un utente', Sezione 9.4.12, `Diventare root in X', e Sezione 9.7.9, `Esempio per un sistema multilingue per X window system'. Se volete avere lanciare automaticamente parecchi programmi X client, guardate gli esempi di Sezione 9.4.4, `X client' ed invocateli da `~/.xsession' invece che da `~/.xinitrc'. Risorse addizionali di X specifiche per utente possono essere inserite in `~/.Xresources'. Vedere Sezione 9.4.10, `X resources'. Mappature del mouse e della tastiera specifiche per ciascun utente in X possono essere definite nello script di lancio dell'utente. Vedere Sezione 9.4.11, `Mappatura della tastiiera e dei tasti del puntatore in X'. 9.4.5.2. Lanciare una X session per un utente --------------------------------------------- Seguendo il principio descritto in Sezione 9.4.5.1, `Personalizzare le X session', X session/window manager specifici per l'utente possono essere attivati installando il pacchetto indicato ed impostando il contenuto alla fine del file `~/.xsession' come segue. (Amo `blackbox'/`fluxbox' per lo stile semplice e la velocità.): * default X session manager. * Vedere Sezione 6.5.3, `Comandi alternativi'. * `exec /usr/bin/x-session-manager' * default X window manager. * Vedere Sezione 6.5.3, `Comandi alternativi'. * `exec /usr/bin/x-window-manager' * GNOME session manager. (caricato) * Installare il pacchetto: `gnome-session' * `exec /usr/bin/gnome-session' * KDE session manager. (caricato) * Installare il pacchetto: `kdebase' (oppure `kdebase3' per KDE3) * `exec /usr/bin/kde2' * Blackbox window manager. (leggero). * Installare il pacchetto: `blackbox' * `exec /usr/bin/blackbox' * Fluxbox window manager (leggero, il nuovo blackbox) * Installare il pacchetto: `fluxbox' * `exec /usr/bin/fluxbox' * Xfce window manager (Mac OS-X, SUN CDE--simile) * Installare il pacchetto: `xfce' * `exec /usr/bin/xfwm' * IceWM window manager. (leggero, alternativa a GNOME) * Installare il pacchetto: `icewm' * `exec /usr/bin/X11/icewm' * FVWM2 window manager virtuale (leggero, tipo Win95) * Installare il pacchetto: `fvwm' * `exec /usr/bin/fvwm2' * Windowmaker window manager (in qualche modo simile a NexT) * Installare il pacchetto: `wmaker' * `exec /usr/bin/wmaker' * Enlightenment window manager (caricato). * Installare il pacchetto: `enlightenment' * `exec /usr/bin/enlightenment' Vedere Window Manager per X (http://www.xwinman.org). 9.4.5.3. Impostazione degli ambienti KDE e GNOME ------------------------------------------------ Per un setup completo degli ambienti KDE o GNOME sono utili i seguenti metapacchetti: * KDE: installare il pacchetto `kde' * GNOME: installare il pacchetto `gnome' L'installazione di questi pacchetti con programmi in grado di maneggiare pacchetti marcati con `Raccomanda', tipo `dselect' ed `aptitude', fornisce una scelta di software rispetto alla semplice installazione con `apt-get'. Se volete comunque il login da console, disabilitate gli X display manager, tipo `kdm', `gdm', e `wdm', che possono essere richiamati dal gioco delle dipendenze, come descritto in Sezione 8.1.4, `"Voglio disabilitare X al boot!"'. Se volete GNOME come sistema predefinito invece che KDE, configurate `x-session-manager' come descritto in Sezione 6.5.3, `Comandi alternativi'. 9.4.6. Connessione TCP/IP ad X ------------------------------ Siccome una connessione remota TCP/IP senza cifratura è vulnerabile ad attacchi tipo eavesdropping, l'impostazione predefinita per X nelle versioni Debian più recenti disabilita il socket TCP/IP. Prendete in considerazione `ssh' per una connessione remota ad X (vedere Sezione 9.4.8, `Connessioni ad un X server remoto -- `ssh''). Il metodo qui descritto non è consigliato, a meno di essere in un ambiente altamente sicuro, dietro un buon firewall, solo con utenti fidati. Usate il seguente comando per verificare le impostazioni del vostro X server rispetto al socket TCP/IP: # find /etc/X11 -type f -print0 | xargs -0 grep nolisten /etc/X11/xinit/xserverrc:exec /usr/bin/X11/X -dpi 100 -nolisten tcp Rimuovete `-nolisten' per ripristinare l'ascolto TCP/IP sull' X server. 9.4.7. Connessioni ad un X server remoto -- `xhost' --------------------------------------------------- `xhost' permette l'accesso basato sugli hostname. Altamente insicuro. Quanto segue disabilita il controllo degli host e permette le connessioni da ovunque se una connessione TCP/IP è permessa (vedere Sezione 9.4.6, `Connessione TCP/IP ad X'): $ xhost + Potete riabilitare il controllo dell'host con: $ xhost - `xhost' non fa distinzioni fra utenti differenti sull'host remoto. In più gli hostname (in realtà gli indirizzi) possono essere contraffatti. Tale metodo va evitato, anche con criteri relativi agli host più restrittivi, se siete su una rete non fidata (tipo l'accesso dialup con PPP ad Internet). Vedere xhost(1x). 9.4.8. Connessioni ad un X server remoto -- `ssh' ------------------------------------------------- L'uso di `ssh' permette una connessione sicura da un server X locale ad un application server remoto. * Impostate i parametri di `X11Forwarding' e `AllowTcpForwarding' a `yes' in `/etc/ssh/sshd_config' sull'host remoto. * lanciate l' X server sull'host locale. * Aprite un `xterm' sul'host locale. * Lanciate `ssh' per stabilire una connessione col sito remoto. localname @ localhost $ ssh -q -X -l loginname remotehost.domain Password: ..... * Eseguire comandi di applicazioni X sul sito remoto. loginname @ remotehost $ gimp & Questo metodo permette la visione dell'output del client X remoto come fosse connesso localmente attraverso uno UNIX domain socket. 9.4.9. L'emulatore di terminale di X -- `xterm' ----------------------------------------------- Per conoscere tutto su `xterm' guardate a http://dickey.his.com/xterm/xterm.faq.html. 9.4.10. X resources ------------------- Molti programmi per X più vecchi, tipo `xterm', usano il cosiddetto X resource database per configurare il loro aspetto. Per immagazzinare le risorse specifiche per l'utente si usa il file `~/.Xresources'. Questo file viene fatto confluire automaticamente al login nelle X resources di default. Le X resources predefinite per il sistema sono contenute in `/etc/X11/Xresources/*' e i loro application defaults in `/etc/X11/app-defaults/*'. Usate queste impostazioni come punto di partenza. Ecco alcune impostazioni utili da aggiungere al vostro file `~/.Xresources': ! Imposta il font ad un più leggibile 9x15 XTerm*font: 9x15 ! Mostra la barra di scorrimento XTerm*scrollBar: true ! Imposta la grandezza del buffer a 1000 linee XTerm*saveLines: 1000 ! Schermo kterm più grande KTerm*VT100*fontList: -*-fixed-medium-r-normal--24-*,\ -*-gothic-medium-r-normal--24-*,\ -*-mincho-medium-r-normal--24-* Affinchè queste impostazioni abbianno effetto immediato, fatele confluire nel database con il comando: xrdb -merge ~/.Xresources Vedere xrdb(1x). 9.4.11. Mappatura della tastiiera e dei tasti del puntatore in X ---------------------------------------------------------------- Il programma `xmodmap' viene usato per modificare e mostrare la la modifier map della tastiera la keymap table usate dalle applicazioni client per convertire i keycode in keysyms in X. $ xmodmap -pm ... mostra la modifier map attuale $ xmodmap -pk | pager ... mostra la keymap tabl attuale $ xmodmap -e "pointer = 3 2 1" # imposta il mauose per la mano sinistra $ xmodmap ~/.xmodmaprc # imposta la tastiera come in ~/.xmodmaprc E' in genere lanciato dallo script di inizio della sessione di ciascun utente, `~/.xsession'. Per avvere il `keycode', lanciate `xev' in X e premete i tasti. Per sapere cosa significa `keysym', guardate alla definizione MACRO in `/usr/include/X11/keysymdef.h'. Tutte le istruzioni `#define' in questo file sono chiamate con `XK_' davanti ai nomi `keysym'. Vedere xmodmap(1x). 9.4.12. Diventare root in X --------------------------- Se un programma con interfaccia grafica richiede l'esecuzione da root, usate le seguenti procedure per visualizzare l'output del programma sull'X server dell'utente. _Non tentate mai di lanciare un X server direttamente dal root account_ per evitare possibili rischi dal punto di vista della sicurezza. Lanciate l' X server come un utente normale, ed aprite una console `xterm'. Poi: $ XAUTHORITY=$HOME/.Xauthority $ export XAUTHORITY $ su root Password:***** # printtool & Quando usate questo trucco con `su' verso un utente non root, assicuratevi che `~/.Xauthority' sia leggibile dal gruppo di detto utente non root. Per automatizzare questa sequenza di comandi, create un file `~/.xsession' dall'accout utente che contenga le seguenti righe: # Questo fa funzionare X quando lancio su verso l'account root. if [ -z "$XAUTHORITY" ]; then XAUTHORITY=$HOME/.Xauthority export XAUTHORITY fi unset XSTARTUP # Se si desidera un window/session manager particolare, decommentate la riga seguente # e modificatela a vostro piacimento. #XSTARTUP=/usr/bin/blackbox # Questo lancia il programma x-window/session-manager if [ -z "$XSTARTUP" ]; then if [ -x /usr/bin/x-session-manager ]; then XSTARTUP=x-session-manager elif [ -x /usr/bin/x-window-manager ]; then XSTARTUP=x-window-manager elif [ -x /usr/bin/x-terminal-emulator ]; then XSTARTUP=x-terminal-emulator fi fi # lancia automaticamente l'X window/session manager selezionato exec $XSTARTUP Poi lanciate `su' (non `su -') in una finestra `xterm' dell'utente. I programmi con interfaccia grafica lanciati da questo `xterm' possono visualizzare l'output sull'X window dell'utente mentre girano con i privilegi di root. Il trucco funziona finchè si usa il file `/etc/X11/Xsession' di default. Se un utente fa le proprie modifiche tramite `~/.xinit' o `~/.xsession', la variabile d'ambiente sopra descritta `XAUTHORITY' dovrà essere impostata allo stesso modo in questi script. In alternativa, si può usare, `sudo' per automatizzare la sequenza di comandi: $ sudo xterm ... oppure $ sudo -H -s In questo caso `/root/.bashrc' dovrà contenere: if [ $SUDO_USER ]; then sudo -H -u $SUDO_USER xauth extract - $DISPLAY | xauth merge - fi Questo funziona bene anche se la directory home dell'utente è montata su NFS mount, poichè root non legge il file `.Xauthority'. Esistono anche parecchi altri pacchetti specializzati all'uopo: `kdesu', `gksu', `gksudo', `gnome-sudo', e `xsu'. Altri metodi possono essere usati per raggiungere lo stesso risultato: creare un collegamento simbolico tra `/root/.Xauthority' ed il corrispettivo dell'utente; usare lo script sux (http://fgouget.free.fr/sux/sux-readme.shtml); or mettere "`xauth merge ~/.Xauthority'" nello script di inizializzazione di root. Vedere anche sulla lista di messaggi debian-devel (http://lists.debian.org/debian-devel/2002/debian-devel-200207/msg00259.html). 9.4.13. Font TrueType in X -------------------------- Lo standard `xfs' in XFree86-4 funziona bene con i fonts TrueType. Se usate XFree86-3 dovete installare un server di terzi, tipo `xfs-xtt'. Dovete solo assicurarvi che con qualsiasi applicazione vogliate usare, i font TrueType siano collegati a libXft o libfreetype (se usate file .deb precompilati non dovete nemmeno preoccuparvi di questo, probabilmente). Per prima cosa, impostate l'infrastruttura per il supporto dei font:_ * Installate i pacchetti `x-ttcidfont-conf' e `defoma'. Ciò automatizza la generazione dei file `fonts.scale' e `fonts.dir'. # apt-get install x-ttcidfont-conf * Modificate `/etc/X11/XF86Config-4' in `Section "Files"' come segue: Section "Files" FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" FontPath "/usr/share/fonts/truetype" FontPath "/usr/lib/X11/fonts/CID" FontPath "/usr/lib/X11/fonts/Speedo" FontPath "/usr/lib/X11/fonts/misc" FontPath "/usr/lib/X11/fonts/cyrillic" FontPath "/usr/lib/X11/fonts/100dpi:unscaled" FontPath "/usr/lib/X11/fonts/75dpi:unscaled" FontPath "/usr/lib/X11/fonts/Type1" EndSection la prima riga imposta XFree86 ad usare qualsiasi font TrueType installiate da un pacchetto Debian. La voce relativa al font Type1 è stata spostata in basso, poichè XFree86 non fa un bel lavoro nel rendere i font Type1. Il trucco `:unscaled' per i font bitmap non dovrebbe essere più necessario con il nuovo XF4, ma lo ho incluso lo stesso, tanto per essere sicuro. Per mantenere le modifiche manuali a `/etc/X11/XF86Config-4' seguite le istruzioni in Sezione 9.4.3.3, `Configurazione manuale dell' X server'. Poi installate i pacchetti di font DFSG: * Western TrueType font: * `ttf-bitstream-vera': font TrueType di alta qualità, creati day Bitstream, Inc. [1] * `ttf-freefont': font gratuiti TrueType di alta qualità che comprende il gruppo di caratteri UCS. * `ttf-thryomanes': font TrueType unicode che copre Latino, Graco, Cirillico ed IPA. * Asian font: * `tfm-arphic-bsmi00lp': Chinese Arphic "AR PL Mingti2L Big5" TrueType font TeX font metric data * `tfm-arphic-bkai00mp': Chinese Arphic "AR PL KaitiM Big5" TrueType font TeX font metric data * `tfm-arphic-gbsn00lp': Chinese Arphic "AR PL SungtiL GB" TrueType font TeX font metric data * `tfm-arphic-gkai00mp': Chinese Arphic "AR PL KaitiM GB" TrueType font TeX font metric data * `ttf-baekmuk': serie di font TrueType Korean Baekmuk * `hbf-jfs56': Chinese Jianti Fangsong 56x56 bitmap font (GB2312) per CJK * `hbf-cns40-b5': Chinese Fanti Song 40x40 bitmap font (Big5) per CJK * `hbf-kanji48': Japanese Kanji 48x48 bitmap font (JIS X-0208) perr CJK Siccome i font _Free_ sono talvolta limitati, installarne o condividerne di commerciali è un'opzione per gli utenti Debian. Per rendere facile tale processo, sono stati creati alcuni pacchetti ad hoc: * `ttf-commercial' * `msttcorefonts (>1.1.0)' [2] Avrete un'ottima selezione di font TrueType al costo di contaminare il vostro sistema _Free_ con font non-Free. Tutti questi pacchetti di font dovrebbero funzionare in Debian senza sforzi, ed apparire disponibili a tutti i programmi che usano il font system "centrale". Ciò include programmi tipo Xterm, Emacs, e molte altre applicazioni non-KDE e non-GNOME. Ora, lanciate `xfontsel' e scegliete qualsiasi font TrueType nel menu fndry, dovreste essere in grado di vedere molte voci disponibili nel menu "fmly". Per KDE2.2 e GNOME1.4 (con libgdkxft0, che è un trucco per costringere GTK 1.2 ad eseguire il rendering dei font anti-aliased), dovete impostare anche Xft1. Xft1 è altamente deprecato ed è in pratica usato solo da GNOME1.4 e da KDE2.2. Modificate `/etc/X11/XftConfig' ed aggiungete una riga tipo dir "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" prima delle altre righe dir. [3] Per GNOME2 e KDE3 (dopo il rilascio di Sarge), dovete impostare `fontconfig' che usa Xft2 per trovare i font. [4] Non dovreste aver bisogno di installare alcunchè di extra per questo, pochè tutti i pacchetti che usano `fontconfig' Dipendono già da esso (indirettamente). Prima gurdate in `/etc/fonts/fonts.conf'. Dovrebbe esserci una riga come quella sotto. Se non c'è, aprite `/etc/fonts/local.conf' ed aggiungete questo /var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType subito dopo la riga . `Fontconfig' dovrebbe prenderli immediatamente ed "fc-list" dovrebbe elencare i vostri nuovi font. Un'altra valida caratteristica di `fontconfig' è che potete inserire semplicemente i font da `~/.fonts/' e tutti i vostri programmi fontconfigurati avranno accesso a loro immediatamente. Se installate manualmente un set di font TrueType mentre siete in X senza usare un pacchetto Debian, lanciate # xset fp rehash per far sì che XFree86 guardi al contenuto di quella directory nuovamente e prenda i nuovi font. [1] Sebbene non disponibili per in Woody, potete installarli da Sarge. [2] Il pacchetto in Woody non funziona, almeno fino al 8/2002, a causa di modifiche al sito della Microsoft. Usate la versione di Sarge anche in Woody, invece. [3] Io non ho più roba xft1 sulla mia macchina, per cui non sono certo se avete bisogno di riavviare X o no prima che le modifiche abbiano effetto. Mi pare di ricordare che "xftcache" aggiorni la cache Xft1, ma sarebbe bello che qualcuno possa confermarlo per me. [4] `Fontconfig' non esiste in Woody. 9.4.14. Web Browser (grafici) ----------------------------- In Woody esistono alcuni pacchetti di Web browser con capacità grafiche: * `mozilla' Il browser Mozilla (nuovo) * `galeon' Browser basato su Mozilla con interfaccia Gnome (nuovo) * `konqueror' Browser KDE * `dillo' Browser GTK * `amaya-gtk' Browser di riferimento W3C * `amaya-lesstif' idem come sopra * `netscape-...' (molti, vecchio) * `communicator-...' (molti, vecchio) * ... La versione di `mozilla' deve corrispondere a quella richiesta da `galeon'. Nonostante differiscano nell'interfaccia, entrambi condividono il motore di rendering HTML Gecko. I plug-in per i browser tipo `mozilla' e `galeon' possono essere abilitati installando manualmente "`*.so'" nella directory plug-in e riavviando i browser. Varie risorse per i plug-in: * Java plug-in: installate i binari di "J2SE" da http://java.sun.com. * Flash plug-in: installate i binari di "Macromedia Flash Player 5" da http://www.macromedia.com/software/flashplayer/. * `freewrl': Browser VRML e plugin per Netscape * ... 9.5. SSH -------- SSH (Secure SHell) è il modo sicuro per connettersi via Internet. Una versione free di SSH, chiamata OpenSSH è disponibile come pacchetto `ssh' in Debian. 9.5.1. Principi basilari di SSH ------------------------------- Installate prima il server ed il client OpenSSH. # apt-get update && apt-get install ssh `/etc/ssh/sshd_not_to_be_run' non deve essere presente se si vuole far girare il server OpenSSH. SSH ha due protocolli di autenticazione: * Versione 1: * Solo Potato supporta questo protocollo. * metodi di autenticazione disponibili: * RSAAuthentication: autenticazione utente basata su "RSA identity key" * RhostsAuthentication: autenticazione host basata su .rhosts (insicura, disabilitata) * RhostsRSAAuthentication: autenticazione .rhosts combinata con "RSA host key" (disabilitata) * ChallengeResponseAuthentication: autenticazione "RSA challenge-response" * PasswordAuthentication: autenticazione basata su password * Versione 2: * tutte le versioni post-Woody la usano come protocollo primario. * metodi di autenticazione disponibili: * PubkeyAuthentication: autenticazione utente basata su chiave pubblica * HostbasedAuthentication: autenticazione basata su `.rhosts' o `/etc/hosts.equiv' combinata con autenticazione dell'host basata su chiave pubblica del client (disabilitata) * ChallengeResponseAuthentication: autenticazione challenge-response * PasswordAuthentication: autenticazione basata su password Fate attenzione a queste differenze se state migrando da Woody od usando un sistema non-Debian. Vedere `/usr/share/doc/ssh/README.Debian.gz', ssh(1), sshd(8), ssh-agent(1), e ssh-keygen(1) per i dettagli. A seguire i file di configurazione chiave: * `/etc/ssh/ssh_config': Il default per il client SSH. Vedere ssh(1). Voci da notare sono: * `Host': Restringe le seguenti dichiarazioni (fino alla Host keyword successiva) ad essere le uniche per i dati host a corrispondere ad uno dei pattern dati dopo la keyword. * `Protocol': Specifica la versione di protocollo SSH. Default è "2,1". * `PreferredAuthentications': Specifica il metodo di autenticazione del client SSH2. Il default è "hostbased,publickey,keyboard-interactive,password". * `PasswordAuthentication': Se volete accedere con una password, dovete assicurarvi chenon sia impostato su `no'. * `ForwardX11': E' disabilitato di default. Si può scavalcare con l'opzione "`-X'". * `/etc/ssh/sshd_config': Il default per il server SSH. Vedere sshd(8). Voci da notare sono: * `ListenAddress': Specifica l'indirizzo locale verso cui `sshd' dovrebbe essere in ascolto. Sono permesse opzioni multiple. * `AllowTcpForwarding': Disabilitato di default. * `X11Forwarding': Disabilitato di default. * `$HOME/.ssh/authorized_keys': lista delle chiavi pubbliche di default usate dai client per connettersi ad un dato account sul dato host. Vedere ssh-keygen(1). * `$HOME/.ssh/identity': Vedere ssh-add(1) e ssh-agent(1). I seguenti comandi lanciano una connessione `ssh' da un client. $ ssh username@hostname.domain.ext $ ssh -1 username@hostname.domain.ext # Forza la versione 1 di SSH $ ssh -1 -o RSAAuthentication=no -l username foo.host # forza la password su SSH1 $ ssh -o PreferredAuthentications=password -l username foo.host # forza la password su SSH2 Per l'utente, `ssh' funziona da `telnet' più sicuro ed intelligente (non vi bombarda con ^]). 9.5.2. Port forwarding -- per il tunneling SMTP/POP3 ---------------------------------------------------- Per stabilire una pipe per connettere la porta 25 del dalla porta 4025 del localhost, e la porta 110 del dalla porta 4110 del localhost attraverso `ssh', eseguite sulla macchina locale: # ssh -q -L 4025:server-remoto:25 4110:server-remoto:110 \ username@server-remoto E' un modo sicuro di eseguire connessioni a server SMTP/POP3 su Internet. impostate la voce `AllowTcpForwarding' a `yes' in `/etc/ssh/sshd_config' sull'host remoto. 9.5.3. Connettersi con meno passwords -- RSA -------------------------------------------- Potete evitare di ricordare una password per ogni sistema remoto usando la RSAAuthentication (protocollo SSH1) o PubkeyAuthentication (protocollo SSH2). Sul sistema remoto impostate i rispettivi parametri, "RSAAuthentication yes" o "PubkeyAuthentication yes", in `/etc/ssh/sshd_config'. Infine, generate le chiavi di autenticazione localmente ed installate la chiave pubblica sul sistema remoto: $ ssh-keygen # RSAAuthentication: chiave RSA per SSH1 $ cat .ssh/identity.pub | ssh user1@remote \ "cat - >>.ssh/authorized_keys" ... $ ssh-keygen -t rsa # PubkeyAuthentication: chiave RSA per SSH2 $ cat .ssh/id_rsa.pub | ssh user1@remote \ "cat - >>.ssh/authorized_keys" ... $ ssh-keygen -t dsa # PubkeyAuthentication: chiave DSA per SSH2 $ cat .ssh/id_dsa.pub | ssh user1@remote \ "cat - >>.ssh/authorized_keys" Potrete cambiare la passphrase in seguito con "`ssh-keygen -p'". Verificate le impostazioni provando la connessione. In caso di problemi, usate "`ssh -v'". Potete aggiungere delle opzioni ai parametri in `authorized_keys' per limitare gli host e per eseguire comandi specifici. Vedere sshd(8) per i dettagli. Notate che SSH2 ha `HostbasedAuthentication'. Affinchè funzioni, dovete aggiustare le impostazioni di `HostbasedAuthentication' a `yes' in both `/etc/ssh/sshd_config' on the server machine and `/etc/ssh/ssh_config' o `$HOME/.ssh/config' sulla macchina client. 9.5.4. Client SSH differenti ---------------------------- Esistono alcuni client SSH disponibili per piattaforme non Unix e simili. Windows puTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) (GPL) Windows (cygwin) SSH in cygwin (http://www.cygwin.com/) (GPL) Macintosh Classic macSSH (http://www.macssh.com/) (GPL) [Notate che Mac OS X include OpenSSH; usate `ssh' nell'applicazione Terminal] Vedere anche SourceForge.net, site documentation (http://www.sourceforge.net/docman/?group_id=1), "6. CVS Instructions". 9.5.5. SSH agent ---------------- E' più sicuro proteggere la vostra autenticazione SSH con una passphrase. Se non è impostata, usate `ssh-keygen -p' per farlo. Inserite la vostra chiave pubblica (p. es `~/.ssh/id_rsa.pub') in `~/.ssh/authorized_keys', su un host remoto mediante una connessione basata su password come descritto in Sezione 9.5.3, `Connettersi con meno passwords -- RSA'. $ ssh-agent bash # oppure lanciate zsh/tcsh/pdksh. $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/osamu/.ssh/id_rsa: Identity added: /home/osamu/.ssh/id_rsa (/home/osamu/.ssh/id_rsa) $ scp ... da qui in poi più nessuna passphrase richiesta :-) $^D ... terminando la sessione di ssh-agent Per l'X server, i normali script di lancio Debian eseguono `ssh-agent' come processo genitore. Così, dovete eseguire `ssh-add' solo una volta. Per ulteriori informazioni, leggete ssh-agent(1) e ssh-add(1). 9.5.6. Risoluzione dei problemi con SSH --------------------------------------- In caso di problemi, controllate i permessi del file di configurazione e lanciate `ssh' con l'opzione "`-v'". Usate l'opzione "`-P'" se siete root ed avete problemi col firewall, per evitare di usare le porte del server 1--1023. Se le connessioni `ssh' ad un sito remoto smettono improvvisamente di funzionare, ciò può essere dovuto a maneggiamenti dell'amministratore o, più probabilmente a cambiamenti in `host_key' durante la manutenzione del sistema. Dopo essersi assicurati che è proprio questo il caso e che nessuno sta tentando di falsificare l'host remoto mediante qualche trucco geniale, potete riguadagnare la connessione rimuovendo la voce `host_key' da `$HOME/.ssh/known_hosts' della macchina locale. 9.6. Posta ---------- La configurazione della posta si divide in tre categorie: * agenti di trasferimento posta (mail transfer agent, MTA): `exim4', `exim', `postfix', `sendmail', `qmail', `ssmtp', `nullmailer', ... * utilità per la posta: `procmail', `fetchmail', `mailx', `crm114', ... * agenti di gestione posta per l'utente (mail user agent, MUA): `mutt' `emacs'+`gnus', ... 9.6.1. Mail transport agent (MTA) --------------------------------- Per un MTA con tutte le funzionalità, usate `exim' in Woody e `exim4' in Sarge. [1] Riferimenti: * i pacchetti `exim-doc' e `exim-doc-html' per `exim' * `exim4-doc-info' e `exim4-doc-html' per `exim4' * http://www.exim.org/ L'unica alternativa ragionevole è `postfix' se avete a cuore la sicurezza. `sendmail' e `qmail' sono disponibili come pacchetti Debian, ma non sono raccomandati. Se non avete bisogno delle capacità specifiche di un MTA, come nel caso di un sistema satellite tipo un portatile, potete prendere in considerazione uno di questi pacchetti leggeri. * `ssmtp': ncessita di una connessione SMTP ed supporta gli alias. * `nullmailer': può distribuire la posta, ma non supporta gli alias. Al momento, trovo `exim' più adatto, anche per la mia workstation pesonale, che è un PC portatile. Potreste dover rimuovere `exim' per installare questi pacchetti conflittuali: # dpkg -P --force-depends exim # apt-get install nullmailer # o ssmtp [1] Le sezioni seguenti usano `exim' negli esempi. Per Sarge sostituitelo con `exim4' dove necessario. 9.6.1.1. Smarthost ------------------ Se avete `exim4' o `exim' su un host connesso tramite servizi commerciali, assicuratevi di inviare la posta in uscita attraverso uno smarthost offerto dal vostro ISP, o da qualcun altro. [1] esistono alcune buone ragioni: * per assicurarsi più tentativi SMTP, in quanto lo smarthost del vostro ISP ha una connessione più affidabile. * evitare di inviare la posta direttamente da un _indirizzo IP dinamico_, che verrà con ogni probabilità bloccato dalle liste dial-u dello spam. * per risparmiare la vostra banda locale per inviare posta a destinatari multipli. Le uniche eccezioni possibili sono: * cura di emergenza per i problemi del servizio SMTP del vostro ISP. * un esperimento a scopi educativi. * il vostro host è un server hosted professionalmente [1] Dovete segure questa regola per qualsiasi host connesso tramite linea analogica, DSL, cavo o LAN attraverso qualche route a larga banda Anche se il vostro host casalingo ha un IP fisso dato dal vostro ISP, è sempre una buona idea seguire questa regola. Granparte delle workstation e dei server ricadono in questa categoria. 9.6.1.2. Configurazione base di Exim ------------------------------------ per usare `exim' e `exim4' come MTA, configurate: /etc/exim/exim.conf "eximconfig" per crearlo e modificarlo /etc/exim4/* "dpkg-reconfigure exim4-config" per crearlo e modificarlo (exim4) /etc/inetd.conf decommentate smtp per lanciare exim come demone /etc/email-addresses Aggiungete una lista di indirizzi email fasulli controllate i filtri usando `exim4' o `exim' con `-brw, -bf, -bF, -bV, ...' ecc. 9.6.1.3. Raccolta di tutti gli indirizzi e-mail inesistenti in Exim ------------------------------------------------------------------- In `/etc/exim/exim.conf' (Woody e seguenti), aggiungete nella sezione DIRECTORS alla fine, (dopo localuser: director) un indirizzatore (director) che raccolga tutti gli indirizzi che i directors precedenti non hanno potuto risolvere (Secondo Miquel van Smoorenburg): catchall: driver = smartuser new_address = Se si desidera avere una ricetta più dettagliata per ogni dominio virtuale, ecc., aggiungete la seguente riga alla fine di `/etc/exim/exim.conf' (secondo me, non ben testato): *@yourdomain.com ${lookup{$1}lsearch*{/etc/email-addresses} \ {$value}fail} T Aggiungete, poi una "*" in `/etc/email-addresses'. 9.6.1.4. Riscrivere selettivamente l'indirizzo per la posta in uscita (Exim) ---------------------------------------------------------------------------- La riscrittura selettiva dell'indirizzo per la posta in uscita per avere un giusto header "From:" può essere fatta con `exim' configurando verso la parte finale `/etc/exim/exim.conf': *@host1.something.dyndns.org \ "${if eq {${lookup{$1}lsearch{/etc/passwd}{1}{0}}} {1} \ {$0}{$1@somethig.dyndns.org}}" frFs Ciò riscrive tutti gli indirizzi che coincidono con `*@host1.something.dyndns.org'. 1. Cerca dentro `/etc/password' per vedere se la parte locale ($1) è un utente locale o no. 2. Se lo è, riscrive l'indirizzo facendolo coincidere con la stessa cosa trovata al primo posto ($0). 3. Se non lo è, riscrive la parte del dominio. 9.6.1.5. Configurare l'autenticazione SMTP in Exim -------------------------------------------------- Alcuni servizi SMTP, tipo yahoo.com richiedono l'autenticazione SMTP. Configurate `/etc/exim/exim.conf' come segue: remote_smtp: driver = smtp authenticate_hosts = smtp.mail.yahoo.com ... smarthost: driver = domainlist transport = remote_smtp route_list = "* smtp.mail.yahoo.com bydns_a" ... plain: driver = plaintext public_name = PLAIN client_send = "^cmatheson3^this_is_my_password" Non dimenticate le virgolette doppie sull'ultima riga. 9.6.2. Ritirare la posta -- Fetchmail ------------------------------------- `fetchmail' viene eseguito in modalità demone per raccogliere la posta dagli account POP3 del vostro provider smistandoli nel sistema locale di posta. Configurate: /etc/init.d/fetchmail /etc/rc?.d/???fetchmail lancia update-rc.d fetchmail default priority 30 /etc/fetchmailrc file di configurazione (chown 600, posseduto da fetchmail) Le informazioni su come lanciare fetchmail come demone dallo script `init.d' in Potato sono confuse (in Woody è stato risolto). Vedere i file di esempio `/etc/init.d/fetchmail' e `/etc/fetchmailrc' negli script di esempio (http://www.debian.org/doc/manuals/debian-reference/examples/). Se i vostri header di posta sono infestati da ^M per colpa del mailer del vostro provider, aggiungete "stripcr" alle vostre opzioni in `$HOME/.fetchmailrc': options fetchall no keep stripcr 9.6.3. Processare la posta -- Procmail -------------------------------------- `procmail' è il sistema locale di consegna e filtraggio della posta. Per ogni account che lo usa si deve creare un file `$HOME/.procmailrc'. Per esempio: _procmailrc (http://www.debian.org/doc/manuals/debian-reference/examples/) 9.6.4. Processare lo spam con `crm114' -------------------------------------- Il pacchetto `crm114' fornisce lo script `/usr/share/crm114/mailfilter.crm', che è scritto in CRM114. Esso fornisce un filtro per lo spam molto efficace, che può essere instruito fornendogli spam e posta normale. CRM114 è un piccolo linguaggio disegnato per scrivere dei filtri; consideratelo una versione di grep con superpoteri. Vedere crm(1). 9.6.5. Leggere la posta -- Mutt ------------------------------- Usate `mutt' come MUA in combinazione con `vim'. Personalizzatelo tramite `~/.muttrc'; per esempio: # usa il modo visuale e "gq" per riformattare le citazioni set editor="vim -c 'set tw=72 et ft=mail'" # # impostazione degli header, presa direttamente dal manuale ("Sven's Draconian header weeding") # ignore * unignore from: date subject to cc unignore user-agent x-mailer hdr_order from subject to cc date user-agent x-mailer auto_view application/msword .... Aggiungete quanto segue a `/etc/mailcap' o a `$HOME/.mailcap' per visualizzare messaggi in HTML ed allegati MS Word: text/html; lynx -force_html %s; needsterminal; application/msword; /usr/bin/antiword '%s'; copiousoutput; description="Microsoft Word Text"; nametemplate=%s.doc 9.7. Localizzazione (l10n) -------------------------- Debian è internazionalizzato, offrendo supporto per un numero crescente di lingue e convenzioni locali. La sottosezione seguente elenca alcune delle diversità che Debian attualmente supporta, mentre la successiva tratta della _localizzazione_, ovvero il processo di personalizzare il vostro ambiente di lavoro per permettere il giusto input ed output del(i) linguaggio(i) scelto(i) e le convenzioni per date, formati numerici e monetari e per tutti gli aspetti che caratterizzano una data regione. 9.7.1. Le basi della localizzazione ----------------------------------- Ci sono alcuni aspetti da considerare per la personalizzazione della localizzazione ed il supporto della propria lingua nazionale. 9.7.1.1. Localizzare la tastiera -------------------------------- Debian è distribuito con le keymap per quasi due dozzine di tastiere. In Woody, riconfigurate la tastiera con: * `dpkg-reconfigure --priority=low console-data # console' * `dpkg-reconfigure --priority=low xserver-xfree86 # XF4' * `dpkg-reconfigure --priority=low xserver-common-v3 # XF3' 9.7.1.2. Localizzare i file di dati ----------------------------------- La gran parte dei pacchetti software Debian supporta il trattamento dei dati formati da caratteri non-US-ASCII attraverso la variabile d'ambiente LC_CTYPE offerta dalla tecnologia _locale_ in glibc * 8-bit clean: praticamente tutti i programmi * altri set di caratteri "Latin" (p.es. ISO-8859-1 o ISO-8859-2): la maggioranza dei * linguaggi multibyte tipo Cinese, Giapponese o Coreano: molte applicazioni recenti 9.7.1.3. Localizzare lo schermo ------------------------------- X è in grado di mostrare qualsiasi coding, compreso UTF-8 e supporta tutti i font. La lista comprende non solo tutti i font a 8-bit, ma anche quelli a 16-bit, come il Cinese, Giapponese o Coreano. Il metodo di inserimento dei caratteri multibite è supportato dal meccanismo XIM. Vedere Sezione 9.7.9, `Esempio per un sistema multilingue per X window system' e Sezione 9.7.12, `Supporto UTF-8 per l'emulatore di terminale in X'. La visualizzazione del codice Giapponese EUC è anche disponibile nella console grafica (S)VGA, tramite il pacchetto `kon2'. Esiste anche un nuovo display giapponese alternativo, `jfbterm' che usa la console framebuffer. In queste console, il metodo di inserimento dei caratteri giapponesi deve essere fornito dalla applicazione. Usate il pacchetto `egg' per Emacs ed il pacchetto giapponesizzato `jvim' per Vim. L'installazione di font non Unicode in X aiuta a mostrare i documenti con qualsiasi condifica. Quindi, non preoccupatevi tanto della codifica dei font. 9.7.1.4. Localizzare i messaggi e la documentazione --------------------------------------------------- Traduzioni esistono per molti dei messaggi di testo e documenti che vengono visualizzati nel sistema Debian, tipo messaggi di errore, output dei programmi, menu e pagine man. Al momento il supporto per le pagine di manuale in Tedesco, Spagnolo, Finlandese, Francese, Ungherese, Italiano, Giapponese, Coreano, Polacco, Portoghese, Cinese e Russo, viene fornito attraverso i pacchetti `manpages-' (dove è una lista separata da virgole dei codici nazione ISO (di due lettere). Usate `apt-cache search manpages-|less' per avere una lista delle pagine di manuale Unix disponibili.) Per accedere ad una pagina di manuale NLS, l'utente deve impostare la variabile d'ambiente LC_MESSAGES alla stringa appropriata. Per esempio, in caso di pagine di manuale in Italiano, LC_MESSAGES dovrà essere impostata a `it'. Il programma `man' cercherà quindi le pagine in Italiano sotto `/usr/share/man/it/'. 9.7.2. I locale --------------- Debian supporta la tecnologia _locale_. Locale è un meccanismo che permette ai programmi di fornire un valido output e funzionalità in accordo con le convenzioni locali, tipo il set di caratteri, il formato per data e ora, il simbolo di valuta, e così via. Usa delle variabili d'ambiente per determinare il comportamento più appropriato. Per esempio, assumendo che abbiate installati i locale per L'Inglese Americano ed il Tedesco sul vostro sistema, i messaggi di errore di molti programmi potrebbero essere bilingue: $ LANG="en_US" cat foo cat: foo: No such file or directory $ LANG="de_DE" cat foo cat: foo: Datei oder Verzeichnis nicht gefunden Glibc offre il supporto per locale ai programmi sotto forma di libreria. Vedere locale(7). 9.7.3. Introduzione ai locale ----------------------------- Una descrizione completa di locale consiste in 3 parti: `xx_YY.ZZZZ'. * _`xx'_: ISO 639 codici lingua (minuscolo) * _`YY'_: ISO 3166 codici nazione (maiuscolo) * _`ZZZZ'_: codeset, cioè set di caratteri od identificatore di codifica. Per i codici lingua e nazione, vedere una descrizione pertinente in `info gettext'. Notate che la parte codeset può venire normalizzata internamente per ottenere una compatibilità cross platform rimuovendo tutti i `-' e convertendo tutti i caratteri in minuscolo. Codeset tipici sono: * _UTF-8_: Unicode per tutte le regioni, principalmente in Ottetti 1-3 (il nuovo standard di fatto) * _ISO-8859-1_: western Europe (di fatto il vecchio standard) * _ISO-8859-2_: eastern Europe (Bosnian, Croatian, Czech, Hungarian, Polish, Romanian, Serbian, Slovak, Slovenian) * _ISO-8859-3_: Maltese * _ISO-8859-5_: Macedonian, Serbian * _ISO-8859-6_: Arabic * _ISO-8859-7_: Greek * _ISO-8859-8_: Hebrew * _ISO-8859-9_: Turkish * _ISO-8859-11_: Thai (=TIS-620) * _ISO-8859-13_: Latvian, Lithuanian, Maori * _ISO-8859-14_: Welsh * _ISO-8859-15_: western Europe con euro * _KOI8-R_: Russian * _KOI8-U_: Ukrainian * _CP1250_: Czech, Hungarian, Polish (MS Windows origin) * _CP1251_: Bulgarian, Byelorussian (MS Windows origin) * _eucJP_: Unix style Japanese (=ujis) * _eucKR_: Unix style Korean * _GB2312_: Unix style Simplified Chinese (=GB, =eucCN) for zh_CN * _Big5_: Traditional Chinese for zh_TW * _sjis_: Microsoft style Japanese (Shift-JIS) Per quanto riguarda il gergo del sistema base di codifica: * _ASCII_: 7 bit (0-0x7f) * _ISO-8859-?_: 8 bit (0-0xff) * _ISO-10646-1_: Universal Character Set (UCS) (31 bit, 0-0x7fffffff) * _UCS-2_: Primi 16 bit di UCS, 2 Ottetti pieni (Unicode: 0-0xffff) * _UCS-4_: UCS 4 Ottetti pieni (UCS: 0-0x7fffffff) * _UTF-8_: UCS codificcato in 1-6 Ottetti (principalmente in 3 Ottetti) * _ISO-2022_: 7 bit (0-0xff) con la sequenza di escape ISO-2022-JP è la codifica più popolare per la posta elettronica in Giapponese. * _EUC_: Combinazione 8 bit + 16 bit (0-0xff), Unix style * _Shift-JIS_: Combinazione 8 bit + 16 bit (0-0xff), Microsoft style. ISO-8859-?, EUC, ISO-10646-1, UCS-2, UCS-4, ed UTF-8 condividono lo stesso codice con ASCII per i caratteri a 7 bit. EUC o Shift-JIS usa caratteri high-bit (0x80-0xff) per indicare che parte della codifica è a 16 bit. Anche UTF-8 usa caratteri high-bit (0x80-0xff) per indicare byte con sequenze di caratteri non a 7 bit, e questo è il sistema di codifica più sano per gestire i caratteri non-ASCII. Notate la differenza nell'ordine dei byte della implementazione Unicode: * _Standard UCS-2, UCS-4_: big endian * _Microsoft UCS-2, UCS-4_: little endian per ix86 (macchina-dipendente) Vedere Sezione 8.6.12, `Convertire un file di testo con `recode'' per la conversione fre i vari set di caratteri. Per maggiori informazioni, vedere Introduzione a i18n (http://www.debian.org/doc/manuals/intro-i18n/). 9.7.4. Attivare le capacità di supporto locale ---------------------------------------------- Debian _non_ arriva con tutti i locale disponibili precompilati. Controllate `/usr/lib/locale' per vedere quali (oltre a quello predefinito, "C") sono compilati sul vostro sistema. Se quello di cui avete bisogno non è presente, avete due opzioni: * Modificare `/etc/locale.gen' per aggiungere il locale desiderato, poi lanciate `locale-gen' da root per compilarlo. Vedere locale-gen(8) e le pagine di manuale elencate nella sua sezione "SEE ALSO". * Lanciare `dpkg-reconfigure locales' per riconfigurare il pacchetto `locales'. Oppure, se non è stato ancora installato, l'installazione di `locales' invocherà l'interfaccia debconf per farvi scegliere il locale richiesti e compilare il database. 9.7.5. Attivare un locale in particolare ---------------------------------------- Le seguenti variabili d'ambiente vengono valutate in questo ordine per fornire ai programmi particolari valori di locale: 1. LANGUAGE: Consiste di una lista di nomi di locale, separati da una virgola, in ordine di priorità. Usata solo se il locale POSIX è impostato ad un valore diverso da "C" [in Woody; la versione Potato ha sempre priorità sul locale POSIX]. (Estensione GNU) 2. LC_ALL: Se non è nullo, il valore è usato per tutte le categorie di locale. (POSIX.1) Di solito "" (nullo). 3. LC_*: Se non è nullo, il valore è utilizzato per la categoria corrispondente (POSIX.1). Di solito "C". Variabili LC_* sono: * LC_CTYPE: Classificazione e conversione dei caratteri. * LC_COLLATE: Ordine di collazione. * LC_TIME: Formati data e ora. * LC_NUMERIC: Formati numerici non monetari. * LC_MONETARY: Formati di valuta. * LC_MESSAGES: Formati dei messaggi informativi e diagnostici, nonchè delle risposte interattive. * LC_PAPER: Formato carta. * LC_NAME: Formati dei nomi. * LC_ADDRESS: Formati degli indirizzi e località. * LC_TELEPHONE: Formati dei numeri telefonici. * LC_MEASUREMENT: Unità di misura (Sistema Metrico decimale od Altri). * LC_IDENTIFICATION: Metadati sulle informazioni di locale. 4. LANG: Se non è nullo e se LC_ALL non è definito, il valore è usato per tutte le categorie di locale LC_* con valori non definiti. (POSIX.1) Di solito "C". Notate che alcune applicazioni (p.es., Netscape 4) ignorano le impostazioni LC_*. Il programma `locale' può mostrare le impostazioni attive ed i locale disponibili; vedere locale(1). (NOTA: `locale -a' elenca tutti i locale che il vostro sistema conosce; questo _non_ significa che tutti siano compilati! Vedere Sezione 9.7.4, `Attivare le capacità di supporto locale'.) 9.7.6. Formato data ISO 8601 ---------------------------- Il supporto locale per lo standard internazionale di data `aaaa-mm-gg' (formato data ISO 8601) è fornito dal locale chiamato `en_DK', "English in Denmark" che è una sorta di gioco di parole :-) Sembra funzionare solo in console per `ls'. 9.7.7. Esempio per US (ISO-8859-1) ---------------------------------- Aggiungete le righe seguenti in `~/.bash_profile': LC_CTYPE=en_US.ISO-8859-1 export LC_CTYPE 9.7.8. Esempio per l'Italiano con euro (ISO-8859-15) ---------------------------------------------------- Aggiungete le righe seguenti in `~/.bash_profile': LANG=it_IT@euro export LANG LC_CTYPE=it_IT@euro export LC_CTYPE Configurate la tastiera per l'Italiano "QWERTY" come descritto in Sezione 9.7.1.1, `Localizzare la tastiera'. ed aggiungete le pagine di manuale in Italiano installando `manpages-it'. Il tasto Right-Alt degli USA è Alt-Gr in Europa. Premedolo con altri tasti crea molti caratteri speciali. Per esempio, Alt-Gr+E crea il segno dell'euro. Molti dei linguaggi dell'Europa occidentale possono essere configurati allo stesso modo. Vedere Debian Euro HOWTO (http://www.debian.org/doc/manuals/debian-euro-support/) per aggiungere il supporto per l'euro e Utiliser et configurer Debian pour le français (http://www.debian.org/doc/manuals/fr/debian-fr-howto/) per maggiori dettagli per il Francese (NdT: no, per l'Italiano non mi risulta un equivalente). 9.7.9. Esempio per un sistema multilingue per X window system ------------------------------------------------------------- Impostiamo un sistema multilingue che supporti simultaneamente Giapponese, Inglese Tedesco e Francese con codifiche EUC, UTF-( ed ISO-8859-1 sulle diverse console. Vi mostrerò una personalizzazione del Debian menu system. Vedere i dettagli del Debian menu system in /usr/share/doc/menu/html/index.html. Creerò anche una scorciatoia al browser `mozilla'. [1] * aggiungere il supporto locale per il Giapponese ja_JP.eucJP e gli altri locale richiesti usando il metodo descritto in Sezione 9.7, `Localizzazione (l10n)'. (per tutti) * installare il sistema di conversione da-Kana-a-Kanji ed il dizionario (per il Giapponese): * `canna' --- Server locale, (licenza tipo "free beer"), oppure * `freewnn-jserver' --- server estensibile in network (Dominio Pubblico) * installare il metodo di input Giapponese: * `kinput2-canna' --- per X, oppure * `kinput2-canna-wnn' --- per X,e * `egg' --- lavora direttamente con Emacsen persino in console (opzionale) * Installate i terminali compatibili (per tutti) * `xterm' -- X (per ISO-8859-1 ed UTF-8), * `kterm' --- X (per Giapponese EUC) e * `mlterm' --- X (multilingue) * Aggiungere tutti i pacchetti di font richiesti (per tutti) * create `~/.xsession' che imposta l'ambiente X specifico per l'utente: come descritto in Sezione 9.4.5.1, `Personalizzare le X session'. (per tutti): #!/bin/sh # Questo fa funzionare X quando lancio su verso l'account root. if [ -z "$XAUTHORITY" ]; then XAUTHORITY=$HOME/.Xauthority export XAUTHORITY fi # Set specific environment through debian menu system. # Reset locale unset LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES unset LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT unset LC_IDENTIFICATION LC_ALL LANG LANGUAGE PAGER # set locale default in X LANG=C # export locale export LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES export LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT export LC_IDENTIFICATION LC_ALL LANG LANGUAGE PAGER ### # activate input method for Japanese with kinput2 kinput2 & XMODIFIERS="@im=kinput2" export XMODIFIERS # How about blackbox window manager (lightweight) exec blackbox #exec xfwm #exec wmaker * impostate locale in `~/.bash_profile' per le console Linux (per tutti). * rimuovete le impostazioni di locale da `~/.bashrc' se esistenti (per tutti). * create alcuni file in `/etc/menu/' (per tutti) * `/etc/menu/xterm-local': (aggiungete nuove voci al menu) [2] ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator (en_US.ISO-8859-1)"\ title="XTerm (en_US.ISO-8859-1)"\ command="sh -c 'LC_ALL=en_US.ISO-8859-1 xterm'" ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator (de_DE.ISO-8859-1)"\ title="XTerm (de_DE.ISO-8859-1)"\ command="sh -c 'LC_ALL=de_DE.ISO-8859-1 xterm -T xterm-de'" ?package(xterm):\ needs=x11\ section=XShells\ longtitle="XTerm: terminal emulator for X with Unicode support (Japanese)"\ title="UXTerm (ja_JP.UTF-8)"\ command="sh -c 'LC_ALL=ja_JP.UTF-8 uxterm'" * `/etc/menu/kterm': (scavalca le impostazioni predefinite) [3] ?package(kterm):\ needs="x11"\ section="XShells"\ command="sh -c 'LC_ALL=ja_JP.eucJP PAGER=w3m /usr/X11R6/bin/kterm -xim'" \ title="Kanji Terminal" ?package(kterm):\ needs="x11"\ section="XShells"\ command="sh -c 'LANG=ja_JP.eucJP \ LC_MESSAGES=en_US.ISO-8859-1 PAGER=w3m /usr/X11R6/bin/kterm -xim'" \ title="Kanji Terminal (bilingal)" * `/etc/menu/mozilla-local': (aggiungete una nuova scorciatoia) [4] ?package(mozilla-browser):needs="x11" section="/" \ title=" Mozilla Navigator" command="mozilla-1.5" hints="Web browsers" \ icon=/usr/share/pixmaps/mozilla.xpm * lanciate `update-menus' dall'account di root. * aggiungete le righe seguenti in `~/.muttrc' (per il Giapponese): # il supporto UTF-8 non è popolare nell'ambiente EMACS Giapponese l'encoding a # 7 bit di iso-2022-jp è più semplice per tutti # default encoding order = us-ascii --> iso-8859-1 --> iso-2022-jp set send_charset="us-ascii:iso-8859-1:iso-2022-jp set allow_8bit=no * attiva XIM `kinput2' per applicazioni X (per il Giapponese) * aggiungete `*inputMethod: kinput2' e `KTerm*VT100*OpenIM:true' al vostro file `~/.Xresources' (sembra che Debian se ne prenda carico automaticamente, in qualche modo). * Alcune applicazioni (tipo `mlterm') permettono anche di impostare `*inputMethod:' ed altre informazioni in maniera dinamica all'avvio (premete _Ctrl-MouseButton-3_ in `mlterm'). * lanciate X digitando `startx' o da uno dei display manager (`xdm', `gdm', `kdm', `wdm', ...) (per tutti) * lanciate l'applicazione compatibile con il Giapponese, tipo Vim 6, (x)emacs21, mc-4.5, mutt-1.4, ... in `ktern' (per il Giapponese). (Emacs sembra la piattaforma più popolare, sebbene io non la usi.) * premete _Maiusc+Spazio_ per attivare e disattivare il modo input modo Giapponese. * legget la pagine di manuale localizzata lanciandone il comando in una console localizzata (per tutti). Per altro supporto per il linguaggio CJK, vedere le sezioni seguenti ed anche le pagine SuSE per CJK (http://www.suse.de/~mfabian/suse-cjk/suse-cjk.html). [1] In questo esempio vengono usate due soluzioni ai bug della versione 2003 di `blackbox'. Io uso `sh -c' nel comando. Nemmeno la voce `~/.menu/*' viene usate, ma avendone bisogno root, si è invece usata `/etc/menu/*'. [2] Usate nomi dei file che non sono uguali a nessun nome di pacchetto. [3] Usate nomi dei file che corrispondono ai nomi dei pacchetti [4] La slash in `section="/"' abilita le vosi nel menu iniziale e lo spazio iniziale in `title=" Mozilla Navigator"' pone la voce in cima alla lista. 9.7.10. Metodi alternativi di input in X ---------------------------------------- Molti i pacchetti disponibili che supprtano metodi alternativi di input in X: LIngua LC_CTYPE XIM server XMODIFIERS Tasto per il lancio Japanese ja_JP* kinput2 "@im=kinput2" Maiusc-Spazio Korean ko_KR* ami "@im=Ami" Maiusc-Spazio Chinese(T) zh_TW.Big5 xcin "@im=xcin-zh_TW.big5" Ctrl-Spazio Chinese(S) zh_CN.GB2312 xcin "@im=xcin-zh_CN.GB2312" Ctrl-Spazio Il metodo Giapponese, `kinput2' è offerto dai pacchetti `kinput2-canna-wnn', `kinput2-canna' e `kinput2-wnn'. Il metodo Giapponese necessita di un server per il dizionario, tipo `canna' e `freewnn-jserver' per essere pratico. 9.7.11. Emulatori di terminale in X ----------------------------------- Sono molte le console in X che supportano la semplice codifica a 8 bit quando i pacchetti dei font pertinenti sono installati: * `xterm' -- L'X terminal emulator * `gnome-terminal' -- `xterm' per Gnome * `konsole' -- `xterm' per KDE * `rxvt' -- terminale VT102 (leggero) * `aterm' -- VT102 per Afterstep WM * `eterm' -- VT102 per Enlightment WM * `wterm' -- VT102 per WindowMaker WM Il supporto per la codifica multi-byte vine fornito da `xterm' tramite la codifica UTF-8 (Sezione 9.7.12, `Supporto UTF-8 per l'emulatore di terminale in X'). Altri metodi di supporto tradizionali sono in fase di lavorazione (al 2003). I seguenti pacchetti offrono supporti tradizionali: * `aterm-ml' -- Multi-lingue * `kterm' -- Multi-lingue (Giapponese, ...) * `rxvt-ml' -- Multi-lingue * `wterm-ml' -- Multi-lingue * `cxterm-big5' -- Cinese (Trad., Big5) * `cxterm-gb' -- Cinese (Simp., GB) * `cxterm-ks' -- Cinese (KS) * `cxterm-jis' -- Giapponese * `hanterm-classic' -- Coreano (Hangul) * `hanterm-xf' -- Coreano (Hangul) * `hztty' -- Cinese (GB, Big5, zW/HZ) Per `kterm' (e possibilmente altri), potreste voler attivare XIM da menu dopo aver premuto Ctrl-tasto-centrale del mouse. 9.7.12. Supporto UTF-8 per l'emulatore di terminale in X -------------------------------------------------------- Il supporto UTF-8 per l'emulatore di terminale viene fornito dal programma `uxterm' del pacchetto `xterm' per XFree86 4.x. Abilita il supporto per tutte le lingue. E' un wrapper di xterm(1) che invoca quest'ultimo con impostata la X resource class "UXTerm". Per esempio, per abilitare la bella visione ingrandita dei caratteri Inglese, Russo, Giapponese, Cinese e Coreano, aggiungete quanto segue al vostro `~/.Xresources' dopo aver installato i font pertinenti: ! set large font UXTerm*font: -misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1 ! Use XIM for Japanese *inputMethod: kinput2 Poi eseguite `xrdb -merge ~/.Xresources' per aggiornare le X resources come descritto in Sezione 9.4.10, `X resources'. Sebbene gran parte dei pacchetti dei programmi di console popolari, come `vim', `mutt', e `emacs' sono stati resi compatibili con UTF-8 di recente (Woody-Sarge), un programma come `mc' ancora non lo è, ma semplicemente è 8-bit clean. Se state lavorando sulla parte a 7 bit ASCII di un file dalla codifica sconosciuta o mista, è più sicuro usare un editor locale ignaro dell'8-bit clean. Vedere The Unicode HOWTO (http://www.tldp.org/HOWTO/Unicode-HOWTO.html). 9.7.13. Esempio per UTF-8 in console framebuffer ------------------------------------------------ Il supporto UTF-8 sulla console FB è fornito da `bterm' usato nel `debian-installer'. 9.7.14. Oltre i locale ---------------------- Quando state impostando il sistema per la prima volta per un _linguaggio nazionale_, prendete in considerazione l'uso di `tasksel' o di `aptitude' per scoprire quali pacchetti vengono selezionati scegliendo il task corrispondente al linguaggio prescelto. La scelta dei pacchetti fatta in tal modo è utile persino per un setup multilingua. Se vi imbattete in qualche conflitto di dipendenze durante l'installazione del vostro raffinato sistema, evitate di installare i programmi che sono in conflitto col sistema esistente. Potreste dover utilizzare `update-alternative' per riguadagnare lo stato originale per alcuni comandi, dato che quelli puù recentemente installati potrebbero avere priorità più elevate rispetto a quelli preesistenti. I programmi principali più recenti usano glibc 2.2 e sono molto internazionalizzati. Quindi, versioni localizzate in maniera particolare, come `jvim' per VIM possono non essere necessarie e la sua funzionalità è offerta da `vim' versione 6.0 in X. In realtà, è ancora da raffinare. Dato che `jvim' ha una versione compilata con il supporto diretto per il Giapponese IM (`canna') ha il supporto persino in console ed è indirizzato verso molte altre caratteristiche giapponesi, ed è maturo, potreste ancora volerlo :-) I programmi potrebbero avere la necessità di essere configurati oltre la configurazione `locale', per fornire un ambiente di lavoro confortevole. Il pacchetto `language-env' ed il suo comando `set-language-env' facilitano di molto questo processo. Vedere anche il documento sulla internazionalizzazione, Introduction to i18n (http://www.debian.org/doc/manuals/intro-i18n/). E' indirizzato agli sviluppatori, ma è anche utile per gli amministratori di sistema. 9.8. Multilingualizzazione (m17n) --------------------------------- Sezione 9.7, `Localizzazione (l10n)' abilitato dal pacchetto `language-env' e simili, è mirato ad ottenere una localizzazione monolingua. Questi pacchetti usano anche codifiche tradizionali come scelta per la codifica del testo. Non potete mescolare in un tale ambiente testo in Francese e Giapponese, poiche utilizzano codifiche incompatibili ISO-8859-1 ed EUC-JP, rispettivamente. Potete ottenere un Desktop multilingua UTF-8 usando GNOME e KDE eseguiti sotto uno dei locale UTF-8 disponibili. (Sarge) In tale ambiente potrete mescolare caratteri inglesi, cinesi, russi e giapponesi sotto programmi complianti con UTF-8. [1] In un tale ambiente, il nuovo metodo di input multilingualizzato (IM) che usa `scim' è da preferirsi. IM offerto da `scim' viene attivato e disattivato premendo Ctrl-spazio insieme. Il motore di conversione dell'input può essere cambiato cliccando il piccolo pannello SCIM. `vim' offers the multilingualized environment and can handle both UTF-8 and conventionally encoded files (EUC-JP, ISO-8859-1, ...) when it is run under the UTF-8 console such as `gnome-teminal'. See vim help message with pressing [Esc] and typing `:help mbyte.txt'. [1] Il pacchetto `language-env' non è molto utile in un ambiente multilingualizzato. ------------------------------------------------------------------------------- 10. Configurare la rete ----------------------- Questo capitolo è focalizzato sull'amministrazione di rete in Debian. per un'introduzione generale alla rete in GNU/Linux, leggete il Net-HOWTO (http://www.tldp.org/HOWTO/Net-HOWTO/index.html). Per permettere ad un host Debian di accedere ad Internet, le sue interfacce di rete devono essere supportate dal kernel e propriamente configurate. Il primo requisito è il supporto del kernel per i dispositivi di rete, tipo schede Ethernet, Wi-Fi e modem. Per ottenere detto supporto potreste dover ricompilare il kernel, o aggiungere moduli ad esso, come descritto in Capitolo 7, `Il kernel Linux su Debian'. La configurazione dei dispositivi di rete è spiegata sotto. Le informazioni di questo capitolo sono state aggiornate per Sarge. Molte di esse non si applicano a distribuzioni precedenti. 10.1. Le basi dell'IP networking -------------------------------- Un host Debian può avere parecchie interfacce, ciscuna con il proprio indirizzo IP (Internet Protocol). Le interfacce possono essere di tipi differenti, inclusi: * Loopback: `lo' * Ethernet: `eth0', `eth1', ... * Wi-Fi: `wlan0', `wlan1', ... [1] * Token Ring: `tr0', `tr1', ... * PPP: `ppp0', `ppp1', ... Esiste una vasta gamma di altri dispositivi di rete disponibili, inclusi SLIP, PLIP (linea seriale e parallela IP), dispositivi "shaper" per controllare il traffico su certe interfacce, frame relay, AX.25, X.25, ARCnet, e LocalTalk. Ciascuna interfaccia connessa direttamente ad Internet (o a qualsiasi rete basata su IP) viene identificata da un indirizzo unico a 32 bit. [2] L'indirizzo Ip può essere diviso in una parte relativa alla rete e ad una parte relativa all'host. Se prendete un indirizzo IP, impostate ad 1 i bit relativi alla rete e a 0 quelli relativi all'host, ottenete il net mask della rete. tradizionalmente, le reti IP sono raggruppate in classi, le cui parti di indirizzo sono lunghe 8, 16 o 24 bit. [3] Indirizzi IP net mask lunghezza Classe A 1.0.0.0 - 126.255.255.255 255.0.0.0 = /8 Classe B 128.0.0.0 - 191.255.255.255 255.255.0.0 = /16 Classe C 192.0.0.0 - 223.255.255.255 255.255.255.0 = /24 Gli indirizzi che non sono in questi intervalli vengono usati per scopi speciali. Esistono intervalli in ciascuna classe che sono riservati per l'uso nelle local area network (LAN). Questi indirizzi sono garantiti non entrare in conflitto con qualsiasi indirizzo di Internet propriamente detto. (Per lo stesso ragionamento, se uno di essi viene assegnato ad un host, allora detto host non deve accedere direttamente ad Internet, ma attraverso un gateway che agisca come proxy per i singoli servizi od altrimenti esegua Network Address Translation.) Questi intervalli vengono forniti nella tabella seguente, insieme al numero di intervalli per ciascuna classe. indirizzi lunghezza quantità Class A 10.x.x.x /8 1 Class B 172.16.x.x - 172.31.x.x /16 16 Class C 192.168.0.x - 192.168.255.x /24 256 Il primo indirizzo di una rete IP è l'indirizzo della rete stessa. L'ultimo è l'indirizzo di broadcast per la rete. [4] Tutti gli altri indirizzi della rete possono essere allocati agli host. Di questi, il primo o l'ultimo indirizzo vengono in genere allocati al gateway Internet per la rete. La tablla d'instradamento contiene le informazioni del kernel su come inviare i pacchetti IP alle loro destinazioni. Ecco un esempio di tabella per un host Debian su una LAN con indirizzo IP 192.168.50.x/24. L'host 192.168.50.1 (anch'esso sulla LAN) è un router per la rete aziendale 172.20.x.x/16 e l'host 192.168.50.254 (anch'esso sulla LAN) è un router per Internet. # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 2 lo 192.168.50.0 * 255.255.255.0 U 0 0 137 eth0 172.20.0.0 192.168.50.1 255.255.0.0 UG 1 0 7 eth0 default 192.168.50.254 0.0.0.0 UG 1 0 36 eth0 * La prima riga dopo l'intestazione dice che il traffico destinato alla rete `127.x.x.x' verrà reindirizzato attraverso `lo', l'interfacia di loopback. * La seconda riga dice che il traffico destinato agli host sulla LAN verrà reindirizzato attraverso `eth0'. * La terza dice che il traffico destinato alla ret aziendale verrà reindirizzato verso il gateway `192.168.50.1', sempre tramite `eth0'. * La quarta dice che il traffico destinato ad Internet verrà reindirizzato verso il gateway `192.168.50.254', sempre tramite `eth0'. Gli indirizzi IP nella tabella possono apparire anche come nomi, ottenuti guardando gli indirizzi in `/etc/networks' o usando il resolver della Libreria C. In aggiunta al reindirizzamento, il kernel può eseguire network address translation, traffic shaping e filtering. Vedere il Net-HOWTO (http://www.tldp.org/HOWTO/Net-HOWTO/index.html) ed altri HOWTO sul networking (http://www.tldp.org/HOWTO/Networking-Overview-HOWTO.html) per maggiori informazioni di base. [1] Notate che un'interfaccia Wi-Fi è in realtà uno pseudonimo per un'interfaccia Ethernet che fornisce l'accesso ai parametri di configurazione specifici per Wi-Fi. Questi parametri vengono controllati mediante il programma `iwconfig'. [2] Ciò è vero se si usa la versione 4 di IP. In IPv6 gli indirizzi sono a 128 bit. Vedere http://www.ipv6.org/. [3] Questo sistema era rigido e portava alla perdita di molti indirizzi IP, così oggi le reti IPv4 sono allocate con indirizzi di lunghezza variabile. [4] L'indirizzo della rete si può ottenere mediante la funzione AND bit a bit eseguita su un indirizzo della rete e la net mask. Quello di broadcast, invece, mediante la funzione OR bit a bit di un indirizzo di rete con il complemento a 1 della net mask. 10.2. Configurazione della rete a basso livello ----------------------------------------------- Gli strumenti tradizionali per la configurazione a basso livello dei sistemi GNU/Linux, sono `ifconfig' e `route', che sono forniti dal pacchetto `net-tools'. Essi sono stati ufficialmente soppiantati da `ip', fornito dal pacchetto `iproute'. Il programma `ip' funziona con Linux 2.2 ed oltre ed è più valido degli altri strumenti. Comunque, questi ultimi ancora funzionano e sono più familiari a molti utenti. 10.2.1. Configurazione a basso livello -- `ifconfig' and `route' ---------------------------------------------------------------- Ecco un'illustrazione su come modificare l'indirizzo IP dell'interfaccia `eth0' da `192.168.0.3' a `192.168.0.111' e per rendere `eth0' il route alla rete `10.0.0.0' via `192.168.0.1'. Iniziamo lanciando `ifconfig' e `route' senza argomenti, per mostrare lo stato attuale di tutte le interfacce di rete e del reindirizzamento. # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0 inet addr:192.168.0.3 Bcast:192.168.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:23363 errors:0 dropped:0 overruns:0 frame:0 TX packets:21798 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:13479541 (12.8 MiB) TX bytes:20262643 (19.3 MiB) Interrupt:9 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:230172 errors:0 dropped:0 overruns:0 frame:0 TX packets:230172 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:22685256 (21.6 MiB) TX bytes:22685256 (21.6 MiB) # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.0.0 U 0 0 0 eth0 default 192.168.0.1 255.255.255.255 UG 0 0 0 eth0 Prima disattiviamo l'interfaccia. # ifconfig eth0 inet down # ifconfig lo Link encap:Local Loopback ... (la voce eth0 è sparita) # route ... (le voci della tabella di reindirizzamento sono scomparse) Poi, riattiviamola con il nuovo indirizzo IP e nuovo reindirizzamento. # ifconfig eth0 inet up 192.168.0.111 \ netmask 255.255.255.0 broadcast 192.168.0.255 # route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 dev eth0 Il risultato: # ifconfig eth0 Link encap:Ethernet HWaddr 08:00:46:7A:02:B0 inet addr:192.168.0.111 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ... lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 ... # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 10.0.0.0 192.168.0.1 255.0.0.0 UG 0 0 0 eth0 Per maggiori informazioni, vedere ifconfig(8) e route(8). 10.2.2. Configurazione a basso livello -- `ip' ---------------------------------------------- I comandi equivalenti per `ip' dei precedenti per `ifconfig' e `route' sono: * `ip link show' * `ip route list' * `ip link set eth0 down' * `ip addr del dev eth0 local 192.168.0.3' * `ip addr add dev eth0 local 192.168.0.111/24 broadcast 192.168.0.255' * `ip link set eth0 up' * `ip route add dev eth0 to 10.0.0.0/8 src 192.168.0.111 via 192.168.0.1' `Ip' stampa la sintassi dei suoi comandi se lanciato con l'argomento `help'. Per esempio, `ip link help' mostra: Usage: ip link set DEVICE { up | down | arp { on | off } | dynamic { on | off } | multicast { on | off } | txqueuelen PACKETS | name NEWNAME | address LLADDR | broadcast LLADDR | mtu MTU } ip link show [ DEVICE ] Vedere anche ip(8). 10.2.3. Configrazione di un'interfaccia Wi-Fi. ---------------------------------------------- Per le interfacce Wi-Fi, si usa il programma `iwconfig', che è fornito dal pacchetto `wireless-tools' in aggiunta a `ifconfig' o `ip'. Vedere iwconfig(8). 10.2.4. Configurare un'interfaccia PPP -------------------------------------- Se accedete ad Internet attraverso un modem connesso alla linea telefonica analogica, allora la connessione viene negoziata mediante il Protocollo Punto-a-Punto (PPP). Si accede a tali connessioni come interfacce di rete `ppp0', `ppp1' e così via. L'interfaccia PPP viene gestita dal demone `pppd', fornito dal pacchetto `ppp'. Ergo, per l'utente, configurare l'interfaccia PPP significa configurare `pppd'. 10.2.4.1. Configurare `pppd' manualmente ---------------------------------------- Affinchè una connessione di rete venga stabilita, si deve aprire una porta di comunicazione (in genere seriale), devono essere dati dei comandi ad un dispositivo di comunicazione (in gener un modem), si deve fare il numero telefonico, ci si deve autenticare presso un demone PPP esterno, si deve creare un'interfacia PPP e le tabelle di reindirizzamento devono essere modificate così che il traffico venga inviato sulla connessione. `pppd' fa tutto ciò e, di conseguenza, ha un elenco molto lungo di opzioni operative. Esse sono descritte in pppd(8). Su un sistema Debian, le opzioni globali vengono impostate in `/etc/ppp/options'. Quelle specifiche per l'utente in `~/.ppprc'. Quelle che dipendono dalla porta utilizzata vengono immagazzinate in `/etc/ppp/options.'. Per esempio, ammettiamo che abbiate due modem---uno interno, Lucent LT modem, a cui si accede tramite /dev/LT-modem ed uno esterno, a cui si accede tramite /dev/ttyS0. Create i seguenti file di opzioni. # cat > /etc/ppp/options.LT-modem < /etc/ppp/options.ttyS0 < /etc/ppp/peers/KPN < /etc/ppp/peers/Planet < /etc/ppp/peers/KPN-Amsterdam < /etc/ppp/peers/KPN-DenHaag < /etc/ppp/peers/Planet-Amsterdam < /etc/ppp/peers/Planet-DenHaag < /etc/chatscripts/KPN-DenHaag < CONNECT \d\c EOF # cat > /etc/chatscripts/Planet-DenHaag < CONNECT \d\c EOF Per potervi connettere a questi ISP, avete bisogno dei nomi del client e delle password che `pppd' possa fornire al peer a richiesta. Questa informazione è contenuta o in `/etc/ppp/pap-secrets' (se si usa il protocollo PAP) o in `/etc/ppp/chap-secrets' (se è CHAP). Sebbene CHAP sia più sicuro, PAP è ancora più largamente usato. Siccome questi file contengono dei dati segreti, gruppo e resto del mondo non dovrebbero avere permessi in lettura o scrittura. Il formato di questi file è spiegato in pppd(8). Un "secret" (terzo campo) viene cercato nel file trovando il nome del client (primo campo) e/o il nome del server (secondo campo). Quando ci si collega ad un ISP, in genere non si conosce il nome del server, così si fornisce invece il nome del client; ciò viene fatto nelle righe `user' in `peers/KPN' e `peers/Planet' sopra. # client name server name secret kpn * kpn user3579@planet.nl * myfavoritepet Vedere `/usr/share/doc/ppp/README.Debian.gz' per maggiori informazioni. [1] Questo file viene incluso usando l'opzione `call'. 10.2.4.2. Configurare `pppd' con `pppconfig' -------------------------------------------- Un modo veloce per configurare `pppd' è tramite il programma `pppconfig', fornito dal pacchetto omonimo. `pppconfig' imposta i file come quelli sopra, dopo aver chiesto all'utente alcune domande, tramite un'interfaccia a menu. 10.2.4.3. Configurare un'interfaccia PPP con `wvdial' ----------------------------------------------------- Un approccio diverso all'uso di `pppd' è di lanciarlo da `wvdial', fornito dal pacchetto `wvdial'. Invece di far lanciare a `pppd' `chat' per aprire e negoziare la connessione, `wvdial' esegue il numero e la negoziazione iniziale, poi lancia `pppd' per fare il resto. Dando solo numero telefonico, username e password a `wvdial' si ha successo nel compiere la connessione nella maggior parte dei casi. 10.3. Dare un nome al computer ------------------------------ 10.3.1. Hostname ---------------- Un sistema Debian ha talvolta bisogno di identificarsi tramite un nome. All'uopo, il kernel mantiene un _hostname_. Lo script di inizializzazione `/etc/init.d/hostname.sh' imposta l' hostname al boot (usando il comando `hostname') al nome contenuto in `/etc/hostname'. Questo file deve contenere _soslo_ l'hostname, non un nome di dominio pienamente qualificato. Per mostrare l'hostname attuale, lanciate `hostname' senza argomenti. 10.3.2. Mailname ---------------- Il _mailname_ di un host è il nome che i programmi che hanno a che fare con la posta usano per identificare l'host. Il file `/etc/mailname' contiene questo nome, seguito da una riga vuota. Il mailname è in genere uno dei nomi dominio pienamente qualificati dell'host. Vedere mailname(5). Quello che il destinatario di una mail vede nel campo `From:' di un messaggio inviato dal vostro host Debian dipende da come sono configurati i vostri Mail User Agent (MUA) e Mail Transfer Agents (MTA). Supponiamo che un utente locale `' mandi un messaggio da un hos con mailname `'. Il campo `From:' della mail in uscita sarà: * "`From: @'" se il MUA non ha il campo `From:' impostato; * "`From: @'" se il MUA ha il campo "`From: '" impostato; * "`From: @'" se il MUA ha il campo "`From: @'" impostato; Persino quando il MUA ha un campo `From:' impostato, il MTA può aggiungere un campo "`Sender:@'" per indicarne la sua vera origine. Naturalmente, quando tutti i MTA coinvolti eseguono la riscrittura dell'indirizzo, come discusso in Sezione 9.6.1.3, `Raccolta di tutti gli indirizzi e-mail inesistenti in Exim' e Sezione 9.6.1.4, `Riscrivere selettivamente l'indirizzo per la posta in uscita (Exim)', l'indirizzo visto dal destinatario può essere cambiato in qualsiasi cosa. 10.4. Domain Name Service (DNS) ------------------------------- Gli host possono venire definiti per nome dominio e per indirizzo IP. Il DNS è un sistema client-server in cui i risolutori del nome consultano i nameserver per associare i nomi dominio con gli indirizzi IP ed altre proprietà degli host. La libreria GNU C resolver(3) è anch'essa in grado di cercare gli indirizzi Ip nei file o di consultare i Network Information Services (NIS). Per vedere quale nome dominio è associato con l'host locale, usate il comando `hostname --fqdn'. Quasto mostra il primo nome dominio pienamente qualificato che il risolutore trova per l'hostname locale. [1] [1] Tecnicamente è il FQDN dato da gethostbyname(2) per l'hostname dato da gethostname(2). 10.4.1. Il risolutore --------------------- Il lavoro di scoprire quali indirizzi IP sono associati con un dominio particolare, è a carico del risolutore. Il più comunemente usato è il gruppo di funzioni che va sotto il nome di resolver (resolver(3)) nella libreria GNU C. Un altro è il risolutore FireDNS, fornito da pacchetto `libfiredns'. Come il risolutore LIBC risolva i nomi dipende dalla riga `hosts' nel file di configurazione `/etc/nsswitch.conf'. Questa riga elenca i servizi che dovrebbero essere usati per risolvere un nome: p. es., `dns', `files', `nis', `nisplus'. [1] Vedere nsswitch.conf(5). Fintanto che si usa il servizio `files', il comportamento del risolutore viene anche gestito dal file di configurazione `/etc/hosts'. Vedere hosts(5). Tutti i file sopra descritti sono statici e possono essere modificati con il vostro editor preferito. Fintanto che si usa il servizio `dns', il comportamento delb risolutore viene gestito anche dal file di configurazione `/etc/resolv.conf'. Vedere resolv.conf(5). Una delle funzioni principali di `resolv.conf' è di elencare gli indirizzi IP dei nameserver che verranno contattati per risolvere il nome. Tale lista spesso dipende dal tipo di rete a cui ci si connette e queto tipo può cambiare nel tempo mentre il vostro computer sta funzionando. Programmi tipo `pppd' e `dhclient' sono in grado di manipolare `resolv.conf' per aggiungere e rimuovere righe, ma quaste funzionalità non funzionano sempre in maniera appropriata, entrando in conflitto una con l'altra. Il pacchetto `resolvconf' risolve il problema in maniera migliore, fornendo un'infrastruttura standard per aggiornare questo file. Vedere Sezione 10.4.2, `Gestire le informazioni del nameserver -- `resolvconf''. [1] Il controllo della risoluzione dei nomi è anche affidato al file di configurazione `/etc/host.conf'. La riga `order' in questo file elenca i metodi che devono essere usati per risolvere in nome: p. es., `bind', `hosts', `nis'. Vedere host.conf(5). Penso che questa riga sia stata soppiantata da quella `hosts' in `nsswitch.conf', ma non ne sono certo. 10.4.2. Gestire le informazioni del nameserver -- `resolvconf' -------------------------------------------------------------- Il pacchetto `resolvconf' fornisce un'infrastruttura per la gestione dinamica delle informazioni sui nameserver disponibili. Risolve l'annoso problema di come mantenere una lista dinamica di nameserver utilizzabile dal risolutore a dalle cache DNS. Resolvconf si pone come intermediario fra i programmi che controllano le interfacce di rete e forniscono le informazioni sul nameserver e le applicazioni che necessitano di dette informazioni. `resolvconf' è disegnato per lavorare senza alcuna necessità di configurazione manuale. Comunque, il pacchetto è abbastanza nuovo e può richiedere un intervento manuale per farlo funzionare in maniera appropriata. Ciò è sicuramente vero se avete personalizzato dei pacchetti in maniera da aggiornare `/etc/resolv.conf': dovrete disabilitare le vostre modifiche. Vedere /usr/share/doc/resolvconf/README.gz for details. 10.4.3. Salvare i nomi cercati -- `nscd', `dnsmasq', `pdnsd', `bind9' --------------------------------------------------------------------- Se il vostro nameserver è lento a rispondere, allora potete usare `nscd' per mettere in cache i risultati delle ricerche ottenuti usando il risolutore `libc6'. Se volete salvare i risultati per altri host sulla vostra rete locale, allora potreste voler utilizzare un caching forwarding nameserver tipo `dnsmasq' o `pdnsd'. Se volete, potete anche usare `named' di `bind9', per lo stesso scopo. E', però, un programma pesante per cui a meno che abbiate bisogno delle sue funzionalità avanzate, vi troverete meglio con uno dei pacchetti menzionati prima. Tutti questi pacchetti funzionano bene con `resolvconf'. 10.4.4. Fornire un Domain Name Service -- `bind' ------------------------------------------------ Se dovete fornire un name service autoritativo per un dominio, allora avete bisogno di un nameserver con tutti i crismi, come `named', fornito dal pacchetto `bind9'. Se installate `bind9', dovreste installare anche `dnsutils'. Potreste voler installare anche questi pacchetti di utilità: `bind9-host'; `dns-browse'; `dnscvsutil'; `nslint'. Ed anche il pacchetto con la documentazione: `bind9-doc'. Nonchè questi pacchetti per lo sviluppo: `libbind-dev'; `libnet-dns-perl'. Se configurate le interfacce con DHCP, allora troverete questo pacchetto utile: `dhcp-dns'. Installate `bind9' o `dpkg-reconfigure' -- atelo per le impostazioni di base. La configurazione consiste nella modifica di `named.conf'. In Debian esso si trova in `/etc/bind/' ed è usato principalmente per definire le zone DNS di base; `include' altri due file: `named.conf.local', usato per definire le zone locali e `named.conf.options', usato per impostare le opzioni. (Quest'ultimo viene processato da `resolvconf' per produrre `/var/run/bind/named.options', che è identico all'originale tranne che per la specificazione `forwarders', che è una lista dei nameserver correntemente non disponibili. Per usarla modificate la riga `include' in `named.conf' in modo che comprenda `/var/run/bind/named.options'. Vedere Sezione 10.4.2, `Gestire le informazioni del nameserver -- `resolvconf''.) I file di database nominati in `named.conf*' senza un percorso completo vengono salvati in `/var/cache/bind/'. Questo è il posto giusto per salvare i file generati da `named': per esempio, i database per le zone per le quali il demone è secondario. I file statici dei database `/etc/bind/' sono e devono essere riferiti in `named.conf' con il loro percorso completo. Vedere /usr/share/doc/bind9/README.Debian.gz for details. 10.5. Configurare le interfacce di rete con DHCP ------------------------------------------------ La configurazione a basso livello delle inetrfacce può essere automatizzata mediante il Dynamic Host Configuration Protocol (DHCP). Il vostro firewall, o router o il vostro ISP a larga banda possono fornire gli indirizzi IP ed altri parametri in questo modo. Per falro funzionare dovete installare uno dei seguenti pacchetti: * `dhcp3-client' (versione 3, Internet Software Consortium) * `dhcpcd' (Yoichi Hariguchi e Sergei Viznyuk) * `pump' (Red Hat) `pump' è semplice e largamente usato. `dhcp3-client' è complesso, ma ampiamente configurabile. [1] [1] Da Aprile 2004 esiste anche un pacchetto `dhcp-client' disponibile. Questo contiene la versione 2 del client ISC DHCP. Questo è stato soppiantato dalla versione 3, attualmente sotto forma di pacchetto `dhcp3-client'. I manutentori pensano di rinominare `dhcp3-client' in `dhcp-client' dopo il rilascio di Sarge. Accertatevi di non avere installate le versioni sperimentali di `dhcp-client'. `ifupdown' non funziona con esse. 10.6. Configurazione di rete ad alto livello in Debian ------------------------------------------------------ Per semplificare la configurazione di rete, Debian fornisce uno strumento di configurazione standard, che consiste nei programmi `ifup' ed `ifdown' e nel file `/etc/network/interfaces'. [1] Se scegliete `ifupdown' per la vostra configurazione di rete, allora _non_ dovreste usare, di norma, anche i comandi a basso livello. [2] Il programma `ifupdown' è stato scritto con l'intento di utilizzarlo da solo per configurare e deconfigurare le interfacce di rete. Per aggiornare la configurazione di un'interfaccia, fate così: # ifdown eth0 # editor /etc/network/interfaces # modificatelo a piacimento # ifup eth0 Per maggiori informazioni, vedere interfaces(5), /usr/share/doc/ifupdown/examples/network-interfaces.gz e ifup(8). [1] Il formato di `/etc/network/interfaces' per le versioni attuali di `ifupdown' è legermente incompatibile con quello delle versioni precedenti di Potato. Lo script post-installazione di `ifupdown' dovrebbe aggiornare il file automaticamente, se necessario. Comunque è una buona idea controllare il file convertito. [2] Ciò vuol dire nojn utlizzare nemmeno altri strumenti di configurazione ad alto livello, tipo `whereami', che chiamano a loro volta strumenti a basso livello. 10.6.1. Configurare un'interfaccia con un indirizzo IP statico -------------------------------------------------------------- Supponiamo vogliate configurare un'interfaccia Ethernet in maniera che abbia un indirizzo IP fisso di `192.168.0.111'. Esso inizia con `192.168.0', quindi deve essere di una LAN. Supponiamo, inoltre, che `192.168.0.1' sia l'indirizzo del gateway ad Internet della LAN. Modificate `/etc/network/interfaces' in maniera che abbia un blocco di righe come questo: iface eth0 inet static address 192.168.0.111 netmask 255.255.255.0 gateway 192.168.0.1 Potete configurare altri aspetti dell'interfaccia od eseguire altre azioni dopo averla attivata o prima di disattivarla, specificando i comandi appropriati sulle righe "up" e "down". iface eth0 inet static address 192.168.0.111 netmask 255.255.255.0 gateway 192.168.0.1 up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE down route del -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.0.2 dev $IFACE up echo Interface $IFACE going up | /usr/bin/logger -t ifup down echo Interface $IFACE Going down | /usr/bin/logger -t ifdown In alternativa i comandi possono essere inseriti in script nelle directory `/etc/network/if-up.d' e `/etc/network/if-down.d'. Essi possono anche implementare opzioni più estese. Vedere interfaces(5) for details. Per esempio, il pacchetto `resolvconf' comprende degli script che vi permettono di aggiungere delle opzioni che specificano che le informazioni sul DNS vengano incluse in `/etc/resolv.conf' mentre l'interfaccia è attiva: iface eth0 inet static address 192.168.0.111 netmask 255.255.255.0 gateway 192.168.0.1 dns-search somedomain.org dns-nameservers 195.238.2.21 195.238.2.22 L'argomento `somedomain.org' dell'opzione `dns-search' corrisponde all'argomento dell'opzione `search' in resolv.conf(5). Gli argomenti `195.238.2.21' e `195.238.2.22' dell'opzione `dns-nameservers' corrisponde agli argomenti delle opzioni `nameserver'. Altre opzioni riconosciute sono `dns-domain' e `dns-sortlist'. Vedere Sezione 10.4.2, `Gestire le informazioni del nameserver -- `resolvconf''. 10.6.2. Configurare un'interfaccia con DHCP ------------------------------------------- per configurare un'interfaccia con DHCP, modificate `/etc/network/interfaces' in maniera che comprenda una serie di righe come questa: iface eth0 inet dhcp Affinchè funzioni doverete avere installato uno dei client DHCP menzionati in Sezione 10.5, `Configurare le interfacce di rete con DHCP'. 10.6.3. Configurare un'interfaccia Wi-Fi ---------------------------------------- Il pacchetto `wireless-tools' comprende uno script di aggancio `/etc/network/if-pre-up.d/wireless-tools' che gli rende possibile configurarare l'harware Wi-Fi (801.11a/b/g) prima che l'interfaccia venga attivata. La configurazione viene fatta con il programma `iwconfig'; vedere iwconfig(8). Per tutti i parametri possibili di `iwconfig' potete includere un'opzione in `/etc/network/interfaces' con il nome del parametro preceduto da un prefisso "wireless-". Per esempio, per impostare l'ESSID di `eth0' a `myessid' e la chiave di cifratura a `123456789e' prima di attivare `eth0' mediante DHCP, modificate `/etc/network/interfaces' in maniera che comprenda una serie di righe tipo questa: iface eth0 inet dhcp wireless-essid myessid wireless-key 123456789e Notate che non dovreste usare questo metodo per impostare ESSID e chiave se state usando `waproamd' per questa interfaccia. Nel momento in cui `ifup' viene eseguito `waproamd' ha già impostato sia ESSID che chiave. Vedere Sezione 10.10.4, `Iniziare la configurazione di rete -- `waproamd''. 10.6.4. Configurare un'interfaccia PPP -------------------------------------- I programmi `ifup' e `ifdown' usano `pon' e `poff' per aggiungere e rimuovere le interfacce PPP, per cui leggete prima Sezione 10.2.4, `Configurare un'interfaccia PPP'. Supponiamo che abbiate impostato PPP per funzionare con il peer `myisp'. Modificate `/etc/network/interfaces' in maniera che includa una serie di righe come questa: iface ppp0 inet ppp provider myisp In questo modo, `ifup ppp0' esegue pon myisp Sfortunatamente, non è al momento possibile fornire opzioni aggiuntive di `pppd' alle righe `ppp' in `/etc/network/interfaces'. [1] Non è attualmente possibile usare `ifupdown' per eseguire una configurazione ausiliaria delle interfacce PPP. Siccome `pon' termina prima che `pppd' abbia finito di stabilire la connessione, `ifup' eseguegli script `up' prima che l'interfaccia PPP sia pronta all'uso. Finchè questo baco [2] non verrà risolto, resta la necessità di fare una configurazione ausiliaria in `/etc/ppp/ip-up' o in `/etc/ppp/ip-up.d/'. [1] Vedere bug #196877 (http://bugs.debian.org/196877). [2] Vedere bug #127786 (http://bugs.debian.org/127786). 10.6.5. Configurare un'interfaccia PPPoE ---------------------------------------- Molti Internet Service Provider (ISP) con la larga banda usano PPP per negoziare le connessioni, anche se le macchine dei loro clienti sono connesse tramite reti Ethernet e/o ATM. Ciò si ottiene mediante PPP over Ethernet (PPPoE), che è una metodica per l'incapsulazione di flussi PPP all'interno di blocchi Ethernet. Supponiamo che il vostro ISP si chiami `'. Per prima cosa configurate PPP e PPPoE per il peer `'. Il modo più semplice è di installare il pacchetto `pppoeconf' e di lanciare `pppoeconf' da console. Poi modificate `/etc/network/interfaces' in maniera che includa un serie di righe come questa: iface eth0 inet ppp provider Talvolta ci possono essere problemi con le Maximum Transmit Unit (MTU) con PPPoE su Digital Subscriber Line (DSL). Vedere DSL-HOWTO (http://www.tldp.org/HOWTO/DSL-HOWTO/) for details. Notate che se il vostro modem a larga banda contiene un router, allora sarà il modem/router a gestire la connessione PPPoE e ad apparire sul versante LAN come un semplice gateway Ethernet per Internet. 10.6.6. Configurare più interfacce Ethernet per un gateway ---------------------------------------------------------- Supponiamo che `eth0' sia connesso ad Internet con un indirizzo IP configurato mediante DHCP e che `eth1' sia connesso alla LAN con un indirizzo IP statico `192.168.1.1'. Modificate `/etc/network/interfaces' in maniera da comprendere una serie di righe come questa: iface eth0 inet dhcp iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0 Se attivale il NAT su questo host come descritto in Sezione 10.14, `Costruire un gateway router', allora potete condividere la connessione ad Internet con tutti gli altri host dell LAN. 10.6.7. Configurare le interfacce virtuali ------------------------------------------ Mediante le interfacce virtuali potete configurare una singola scheda Ethernet come interfaccia a parecchie sottoreti IP. Per esempio, ammettiamo che il vostro host sia sulla LAN della rete 192.168.0.x/24. Volete conneterlo ad Internet mediante un indirizzo IP pubblico fornito via DHCP usando la vostra scheda Ethernet già esistente. Modificate `/etc/network/interfaces' in maniera che comprenda una serie di righe come questa: iface eth0 inet static address 192.168.0.1 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 iface eth0:0 inet dhcp L'interfaccia `eth0:0' è un'interfaccia virtuale. Quando viene attivata, verrà attivata consensualmente `eth0'. 10.7. Configurazione di rete mediante definizione delle interfacce logiche -------------------------------------------------------------------------- E' importante per il lettore comprendere la differenza fra un' _interfaccia fisica_ ed un' _interfaccia logica_. [1] Un'interfaccia _fisica_ è quella che abbiamo finora chiamato "l'interfaccia", la cosa che il kernel definisce `eth0', `eth1', `ppp0', o quel che avete. Un'interfaccia _logica_ è rappresentata da un gruppo di valori assegnati ai parametri variabili di un' interfacia fisica. Se lo trovate ostico, Sostituite l'espressione "configurato come interfaccia logica " con l'espressione "configurato con il profilo dell'interfaccia " quando leggete. Le definizioni `iface' in `/etc/network/interfaces' sono in realtà definizioni di interfacce logiche, non fisiche. [2] Se non vorrete mai riconfigurare le vostre interfacce, allora potete ignorare questo fatto, pocihè l'interfaccia fisica verrà configurata in partenza come interfaccia logica . Tuttavia, ammettiamo che il vostro computer sia un portatile che trasportate fra casa e lavoro. Quando lo connettete alla rete aziendale o alla LAN casalinga, dovete configurare `eth0' di conseguenza. Definite prima due interfacce logiche, `home' e `work' (invece che `eth0', come fatto prima), che descrivono come l'interfaccia deve essere configurata per la rete casalinga ed aziendale, rispettivamente. iface home inet static address 192.168.0.123 netmask 255.255.255.0 gateway 192.168.0.1 iface work inet static address 81.201.3.123 netmask 255.255.0.0 gateway 81.201.1.1 Allora l'interfaccia fisica `eth0' può essere attivata per casa con la configurazione appropriata, specificando sulla riga di comando: # ifup eth0=home Per riconfigurare `eth0' per il lavoro, date i comandi: # ifdown eth0 # ifup eth0=work Notate che con il file `interfaces' scritto nel modo precedente non sarà più possibile attivare `eth0' con il solo `ifup eth0'. La ragione sta nel fatto che `ifup' usa il nome dell'interfaccia fisica come nome predefinito di quella logica ed ora nel nostro esempio nessuna interfaccia logica `eth0' è definita. [1] Questa terminologia è usata nella documentazione di `ifupdown'. [2] Notate che la interfacce chiamate sulle righe `auto' devono essere fisiche, non logiche. 10.8. Magie della configurazione di rete ---------------------------------------- I nomi delle interfacce possono essere "mappati" come altri nomi quando gira `ifup'. Come ciò accada può essere fatto dipendere dalle circostanze. Perciò, `ifup' può essere configurato in maniera tale da attivare una data interfaccia fisica come interfaccia logica appropriata, scegliendo fra una serie di alternative predefinite. La mappatura dei nomi delle interfacce avviene così: * Se nessun nome di interfaccia logica è dato ad `ifup' da riga di comando, allora il nome della interfaccia fisica viene usato come nome iniziale di quella logica. * Se il nome dell'interfaccia logica corrisponde ad uno di un blocco generale di righe `mapping', allora quella mappatura verrà applicata per generare un nuovo nome per l'interfaccia logica. Ciò avviene a turno per ogni blocco. * Se il nome finale dell'interfaccia logica è l'etichetta di una definizione di interfaccia logica in `/etc/network/interfaces', allora l'interfaccia fisica corrispondente verrà attivata come logica. Altrimenti `ifup' stampa un messaggio che è "Ignoring unknown interface" ed esce. La sintassi del gruppo di righe `mapping' è: mapping script [map