LDR: Linux Domande e Risposte

LDR: Linux Domande e Risposte

LDR: Linux Domande e Risposte

L'indirizzo della versione aggiornata delle LDR: Linux Domande e Risposte è:

<http://web.tiscalinet.it/linuxfaq>

Il sito suddetto è inoltre stato riprodotto nella sezione ildp del sito del Pluto:

<http://www.pluto.linux.it/ildp/LDR/>,

sul sito della rivista Inter.net:

<http://linux.interpuntonet.it/LDR>,

sul sito di Michel Morelli:

<http://www.ziobudda.net/mirror/linuxfaq>,

sul server di David Pisa:

<http://fender.ing.uniud.it>,

sul sito GaliLINUX:

<http://galileo.fis.uniroma2.it/galilinux/documenti>,

sul sito di Claudio Dentice:

<http://utenti.tripod.it/fireboy9>,

sul sito di Paolo Squaratti:

<http://digilander.iol.it/kranz2/linuxfaq/>.

Sul sito del LUG Trieste (<http://trieste.linux.it/docs/LDR>) è possibile consultare la versione html delle LDR.

Il sito di Scorpion (Vincenzo) (<members.xoom.it/Vincenzo79/>) ospita la versione pdf delle LDR.

Due formati .zip (non generati da me) delle LDR sono disponibili presso: <http://www.guidainlinea.com/manuali.net/linux.htm> e <http://linuxiso.hypermart.net/Documentazione/>.

La versione 2000.04.12 di Appunti Linux di Daniele Giacomini ospita nell'ultimo tomo dell'opera, il corpo della versione 2.4 delle LDR.

La versione 2000.07.31 di Appunti di informatica libera di Daniele Giacomini ospita negli ultimi due tomi dell'opera, il corpo della versione 2.8 delle LDR free e nonfree.

LDR nei CD-ROM delle riviste: CD n° 52-1 Inter.net (v. 1.8); CD 87-1 PC-Action (v. 2.2); CD n° 56-1 Inter.net (v. 2.2); CD n° 1 Linux Magazine (v. 2.6).

Michel Morelli ha anche inserito la totalità delle LDR in un database interrogabile presso http://www.ziobudda.net/FAQ

La diffusione di questo documento è incoraggiata in base ai termini della licenza.

Indice generale

Prefazione

Questo è un libro di FAQ su GNU/Linux in italiano.

Esso vuole essere una semplice raccolta di domande e risposte che potrebbero risultare utili a chi utilizza Linux. (702 FAQ: 619 free e 83 non free)

Motivazioni

Ho scelto il nome LDR, Linux Domande e Risposte in quanto questo conferisce una decisa connotazione italiana all'opera preferendolo quindi a comuni acronimi anglosassoni.

Questo documento non si propone di fornire la soluzione completa a tutte le problematiche trattate. Si faccia quindi riferimento alla documentazione più specifica (altri libri, pagine di manuale, HOWTO, guide LDP, ecc.) per ottenere una spiegazione esauriente e dettagliata degli argomenti in questione.

Le LDR sono rivolte sia agli utenti che cominciano ad utilizzare questo meraviglioso sistema operativo che a quelli più esperti.

Separazione in due documenti indipendenti

Dalla versione 2.8 (Agosto 2000) le LDR cessano di essere un unico documento e si scindono in due documenti indipendenti:

  1. LDR free

  2. LDR nonfree

Nel primo dei due documenti saranno comprese FAQ riguardanti software libero; nel secondo saranno invece presenti le FAQ su software di altro genere.

Nel primo documento non sono state omesse le FAQ in cui si parla di altri sistemi operativi proprietari in relazione all'interazione tra questi e un sistema GNU/Linux. In pratica la descrizione delle metodiche utilizzate da chi utilizza un sistema GNU/Linux per accedere alle risorse presenti su dischi o reti la cui natura deriva da software proprietario è stata considerata argomento libero visto che i mezzi per farlo sono liberi.

Per software libero nel primo documento si intende software la cui licenza con cui il software stesso viene distribuito risponde in qualche modo ai requisiti esposti nel manifesto GNU. Questo vale sia per il software che gira su sistemi operativi liberi che per software che gira su sistemi operativi non liberi.

Il perché della divisione

Quando inizialmente comunicai la mia decisione di dividere le LDR in due ai miei conoscenti ed amici, incontrai una reazione che non mi sarei aspettato. Sentii insomma un senso di «attesa», come per dire: «L'idea non è male, vediamo cosa ne viene fuori». Nessuno mi chiese il perché del mio gesto.

Il perché però sono tenuto a darlo, anzi lo voglio comunicare specialmente a chi, completamente digiuno del mondo che ruota attorno al software libero, preferirebbe disporre di un documento unico e non del frutto di una separazione fonte di ulteriore confusione.

Molti iniziano ad utilizzare sistemi GNU/Linux per moda. Altri perché hanno sentito che è gratuito. Altri ancora perché sono stufi di sistemi operativi non conformi alle proprie esigenze. Non sono motivazioni errate, certo, ma l'insieme di programmi ed applicativi di un sistema GNU/Linux, è nato da motivazioni ideologiche e di natura differente.

É il caso di spiegare meglio il significato del termine «libero». In inglese si dice «free», ma free in inglese vuol dire anche gratuito.

Nel 1984 Richard Stallman lasciò il suo posto presso il laboratorio di intelligenza artificiale del MIT. Le motivazioni di questa decisione vanno ricercate nel disagio provato nei confronti di alcune tendenze che il mondo dell'informatica stava prendendo. Le restrizioni nell'utilizzo del software erano quello che più preoccupava Stallman. L'essere costretti, a causa di limitazioni di vario tipo, a non poter condividere con altri il software in tutti i suoi aspetti (il codice sorgente, l'utilizzo, la facoltà di distribuzione, ecc.), spinse Stallman a reagire. Egli decise allora di creare un sistema operativo dall'inizio. Decise che sarebbe stato compatibile con Unix per permettere agli utenti di Unix di potervi migrare una volta pronto. Lo chiamò GNU, acronimo ricorsivo che significa «GNU's Not Unix» (GNU Non è Unix). Nacque il progetto GNU.

Il software libero secondo il progetto GNU deve essere contraddistinto da queste caratteristiche:

Stallman si rese conto che riscrivere un sistema operativo ex novo sarebbe stata un'impresa lunga ed ardua e integrò software GNU con altro software libero in circolazione (il Kernel Linux ad esempio). Nacquero allora le prime distribuzioni GNU/Linux.

Con il passare del tempo però, un sempre più elevato numero di pacchetti di software proprietario si è affiancato al software libero sfruttandone la «moda». L'appendice B, tratta da «Appunti di informatica libera» di Daniele Giacomini, elenca alcune delle particolarità che contraddistinguono il software che «sembra libero».

Utilizziamo software libero su un sistema sognato per essere tale!.

Ecco allora perché ho diviso in due le LDR, separando le domande e risposte sul software libero da quelle sul software proprietario. Spero che questo non provochi disagio o maggiori incomprensioni; inoltre spero che la valenza didattica del gesto sia efficace.

Origine dei contenuti

Le domande e le risposte su GNU/Linux che troverete, sono tratte da gruppi e liste di discussione italiane ma ultimamente sono sempre più spesso il risultato del mio approfondimento su determinati argomenti. Sono raccolte 702 domande e risposte classificate per argomenti. Le FAQ sul software libero sono 619 e quelle sul software proprietario 83.

Alla fine del documento è presente un'appendice in cui vengono raccolti i nomi dei collaboratori le discussioni dei quali sono state utilizzate per la stesura di questo documento. I numeri presenti al fianco dei nomi si riferiscono alle Domande e Risposte cui hanno collaborato.

Lista annuncio

É disponibile, tramite una lista annuncio, un servizio che permette agli iscritti di essere informati sull'evoluzione delle LDR (novità, rilascio nuove versioni, errata corrige, ecc.)

Ci si può iscrivere alla lista ldr-annuncio@egroup.com, inviando un messaggio qualunque a <mailto:ldr-annuncio-subscribe@egroup.com>. Per cancellare la propria iscrizione basta mandare un altro messaggio a <mailto:ldr-annuncio-unsubscribe@egroup.com>. La lista è in sola lettura, per cui non è possibile inviare messaggi al suo indirizzo.

Altra documentazione originale in italiano

L'elenco seguente si riferisce ad altra documentazione originale in italiano sul software libero, di una certa consistenza, pubblicata secondo la filosofia del software libero.

Ringraziamenti

Prima di tutto vorrei ringraziare Eugenia Franzoni; le ho sempre chiesto sin dalle prime versioni consigli e pareri su questo progetto. Eugenia mi ha aiutato molto nell'impostazione iniziale di questo libro.

Grazie anche a Daniele Giacomini. Autore di «Appunti di informatica libera», una delle più belle opere di documentazione italiana su GNU/Linux, ha contribuito a miglioramenti stilistici e tipografici delle LDR. Daniele ha inserito il corpo principale delle LDR (2.4 e 2.8) nelle due ultime versioni della sua opera.

Un particolare ringraziamento va inoltre a tutti coloro che facendo domande o rispondendo hanno contribuito, seppur indirettamente, alla costituzione di questo libro. Un elenco di questi collaboratori è contenuto in un'appendice presente in fondo al documento. Ringrazio inoltre tutti coloro che mi inviano FAQ complete e tutti quelli che mi fanno critiche, appunti, annotazioni su questo lavoro perché è grazie a loro che le LDR si migliorano.

Ringrazio inoltre Michel Morelli, Giorgio Zarrelli, Ivan Fabris, Claudio Dentice, gli amici del LinuxTrent, quelli del LUG Trieste, quelli del GaliLINUX (Claudio Panichi e Emiliano Gabrielli), per avere contribuito alla diffusione dell'opera.

Grazie a Roberto Kaitsas (autore di <http://jump.to/linuxlinks>) per l'impagabile aiuto che mi fornisce nella creazione di questo progetto.

Infine un grande ringraziamento va all'Olivetti PS1 (Processore 8088 senza disco rigido con due lettori floppy da 720 Kbyte) acquistato da un negoziante sotto casa per L. 20 000 e su cui ho curato le LDR nelle fasi iniziali. Per questioni di RAM le nuove versioni vengono stilate su un'altra macchina più potente. Ultimamente grazie ad un sistema ELKS, sono riuscito a far girare su questa macchina obsoleta un sistema Unix.

Parte i.   Amministrazione di sistema

Capitolo 1.   Installazione di GNU/Linux

1.1   Creazione e copia dischi di avvio (boot)

Vorrei sapere come posso fare una copia del dischetto di avvio (boot) o come crearne uno nuovo.

__________

per leggere il floppy:

# dd if=/dev/fd0 of=floppy.img[Invio]

per scriverlo:

# dd if=floppy.img of=/dev/fd0[Invio]

oppure puoi usare mkbootdisk, per crearne uno nuovo, ecco un esempio per il kernel 2.2.7:

# mkbootdisk --device /dev/fd0 2.2.7[Invio]

oppure ancora:

# cp bzImage /dev/fd0[Invio]

Per indicare la partizione del disco rigido su cui dovrà essere montato il root file system (/) si deve utilizzare il comando rdev:

# rdev /dev/fd0 /dev/hd_partizione_dove_montare_root[Invio]

# init 6 (riavvio)[Invio]

Imposta nel BIOS l'avvio da dischetto e il gioco è fatto.

1.2   Dischi di installazione Debian GNU/Linux

Come creo i dischetti di installazione di una distribuzione Debian GNU/Linux da Dos?

__________

Come per quelli Red Hat, rawrite è un comando valido per copiare qualsiasi immagine di dischetto. In Debian GNU/Linux trovi rawrite nella directory:

tools/rawrite2 (meglio usare la versione 2)

e le immagini dei dischetti in:

dists/stable/main/disks-i386/current. Il numero di dischetti da usare dipende dal metodo di installazione.

1.3   Dischi installazione Red Hat

Come creo i dischetti di installazione per una distribuzione Red Hat da Dos?

__________

Devi usare il programma rawrite presente nella directory \i386\dosutils della distribuzione che hai.

Il comando è:

D:\>rawrite immagine a:[Invio]

dove immagine è il nome del file dell'immagine presente in \i386\images. I file sono 2 per creare i 2 dischetti. La terza immagine è per la risoluzione dei problemi di installazione.

1.4   fips

Vorrei regalare a Linux un altro giga, so che esiste fips, come si usa? Io lo lancio da Windows 98 in una finestra dos ma ci capisco poco ed infatti ad un certo punto (dopo che mi ha fatto domande strane sulla geometria) si blocca tutto e rimane il cursore lampeggiante ed immobile.

__________

fips deve essere lanciato da DOS puro, non da emulazione Windows. Esegui la deframmentazione del disco rigido e riavvia in modalità Dos e in seguito esegui fips e segui le istruzioni.

Attenzione. È consigliabile leggere con attenzione la documentazione di fips, che dovreste trovare insieme all'eseguibile, e comunque fare il backup del contenuto del disco Windows (o almeno dei file non recuperabili in altri modi)

1.5   Limitazioni del cilindro 1024 - questione risolta con le recenti versioni di LILO

Al momento di suddividere in partizioni il disco con l'uso di fdisk mi viene restituito il seguente errore:

The number of cylinders for this disk is set to 2105.

This is larger than 1024, and may cause problems with:

1) software that runs at boot time (e.g. LILO)

2) booting and partitioning software from other OSs (e.g. DOS FDISK, OS/2 FDISK)

__________

Non ti preoccupare, più che un errore è un avvertimento sul fatto che alcuni programmi (LILO) o sistemi operativi non sono in grado di accedere ai cilindri oltre il 1024° (il n° 1023) per problemi del BIOS.

Accorgimenti:

  1. attiva la modalità LBA del BIOS, che traduce il disco (divide il n° dei cilindri per un certo numero e moltiplica il numero di testine per lo stesso)

  2. crei (e questo forse è meglio) una partizione di boot entro il 1024° cilindro, ad es. /boot per GNU/Linux, senza abilitare la modalità LBA

C'è da dire in ogni caso che le ultime versioni di LILO non presentano più queste limitazioni. Scarica quindi una versione aggiornata del LInux LOader.

1.6   Se compro il disco rigido nuovo e Windows si viene a trovare su /dev/hdb - (come invertire da LILO master e slave)

Avevo installato Windows su una partizione di , poi ho comprato un nuovo disco rigido più potente. Ho modificato i ponticelli come da prassi, ho spostato il vecchio «hda» da primario master a primario slave e ho messo il nuovo disco rigido al posto del vecchio. Installo Linux sul disco nuovo, installo LILO, e Linux funziona. Windows invece non ne vuole sapere di avviarsi da questa nuova posizione, quindi mi serve un modo per ingannarlo e fargli credere di essere su /dev/hda anziché su /dev/hdb. Come faccio?

__________

Soluzione 1: BIOS

Dal BIOS disabilita il disco rigido primario master, salva le impostazioni e riavvia. In questo modo Windows si trova effettivamente sul primo disco rigido in fase di boot e parte normalmente.

se non dovesse partire vuol dire che si è compromesso il MBR (master boot record), quindi avvia da disco di ripristino di Windows (lo hai ?) e digita:

# fdisk /MBR[Invio]

per rimettere a posto il MBR. Riavvia da disco rigido e Windows dovrebbe avviarsi.

Soluzione 2: LILO

nella sezione relativa a Windows aggiungi le seguenti impostazioni:

  other = /dev/hdb1    #nel mio caso
  label = DOS
  table = /dev/hdb

                #le seguenti 4 righe dicono
                #a LILO di far credere che
                #i dischi rigidi siano scambiati, cioè
                #che lo slave primario sia sul
                #master primario e viceversa

  map-drive=0x80
       to = 0x81
  map-drive=0x81
       to = 0x80

In questo modo i dischi vengono rimappati istantaneamente al contrario rispetto a come sono impostati.

Altro problema è cercare di installare Windows su disco slave mentre sul master c'è già Linux.

I passi da seguire sono i seguenti:

  1. copia il kernel su un dischetto, in modo da poter eventualmente riavviare da floppy. Il comando necessario è:

    # cat /boot/vmlinuz > /dev/fd0[Invio]

    dove /boot/vmlinuz è il percorso assoluto per raggiungere il kernel in uso. (prova a fare un boot da floppy col dischetto appena creato per verificare che il procedimento vada a buon fine.)

  2. Da BIOS, disabilita il disco master;

  3. lancia il setup di windows (avvio direttamente da cd, oppure avvio da floppy e poi installazione da cd);

  4. aspetta che Windows concluda i suoi numerosi riavvii per terminare l'installazione;

  5. riavvia, rientra nel BIOS e riabilita il primo disco rigido;

  6. riavvia da dischetto con il disco-kernel che si era creato al passo 1;

  7. in Linux, modifica /etc/lilo.conf nel modo indicato sopra;

  8. lancia LILO.

In questo modo, avviando la macchina con LILO si dovrebbe riuscire a caricare entrambi i sistemi operativi.

1.7   CD-ROM esportato durante installazione via NFS

Ho provato a creare il disco di boot e di root ma dopo l'inserimento delle informazioni relative alla lingua, alla tastiera ecc., mi viene richiesta la fonte di installazione tra queste opzioni:

l'NFS su parallela è una soluzione, ma sul server devo esportare il CD-ROM . Come si fa ad esportare una risorsa (ad esempio il CD-ROM )?

__________

Aggiungi il percorso al file /etc/exports facendo riferimento alle pagine di manuale di nfs e di exports

/cdrom          host_che_mi_pare(ro)

dove ro sta per read only; poi fai ripartire l'NFS con:

# /etc/init.d/nfs restart[Invio]

Ovviamente dovrai avere installato nfsd, oppure avere compilato il supporto per server NFS nel kernel (c'è nei kernel 2.2, ma non è ancora del tutto stabile)

Capitolo 2.   Avvio e arresto del sistema

2.1   Avvio ed arresto del sistema

Come si arresta il sistema? Come si riavvia?

__________

Per arrestare il sistema dai il comando:

# shutdown -h now[Invio]

oppure:

# init 0[Invio]

Per riavviare il sistema:

# shutdown -r now[Invio]

o:

# init 6[Invio]

2.2   Disabilitare l'APM all'avvio

Sto avendo dei problemi con un portatile che si blocca all'avvio molto probabilmente a causa dell'APM. È possibile disabilitarlo all'avvio?

__________

Al prompt di LILO digita (ipotizzando che linux sia il nome che hai inserito nel lilo.conf per il sistema linux):

LILO boot: linux apm=off[Invio]

Così dovrebbe partire senza abilitare l'APM.

2.3   Come fermare l'arresto o il riavvio del sistema una volta che se ne è impartito il comando

Non c'è la possibilità di annullare il comando di arresto o di riavvio? A volte mi accorgo che avrei voluto fare ulteriori operazioni sul sistema ma non sono riuscito a bloccarne il riavvio per eseguirle.

__________

Per fermare il riavvio (o l'arresto) devi dare il comando:

# shutdown -c[Invio]

(-c: cancel shutdown) ma normalmente non puoi farlo perché appena dai il comando di riavvio, le console vengono disattivate. Se invece si posticipa il riavvio con il comando:

# shutdown -r ore:minuti &[Invio]

(il sistema si riavvierà alle ore:minuti), è possibile interrompere il riavvio con:

# shutdown -c[Invio]

2.4   Opzione -n dello shutdown

Usando shutdown con l'opzione -n il riavvio o lo spegnimento della macchina sono velocissimi. Penserei di usare sempre questa opzione, definendo un alias in .bashrc. È pericoloso?

__________

Direi di sì.

Hai letto la man page di shutdown?

-n     [DEPRECATED] Don't call init(8) to do
       the  shutdown but  do it ourself.  The use of this
       option is dis-couraged, and its results are not
       always what you'd expect.

-n     [SCONSIGLIATO] Non impartite init(8) per lo
       shutdown ma fatelo voi.  L'utilizzo di questa opzione 
       è sconsigliato, e i risultati ottenuti
       non sono quelli che ci si aspettava.

2.5   Concedere la possibilità di arrestare il sistema a tutti gli utenti

Come spiego a Linux che voglio che tutti gli utenti possano effettuare lo spegnimento senza per questo dotarli di ulteriori privilegi?

__________

si può fare o selezionando l'attributo del set user ID per il comando shutdown:

# chmod 4755 /sbin/shutdown[Invio]

(così il comando shutdown verrà sempre eseguito come se fosse lanciato dall'utente root)

oppure una via più raffinata (e selettiva) è quella di creare un utente tipo questo:

halt:x:0:0:,,,:/home/halt:/sbin/halt

così l'arresto del sistema lo possono fare tutti e solo quelli che hanno la password per quell'utente.

2.6   Permessi per riavviare il sistema

Come si fa ad assegnare ad un utente il permesso di riavviare il sistema senza che intervenga l'utente root?

__________

Con sudo. (man sudo per maggiori informazioni)

Devi modificare il file /etc/sudoers con il seguente comando:

$ visudo[Invio]

(che sarebbe il vi per sudo con controllo congruenza ecc.)

e aggiungere una riga tipo questa:

pippo   pluto=/sbin/shutdown -[hr] now

dove pippo è l'utente e pluto il nome della macchina. -[hr] significa che può lanciare sia shutdown -h che -r.

Una volta fatte le modifiche, l'utente pippo dovrà impartire:

$ sudo shutdown -h now[Invio]

e gli verrà chiesta la password per proseguire con l'arresto o il riavvio.

2.7   Come vietare agli utenti la possibilità di riavviare con Ctrl-Alt-Canc

È possibile fare in modo che un utente non root non possa usare tale combinazione di tasti?

__________

Devi commentare la riga con ctrlaltcanc in /etc/inittab.

2.8   Loadlin

Come posso far partire Linux senza LILO?

__________

Devi solo copiarti i vari kernel in una directory del Dos/Windows e scompattarli usando Loadlin (è possibile usare:

install=c:\linux\Loadlin.exe

nel config.sys o Loadlin.exe

in una riga dell'autoexec.bat o ancora usare un batch file appropriato).

Esempi:

rem C:\LINUX\LINUX2.BAT
rem l'immagine corrisponde al kernel 2.2.2
rem la partizione è la seconda di un disco SCSI
@pause
@echo Premere Ctrl-C per interrompere
C:\LINUX\LOADLIN C:\LINUX\bzImage.222 root=/dev/sda2 ro

rem C:\LINUX\LINUX_R.BAT
rem l'immagine corrisponde al kernel 2.0.36 della Red Hat
rem la partizione è la seconda di un disco IDE master
@pause
@echo Premere Ctrl-C per interrompere
C:\LINUX\LOADLIN C:\LINUX\vmlinuz2.036 root=/dev/hda2 ro

rem C:\LINUX\SINGLE.BAT
rem l'immagine corrisponde al kernel 2.0.36 della Red Hat
rem la partizione è la seconda di un disco IDE slave
rem NOTARE L'OPZIONE SINGLE PER PARTIRE IN MONOUTENZA
@pause
@echo Premere Ctrl-C per interrompere
C:\LINUX\LOADLIN C:\LINUX\vmlinuz2.036 single root=/dev/hdb2 ro

2.9   Impostazione di runlevel a 0; il sistema si accende e si rispegne

Facendo alcuni esperimenti ho impostato involontariamente il runlevel a zero e adesso in fase di caricamento dopo il montaggio del file system la macchina si spegne. Cosa posso fare per rimediare?

__________

Al prompt di LILO scrivi:

# linux init=/bin/bash[Invio]

(dove al posto di «linux» metti l'etichetta scelta per caricare il tuo Linux). Una volta entrato dovrai montare a mano in modalità lettura-scrittura il file system root:

# mount -n -o remount,rw /[Invio]

ora puoi operare.

Un'altra soluzione è di dare un linux 1 e cambiare subito il runlevel.

2.10   Spegnimento automatico della macchina alla fine dello shutdown

Disponendo di un elaboratore con BIOS APM compatibile ho deciso di attivare le funzionalità di risparmio energetico dei nuovi Kernel tra cui c'è quella dello spegnimento automatico della macchina. Come faccio?

__________

Va inserito 'halt -p' al posto di 'halt' nel file /etc/rc.d/init.d/halt

--------------------------------------
case "$0" in
  *halt)
        message="The system is halted"
        command="halt -p"
        ;;
  *reboot)
--------------------------------------

Ovviamente dovrai avere ricompilato il kernel con il supporto APM, attivando l'opzione power off on shutdown.

2.11   Impossibile spegnere la macchina con una scheda madre Soyo 5-EM

Avevo compilato il Kernel 2.2.5 per poter spegnere la macchina automaticamente in seguito allo shutdown. Purtroppo la cosa non ha funzionato pur avendo seguito le indicazioni necessarie. Sono andato sul sito della Soyo <http://www.soyo.com> nella sezione software. Lì ho trovato una directory chiamata «Patch» con due patch per Linux. Una per la mia scheda madre e una per una Soyo 5 ema. Ho scaricato quella relativa alla mia scheda madre e ho visto che era per il kernel 2.2.14. Me lo sono procurato, ho fatto il patch del kernel e l'ho ricompilato seguendo le indicazioni allegate alla patch.

2.12   Spegnimento con combinazione di tasti

Chi sa indicarmi come effetuare lo spegnimento del sistema con la pressione di una combinazione di 2 o 3 tasti?

__________

In /etc/inittab troviamo la seguente sezione:

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Sostituisci -r con -h. Quando premi [ctrl+alt+delete] al posto di riavviarsi si spegnerà.

2.13   Strana facoltà che ogni utente ha di dare il comando halt in Red Hat 6.1

Come mai ogni utente in Red Hat 6.1 può spegnere il sistema con halt o riavviarlo con shutdown -r?

__________

Per evitare che gli utenti comuni possano impartire i comandi halt e shutdown, basta creare il file:

/etc/halt.users

e aggiungere due righe ai file:

/etc/pam.d/halt e /etc/pam.d/shutdown in modo che risultino così:

        #%PAM-1.0
        auth       sufficient   /lib/security/pam_rootok.so
        auth       requisite    /lib/security/pam_listfile.so \
                   onerr=3Dfail sense=3Dallow item=3Duser file=3D/etc/halt.users
        auth       required     /lib/security/pam_console.so
        auth       required     /lib/security/pam_pwdb.so
        account    required     /lib/security/pam_permit.so

in questa maniera solo gli utenti menzionati in /etc/halt.users possono utilizzare i servizi di halt e di shutdown. Ovviamente il controllo della password dell'utente rimane, per essere sicuri che sia proprio l'utente che sta digitando.

2.14   Messaggio di benvenuto all'avvio

Mi piacerebbe che il mio sistema, all'avvio, visualizzasse un messaggio scritto in testo semplice.

__________

Se, vuoi che compaia durante il LILO basta mettere in /etc/lilo.conf la riga:

message= /percorso/nomefile

e rilanciare LILO.

All'avvio ti apparirà la scritta contenuta in /percorso/nomefile.

Se puoi installi lilo-color (lo trovi su Freshmeat) puoi avere il messaggio colorato. Per avere un messaggio al login di GNU/Linux c'è welcome2l reperibile in rete.

Esiste anche linuxlogo configurabile e personalizzabile.

Se ricompilate il kernel col supporto per fbcon, avrete la possibilità di fare apparire durante l'avvio del sistema il pinguinone preferito in modalità grafica e avrete pure la possibilità di cambiare l'insieme di caratteri, il numero di colonne sullo schermo ed altre amenità.

Completo la ricapitolazione:

se il messaggio lo volete prima del messaggino del LILO

in lilo.conf: message=/percorso/nomemessaggio (eventualmente usando lilo color).

se lo volete durante il procedimento di avvio

fbcon ricompilando il kernel

quando chiede il login:

welcome2l - linuxlogo

dopo

/etc/issue + modifica a rc.local che lo riscrive ogni volta.

2.15   Aggiunta disco rigido, messaggio di errore all'avvio: «KERNEL PANIC: VFS: Unable to mount root fs on 03:03»

Avevo solo un disco rigido, con due partizioni: hda1 per Windows 98 e hda2 per Linux. Ho installato Red Hat 6.0 e ho messo LILO sulla partizione Linux in modo che reinstallando Windows 98 LILO rimanesse. All'avvio mi veniva chiesto se partire con Windows 98 o con Linux con Windows 98 come valore predefinito.

Ora però ho comprato un nuovo disco rigido. L'ho montato come primario (quindi il vecchio C è diventato D). Ho cancellato Windows 98 dal vecchio e l'ho installato sul nuovo.

Ora all'avvio parte Windows 98 ma non riesco più ad accedere a Linux...

Ho provato a disabilitare da BIOS il primo hard disk. Linux si avvia correttamente, parte LILO che mi chiede con quale sistema operativo partire: Windows 98 o Linux. Scelgo Linux e inizia a caricarsi.

Ecco il problema: durante l'avvio si ferma con questo messaggio di errore: KERNEL PANIC: VFS: Unable to mount root fs on 03:03.

__________

Avvia dal CD della Red Hat 6.0 o dal dischetto di avvio quindi carica Linux con:

linux 1 root=/dev/hdXY initrc= initrd=[Invio]

(mi sembra che initrc= sia superfluo ma non si sa mai...)

Dopo ciò modifica /etc/fstab mettendo la nuova partizione di root, e fai la stessa cosa per /etc/lilo.conf. Lancia quindi LILO e riavvia.

Se sul nuovo disco primario non c'è nessuna partizione Linux dovrai installare LILO nel master boot record.

Non fare mai nessuna di queste operazioni se:

  1. non sai esattamente quello che stai facendo (mi riferisco soprattutto alla modifica di /etc/lilo.conf)

  2. non hai un floppy di boot per ognuno dei sistemi operativi presenti sul tuo sistema

Il sistema non funziona più perché LILO, non trova più Linux su hda2 come prima. Devi avviare da dischetto, e dire a LILO che deve cercare Linux non su hda2, ma su hdb2 (se ora il disco vecchio è come secondario sulla stessa catena IDE) o su hdc2 (se è primario sulla seconda catena IDE).

2.16   Messaggio di errore all'avvio: kernel panic

Ho ricompilato il kernel e all'avvio mi appare il messaggio:

Kernel panic; che vuol dire? Non ho apportato nessun cambiamento alla mia macchina dall'ultima ricompilazione.

__________

Quando ricompili il kernel, puoi mettere tutto quello che vuoi come modulo (anzi, lo consiglio caldamente). Le uniche cose che non puoi mettere come modulo sono i driver che ti servono all'avvio. Quindi, ad esempio, se hai compilato il filesystem ext2 come modulo oppure i dischi IDE come modulo, allora il kernel non potrà partire.

2.17   Messaggio di errore all'avvio: swapon: warning: /dev/hda1 has insecure permissions 0660, 0600 suggested

Sono andato a controllare il file /var/log/boot.log, per vedere se c'erano dei problemi all'avvio di Linux e ho trovato alcune cose che non capisco. Ecco i seguenti messaggi;errore:

Jun 24 13:17:19 galileo swapon: swapon: warning: /dev/hda1 has insecure permissions 0660, 0600 suggested

__________

Accedi al sistema come utente root e digita:

# chmod 0600 /dev/hda1[Invio]

In questo modo cambierai i permessi di /dev/hda1 da:

-rw-rw----

a

-rw-------

2.18   Messaggio di errore all'avvio: /dev/hdxy :UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

Poco prima di accedere alla shell, mi vengono segnalati una serie di «multiple duplicate inode» e viene visualizzato il seguente messaggio:

/dev/hda3 :UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

(i.e.)without -a or -p options

__________

dai il comando:

# e2fsck /dev/hdxy[Invio]

dovrebbe funzionare, nel tuo caso probabilmente ti chiederà di clonare inode e messaggi similari; tu rispondi affermativamente. Un messaggio di questo tipo vuol dire che il filesystem si è danneggiato molto gravemente, e se il comando e2fsck manuale non funziona, probabilmente è irrecuperabile. Forse hai spento il computer senza avere prima avviato la procedura di shutdown, o è andata via la corrente.

2.19   Messaggio di errore all'avvio: Parallelizing fsck version x.yy

Durante un riavvio il sistema dice che ha problemi di coerenza (inconsistency) sul filesystem, di lanciare manualmente fsck senza opzioni -a o -p.

Il problema è che lancio fsck (ho provato tutti i parametri) e non succede nulla. Es.:

# fsck (qualunque cosa anche sbagliata o inesistente)

e il sistema risponde:

Parallelizing fsck version 1.14

Che fare?

__________

Gli devi dire di quale filesystem fare il controllo:

# fsck /dev/hda1[Invio]

oppure dai:

# e2fsck /dev/xxx[Invio]

(è equivalente)

Capitolo 3.   Tipi di filesystem e partizioni

3.1   Directory del filesystem distribuite su più partizioni

Come si fa ad «avvertire» Linux che alcune directory le ho messe su altri dischi?

__________

Se voglio che Linux monti la directory /var che risiede sulla terza partizione del secondo disco rigido, bisogna aggiungere una riga al file /etc/fstab:

/dev/hdb3       /var    ext2    defaults        1 2

3.2   Struttura partizioni

Come posso visualizzare la struttura delle partizioni del mio file system?

__________

# fdisk -l dispositivo[Invio]

restituisce il partizionamento di un dispositivo (cioè di un disco). Per vedere quali partizioni sono montate nel mio sistema, è sufficiente:

# df[Invio]

3.3   Creazione filesystem ext2

Come creo un filesystem ext2 nella terza partizione del secondo disco ide?

__________

devi digitare:

# mke2fs /dev/hdb3[Invio]

se vuoi controllare ed eventualmente fissare i blocchi difettosi, utilizza l'opzione -c:

# mke2fs -c /dev/hdb3[Invio]

3.4   Controllo settori danneggiati su partizioni con filesystem ext2

Su un filesystem ext2 temo di avere settori danneggiati. Che posso fare?

__________

monta il filesystem e digita:

# fsck.ext2 -c[Invio]

o

# e2fsck -c[Invio]

Se ti viene reso qualche numero, hai dei settori danneggiati. È equivalente dare il comando badblocks; ad esempio, per un dischetto:

# badblocks /dev/fd0H1440 1440[Invio]

3.5   Ridimensionare partizioni con filesystem ext2

Esiste un prodotto simile a fips per Linux in grado di ridimensionare le partizioni ext2?

__________

Prova GNU parted.

Oppure ho trovato su Freshmeat: <http://www.dsv.nl/~buytenh/ext2resize> (licenza GPL)

che consente di ridimensionare (quindi sia di rimpicciolire che di allargare) partizioni con filesystem ext2, anche montate.

3.6   Creazione filesystem FAT (Dos)

Come creo un filesystem FAT (Dos FAT 16)?

__________

Con il comando:

# mkdosfs /dev/dispositivo[Invio]

3.7   Controllo settori danneggiati di un filesystem FAT

Su una partizione FAT temo di avere settori danneggiati. Che posso fare?

__________

monta il filesystem e digita:

# fsck.msdos -r dispositivo[Invio]

(ti verrà chiesto che tipo di correzione vuoi effettuare).

Capitolo 4.   Swap

4.1   Creazione di ulteriore spazio swap

Come creo altro spazio swap?

__________

O crei una partizione di swap o crei un file. Quest'ultimo si deve creare così:

# dd if=/dev/zero of=/file_swap bs=1024 count=1024[Invio]

(si deve creare uno spazio di dimensioni multiple di 4; in questo caso si sta creando un file da un mega circa).

Ora bisogna rendere questo file uno spazio di swap:

# mkswap /file_swap 1024[Invio]

Il file di swap è stato creato ma non è utilizzato dal kernel. Per farlo occorre dare il comando:

# swapon percorso[Invio]

(in questo caso /file_swap)

Ma se non vogliamo ogni volta lanciare questo comando, basta elencare in /etc/fstab la nuova area di swap e gli script di avvio penseranno ad inizializzarla:

/file_swap      none    swap   sw 0 0

4.2   Partizione swap aggiuntiva

Dopo l'ultima installazione di Linux mi sono ritrovato con una partizione da 20 MB in più inutilizzata. Vorrei che diventasse partizione di swap. Quali passi devo eseguire?

Diciamo che puoi attivare un'altra partizione di swap aggiungendo una riga al file /etc/fstab, per esempio per /dev/hda9

 /dev/hda9   swap       swap    defaults        0 0

Il tipo di partizione deve essere impostato mediante fdisk come tipo 82 che è ovviamente il tipo «swap».

É necessario però attivare con mkswap e swapon la partizione:

mkswap /dev/hda9 20480[Invio]

swapon /dev/hda9[Invio]

Se invece vuoi sommare lo spazio delle due partizioni, devi necessariamente effettuare lo swapoff (in runlevel 1), eliminare la prima partizione di swap e rieseguire fdisk di nuovo.

Capitolo 5.   Montare i dischi

5.1   Operazioni con un dischetto DOS (filesystem vfat)

Come posso formattare un dischetto che possa essere utilizzato per copiarci dentro un file Dos?

__________

# fdformat /dev/fd0[Invio]

# mkfs -t msdos /dev/fd0[Invio]

# mount /dev/fd0 /mnt/floppy[Invio]

# cp file.txt /mnt/floppy[Invio]

# umount /mnt/floppy[Invio]

5.2   Dischetto DOS e dischetto Linux

Non riesco a montare dischetti con filesystem ext2; se uso dischetti con filesystem DOS invece non ho problemi, è normale?

__________

Sì, infatti nel tuo file /etc/fstab, nella riga riguardante /dev/fd0, avrai, nel campo tipo di filesystem , la voce msdos o vfat. Se modifichi, ad esempio, tale file, inserendo ext2 al posto di dos o vfat, vedrai che riuscirai a montare perfettamente floppy con filesystem ext2.

Ti conviene in ogni caso, piuttosto che sostituire ext2 a msdos, aggiungere una seconda riga in /etc/fstab, in modo da montare ad esempio i dischetti Dos sotto /floppy/dos e quelli ext2 sotto /floppy/ext2 (se sostituisci la riga come indicato sopra, potrai sì montare i dischetti ext2, ma non più quelli Dos).

5.3   Montare una partizione NT

Ho ricompilato il kernel 2.2.10 con il modulo per accedere alla partizione di NT4; ora mi chiedo: il montaggio del filesystem nt come si esegue?

__________

Con il seguente comando

# mount -t NTFS /dev/partizione_di_nt /punto_di_mount[Invio]

5.4   Montare una partizione Windows 2000

Come faccio a montare la partizione di Windows 2000?

__________

Devi avere il supporto per NTFS o inserito nel kernel o dichiarato come modulo. Nei kernel della serie 2.2.x c'è anche il supporto sperimentale in scrittura, se lo vuoi, abilita anche questo.

Dopodiché:

# mount -t ntfs /dev/XXX /mnt/QUALCOSA[Invio]

Sostituisci XXX con il dispositivo della partizione Windows (hda1, ecc.)

Ci sono poi le varie opzioni che puoi trovare in /usr/src/linux/Documentation/filesystems/ntfs.txt

5.5   Concedere il permesso di montare il lettore dischetti e il lettore CD-ROM agli utenti

Come si impostano i permessi per permettere all'utente comune di poter montare il lettore dischetti e il lettore CD-ROM?

__________

Procedi in questo modo:

5.6   Concedere il permesso di montare il lettore dischetti agli utenti. Differenze tra opzioni 'user' e 'users'

Ora riesco a montare il lettore di dischetti in qualità di utente. Che differenza c'è tra l'opzione user e users dell'fstab?

__________

Eccoti un estratto di man mount:

[...]

       For more  details,  see  fstab(5).   Only  the  user  that
       mounted  a  filesystem  can unmount it again.  If any user
       should be able to unmount, then use users instead of  user
       in the fstab line.                  ^^^^^             ^^^^
[...]

[...]

       Per ulteriori dettagli,  controllate  fstab(5).   Solamente l'utente che ha montato
       un filesystem può montarlo di nuovo. Se tutti gli utenti dovessero avere la facoltà
       di smontare, allora utilizzate users al posto di user nella riga dell'fstab.
[...]

5.7   Concedere il permesso di scrittura su una partizione ad ogni utente

C'è il modo per dare a qualsiasi utente il permesso di scrittura su una particolare partizione?

__________

Nel file:

/etc/fstab

aggiungi la riga:

/dev/hda1   /mnt/msdos      vfat    quiet,umask=000 0   0

legenda:

quiet: ignora gli avvisi dei programmi che ti danno errore quando cercano
       di cambiare i permessi dei file su partizioni dos e vfat , visto che i
       permessi non li gestiscono.

umask: permette di stabilire quali permessi inibire nel filesystem montato,
       quindi con 000 dai tutti i permessi a qualsiasi utente in particolare i
       permessi si impostano:

1=permesso in esecuzione 
2=permesso in scrittura
4=permesso in lettura
3=permesso in scrittura+esecuzione 
5=permesso in lettura+esecuzione e così via sommando  i numeri 1,2 ,4 nelle diverse combinazioni possibili.

Le tre cifre dopo '=' indicano:

la prima: i permessi di root;

la seconda: i permessi del gruppo appartenente a colui che monta il filesystem (se viene montato all' avvio il gruppo sarà root);

la terza: i permessi per tutti gli altri

5.8   No final new line in /etc/fstab

In fase di avvio mi compare la seguente scritta:

[mntent] warning: no final new line in /etc/fstab

[mntent] warning: no final new line in /etc/fstab

perché compare e cosa significa?

__________

Manca un'ultima riga vuota in /etc/fstab, aggiungila.

5.9   Montare automaticamente i dischi all'avvio

I dispositivi devono essere montati e smontati ogni volta che li utillizzo? Se dichiaro i dispositivi nel file /etc/fstab, dove devo inserire le righe «mount ...» per poter montare automaticamente tali dispositivi?

__________

/etc/fstab è un file di configurazione composto da righe.

Ogni riga indica quale dispositivo deve essere montato, dove deve essere agganciato al filesystem, di che tipo è (FAT, ext2, iso9660, nt, ecc.) e presenta altre opzioni. Tra queste abbiamo l'opzione 'auto'. Le righe che presentano tale opzione consentono al dispositivo in questione di venire montato automaticamente all'avvio del sistema, senza bisogno di alcun tipo di comando. Le partizioni che non vengono montate automaticamente presentano invece l'opzione 'noauto' (il CD-ROM ad esempio).

Inoltre si deve aggiungere che quando viene elencato un dispositivo in /etc/fstab è sufficiente dare il comando:

# mount dispositivo[Invio]

o

# mount /directory/di/montaggio[Invio]

per montare il dispositivo in questione; evitando così di specificare quindi le ulteriori opzioni.

5.10   Montare partizioni DOS/Windows 9x (filesystem vfat)

Quando cerco di montare partizioni Dos, si presenta un errore del tipo: il kernel non gestisce questo tipo di filesystem.

__________

Un errore del genere è dovuto al fatto che nel kernel che stai usando non c'è il supporto per filesystem vfat: dovrai ricompilarlo inserendo tale opzione. Una volta compilato il kernel, per montare le partizioni Dos/Windows devi specificare l'opzione -t vfat; quindi:

# mount -t vfat /dev/dispositivo /dir/di/montaggio[Invio]

5.11   Concedere l'accesso in lettura e scrittura su una partizione DOS/Windows 9x (filesystem vfat) agli utenti

Devo montare automaticamente una partizione vfat in modo che tutti gli utenti possano accedervi sia in scrittura che in lettura. Come si modifica il file /etc/fstab?

__________

Basta attivare le opzioni user e umask=000 e indicare vfat come tipo. È consigliabile usare anche l'opzione quiet:

/dev/hdxx /dir/di/montaggio vfat user,quiet,umask=000 0 0

5.12   Dispositivi già montati: messaggi rilevati accedendo da altra console

Ho aggiunto nel file .bashrc dell'utente root una riga per montare la partizione Windows. Il problema è che se accedo a Linux da un'altra console come root, ovviamente mi dice che il dispositivo è già stato montato. Come posso fare per eliminare questi messaggi di errore?

__________

Semplicemente, li redirigi su /dev/null Il comando risulta così:

# mount /dev/hdX /puntomount 2>/dev/null[Invio]

Il 2 vuol dire che redirige solo gli errori.

In realtà montare la partizione win da .bashrc è un errore, dovresti montarla automaticamente da /etc/fstab. Se non vuoi che gli utenti vi accedano è sufficiente non aggiungere l'opzione user.

5.13   Leggere partizioni Linux (filesystem ext2) da Windows

C'è il modo di rendere visibili partizioni ext2 a Windows?

__________

Si, si possono usare ext2tool oppure fsdext2, entrambi distribuiti sotto GPL. I Pacchetti possono essere prelevati presso:

<ftp://ftp.flashnet.it/mirror/12/sunsite.unc.edu/system/filesystems/ext2/ext2tool_1_1.zip>

o

<ftp://ftp.pg.gda.pl/pub/linux/util/fsdext2.zip>

Il primo è a riga di comando, il secondo permette di montare partizioni ext2 come se fossero dischi Dos, solo che è molto pericoloso (leggere bene la documentazione) e molte volte blocca i canali EIDE. Il primo è molto più sicuro.

C'è anche explore2fs, anche esso sotto GPL prelevabile presso:

<http://uranus.it.swin.edu.au/~jn/linux/explore2fs.htm>

Capitolo 6.   LILO

6.1   Installazione e configurazione di LILO

Come si installa LILO sul Master Boot Record di hda e come si imposta se Linux si trova in hdb e Windows in hda?

__________

Si organizza il file /etc/lilo.conf nel seguente modo:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
other=/dev/hda1
        label=dos
        table=/dev/hda
image=/boot/vmlinuz-2.2.5-15
        label=linux
        root=/dev/hdb1
        read-only

e poi si da il comando:

# lilo -v[Invio]

per rendere effettive le modifiche.

6.2   Avvio tramite LILO su dischetto ma con il kernel su disco rigido

Come dovrei fare ad avviare Linux da un dischetto facendo in modo che il kernel risieda su disco fisso? Fino ad ora Linux si avvia mediante il LILO installato nel master boot record, tuttavia vorrei far partire il sistema da dischetto abbastanza velocemente (ho provato con un dischetto di avvio contenente il kernel compresso, ma è veramente molto lento).

__________

fai una copia di /etc/lilo.conf:

# cp /etc/lilo.conf /ect/lilo.conf.old[Invio]

Modifica il file /etc/lilo.conf e scrivici dentro questo :

boot=/dev/fd0
vga=3
compact                      ----------> Su alcuni sistemi non funziona
read-only
prompt
timeout=0
image = /vmlinuz             -------------> Specifica la tua immagine
  root = /dev/hdb2           -------------> Specifica la tua dir di root
  label = LinuZ              -------------> Scegli un nome a piacere

salva questo file, esci dall'editor di testi, inserisci un dischetto formattato nel lettore dei dischetti, e poi scrivi /sbin/lilo al prompt. Riavvia e prova.

Nel caso il kernel non si dovesse avviare, prova a rimodificare il file /etc/lilo.conf cancellando la riga «compact» perché è raro, ma su alcuni sistemi non funziona stando alla documentazione. In questo modo va un po' più lento, diciamo un paio di secondi in più all'avvio.

Con questo metodo puoi anche provare varie configurazioni di LILO in modo da far partire anche Windows e NT, tanto provare da disco non costa niente e non fai danni; una volta che sei riuscito a configurare il LILO in modo che avvii i sistemi operativi che ti occorrono puoi cambiare la prima riga del lilo.conf in boot=/dev/hda e poi ridare il comando /sbin/lilo, così eviterai questo noioso floppy.

6.3   Installazione di LILO in una posizione diversa

Come faccio ad installare LILO in una posizione diversa da quella in cui si trova adesso?

__________

Il file /etc/lilo.conf contiene la riga:

boot=

che specifica su quale dispositivo o su quale partizione andrà installato LILO.

Indicando /dev/hda verrà installato nel settore di boot del primo disco ide, indicando invece hdb2, verrà installato nella seconda partizione del secondo disco ide.

In questo ultimo caso, la partizione deve essere resa avviabile (comando «a» di fdisk o comando «b» di cfdisk).

Dopo aver fatto le modifiche deve, ovviamente, essere rilanciato LILO.

6.4   LILO e Debian GNU/Linux pt. 1

Ho trovato comodo installare LILO sul master boot record della partizione GNU/Linux e poi con fdisk impostare quest'ultima come partizione attiva (al posto di Windows 9x)

__________

Debian GNU/Linux lo fa in maniera predefinita, aggiungendo nel master boot record un piccolo ma potente codice per scegliere la partizione di avvio al volo (quell'inquietante messaggio simile a 1FA:, che leggendo bene /usr/doc/mbr/README si capisce che inquietante non è, anzi!).

In breve, il messaggio 1FA: che si ottiene tenendo premuto [SHIFT] (oppure [CTRL] o [ALT]) all'avvio indica che è possibile premere:

Così non c'è più bisogno di configurare LILO per l'avvio di più sistemi operativi.

6.5   LILO e Debian GNU/Linux pt. 2

Non sono riuscito mai a impostare il LILO per Debian GNU/Linux cioè Linux mi parte ma la partizione per Windows non riesco a farla avviare.

__________

Proposta 1 (semplice e veloce):
Proposta 2:

6.6   Eliminare LILO; come fare da DOS/Windows e da Linux

Come si elimina LILO?

__________

da Windows:

C:\>FDISK /MBR[Invio]

oppure, dopo essere partito con un disco di ripristino di Windows:

C:\>sys c:[Invio]

da Linux:

# lilo -U[Invio]

oppure puoi utilizzare dd per riscrivere il file di backup che LILO fa quando si installa. (Lo trovi nella directory /boot con un nome tipo boot.0300 o qualcosa di simile).

Attenzione a non riscrivere la tavola delle partizioni per cui:

# dd if=boot.* of =/dev/hda bs=446 count=1[Invio]

6.7   LILO: scelta del sistema operativo predefinito

Linux è il sistema operativo predefinito ma vorrei che fosse Windows.

Windows è il sistema operativo predefinito ma vorrei che fosse Linux.

__________

boot=/dev/sdb1
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz
        label=linux
        root=/dev/sdb1
        initrd=/boot/initrd
        read-only
other=/dev/sda1
        label=dos
        table=/dev/sda

Così si avvia Linux. Se voglio far partire Windows, devo semplicemente invertire la parte con image con quella con other:

boot=/dev/sdb1
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
other=/dev/sda1
        label=dos
        table=/dev/sda
image=/boot/vmlinuz
        label=linux
        root=/dev/sdb1
        initrd=/boot/initrd
        read-only

Ma ad ogni cambiamento si deve reinstallare LILO:

# lilo -v[Invio]

6.8   Avvio di più distribuzioni Linux sullo stesso sistema tramite LILO

Ho installato Debian GNU/Linux e Red Hat rispettivamente nella partizione hda1 e hda4; come devo modificare il file lilo.conf per scegliere con LILO quale distribuzione avviare?

__________

Ammesso che ora il tuo file /etc/lilo.conf sia qualcosa del tipo:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/bzImage
        label=linux.debian
        root=/dev/hda1
        read-only

ti consiglio di copiarti il kernel nella directory /boot da cui esegui LILO. Cioè se sei in Debian GNU/Linux e hai il file della Red Hat vmlinuz-2.2.5-15 lo copi in /boot e aggiungi una nuova sezione in /etc/lilo.conf, dopo aver copiato anche la directory relativa ai moduli del 2.2.5-15 nella relativa directory /lib/modules.

Esempio:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/bzImage
        label=linux.debian
        root=/dev/hda1
        read-only
image=/boot/vmlinuz-2.2.5-15
        label=linux.redhat
        root=/dev/hda4
        read-only

6.9   LILO e Windows NT - inversione logica dei dischi

Visto che ho trovato un secondo disco rigido d'occasione abbastanza capiente, avrei intenzione di dedicarlo interamente a NT. È possibile installarlo senza dover reinstallare Linux?

__________

Certo.

Il tuo caso:

Hai il primo disco con Linux e Windows: hda1 e hda2 ad esempio.

Hai lo slave con NT (o vorresti lo slave con NT).

Ti consiglio di installare NT come se fosse il master disabilitando il primo disco con Linux e Windows dal BIOS.

Così facendo partirà solo nt.

A questo punto rimonta il disco con Linux e Windows come master e rimetti quello con NT come slave. Rientra in Linux e modifica il lilo.conf come segue. Esegui /sbin/lilo affinché tale nuova tabella venga scritta nel master boot record del primo disco (boot=/dev/hda) e riavvia il sistema.

Al momento del boot il BIOS leggerà il master boot record dal disco master.

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=30
other=/dev/hda1
        label=dos
        table=/dev/hda
image=/boot/vmlinuz-2.2.5-15
        label=linux
        root=/dev/hda2
        read-only
other=/dev/hdb
        label=nt
        map-drive=0x80
           to = 0x81
        map-drive=0x81
           to = 0x80

Allora, avrai tre scelte: dos, linux, nt

6.10   Problemi con LILO: non parte più Windows

Ho Linux su primo disco fisso, e Windows sullo slave; ora LILO non riesce ad avviare Windows, come posso fare?

__________

ecco un esempio di /etc/lilo.conf per ovviare al problema: modificalo secondo le tue esigenze e riesegui LILO per reinstallarlo.

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
default=linux
prompt
timeout=20
read-only
root=/dev/hda1
image=/vmlinuz
        label=linux
other=/dev/hdb1
        label=win
        map-drive=0x80
        to=0x81
        map-drive=0x81
        to=0x80

6.11   Come risolvere il problema della sovrascrittura di LILO dopo la reinstallazione di Windows - soluzione empirica per Red Hat

Ho dovuto reinstallare per l'ennesima volta Windows, e il master boot record è stato ovviamente sovrascritto causando quindi la cancellazione del LILO. Come posso fare per reinstallarlo? Ho una Red Hat.

__________

Dunque, è un po' empirico ma è utile.

Occorrono il dischetto di installazione della distribuzione nel lettore di disco 'A' e il CD-ROM Red Hat nel lettore cd.

Si procede come segue

Finito questo sarà il programma di installazione stesso a chiederti se vuoi un dischetto di avvio o se vuoi installare LILO nel master boot record. Il tutto in meno di cinque minuti.

6.12   Password per LILO - pt. 1

Ho una macchina con un unico disco ma suddiviso in più partizioni in modo da funzionare con Windows e con Linux. L'avvio viene fatto da LILO, che sta sul master boot record. Vorrei che Windows partisse solo dopo l'inserimento di una password. La cosa ovvia sarebbe mettere la password del BIOS ma non voglio, dato che voglio poter riavviare Linux in remoto.

In poche parole adesso al riavvio la macchina parte in maniera predifinita con Linux, e fin qui poco male dato che poi per entrare serve un account. Ma con Windows è diverso, dato che non ha protezioni efficaci.

Dunque la domanda è: Esiste la possibilità di configurare LILO in modo che faccia partire in maniera predefinita e senza password Linux ma richieda la password non appena si avvia Windows?

__________

Da man lilo.conf:

  password=password

  Protect the image by a password.
 (Proteggere l'immagine mediante una password)

6.13   Password per LILO - pt. 2

Dove va inserita la password in LILO?

__________

Va tolto restricted ed il punto del /etc/lilo.conf è quello delle opzioni generali (prima dei sistemi operativi)

6.14   «linux 1» al prompt di LILO

Al prompt di LILO ho inserito «linux 1». Il risultato è stato che ho avuto accesso al sistema in qualità di utente root senza digitare nessuna password. Come mai accade ciò?

Tutto dipende dal fatto che per poter dare questo comando bisogna avere l'accesso fisico al sistema. Un server di solito, al contrario di macchine casalinghe, si trova in luoghi protetti il cui accesso è riservato a poche persone. Riavviare un server è un operazione a volte possibile esclusivamente via hardware. Ecco quindi che la possibilità di dare un comando a LILO è una facoltà riservata solo a coloro che possono accedere fisicamente alla macchina.

Puoi in ogni caso impostare una password aggiungendo la riga:

   password="LA_TUA_PASSWORD"

nel file /etc/lilo.conf. Se aggiungi anche la riga:

   restricted

LILO ti chiederà la password ogni volta che cercherai di passargli degli argomenti. Dal momento che la password viene scritta in chiaro, per ovvii motivi il file dovrà essere leggibile solo da root.

6.15   LILO: messaggio di errore - Error 0x10 - 0101010101 infiniti sullo schermo

Su hda1 ho Windows, su hdb1 Linux. Facendo avviare da hdb (sul cui master boot record c'è LILO), invece di avviare Linux, appaiono un ciclo infinito di 01 sul monitor e si blocca. Con un dischetto che utilizza Syslinux, o con uno che utilizza LILO tutto funziona.

Controlla che hdb sia in modo LBA e/o fai in modo che la partizione di root risieda al di sotto del cilindro 1024. Se così non è, LILO non funziona. Fatto quello, verifica che il master boot record sia sul primo disco e non sul secondo.

6.16   Virus nel boot

Quando cerco di entrare in Linux (dopo che LILO mi ha chiesto quale sistema operativo voglio lanciare) mi appare un messaggio in cui c'è scritto che è stato rilevato un virus nel boot e che per evitare che questo si diffonda nell'elaboratore bisogna spegnere la macchina e riavviarla con un dischetto di boot per pulirlo dal virus: cosa devo fare?

__________

È l'antivirus del BIOS, disattivalo. Il BIOS confonde il LILO con un virus.

6.17   Alternativa a LILO

C'è un modo per evitare di usare LILO?

__________

GAG è un ottimo boot-manager insieme anche a chos.

Alternativamente, puoi fare un dischetto di boot ed usare quello quando vuoi fare partire Linux, oppure usare Loadlin.

Capitolo 7.   Kernel

7.1   L'ultima versione del kernel

Come faccio a sapere quale è l'ultima versione del kernel?

__________

Con finger:

[root@fokhouse /root]# finger @linux.kernel.org[Invio]

[linux.kernel.org]

        The latest stable version of the Linux kernel is:     2.2.12
        The latest beta version of the Linux kernel is:       2.3.18
        The latest prepatch (alpha) version *appears* to be:  none

comunque si consiglia di utilizzare:

[root@fokhouse /root]# finger @finger.kernel.org[Invio]

7.2   Visualizzazione versione kernel

Quale è il comando per visualizzare la versione del kernel?

__________

$ uname -r[Invio]

7.3   Conoscere il nome dell'immagine del kernel che è stata caricata

Come faccio a sapere il nome dell'immagine del kernel caricata?

__________

Per fare ciò, esiste la variabile BOOT_IMAGE di LILO. Ma la variabile BOOT_IMAGE creata da LILO viene azzerata da qualche processo, per cui dopo il login non esiste più. Bisogna usarla prima di depmod in rc.sysinit per ottenerla.

Con:

# uname -a[Invio]

mi viene restituita una riga di questo tipo:

Linux server 2.2.13 #4 Sun Nov 21 14:13:37 CET 1999 i586 unknown

Da cui posso capire almeno la versione del kernel caricata.

7.4   Procedura per la ricompilazione del kernel

Vorrei sostituire il mio kernel. Quali sono tutte le operazioni necessarie?

__________

Non è una cosa molto difficile:

Nella directory /usr/src è generalmente presente un link chiamato linux che punta alla directory che contiene tutti i sorgenti del kernel installato sulla macchina. Altre volte non è presente tale link ma c'è la semplice directory linux o linux-x.y.z che contiene la versione precedente del kernel.

Se c'è il link cancellalo. Se c'è la directory linux rinominala in linux.old:

# mv /usr/src/linux /usr/src/linux.old[Invio]

se c'è la directory linux-x.y.z lasciala così.

Copia il file linux-ver.del.nuovo.kernel.tar.gz in /usr/src

A questo punto scompatta il file linux-ver_del_nuovo_kernel.tar.gz nella directory /usr/src con:

# tar -zxvf linux-ver_del_nuovo_kernel.tar.gz[Invio]

A questo punto è stata creata una nuova directory chiamata linux dove sono stati messi i sorgenti del nuovo kernel ancora da compilare. Ora puoi andare direttamente nella directory appena creata con:

# cd linux[Invio]

oppure spostare la directory da linux a linux-ver_del_nuovo_kernel (linux-2.2.2):

# mv linux linux-ver_del_nuovo_kernel[Invio]

e creare un nuovo link linux che punti direttamente alla nuova directory appena fatta:

# ln -s linux-ver_del_nuovo_kernel linux[Invio]

Ora entri nella directory /usr/src/linux (link o directory che sia).

Vanno eseguite queste azioni passo dopo passo:

# make mrproper[Invio]

(che cancella il file .config riazzerando tutte le opzioni selezionate nell'ultimo tentativo di ricompilazione)

È un comando 'facoltativo'. (perché se voglio ricompilare il kernel una seconda volta modificando pochissimi valori dall'ultima ricompilazione, se reimpartisco 'make mrproper' devo ricominciare e selezionare le opzioni da capo. Se invece non faccio make mrproper ritroverò tutte le opzioni selezionate in precedenza).

# make menuconfig[Invio]

(se lo vuoi testuale da console) oppure:

# make xconfig[Invio]

Scegli tutte le opzioni aiutandoti con l'help o con Appuntilinux

Alla fine salva la configurazione (che verrà salvata nel file .config) e fai:

# make dep[Invio]

# make clean[Invio]

# make bzImage[Invio]

può anche essere tutto ridotto in

# make dep clean bzImage[Invio]

Conviene fare make bzImage e non make zImage perché la seconda crea un kernel più grande che il LILO può non accettare; per cui conviene subito compilare con bzImage.

Se sono stati inseriti i moduli va fatto:

# make modules[Invio]

# make modules_install.[Invio]

A questo punto l'immagine del kernel la dovresti trovare nella directory /usr/src/linux-2.2.2/arch/i386/boot con il nome bzImage.

Ora copia il file bzImage nella directory /boot:

# cp bzImage /boot[Invio]

Modifica il file /etc/lilo.conf cambiando il nome dell'immagine. C'è scritto image=vmlinuz che tu cambierai in image=bzImage (oppure rinomina bzImage in vmlinuz o in quello che vuoi).

A questo punto esegui LILO:

# /sbin/lilo[Invio]

e se tutto è andato bene dovrebbe scrivere:

Added Linux
Added Dos o W95 ecc.

secondo le etichette dei sistemi operativi che hai specificato. Il sistema operativo predefinito è indicato da un asterisco.

A questo punto fai il reboot e partirà la nuova versione del Kernel compilata di fresco.

7.5   Ricompilazione del kernel in Debian GNU/Linux

Come si ricompila il kernel in Debian GNU/Linux?

__________

Non servono i seguenti comandi:

Dopo il 'make menuconfig', fate:

# make-kpkg kernel_image[Invio]

per installarlo:

# dpkg -i /usr/src/kernel-image[Invio]

# shutdown -r now[Invio]

Nella directory esterna ai sorgenti del kernel vi trovate un bel pacchetto .deb con il kernel compilato e tutti i moduli necessari. Copiatelo e installatelo su tutti i computer che volete e riavviate.

Non è necessario compilare il kernel sulla stessa macchina su cui dovrà essere usato, andate su quella che lo compila più velocemente.

Il pacchetto kernel-package contiene il comando make-kpkg, che permette di compilare automaticamente un kernel e generare i pacchetti Debian GNU/Linux corrispondenti a:

Può essere usato sia partendo dai sorgenti Debian GNU/Linux del kernel come anche da un kernel ufficiale eventualmente corretto con una patch. make-kpkg sostituisce il processo di compilazione e installazione del kernel.

I file .deb generati possono essere tranquillamente copiati in giro, ed installati con un semplice 'dpkg -i'.

State attenti a dselect, che potrebbe andare a sovrascrivere il vostro kernel (con una versione presumibilmente nuova, secondo lui). Se entrate in select premete il tasto '=' sul kernel-image installato, così non verrà più toccato da dselect/dpkg.

7.6   Kernel appena compilato, ma in /boot c'è la vecchia immagine

Ho ricompilato il kernel ed ottenuto il mio file bzImage. L'ho rinominato in vmlinuz e ora cerco di copiarlo nella dir /boot/ ma qui trovo una sfilza di vmlinuz-2.2.5-15...

Cosa dovrei fare a questo punto?

__________

Dipende dal boot manager che usi. Se adoperi LILO, puoi immettere il tuo nuovo kernel nella dir /boot con il nome che più ti piace; poi, inserisci il nome in /etc/lilo.conf come immagine predefinita. Infine, dai il comando:

# /sbin/lilo[Invio]

7.7   Dimensione sorgenti kernel

Ho ricompilato svariate volte il kernel e mi è sorto il seguente dubbio: serve molto spazio libero sul disco? Se si quanto?

circa 65 Mb per i sorgenti decompressi poi qualche centinaio di Kbyte per il binario.

7.8   Applicazione di patch al kernel - pt. 1

Come si applica una patch al kernel?

__________

# cd /usr/src[Invio]

# bzip2 -dc nomefile |patch -p1[Invio]

o:

# gzip -dc patch.gz |patch -p0[Invio]

se è in .gz

oppure:

si copiano le patch nella directory /usr/src e si entra nella stessa.

Dopo essersi posizionati in tale directory si impartisce il comando:

# linux/scripts/patch-kernel[Invio]

lo script provvede a cercarsi le patch nella dir /usr/src/ e ad applicarle.

7.9   Applicazione di patch al kernel - pt. 2

Sono abituato ad installare pacchetti in formato tar.gz, ora vado nel sito <www.it.kernel.org> e trovo che le ultime patch del kernel sono in formato .tar.bz2. Come si decompattano tali file?

__________

$ bzip2[Invio]

avendocelo installato puoi decomprimere un file con:

$ bunzip2 nomefile[Invio]

Per i tar.bz2 conviene usare l'opzione I di:

$ tar tIf pacchetto.tar.bz2[Invio]

per listare e:

$ tar xIf pacchetto.tar.bz2[Invio]

per estrarre.

7.10   Ricompilazione del kernel dopo applicazione di una patch

Ma dopo avere applicato la patch, devo ricompilare il kernel come al solito?

__________

Sì, a quel punto tutti i file modificati tra le due versioni sono stati aggiornati ed hai la tua /usr/src/linux esattamente uguale a come l'avresti avuta se avessi scaricato il kernel completo di quella versione.

Dopo aver applicato la patch è bene aggiornare la configurazione con il comando:

# make oldconfig[Invio]

e, cosa molto importante, ricordarsi prima di passare alla compilazione vera e propria di dare il comando:

# make dep[Invio]

7.11   Mancanza di wish durante la ricompilazione del kernel

Non riesco a fare

# make xconfig

perché mi dice che manca il programma wish. Chi mi sa dire in che pacchetto é contenuto?

__________

wish non è altro che l'interprete per il tcl/tk (estensioni grafiche della shell tclsh).

Quindi devi installare il Toolkit Tk e per farlo devi prima installare TCL (Tool Command Language).

Il pacchetto viene di solito fornito con qualunque distribuzione.

7.12   Prova di un'immagine del kernel senza rischio

Creata l'immagine del nuovo kernel come posso verificarne la funzionalità in tutta sicurezza? Come posso creare una scelta multipla tra i kernel presenti?

__________

Do per scontato che tu abbia il tuo nuovo file bzImage nella directory /boot e che tu abbia già verificato che questo funzioni, tramite dischetto di avvio. A questo punto il tuo file /etc/lilo.conf dovrebbe risultare circa così:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.0.36-3
        label=linux
        root=/dev/hda3
        read-only
(eventuale altro sistema operativo)

dove vmlinuz-2.0.36-3 è il vecchio kernel e /dev/hda3 è la partizione root. Se invece di vmlinuz-2.0.36-3 si chiama semplicemente vmlinuz è meglio rinominarlo in questo modo:

# mv /boot/vmlinuz /boot/vmlinuz-2.0.36[Invio]

(al posto di 2.0.36 utilizza il numero della versione del vecchio kernel)

Ora, dovresti ad esempio chiamare l'immagine del kernel che vuoi provare 'vmlinuz-2.2.2':

# mv /boot/bzImage /boot/vmlinuz-2.2.2[Invio]

A questo punto non devi fare altro che duplicare una parte del tuo lilo.conf, così:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.0.36-3 (o il nome del vecchio kernel)
        label=linux
        root=/dev/hda3
        read-only
image=/boot/vmlinuz-2.2.2
        label=prova
        root=/dev/hda3
        read-only
(eventuale altro sistema operativo)

Per installare LILO, devi dare il comando:

# lilo -v[Invio]

(-v ti dice ciò che sta facendo).

Quindi, riavvia il sistema e quando compare il prompt di LILO digitando prova entri con il nuovo kernel. Se qualcosa andasse storto, l'etichetta linux ti permette sempre di utilizzare il vecchio kernel.

Prima di eliminare del tutto il vecchio kernel, io proverei il nuovo per un certo periodo. Quando sei proprio soddisfatto, puoi modificare di nuovo il lilo.conf e cancellare la sezione del vecchio kernel e cambiare «prova» in «linux»:

map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.2
        label=linux
        root=/dev/hda3
        read-only
(eventuale altro sistema operativo)

ridai il comando:

# lilo -v[Invio]

per rendere effettive le modifiche.

7.13   Trasporto dell'immagine del kernel da una distribuzione ad un'altra

Voglio installare di nuovo la Suse 6, ma voglio portarmi dietro il kernel che ho ricompilato a fatica. Cosa devo copiare? Solo vmlinuz oppure anche la directory include? Cos'altro?

__________

Per poter 'esportare' il kernel sono necessari il file bzImage (zImage oppure vmlinuz o come avete chiamato l'immagine del kernel) presente generalmente in /boot, la directory /usr/src/linux/include e la dir /lib/modules/x.x.xx relativa alla versione del kernel.

7.14   Cosa è il file initrd-x.x.xx.img nella directory /boot?

Qualcuno sa che cos'è il file initrd-2.2.12-20.img che c'è in boot? L'ho riscontrato in RH 6.0.

__________

Cito da:

The Official Red Hat Linux Reference Guide

trovato sul sito di Red Hat:

An initrd image is needed for loading your SCSI module at boot time. The shell script /sbin/mkinitrd can build a proper initrd image for your machine if the following conditions are met:

The loopback block device is available.

The /etc/conf.modules file has a line for your SCSI adapter; for example: alias scsi_hostadapter BusLogic

Viene richiesta un'immagine initrd per caricare il vostro modulo SCSI all'avvio. Lo script shell /sbin/mkinitrd può costruire un'immagine initrd corretta per la vostra macchina se si presentano le seguenti condizioni:

È disponibile il dispositivo di blocco del loopback

Il file /etc/conf.modules presenta una riga per l'adattatore SCSI; ad esempio: alias scsi_hostadapter BusLogic

Quindi in pratica è un'immagine utilizzata per caricare il modulo SCSI all'avvio. La si può creare con il comando /sbin/mkinitrd.

7.15   USB

Qualcuno mi sa dire se il kernel 2.2.12 riconosce le porte USB?

No, non le riconosce. Devi avere un kernel 2.2.14 con il backport oppure un 2.3.xx

7.16   Ottimizzare il kernel per macchine di classe Pentium

C'è un modo per ricompilare il kernel ottimizzandolo per processori Pentium?

__________

Lo si può fare modificando il makefile che si trova in /usr/src/linux. In pratica bisogna cercare le voci:

e modificare il loro contenuto nel seguente modo:

HOSTCFLAGS      =-Wall -Wstrict-prototypes -O3 -march=pentium -mcpu=pentium -ffa
st-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malign-dou
ble -fno-exceptions

MAKE    =make -j 4

CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -O3 -march=pentium -mcpu=pentium
 -ffast-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malig
n-double -fno-exceptions

(nella versione 2.3.47 si trova CFLAGS := $(CPPFLAGS) mentre fino alla 2.2.14 c'è solo CFLAGS =).

È da notare che ho utilizzato come compilatore il pgcc (un compilatore gcc ottimizzato per processori pentium) che si trova nei contributi della Red Hat (sono naturalmente disponibili i pacchetti nei vari formati).

In pratica basta non installare o disinstallare l'egcs fornito dalla Red Hat e installare il pgcc.

7.17   Mancanza dei sorgenti del kernel

Ho un problema con il kernel: sono nella directory /usr/src/linux e se da lì impartisco il comando make xconfig, la risposta è:

__________

make** no rule to make "xconfig"

nella directory di interesse c'è un file READ-ME dove dice che è necessario installare kernel-source binary RPM. Secondo il manuale si dovrebbe installare l'albero gerarchico dei file sorgente del kernel; che cosa devo fare?

Immagino che tu abbia una distribuzione Red Hat (ma il concetto è valido anche per altre distribuzioni); se è così monta il CD-ROM di installazione, vai nella directory dove ci sono tutti i pacchetti RPM:

# cd /mnt/cdrom/RedHat/RPMS[Invio]

e installa il pacchetto con i sorgenti del kernel:

# rpm -i kernel-source-XXXXX.i386.rpm[Invio]

(al posto delle X ci sarà la versione del kernel della tua distribuzione)

Ora nella directory /usr/src/linux troverai tutti i sorgenti del kernel e puoi riprovare con make xconfig.

7.18   Opzione del kernel IP: forwarding/gatewaying

Dove trovo nella compilazione del kernel l'opzione: IP: forwarding/gatewaying? L'ho cercata dappertutto (nella parte relativa alla rete, s'intende), ma non sono stato capace di trovarla.

__________

Non si tratta di un'opzione da compilare nel kernel ma di un parametro da impostare nel filesystem /proc. Il file in questione è /proc/sys/net/ipv4/ip_forward.

Se infatti esegui il comando 'cat' su questo file:

# cat /proc/sys/net/ipv4/ip_forward[Invio]

otterrai uno zero.

Quindi devi eseguire il seguente comando per portarlo al valore di uno:

# echo 1 > /proc/sys/net/ipv4/ip_forward[Invio]

poi ricontrolla con cat.

Ovviamente questa operazione va ripetuta ogni volta che esegui l'avvio (quindi va automatizzata). Se usi Red Hat è sufficiente portare a 'vero' «FORWARD_IPV4» presente nel file /etc/sysconfig/network.

Penso che anche altre distribuzioni offrano qualcosa di simile. Altrimenti inserisci il comando nel file /etc/rc.d/rc.local.

7.19   Ipfwadm e ipchains - dai kernel 2.0.x ai kernel 2.2.x

Dopo aver ricompilato il kernel 2.2.6 per configurare la mia macchina come firewall tramite ipfwadm, mi sono accorto che questa versione del kernel, a differenza di quanto accadeva con il kernel 2.0.32, non colloca il parametro 'ip_forward' in /proc/net (cioè quello che si aspetta ipfwadm), ma sotto: /proc/net/ipv4/

Qualcuno ha qualche idea del perché tutto ciò si verifica?

__________

Perché dai kernel della serie 2.2.X non si usa più ipfwadm ma ipchains.

7.20   Assenza dell'opzione drop source-routed frames

Nel ricompilare il kernel 2.2.5 ho notato l'assenza dell'opzione drop source-routed frames mi è forse sfuggita?

__________

da /usr/src/linux/Documentation/Changes:

In 2.0.x the kernel could be configured to drop source routed IP packets via a compile time configuration option. In 2.2.x, this has been replaced by a sysctl.

Nei kernel della serie 2.0.x ci potrebbe essere la configurazione che (ri)lasci i pacchetti IP sorgenti (originali??) instradati mediante un'opzione di configurazione del tempo di compilazione. Nella serie 2.2.x, questa caratteristica è stata sostituita da un 'sysctl'.

7.21   Verifica dei pacchetti del kernel installati in un sistema basato su pacchetti rpm

Come faccio a controllare quali pacchetti del kernel ho installato? Utilizzo una distribuzione basata su rpm.

__________

Ecco come:

# rpm -qa | grep kernel | sort[Invio]

7.22   Problemi tra i pacchetti rpm del kernel e i pacchetti di kernel.org in Red Hat

kernel - pacchetti rpm

Ci sono delle piccole precisazioni da fare sulla ricompilazione del kernel sulla Red Hat. Applicando le patch ufficiali al kernel fornito con la Red Hat (proveniente da rpm) ottengo una serie di errori (di solito non trova il file cui applicare la patch).

Provo ad installare un kernel 'ufficiale' e il medesimo file di patch non restituisce nessun messaggio di errore.

Ricompilo il kernel senza controllare i link /usr/include/[asm linux scsi] confidando nella Red Hat (a dire il vero senza pensarci sù) e con stupore mi accorgo di una serie di messaggi di avvertimento e di errori di compilazione legati ai file che gestiscono le periferiche SCSI.

Verifico l'esattezza dei link per prima cosa e mi accordo che Red Hat mette in /usr/include una directory SCSI e non un link simbolico.

Rinomino la directory, creo il link e ricompilo. Tutto torna a posto.

Red Hat inserisce una directory al posto del link simbolico e quindi si possono avere errori nella ricompilazione del kernel 'ufficiale' (intendendo quello scaricato da <www.kernel.org>).

In definitiva occorre verificare le seguenti predisposizioni:

/usr/include/linux -> ../src/linux/include/linux/
/usr/include/scsi -> ../src/linux/include/scsi/
/usr/include/asm -> ../src/linux/include/asm

e che ci sia in /usr/src/linux/include: asm -> asm-i386

Leggendo i messaggi sulle liste di discussione e nei gruppi di discussione, consiglierei di utilizzare una riga del genere per ricompilare il kernel:

# make dep;make clean;make bzImage > LOG-k 2> ERR-k;make modules > LOG-m 2> ERR-m[Invio]

in questo modo in una sola volta si ottengono i file di log (si reindirizza lo standard output su LOG-? con >)

e i file contententi gli avvertimenti e gli errori di compilazione (si reindirizza lo standard error su ERR-? con 2>).

Risulta quindi più facile individuare i problemi.

7.23   Spazio su disco diminuito dopo la ricompilazione del kernel

Ho ricompilato il kernel, ma rilevo 25 Mb in meno. Devo forse cancellare il vecchio kernel?

__________

Non il kernel, basta dare:

# make clean[Invio]

da /usr/src/linux.

7.24   Più System.map per più kernel

Come si fa a dire al sistema di caricare all'avvio i file /boot/System.map corretti, a seconda dell'immagine del kernel che si è scelto di caricare?

__________

Devi fare una piccola modifica al file:

/etc/rc.d/init.d/syslog

Cerca la riga:

daemon klogd -k /boot/System.map

e modificala in:

daemon klogd -k /boot/System.map-`uname -r`

Copia in /boot il file System.map e rinominalo nel seguente modo:

# mv System.map System.map-`uname -r`[Invio]

installa i moduli fai un:

# depmod -a `uname -r`[Invio]

modifica il LILO e riavvialo.

7.25   Ancora sul System.map

Ho da poco installato e compilato il nuovo kernel stabile 2.2.12. Tutto bene nella fase di compilazione, il sistema parte regolarmente ma nella fase in cui carica i vari servizi (sendmail, gpm, atm, ecc.) appare un messaggio di avvertimento: /boot/Sistem.map... e mi dice che questo file punta ad una versione sbagliata del kernel; in effetti guardando in /boot ho:

lrwxrwxrwx   1 root     root           19 Jun  5 14:38 System.map -> System.map-2.2.5-15
-rw-r--r--   1 root     root       186846 Apr 20  1999 System.map-2.2.5-15

Ora mi chiedo come posso generare il file Sistem.map-2.2.12 e se è un'operazione corretta. Posso anche spostare momentaneamente il file System.map affinché in avvio non venga letto?

__________

Quando ricompili il kernel devi copiare (una volta finita la compilazione) i seguenti file:

# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.x.x[Invio]

e:

# cp /usr/src/linux/System.map /boot/System.map-2.x.x[Invio]

ed eventualmente se è necessario, aggiornare i collegamenti simbolici della directory /boot (a seconda della distribuzione).

7.26   Messaggio di errore: as86 Command not found

Nella mia macchina ho da tempo installato la distribuzione Debian GNU/Linux 2.1 (che fornisce in maniera predefinita il kernel 2.0.36) ma ora volevo installare il kernel 2.2.10. Ho seguito i passi indicati negli HOWTO e va tutto bene fino a quando, lanciato il comando make zImage, ad un certo punto la creazione dell' immagine del kernel si ferma a causa del seguente errore:

make[1]: Entering directory '/prova/linux/arch/i386/boot'

as -0 -a -o bootsect.o bootsect.s

make[1]: as86: command not found

make[1]: *** [bootsect.o] Error 127

make[1]: Leaving directory '/prova/linux/arch/i386/boot'

make: *** [zImage] Error 2

Come faccio a risolvere il problema?

__________

Ti manca il pacchetto bin86 perché as86 fa parte di bin86.

7.27   Messaggio di errore: unresolved symbol

Che vuol dire unresolved symbol? Ogni volta che si fa make modules e make modules_install bisogna rinominare la directory dei moduli (presente in /lib/modules)?

__________

Non tutti sanno che molti messaggi di 'unresolved symbol' dipendono dal fatto che il kernel nella parte monolitica è legato ai suoi moduli, per cui ogni volta prima di dare i comandi:

# make modules; make modules_install[Invio]

è necessario rinominare la vecchia directory.

7.28   Messaggio di avvertimento: System.map versione kernel sbagliata dopo ricompilazione

Uso la Red Hat 6.0 che fornisce il kernel 2.2.5; ultimamente ho compilato ed installato il 2.2.9, solo che all'avvio del sistema mi appaiono tutta una serie di avvertimenti che mi fanno notare che la versione del kernel è sbagliata. Il sistema si avvia poi normalmente, c'è un modo per eliminare tutti quei fastidiosi messaggi o comunque comportano niente all'integrità del sistema?

__________

Probabilmente si tratta del file System.map che appartiene alla versione precedente del kernel. Io ho risolto il problema in modo pratico, trasformando /boot/System.map in un link simbolico a /usr/src/linux/System.map; in questo modo ogni volta che aggiornerai il kernel il collegamento farà sempre riferimento alla versione di System.map appena generata in fase di compilazione che si troverà sempre in /usr/src/linux/

7.29   Messaggio di errore: /dev/lp0 :not detected dopo ricompilazione del kernel

Sono in possesso di una stampante HP LaserJet 5P che con il kernel 2.0.36 non mi ha mai dato nessun problema. Da quando ho aggiornato il kernel alla versione 2.2.3 (utilizzando i pacchetti rpm della Mandrake 5.3, che è la distribuzione che uso) non ne ha voluto più sapere di funzionare, anzi, mentre prima con il kernel 2.0.36 il printtool mi vedeva tranquillamente le porte parallele, ora mi comunica:

/dev/lp0 :not detected

/dev/lp1: not detected

/dev/lp2: not detected

__________

Inserisci in /etc/conf.modules le seguenti righe:

alias parport_lowlevel parport_pc
options parport_pc io=0x378,0x278 irq=7,auto

7.30   Messaggio di errore: /dev/lp0: not detected inserendo il modulo lp

Se provo ad inserire il modulo lp, non mi viene riconosciuta la porta parallela... Perché?

__________

Se non viene riconosciuta la porta parallela può dipendere dal fatto che in `/etc/conf.modules' manca la riga riguardante il modulo `parport_pc.o'. Basta aggiungere:

alias parport_lowlevel parport_pc

Se insomma si inserisce il modulo lp (mediante 'insmod lp') potrebbe non esserci la chiamata a lp0, per cui la riga 'modprobe lp' funziona se in /etc/conf.modules vi sono le dipendenze sopra descritte.

7.31   Messaggio di errore: signal 11 nella compilazione del kernel

Uso Linux da parecchio tempo e su diverse macchine; su una mi capita sempre, quando provo a compilare il kernel, di riscontrare un errore particolare che penso sia dovuto a qualche problema nell'hardware, anche se non sono in grado di capire dove. Infatti, dopo un tempo casuale dall'inizio del make bzImage, viene visualizzato questo messaggio:

__________

Internal compiler error: program cc1 got fatal signal 11

e la compilazione si arresta. La compilazione dell'ultimo sorgente crea un file .o troncato (poche centinaia di byte) e ovviamente, prima di ripetere l'operazione, devo cancellarlo.

A cosa può essere dovuto? E in più, stranamente (visto che ovviamente ho messo anche una partizione di swap), certe volte capita che la compilazione si arresta col messaggio:

Memory exhausted

È un sintomo di malfunzionamento della RAM. Potrebbe essere difettosa.

7.32   Messaggio di errore: No setup Signature found all'avvio

Durante l'avvio ottengo il seguente messaggio:

LILO boot: , Loading linux ; No setup signature found.

E si ferma tutto. Cosa succede?

__________

Hai impartito il comando rdev per la nuova immagine del kernel?

# rdev /vmlinuz /dev/nome_della_partizione[Invio]

sostituisci /vmlinuz con la posizione esatta nel tuo filesystem dell'immagine del kernel (es. /boot/vmlinuz, /boot/vmlinuz-2.2.9, /boot/bzImage, ecc.)

Capitolo 8.   Moduli

8.1   I moduli e la ricompilazione del kernel

Come mi devo comportare con i moduli se voglio ricompilare il kernel?

__________

Prima di ricompilare il kernel, cambia nome alla directory /lib/modules/x.y.zz, oppure cancellala (io lo farei dopo la sicurezza che tutto vada bene).

Quando darai il comando:

# make modules modules_install[Invio]

ti verrà ricreata automaticamente.

8.2   Caricare i moduli del kernel all'avvio

Come si fa a caricare i moduli del kernel all'avvio? Ad esempio, se dovessi eseguire ipoteticamente:

# modprobe ip_masq_ftp[Invio]

all'avvio, cosa si dovrebbe fare (possiedo una Red Hat 6.0)?

__________

Inserisci nel file /etc/rc.d/rc.local:

/sbin/depmod -a
/sbin/modprobe ip_masq_ftp.o

8.3   Messaggio di errore: modprobe: can't locate module ppp-compress-xx durante la connessione ad Internet

Ho una Red Hat 5.2 con kernel 2.2.5, apparentemente funzionante. Quando mi collego ad Internet, nel file /var/log/messages appaiono questi messaggi:

May 7 20:59:12 localhost modprobe: can't locate module ppp-compress-21

May 7 20:59:12 localhost modprobe: can't locate module ppp-compress-26

May 7 20:59:12 localhost modprobe: can't locate module ppp-compress-24

Mi devo preoccupare?

__________

Si eliminano i seguenti messaggi inserendo le seguenti righe nel file /etc/modules.conf

alias ppp-compress-21 bsd-comp
alias ppp-compress-26 ppp_deflate
alias ppp-compress-24 ppp_deflate

Capitolo 9.   Configurazione del sistema

9.1   Come mantenere sul sistema più di una distribuzione GNU/Linux

Come si fa a far convivere due o più Linux?

__________

Ecco una metodica:

Nel lilo.conf che segue, c'è una sezione per Debian GNU/Linux, una per Red Hat e una per il Dos

In /boot ho messo tutti i kernel coinvolti, con i rispettivi System.map e in /lib/modules del primo disco ho copiato la directory dei moduli di Debian GNU/Linux, ovviamente compilati in Debian GNU/Linux.

/etc/lilo.conf:

boot=/dev/hda3
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
password=**********
restricted
default=linux
image=/boot/vmlinuz-2.2.5-15
        label=linux
        root=/dev/hda2
        read-only
image=/boot/vmlinuz-2.2.12
        label=nuova
        root=/dev/hda2
        read-only
image=/boot/vmlinuz.debian
        label=debian
        root=/dev/hdc5
        read-only
other=/dev/hda1
        label=dos
        table=/dev/hda

[giuliano@localhost giuliano]$ ls /lib/modules[Invio]

total 3
drwxr-xr-x   9 root     root         1024 Oct 28 19:32 2.0.36/
drwxr-xr-x   6 root     root         1024 Oct 31 18:34 2.2.12/
drwxr-xr-x  11 root     root         1024 Oct 27 01:59 2.2.5-15/

[giuliano@localhost giuliano]$ ls /boot[Invio]

total 3735
-rw-r--r--   1 root     root       145794 Nov  1 13:07 System.map-2.0.36
-rw-r--r--   1 root     root       149820 Oct 31 17:30 System.map-2.2.12
-rw-r--r--   1 root     root       186846 Apr 20  1999 System.map-2.2.5-15
-rw-r--r--   1 root     root          512 Oct 27 01:55 boot.0303
-rw-r--r--   1 root     root         4544 Apr 13  1999 boot.b
-rw-r--r--   1 root     root          612 Apr 13  1999 chain.b
drwxr-xr-x   2 root     root        12288 Oct 27 01:30 lost+found/
-rw-------   1 root     root        26624 Nov  1 15:31 map
lrwxrwxrwx   1 root     root           20 Oct 27 01:38 module-info -> module-info-2.2.5-15
-rw-r--r--   1 root     root        11773 Apr 20  1999 module-info-2.2.5-15
-rw-r--r--   1 root     root          620 Apr 13  1999 os2_d.b
-rwxr-xr-x   1 root     root      1469449 Apr 20  1999 vmlinux-2.2.5-15*
-rw-r--r--   1 root     root       715260 Nov  1 13:08 vmlinuz-2.0.36
-rw-r--r--   1 root     root       454123 Oct 31 17:30 vmlinuz-2.2.12
-rw-r--r--   1 root     root       617431 Apr 20  1999 vmlinuz-2.2.5-15
lrwxrwxrwx   1 root     root           14 Nov  1 15:20 vmlinuz.debian -> vmlinuz-2.0.36

Per i vari kernel Red Hat, nel file /etc/rc.d/init.d/syslog ho sostituito la riga:

daemon klogd

con:

daemon klogd -k /boot/System.map-`uname -r`

per far riconoscere senza problemi ai vari kernel i loro System.map e /lib/modules/versione_che_ti_serve

9.2   Linux e la deframmentazione

Come posso trovare un programma tipo l'utilità di deframmentazione dischi di Windows?

__________

Il deframmentatore per Linux esiste ma non usatelo. Se proprio volete, è necessario utilizzare Linux in una modalità particolare per evitare che processi diversi vadano a scrivere sul filesystem mentre lo si deframmenta. Inoltre c'è lo svantaggio che non vi offre alcuna garanzia sul suo corretto funzionamento (il numero di versione parla chiaro). Normalmente la deframmentazione di un filesystem ext2 si stabilizza fra il 4 e 5 per cento, a meno che non ci siano una grande quantità di installazioni.

Per chi non lo sapesse, ext2 è più ottimizzato rispetto alla FAT perché quando si salvano le informazioni, esse si vanno a ricercare zone del disco per spezzare al minimo i file.

Fino ad ora, il solo mezzo che ho usato per deframmentare un disco è:

Creare un nastro di backup, ricreare il file system, ripristinare il nastro.

È un po' macchinoso ma se proprio bisogna deframmentare è il metodo più sicuro.

9.3   /etc/bashrc, /etc/profile, ~/.bashrc, ~/.bash_profile

Che differenze e relazioni ci sono tra i file: /etc/bashrc, /etc/profile, home/.bashrc, home/.bash_profile? , , ,

__________

Il primo contiene gli alias e le funzioni per il sistema mentre il terzo quelle valide per l'utente.

Il secondo contiene le variabili d'ambiente e i programmi di avvio del sistema mentre il quarto quelli dell'utente.

I file /etc/profile e ~/.bash_profile contengono le configurazioni per una shell di login, mentre gli altri due per quelle non di login. In pratica i primi file vengono letti ed eseguiti solo per la prima shell che si apre, e non per le successive le quali eseguono ogni volta i bashrc (nota: ricordarsi che ogni volta che viene eseguito uno script, viene aperta una shell non interattiva)

9.4   bashrc modificato ma modifiche non effettuate per gli utenti

Ho dichiarato alcuni alias nel file /etc/bashrc ma posso usarli solo se sono root mentre se accedo da utente essi non vengono abilitati. Il problema è relativo al file /etc/bashrc o ai permessi dell'utente?

__________

Inserisci nel file .bashrc dell'utente:

if [ -f /etc/bashrc ]; then
   . /etc/bashrc
fi

9.5   Far rileggere a Linux file di avvio modificati

Quando si modifica un file rc (es .bashrc o .kshrc) nella propria directory, come si fa a rendere attive le modifiche senza riavviare la macchina?

__________

basta fare:

# source .bashrc[Invio]

# source .kshrc[Invio]

oppure, al massimo, logout e poi di nuovo login.

9.6   Modifiche apportate non riscontrabili al riavvio del sistema

Mi è capitato in situazioni di emergenza di apportare modifiche al filesystem ma al riavvio del sistema, è come se non avessi mai effettuato nessun cambiamento. Perché?

__________

Questo succede perché non si è scaricata la memoria cache, quindi le modifiche non sono state applicate. Per fare scrivere effettivamente quello che si è fatto occorre digitare:

# sync[Invio]

In ogni caso è bene riavviare dando:

# shutdown -r now[Invio]

e non premendo il pulsante di reset. Anche in situazioni di emergenza, se si possono fare modifiche al filesystem, si può anche avviare lo spegnimento.

9.7   Lanciare un programma in fase di avvio del sistema

Devo attivare un programma scritto da me in fase di avvio di una macchina Debian GNU/Linux 2.0. Vi chiedo quale possa essere un modo intelligente per farlo. Cioè se devo lanciare uno script, oppure inserire il mio programma in uno script che viene eseguito al boot.

__________

  1. Crea uno script che richiami il tuo programma;

  2. metti il tuo script in /etc/init.d;

  3. crea un link (ln -s) a questo script nella directory /etc/rcX.d dove X è il runlevel. (Può anche essere collegato in più di una directory).

9.8   Servizi all'avvio in Debian GNU/Linux

In Debian GNU/Linux non trovo nessun'applicazione in grado di farmi configurare i servizi che devono essere lanciati all'avvio. Come si procede?

__________

Il comando update-rc.d fa al caso tuo. In ogni caso puoi entrare nelle directory /etc/rcx.d/ , dove rcx=rcS,rc0,rc1,...,rc6 e creare nella directory /etc/init.d/ i link agli script con un nome opportuno (leggiti /usr/doc/sysvinit/README.runlevels.gz).

9.9   Disattivare i servizi in Red Hat 6.0

Durante la procedura di installazione della Red Hat 6.0, ho scelto i servizi che desideravo si attivassero automaticamente ad ogni avvio del sistema. Ora però ho l'esigenza di disattivarne alcuni. Il punto è come fare? Devo riconfigurare il kernel per escluderli oppure devo modificare un particolare file di configurazione?

__________

All'interno di /etc/rc.d/rcX.d/ (con x = il tuo runlevel abituale,normalmente 3) sono presenti dei collegamenti (link) simbolici agli script dei servizi presenti all'interno della directory /etc/rc.d/init.d/.

Se dai il comando:

# ls -l[Invio]

vedrai i link che puntano ai suddetti file. Questi link sono fatti così:

Sxxnome_del_servizio

Kxxnome_del_servizio

S = start cioè partenza K = kill cioè fine;

xx = numero, ordine di partenza del servizio

Se vuoi eliminare un servizio, basta che elimini il link Sxxnome_servizio.

Se poi ti riservirà basta che rifai il link allo script in /etc/rc.d/init.d

9.10   /etc/rc.d/* Red Hat - la gestione dei processi da eseguire all'avvio

In Red Hat e nelle distribuzioni da essa derivate, nella directory /etc/rc.d/ esistono le directory dei vari livelli di esecuzione (runlevel); esse sono caratterizzate dal nome rcn.d dove «n» può assumere i seguenti valori:

 0   livello di spegnimento;
 1   livello monoutente;
 2,3 livelli di «lavoro»; 
 5   livello grafico;
 6   livello di riavvio.

Oltre alle suddette directory c'è la directory /etc/rc.d/rc.local. Queste directory contengono dei collegamenti a script presenti in /etc/rc.d/init.d. Praticamente se in /etc/rc.d/rc.local inserisci un collegamento ad uno script presente in /etc/rc.d/init.d, ad ogni avvio questo verrà eseguito; se ne inserisci un altro in /etc/rc.d/rc3.d questo verrà eseguito quando il sistema sarà avviato in runlevel 3 e verrà chiuso quando spegnerai, riavvierai o passerai ad un altro livello. Se ad esempio in /etc/rc.d/rc3.d esistono:

 K75netfs -> ../init.d/netfs
 S10network -> ../init.d/network
 S50inet -> ../init.d/inet

all'avvio «netfs» non verrà eseguito (perché la «K» nel nome del collegamento ne nega l'esecuzione), mentre «network» e «inet» saranno eseguiti seguendo l'ordine indicato dal numero dopo la «S».

9.11   Far ripartire i demoni

Se modifico alcuni file di configurazione di alcuni demoni, come posso rendere effettive tali modifiche senza dover riavviare la macchina?

__________

Devi far ripartire i demoni appropriati per fargli rileggere i file che hai modificato.

Se individui il pid del comando attraverso ps:

# ps -aux | grep nome comando[Invio]

puoi utilizzare il comando:

# kill -HUP numero_di_pid[Invio]

per arrestare il demone del processo e per farlo ripartire, facendogli in questo modo leggere il file di configurazione modificato.

Per riavviare, di solito si può anche mandare il sengale 1 al processo con:

# kill -1 pid-del-processo[Invio]

In Apache ad esempio basta uccidere il primo dei processi attivi (definito root) per far ripartire con le nuove impostazioni anche i processi figli.

Un modo ancora più pulito è andare nella directory /etc/init.d o /etc/rc.d/init.d e fare ripartire il demone usando lo script di inizializzazione, ad esempio

# ./apache restart[Invio]

9.12   Cambiare il nome della macchina

Vorrei chiedere come si cambia il nome della mia macchina (da localhost a pinguino per esempio). Ci avevo già provato qualche tempo fa, col pessimo risultato che sendmail presentava lunghi rallentamenti all'avvio di Linux

__________

cambia nel file /etc/hosts la riga:

127.0.0.1       localhost    localhost.localdomain

in (ad esempio):

127.0.0.1       pinguino     pinguino.my.home

aggiorna di conseguenza la voce 'HOSTNAME=' del file /etc/sysconfig/network comando:

# hostname pinguino[Invio]

9.13   Impostazione orologio di sistema

Come imposto l'orologio di sistema?

__________

Con:

# hwclock[Invio]

(timeconfig in una distribuzione Red Hat)

9.14   Aggiornare l'orologio di sistema

Ci sono delle utility scaricabili da Internet per aggiornare l'orologio?

__________

se uccidi xntpd e dai il comando:

# ntpdate www.clock.org[Invio]

ti trovi l'orologio di sistema aggiornato tramite un server collegato ad un orologio atomico.

Ecco un altro metodo simile:

# rdate -sp tempo.cstv.to.cnr.it ; hwclock --systohc &[Invio]

9.15   Cambio automatico ora legale in Linux

Esiste un sistema per cambio automatico dell'ora legale su Linux?

__________

Funziona automaticamente se hai impostato l'orario del CMOS a GMT.

9.16   Calendario

Visualizzare il calendario del mese corrente:

cal[Invio]

Visualizzare il calendario dell'anno corrente:

cal -y[Invio]

Visualizzare il calendario del 2002:

cal 2002[Invio]

Visualizzare solo il mese di Febbraio 2000:

cal 2 2000[Invio]

9.17   Abilitazione 'numlock' all'avvio

Vorrei che all'inizio, quando parte il sistema, il tasto numlock sia abilitato. Che modifiche devo effettuare?

__________

Se da BIOS non è possibile, nella Red Hat modifica

/etc/rc.d/rc.sysinit

e inserisci queste linee:

for t in 1 2 3 4 5 6
do
    /usr/bin/setleds -D +num < /dev/tty$t > /dev/null
done

Nella Debian GNU/Linux crea in /etc/rc.boot uno script con le stesse righe, e nella slackware mettile nel file rc.keymap

9.18   Cancellare /tmp?

Si può cancellare brutalmente il contenuto di /tmp?

__________

Per evitare interferenze con eventuali programmi che stanno usando file dislocati in quella directory, nel caso che tu non sappia se e quali file sono, può essere una buona pratica farlo ad ogni boot della macchina: puoi inserire in uno dei file di avvio (di quelli dedicati a operazioni varie) una riga del genere:

        cd /tmp; rm -rf *

Alcune distribuzioni lo fanno di regola.

Se invece sei certo che quanto vuoi cancellare di /tmp in una dato momento non sia essenziale per l'integrità del sistema, allora cancellalo.

Se lo vuoi fare per bene tenendo in considerazione tutto (il fatto che uno ci possa aver montato un fs su /tmp, ecc.) fai così: (tratto da /etc/init.d/bootmisc.sh [Debian GNU/Linux 2.1])

( cd /tmp && \
  find . -xdev \
  ! -name . \
  ! \( -name lost+found -uid 0 \) \
  ! \( -name quota.user -uid 0 \) \
  ! \( -name quota.group -uid 0 \) \
  -depth -exec rm -rf -- {} \; )
rm -f /tmp/.X*-lock

9.19   Visualizzazione dello spazio su disco

Come vedo quanto spazio disponibile ho sul disco rigido?

__________

Utilizza:

# df[Invio]

che ti dà la percentuale di occupazione di ciascun filesystem montato, con i blocchi liberi. Con l'opzione -h ti dà lo spazio in Mb.

9.20   Visualizzazione variabili d'ambiente

Come visualizzo le variabili d'ambiente?

__________

Occorre digitare:

# printenv[Invio]

9.21   Impostare le variabili d'ambiente

Sto installando un compilatore e il programma di configurazione mi chiede di impostare determinate variabli di ambiente con il comando setenv. Ma la shell mi risponde: command not found.

__________

Il comando setenv fa parte della csh, se non usi questa shell ma usi la bash, utilizza export:

# $ export VARIABILE=valore[Invio]

Qualche esempio:

# export HOSTNAME="`cat /etc/HOSTNAME`"[Invio]

# export MOZILLA_HOME=/usr/lib/netscape[Invio]

# export MAILDIR=/var/spool/mail[Invio]

# export TERM=linux[Invio]

# export PS1='\n\u@\h:[`pwd`] [\t] --> \!\n* '[Invio]

9.22   Visualizzazione librerie usate da un programma

Come faccio a visualizzare che librerie usa un determinato programma?

# ldd programma[Invio]

9.23   Libjpeg 61 62

Cosa faccio se un programma vuole le librerie libjpeg 61 (KDE-1.2) e gli altri della mia distribuzione vogliono le 62?

__________

Se ho ben capito il programma vuole una versione più vecchia. Accontentalo.

Vai in /usr/lib e fai un collegamento simbolico con il comando:

# ln -s libjpeg.so.62 libjpeg.so.61[Invio]

così quando cercherà la libreria vecchia troverà quella nuova e sarà lo stesso. In genere questo trucchetto funziona...

9.24   Scorciatoie per comandi molto lunghi

C'è un modo per non scrivere sempre un comando molto lungo?

__________

Si crea un alias. Es.:

# alias ls='ls -la --color'[Invio]

basterà scrivere ls per avere un elenco dettagliato di tutti i file (anche quelli nascosti) e l'elenco sarà colorato. Gli alias vanno inseriti in ~/.bash_profile se sono specifici di un utente, o in /etc/profile se sono per tutto il sistema.

È da tenere presente anche la possibilità di completare il nome dei comandi e dei file con il tasto [Tab].

9.25   Sospensione (ibernazione) di Linux

Mi chiedevo se anche con Linux potevo fare arrestare il sistema con il metodo di ibernazione. Con Windows 98 e 2000 ci riesco benissimo ma su Linux non ho mai visto tale prospettiva di spegnimento.

__________

Installa l'APM nel kernel e poi con:

# apm --suspend[Invio]

mandi in sospensione la macchina.

Capitolo 10.   Utenti e password

10.1   File con le configurazioni degli utenti del sistema

Dove trovo un elenco di tutte le caratteristiche degli utenti?

__________

Queste informazioni sono raccolte in:

/etc/passwd

ma se si usano le shadow password, ricordarsi anche di controllare i file:

/etc/shadow

/etc/gshadow

10.2   File dei gruppi degli utenti

Quale è l'elenco dei gruppi di utenti?

__________

L'elenco è contenuto nel file:

/etc/group

in ogni caso ricordarsi anche dei file:

/etc/shadow

/etc/gshadow

se si usano le shadow password.

10.3   Eliminazione account utenti

Come posso eliminare un account?

__________

Con la riga di comando:

# userdel userid[Invio]

tenendo presente che alcune distribuzioni usano deluser al posto di userdel.

In ogni caso elimina i suoi dati da /etc/passwd e da /etc/group e poi elimini la /home/utente

# rm -rf /home/utente[Invio]

10.4   Cancellazione file di un utente

Chi può suggerirmi come cancellare, con un unico comando, i file appartenenti ad un proprietario?

find percorso_iniziale -user uid -exec rm {} \;[Invio]

o con:

find / -uid `id -u PROPRIETARIO` | xargs rm -f[Invio]

dove uid è il valore numerico dell'utente del quale vuoi cancellare i file (da rilevare in /etc/passwd).

Per evitare di commettere errori che potrebbero risultare spiacevoli è meglio controllare cosa questo comando andrà a cancellare con:

find percorso_iniziale -user uid[Invio]

10.5   Cambio momentaneo di utente

Come posso diventare temporaneamente un altro utente?

__________

Con il comando:

# su nome-utente[Invio]

Per ritornare alla console, digitare:

# exit[Invio]

10.6   Cambio password

Come cambio la mia password?

__________

Con:

# passwd[Invio]

10.7   Cambio password utenti

Come cambio la password di un utente?

__________

# passwd utente[Invio]

ma devo essere l'amministratore del sistema (root)

10.8   Shadow password

Cosa sono le shadow password?

__________

È un modo di gestire le password degli utenti. Invece che, come succede normalmente, avere le password nel file /etc/passwd (che è leggibile da tutti, anche se le password sono criptate), con le shadow password queste vengono tenute nel file /etc/shadow, che è leggibile solo da root.

10.9   Avviare in modalità utente singolo

Come si avvia Linux in modalità singola (nessun login e nessuna password?)?

__________

Al prompt del LILO, digita:

# linux single[Invio]

oppure, sempre al prompt di LILO:

lilo: linux init 3[Invio]

Questo vale per Red Hat.

Per quanto riguarda le altre distribuzioni è probabile che in /etc/inittab ci sia una riga del tipo:

--:S:wait:/sbin/sulogin ?

prova a sostituirla con su root e vedi che ti troverai direttamente in shell.

10.10   Eliminare la richiesta della password

Volevo chiedere se esiste un metodo per eliminare la richiesta della password all'avvio di Linux

__________

nel file che contiene le pw basta che elimini la pw (che compare crittata)

Per esempio:

root:Wteoh1TDSxhyA:0:0:root:/root:/bin/bash
studente::100:100:,,,:/home/studente:/bin/bash

Se il file è come sopra, per l'utente root è richiesta la pw, mentre per l'utente studente no.

10.11   Come evitare il login e la richiesta della password all'avvio

Dato che il mio computer a casa lo uso solo io, vorrei che all'avvio non mi venissero chiesti nessun login e nessuna password. C'è un modo semplice di fare questo?

__________

Certo che c'è, il modo semplice. Però, essendo le modifiche un po' critiche (ti consiglio di farti prima un dischetto di avvio), è necessaria qualche spiegazione.

Come già detto, è necessario spiegare alcune cose:

  1. /etc/inittab contiene le azioni che /sbin/init deve compiere dopo l'avvio del kernel. Dopo tutte le azioni, viene lanciato il mingetty per effettuare il login ed abilitare i terminali virtuali. La scritta respawn (vedi contenuto /etc/inittab) significa che il processo indicato deve ripartire una volta che è terminato. Ecco perché, scrivendo exit dalla shell in modalità testo, si ritorna al prompt del login.

  2. bash, usato in modalità login (/bin/bash -login), cerca il file /etc/profile e, se esiste, lo elabora. Poi cerca il file $HOME/.bash_profile (per root "$HOME=/root"). Se non esiste, allora cerca $HOME/.bash_login. Se non esiste neanche questo, allora prova con $HOME/.profile.

  3. La variabile d'ambiente HOME viene modificata a seguito del normale processo di login. Questo perché, insieme alle informazioni relative ad utente e password, sono memorizzati anche directory casa ed interprete dei comandi (shell) di partenza. Il normale processo di login quindi, quando effettua la verifica sulla password e sull'utente, avvia anche l'interprete dei comandi adatto, impostando poi la corretta variabile d'ambiente HOME. Di conseguenza, saltando il processo di login, la HOME rimane impostata a«/», e non alla directory dell'utente che accede.

Spiegati questi 3 punti, ecco come procedere:

  1. Modifica il file /etc/profile inserendo le righe seguenti (o comunque facendo in modo che quanto indicato venga eseguito):

       HOME="/root"
       export HOME

    Questo ti permetterà di mantenere le configurazioni salvate nella home directory (come le impostazioni del gestore delle finestre).

  2. Modifica il file /etc/inittab. Cioè, individua le seguenti linee (generalmente sono le ultime):

          # Run gettys in standard runlevels
          1:2345:respawn:/sbin/mingetty tty1
          2:2345:respawn:/sbin/mingetty tty2
          3:2345:respawn:/sbin/mingetty tty3
          4:2345:respawn:/sbin/mingetty tty4
          5:2345:respawn:/sbin/mingetty tty5
          6:2345:respawn:/sbin/mingetty tty6
    
          # Run xdm in runlevel 5
          # xdm is now a separate service
          x:5:respawn:/etc/X11/prefdm -nodaemon

    e sostituiscile con queste (ottenute commentando tutte le righe sopra ed aggiungendone due):

          #Avvio senza login
          1:12345:wait:/bin/bash -login
    
          # Run gettys in standard runlevels
          #1:2345:respawn:/sbin/mingetty tty1
          #2:2345:respawn:/sbin/mingetty tty2
          #3:2345:respawn:/sbin/mingetty tty3
          #4:2345:respawn:/sbin/mingetty tty4
          #5:2345:respawn:/sbin/mingetty tty5
          #6:2345:respawn:/sbin/mingetty tty6
    
          # Run xdm in runlevel 5
          # xdm is now a separate service
          #x:5:respawn:/etc/X11/prefdm -nodaemon

    L'opzione wait significa che si aspetta la fine del processo, senza farlo ripartire: si avrà un comportamento un po' diverso da quello normale. Infatti, digitando exit, (sempre in modalità testo), l'interprete dei comandi si chiuderà e sarà necessario avviare lo spegnimento.

  3. (opzionale) Metti alla fine di $HOME/.bash_profile la riga

       cd $HOME

    Attenzione, non sarà più possibile passare da un terminale virtuale all'altro [ALT+Fx], in quanto non esistono (non sono stati inizializzati).

10.12   Ho dimenticato la password di root

Se ho dimenticato la password di root che devo fare?

__________

All'avvio digita:

LILO: linux single[Invio]

poi, dopo essere entrato, cerca il file /etc/passwd o l'equivalente se usi le shadow password (/etc/shadow).

Al suo interno troverai tutti i dati relativi agli utenti, con le password criptate. Cancella semplicemente il campo con la password di root (rimarranno due caratteri ':' adiacenti). A questo punto potrai entrare come root lasciando in bianco la password. Provvedi poi a assegnare una nuova password di root.

Questo vale per Red Hat.

Per quanto riguarda le altre distribuzioni è probabile che in inittab ci sia una riga del tipo:

--:S:wait:/sbin/sulogin ?

prova a sostituirla con su root e ti troverai direttamente in shell.

10.13   file /etc/.pwd.lock

Nella directory /etc mi ritrovo un file chiamato .pwd.lock. È vuoto, posso cancellarlo senza problemi? A che serve?

__________

Sì, lo puoi cancellare. Se è presente non puoi accedere in scrittura al file /etc/passwd.

10.14   Chi è connesso attualmente al sistema?

Come visualizzo i nomi di chi è connesso attualmente al sistema?

__________

Con:

# w[Invio]

o:

# who[Invio]

10.15   Cambio proprietario e gruppo file

Come cambio il proprietario ed il gruppo di un file?

__________

La sintassi è:

# chown nuovopropietario.nuovogruppo file[Invio]

Se vuoi cambiare solo il proprietario o solo il gruppo è sufficiente non indicare l'altro:

# chown nuovoproprietario file[Invio]

o:

# chown .nuovogruppo file[Invio]

(attenzione al ., se non lo mettete il nuovo gruppo viene interpretato come un nuovo utente).

Capitolo 11.   Permessi

11.1   Permesso di esecuzione di un file

Come abilito il permesso di esecuzione di un file?

__________

Con i seguenti comandi:

$ chmod a+x file[Invio]

(il permesso di esecuzione è abilitato a tutti)

$ chmod u+x file[Invio]

(il permesso di esecuzione è abilitato al proprietario del file)

$ chmod g+x file[Invio]

(il permesso di esecuzione è abilitato al gruppo proprietario del file)

$ chmod o+x file[Invio]

(il permesso di esecuzione è abilitato agli altri utenti)

Potete anche combinare le cose:

$ chmod ug+x file[Invio]

ad esempio aggiunge il permesso sia all'utente che al gruppo.

11.2   Permesso di lettura di un file

Come abilito il permesso di lettura di un file?

__________

Stesse regole del permeso di esecuzione (11.1), basta sostituire x con r.

11.3   Permesso di scrittura di un file

Come abilito il permesso di scrittura di un file?

__________

Stesse regole del permeso di esecuzione (11.1), basta sostituire x con w.

11.4   Permessi per le directory

Come cambio i permessi di una directory?

Per cambiare i permessi delle directory si seguono le stesse regole seguite per i file (11.1).

11.5   Significato permesso esecuzione per le directory

Cosa significa il permesso di esecuzione per una directory?

__________

Se manca, non è possibile accedere al suo contenuto.

11.6   Permessi dell'utente sulle partizioni

Vorrei sapere come si fa per fare in modo che l'utente che ho creato, possa montare i dischi locali, ma non scriverci sopra. Ad esempio, io ho due unità, hda1 e hda2 con filesystem vfat, e vorrei che il mio utente, possa montarli per leggere quello che c'è, ma che non possa scrivere o modificare nulla.

__________

Devi utilizzare umask.

Per dare il permesso in lettura e in scrittura a tutti su hda1 si inserisce questa riga in /etc/fstab:

/dev/hda1       /mnt/hardc       vfat   quiet,users,umask=000  0    0  

I tre numeri dopo umask sono i parametri che impostano i permessi rispettivamente del proprietario del file, del gruppo cui appartiene il file, e di tutti gli altri; indicano quali permessi vengono tolti. Nell'esempio non viene tolto nessun permesso a nessuno.

Se volessi lasciare la scrittura al solo proprietario:

umask=022

Se volessi lasciare scrittura e lettura al solo proprietario:

umask=066

11.7   Permessi predefiniti dei file e delle directory

Se vogliamo che i nostri file assumano permessi predefiniti dobbiamo utilizzare il comando umask. In genere questo comando viene posizionato in file quali .profile o .bash_profile. Il valore per umask viene calcolato sottraendo i permessi che volete dal valore massimo. Si assume che i file siano non eseguibili per cui il loro valore massimo sarà 666. Se quindi desiderate che i file assumano permessi 664 il valore di umask da utilizzare sarà quindi 002. Questo valore fornirà alle directory i permessi 775.

Capitolo 12.   File, link e directory

12.1   Copia, spostamento e cancellazione file

Come copio, sposto o cancello i file?

__________

Copiare: cp origine destinazione. Es.:

# cp /root/dog.gif /home/pino/[Invio]

# cp -i origine destinazione[Invio]

(chiede conferma prima di sovrascrivere)

Spostare: mv origine destinazione. Es.:

# mv /root/dog.gif /home/pino/[Invio]

Cancellare: rm file

# rm -i *.html[Invio]

(chiede conferma per ogni file che deve essere cancellato)

Cancellare una directory con tutto il suo contenuto:

# rm -rf directory[Invio]

Nota. Se nella copia dei file si vogliono copiare i collegamenti simbolici e mantenerli come tali si deve utilizzare l'opzione -d. Se questo è richiesto durante la copia di directory con sottodirectory, l'opzione -r diventerà -R.

12.2   dir *.html /s: come si fa in Linux?

Dalla directory radice (/) ho digitato:

# ls -R *.html[Invio]

ottenendo come risultato un bel niente, invece speravo che il comando equivalesse a quello Dos:

C:\>dir *.html /s[Invio]

Come faccio a trovare nel mio sistema tutti i file con estensione html?

__________

Con uno dei seguenti comandi:

# find / -name "*.html"[Invio]

# find / -print | grep -i "html$" > ./all_html.txt[Invio]

12.3   Come evitare la cancellazione di un file da parte di root?

Sapete come evitare che un file sia cancellabile da parte dell'utente root?

__________

Non credo che un semplice utente possa evitare la cancellazione dei suoi file da parte dell'utente root. Però dipende da cosa intendi fare. Per esempio, se un file è stato impostato da root con:

# chattr +i nome_file[Invio]

esso non potrà venire rinominato, cancellato, modificato da nessuno, utente root compreso, almeno non prima che l'attributo i venga tolto.

12.4   Copia di un'intera porzione del filesystem

Come faccio a copiare una directory (e il suo contenuto) per intero?

__________

Il comando che cerchi è:

# cp -av origine (/usr) destinazione (/home/dove_vuoi_tu)[Invio]

Se si aggiunge anche l'opzione «-x» (--one-file-system) verranno escluse dalla copia le sottodirectory che risiedono su filesystem diversi da quello da cui si è iniziata la copia.

12.5   Undelete in Linux

Esistono funzioni di undelete in Linux?

Alcune delle tecniche che puoi usare per effettuare il recupero dei file cancellati su filesystem ext2 sono descritte nel Linux Ext2fs Undeletion mini-HOWTO (<http://www.praeclarus.demon.co.uk/tech/e2-undel/>)

In questo HOWTO si parla di una caratteristica apposita del Midnight Commander (mc), che sembra ideale per utenti alle prime armi ma nulla di più. Tieni presente che la cancellazione, nei filesystem ad inode (quasi tutti quelli Unix, più HPFS e NTFS) è un provvedimento molto più drastico che non sotto Dos (che si limita a sostituire il primo carattere del nome del file con «?»). Mc credo che sostituisca il comando 'rm' con un finto 'rm' che sposta il file su una directory di file cancellati da cui eventualmente 'unrm' effettua i recuperi.

12.6   Visualizzazione della posizione nel filesystem

In che posizione del filesystem mi trovo?

__________

Puoi dare il comando:

$ pwd[Invio]

12.7   Visualizzazione del contenuto di un file

Come faccio a visualizzare il contenuto di un file?

__________

Con uno dei seguenti comandi:

$ cat file[Invio]

$ more file[Invio]

(una schermata alla volta)

$ less file[Invio]

(una schermata alla volta, si può tornare 'indietro' nella visualizzazione del file, per uscire quando si è arrivati alla fine, si preme il tasto 'q')

Tutti questi comandi valgono solo per file di testo.

12.8   Visualizzazione parziale di un file

C'è un comando per visualizzare solo una riga di un file?

__________

Se intendi visualizzare la n-sima riga del file pippo fai:

$ cat pippo | head -n | tail -1[Invio]

12.9   Visualizzazione del contenuto di una directory

In quanti modi posso visualizzare il contenuto di una directory?

__________

Ecco i vari modi:

$ ls[Invio]

$ ls -la[Invio]

per vedere tutti i file compresi quelli nascosti e i relativi permessi;

$ ls -la |more[Invio]

per vedere il contenuto della directory una schermata alla volta;

$ ls -la > testo[Invio]

per creare un file chiamato testo contenente l'elenco del contenuto della directory attuale.

Per aggiungere il contenuto di un'altra directory al file:

$ ls -la >> testo[Invio]

$ ls |sort |more (o less)[Invio]

visualizza in ordine il contenuto della directory corrente una schermata alla volta;

$ ls --color[Invio]

per visualizzare con colori uguali, tipi di file uguali: directory, eseguibili, ecc.

12.10   ls colorata

Come si ottengono i colori che distinguono i diversi tipi di file quando si esegue il comando ls?

__________

Nel ~/.bash_profile ho messo:

alias ls='ls -lF --color=always'

12.11   Come mantenere il colore di ls nel terminale grafico?

Come mantenere il colore di ls in ambiente grafico xterm? Devo ridare il comando:

alias ls='ls --color'

se voglio avere i colori che ho sulla console testuale.

__________

Utilizza:

# xterm -ls[Invio]

12.12   ls con percorso relativo

Vorrei che ls * mi visualizzasse tutti i file con il percorso relativo alla directory in cui mi trovo.

__________

Usa:

$ find .[Invio]

12.13   Vedere il contenuto di tutti i file di una directory

Vorrei visualizzare il contenuto di tutti i file di una directory. Come si fa?

__________

Con:

$ cat /nome_dir/* | less[Invio]

o:

$ less /nome_dir/*[Invio]

12.14   Vedere il contenuto di uno stesso file presente in diverse directory

Se volessi vedere il contenuto dei file rp_filter contenuti nelle varie directory /proc/sys/net/conf/* con un solo comando, come posso fare?

__________

Eccoti tre metodi:

  1. # cat `find /proc/sys/net/conf -name rp_filter -print`[Invio]

  2. # for i in `find /proc/sys/net/conf -name rp_filter -print` ; do echo $i; cat $i; done[Invio]

  3. # find /proc/sys/net/conf -name rp_filter -exec "echo '{}' && cat '{}'" ;[Invio]

12.15   Less disattiva la colorazione di ls

Qualcuno saprebbe dirmi come fare per vedere le voci colorate col comando in oggetto? Se metto '|more', tutto funziona, ma se uso '|less', che è più pratico, compaiono invece questi codici:

ESC[01;34mat-3.1.7ESC[0m/

ESC[01;34maudiofile-0.1.6ESC[0m/

ESC[01;34maumix-1.18.2ESC[0m/

ESC[01;34mawesfx-0.4.3aESC[0m/

__________

less protegge di norma il terminale evitando di mandare sequenze di caratteri che potrebbero «sporcarlo». Ovviamente questo è sconveniente a volte, quindi c'è l'opzione -r

Puoi ottenere ciò che dici infatti con il comando:

# ls -alF --color=always |less -r[Invio]

chiaramente in questi casi si fa un alias.

12.16   Creazione istantanea di un file

Come creo un file all'istante?

__________

# touch file[Invio]

(lo crea e basta)

# cat > file[Invio]

(lo crea e ci scrive tutto quello che voglio fino a quando non premo ctrl+d)

12.17   Unire più file di testo

Esiste un comando che permetta di concatenare più file di testo, fra di loro?

__________

O così:

$ cat file1.txt > ris.txt[Invio]

$ cat file2.txt >> ris.txt[Invio]

$ cat file3.txt >> ris.txt[Invio]

o, più facilmente:

$ cat file1.txt file2.txt file3.txt > ris.txt[Invio]

12.18   Informazioni sul tipo di file

Come faccio a sapere di che tipo è un file?

__________

Con il comando:

$ file nome_file[Invio]

12.19   Ordinamento alfabetico di un file

Se ho un elenco in un file, come faccio a metterlo in ordine alfabetico?

__________

Con il comando:

$ sort < file.txt > fileinordine.txt[Invio]

12.20   Creazione ed eliminazione delle directory

Come si crea e come si cancella una directory?

__________

Creare:

$ mkdir nome[Invio]

Cancellare:

$ rmdir nome[Invio]

(la directory deve essere vuota)

$ rm -rf /prova[Invio]

(elimina la directory prova e tutte le sue eventuali discendenti) [Attenzione: è un comando cui bisogna prestare attenzione].

12.21   File non cancellabili - attributi estesi

Qualcuno (leggasi intrusione) ha cambiato un file di sistema con uno modificato; ora lo voglio sostituire con il file corretto, ma non riesco a cancellarlo:

cp: overwrite `/bin/login', overriding mode 4755? y
cp: cannot create regular file `/bin/login': Permission denied
[...]
rm -rf /bin/login
rm: /bin/login: Operation not permitted

__________

Vedi gli attributi estesi:

# lsattr[Invio]

per cambiarli:

# chattr[Invio]

Forse hanno impostato il file come immutabile (una 'i' negli attributi estesi).

Per la documentazione sui due comandi naturalmente:

# man lsattr[Invio]

# man chattr[Invio]

12.22   Spostamento nelle directory del filesystem

Come mi muovo tra le directory del filesystem?

__________

$ cd nome[Invio]

(per entrare in una directory figlia di quella attuale)

$ cd /nome/nome2/[Invio]

(per entrare nella directory di secondo livello 'nome2' figlia di 'nome')

$ cd ..[Invio]

(per tornare alla directory di livello superiore a quello attuale)

$ cd ~[Invio]

(per tornare alla directory home)

$ cd ../conti[Invio]

(per spostarmi alla directory conti, sorella della directory in cui mi trovo)

$ cd -[Invio]

(per tornare nell'ultima directory in cui sono stato)

12.23   Differenza tra link soft e hard

Qualcuno mi spiega i vari tipi di link e che differenze ci sono?

__________

Un link soft è praticamente un nome diverso che tu dai allo stesso file. Non occupa spazio su disco (se non per un inode). Un link hard è praticamente una copia fisica del file con il più il fatto che ogni cambiamento che fai all'originale (o alla copia) verrà fatta anche sulla copia (o sull'originale).

Se hai un link soft e cancelli l'originale, il file viene perso; se il link è hard resterà il link (ed il contenuto viene mantenuto).

12.24   Creazione di un link simbolico

Come creo un link simbolico?

__________

# ln -s /home/mario/resoconto.txt /root/resocontomario[Invio]

dove /home/mario/resoconto.txt è il file che già esiste, e /root/resocontomario è il link.

12.25   Trovare un file in tutto il filesystem

Come posso trovare un file in tutto il mio filesystem?

__________

Con il comando:

# find / -name nomefile -print[Invio]

Oppure, usando locate:

# locate nomefile[Invio]

Locate è più veloce di find, ma per usarlo bisogna prima aggiornare il suo archivio (da root) con:

# updatedb[Invio]

12.26   Trovare un file in una porzione del filesystem

Come posso sapere se c'è un determinato file nella directory /var e nelle sue discendenti?

Con:

# find /var -name nomefile -print[Invio]

12.27   Cerca, trova e copia

Come faccio a cercare tutti i file di un certo tipo (*.png) e a copiarli in una directory? (/home/pippo/pngfile/)

__________

# find / -name "*.png" -exec cp -p {} /home/pippo/pngfile \;[Invio]

12.28   Visualizzazione dei file che contengono una stringa

Come posso sapere tutti i file che contengono la stringa «resoconti»?

__________

$ grep resoconti *[Invio]

oppure

$ find nome_percorso -print -exec grep stringa {} \;[Invio]

il comando restituisce tutti i file trovati nel percorso più le stringhe trovate.

12.29   Ricerca di una stringa nei file

Dovrei cercare un certo termine all'interno di alcuni file. Come effettuare la ricerca in tutti i file presenti in tutte le directory?

__________

$ rgrep -r altre_opzioni stringa_da_cercare directory_di_partenza[Invio]

oppure:

$ find directory_di_partenza -type f -exec grep -l altre_opzioni {} \;[Invio]

12.30   Ricerca dei file che iniziano con una determinata stringa

Come trovo tutti i file che iniziano per 'conf'?

__________

Con:

# find / -name conf\*[Invio]

12.31   Spezzare i file di grandi dimensione

Qualche volta ho la necessità di portare sul mio elaboratore di casa che ha Linux dei file di grosse dimensioni che scarico all'università. Fino a questo momento ho utilizzato WinZip per spezzare i file e ricostruirli a casa. Poi, da Linux, montavo la partizione Windows e copiavo i file sul filesystem di Linux. In verità questo è l'unico motivo per cui ho ancora Windows. Considerato che all'università, oltre alle macchine con Windows, ci sono alcune Sun con Solaris, mi sapreste suggerire una procedura per spezzare i file di grosse dimensioni su dischetti per ricostruirli poi a casa sotto Linux?

__________

Usa split:

$ split -b 1400k nome_file[Invio]

ti separa nome_file in file di 1400k chiamati di default xaa, xab, ecc. C'è anche su Sun Solaris.

Una volta copiati nella macchina Linux di casa, usi:

$ cat xaa xab ... > nome_file[Invio]

oppure direttamente:

$ cat x* > nome_file[Invio]

In alternativa puoi usare il comando tar con l'opzione M, scrivendo direttamente su /dev/fd0.

Un inconveniente: il tar scrive direttamente sul disco senza badare al filesystem, per riutilizzare il dischetto lo devi riformattare (l'mformat è ottimo in questo caso)

Es.:

$ tar cvfM /dev/fd0 pippo[Invio]

Per estrarre ovviamente:

$ tar xvfM /dev/fd0[Invio]

Capitolo 13.   Configurazione della console

13.1   Le variabili nella shell bash

Come si utilizzano le variabili nella shell bash?

__________

In genere si utilizzano nomi di variabili con caratteri maiuscoli e si dichiarano da riga di comando nel seguente modo:

NOMEVARIABILE=valore

e l'utilizzo della variabile si effettua con il simbolo $ davanti il nome della variabile:

RICOMP_KERNEL=/usr/src/linux
cd $RICOMP_KERNEL

Come si visualizzano tutte le variabili d'ambiente del sistema?

il comando è:

# set[Invio]

Per vedere il contenuto di una variabile si utilizza il comando:

# echo $NOME_VARIABILE[Invio]

e per svuotarne il contenuto si usa:

# unset NOME_VARIABILE[Invio]

Ad ogni riavvio della shell o ad ogni cambio shell, le variabili si riazzerano. Per rendere disponibile una variabile anche all'esterno, si usa il comando:

# export NOME_VARIABILE[Invio]

13.2   Personalizzare il prompt

Come si personalizza l'aspetto del prompt con la shell bash?

__________

Il prompt si personalizza assegnando formattatori particolari alla variabile PS1:

# PS1="\w\$>"[Invio]

Ecco i formattatori:

\d data;
\h nome macchina;
\n a capo;
\s nome della shell;
\t ora;
\u nome utente;
\w directory corrente;
\W il nome di base della directory corrente;
\# il numero del comando corrente;
\$ emette # se l'utente è root altrimenti $;
\! il numero nello storico del comando corrente;
\\ backslash;
\[ inizia una sequenza di caratteri non stampabili;
\] chiude la sequenza.

Quali sono le variabili di sistema più comuni?

HOME directory home;
HOSTTYPE tipo di macchina;
PS1 prompt primario;
PWD directory corrente;
UID numero identificativo utente;
$ PID della shell;
! PID dell'ultimo processo in background.

13.3   Esempi di prompt

Che prompt mi consigliate di usare? Ne avete uno utile e pratico?

__________

Metti nel tuo file /home/.profile (o /home/.bash_profile) la seguente riga: (a scopo pratico la riga degli esempi di prompt, sono state suddivise in 3; ricordate di ricomporle su una stessa riga una di seguito l'altra)

13.4   Disabilitare una console virtuale

Come posso disabilitare una console virtuale?

__________

Apri il file /etc/inittab, ci sono delle righe come queste:

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

corrispondenti alle sei console virtuali. Commenta (apponendo # all'inizio della riga) quelle che non ti interessano.

13.5   Apici inversi nella shell

Gli apici retroversi (`), a cosa servono esattamente?

__________

Esattamente la shell effettua un'espansione, eseguendo il comando all'interno degli apici inversi e catturandone lo standard output. Quest'ultimo verrà poi opportunamente sostituito.

Lo stesso risultato si può ottenere utilizzando le due forme:

`nome_comando` e $(nome_comando)

Alcuni esempi:

# ls -l `which man`[Invio]

espansione: il comando which man ha come standard output /usr/bin/man, la shell eseguirà quindi ls -l /usr/bin/man

# BLA= `cat /etc/inetd.conf`[Invio]

# echo $BLA[Invio]

nella variabile BLA viene registrato tutto l'output del comando cat /etc/inetd.conf, infatti con echo $BLA possiamo rivedere tutto il contenuto del file.

# kill -1 `pidof inetd`[Invio]

il comando pidof inetd restituisce in standard output l'attuale pid di inetd, quindi la shell eseguirà kill -1 63, per esempio.

13.6   History, lo storico dei comandi

Come si utilizza lo storico dei comandi?

__________

si da il comando:

# history[Invio]

e viene visualizzata una lista di comandi eseguiti con il numero corrispondente. Per eseguire uno di questi comandi si utilizza il punto esclamativo (!)davanti al numero del comando da rieseguire:

# !267[Invio]

Per richiamare dallo storico tutti i comandi che iniziano con una stringa si utilizza:

# !stringa[Invio]

13.7   Reindirizzare i messaggi di /dev/console su un'altra console

Da quando ho installato Linux la prima console virtuale (quella che si attiva premendo Alt+F1) si riempie di messaggi che finiscono su /dev/console, lasciando comunque la possibilità di fare login.

Come posso mandare questi messaggi su un'altra console virtuale?

__________

Basta aggiungere nel file /etc/lilo.conf la riga:

append="console=tty6"

nella sezione image.

Esempio:

           image=/boot/vmlinuz-2.0.36-1
           label=linux
           root=/dev/hda2
           append="console=tty6"
           read-only

Poi devi dare il comando:

# /sbin/lilo[Invio]

per rendere effettive le modifiche.

13.8   Modalità grafica della console

Come si fa a cambiare la modalità grafica della console? (adesso ho 80x25 ma vorrei aumentare il numero delle righe)

__________

se usi LILO come gestore degli avvii, puoi usare la direttiva 'vga' con vga=extended e avrai 80x50

(altri valori sono 'normal','ask','number')

Altrimenti puoi usare vidmode (rdev) per impostare la modalità video.

Quella predefinita è impostata attraverso la variabile SVGA_MODE nel Makefile del kernel.

13.9   Messaggio di errore: shell-init: could not get current directory: getcwd: cannot access parent directories

Quando da utente root provo a passare ad un utente con il comando 'su utente', mi viene restituito il seguente messaggio:

# su pinco[Invio]

shell-init: could not get current directory: getcwd: cannot access parent directories

__________

Se esegui:

$ su - nome_utente[Invio]

carichi anche l'ambiente dell'utente.

13.10   Tabella caratteri inesatta (bordi dei riquadri con caratteri strani)

Dalla console, se lancio l'utilità setup i riquadri di contorno delle finestre appaiono con a accentate e altri caratteri non congrui.

__________

Prova a scrivere, sempre da console:

# export TERM=vt100[Invio]

Capitolo 14.   File di log

14.1   Visualizzazione dei log degli accessi

Come visualizzo i file di log degli accessi al sistema?

__________

Con:

# last[Invio]

e se voglio solo gli ultimi n elementi posso usare:

# last -m[Invio]

14.2   Registrazione degli eventi del sistema

Chi si occupa in Linux della gestione degli eventi del sistema?

__________

È il demone syslogd configurato dal file /etc/syslogd.conf che gestisce la registrazione degli eventi importanti. Questi saranno registrati nei file indicati in /etc/syslog.conf.

14.3   Controllo dei file di log

Avrei bisogno di controllare i file di log. Come si fa?

__________

Principalmente il meccanismo usato dalla gran parte dei sistemi Unix per registrare le attività del sistema è syslog, anche se alcune macchine Unix hanno dei demoni appositi per fare 'auditing' che creano file di log binari consultabili con appositi programmi proprietari.

Linux, almeno nelle distribuzioni più comuni, usa solo syslog. In genere syslog (ma anche questo dipende dalla distribuzione e può essere cambiato dall'utente) registra tutto nella directory /var/log, nel file messages.

Red Hat ad esempio registra il comportamento dei demoni in daemon.log sempre in /var/log, e ha anche altri file di log oltre al consueto messages.

Morale della favola, tutto dipende dalla distribuzione Linux che si usa, ma un:

# tail -f /var/log/messages[Invio]

dovrebbe mostrare le ultime righe del file, ed anche quelle che man mano vanno aggiungendosi.

Chiaramente un:

# more /var/log/messages[Invio]

permetterà la consultazione di tutto il file di log.

Per fare ricerche sul file di log si può usare qualcosa del genere:

# cat messages | grep pattern_che_si_vuole_trovare[Invio]

Esistono comunque vari programmi di utilità che permettono di effettuare resoconti sui log e altre amenità; ti consiglio di cercare su <www.Freshmeat.net>.

Per la pulizia del file di log, alcune distribuzioni hanno in automatico la funzione di 'rotatelog', ovvero rinominare e comprimere il file di log dopo un determinato numero di giorni (chiaramente definibile dall'utente).

La cosa si integra anch'essa con uno dei soliti programmi di utilità reperibili in rete.

14.4   Script per ridurre file di log

Mi sapete dire se esiste un analizzatore di file di log tale che possa cancellare tutti i messaggi di log più vecchi di una certa data? Eventualmente come si realizza uno script che lo faccia?

Ecco il comando:

# find /var/log -name 'file*' -ctime numero -exec rm {}\;[Invio]

14.5   Log via email

Vorrei sapere se c'è la possibilità di ricevere i log di sistema via email. Vorrei che ad intervalli regolari di tempo il sistema dovrebbe prendere i log generati dai vari programmi: ftp, http, samba, ecc. e dovrebbe spedirmeli alla mia casella di posta personale.

Lo puoi fare con mpack. Comprimi il file:

tar zcvf log_A_.tar.gz /var/log/filedilog[Invio]

impacchetta e spedisci:

mpack -s subject -d file_con_descrizione archivio_tar destinatario[Invio]

14.6   Ridimensionare /var/log/wtmp

Ho notato che il file /var/log/wtmp (che tiene conto delle informazioni sugli accessi dei vari utenti) aumenta drasticamente le sue dimensioni nel corso del tempo. Dato il suo formato particolare (non di testo), esiste un'applicazione per ridimensionarlo?

__________

No, ma puoi fare così:

# cp wtmp wtmp.old[Invio]

# cat /dev/null > wtmp[Invio]

14.7   Reindirizzamento dello standard error

Per reindirizzare lo standard error su un file (che quindi conterrà gli eventuali errori) digitare:

# patch < patchfile 2> errori[Invio]

14.8   Visualizzare i messaggi dell'avvio del sistema

Come posso visualizzare con calma tutti i messaggi che il sistema fornisce all'avvio? dmesg|less si limita solo ad una porzione di essi.

__________

dmesg ti da solo i messaggi d'avvio del kernel. Per avere tutti i messaggi del sistema da quando è nato guarda in:

# /var/log/syslog[Invio]

per i messaggi del sistema e in:

# /var/log/kern.log[Invio]

per i log del kernel. Infatti quest'ultimo, insieme a:

# dmesg[Invio]

rappresentano i messaggi dell'avvio che stai cercando.

Capitolo 15.   Cron e at

15.1   Verificare se cron è attivo

Come faccio a sapere se cron è attivo?

Dobbiamo assicurarci che sia attivo il suo demone (crond) con il comando:

# ps ax|grep cron[Invio]

15.2   Attivare cron

Se cron non è attivo, come lo possiamo attivare?

__________

con il comando:

# /etc/init.d/crond start[Invio]

o:

# /etc/rc.d/init.d/crond start[Invio]

a seconda delle distribuzioni

15.3   Quali sono i file di configurazione del cron?

__________

Sono i file crontab che si trovano in /var/spool/cron ed il file /etc/crontab.

15.4   Modificare i crontab

Come si modificano i file crontab?

__________

con il comando:

# crontab -e[Invio]

15.5   Struttura dei file crontab

Come sono strutturati i file crontab?

__________

Con la struttura:

data comando

e più precisamente:

min. ore gg.mese mesi gg.settim. comando

30 10 * * * pppd          (eseguirà ogni giorno alle 10.30 la connessione ad Internet);
* 10 * * 1-5 pppd         (eseguirà alle 10 la connessione ad Internet ma solo dal lunedì al venerdì);
10 18 * 1-5,11-12 1 pppd  (eseguirà la connessione ad Internet alle 18.10
                          di tutti i lunedì da gennaio a maggio e da novembre e dicembre);
*/15 * * * * pppd         (esegue la connessione ad Internet ogni 10 minuti);
* */15 * * * pppd         (esegue la connessione ad Internet ogni 15 ore).

15.6   Visualizzare i file crontab

Come visualizzo il file crontab?

__________

# crontab -l[Invio]

15.7   Cancellare i file crontab

Come cancello il file crontab?

__________

# crontab -r[Invio]

15.8   Come modifico il file crontab dell'utente tizio?

__________

# crontab -u tizio[Invio]

15.9   Cron, ma se il computer era spento?

È possibile fare in modo che gli script vengano eseguiti anche se è passato l'orario indicato nelle crontab? Oppure l'unica soluzione è avviare a mano gli script?

__________

A questo ci dovrebbe pensare anacron che è appunto pensato per quelle macchine che non restano accese 24 ore al giorno.

Anacron lavora utilizzando il file /etc/anacrontab e lancia gli script contenuti in /etc/cron.[daily/weekly/monthly].

15.10   Comando at e applicazioni X

É possibile usare il comando at con programmi che girano sotto il server X? Ho provato indicando semplicemente il nome del programma ma mi ha restituito questo errore:

 «mozilla: cannot connect to X server»

Ecco i comandi che devi invocare:

DISPLAY=:0; export DISPLAY[Invio]

xhost +local:[Invio]

mozilla[Invio]

xhost -local: [Invio]

Capitolo 16.   Processi ed utilizzo delle risorse del sistema

16.1   Improvviso aumento dell'attività del disco rigido e rallentamento del sistema

Ultimamente ho avuto un problema: stavo comodamente girando per il web quando ad un tratto il disco rigido ha cominciato a rumoreggiare incessantemente. Il sistema era talmente lento che ho dovuto riavviare. Cosa succede?

__________

È il demone cron, bastava aspettare del tempo. Tra i comandi più lunghi che cron esegue ti cito solo updatedb e e2fsck. Capisci quindi perché il sistema rallenta così tanto. Per modificare i comandi di cron è sufficiente modificare /etc/crontab (man crontab per la sintassi). Non è indicato disattivare cron del tutto, perché esso attiva delle procedure necessarie per il buon funzionamento del sistema (come ad esempio la rotazione dei file di log).

16.2   Stato della macchina

Come faccio a vedere sulla mia macchina come sono messe le risorse? Vale a dire memoria libera e utilizzo del processore? Solo da console non da X.

__________

top, free (memoria) , tload (media di carico)

/proc/meminfo

/proc/loadavg

/proc/swaps

16.3   Risorse macchina

Come faccio a vedere sulla mia macchina come sono messe le risorse in termini di memoria libera e utilizzo cpu?

__________

Con il comando:

$ vmstat[Invio]

16.4   Quanta memoria e quante risorse sta usando un processo?

Come faccio a sapere quanta memoria occupa un processo?

__________

Con top si può vedere quali e quante sono le risorse occupate da un processo (memoria, processore, ...).

16.5   Fork

Cos'è fork? Ha a che fare con i processi?

__________

È la duplicazione di un processo e ciò esita con la creazione di un figlio. Tale figlio in genere ha le stesse proprietà del padre. Un processo così può rispondere contemporaneamente a più richieste di servizi, oppure può portare avanti in parallelo diversi compiti.

16.6   Visualizzazione programmi in esecuzione e loro arresto

Come faccio a sapere quali programmi sono in esecuzione ed eventualmente come faccio a terminarne l'esecuzione di alcuni?

__________

Per visualizzare:

# ps[Invio]

Per uccidere (concludere):

# kill NUMERO[Invio]

(dove numero è il numero del processo che si vuole concludere, identificabile con ps).

16.7   PID dei processi

Come posso sapere il PID di un processo per metterlo in uno script?

__________

Con ps vengono elencati tutti i processi con i loro PID. Per alcuni processi dentro /var/run esistono i file processo.pid che contengono il numero del PID e, a volte, la riga di comando con cui il processo è stato attivato; ad esempio il file sendmail.pid può risultare:

174
/usr/sbin/sendmail -bd -q10m

Per cui nella programmazione di script shell li posso utilizzare per arrestare un processo.

Ad esempio se volessi interrompere il processo 'Apache' potremmo creare uno script che contiene:

#!/bin/csh
#mette il pid di apache in una variabile
set MYVAR = `more /var/run/httpd.pid`
echo "Il PID di Apache è : $MYVAR"
echo "Sto per eseguire il comando: kill -9 $MYVAR"
# Uccide il demone
kill -9 $MYVAR

ora la spiegazione:

Per la shell bash:

#!/bin/sh
#mette il pid di apache in una variabile
MYVAR = `more /var/run/httpd.pid`
echo "Il PID di Apache è : $MYVAR"
echo "Sto per eseguire il comando: kill -9 $MYVAR"
# Uccide il demone
kill -9 $MYVAR

16.8   Sapere il pid di quale processo tiene occupato un dispositivo

Come si fa a sapere il pid del processo che tiene occupato un dispositivo?

__________

# fuser -m /dev/???[Invio]

se risulta essere bash o chi per lei, allora il dispositivo è occupato perché si è nella directory montata o in una delle sue sottodirectory.

16.9   Terminare un'applicazione bloccata

Come si fa a terminare un applicazione bloccata?

__________

Dobbiamo ucciderne il processo:

# kill -9 pid[Invio]

(pid è il Process ID del processo bloccato, ottenibile con ps)

Capitolo 17.   Risoluzione di problemi di una certa entità

17.1   Storia di un recupero della tavola delle partizioni

Riporto qui di seguito non una vera e propria FAQ ma un racconto di un'impresa sufficientemente eroica che ha portato l'amico Manfredo Marsili a recuperare i propri dati su un disco la cui tavola delle partizioni si era corrotta.

«La situazione del mio disco rigido, prima del disastro era questa:

  Partizione primaria                   7MB     Boot Manager di OS/2
  Partizione primaria           C:\     203MB   Dos 6.20 (boot)
  Partizione primaria
    (non formattata e nascosta)         3004MB 
  Partizione Estesa             D:\     1004MB  Dos 6.20 (dati)
  Partizione Estesa             E:\     603MB   OS/2 (boot)
  Partizione Estesa             F:\     3231MB  OS/2 (dati)

Le partizioni OS/2 erano quelle con i dati più preziosi.

Dopo il disastro il disco era completamente inaccessibile. I vari fdisk del DOS, di Linux e di OS2 mi riportavano dati completamente incoerenti oppure non vedevano neanche più il disco rigido. Fortunatamente potevo avviare Linux da un dischetto e con il comando

less -f /dev/hda[Invio]

riuscivo a leggerne il contenuto. Apparentemente le mie due partizioni OS/2 erano intatte ma ovviamente non riuscivo nemmeno a montarle. Almeno ero certo di non aver sovrascritto parti del disco perciò quasi certamente era danneggiata soltanto la tabella delle partizioni.

Il fatto è che avevo un'idea piuttosto vaga di cosa fosse una tavola delle partizioni, men che mai sapevo dove mettere le mani per ricostruirla.

Una ricerca veloce mi ha permesso di raccogliere un po' di documentazione che ho studiato avidamente prima di mettermi all'opera: <http://www.win.tue.nl/~aeb/linux/partitions/> La tabella delle partizioni si trova nel Master Boot Record, il settore di avvio di 512 byte, che è a sua volta il primo settore del disco rigido. I primi 445 byte contengono il codice eseguibile dell'MBR, quello per intenderci che viene ripristinato con:

fdisk /mbr[Invio]

A partire dall'indirizzo 0x1be=446, ci sono quattro gruppi di sedici byte ciascuno che identificano le partizioni. Infine, il byte di chiusura del settore deve essere sempre «55 AA». Quattro gruppi di sedici byte significa che c'è posto solo per quattro partizioni. Infatti un disco rigido non può avere più di quattro partizioni primarie tutte insieme. Tralasciamo per un momento il problema delle partizioni estese. Vediamo prima il significato dei sedici byte che identificano una partizione:

 stato HD sec/cyl  Tipo  Head sec/cyl settore boot num. settori
 ===== == =======  ====  ==== ======= ============ ============
 80   01 01  00    0A   FE    3F 00   3F 00 00 00  82 3E 00 00

i valori sono espressi in numeri esadecimali.

 80:             indica che la partizione è attiva  (inattiva = 00);
 01:             indica il numero della testina (Head) da cui inizia la
                 partizione. (valori possibili: 0-255);
 01 00:          indicano il settore e il cilindro (Sector-Cylinder) di inizio
                 della partizione. Valori possibili: Settore=0/1024 
                 Cilindro=1/63;
 0A:             indica il tipo di partizione (Fat16 - HPFS - Linux, ecc.);
 FE 3F 00:       segnalano rispettivamente la testina, settore e cilindro di
                 fine partizione;
 3F 00 00 00:    l'indirizzo del settore di boot della partizione;
 82 3E 00 00:    il numero di settori in uso alla partizione.

La procedura consiste nel trovare in qualche modo questi dati, a mano o servendosi di qualche utility adatta allo scopo e riscriverli poi nel MBR. Ho provato a cercare tutti i marcatori «55 AA» che segnalano l'inizio della partizione. Ho scoperto che sul mio HD ce ne erano una sessantina. Allora pazientemente ho selezionato indirizzo dopo indirizzo ed esaminato i settori per capire se potevano essere l'inizio delle partizioni che cercavo. Fortunatamente ricordavo, con buona approssimazione la dimensione di quelle che avevo perso e quindi ho potuto ritrovarle con relativa facilità.

Ogni volta che ne trovavo una, mi segnavo i valori di CHS (Cylinder/Head/Sector) e il numero del settore. Queste informazioni sono necessarie per ricostruire i 16 byte che identificano la partizione. Il problema da affrontare a questo punto era quello di mettere nella giusta sequenza i 16 byte. I valori di CHS (Cilinder/Head/Sector) sono espressi in formato compresso.

Durante una delle mie esplorazioni su Internet mi sono imbattuto in una utility, gpart. Qui trovate l'ultima versione: <http://www.stud.uni-hannover.de/user/76201/gpart> Come altri programmi che ho trovato, ma che non mi hanno convinto troppo, gpart, permette di recuperare le partizioni perse di un disco rigido.

Da Linux, ho eseguito:

gpart -vfn s -l /home/manfred/gpart.log /dev/hda[Invio]

dopo quasi un'ora di elaborazione avevo come risultato un file di log con tutto il necessario per la ricostruzione delle mie partizioni.

Questo è uno stralcio dell'output di gpart:

dev(/dev/hda) mss(512) chs(1027/255/63)(LBA) #s(16498755) size(8056mb)

   [...]
   
   Primary partition(3)
      type: 010(0x0A)(OS/2 Boot Manager or OPUS) (BOOT)
      size: 7mb #s(16002) s(63-16064)
      chs:  (0/1/1)-(0/254/63)d (0/1/1)-(0/254/63)r
      hex:  80 01 01 00 0A FE 3F 00 3F 00 00 00 82 3E 00 00
   
      Possible partition(OS/2 HPFS), size(603mb), offset(4220mb)
         type: 000(0x00)(unused)
         size: 603mb #s(1236940) s(8643033-9879972)
         chs:  (538/1/1)-(614/254/61)d (538/1/1)-(614/254/61)r
         hex:  00 01 81 1A 00 FE BD 66 D9 E1 83 00 CC DF 12 00

   Possible extended partition at offset(4824mb)
      Possible partition(OS/2 HPFS), size(3231mb), offset(4824mb)
         type: 000(0x00)(unused)
         size: 3231mb #s(6618716) s(9880038-16498753)
         chs:  (615/1/1)-(1023/254/63)d (615/1/1)-(1026/254/62)r
         hex:  00 01 81 67 00 FE FF FF E6 C1 96 00 5C FE 64 00

   End scan.

Quello riportato qui sopra è la parte del file di log che mi interessava al fine del recupero delle mie due partizioni OS/2. Inoltre ho avuto un riscontro sui dati che avevo visualizzato. Leggete il manuale di gpart ed esaminate attentamente il vostro MBR con un editor di disco per capire bene il significato di questi dati. gpart è anche dotato di un comando che permette di scrivere direttamente la tabella sul primo settore del disco, ma ho preferito fare da solo. Per Linux non fa alcuna differenza di che tipo siano le partizioni che andiamo a montare, primarie o estese, l'importante è che si trovino dove lui si aspetta di trovarle. Quindi con un editor inserisco i miei tre gruppi di sedici codici esadecimali a partire dall'indirizzo 446 (1be) dal cilindro 0, testina 0, settore 1 (CHS 0,0,1). Al successivo avvio, il gestore di avvio riappare come per magia e posso avviare Linux direttamente. Con dmesg verifico quali sono le unità che identificano le mie due partizioni OS/2 (hda2 e hda3), una rapida modifica a /etc/fstab e un montaggio dei filesystem mi conferma finalmente che le mie due partizioni esistono ancora e sono integre.

Capitolo 18.   Caratteri speciali

18.1   Come fare le parentesi graffe

Esistono delle combinazioni di tasti per le parantesi graffe visto che sulla tastiera italiana sono assenti?

__________

Da console testuale:

[AltGr-8]

e

[AltGr-9]

in applicazioni X:

[AltGr-7]

e

[Alt-Gr-0]

18.2   Come fare la tilde

Non riesco a fare la tilde sotto Linux, con i codici che uso in Windows, non funziona ([alt+126]), come si fa?

__________

nella console testuale:

[AltGr+0]

nelle applicazioni X:

[alt_gr ed ì]

(a sinistra del backspace)

18.3   Ancora sui caratteri speciali

Dove sono dichiarate le modalità per generare i caratteri speciali? (caratteri non presenti sulla tastiera)

__________

In XF86Config sono impostati i seguenti valori:

  Section "Keyboard"
    LeftAlt             Meta
    RightAlt            ModeShift 
    ScrollLock          Compose
    RightCtl            Control

e in X avrai con:

[AltGr ì]

la ~

[AltGr 7]

la {

[AltGr 0]

la }

[AltGr 8]

la [

[AltGr 9]

la ]

È anche possibile ridefinire parzialmente o totalmente i tasti in X usando il comando xmodmap (man xmodmap) e nella console testuale con loadkeys (man loadkeys).

Capitolo 19.   Documentazione di aiuto

19.1   Ricerca di parole chiave nelle pagine man

Come posso cercare tutte le pagine man che contengono una determinata parola chiave?

__________

Per cercare tutte le voci di manuale che hanno a che fare con una data parola chiave, usa:

# man -k parola_chiave[Invio]

Ad esempio se vuoi vedere un elenco di comandi e pagine man relative al boot puoi usare:

# man -k boot[Invio]

Puoi anche usare il comando apropos, che fa esattamente la stessa cosa.

Se non trovi alcuna informazione, può darsi che non sia stato creato il database contenente le informazioni. In tal caso devi prima eseguire il comando:

# makewhatis[Invio]

da root.

19.2   Stampare le pagine man

Come si stampano le pagine man?

__________

# man -t which >ps.ps[Invio]

# lpr ps.ps[Invio]

(Così stampi il man di which. Ovviamente puoi sostituire which con qualsiasi man che desideri stampare).

19.3   Convertire le pagine man in postscript

Qualcuno sa come convertire le pagine man in postscript?

__________

Con il comando:

# man -t comando > file.ps[Invio]

Parte ii.   Reti e rete Internet

Capitolo 20.   Generalità e configurazione di una rete locale

20.1   Aggiungere un host virtuale con lo stesso IP

devo aggiungere un host virtuale al server apache della mia rete locale (dominio principale www.master.com, dominio virtuale www.service.com) utilizzando lo stesso indirizzo IP.

__________

Brevemente:

Assumo che tu stia usando apache 1.3.x e che l'unico file di configurazione sia httpd.conf

In httpd.conf aggiungi:

NameVirtualHost <IP dell'host su cui hai installato il server web apache> </p>

quindi aggiungi la direttiva Virtual Host:

   ServerAdmin webmaster@tua.macchina.it
   DocumentRoot /usr/local/httpd/virtual/service/htdocs 
# Ovviamente DocumentRoot sarà il percorso effettivamente presente sul
# tuo sistema, ho fatto solo un esempio
   ServerName www.service.com     
   Aggiungici tutte le direttive che vuoi.

Affinché tutto funzioni ci deve però essere un DNS che dica alle macchine client che a www.service.com risponde l'host con IP IP_dell'host_su_cui_hai_installato_il_server_web_apache.

20.2   Domini virtuali, come impostarli

Voglio creare dei domini virtuali, in modo da poter creare sullo stesso server più siti e vorrei poter raggiungere questi digitando indirizzi come mattia, web, software, informazioni, studio, ecc. e non digitando l'indirizzo IP.

__________

Nel tuo caso sarebbe fatica sprecata configurare un name server con bind, mentre ti sarebbe sufficiente affidarti al file /etc/hosts per l'impostazione di alcuni alias.

Aggiungerai per esempio al tuo /etc/hosts:

192.168.1.1     mattia
192.168.1.1     web
192.168.1.1     informazioni

Se hai una versione recente di Apache, l'unico file di configurazione da modificare sarà httpd.conf, in fondo al quale potrai inserire le direttive per i domini virtuali.

Ecco un esempio che modificherai con i tuoi dati corretti:

NameVirtualHost 192.168.1.1

<VirtualHost 192.168.1.1>
    ServerAdmin root@localhost
    DocumentRoot /dir_che_contiene/i_files_da_servire
    ServerName mattia
    ErrorLog log/mattia-error_log
    CustomLog log/mattia-access_log common
</VirtualHost>

<VirtualHost 192.168.1.1>
    ServerAdmin root@localhost
    DocumentRoot /dir_che_contiene/i_files_da_servire
    ServerName web
    ErrorLog log/web-error_log
    CustomLog log/web-access_log common
</VirtualHost>

e così via...

A questo punto, dal navigatore ti sarà sufficiente caricare l'indirizzo http://mattia, oppure http://web per visualizzare le pagine corrispondenti.

20.3   Disabilitare servizi e porte

Non vorrei avere dei servizi inutilmente attivi e fonte di possibili attacchi. Come posso eliminare questi servizi o addirittura come posso disabilitare le porte della mia macchina?

Nel file /etc/inetd.conf commenta con un «#» tutti i servizi che non ti servono e poi dai:

killall -HUP inetd[Invio]

In /etc/init.d o in /etc/rc.d/init.d (attenzione: il percorso cambia a seconda della distribuzione) controlla quali sono i demoni che non ti occorrono. Cancella a questo punto i collegamenti simbolici a questi demoni presenti nella directory /etc/rcn.d/ dove n corrisponde al numero del tuo tuo runlevel predefinito.

20.4   Controllare banda e traffico

Cercavo uno strumento per console testuale in grado di visualizzarmi la banda e il traffico. Mi servirebbe che fosse in grado di calcolare il traffico sui vari servizi, tipo pop3 e smtp.

__________

Potresti utilizzare ipchains come 'contabilizzazione del traffico'. Nell'HOWTO di ipchains c'e' tutto spiegato ma se hai già familiarità ecco lo script che uso sulle mie macchine:

#!/bin/sh
# Flusho i rules
ipchains -F
# Cancello i vari chain
ipchains -X HTTP
ipchains -X IMAP
ipchains -X POP3
ipchains -X SMTP-OUT
ipchains -X SMTP-IN
#creo i vari chain
ipchains -N HTTP
ipchains -N IMAP
ipchains -N POP3
ipchains -N SMTP-OUT
ipchains -N SMTP-IN
#ridirigo il traffico verso i chain creati
ipchains -I output -j HTTP --source-port 80 -p tcp
ipchains -I output -j IMAP --source-port 143 -p tcp
ipchains -I output -j POP3 --source-port 110 -p tcp
ipchains -I output -j SMTP-OUT --source-port 25 -p tcp
ipchains -I input -j SMTP-IN --destination-port 25 -p tcp

e ora con un

# ipchains -L -n -v[Invio]

ti verrà visualizzato il traffico giorno per giorno.

Ti ricordo che per utilizzare ipchains devi avere il kernel 2.2.X configurato con:

CONFIG_FIREWALL=y
CONFIG_IP_FIREWALL=y

Altrimenti se proprio non puoi utilizzare ipchains per la contabilizzazione del traffico, potresti fare uno script che prima di ruotare i file di log ti controlla la dimensione di ogni messaggio inviato o prelevato e li somma.

20.5   Impossibilità di attivare costantemente il loopback all'avvio

Il problema è che per accedere in ftp al mio sistema facendo:

# ftp 127.0.0.1[Invio]

devo sempre dare prima il comando:

# ifup lo[Invio]

Ho provato con netcfg a dirgli di farlo partire all'avvio ma sembra che non mi voglia dare retta. Adesso netcfg dice che l'interfaccia viene attivata ad ogni avvio ma non è così... e l'ifconfig conferma.

__________

guarda cosa hai in /etc/sysconfig/network-scripts; dovresti avere un file chiamato ifcfg-lo aprilo e controlla che l'opzione ONBOOT sia =yes (se non è così, inseriscila).

20.6   Firewall e Masquerade in Red Hat 6.0

Per impostare firewall e masquerade in Suse si usava Yast e in 60 secondi tutto fatto. Come si fa con Red Hat 6.0? non ho trovato niente in Linuxconf.

Per quanto riguarda il firewall devi installare ipchains.rpm (con il comando rpm -i ipchains.rpm) poi riavvii ed avrai il tuo firewall configurato con, come politica predefinita, quella di far passare tutto. A questo punto ti devi studiare tutte le funzionalità di ipchains. Per quanto riguarda il masquerading ipchains fa tutto. Devi ricordarti di abilitare nel kernel tutte le opzioni necessarie.

20.7   Firewall & Masquerade in Debian GNU/Linux

Come imposto le funzioni di masquerade in Debian GNU/Linux?

__________

Dopo aver ricompilato il kernel con le opzioni adeguate, puoi usare il pacchetto ipmasq, che configura automaticamente ipfwadm o ipchains (a seconda del kernel usato) per il masquerading. È possibile anche aggiungere delle regole a quelle usate da ipmasq, inserendole nella directory /etc/ipmasq/rules con estensione .rul. Ipmasq è un ottimo strumento per chi non ha voglia di studiarsi ipchains e ipfwadm e vuole avere il masquerading configurato in un secondo.

20.8   Masquerading

Ho due macchine collegate in rete, il server (192.168.0.1) e un client (192.168.0.2). Come posso abilitare il masquerading?

Per prima cosa ricompila il kernel dei sistemi seguendo le seguenti indicazioni (versione del kernel 2.2.xx o superiori):

 Network Firewalls              Y
 IP: firewalling                Y
 IP: always defragment          Y
 IP: transparent proxy supp     Y
 IP: Masquerading               Y
 IP: ICMP masquerading          Y

Sul computer connesso alla rete dovrai lanciare questo script provvedendo ad automatizzare il tutto.

 ---------------------------------------------
 #/bin/sh
 echo "1" > /proc/sys/net/ipv4/ip_forward
 ipchains -M -S 7200 10 160
 ipchains -P forward DENY
 ipchains -A forward -s 192.168.0.0/24 -j MASQ
 ---------------------------------------------

20.9   Come impostare un firewall

Come si impostano i firewall?

__________

Per impostare un firewall basta seguire i seguenti passaggi:

  1. avere la scheda n.1 (supponiamo eth0) sulla rete interna (a.b.c.0)

  2. avere la scheda n.2 (supponiamo eth1) sulla rete esterna (A.B.C.0)

  3. eseguire l'instradamento come segue:

       route add -net a.b.c.0 ... dev eth0
       route add -net A.B.C.0 ... dev eth1

    (se abbiamo il kernel 2.2.x, questo succede già all'ifconfig)

  4. ovviamente il firewall deve usare il router come gateway:

    # route add default gw ip_del_tuo_gateway dev eth1[Invio]

  5. (opzionale) se sei sotto 2.2.x abiliti il forward dei pacchetti:

    # echo 1 >/proc/sys/net/ipv4/ip_forward[Invio]

    Utilizzando il kernel 2.2.13, l'opzione Always Defrag che era una #define attivabile e disattivabile in fase di compilazione, è divenuta una syscall. Dato che questa opzione è molto importante, e è disabilitata in maniera predefinita, vi consiglio di aggiungere un:

    # echo 1 > /proc/sys/net/ipv4/ip_always_defrag[Invio]

    Ricordo che questa opzione si preoccupa di riassemblare i datagrammi IP entranti prima che questi siano elaborati dal firewall o reindirizzati o altro ancora.

    Stesso discorso vale per i SYN cookies (ma ormai da un po' di tempo).

    Se per qualche ragione non vi avvalete del file system /proc, l'unico altro modo per attivare l'ALWAYS DEFRAG è quello di utilizzare la chiamata di sistema sysctl(2).

  6. Infine lo convinci ad inoltrare solo i pacchetti che vuoi con ipfwadm (2.0.x) o ipchains (2.2.x)

Ovviamente seguendo questa procedura e saltando il punto (6) non hai un firewall, perché *tutti* i pacchetti passano... ma mettere sù un firewall sicuro non è cosa da tutti i giorni. Consiglio di sperimentare e ancora sperimentare, magari con un sistema finto e non quello dell'isp.

Capitolo 21.   FTP

21.1   Solo ftp per un utente e non il telnet

È possibile conferire ad un utente il potere di avere soltanto l'account ftp e non il telnet ?

__________

sì, dai il comando:

# usermod -s /bin/false/ nomeutente[Invio]

e l'utente non potrà più fare il login.

Alternativamente, quando crei l'utente, fallo impostandogli come shell /bin/false.

21.2   Disabilitare il servizio ftp per alcuni utenti

Come faccio a vietare ad alcuni utenti il servizio ftp?

__________

Dai un'occhiata al file /etc/ftpusers: in esso sono elencati gli utenti che non possono accedere al servizio ftp.

21.3   Lanciare un ftp per poi staccarsi

Se lancio da telnet un ftp per scaricare molti file da server a server e faccio [Ctrl+Z] mi si ferma normalmente l'operazione; ma alcuni siti ftp mi danno dei problemi quando cerco di portare in background il processo mediante il comando bg.

__________

Prova così:

# nohup nome_programma &[Invio]

Vedi man nohup per ulteriori informazioni.

21.4   Blocco in FTP

Ho impostato il servizio FTP sulla mia macchina. Ho provato ad accedere da remoto e non ci sono problemi. Quando però provo a fare:

ls[Invio]

si ferma tutto. Come mai?

O hai in qualche modo posto dietro firewall la porta 20 (ftp-data) in uscita oppure il «remoto» da cui ti sei collegato aveva un firewall sulla stessa porta in entrata. In entrambi i casi funziona comunque l'FTP passivo: digitare «passive» al prompt del client FTP.

21.5   Lanciare ftp in background

Avendo un account su una macchina Linux collegata in rete mi chiedevo se fosse possibile avviare su di essa una sessione ftp in background e magari disconnettersi per riconnettersi a trasferimento completato.

__________

Una volta collegato al sito, e lanciato il comando get per scaricare il file, ed una volta che l'operazione di scaricamento è partito, puoi interrompere il processo con [Control-Z] e mandarlo in secondo piano col comando bg, e sconnetterti. Comunque tieni a mente che se il sito da cui vuoi scaricare è lento, ed il downloading va in stallo per troppo tempo il programma ftp si scollegherà. In questi casi ti conviene utilizzare un programma come wget che permette automaticamente di riprovare a connettersi per un certo numero di volte e di riprendere downloading interrotti. anche questo può essere mandato in background.

Usa ncftp è potentissimo può fare anche il resuming.

21.6   Automatizzare il caricamento di un file mediante protocollo FTP ad intervalli di un minuto.

Ecco uno script che può fare tutto questo:

----- cut here

#!/usr/bin/expect -f
set FTP /bin/ftp
set HOST host_della_macchina_remota
set USER nome_utente
set PASS mia_password
set COMMAND "put /path/del/file/che_voglio /path_locale/del/file"
set PROMPT ftp>

spawn $FTP $HOST
send "$USER\r"
expect Password:
send "$PASS\r"
expect $PROMPT
send "$COMMAND\r"
expect $PROMPT
send "quit\r"

--------

Definisci le variabili nella parte superiore dello script con i valori esatti, dai i permessi di esecuzione allo script e inseriscilo nel crontab dell'utente da cui verrà lanciato. Esempio:

crontab -e entropika[Invio]

ed inserisci:

 */1 * * * *   /bin/script 1> /dev/null 2> /tmp/error_download

21.7   Permesso di caricare file in ftp

Come faccio ad abilitare l'utente anonymous a caricare file nella directory pub del mio server ftp?

__________

Crea una directory col permesso di scrittura abilitato. Ricorda che il proprietario deve essere ftp.

21.8   Procedura ftp in script shell (bash)

Come posso inserire in uno script shell le seguenti procedure ftp?

  1. scaricare nella directory da cui lo script viene lanciato tutti i file contenuti in una directory remota;

  2. copiare questi file in una directory remota di un altro server.

__________

Ecco uno script che fa al tuo caso:

   #!/bin/bash

   ftp -ni www.server.com << __EOA__
   user tuoaccount TuaPassword
   cd /directory/log/incriminata/
   mget *
   bye
   __EOA__

   ftp -ni www.server2.com << __EOB__
   user tuoaccount2 TuaPassword2
   cd /directory/destinazione/
   mput *
   bye
   __EOB__

21.9   Ftp ed Ip Masquerading

FTP ed Ip Masquerading. Dopo aver configurato il server con Ip Masquerading, il tutto funziona: Web ed e-mail... ma l'ftp no, nel senso, che se da un client della mia rete voglio connetermi ad un server ftp, posso connettermi, mi da il messaggio di benvenuto, ma quando gli do il classico ls per vedere il contenuto della directory, si ferma tutto. Se invece lo stesso server ftp lo apro dal mio server, tutto bene... Si tratta penso di un filtro che l'Ip Masquerading applica (forse per motivi di sicurezza). Come faccio?

__________

devi caricare il modulo ip_masq_ftp.

Capitolo 22.   Telnet

22.1   Visualizzare cosa digita un utente collegato in telnet

Come si fa a vedere cosa sta digitando un utente collegato mediante telnet?

__________

Per vedere cosa digita in una shell bash, sapendo il numero del processo (es. 1000) puoi dare:

# $ strace -p 1000 -etrace=read[Invio]

l'output non è dei più chiari ma si capisce.

22.2   telnet su un'altra porta

Come si può fare per far sì che telnetd resti in ascolto su un'altra porta mantenendo attiva anche quella predefinita?

__________

Il servizio telnet viene predisposto attraverso la combinazione di 2 file: /etc/inetd.conf e /etc/services.

Per il telnet sulla porta 23, che è la predefinita, avrai queste impostazioni nel file inetd.conf:

telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd

e queste altre nel file services:

telnet      23/tcp

Nel file inetd.conf puoi lasciare quella che già c'è; nel services dovrai aggiungere qualcosa del tipo:

telnet  8888/tcp

in modo che telnetd accetti le chiamate sulla porta 8888.

A questo punto riavvii il demone inetd per costringerlo a rileggere i file di configurazione e potrai digitare sul client:

# telnet tuo_host 8888[Invio]

indicando al comando telnet client il nome dell'host ed il numero della porta su cui il demone è in ascolto.

22.3   Accedere ad una macchina solo da remoto

È possibile accedere al sistema esclusivamente tramite telnet? Cioè, voglio evitare che gli utenti tocchino la macchina fisica, e vi accedano esclusivamente tramite la rete.

__________

Modifica /etc/inittab e togli (commenti con #) le righe:

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

anche se almeno una la lascerei...

22.4   Telnet ad una macchina remota in qualità di root

Come si fa ad accedere come root ad una macchina remota tramite telnet?

__________

Questo è qualcosa che crea un buco di sicurezza enorme. Se si è ben coscienti di ciò che si sta facendo e dei rischi che si corrono, si deve rimuovere il file /etc/securetty. Ma se non ne hai una reale necessità, ti conviene creare un utente ed accedere al sistema con quello, ed al limite acquisire i privilegi di root con:

$ su -[Invio]

22.5   Lentezza di alcuni servizi in rete

Nella mia piccola rete casalinga (486 12 Mb RAM , PMMX 200 64Mb Ram collegati via RJ45) ho un piccolo problema di prestazioni. Quando provo a collegarmi (un po'con tutti i servizi telnet, ftp, http, ecc.) riscontro un'enorme lentezza nell'instaurarsi del collegamento stesso verso il server Linux che sebbene non particolarmente notevole in termini hardware ha però anche pochi servizi attivi. Telnet ci mette anche 30 secondi prima di mostrarmi il messaggio di login ed ftp pure. Una volta connesso però tutto procede regolarmente.

__________

Allora, inserisci nel file /etc/hosts:

IP      NOME_MACCHINA_REMOTA

dove IP è l'ip della macchina da dove tenti di collegarti con la macchina Linux. Il tempo di attesa è dovuto al fatto che Linux tenta di riuscire a capire chi sei, ma dopo 30 secondi perde le speranze e ti considera un conoscente.

22.6   Automatizzare un processo telnet (script expect)

Come si può automatizzare un processo telnet?

__________

Il seguente script apre una sessione telnet, esegue dei comandi (passati allo script come parametri) e chiude la sessione:

#!/usr/bin/expect
# 
# 7/9/99, Doni Stefano
#
# Collegamento telnet in modalità batch
#
#

# comandi di impostazione variabili
#
# $argv contiene tutti i parametri passati allo script

set cmd $argv

# send_human occorre per l'opzione -h (human) di send

set send_human {.1 3 1 .05 2}

# Inizio del processo di connessione batch.

spawn telnet localhost 23
expect "ogin: "
send "intruso\r"
expect "assword: "
send -h "kevin\r"
expect "intruso"
send -h "$cmd\r"
expect "intruso"
send -h "exit\r"

Notate la presenza dell'opzione -h di send: essa fa in modo che l'invio dei caratteri avvenga a velocità umana, secondo quanto impostato nella variabile send_human. Anzi, i migliori risultati li ho ottenuti mediante l'opzione -s (send slow): il problema riguarda il buffer di lettura di login. Per maggiori informazioni sulle opzioni di send, consultate la relativa pagina di manuale (man expect). Per chi volesse un minimo di controllo di flusso sull'esecuzione dello script, ne riporto un altro che fa uso di un ciclo while:

#!/usr/bin/expect  
#
# 26/7/99, Doni Stefano
#
# Preleva la posta via POP3
#

set num_msg 1
set n 3

spawn telnet mail.commedia.it 110 
expect "+OK" 
send "USER stefano\r"   
expect "welcome" 
send "PASS quique\r"
expect "+OK" 
send "STAT\r"
expect "+OK" 
while {$num_msg <= $n}  {
        send "RETR $num_msg\r"  
        expect "+OK"
        puts "\rScaricato messaggio numero $num_msg\r"
        set num_msg [ expr $num_msg + 1 ]
        }       
send "QUIT\r"

Fra l'altro, questo script presenta un grosso problema: esso preleva solo i primi 3 messaggi della casella di posta, in quanto non sono stato in grado di inserire in una variabile il contenuto comando STAT (del protocollo POP3) che indica infatti il numero preciso di messaggi presenti in una casella di posta elettronica.

22.7   Funzionamento della registrazione degli accessi telnet alle macchine

Se eseguo una connessione telnet alla mia macchina, essa viene registrata in /var/log/daemon.log con la riga seguente:

Oct 6 19:23:51 irish in.telnetd[221]: connect from irish

Come fa il syslogd a sapere che c'è stata una connessione telnet?

__________

In /etc/services c'è la definizione dei servizi; quindi avrai una riga con:

telnet          23/tcp

Le richieste sulla porta 23 sono quindi da considerarsi telnet. Poi, in /etc/inetd.conf avrai la definizione del server da attivare in caso di richiesta di uno specifico servizio e quindi:

telnet          stream  tcp     nowait  root    /usr/sbin/tcpd  /usr/sbin/in.telnetd

Quindi ad ogni richiesta telnet si attiva /usr/sbin/in.telnetd.

Tutto questo è gestito ovviamente da inetd.

22.8   Bloccare l'accesso via telnet

Per evitare che tutti accedano via telnet ad una macchina, come devo fare?

__________

Devi modificare i file /etc/hosts.allow e /etc/hosts.deny (ti consiglio di usarne uno solo). Lì puoi mettere quali sono gli hosts o i domini da cui accetti collegamenti telnet. Se non ne vuoi in assoluto basta che metti:

 ALL: ALL: DENY

22.9   Telnet come root

Esiste un modo per connettersi direttamente come root ad una macchina remota?

__________

Si deve rimuovere il file /etc/securetty ma è un buco di sicurezza enorme. Accedi come utente comune e poi dai:

# su -[Invio]

Altrimenti installati:

ssh (secure shell)

devi installare il demone sshd sulla macchina server e dal client basta dare:

$ ssh -l root server[Invio]

Trovi il pacchetto Debian GNU/Linux di ssh nella sezione non-US <ftp://ftp.debian.org/debian/dists/stable/non-US>, ad esempio, mentre il pacchetto Red Hat non è inserito nella distribuzione ufficiale, e lo trovi solo in <ftp://ftp.replay.com/pub/crypto/redhat/i386/>

esiste anche un client per Windows, chiamato putty: <http://www.chiark.greenend.org.uk/~sgtatham/putty.html>

Capitolo 23.   ssh

23.1   Copiare i file con ssh

Come copio tutti i file della directory in cui mi trovo in una directory che si trova su una macchina remota accessibile via ssh?

__________

Con il comando:

$ scp * tuoaccount@www.server2.com:/directory/destinazione/[Invio]

23.2   scp

Copia di intere directory con il comando scp preservando i collegamenti simbolici.

É possibile effettuare questa operazione con:

scp -r nomedir username@hostdidestinazione:nomedir2[Invio]

dove il formato di «nomedir» è /mia/dir.

Per copiare ad esempio la directory /home/utente/pippo sulla macchina fulmine1 si da:

scp -r /home/utente/pippo pino@fulmine1:/tmp/pipporemota[Invio]

dove «pino» è il nome dell'utente della macchina «fulmine1».

Capitolo 24.   La condivisione delle risorse in rete

24.1   Montare i filesystem di macchine in rete

Ho una rete con indirizzi IP statici del tipo 192.168.x.x. Riesco a fare telnet fra le macchine ma non riesco però a montare il filesystem di un macchina sull'altra. Quando provo a fare mount mi appare un messaggio di errore:

mount: RPC: Program not registerd

mountd è presente nel file /etc/rpc ma non è in esecuzione sulla macchina e non lo trovo in /sbin (così come nfsd).

__________

Assicurati che:

/sbin/rpc.portmap

/usr/sbin/rpc.mountd

/usr/sbin/rpc.nfsd

vengano avviati all'avvio del sistema, controllando nei file rc*. Altrimenti prova ad avviarli manualmente e guarda se tutto funziona. Le directory da condividere vanno configurate in /etc/exports.

Per le varie opzioni ti rimando alla pagina di manuale:

$ man 5 exports[Invio]

24.2   Come faccio ad aprire una sessione X remota su un'altra macchina?

Vorrei usare il mio sistema come terminale X di un altra macchina. Come posso fare?

__________

Se vuoi usare la tua macchina come terminale grafico di un altro pc, puoi usare una sessione broadcast (fai attenzione che tutto viene passato in chiaro, password comprese). Poniamo che linux2 sia la macchina remota da cui avviare X, e linux1 la macchina su cui lavori (il terminale).

Questo è possibile se su linux2 è attiva una sessione xdm (gdm o kdm), per cui lanciando da una console virtuale:

$ X -indirect linux2[Invio]

dovresti vedere il logo di benvenuto. Naturalmente in questo caso stai usando linux1 come terminale X.

In pratica X è nato con questo scopo. Se una macchina rende disponibile il suo X, l'altra (o le altre) possono usare quell'ambiente per lavorare.

24.3   Come faccio ad aprire una applicazione X da un'altra macchina?

Vorrei accedere dalla mia macchina Linux ad un X presente su un'altra macchina; come posso fare?

__________

Innanzitutto sulla macchina dove ti trovi devi avere già una sessione X aperta; dai il comando:

# xhost +nomeserver[Invio]

con nomeserver si intende il nome o l'ip della macchina da cui vuoi attivare le applicazioni.

Fatto ciò, dalla macchina dove ti trovi fai telnet sull'altra con:

$ telnet nome_host[Invio]

esegui il login per collegarti alla stazione remota. Ora, a seconda della shell che hai sul sistema remoto, dai il comando:

# export DISPLAY=nome_tua_macchina:0.0[Invio]

se la shell è bash

# setenv DISPLAY nome_tua_macchina:0.0[Invio]

se la shell è cshrc

che dice all'host di inviare il client sul tuo monitor.

A questo punto fai partire il client, e lo vedrai sul tuo schermo.

Ovviamente la macchina remota deve avere il modo di capire a chi corrisponde nome_tua_macchina: o c'è quindi un DNS che gli dà l'informazione, o questa va messa in /etc/hosts, così:

xxx.xxx.xxx.xxx   nome.dominio     nome

24.4   Reindirizzamento del display di un utente su quello di un altro

Entro in X come utente, apro un terminale grafico e impartisco il comando:

# su -[Invio]

come faccio a questo punto a lanciare applicazioni come utente root? Ricevo degli errori.

__________

Da utente comune dai il comando:

$ xhost localhost[Invio]

poi da utente root dai:

# export DISPLAY=localhost:0.0[Invio]

così ridirezioni il display di root sull'attuale che è quello dell'utente, come se lo stessi facendo tra due macchine diverse.

Attenzione, prima di tutto ciò si deve avere già una sessione X aperta!

24.5   Montare una partizione di una macchina Solaris in rete

Mi trovo a dover montare una porzione di filesystem di una macchina Solaris con una Linux, che però non risulta tra le macchine autorizzate poiché appena attivata. Consultando i man ho trovato i file vfstab ed alcuni altri: in particolare /etc/dfs. Come posso fare?

Il file da modificare è dfstab in /etc/dfs. Poi devi dare il comando:

# shareall[Invio]

se la macchina è Solaris 2. Per Solaris 1 invece il file è in /etc/exports e il comando è:

$ exportfs -a.[Invio]

24.6   Copiare i file tra macchine in rete

Ho collegato due macchine in rete. Vorrei riuscire ad entrare nell'altra macchina e spostare file da una parte all'altra. Come faccio?

__________

Puoi considerare l'ipotesi di utilizzare gli r-command per eseguire shell e comandi in remoto. Devi creare nella directory principale (/) delle due macchine (o nella $HOME dell'utente che usi) il file .rhosts, nel quale dovrai inserire il sistema al quale permetti l'accesso e l'utente abilitato a farlo. Se vuoi consentire l'accesso a tutti ti basta dare:

# echo "+ +" > /.rhosts[Invio]

su entrambe le macchine.

A questo punto potrai dare:

# rlogin NOME_HOST[Invio]

per accedere all'altra macchina senza richiesta di login e password, e soprattutto potrai copiare file da un sistema all'altro senza FTP:

# rcp HOST_REMOTO:/home/pippo/* .[Invio]

oppure:

# rcp * HOST_REMOTO:/PATH[Invio]

Capitolo 25.   Terminali

25.1   Terminali sulla stessa macchina

Posso simulare sul mio sistema un terminale?

__________

Si possono simulare fino a 6 console virtuali attraverso la combinazione [Alt+Fn] dove n è un numero che va da 1 a 6

25.2   486 come terminali X

Vorrei installare Linux su dei 486 con 200 Mb spazio disco allo scopo di far partire l'ambiente X e poterli usare come terminali grafici. Sapete se è possibile in così poco spazio disco e quali sono i minimi pacchetti da installare?

__________

Devi installare tutto ciò che è la base, niente per lo sviluppo, escludi praticamente tutti i pacchetti tranne quelli necessari alla rete. Così, la macchina non potrai utilizzarla per fare altro che da terminale. In pratica, entra come utente root e esegui il comando:

# X -query nome_macchina_a_cui_connettersi[Invio]

Se preferisci puoi modificare /etc/inittab in modo che appena avvii la macchina entri in runlevel 5 e ti connetti alla macchina che desideri. So che ci sono anche dei sistemi per scegliere a quale Server attaccarsi con un 'hostchooser'.

25.3   Messaggio di errore: terminal type not supported

Mi collego alle macchine della mia università in telnet ma quando lancio pine mi obietta: terminal type not supported: linux se il telnet è fatto da console, se invece è fatto da X tutto bene. Come posso aggirare il problema?

__________

La macchina remota non è un linux.

Sulla console remota dai un:

# $ setenv TERM ansi[Invio]

oppure:

# setenv TERM vt100[Invio]

se usi le shell derivate da sh usa:

# export TERM=vt100[Invio]

(o simili, dipende dalla shell che stai usando)

Capitolo 26.   Server web (Apache, ecc.)

26.1   index.html non convertito in html con apache; viene visualizzato il sorgente

Ho installato apache, ed ho inserito un file index.html in /var/www; quando però mi collego al server (http://localhost/index.html) invece del documento html, mi appare il documento come se fosse solo testo (quindi mi appaiono tutti i tag html). Come posso risolvere?

__________

Nel file /etc/mime.types devi identificare la porzione in cui è specificato 'htm' e aggiungere un'altra riga simile ma con 'html'.

26.2   Php, post e variabili

Ho una pagina html in cui c'è una casella di testo e un bottone 'Submit' e nella parte action del form ho inserito il riferimento a una pagina check.php3 la quale dovrebbe recuperare i dati immessi dall'utente ed elaborarli. Come faccio a gestire questi dati?

__________

Funziona sia con get che con post; se tu chiami nel tuo form una variabile (name=) ad esempio PIPPO, allora nella pagina che il tuo form richiama (check.php3) tale variabile (contenuto compreso) si chiamerà $PIPPO.

26.3   Apache e php in Red Hat 6.0

Possiedo un sistema Red Hat 6.0 e vorrei configurare Apache per gestire php ma non riesco a farlo. Mi potete dare una mano?

__________

  1. Guardando nella directory /etc/httpd, si trova il file php3.ini che gestisce molti aspetti del comportamento di php. Php lo cerca in determinati percorsi (compresi quelli indicati dalla variabile d'ambiente PATH). Per essere sicuri che venga sempre trovato, è necessario creare la variabile d'ambiente PHPRC (inserendola in /etc/profile oppure in ~/.profile, a seconda delle necessità) ed inizializzarla con il percorso del file php3.ini stesso.

  2. è necessario far caricare ad Apache i moduli relativi a php. I file /etc/httpd/conf/httpd.conf e /etc/httpd/conf/srm.conf contengono le linee necessarie allo scopo (di solito sono commentate: basta eliminare il carattere # di commento). In httpd.conf sono due i punti da modificare, entrambi nella sezione Dynamic Shared Object (DSO) Support. Nella parte di caricamento dei moduli, in «extra modules», vanno aggiunte (o vanno tolti i commenti se già esistono) le linee seguenti:

          LoadModule  php_module  modules/mod_php.so
          LoadModule  php3_module  modules/libphp3.so

    Nella parte di aggiunta dei moduli (dopo la riga «ClearModuleList»), sempre in «extra modules», vanno aggiunte (o vanno tolti i commenti se già esistono) le linee seguenti:

          AddModule mod_php.c
          AddModule mod_php3.c

    In srm.conf, vanno aggiunte (o vanno tolti i commenti se già esistono) le linee seguenti, che permettono di associare php ai file con estensione .php3:

          AddType application/x-httpd-php3 .php3
          AddType application/x-httpd-php3-source .phps
  3. Per rendere effettive le modifiche ad Apache senza prima riavviare il sistema, si può far ripartire il demone httpd.

          /etc/rc.d/init.d/httpd  restart

26.4   Come configurare un server web Apache in modo che utilizzi l'asp

Come si fa a configurare un server web Apache in modo che utilizzi l'asp?

__________

Installando e configurando le opportune librerie (sotto Debian GNU/Linux libapache-asp-perl e forse anche libapache-mod-perl).

26.5   Convertire da asp a php3

Come si convertono gli script asp in php?

Con asp2php:

<http://home.i1.net/~naken/asp2php/>

26.6   Pagine web con password

Per permettere l'accesso ad alcune pagine web solo a chi ha la password ho usato il comando htpasswd. L'accesso alle pagine viene giustamente negato, solo che non appare la finestra che chiede nome utente e password. Cosa devo fare?

Devi inserire le direttive in /etc/apache/access.conf (o comunque nel file access.conf presente nel tuo filesystem)

  <Directory /directory/da/proteggere>
  AuthType Basic
  AuthName Nome_della_struttura_di_appartenenza
  AuthGroupFile /file/dei/gruppi
  AuthUserFile /file/degli/utenti
  <Limit GET POST>
  require valid-user
  </Limit>
  </Directory> 

Capitolo 27.   Samba

27.1   Samba: problema password da Windows a Linux

Ho qualche problema a configurare correttamente SAMBA su Linux. Quando da Risorse di Rete di Windows interrogo la rete, vedo la macchina con Linux, ma quando provo ad accedere alla directory condivisa di questa macchina, mi viene chiesta una password. Ho provato a digitare di tutto, dalla stringa vuota alla password dell'utente root, ma nulla di tutto questo mi ha permesso di risolvere il problema. Questione analoga se da Gestione Risorse di Windows cerco di creare una nuova unità di rete: digitando come percorso la stringa '\\linux\public' e premendo 'Ok' mi viene chiesta una password (nessuna delle password mi permette di accedere alle risorse). Ho già inserito nel registry di Windows la chiave per forzare le password in testo puro, ma sembra non aver sortito effetto alcuno.

__________

Dovresti risolvere così:

null passwords = yes 

nella sezione global di smb.conf.

Inserisci poi gli utenti Windows in samba e/o Linux con:

# smbpasswd[Invio]

27.2   smb.conf

Potreste inviarmi un smb.conf funzionante? Sto avendo dei problemi e mi potrebbe chiarire molti dubbi.

__________

Ho modificato come segue il file smb.conf che si trova in /etc/ e mi funziona. Come vedi ho condiviso le directory /home/utente, /tmp e /publicfiles e la stampante lp. Dopo aver modificato smb.conf devi far ripartire samba.

[global]
 printing = bsd
 printcap name = /etc/printcap
 log file = /var/log/samba-log.%m
 lock directory = /var/lock/samba
 share modes = yes
 workgroup = WORKGROUP

[lp]
 comment = Stampante Linux
 path = /var/spool/lpd/lp
 writable = no
 public = yes
 printable = yes
 browsable = yes

[homes]
 comment = Directory Personale
 browsable = no
 read only = no
 create mode = 0750

[tmp]
 comment = Spazio per file temporanei
 path = /tmp
 read only = no
 public = yes

[public]
 comment = Pubblicamente Accessibile
 path = /publicfiles
 public = yes
 writable = yes

27.3   LinPopUp - Samba

Qualcuno sa come fare a ricevere i messaggi di WinPopUp con LinPopUp? A mandarli ad utenti Windows NT o Windows riesco, ma quando arrivano alla mia macchina Linux, LinPopUp non fa nulla.

Dopo aver installato Samba e LinPopUp devi inserire in /etc/smb.conf nella sezione [global]:

 message command = /usr/bin/LinPopUp "%f" "%m" %s; rm %s

eventualmente correggi il percorso di LinPopUp.

27.4   Icone delle macchine Linux non presenti in «Risorse di Rete» con Samba

Perché non si vedono le icone su «risorse di rete» delle macchine Linux connesse alla macchina Windows? Pur avendo impostato correttamente il workgroup e tutto il resto?

__________

Devi mettere la seguente riga nella sezione [global] di /etc/smb.conf:

interfaces = <numero_ip_interfaccia_di_rete_macchina_linux>/24

cito la mia riga:

interfaces = 192.168.1.1/24

salva, esci e digita:

# smb restart[Invio]

e vedrete che la macchina Linux apparirà poi nella cartella risorse di rete delle macchine Windows.

27.5   Rete Linux - Windows: copiare e spostare i file

Ho messo in rete due macchine: una con Linux e una con Windows. Le due si vedono e tutto sembra funzionare. Ora mi rimane solo una cosa da fare: come posso copiare, spostare file sulla macchina con Windows dalla macchina Linux?

__________

Da Windows a Linux ti colleghi in telnet o ftp verso l'indirizzo della macchina e utilizzi i comandi convenzionali. Da Linux a Windows, puoi montare le directory condivise com smbmount, che ha una sintassi diversa da versione a versione, una di queste è:

# smbmount //macchina_windows/dir /punto_di_montaggio

27.6   Stampare da Linux in una rete Windows

Ho una macchina Linux e sono collegato ad una rete Windows mediante Samba. Come posso stampare anche da Linux?

__________

Lo puoi fare con un comando del genere:

$ cat $1 | NOMEDELFILTRO | smbclient "\\\\SERVER\\STAMPANTE" PASSWORD -U UTENTE -P -c 'print -'[Invio]

27.7   Samba e Windows

Ho il seguente problema: devo connettere una macchina Linux via smbclient ad una macchina Windows.

Il problema è che la macchina Windows ha solo l'indirizzo numerico (non è stato registrato sul DNS). Dando a smbclient il numerico non riesco a connettermi. Come faccio?

__________

Inserisci il nome e l'ip della macchina Windows nel file /etc/hosts di Linux

27.8   Smb.conf e password

Qual è un esempio di smb.conf in cui un percorso 'public' non richieda una password? (voglio che da una macchina con Windows non mi chieda la password per accedere alla directory public ma solamente per accedere alla cartella personale dell'utente).

__________

# Global parameters
        workgroup = SOFTHOR
        netBIOS name = LINUX.SOFTHOR
        server string = Linux Server
        security = SHARE
        update encrypted = Yes
        map to guest = Bad Password
        log level = 0
        printcap name = /etc/printcap
        guest account = guestpc
        hosts allow = 192.168.0. 127.
        printing = bsd

[public]
        comment = Public Directory
        path = /home/samba
        read only = No
        guest ok = Yes

[backup]
        comment = Backup Directory
        path = /hdb/backup
        read only = No
        guest ok = Yes

[lp]
        comment = Linux Printer
        path = /var/spool/samba
        guest ok = Yes
        print ok = Yes

27.9   Problemi di password con samba

Ho installato Samba. Dopo averlo configurato, la macchina con Linux mi compare, sfogliando la rete, nel gruppo «Workgroup» invece di «alenet»; se ci clicco, mi chiede una password: ho messo su Linux l'utente corrispondente a quello con cui faccio il login in Windows, ma non c'è verso di entrare.

__________

Per cambiare il gruppo devi modificare la voce 'workgroup' del file /etc/smb.conf:

        workgroup = alenet

Per la password, ammesso che il resto dei dati presenti nel file /etc/smb.conf siano corretti, devi stare attento ad una cosa. Microsoft da qualche versione tardiva di Windows 95 in poi compreso NT sp3 ha modificato l'utilizzo standard delle password da non criptate a criptate. A questo punto hai due soluzioni:

  1. Abilitare la criptazione delle password in samba sempre dal file /etc/smb.conf e poi utilizzare smbpasswd per creare le password per ogni utente da inserire in un file che deve a sua volta essere specificato all'interno di /etc/smb.conf (man smbpasswd; man smb.conf)

  2. Modificare i registri di Windows con regedit, in questo modo:

    Puoi anche usare il file Win98_PlainPassword.reg presente nella distribuzione Samba.

27.10   Samba: netBIOS e nome macchina Linux con server DHCP

Come devo configurare smb.conf per dare un nome su netBIOS alla macchina Linux nella rete aziendale servita da un server DHCP?

__________

Aggiungi nella sezione global di /etc/smb.conf:

netBIOS name = tuo_nome_netBIOS

dhcp ti fornisce solo un ip automaticamente, e non controlla il nome netBIOS della macchina. Se non inserisci un nome, credo che utilizzi quello della configurazione di rete.

27.11   Utilizzare un server samba oltre un router

È possibile utilizzare un server samba al di là di un router?

__________

Se il client è Unix puoi accedere a un server netBIOS con il comando:

# smbclient ////SERVER//SHARE -I ip.del.server.netBIOS -U utente[Invio]

Se il client è Windows devi aggiungere nel file LMHOST una voce per quella macchina oppure attivare il supporto per wins (sul server Samba deve essere in esecuzione nmbd)

Capitolo 28.   Plip

28.1   Impostazione MTU per connessione PLIP

Come si imposta il mtu per una connessione plip?

__________

Generalmente nell'impartire il comando ifconfig per impostare la connessione si dà una riga del tipo:

# ifconfig plip0 1.1.1.1 pointopoint 2.2.2.2 up[Invio]

e invece nel tuo caso basta fare:

# ifconfig plip0 mtu 512 1.1.1.1 pointopoint 2.2.2.2 up[Invio]

Capitolo 29.   Connessione al provider - ppp

29.1   Facilitare la connessione al provider con Debian GNU/Linux

Esiste per Debian GNU/Linux un'applicazione che faciliti la connessione al provider?

__________

C'è pppconfig:

<ftp://ftp.it.debian.org/debian/dists/stable/main/binary-i386/base/pppconfig_1.1.deb>

29.2   Verificare la presenza del ppp

Come posso controllare se ho installato il ppp?

__________

Dai il comando:

# cat /usr/include/linux/autoconf.h | grep PPP[Invio]

e vedi se esiste, se è compilato come modulo o all'interno del kernel;

# lsmod | grep ppp[Invio]

(se è compilato come modulo, assicurati che esso sia caricato)

Se proprio non esiste, devi ricompilare il kernel.

29.3   Visualizzazione in tempo reale dei processi di connessione

Quando impartisco il comando di connessione al mio provider, come faccio a sapere quando mi sono connesso?

__________

Digita ifconfig e quando vedrai le linee riguardanti l'interfaccia ppp allora sarai connesso. Un metodo più comodo è sicuramente quello di vedere in tempo reale gli aggiornamenti del file /var/log/messages. Questo può essere fatto con:

# tail -d /var/log/messages[Invio]

eventualmente inserendo tale comando in uno script:

#!/bin/sh
pppd (o ifup, insomma il comando di connessione)
xterm -e tail -f /var/log/messages

29.4   Messaggio di errore «pppd: The remote system is required to authenticate itself but...»

Nel tentativo di connessione al mio provider con pppd, ricevo il seguente messaggio di errore:

«pppd: The remote system is required to authenticate itself but I couldn't find any secret (password) which would let it use an IP address.»

Occorre mettere «noauth» in /etc/ppp/options, e si dovrebbe risolvere il problema

29.5   Statistica sulla connessione ad Internet

Esiste un comando da lanciare o un procedimento da seguire per poter vedere la velocità di connessione ad Internet?

__________

pppstat ti da qualche informazione.

29.6   Visualizzare il proprio indirizzo IP

Come faccio a vedere l'indirizzo IP della mia macchina?

__________

Con:

# ifconfig[Invio]

poi guarda sull'interfaccia principale il numero di inet addr.

29.7   Come sapere il proprio IP estrapolando l'informazione da ifconfig

/sbin/ifconfig | head -9 | tail -1 | cut -d\ -f12 | cut -d\: -f2[Invio]

ma bisognerebbe accertarsi che l'interfaccia ppp sia la seconda in ordine di apparizione. In caso non fosse così si deve adattare questo comando alle proprie esigenze. Se infatti è presente una scheda di rete al posto di «head -9» si deve mettere «head -17» e così via aggiungendo «8» per ogni dispositivo di rete che precede l'interfaccia ppp.

29.8   Indirizzi DNS dei provider

Come faccio a risalire ai dns dei provider?

__________

Con nslookup:

# nslookup[Invio]

> server dns2.nic.it[Invio]

> set query=any[Invio]

> pluto.linux.it[Invio]

Server:  dns.nic.it
Address:  193.205.245.5

pluto.linux.it  preference = 10, mail exchanger = keycomm.pluto.linux.it
pluto.linux.it  preference = 20, mail exchanger = r-vicenza3.keycomm.it
pluto.linux.it  preference = 30, mail exchanger = r-vicenza1.keycomm.it
pluto.linux.it  preference = 40, mail exchanger = dns.keycomm.it
pluto.linux.it  Internet address = 192.106.105.10
pluto.linux.it  text = "PLUTO Linux User Group"
pluto.linux.it  nameserver = serena.keycomm.it
pluto.linux.it  nameserver = snoopy.psy.unipd.it
pluto.linux.it  nameserver = ns.publinet.it
pluto.linux.it
        origin = serena.keycomm.it
        mail addr = dalla.pluto.linux.it
        serial = 1999110100
        refresh = 86400 (1D)
        retry   = 7200 (2H)
        expire  = 2592000 (4w2d)
        minimum ttl = 86400 (1D)
pluto.linux.it  nameserver = serena.keycomm.it
pluto.linux.it  nameserver = snoopy.psy.unipd.it
pluto.linux.it  nameserver = ns.publinet.it
keycomm.pluto.linux.it  Internet address = 194.184.117.31
r-vicenza3.keycomm.it   Internet address = 194.184.117.4
r-vicenza1.keycomm.it   Internet address = 194.184.117.2
dns.keycomm.it  Internet address = 194.184.116.2
serena.keycomm.it       Internet address = 194.184.117.3
snoopy.psy.unipd.it     Internet address = 147.162.146.17
ns.publinet.it  Internet address = 151.99.137.2

> > geocities.com[Invio]

Server:  dns.nic.it
Address:  193.205.245.5

Non-authoritative answer:
geocities.com   nameserver = NS2.geocities.com
geocities.com   nameserver = NS1.YAHOO.COM
geocities.com   nameserver = NS2.DCA.YAHOO.COM
geocities.com   nameserver = NS4.geocities.com
Authoritative answers can be found from:
geocities.com   nameserver = NS2.geocities.com
geocities.com   nameserver = NS1.YAHOO.COM
geocities.com   nameserver = NS2.DCA.YAHOO.COM
geocities.com   nameserver = NS4.geocities.com
NS2.geocities.com       Internet address = 209.1.224.100
NS1.YAHOO.COM   Internet address = 204.71.200.33
NS2.DCA.YAHOO.COM       Internet address = 209.143.200.34
NS4.geocities.com       Internet address = 209.1.224.143

> tiscalinet.it[Invio]

Server:  dns.nic.it
Address:  193.205.245.5

Non-authoritative answer:
tiscalinet.it   nameserver = ns.tiscalinet.it
tiscalinet.it   nameserver = sns.tiscali.it
tiscalinet.it
        origin = ns.tiscalinet.it
        mail addr = nsadmin.tiscali.it
        serial = 2000042802
        refresh = 86400 (1D)
        retry   = 3600 (1H)
        expire  = 604800 (1W)
        minimum ttl = 86400 (1D)

Authoritative answers can be found from:
tiscalinet.it   nameserver = ns.tiscalinet.it
tiscalinet.it   nameserver = sns.tiscali.it
ns.tiscalinet.it        Internet address = 195.130.224.18
sns.tiscali.it  Internet address = 195.130.225.129

In ogni caso si può fare anche con il comando host:

# host -t ns dominio_tuo_provider[Invio]

[bigpaul@capo.retemia]:[Fri May 5]:[22:25:41]:[~]: host -t ns flashnet.it[Invio]

flashnet.it             NS      dns2.flashnet.it
flashnet.it             NS      dns.flashnet.it

[bigpaul@capo.retemia]:[Fri May 5]:[22:25:41]:[~]: ping dns2.flashnet.it[Invio]

PING dns2.flashnet.it (194.247.160.8): 56 data bytes
64 bytes from 194.247.160.8: icmp_seq=0 ttl=252 time=178.5 ms

--- dns2.flashnet.it ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 150.0/163.7/178.5 ms

[bigpaul@capo.retemia]:[Fri May 5]:[22:25:41]:[~]: ping dns.flashnet.it[Invio]

PING dns.flashnet.it (194.247.160.1): 56 data bytes
64 bytes from 194.247.160.1: icmp_seq=0 ttl=252 time=165.5 ms

--- dns.flashnet.it ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 150.0/157.7/165.5 ms

29.9   Cambiare gli indirizzi DNS se ci si connette a più di un provider

Se volessi usare più accessi ad Internet come dovrei fare con il /etc/resolv.conf? Dovrei forse mettere tutti i DNS dei provider nello stesso file o dovrei cambiarli ogni volta?

__________

Puoi tranquillamente lasciare i DNS di un provider o sceglierne un paio tra quelli che ti sembrano più veloci e affidabili. Le richieste generalmente sono permesse a tutti gli host, quindi non ha importanza quale abbonamento stai usando.

29.10   DNS nei provider che li assegnano automaticamente

Con il mio provider, mi vengono assegnati automaticamente i DNS. Come mi devo comportare?

Puoi impostare l'opzione «usepeerdns» di pppd. Se usi questo metodo non puoi impostare i DNS delle macchine che non hanno il modem. In ogni caso usando l'opzione citata puoi sempre leggere i DNS di Libero dal file di log che in genere è /var/log/messages.

29.11   DNS cambiato

Durante la connessione ad Internet, il DNS della rete locale (che risiede in /etc/resolv.conf), mi viene sostituito automaticamente dal DNS che utilizzo per navigare (/etc/ppp/resolv.conf/). Quando però mi sconnetto, la modifica resta. Come posso evitare ciò?

__________

Inserisci in /etc/sysconfig/network-scripts/ifcfg-ppp0 la riga:

'PEERDNS=no'

29.12   Connessi ad internet ma il navigatore non riesce a connettersi ai siti

Mi sembra di essere riuscito a collegarmi ad Internet con Linux. Il navigatore però non si riesce a collegare a nessun sito e restituisce errore. Come faccio?

__________

Devi indicare gli indirizzi DNS del tuo provider nel file /etc/resolv.conf. Questo file serve per tradurre gli indirizzi mnemonici in indirizzi ip numerici, ed è costituito da più righe del tipo:

nameserver   indirizzo-ip-del-server-DNS

29.13   Messaggio di errore: no dialtone del modem

Sto tentando di collegarmi ad Internet. Ho letto l'HOWTO e tutto funziona solo che quando digito «atdt12345» il modem non compone il numero perché mi risponde no dialtone

__________

Prova la stringa di inizializzazione del modem atx3dt12345 invece di atdt12345.

29.14   Automatizzare delle operazioni da effettuare durante la connessione ad Internet

Vorrei che un singolo script mi permettesse:

Questo mi potrebbe essere utile ad esempio per collegarmi esclusivamente per scaricare la posta. Come si fa?

__________

Prova a creare uno script di questo tipo:

#!/bin/bash
#
_LOCK=/var/lock/ppp.LOCK
#
pon
if [ "$?" = "0" ] ; then
        ....
        tuoi comandi
        ....
        poff
        rm -f $_LOCK
        exit 0
else
        rm -f $_LOCK
        exit 1
fi

29.15   Connessione ad Internet con script

Come posso fare a collegarmi ad Internet senza usare kppp e simili? Ho sentito che si può fare tramite degli script, ma come faccio?

__________

La connessione tramite script è il metodo più classico per connettersi ad un provider Internet sui sistemi come Linux. In effetti kppp ed i programmi simili non fanno altro che andare a scrivere degli script.

In Linux si usano due programmi, essenzialmente: chat che invia i comandi al modem e pppd il demone che instaura il dialogo secondo il protocollo ppp con il server del provider.

I file su cui interverremo sono sostanzialmente 5:

/etc/ppp/pap-secrets

/etc/resolv.conf

/etc/host.conf

/bin/ispup

/bin/ispdown

Come si può intuire tratterò il caso di accesso con autenticazione PAP.

Innanzitutto dovremo inserire il nostro nome utente e la password, comunicateci dal provider, nel primo di questi file, in questo modo:

# /etc/ppp/pap-secrets

username        *       password

Poi dovremo modificare il secondo, che semplicemente indica al nostro sistema i dns da usare durante la connessione:

# /etc/resolv.conf

search dominioprovider.it
nameserver 111.222.111.222
nameserver 222.111.222.111

dove ovviamente dovremo inserire i dati forniteci dal provider al momento della stipulazione del contratto al posto degli esempi che ho scritto.

Bisogna poi comunicare al sistema in che modo deve risolvere i nomi dei computer nella rete (non importa se non avete una rete locale e l'unica rete per voi è Internet, dovete specificarlo lo stesso). Per fare questo bisogna operare su /etc/host.conf.

# /etc/host.conf

order hosts,bind
multi on

Fatto tutto ciò il nostro sistema è pronto, e possiamo quindi passare alla realizzazione dei veri e propri script di connessione, cioè quelli che eseguiremo quando vorremo connetterci o disconnetterci.

Questo per connettersi:

# /bin/ispup

IP_ISP="0.0.0.0"
IP_LOCALE="0.0.0.0"
DISPOSITIVO="/dev/modem"    # oppure il nome della seriale cui è collegato il modem
VELOCITA="57600"
TELEFONO="0123456789"
NOMEUSER="username"
/usr/sbin/pppd \
connect "/usr/sbin/chat -v \
TIMEOUT 3 \
ABORT BUSY \
ABORT 'NO CARRIER' \
'' \dATZ \
OK \dATX0 \
OK \dAT\d$TELEFONO \
TIMEOUT 60 \
CONNECT '' " \
user $NOMEUSER -d \
-detach crtscts modem \
defaultroute noipdefault \
$IP_LOCALE:$IP_ISP \
$DISPOSITIVO \
$VELOCITA

e questo per disconnettersi:

# /bin/ispdown

kill -INT `cat /var/run/ppp0.pid`

A questo punto, se volete collegarvi senza essere utente root, la via più semplice anche se la meno sicura è quella di dare i permessi di esecuzione degli script a tutti gli utenti (oppure vi create un gruppo di utenti apposito) e di selezionare l'attributo del set user ID per il comando pppd.

Per connettervi digitate al prompt:

$ ispup &[Invio]

(la & serve a mandare il processo in secondo piano, in modo che abbiate ancora libera la console per compiere altre operazioni.)

Digitate:

$ ispdown[Invio]

per terminare la connessione.

29.16   Collegamento a Tiscali, un esempio per tutti

Quali sono gli script di connessione a Tiscali e quali file devo modificare?

__________

Il file da eseguire lo potremo chiamare tiscali", dovremo conferirgli i permessi giusti e dovremo metterlo in una directory di percorso (path).

#!/bin/sh
#Parametri della connessione.
#Numero di telefono del provider: deve contenere anche il prefisso.
#Nodo di Roma (RM)
TELEFONO=06XXXXXXXXXXXX
#Nome da cercare in "pap-secrets"
NOME_UTENTE=ggabriele.gvgsoft
#Rende disponibili le variabili allo script "dialup".
export TELEFONO
#Dove si trova lo script "dialup"
SCRIPT_DIALUP=/etc/ppp/dialup
#Nuovo "resolv.conf"
NUOVO_RESOLV=/etc/ppp/resolv.tisc
#Vecchio "resolv.conf"
VECCHIO_RESOLV=/etc/resolv.conf
#Modifica "resolv.conf"
rm -f $VECCHIO_RESOLV
cp $NUOVO_RESOLV $VECCHIO_RESOLV
#Avvio della connessione.
exec /usr/sbin/pppd connect $SCRIPT_DIALUP user $NOME_UTENTE

File /etc/ppp/resolv.tisc

domain tiscalinet.it
nameserver 195.130.224.18
nameserver 195.130.225.129

File /etc/ppp/options

#Fa sì che lo script non venga eseguito in secondo piano
#e che possa essere ucciso con CTRL-C.
-detach
#Usa il lock per assicurarsi un accesso esclusivo
#al dispositivo seriale. Questo potrebbe provocare
#in kppp un messaggio del tipo "Trovata l'opzione
#lock. Rimuoverla perché gestita automaticamente".
lock
#Porta su cui è attaccato il modem:
#ttyS0=COM1 ttyS1=COM2 ttyS2=COM3 ttyS3=COM4
/dev/ttyS3
#Velocità di connessione porta-modem.
115200
#Controllo di flusso hardware.
crtscts
#Non vengono assegnati indirizzi IP di default
noipdefault
defaultroute
modem
asyncmap 0
#Massima grandezza del pacchetto trasmesso.
mtu 1024
#Massima dimensione del pacchetto ricevuto.
mru 1024

File /etc/ppp/dialup

#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
exec /usr/sbin/chat -v                                  \
        TIMEOUT         3                               \
        ABORT           '\nBUSY\r'                      \
        ABORT           '\nNO ANSWER\r'                 \
        ABORT           '\nRINGING\r\n\r\nRINGING\r'    \
        ''              \rAT                            \
        'OK-+++\c-OK'   ATH0                            \
        TIMEOUT         30                              \
        SAY             "Composizione del numero ed\n"  \
        SAY             "avvio della connessione...\n"  \
        OK              ATDT$TELEFONO                   \
        CONNECT         ''

Naturalmente, il file etc/ppp/pap-secrets contiene la password in questa maniera:

nome_utente [TAB] * [TAB] password

29.17   Doppia composizione del numero telefonico del provider in Red Hat 6.1

Come mai il numero di telefono del provider viene composto due volte in Red Hat 6.1?

__________

C'è un baco per cui il numero di telefono viene composto due volte prima di accedere ad Internet. Sul sito di Red Hat <http://www.redhat.com> è disponibile la versione corretta. Si trova anche l'aggiornamento di `rp3', il programma per la gestione degli account Internet.

29.18   Verifica dei tempi di connessione con script

C'è il modo, connnettendosi tramite script, di vedere i tempi di durata della connessione?

__________

Il pppd scrive nel suo file di log i tempi di inizio e fine connessione, da esso puoi ricavarti le durate. Il file di log predefinito è /var/log/messages, ma io l'ho modificato nel syslog.conf così:

*.info;mail.none;authpriv.none;daemon.none              /var/log/messages
# Daemon
daemon.*                                                /var/log/daemon

In questo modo il file di log è /var/log/daemon.

29.19   ppp, attributo del set user ID ed uso per gli utenti comuni

Se cerco di usare il ppp per il collegamento ad Internet, mi compare una casella di dialogo che mi avverte che il demone pppd non è installato correttamente e bisogna installarlo con il set user ID. Che vuol dire?

__________

Normalmente l'uso del ppp è riservato all'utente root. Per permetterne l'uso anche agli altri utenti, si fa in modo che quando questo viene eseguito, il sistema pensi che sia root a farlo. Per questo esiste un bit speciale nei permessi.

Per attivarlo usa:

# cd /usr/sbin[Invio]

# chmod u+s pppd[Invio]

29.20   Mandrake 6.1, linuxconf e ppp - file di configurazione

Ho una Mandrake 6.1 (helios); ho installato e configurato tutto. Linuxconf fra le varie opzioni imposta anche la connessione ad Internet. Dove va a posizionare gli script?

__________

La Red Hat 6.0 da cui Helios è derivata li mette in /etc/sysconfig/network-scripts/

29.21   Problemi di autentificazione con diald

Se eseguo la connessione ad Internet senza usare diald va tutto bene, usando diald la chiamata viene effettuata ma l'autenticazione non va a buon fine. Perché?

__________

Devi dirgli chi è l'utente che accede. Questo in genere si fa in tre modi. Innanzitutto inserisci in /etc/ppp/pap-secret nome_utente e password e poi:

  1. nel file /etc/ppp/options inserisci la riga:

    user <nome utente>
  2. puoi specificare il nome utente direttamente dentro lo script di chat invece che nel file 'option', ma poi dopo avrai problemi se lavori, come dovrebbe essere, con un account diverso da quello di root.

  3. Il modo migliore è inserire in /etc/diald.conf la riga:

    ppp-options = user = <nome utente>

29.22   Salvare i file di configurazione della connessione ad Internet finalmente funzionante

Visto che dopo tanto faticare sono riuscito a configurare Linux per la connessione ad Internet, potreste dirmi tutti i file che devo salvare per ripristinare il tutto un secondo tempo in caso mi dovesse capitare qualcosa al sistema?

__________

Oltre ad i singoli file eseguibili attivanti la connessione (connetti, if-up, ecc.):

/etc/ppp/options

/etc/ppp/pap-secrets

/etc/ppp/chat-script

/etc/resolv.conf

29.23   Crash della Red Hat 6.1 utilizzando lo strumento per configurare la connessione

Perché quando lancio il dialup configuration tool mi viene restituito un bel messaggio di crash?

__________

Lancia:

# netcfg[Invio]

ed in 'interfaces' troverai che una delle due è senza nome e non attiva. È sufficiente cancellarla per rimuovere il problema.

29.24   Procedura per connettersi a diversi fornitori di accesso Internet con Red Hat

Come si può configurare il proprio sistema per accedere ad Internet con diversi provider?

__________

Basta uno script che cambi i file:

/etc/ppp/options

/etc/ppp/pap-secrets

/etc/ppp/chat-script

/etc/resolv.conf

quindi prima di tutto occorre copiare questi file al sicuro!

Creiamo un file .spec per ogni provider che abbiamo. (I file .spec servono a creare i pacchetti rpm)

tiscali.spec, tin.spec, ecc. con il seguente contenuto (copiate le righe tra gli **********)

Ad esempio ora mi collego felicemente con Tiscali e scrivo questo file:

************************************************************************
Name: Connessione_tiscali
Summary: Tutte le impostazioni e gli scripts per la connessione a
Tiscali
Version: 1.0
Release: 1
Copyright: Uso personale Gaetano Paolone
Group: Applications
Packager: Gaetano Paolone <gaetano@pluto.linux.it>

%description
Ecco i file per la connessione a tiscali.

%files
/etc/ppp/options
/etc/ppp/pap-secrets
/etc/ppp/chat-script
/etc/resolv.conf
**************************************************************************

Creiamo ora l' rpm:

# rpm -bb tiscali.spec[Invio]

(che creerà qualcosa come Connessione_tiscali-1.0-1.rpm)

Fatto il primo, cambio i file e quando funzionano con la nuova configurazione (ad esempio con tin), creo il secondo rpm:

# rpm -bb tin.spec[Invio]

ecc. e ricominciamo.

Fatti tutti gli rpm creiamo vari script per attivarli:

# attiva_tiscali[Invio]

che conterrà la riga:

# rpm -Uvh Connessione_tiscali-1.0-1.rpm[Invio]

(o qualcosa del genere)

attiva_tin ecc.

Diamo loro il permesso di esecuzione e copiamoli in una directory di percorso (path).

Ora basterà digitare il nome dello script per cambiare tutti i file di configurazione.

29.25   Script per diversi fornitori di accesso Internet

Come posso collegarmi a diversi fornitori di accesso Internet?

__________

Ecco come si può impostare Linux per connettersi a due provider (es. Tiscali e Infostrada).

È necessario modificare o aggiungere alcuni file contenuti in /etc/ppp nel modo seguente:

  1. Cancellare il contenuto di chap-secrets;

  2. Creare due file:

    dial-infostrada

    dial-tiscali

    ciascuno con un contenuto del tipo:

            REPORT CONNECT
            ABORT "BUSY"
            ABORT "NO CARRIER"
            ABORT "NO DIALTONE"
            "" ATL0M0X4
            OK ATDTnum_tel_provider
            CONNECT
  3. Creare il file options fatto più o meno così (con opzioni generiche rispetto al provider):

            /dev/modem
            57600
            debug
            lock
            crtscts
            defaultroute
  4. Modificare pap-secrets nel seguente modo:

            # Secrets for authentication using PAP
            # client        server  secret                  IP addresses
            tuo_username_infostrada  infostrada      tua_password_infostrada
            tuo_username_tiscali     tiscali         tua_password_tiscali
  5. Per avviare gli script e le opzioni corrette per ciascun provider creare due file diversi al posto di ppp-on e cioè ppp-tiscali-on e ppp-infostrada-on fatti così:

    /usr/sbin/pppd connect '/usr/sbin/chat -v -f /etc/ppp/dial-nome_provider'\
    /dev/modem 57600 debug lock crtscts defaultroute call options-nome_provider\
    -d -detach &
  6. Creare la directory peers sotto /etc/ppp e inserire due file, options-infostrada e options-tiscali ciascun con il seguente contenuto:

            name tuo_nomeutente_presso_quel_provider

    Volendo, per Infostrada, si può aggiungere:

       
            mtu 552
            mru 552
  7. Modificare il file /etc/resolv.conf inserendo i nomi di server di entrambi i provider e modificare /etc/hosts in modo che contenga gli indirizzi ip di entrambi i server di posta (eventualmente ricavandoli effettuando un ping su i due server) per evitare che la connessione con uno dei due provider impedisca il prelievo della posta presso il server dell'altro.

  8. Se tutti i permessi sono impostati correttamente, il tutto dovrebbe essere pronto a funzionare correttamente, anche per più di due provider con le ovvie aggiunte (tutte le opzioni particolari riguardanti i singoli provider non vanno poste, ovviamente, in options che contiene le opzioni generiche e non va eliminato, ma bensì in peers/options-nome_provider).

Capitolo 30.   Connessione remota tra macchine

30.1   Predisporre un accesso dial-up ad una macchina Linux

Sto provando a configurare un accesso dial-up ad una macchina con Linux e modem. Che operazioni devo compiere?

__________

Occorre installare mgetty e avere il supporto per il ppp (dovrebbe essere presente in tutte le distribuzioni).

Nel file /etc/mgetty/login.config va abilitata l'opzione AutoPPP:

/AutoPPP/ -   a_ppp    /usr/sbin/pppd /dev/ttySy

dove ttySy è la porta utilizzata dal modem.

Sul file /etc/mgetty/mgetty.config non occorre inserire alcuna opzione particolare, al limite la velocità della porta.

Nel file /etc/ppp/options vanno abilitate le opzioni valide per le connessioni entranti (in conflitto con eventuali connessioni uscenti):

asyncmap 0
auth
crtscts
lock
modem
netmask 255.255.255.0
passive
+pap
login
lcp-echo-interval 30         #o altro a piacere
lcp-echo-failure  4          #o altro a piacere

Nel file /etc/ppp/options.ttySx (ttySx è sempre la porta del modem) vanno inseriti l'indirizzo della macchina che fa da server e l'indirizzo di quella client:

#pc.server:pc.client
192.168.0.1:192.168.0.2    #o altri indirizzi a piacere, ma sempre di una stessa rete!

Nel file /etc/ppp/pap-secrets va inserita una riga per permettere l'accesso al ppp a tutti gli utenti:

*   pc.server     ""   -

al posto di pc.server metti il nome che hai assegnato al tuo host. Nel file /etc/hosts vanno inseriti i nomi e gli indirizzi utilizzati:

127.0.0.1       localhost
192.168.0.1     pc.server   #o quello che vuoi
192.168.0.2     pc.client   #idem come sopra

Nel file /etc/networks vanno inserite le informazioni relative alla rete locale che si crea durante la connessione oltre alla rete virtuale localnet:

127.0.0.0.      localnet
192.168.0.0     rete.mia    

Nel file /etc/inittab va inserito naturalmente l'mgetty sulla porta usata dal modem (in modalità respawn), quindi occorre che ci sia una riga tipo:

T1:23:respawn:/sbin/mgetty -x5 -s 57600 ttySx

Da notare che 57600 può essere aumentato a velocità superiori, specialmente se si possiede un modem veloce, e ci si deve ricordare di sostituire ttySx con ttyS1, 2, ecc.

A questo punto, all'avvio di Linux, mgetty attende una chiamata sulla sua porta e con l'opzione AutoPPP fa partire il ppp non appena la connessione è andata in porto. Il ppp negozia il login e la password (opzione +pap) automaticamente andando a controllare direttamente il file delle password di Linux (quello degli utenti comuni). Attenzione: devi aver installato anche il PAM.

30.2   Configurare una macchina con modem per ricevere connessioni dall'esterno

Ho una macchina con Linux. Vorrei che essa accetti connessioni dall'esterno. Cosa devo fare?

__________

Devi installare mgetty e inserire una riga come questa in /etc/inittab:

T3:3:respawn:/sbin/mgetty -D -n5 -x5 -s 57600 ttyS2

l'opzione -n indica il numero di squilli dopo i quali accettare la connessione. Leggiti il manuale di mgetty per le altre funzioni, come quella che prevede di non rispondere la prima volta, ma se dopo 30 secondi e entro un altro tot arriva un'altra chiamata, mgetty connette il modem.

Per disabilitarlo, basta cambiare runlevel:

# telinit 2[Invio]

sempre che il runlevel 2 sia quello predefinito e il 3 quello indicato nella riga citata sopra su /etc/inittab (il secondo campo dopo T3).

Se hai bisogno di gestire la cosa in base all'orario, inserisci una riga in /etc/crontab e fai tutto automaticamente. Attenzione: la configurazione del ppp per le chiamate in entrata non è la stessa per quelle in uscita (per connettersi a Internet).

30.3   Sconnettersi da un sistema remoto lasciando attivi alcuni processi

Ho un account su un sistema remoto. A volte lo utilizzo per scaricare dei file. Come posso impartire i comandi ftp o wget in modo che essi possano continuare se mi sconnetto?

__________

Con i seguenti comandi:

$ nohup ftp -f ( oppure -n) < ftp-file[Invio]

in ftp-file metti i comandi da trasmettere ad ftp.

Oppure usa wget, passando nome e password alla riga di comando. Ciò è comodo perché, se viene supportato dal server remoto, wget permette di riprendere eventuali interruzioni nello scaricamento.

In ogni caso puoi semplicemente lanciare in background il comando:

$ tail -f nohup.out &[Invio]

e di seguito avviare la tua sessione ftp o wget con nohup. Potrai seguire così l'andamento delle operazioni sulla console.

Capitolo 31.   Posta elettronica

31.1   Scaricare, smistare e statistica messaggi scaricati

Qualcuno mi può descrivere configurazioni funzionanti di fetchmail e procmail per scaricare e smistare la posta?

__________

Ecco la mia configurazione. Qui c'è un esempio relativo allo scaricamento e allo smistamento dei miei messaggi dai diversi server di posta. I messaggi scaricati (qui c'è l'esempio della mailing list angolinux) possono essere spostati, reindirizzati o cancellati in base a filtri.

Io faccio tutto con uno script chiamato MAIL:

---------- BEGIN: /script/MAIL ---------

#!/bin/bash

# creo i file temporanei (a zero byte) per contare quante mail sono
# arrivate. 
cat /dev/null > .angolinux.count

# scarico la posta
fetchmail -v

# scrivo il report
echo
echo "      +--------+"
echo "      | report |"
echo "      +--------+"
echo
echo "angolinux mail:`wc -w < ~/.angolinux.count`"

# rimuovo i file temporanei di conteggio
rm ~/.angolinux.count 2> /dev/null

---------- END: /script/MAIL ---------

nella mia directory home c'è il file .fetchmailrc per dire a fetchmail come scaricare la posta tramite POP3 (server, login, pass, ecc.) e smistarla tra i vari utenti (nel mio caso sono io -oltre a root- l'unico utente):

---------- BEGIN: /home/fritz/.fetchmailrc ---------

poll "mail.dada.it" proto pop3 user "fritz" with pass "CENSORED" is
        "fritz" here forcecr smtpaddress localhost
poll "mail.mdsnet.it" proto pop3 user "fritz2" with pass
        "CENSORED" is "fritz" here forcecr smtpaddress localhost

# così per tutti gli altri account pop3 [...]

---------- END: /home/fritz/.fetchmailrc ---------

e .procmailrc:

---------- BEGIN: /home/fritz/.procmailrc ---------

DATE=`date +%m-%y`
PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/mail      #you'd better make sure it exists
DEFAULT=/usr/spool/mail/fritz
LOGFILE=~/.log_procmail   #recommended

# -- BACKUP DI TUTTE LE MAIL IN backup/all.gz --
# quando si maneggia con la posta, è sempre meglio fare un backup
# preventivo di tutto, per evitare di poter perderla a causa di una cattiva
# configurazione. Queste due righe mi hanno salvato due volte appena ho iniziato a
# giocare con procmail, causa cattiva impostazione e e-mail sparite.
:0 c
| gzip >> backup/all.$DATE.gz

# -- ANGOLINUX --
# funziona così: se c'è una mail incrementa il file contatore di una
# parola (1 o oblurasci sarebbe stato equivalente, poiché dopo
# «wc -w» conta solo il numero di parole presenti) senza cancellarla,
# poi una copia la mette nella cartella angolinux, e un'altra la mette come
# backup (sì sono un po' paranoico, pena l'esperienza) nel file
# backup/angolinux.$DATE.gz, che le salva in base al mese.
:0 c
* ^To.*angolinux@systems.it
| echo 1 >> ~/.angolinux.count
:0 Ac:
angolinux
:0 A:
| gzip >> backup/angolinux.$DATE.gz


[...] (tutte le altre mailing list)

# -- MISC: tutte le altre --
# le mail che arrivano fino qui non appartengono a nessuna mailing list,
# sono le mie personali, quindi lascio che il client (nel mio caso
# Pine) le prenda da /var/spool/mail/fritz

:0 c
| echo 1 >> ~/.misc.count
:0 Ac:
| gzip >> backup/misc.$DATE.gz


---------- END: /home/fritz/.procmailrc ---------

questa è la mia configurazione, adatta per Pine, ma abbastanza uniforme per molti gestori di posta.

A rigor di cronaca, ecco il risultato del comando MAIL non connessi, quindi non scarica nulla, perché non riesce a connettersi al server pop3:

darkstar:~$ MAIL
fetchmail: 5.1.2 querying mail.dada.it (protocol POP3) at Thu, 10 Feb 2000
17:21:27 +0100 (CET)
fetchmail: POP3 connection to mail.dada.it failed: temporary name server
error
fetchmail: Query status=2
fetchmail: normal termination, status 2

[...]

      +--------+
      | report |
      +--------+

angolinux mail:      0
 n3wblist mail:      0
 sppgroup mail:      0
 blacksun mail:      0
  bugtraq mail:      0
 pizza_ml mail:      0
    md_ml mail:      0
     misc mail:      0

31.2   Configurazione fetchmail

Come faccio a configurare Fetchmail in modo che scarichi anche la posta di altri utenti e la ridistribuisca (agli altri utenti)?

__________

defaults proto pop3
poll <POP3> user <ut1> pass <pass1> is <localhost> here mda \ 
"procmail -d <ut1>"
poll <POP3> user <ut2> pass <pass2> is <localhost> here mda \
"procmail -d <ut2>"
...............

(procmail ti serve se vuoi filtrare la posta in diversi modi...)

Ovviamente i termini entro parentesi acute nascondono i corrispondenti valori reali. I valori POP3 saranno diversi, se i provider sono diversi.

31.3   .fetchmailrc, un esempio

Come si configura .fetchmailrc?

__________

Il mio file di configurazione (.fetchmailrc) ha una serie di voci (una per ciascun server di posta, ovviamente) con il seguente aspetto:

#----------------------------
poll "pop.tiscalinet.it"
protocol pop3
username "tuo_nomeutente_presso_tiscali"
password "tua_password"
#----------------------------

e con tale configurazione non ho problemi con alcuno dei server di posta che utilizzo.

Inoltre la riga di comando con cui viene avviato fetchmail è:

# fetchmail -d 300[Invio]

che controlla la presenza di posta sul server ogni 300 secondi. Spesso è necessario un pò di attesa (1 minuto circa) prima che fetchmail cominci effettivamente a scaricare la posta.

31.4   Esempio di file di configurazione fetchmail e procmail

Qulacuno mi mostra i propri .fetchmailrc e .procmailrc funzionanti?

__________

fetchmailrc

poll pop.tiscalinet.it with proto POP3 user "user" password "pass" \
   mda '/usr/bin/procmail -d  %T'

.procmailrc

PATH=/bin:/usr/bin:/usr/bin
MAILDIR=$HOME/mail       #you'd better make sure it exists
DEFAULT=$MAILDIR/altre   #completely optional
LOGFILE=$MAILDIR/log     #recommended

:0:
* ^TOmioindirizzodiposta@mioprovider.it
inbox

31.5   Spedire messaggi in una rete locale facendo risultare un indirizzo esterno

Cosa devo configurare il sistema per gestire i messaggi interni ad una rete locale con il dominio Internet? Se devo mandare un messaggio ad un mio collega e voglio inviarlo come utente@provider_Internet.it senza farlo però uscire dalla rete locale, cosa devo configurare?

__________

Devi modificare il sendmail.cf in modo che includa la caratteristica use_cw. Quindi nel file sendmail.cw scriverai i domini da trattare come locali. Per fare questo, dovrai però aver configurato anche un name server locale che gestisca per finta la zona provider_Internet.it, con il Mail eXchanger (l'host dedicato alla gestione della posta per un dominio indicato nei file di zona del bind con MX) che punta all'host del tuo server di posta locale e gli altri (www e altri, se esistono) che puntano ai loro effettivi IP Internet, onde evitare spiacevoli disguidi. Poiché per esempio utente@provider_Internet.it non corrisponderà all'utente locale utente, avrai bisogno di impostare anche la virtusertable del sendmail (con la caratteristica omonima nel sendmail.cf) che ti permette di associare gli indirizzi virtuali a quelli locali esistenti, nella forma:

utente@provider_Internet.it     utente_locale

(il separatore è un tab)

31.6   procmail e reindirizzamento sbagliato dei messaggi

Utilizzando procmail, questi mi mette la posta in /var/spool/mail/enrico. La vorrei in ~/Maildir. Come faccio?

__________

Puoi risolvere facilmente creando un file .procmailrc con:

$ touch .procmailrc[Invio]

nella directory home dell'utente. Nel file, specificherai le variabili di ambiente che ti interessano, ad esempio:

PATH=3D/bin:/usr/bin:/usr/bin
MAILDIR=3D$HOME/Maildir
DEFAULT=3D$MAILDIR/mbox

31.7   Postfix, installazione e configurazione

Qualora non si utilizzino le soluzioni sotto forma di pacchetto, i sorgenti si troveranno in due versioni: una del formato «postfix-xyz.tar.gz» che rappresenta l'attuale versione stabile e l'altra «snapshot-jwy.tar.gz» che è una versione su cui si sta ancora lavorando. Una volta scaricato, il sorgente va decompresso:

tar -zxvf sorgente.tar.gz[Invio]

Entriamo nella directory creata dal processo di decompressione e impartiamo il comando:

make[Invio]

Dopo aver fatto questo, occorre rinominare alcuni file:

mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF[Invio]

mv /usr/bin/newaliases /usr/bin/newaliases.OFF[Invio]

mv /usr/bin/mailq /usr/bin/mailq.OFF[Invio]

chmod 755 /usr/sbin/sendmail.OFF[Invio]

Poi si da il comando:

useradd postfix[Invio]

In /etc/passwd dovremo avere qualcosa del genere:

postfix:*:12345:12345:postfix:/no/where:/no/shell

Aggiungiamo in /etc/aliases:

postfix: root
root   utente_non_privilegiato
MAILER-DAEMON:  postmaster
postmaster:     root

In seguito, dalla directory dove è stato decompresso digitiamo:

sh INSTALL.sh[Invio]

rispondendo alle domande che ci vengono poste. Mettiamo in /etc/postfix/main.cf queste righe:

 # tenta di spedire la coda ogni 5 min.
 queue_run_delay = 300
 # 3 giorni in coda
 maximal_queue_lifetime = 3
 biff = no
 relayhost = [smtp.tiscalinet.it]
 sender_canonical_maps = hash:/etc/postfix/sender_canonical
 virtual_maps = hash:/etc/postfix/virtual

Poi creiamo /etc/postfix/sender_canonical così:

 utente_locale veroindirizzoposta@provider.it

e /etc/postfix/virtual così:

 veroindirizzoposta@provider.it utente_locale

Poi diamo il comando:

postmap hash:/etc/postfix/sender_canonical[Invio]

e

postmap hash:/etc/postfix/virtual[Invio]

diamo il comando per inizializzare il database degli alias:

newaliases[Invio]

Ora bisogna avviare postfix:

postfix start[Invio]

I comandi:

 sendmail -bp     visualizza la coda delle mail in uscita
 mailq            visualizza la coda delle mail in uscita
 sendmail -q      dice a postfix di mandare i messaggi in attesa
 postfix -flush   dice a postfix di mandare i messaggi in attesa

31.8   You have new mail all'avvio - come leggere i messaggi

Ad ogni avvio mi appare You have new mail , ma digitando 'mail' la risposta è command not found.

__________

Non hai installato il comando mail o un qualsiasi MUA, un semplice programma di posta elettronica. Se lo state facendo per root, è giusto così (per motivi di sicurezza è bene che root non usi programmi per la posta), e potete usare:

# less /var/spool/mail/root[Invio]

altrimenti è consigliabile installare un programma per la posta (non tanto mail, che è piuttosto poco intuitivo, quanto ad esempio mutt).

31.9   Blocco della macchina su sendmail

Ogni volta che accendo la macchina, durante l'avvio mi si blocca su sendmail e devo aspettare qualche minuto. È molto noioso, posso evitarlo?

__________

Se la macchina non è direttamente connessa alla rete, modifica il file /etc/hosts affinché contenga:

127.0.0.1 localhost

Se invece è connessa costantemente alla rete ed ha un IP fisso, sendmail si blocca se /etc/hosts contiene la riga:

127.0.0.1  localhost   host_name

modificalo così:

127.0.0.1  localhost
w.x.y.z    host_name

31.10   Sendmail e antispam

Qual è l'indirizzo cui fare telnet per verificare la configurazione di sendmail relativamente all'antispamming?

__________

mail-abuse.org

31.11   Inviare un file di testo compresso in allegato con un unico comando

Come posso mandare un file di testo in allegato dopo averlo compresso?

tar czf - nomefile.txt | uuencode prova.tgz | mail -s "Oggetto della mail"[Invio]

31.12   Associare un file di testo ad un messaggio da riga di comando

Conosco il comando mail -s "soggetto del messaggio" ma poi non riesco a capire come fare per associare anche un testo al messaggio.

__________

$ mail utente@server -s "Soggetto del messaggio" < file.txt[Invio]

oppure:

$ cat file.txt | mail -s "Soggetto del messaggio" utente@server[Invio]

31.13   Inviare messaggi ad intervalli di tempo regolare

Vorrei spedire lo stesso messaggio allo stesso indirizzo ogni 30 minuti per un periodo indeterminato di tempo. Come posso fare?

__________

Lo puoi fare con questo script (shell tcsh):

#!/bin/tcsh

touch go_on
while(1)
        if (-f go_on)   then    
                mail indirizzo < file.in
                sleep 3 
        else
                break
        endif
end

così, fino a quando non cancelli il file go_on, ogni tre secondi verrà spedito un messaggio contenente il file file.in (in cui puoi scrivere quello che vuoi) all'indirizzo che scrivi al posto di indirizzo.

31.14   Applicazione per eliminare duplicati di posta elettronica

Come faccio ad eliminare i duplicati dei messaggi di posta elettronica?

__________

Il programma formail ha un'opzione per togliere i duplicati, controllando la stringa di identificazione che viene via via memorizzata in un file temporaneo durante la scansione della mailbox.

In particolare, ecco lo script che ho costruito:

#!/usr/bin/bash
> cache.tmp
cp $1 $1.original
formail -D 2000000 cache.tmp -s <$1 > x.tmp
cp x.tmp $1
rm x.tmp

Lo script l'ho chiamato dedup. Occorre lanciarlo nella directory dove stanno le cartelle (in formato MBOX), tipicamente ~/Mail, mettendo come argomento il nome della cartella stessa. Il parametro dopo -D rappresenta la dimensione massima (impostabile a piacere) che deve avere il file temporaneo.

Nel caso di più cartelle di posta, ecco qui un altro script che automatizza ogni cosa:

#!/usr/bin/bash
export MAILDIR=~/Mail
export PROGDIR=~/scripts
cd $MAILDIR
rm cmd
rm .*.index
ls -1 > lista
awk '$1!="lista" && match($1,"dedup")==0 {printf("echo \042Esamino mailbox
%s.\042\n$PROGDIR/dedup %s\n",$1,$1);}' lista > cmd
chmod 755 cmd
./cmd
rm -f cmd cache.tmp lista
cd

ovviamente cambiando le directory secondo il proprio ambiente. Lo script, che ho chiamato dedup_all, in pratica prepara la lista delle cartelle, poi con awk crea uno script che richiama lo script mostrato prima per ogni cartella da ripulire. Alla fine dell'elaborazione, oltre alle cartelle ripulite, si hanno a disposizione anche le cartelle originali (qualora qualcosa fosse andato storto). Esse, col suffisso .original, possono benissimo essere cancellate se si vede che l'operazione è andata a buon fine.

31.15   File .forward

Quale è la sintassi esatta del file .forward, per poter reindirizzare le e-mail che mi arrivano ad un indirizzo e-mail verso un altro indirizzo?

__________

devi specificare l'utente (o gli utenti separati da una virgola), se vuoi ad esempio che venga fatto un reindirizzamento completo imposta il file $HOME/.forward a:

indirizzo destinatario

se invece vuoi un duplicato delle mail:

indirizzo1, indirizzo2

31.16   Scegliere la signature in modo casuale

Come è possibile scegliere la signature in maniera casuale?

__________

Con sig_rotate.pl (su <http://www.Freshmeat.net>)

31.17   I client di una rete non riescono ad inviare i messaggi al di fuori della rete stessa

Ho una rete interna con gateway e server di posta sulla stessa macchina. Non riesco ad inviare la posta dall'interno della rete verso l'esterno; dal server invece, tutto funziona.

__________

Devi abilitare il relay per i client. Se non specificato diversamente, sendmail dovrebbe leggere gli ip abilitati nel file /etc/mail/relay-domains. Se non ce l'hai, crealo e inserisci gli ip delle macchine che dovranno usare il gateway come server di posta.

Esempio:

192.168.1.1
192.168.1.2
192.168.1.3

31.18   Scaricare la posta con mutt

Sto cercando di configurare mutt. Riesco a spedire i messaggi, ma se provo a scaricarli, ricevo il messaggio:

l'host POP non è stato definito.

In .fetchmailrc ho messo:

poll popmail.iol.it
proto pop3
user skywalker2 password miapassword
keep

Perché non riesco?

__________

Utilizza questa sintassi:

poll popmail.iol.it proto POP3
user skywalker2 password "tua_password" is tua_login here

In questo modo le e-mail vanno direttamente nella mailbox del tuo utente.

Se invece intendi configurare mutt per scaricare direttamente dal server pop della iol, devi ricompilarlo col supporto per il pop e scrivere in .muttrc:

set pop_delete #per cancellare le mails dal server
set pop_host="popmail.iol.it"
set pop_port=110
set pop_pass="tua_pass"
set pop_user="skywalker2 

31.19   Come spedire un file allegato con mutt da riga di comando

È possibile spedire un allegato con mutt da riga di comando?

__________

Sì, lo puoi fare con:

$ echo "testo messaggio" | mutt -a "nome_attachment" -s "soggetto" destinatario@dominio.net[Invio]

31.20   mutt, configurare la stringa che introduce il messaggio riportato

Come si fa in mutt a cambiare la stringa di risposta (quella che dice "On Wed, 31 Feb 2010 xyz wrote" o qualcosa del genere)?

__________

Inserisci nel file ~/.muttrc:

set attribution = "On %d, %n wrote"

31.21   mutt, configurare la stringa che indica il vecchio soggetto del messaggio in caso di sostituzione

Quando rispondo e cambio il soggetto del messaggio, vorrei che mutt aggiungesse [Was vecchiosoggetto] come fa pine. Come si fa?

__________

Inserisci nel file ~/.muttrc:

set reply_regexp="^(re([\\[0-9\\]+])*|aw):[ \t]*"

31.22   Colori di mutt nei terminali grafici

Che cosa devo impostare per vedere i colori di mutt anche nel terminale grafico di Gnome?

__________

Prova a scrivere:

$ export TERM=linux[Invio]

e poi lancia mutt.

31.23   Scaricare la posta in automatico

Presto andrò in vacanza e vorrei che il computer scaricasse la posta. Vorrei che tutto funzionasse senza problemi e penso che Linux lo possa fare. (utilizzo fetchmail) Come?

__________

Un crontab chiama un solo script più o meno così:

#!/bin/sh
pon
while ! (/sbin/ifconfig | grep -q ppp0)
do
        sleep 1
done
fetchmail
poff

dove pon è lo script che inizializza il collegamento, e poff chiude il collegamento. Lo script non fa altro che aspettare, scaricare la posta e chiudere il collegamento. Se non c'è posta il collegamento viene chiuso subito, e se ci sono problemi tecnici, fetchmail va in timeout dopo circa un minuto, dopo di che il collegamento viene comunque chiuso.

31.24   File allegati alle e-mail codificati

Mi capita talvolta di ricevere via e-mail degli allegati mime inseriti direttamente nel testo e quindi non decodificati automaticamente dal client e-mail.

__________

Non sono allegati mime ma uuencode e li decodifichi salvando il messaggio e usando il comando:

$ uudecode -o nomefile filesalvato[Invio]

31.25   Alcune configurazioni di postfix

Vorrei chiedere due cose su postfix:

  1. Come faccio a ricevere la posta in locale (tipo /etc/sendmail.cf) perché mi restituisce il solito 'relay denied'.

  2. Procmail non mi divide più le mail in base al mio file  ~/.procmailrc, devo impostare qualcosa in /etc/postfix/main.cf ? tipo:

    mailbox_command = /some/where/procmail</p>

__________

Devi impostare la variabile $mynetworks in main.cf. Oltre a mynetwork devi anche impostare la variabile $mydestination

# The mydestination parameter specifies the list of domains that this
# machine considers itself the final destination for.
#
# The default is $myhostname + localhost.$mydomain.  On a mail domain
# gateway, you should also include $mydomain. Do not specify the
# names of domains that this machine is backup MX host for. Specify
# those names via the relay_domains or permit_mx_backup settings for
# the SMTP server (see sample-smtpd.cf.
#
# The local machine is always the final destination for mail addressed
# to user@[the.net.work.address] of an interface that the mail system
# receives mail on (see the inet_interfaces parameter).
#
# Specify a list of host or domain names, /file/name or type:table
# patterns, separated by commas and/or whitespace. A /file/name
# pattern is replaced by its contents; a type:table is matched when
# a name matches a lookup key.  Continue long lines by starting the
# next line with whitespace.
#
#mydestination = $myhostname, localhost.$mydomain

31.26   Messaggio di errore: Impossibilità di inviare messaggi al di fuori dell'intranet. (unknown recipient)

Ho una piccola rete e ho problemi con la posta elettronica. Se invio una e-mail al di fuori dell'intranet mi risponde che il server SMTP non riconosce il 'recipient' e mi chiede di modificarlo. Accetta soltanto e-mail verso altri utenti dello stesso server. Perché?

__________

Perché la versione di sendmail ha sicuramente un filtro chiamato anti-relay, perciò devi creare un file

/etc/sendmail.cR

e dichiararlo in /etc/sendmail.cf.

in /etc/sendmail.cf:

#######                          #########
####### start antispamming rules #########
#######                          #########
FR-o /etc/sendmail.cR

Scheck_rcpt
# anything terminating locally is ok
R<$+@$=w>       $@ OK
R<$+@$=R>       $@ OK

# anything originating locally is ok
R$*             $: $(dequote "" $&{client_name} $)
R$=w            $@ OK
R$=R            $@ OK
R$@             $@ OK

# anything else i bogus
R$*             $#error $: "550 Relaing Denied"
#######                          #########
####### end antispamming rules   #########

mentre il file /etc/sendmail.cR (nota la R maiuscola) deve avere la struttura

pc1.name.it [192.168.0.2]
pc2.name.it [192.168.0.3]
pc3.name.it [192.168.0.4]
pc4.name.it [192.168.0.5]

Capitolo 32.   Browser (navigatori)

32.1   Sfondo di lynx

Qualcuno di voi ha idea di come si controlla il colore dello sfondo di lynx?

__________

Puoi creare un alias in .bashrc del tipo:

alias lynx='xterm -bg X -fg Y -fn 10x20 -geometry 80x25 -e lynx'

dove:

inoltre puoi configurare i colori del testo, dei link e quant'altro nel file /etc/lynx.cfg.

32.2   Rinfrescare e ricaricare (reload) con lynx

Come si fa con lynx a fare il refresh di una pagina?

__________

[Ctrl-L] per il refresh della videata,

[Ctrl-R] per il reload del file che stai leggendo.

Capitolo 33.   News (gruppi di discussione)

33.1   Leggere le news dei gruppi di discussione una volta scollegati - leafnode

Come faccio a leggere le news dopo averle scaricate?

__________

Per leggere le news una volta sconnessi da Internet occorre utilizzare leafnode per scaricare i messaggi. In seguito si può utilizzare il proprio programma preferito. leafnode è un server NNTP concepito per soddisfare un traffico molto ridotto e ben si adatta al leggere e postare news anche se non collegati ad Internet.

Una volta installato, il pacchetto è gestito da inetd. Esso resta in ascolto di richieste sulla porta 119. Per fare questo basta assicurarsi che nel file /etc/inetd.conf sia presente la seguente riga:

nntp    stream  tcp     nowait  root    /usr/local/sbin/leafnode  leafnode

Il percorso dell'eseguibile di leafnode potrebbe essere diverso, anche se solitamente si trova nel percorso riportato.

Bisogna poi effettuare la configurazione del server. Tutto è fatto tramite il file config presente, in /etc/leafnode/ o in /usr/local/lib/leafnode/ a seconda delle distribuzioni. Il file solitamente è commentato e presenta alcuni esempi. Bisogna stabilire da quale server recuperare i messaggi, con la riga:

server = news.mioserver.it  (ad es. news.libero.it, oppure news.tiscalinet.it, ecc.)

Si stabilisce poi dopo quanti giorni gli articoli dovranno essere considerati ormai obsoleti, con la riga:

expire = 7

In questo modo gli articoli più vecchi di una settimana potranno essere eliminati. Questa operazione garantisce di non riempire la directory /var/spool/news di migliaia di messaggi già letti che potrebbero rallentare il server e che comunque non sono di alcuna utilità. È bene quindi di tanto in tanto lanciare (da utente root) il comando texpire che provvede a eliminare i messaggi datati.

Se poi il vostro provider richiedesse l'autenticazione per accedere al server delle news, potete anche aggiungere (o togliere il commento) le righe:

username = nome_utente
password = mia_pass

È possibile specificare un altro server alternativo per i gruppi non presenti nel primo:

supplement = news.altroserver.it

e gli eventuali:

username = nome_utente_2
password = mia_pass_2

Se si sono sottoscritti gruppi particolarmente interessanti di cui si vuole mantenere i messaggi più a lungo, leafnode permette di specificare tempi diversi per i vari gruppi:

groupexpire it.comp.retrocomputing = 20

ed è possibile anche usare gli * per indicare più gruppi della stessa famiglia:

groupexpire it.comp.linux.* = 5

Quanto poi al numero massimo di nuovi messaggi recuperati ogni volta, se ne imposta il valore con:

maxfetch = 500

Se invece si vuole impostare il numero di articoli da scaricare dai gruppi appena sottoscritti, si utilizza:

initialfetch = 100

Per evitare di recuperare messaggi recanti spam, è possibile utilizzare un trucchetto, che però aggira solamente il problema e non lo risolve veramente. Si tratta di fare un controllo su eventuali messaggi inviati a più gruppi di discussione. Attenzione però che si potrebbero perdere articoli che non erano vera spam!

maxcrosspost = 5

Leafnode permette anche di impostare un'età massima per gli articoli recuperati, evitando di scaricare articoli ormai vecchi ma ancora presenti sul server del provider:

maxage = 10

Vi sono poi una serie di altre opzioni di controllo meno usate ma che si possono rivelare utili in alcuni casi:

maxlines = 100          (recupera i messaggi con massimo 100 linee)

minlines = 2            (non scarica i messaggi con meno di 2 linee)

maxbytes = 50000        (non scarica i messaggi più grossi di 50000 bytes)

timeout_short = 1       (dopo un giorno smette di scaricare gruppi accidentalmente
                         aperti; il valore predefinito è di 2 giorni)

timeout_long = 6        (dopo 6 giorni che un gruppo non viene più letto esso smette
                         di scaricarlo; il valore predefinito è 7 giorni)

Terminata la configurazione di base, leafnode è pronto per entrare in azione. Basta riavviare la macchina in modo che si rendano effettive le nuove configurazioni fatte. Dopo si lancia la connessione ad Internet e, da utente root, si lancia fetch (o fetch-news o ancora fetchnews, dipende dalla versione di leafnode che si utilizza).

A questo punto, la prima volta, leafnode inizia a recuperare la lista dei gruppi presenti sul server del provider (questa operazione può richiedere svariati minuti, durante i quali si vedrà il modem ricevere dati).

Quando si ripresenterà la shell dei comandi, vorrà dire che la lista dei gruppi è stata recuperata. A questo punto bisogna entrare nel programma per leggere le news, e, dopo aver impostato come server nntp «localhost» (o il nome che si è dato alla propria macchina), entrare nei gruppi che interessano.

Non basta sottoscriverli, bisogna proprio entrarci come per leggerne gli articoli. All'interno si troverà un messaggio fantoccio che informa che sul server (cioè la propria macchina) sta girando leafnode e che il gruppo è stato marcato per il recupero degli articoli la successiva volta che si lancerà fetch o i comandi descritti sopra. Ora si esce dal programma e si lancia, sempre da root, di nuovo fetch o i comandi descritti sopra e saranno scaricati i messaggi dei gruppi che si sono appena sottoscritti e visitati.

Bisogna notare che il comando di recupero dei messaggi va lanciato come root o come utente «news».

Una volta restituita la shell, leafnode avrà scaricato i messaggi dei gruppi, e sarà possibile chiudere la connessione con il provider.

Qualora la sottoscrizione di alcuni gruppi risulti vana se eseguita dal programma adibito alla lettura dei messaggi, occorrerà provare a sottoscriversi a tali gruppi mediante la creazione di file vuoti (di nome uguale al gruppo cui si vuole iscriversi) con i seguenti comandi:

# touch /var/spool/news/interesting.groups/nome_gruppo[Invio]

33.2   Leafnode - skipping it.xxx.yyy from now on

Perché dopo pochi giorni che mi sono iscritto ad un newsgroup, leafnode mi dice:

skipping it.xxxx.yyyyy from now on.

e non mi scarica più le news? Come posso evitarlo?

__________

Puoi oltrepassare questo inconveniente ricreando ogni volta i file presenti in /var/spool/news/interesting.groups/.

Automatizza il tutto con uno script: il mio è:

rm -rf /var/spool/news/interesting.groups/*
touch /var/spool/news/interesting.groups/comp.os.linux.setup
touch /var/spool/news/interesting.groups/it.comp.linux.setup
touch /var/spool/news/interesting.groups/it.comp.linux.pluto
touch /var/spool/news/interesting.groups/it.comp.linux
fetch -vvv #o fetchnews a seconda della versione di leafnode che utilizzi

Capitolo 34.   IRC - chat

34.1   IRC, controllare le intrusioni

Come è possibile controllare eventuali tentativi di connessione al mio sistema? Mi servirebbe specialmente quando utilizzo IRC.

__________

Esegui:

$ xconsole -fn 6x10 -geometry 485x100+470+0 -file /dev/xconsole &[Invio]

/dev/xconsole deve avere il permesso di lettura ovviamente.

Capitolo 35.   Scaricamento file - riproduzione (mirror) di siti

35.1   Programmi per Linux per scaricare i file ad intervalli

Esiste un programma per Linux tipo Go!zilla oppure Getright di Windows?

__________

gtm per Gnome; wget per riga di comando.

35.2   wget, riprendere scaricamenti interrotti

Ho bisogno di scaricare un grosso file in più riprese. Ho provato con:

$ wget -n indirizzo[Invio]

ma purtroppo ogni volta che lo rilancio fa ripartire lo scaricamento dall'inizio.

__________

La sintassi corretta è:

$ wget -c indirizzo[Invio]

tieni presente che l'opzione -c funziona solo se non c'è un proxy di mezzo e se il reget (la funzione che rende possibile questa caratteristica) è abilitato sul server, anche se è quasi sempre presente. Per ciò che riguarda il proxy, è possibile impostare due variabili:

export ftp_proxy=proxy.domain.com:8080
export http_proxy=proxy.domain.com:8080

una volta dichiarate, puoi attivare o meno il proxy con l'opzione -Y

$ wget -Y on indirizzo[Invio]

In questo caso non funziona l'opzione -c

35.3   Riprendere lo scaricamento interrotto di un file in FTP

Come si riprende lo scaricamento di un file da un sito FTP se se ne è scaricato solamente una parte?

Se il server ftp lo accetta, il comando è reget altrimenti utillizza wget con l'opzione -c

35.4   Wget di un sito e dei link che contiene

Voglio copiare il contenuto di un sito fino ai primi 5 link consecutivi, anche quelli che puntano fuori dal dominio del sito di partenza, ma non riesco. Mi copia solo quello che c'è nel dominio e non vuole andare fuori.

__________

$ wget -r -k -l 5 -H http://sito[Invio]

35.5   Effettuare il mirror di un sito

Come si fa il mirror di un sito?

__________

Con wget, dai il comando:

$ wget -m http://www.sito.it[Invio]

e fai il mirror completo di http://www.sito.com

35.6   Mirror di una porzione di sito FTP.

Se volessimo fare il mirror di una directory di un sito FTP e di tutte le sue discendenti, dovremo dare il comando:

 wget --mirror --relative --no-parent -nH 
 "ftp://anonymous@ftp.pluto.linux.it/pub/pluto/ildp/AppuntiLinux"

ammesso che il server FTP principale sia: ftp.pluto.linux.it e che il ramo di directory cui siamo interessati sia /pub/pluto/ildp/AppuntiLinux.

35.7   Wget con i proxy

Mi servirebbe un qualcosa di simile al wget che però supporti i server proxy

__________

Devi impostare le variabili:

# export http_proxy="http://proxy.server.it:8080/"[Invio]

# export ftp_proxy="http://proxy.server.it:8080/"[Invio]

naturalmente si usa -Y per abilitare l'uso del proxy:

# wget -Y on URL[Invio]

attenzione che però, usando il proxy, il wget -c non funziona (per la cronaca -c significa continua da dove ti eri fermato)

35.8   wget di un sito ftp, fornire utente e password

Come si può indicare a wget la password da utilizzare per scaricare un file mediante ftp?

__________

Dal man di wget:

 You may encode your username and/or password to URL using the form:

 ftp://user:password@host/dir/file

che però non funziona se c'è un proxy di mezzo.

35.9   Permessi dei file scaricati mediante FTP

Ho installato un server Linux (Debian GNU/Linux 2.1 Kernel 2.2.10), funziona tutto ma ho il seguente problema:

quando, via ftp, scarico sul server un file, i permessi di quest'ultimo vengono impostati così: rw-r-----

__________

Si deve cambiare l'umask. Prova a dare il comando:

# umask 000[Invio]

all'utente ftp Così ottieni:

rw-rw-rw-

35.10   Scaricamento file notturno automatizzato rateale

Come posso automatizzare lo scaricamento di file in orari particolari?

__________

Ingredienti: wget, uno scriptino bash, un paio di demoni.

Innanzitutto se sulla nostra distribuzione ancora non fosse presente vediamo di procurarci wget, un programma potentissimo, estremamente facile da utilizzare, avente la capacità di scaricare file o interi siti da Internet, offrendo tra l'altro la possibilità di riprendere i download interrotti.

Poi dobbiamo decidere se e quando operare lo scaricamento dei file da noi scelti. Il momento migliore chiaramente è quando la riga è meno intasata, ossia verso le 5 del mattino.

Linux incorpora almeno un paio di demoni che possono fare al caso nostro: Crond (se pensiamo di ripetere ad intervalli regolari nel tempo una certa operazione, tipo tutti i giorni alle 5 del mattino) o Atd (per operazioni univoche. Consultiamo le relative pagine di manuale.

Vcron, è molto semplice da utilizzare e mi evita di dovermi ricordare la noiosa sintassi del crontab.

A questo punto ci scriviamo un piccolo script che, richiamato da cron ad una certa ora, si colleghi ad Internet, lanci wget, al termine dello scaricamento dei file interrompa la connessione, e spenga il pc.

#!/bin/sh
#d_script = download script
#Script di Roberto Veronico
#(da utilizzare con Vcron ma non necessariamente)

###lancio la connessione in secondo piano
/usr/sbin/pppd &

###aspetto che si colleghi
until
test -f /var/run/ppp0.pid
do cat /dev/null
done

###aspetto 15 secondi per l'assegnazione dell'ip dinamico
a=$[SECONDS]
b=$[$a+15]
until test $[SECONDS] -gt $[b]
do cat /dev/null
done

###lancio wget che scaricherà quanto scritto in d_file
/usr/bin/wget -c -i /home/rob/d_file -P /home/rob/temp/download
;

###uccido la connessione
kill `cat /var/run/ppp0.pid`

È sufficiente quindi avere l'indirizzo del file da scaricare nel file /home/rob/d_file (o, ovviamente, modificare il nome del file da scaricare nello script).

Parte iii.   Programmi

Capitolo 36.   Installazione ed esecuzione programmi

36.1   Installazione di programmi

Come si installano i programmi forniti come tar.gz o tgz?

__________

Dopo avere scompattato i pacchetti, conviene leggersi i file README ed INSTALL che troviamo nella directory dove sono stati scompattati i file e che spiegano tutto quello che ti serve sapere in maniera molto semplice.

Generalmente i comandi che dovrai dare sono:

  1. ./configure

    (Verifica se il tuo sistema ha tutto quello che serve per la compilazione del programma)

  2. make

    (Compila tutti i sorgenti)

  3. make install

    (Copia i file compilati nelle adeguate directory)

  4. make clean

    (Elimina eventuali file temporanei generati durante la compilazione)

Ripeto però che è sempre meglio leggere la documentazione, perché non sempre il procedimento è così semplice.

Talvolta invece i pacchetti che scarichi sono già compilati, in quel caso non devi far altro che copiarteli nella directory desiderata (o specificata nei README) e chiamarli all'occorrenza.

36.2   Come evitare di mettere sempre ./ davanti il nome di un eseguibile

Quando lancio un programma è necessario fare precedere il nome del programma da ./? C'è il modo di evitarlo?

__________

in .bash_profile della tua home directory aggiungi in fondo alla dichiarazione della variabile PATH, un due punti seguito da punto (:.).

36.3   Come non far chiudere i programmi lanciati da terminale grafico alla chiusura del terminale stesso

Se lancio un programma da un terminale e poi chiudo il terminale stesso, anche il programma che ho lanciato si interrompe. C'è un modo di evitarlo?

__________

Se nel terminale grafico utilizzate [Ctrl+D] il terminale si chiude ma il processo sopravvive. al [Ctrl+D] equivale il comando:

$ exit[Invio]

36.4   Come chiudere subito il terminale grafico dopo aver lanciato un'applicazione

Voglio solo l'applicazione, non mi interessa che il terminale sopravviva. Come posso lanciare l'applicazione senza che rimanga attivo il terminale?

__________

Per avviare qualcosa da terminale grafico e subito chiudere lo stesso, scrivi:

$ applicazione & exit[Invio]

36.5   Impossibilità di lanciare applicazioni X da root - Red Hat 6.1

Da quando ho installato la Red Hat 6.1 non riesco più a lanciare programmi X come root da una finestra di terminale.

__________

È tutta una questione di permessi. Devi prima dire (da utente comune) che è possibile collegarsi a quell'X-Server, poi da root (o anche da un'altro utente) devi dire che DISPLAY punta a te.

In pratica:

36.6   Visualizzazione della reale posizione dei programmi

Come posso sapere dove risiede un programma che è eseguibile in ogni parte del file system grazie alla facoltà conferitagli dalla variabile PATH?

Con:

$ which nome-comando[Invio]

36.7   Applicare patch ai programmi

Come applico una patch ad un programma?

__________

Ti posizioni nella directory dove è stata installata la versione precedente e digito:

$ patch < patchfile[Invio]

Va fatta attenzione, però, perché se in questo modo vengono restituiti molti errori, probabilmente va usata l'opzione -p (dipende da come è stata creata la patch).

36.8   file .elf

Ho scaricato un file con estensione .elf.tar Il tar lo conosco ma ELF cos'è e come si installa?

__________

.elf vuol semplicemente dire che il file eseguibile (già compilato) è in formato elf (Executable Linkable Format). Linux usa librerie collegate dinamicamente, il che gli permette di avere eseguibili più piccoli e quindi un minor consumo di memoria. Le librerie collegate dinamicamente (e quindi gli eseguibili ad essi collegati) possono essere di diversi formati, ma quello più usato al momento è l'elf, che ha ormai soppiantato il vecchio a.out.

36.9   Linux e applicazioni SCO Unixware

È possibile far girare alcune applicazioni di SCO Unixware con Linux?

__________

Esiste iBCS che è un modulo che permette di far girare programmi scritti per SCO Unixware. Dovrebbe essere disponibile con tutte le distribuzioni.

36.10   Documentazione allegata ai pacchetti

Dopo avere scompattato un pacchetto, dove posso trovare eventuali informazioni?

__________

Generalmente il programma viene commentato nel file README (caratteristiche, aggiornamenti della nuova versione, ecc.) e le modalità di installazione risiedono di solito nel file INSTALL. Tutti e due i file si trovano nella directory dove è stato scompattato il pacchetto.

Dopo l'installazione, è a volte possibile trovare nella directory /usr/doc una directory (che generalmente ha lo stesso nome del programma installato) che contiene il manuale del programma o comunque documentazione varia.

Capitolo 37.   File core

37.1   Spiegazione file core

Cosa sono i file core?

__________

Quando un programma termina inavvertitamente, cioè con qualche errore, il kernel, che deve terminare il processo, scrive un'immagine del processo in memoria su questo file core. Da quel file si dovrebbe risalire al tipo di errore e correggerlo.

37.2   Visualizzazione e debug del contenuto di un file core

Come si fa a visualizzare il contenuto dei file core?

__________

Il file core è, di solito, il risultato di un 'Segmention fault' che si verifica quando un programma 'fa a pugni' con la memoria (es. overflow) e contiene una fotografia della memoria quando l'errore si è verificato. Questo file va analizzato con un programma apposito (es. gdb)

37.3   Evidenziare il responsabile del core

Come faccio a sapere quale programma ha provocato l'errore e quindi il file core?

__________

Si deve andare nella directory del file core, e digitare:

# size core[Invio]

37.4   Disabilitare i file core

Qualcuno ricorda come impostare il file .profile affinché un utente possa disabilitare i file core nella propria home directory?

__________

in /etc/profile c'è una riga:

ulimit -c 1000000

se la cambi con:

ulimit -c 0

non saranno più generati i file core...

37.5   Eliminazione di tutti i file core

Qualcuno mi potrebbe spiegare come si eliminano tutti i file core?

__________

Con il seguente comando:

# find / \( -name core \) -exec rm {} \;[Invio]

o meglio ancora:

# find / -name core -type f -xdev -exec rm {} \;[Invio]

Capitolo 38.   I pacchetti - generalità

38.1   Conversione pacchetti

Come posso convertire un pacchetto [tar|deb|rpm] in un altro formato?

__________

Con il programma alien, che serve a convertire da/a vari formati. È anche disponibile come pacchetto deb/rpm nella maggior parte delle distribuzioni. È preferibile prendere il pacchetto alien creato per la propria distribuzione, in modo che il risultato della conversione sia il più possibile coerente con il resto del sistema.

38.2   Utilizzare rpm su Slackware

Visto che uso la Slackware 3.6 c'è un modo per installare i programmi per le versioni Red Hat, Suse, ecc. usando i file di istallazione delle stesse (.rpm se non sbaglio)? O questi sono già degli eseguibili?

__________

Si possono convertire i pacchetti rpm in tgz con il comando:

# rpm2targz[Invio]

38.3   Convertire in rpm un tgz

È possibile convertire un file tgz in un file formato rpm?

__________

Se il file compresso è stato predisposto per farlo, allora usa la seguente sintassi:

# rpm -ta myprogram.tar.gz[Invio]

38.4   file .bin

Cosa sono i file .bin? Come li posso decomprimere?

Sono degli eseguibili autoscompattanti: conferisci loro i permessi di esecuzione e lanciali.

Capitolo 39.   I pacchetti - tar.gz, tgz

39.1   Visualizzazione file tar.gz o tgz

Come visualizzo il contenuto di un file tar.gz o tgz?

__________

Devi prima decomprimerlo con gunzip:

# gunzip file.tar.gz (o file.tgz)[Invio]

poi scrivi:

# tar -t file.tar[Invio]

oppure, in un solo comando, con:

# tar -tzf file.tar.gz[Invio]

39.2   Scompattare i file tgz o tar.gz

Come scompatto un file tar.gz (o tgz)?

__________

Con:

# tar -zxvf file.tar.gz (o tgz)[Invio]

39.3   Disinstallazione programmi originariamente in formato tar.gz - pt. 1

Se voglio disinstallare un programma che originariamente era stato installato da un pacchetto con estensione tar.gz come faccio?

__________

Puoi usare:

installwatch

che, se lanciato al momento del 'make install', tiene traccia di tutto ciò che accade durante l'installazione. Se vuoi puoi crearti un file di testo per ogni programma che installi e ripescare così a distanza di tempo i file da cancellare.

Alcuni sorgenti permettono anche:

# make uninstall[Invio]

In ogni caso puoi leggerti il Makefile e controllare a livello del tag install quali sono le directory in cui il programma viene installato.

39.4   Disinstallazione programmi originariamente in formato tar.gz - pt. 2

Quando si compila un'applicazione, presa da un file .tar, con ./configure, make , ecc. come si fa per disinstallarla? Soprattutto poi se si vuole installare una versione più recente della stessa.

__________

Spostati nella directory in cui hai installato i sorgenti ed esamina il Makefile se ha le opzioni per make uninstall o make distclean.

A volte si trovano anche dei file log con l'elenco dei file installati e la loro posizione.

39.5   Creazione archivi compressi personalizzati

Come posso salvare in un archivio compresso le directory che mi interessano?

__________

Con:

# tar zcvf nome_archivio.tar.gz /etc /home /root /var /usr/local[Invio]

39.6   Creare archivi *.tar.gz con la data nel nome del file

Come posso creare uno script che mi archivi in un file tar.gz una directory e che nel nome del file contenga la data della creazione?

tar zcvf nome-`date +%d%m%Y`.tar.gz /directory[Invio]

39.7   Creazione archivi compressi personalizzati sequenziali su dischetti

Come archivio su dischetti sequenziali la directory /home e le discendenti?

Con:

# tar -c -f /dev/fd0 -L 1440 -M -v /home[Invio]

39.8   Ripristino archivi compressi personalizzati sequenziali su dischetti

Come ripristino il contenuto dell'archivio sequenziale su dischetti?

__________

mi posiziono nella directory in cui voglio ricreare il contenuto dell'archivio e digito:

# tar -x -f /dev/fd0 -L 1440 -M -v -p --same-owner[Invio]

Capitolo 40.   I pacchetti - deb

40.1   dselect, una miniguida

Trovo difficoltà ad utilizzare il dselect. Qualcuno mi spiega i rudimenti?

__________

dselect è un programma molto comodo anche se al primo approccio può sembrare un po' ostico. Parte con:

# dselect[Invio]

Scegliere da Access dove sono i pacchetti (multi_cd o altro).

Poi scegliere Select che serve a selezionare i pacchetti che ci interessa installare o rimuovere.

Appare subito l'help, premiamo la barra spaziatrice per eliminare questa schermata.

Ci appare una lista di pacchetti.

Con i tasti cursore cerchiamo quello che vogliamo installare o rimuovere oppure cerchiamalo con lo slash (/). (lo slash è quello sopra il 7 non quello del tastierino numerico).

Se il primo risultato della ricerca non ci soddisfa possiamo cercare la voce successiva con il backslash (\).

Una volta trovato il pacchetto che ci interessa, premiamo:

Il + ed il - sono quelli vicino l'[Invio], non quelli del tastierino numerico. Se non ci sono dipendenze, non appare nulla; a quel punto premiamo [Invio] per uscire; dopo ciò premiamo [Invio] su Install ed il pacchetto verrà installato oppure premiamo [Invio] su Remove se vogliamo disinstallarlo.

Se invece ci sono dipendenze, (dopo un messaggio di avvertimento che elimineremo con la barra spaziatrice) appariranno una serie di pacchetti necessari o consigliati.

Se ad esempio io seleziono il modulo php3 per Postgresql (premendoci sopra il tasto '+'), mi apparirà la seguente lista di dipendenze: apache, postgres, postgres_doc, apache_doc, php3, ecc.

Sulla lista di dipendenze, si può sempre agire con i tasti + o - per installare o rimuovere le eventuali dipendenze. (Posso infatti ad esempio cliccare - su postgres_doc se non voglio installare la documentazione).

Se si è installato un pacchetto che per qualche ragione non è stato configurato al momento dell'installazione, selezionare Configure.

Scegliere Quit per uscire.

40.2   Installazione pacchetti deb

Come installo un pacchetto deb?

__________

# dpkg -i nome.deb[Invio]

Come rpm -i, però, quest'ultimo non tiene conto delle dipendenze tra pacchetti; è preferibile configurare apt-get indicando in /etc/apt/sources.list da dove prendere i pacchetti (se dal CD o dalla rete), dare:

# apt-get update[Invio]

per aggiornare l'elenco dei pacchetti disponibili;

e poi:

# apt-get install nomepacchetto[Invio]

questo controllerà che non ci siano dipendenze non soddisfatte e, in caso, proporrà di installare anche gli altri pacchetti necessari.

40.3   Aggiornamento pacchetti deb

Come aggiorno un pacchetto deb?

__________

Il comando è lo stesso che per l'installazione:

# dpkg -i nome.deb[Invio]

o:

# apt-get install nome[Invio]

se il pacchetto proposto è una versione più recente di quello già installato viene fatto l'aggiornamento.

40.4   apt-get

Come funziona questa utility per aggiornare i pacchetti in Debian GNU/Linux?

__________

in /etc/apt/sources.list metti:

deb ftp://ftp.it.debian.org/debian unstable main contrib non-free (oppure stable)

con:

# apt-get update[Invio]

aggiorni le liste in /var/apt/state/list, mentre con:

# apt-get install nome_pacchetto_senza_numero_versione[Invio]

aggiorni i pacchetti; tieni presente che se ci sono dipendenze da rispettare, se ne occupa apt-get

40.5   Disinstallazione pacchetti deb

Come disinstallo un pacchetto deb?

__________

Con:

# dpkg -r nome[Invio]

È consigliabile prima provare a fare:

# dpkg --no-act -r nome[Invio]

per controllare se la disinstallazione del pacchetto compromette l'integrità del sistema (ci possono essere altri pacchetti che dipendono da quello) oppure:

# apt-get remove nome[Invio]

40.6   Verifica installazione pacchetti deb

Come verifico la corretta installazione del pacchetto?

__________

Con:

# dpkg -s nome[Invio]

rende, oltre allo stato di installazione, anche altre informazioni sul pacchetto (come la descrizione del suo contenuto e i pacchetti da cui dipende).

# apt-get check[Invio]

controlla la corretta installazione dei pacchetti del sistema.

40.7   Provenienza di un file da un pacchetto deb

Da quale pacchetto è stato installato il file std.elm?

__________

Con:

# dpkg -S std.elm[Invio]

ovviamente va dato anche l'eventuale percorso per std.elm.

40.8   Dipendenze di un pacchetto deb installato

Come faccio a sapere le dipendenze di un pacchetto già installato nel mio sistema?

__________

Lo puoi fare con il comando:

# dpkg -s nome_del_pacchetto[Invio]

tra le altre informazioni, troverai infatti la riga con:

Depends: ......

40.9   Descrizione pacchetti deb ed elenco file

Come posso avere una descrizione del pacchetto?

__________

Con:

# dpkg -s nome[Invio]

se questo è installato,

# dpkg --info nome.deb[Invio]

se non è installato.

Per sapere quali file sono contenuti in un pacchetto, se è installato:

# dpkg -L nome[Invio]

se non lo è:

# dpkg --contents nome.deb[Invio]

ne visualizza invece l'elenco dei file.

40.10   Visualizzazione elenco pacchetti deb installati

Come posso avere una lista dei pacchetti installati?

__________

Con:

# dpkg -l[Invio]

Capitolo 41.   I pacchetti - rpm

41.1   Installazione pacchetti rpm

Ho scaricato un programma in formato rpm. Come si installa?

__________

Con:

# rpm -i nome.rpm[Invio]

oppure:

# rpm -ivh nome.rpm[Invio]

(installa il pacchetto con dettagli e barra di progressione)

41.2   Aggiornamento pacchetti rpm

Come aggiorno un pacchetto rpm?

__________

Con:

# rpm -U nome.rpm[Invio]

oppure:

# rpm -Uvh nome.rpm[Invio]

(aggiorna il pacchetto con dettagli e barra di progressione)

41.3   Disinstallazione pacchetti rpm

Come disinstallo un pacchetto rpm?

__________

Con:

# rpm -e nome_pacchetto_senza_versione[Invio]

41.4   Verifica installazione pacchetti rpm

Come verifico la corretta installazione del pacchetto?

__________

Con:

# rpm -V nome_pacchetto_senza_versione[Invio]

41.5   Provenienza di un file da un pacchetto

Da quale pacchetto è stato installato il file std.elm?

__________

Puoi saperlo con:

# rpm -qf std.elm[Invio]

41.6   Descrizione pacchetti rpm

Come posso avere una descrizione del pacchetto?

__________

Con:

# rpm -qpi nome.rpm[Invio]

41.7   Visualizzazione elenco pacchetti installati

Come posso avere una lista dei pacchetti installati?

__________

Con:

# rpm -qa[Invio]

41.8   Verifica di tutti i pacchetti installati

Come faccio a verificare tutti i pacchetti installati?

__________

Con:

# rpm -Va[Invio]

41.9   Corrispondenza tra rpm originale e installazione sul computer

Come verifico che ci sia corrispondenza tra quanto è installato e il pacchetto originale?

__________

Con:

# rpm -Vp nome.rpm[Invio]

41.10   Installare rpm su destinazione diversa da quella predefinita

Come installare gli rpm in directory diverse da quelle predefinite?

__________

Con:

# rpm -i --prefix percorso_dove_installare file.rpm[Invio]

Capitolo 42.   La compressione - *.gz *.bz2 *.zip

42.1   Compressione file

Come comprimo un file?

__________

Con:

$ gzip file[Invio]

42.2   File .gz

Cosa è un file .gz?

__________

è un file compresso con gzip e si decomprime con:

$ gzip -d file[Invio]

oppure con:

$ gunzip file[Invio]

42.3   Decompressione sequenziale

Ho una serie di file compressi mediante gzip. Ora dovrei decomprimerli tutti. Il comando:

gunzip *.gz [Invio]

non funziona, come devo fare?

__________

Crea ed esegui questo script:

----------------------
for file in `ls *.zip`
do
      gunzip $file
done
----------------------

42.4   file tar.bz2

Ho trovato su un CD un file *.tar.bz2. Come faccio a decomprimerlo?

__________

Con bzip2:

$ bzip2 -d nomefile.tar.bz2 ; tar -xvf nomefile.tar[Invio]

o:

$ tar -xIvf nomefile.tar.bz2[Invio]

Parte iv.   X

Capitolo 43.   Avvio, conclusione, configurazione e risoluzione

43.1   Cambio desktop manager in RH 6.0 e versioni successive

Volevo cambiare desktop manager, ma non riesco a trovare nessun file .xinitrc da nessuna parte. È mai possibile ciò? come posso fare ?

__________

Semplicemente, apri una finestra del terminale, scrivi switchdesk, e poi scegli il desktop manager che preferisci.

43.2   Versione server X

Come faccio a sapere la versione del mio server X?

__________

Con il comando:

# X -version[Invio]

Restituisce versione, data di rilascio, sistema operativo, driver supportati, ecc.

43.3   Font true type con XFree 4

XFree 4 gestisce i true type «nativamente» senza xfs, la soluzione più semplice è eliminare xfs. I caratteri true type vanno nella loro directory e poi occorre mettere in /etc/XF86Config (o dove troviamo questo file nel filesystem, ad es. in /etc/X11/XF86Config) il percorso dei caratteri a mano e togliere la riga «unix:/1»;

  -----------------------------------------------------
  FontPath /usr/X11R6/lib/X11/fonts/TrueType
  FontPath /usr/X11R6/lib/X11/fonts/100dpi
  FontPath /usr/X11R6/lib/X11/fonts/Speedo
  FontPath /usr/X11R6/lib/X11/fonts/misc
  FontPath /usr/X11R6/lib/X11/fonts/PEX
  -----------------------------------------------------

e così via per qualunque altra directory dei caratteri. Togliendo «unix:/1» si mette fuori causa xfs. X 4.0 gestisce autonomamente i caratteri true type a differenza delle versioni precedenti del server grafico. É possibile a questo punto disinstallare Xfstt.

43.4   Abilitare e disabilitare il login grafico

Come si può fare in modo che all'avvio di Linux non compaia il login dall'ambiente grafico X?

__________

Si deve disabilitare xdm o gdm; Se si utilizza una distribuzione Debian GNU/Linux, basta disinstallare il relativo pacchetto. Se si è in possesso di un'altra distribuzione, un modo per farlo è modificare il file /etc/inittab e dove vedi scritto:

id:5:initdefault:

sostituire il 5 con un 3:

id:3:initdefault:

Un altro modo ancora è eliminare xdm dagli script di inizializzazione.

43.5   Login grafico in Debian

Ho installato la distribuzione Debian ma c'è il login in modalità grafica e vorrei eliminarlo.

In Debian non cambiate il runlevel per eliminare la modalità grafica. La modalità grafica automatica si attiva o disattiva rispettivamente installando o rimuovendo il pacchetto che gestisce il login grafico (che a scelta può essere xdm, gdm o wdm).

43.6   Lanciare un'applicazione che gira sotto X senza gestore delle finestre

Come si fa a lanciare un'applicazione in X senza che in quest'ultimo venga caricato il gestore delle finestre?

__________

Supponiamo che tu debba lanciare Staroffice che risiede in /opt/Office51. Da riga di comando impartisci il comando:

$ xinit /opt/Office51/bin/./soffice[Invio]

(presta attenzione al punto davanti a soffice).

Si aprirà una sessione X con Staroffice. Lo stesso vale per tutte le altre applicazioni.

43.7   Lanciare X puro, senza gestori delle finestre ed altre configurazioni

È possibile far partire X in modo che contenga solo un terminale grafico? Non voglio che vengano caricati i gestori delle finestre ed altre cose.

__________

Esegui i comandi che seguono:

$ X &[Invio]

$ export DISPLAY=:0[Invio]

$ xterm[Invio]

Nota: dopo aver lanciato da console il primo comando, partirà il server grafico; dovrai quindi tornare alla console di prima con [CTRL+ALT+F_num_console].

A questo punto puoi digitare gli altri comandi.

43.8   Cattura delle immagini

C'è un modo per catturare le immagini da X?

__________

sia Gimp che Xv lo permettono;

poi c'è xgrab

oppure c'è il comando xwd ma è da riga di comando:

$ xwd -root > nome.jpg[Invio]

ti cattura l'intero schermo e lo mette in un file che si chiama nome.jpg.

xwud per vedere le immagini senza un editor esterno.

43.9   Come utilizzare xv per cambiare lo sfondo ad intervalli di tempo regolari

Come si imposta xv per cambiare lo sfondo della scrivania ad intervalli regolari di tempo?

__________

Nel mio $HOME/.xinitrc le ultime tre righe sono queste:

cd $HOME
xv -root -bg Black -rmode 5 -flist $HOME/space.list -wait 60 -wloop -viewonly &
exec icewm || exec twm

il comando che lancia xv fa si che legga la lista di file da mostrare nel file space.list (-flist $HOME/space.list);

le mostri nella finestra root (-root);

su sfondo nero (-bg Black);

centrate (-rmode 5);

con pausa di 60 secondi tra l'una e l'altra (-wait 60);

ripetendo ciclicamente (-wloop);

senza mostrare la finestra dei controlli (-viewonly).

43.10   Caratteri troppo piccoli in X ad alte risoluzioni

Ho messo una risoluzione di 1280x1024. Come si può ingrandire la dimensione di tutti i caratteri che vengono comunemente visualizzati?

__________

Il problema nasce dal fatto che X-windows usa, in maniera predefinita, una risoluzione di 75 dpi, mentre i monitor sono ottimizzati per una risoluzione di 96dpi, lo standard di Windows.

La soluzione è passare ad una risoluzione di 100 dpi. Farlo è molto semplice.

Si accede come root; si controlla di avere il pacchetto 100dpi-fonts installato:

# dpkg -l | grep 100[Invio]

o:

# rpm -qa | grep 100[Invio]

si apre il file /etc/X11/fs/config o a seconda delle versioni /etc/X11/xfs/config con un editor, si cercano le seguenti righe che nel file (si trovano una di seguito l'altra):

/usr/X11R6/lib/X11/fonts/75dpi:unscaled,
/usr/X11R6/lib/X11/fonts/100dpi:unscaled,

si inverte l'ordine delle due righe precedenti per ottenere questo:

/usr/X11R6/lib/X11/fonts/100dpi:unscaled,
/usr/X11R6/lib/X11/fonts/75dpi:unscaled,

salvare il file.

Impartire il comando:

# kill -SIGUSR1 $ (pidof xfs)[Invio]

se si riavvia, non è necessario

lanciare di nuovo X.

Ecco alcune modifiche opzionali da fare sempre ad /etc/X11/fs/config:

da:

#100 x 100 and 75 x 75
default-resolutions = 75,75,100,100

a:

#100 x 100 and 75 x 75
default-resolutions=100,100,75,75

43.11   Risolvere il blocco di X senza riavviare il sistema

Mi si è fermato X e l'unica soluzione è stato premere il tasto reset. Se mi ricapita, cosa devo fare?

Di norma ci sono delle alternative. Se la macchina è collegata in rete, si può provare da lì, altrimenti si tenta con [Ctrl+Alt+Backspace] (per uccidere X) o [Ctrl+Alt+Canc] per chiudere il sistema in maniera corretta.

Se neanche questo funziona si può usare JSR: (<http://www.geocities.com/CapeCanaveral/Lab/7731/jsr.html>) che serve per chiudere X o fare il riavvio del sistema tramite i tasti del joystick.

Ultima risorsa: nei kernel 2.2.x si può compilare il supporto per le SysRq Magic:

(alt+sysrq+s, alt+sysrq+u, alt+sysrq+b)

e si dovrebbe ottenere un riavvio pulito. Maggiori informazioni presso: /usr/src/linux/Documentation/sysrq.txt

43.12   Come aumentare le prestazioni del server X

Come posso accelerare X?

__________

Puoi fare i seguenti tentativi:

  1. si determina l'indirizzo in memoria del buffer video esaminando i messaggi del server X durante l'avvio di startx:

    # startx 2> messaggi[Invio]

    L'indirizzo si trova in una riga del tipo:

    S3: PCI: trio32/64 rev 54 linear FB 0xe4000000

    in questo caso è 0xe4000000.

  2. su root si lancia il seguente comando:

    # echo "base=0xe4000000 size=0x200000 type=write-combining" > /proc/mtrr[Invio]

    Il campo size è l'ammontare di memoria video (per il frame buffer) della vostra scheda video.

Per fugare ogni dubbio date un'occhiata al file mtrr.txt nella directory Documentation dei sorgenti del kernel.

L'incremento di prestazioni si vede nelle operazioni che comportano la copia da memoria in memoria video, in alcuni casi i valori sono più che raddoppiati, nel caso di operazioni di disegno da parte dell'acceleratore grafico (linee, rettangoli, ecc) non si ha nessun miglioramento.

Per misurare le differenze di prestazioni ho usato x11perf.

Attenzione i test sono centinaia, se decidete di farli tutti, ci vogliono quasi 4 ore.

Per esaminare il file generato da x11perf (l'output va rediretto sul file in cui si vogliono salvare i risultati) si può usare Xmark

43.13   Capire gli errori del server X

Non mi funziona X, come faccio a capire perché?

__________

Indirizza gli errori in un file:

# startx 2> report_errori[Invio]

e poi dai un:

# cat report_errori[Invio]

43.14   Impostazione risoluzione predefinita di X

Avendo impostato le risoluzioni video 800x600 e 1024x780 come posso scegliere quale delle due avere in maniera predefinita al lancio di X?

__________

Modifica /etc/XF86Config in modo che la risoluzione voluta sia la prima della lista. Per esempio, nel mio /etc/XF86Config ho:

Section "Screen"
  Driver        "accel"
  Device        "Primary Card"
  Monitor       "Primary Monitor"
  DefaultColorDepth     16
  SubSection "Display"
    Depth       8
    Modes       "1600x1200" "1280x1024" "1152x864" "1024x768" "800x600"
"640x480"
  EndSubSection
  SubSection "Display"
    Depth       16
    Modes       "1024x768" "800x600" "640x480"
    Virtual     1024 768
  EndSubSection
EndSection

Poiché DefaultColorDepth = 16, allora le risoluzioni valide sono quelle della quartultima riga (Modes): X mi si avvierà quindi con 1024x768.

43.15   Regolazione profondità dei colori - 1

Come si imposta la profondità dei colori?

__________

Il comando esatto per cambiare la profondità dei colori è:

# startx -- -bpp 16[Invio]

oppure:

# startx -- -bpp 24[Invio]

oppure:

# startx -- -bpp 32[Invio]

Si può anche impostare una riga DefaultColorDepth in /etc/X11/XF86Config, ad esempio:

Section "Screen"
    Driver      "svga"
    Device      "Chips & Technologies CT65550"
    Monitor     "DSTN"
    DefaultColorDepth 16
    Subsection "Display"
        Depth       8
        # Omit the Modes line for the "Generic VGA" device
        Modes       "800x590"
        ViewPort    0 0
        # Use Virtual 320 200 for Generic VGA
    EndSubsection

43.16   Regolazione profondità dei colori - 2

Come posso evitare di impartire il comando per definire la profondità di colori ogni volta? Insomma, invece di creare uno script con il comando:

$ startx -- -bpp 16[Invio]

dove devo definire tale impostazione?

__________

Controlla il file /etc/X11/xdm/Xservers; nell'ultima riga si può impostare la profondità:

:0 local /usr/X11R6/bin/X -bpp 32

43.17   Risoluzione grafica, schermo virtuale

Come faccio a togliere quel fastidiosissimo scorrimento dell'intefaccia di X?

__________

Modifica /etc/X11/XF86Config e commenta le righe virtual nella sottosezione Display della sezione Screen.

43.18   Impostazioni schermo virtuale

Come cambio le modalità dello schermo virtuale?

__________

[Ctrl+Alt +/-] (tastierino numerico)

43.19   Immagine in X decentrata

Quando lancio X tutto va alla meraviglia tranne per il fatto che l'immagine è decisamente fuori asse verso destra (correggo attraverso i pulsanti dello schermo per ora) Come faccio ad evitarlo?

__________

Prova ad aggiustare l'immagine con:

# xvidtune[Invio]

poi copi i valori corretti nel tuo XF86Config.

Dai anche un'occhiata a man xvidtune e all'XFree-Video-Timings HOWTO.

43.20   Ritornare in X dopo avere aperto una console testuale

Dopo aver aperto una nuova console di testo da ambiente grafico con [Ctrl+Alt-Fn] (n=1...6) come faccio a ritornare all'ambiente grafico? Se ritorno alla console dove ho lanciato startx mi trovo solo i messaggi di X

__________

Quella è la console dove hai lanciato X, non quella grafica da cui lo stavi usando. Devi passare alla console grafica contrassegnata dal primo tasto funzione dopo quelli da cui accedi alle console testuali: se ho 6 console, è [F7], quindi:

[Alt+F7]

Per tornare invece da X alla console testuale n,

[Ctrl+Alt-Fn]

Capitolo 44.   Gnome

44.1   Chiusura contemporanea di enlightenment e di gnome panel

Qualcuno di voi riesce a far sì che anche enlightenment si chiuda al comando di Gnome? Se sì, come avete fatto?

__________

Per uscire correttamente da Gnome+enlightenment devi comunque usare il tasto di uscita di Gnome. Per fare in modo che esca pulito hai due possibilità:

  1. nel file xinitrc fai partire il tutto con gnome-session

  2. nel file xinitrc fai partire il tutto con :

        
            enlightenment &
            gmc &
            panel

L'importante è che il panel sia l'ultimo ad essere chiamato e non sia lanciato in secondo piano (&).

44.2   Avvio di Gnome e blocco su schermata grigia

Ho deciso di provare Gnome. Purtroppo capita, che al comando startx appaia la schermata grigia tipica di quando sta caricando il server X e si fermi li per un bel po'; a volte devo uccidere tutto e a volte invece procede tutto regolarmente.

__________

Io ho risolto il problema aggiungendo queste righe nel file rc.local:

rm -rf /var/gdm/*
rm -rf /home/nome_utente/.ICE* /home/nome_utente/.Xauth*
rm -rf /tmp/.ICE-unix /tmp/.X11-unix

Da quel che ho capito sembra che il gdm abbia qualche problema di autenticazione dei client. Direi comunque che si tratti di un problema di gioventù di Gnome.

44.3   Gnome e associazione file html

Sarebbe mio desiderio che cliccando su un file html mi si aprisse lynx e non Netscape (navigatore predefinito). Utilizzo Gnome. Di solito vado nel pannello di controllo - tipo MIME e modifico l'applicazione con cui aprire il tipo di file. Il problema è che qui devo richiedere l'esecuzione in un terminale. Come posso fare?

Inserisci:

 xterm -e lynx %f

Capitolo 45.   X - Gestori delle finestre (window manager)

45.1   Impostare i temi di enlightenment

Con Gnome ho utilizzato per la prima volta enlightenment e ho provato ad aggiungere un tema scaricato da e.themes.org ma non ci sono riuscito. Come faccio?

__________

Metti il tema in:

/root/.englightenment.themes

riavvia enlightenment, lancia la configurazione (di enlightenment, non di Gnome!) e ti ritrovi il tema appena scaricato pronto per l'uso.

Un'altra soluzione: lo sposti in:

/usr/share/enlightenment/themes

e poi dai un:

# gunzip nomefile[Invio]

A questo punto, con il configuratore di enlightenment (e-conf) puoi selezionare il tema.

45.2   Scomparso il pannello di window maker

Ho disattivato il pannello di windowmaker ma non riesco più a farlo comparire! Qualcuno può aiutarmi?

__________

A me era successa la stessa cosa e guardando in un'altra distribuzione ho scoperto che nel file ~/GNUstep/Defaults/WMState si era alterata la riga:

Command = ""; 

all'inizio, c'era un trattino tra gli apici. L'ho tolto e il pannello è tornato.

45.3   Richiamare le finestre nascoste in window maker

Come fate, se avete più finestre aperte, a richiamare quelle momentaneamente in secondo piano? Sono ridotte ad icona ma essendo dietro alla finestra attiva devo ogni volta ridurre questa e richiamare quella che voglio mettere in primo piano. C'è un metodo più veloce?

__________

Se hai più finestre aperte, puoi girare tra di esse con [Alt+Tab] (come in Windows). Se le finestre che vuoi attivare sono minimizzate e le icone sono coperte dalla finestra corrente perché è aperta, aggiungi:

NoWindowOverIcons = YES;

in ~/GNUstep/Defaults/WindowMaker

Inoltre se schiacci sul desktop il pulsante centrale del mouse (o i due pulsanti del mouse insieme) ti appare l'elenco delle finestre attive. Se sposti questo elenco in basso sulla scrivania lasciando in evidenza solamente il titolo di questo elenco, potrai sollevarlo ogni volta che ci passa sopra il mouse. Inoltre questo elenco è sempre in primo piano. Ottieni quindi un elenco delle finestre a scomparsa. Molto comodo.

45.4   Temi Window Maker

Come si fa ad installare un tema per Window Maker? i file tar.gz dove li devo decomprimere?

In ~/GNUstep/Library/WindowMaker/Themes

45.5   Configurare icewm

Come è possibile cambiare le impostazioni di icewm? Come si aggiungono i bottoni sulla barra degli strumenti? Si possono avere icone sulla scrivania?

__________

Devi agire sui file:

menu;preferences;taskbar; toolbar;winoptions

che trovi o in $HOME/.icewm per cambiare le impostazioni solo del tuo account o in /usr/X11R6/lib/X11/icewm (se non li trovi lì fai un find, ovviamente varia da distribuzione a distribuzione) per cambiare le impostazioni di base di tutti gli utenti.

Nel file toolbar puoi aggiungere dei pulsanti per la barra di stato, la sintassi è evidente.

L'unico modo per far apparire delle icone sul desktop è di impostare icewm per farle apparire quando si riduce ad icona una finestra. Va fatto con l'opzione:

MiniMizeToDesktop=1

nel file preferences.

45.6   Sfondo di icewm

È possibile impostare uno sfondo su icewm?

__________

Nella directory $HOME/.icewm dovresti avere i file: menu, preferences, taskbar, toolbar, winoptions.

Se non li hai cercali nel filesystem, crea la directory e copiaceli dentro.

Poi, nel file preferences:

#  Display desktop background centered and not tiled
DesktopBackgroundCenter=0 # 0/1

...serve per impostare lo sfondo centrato o affiancato e...

DesktopBackgroundImage="mieimmagini/sfondo.xpm"

...per impostare l'immagine di sfondo

Se si vuole utilizzare un programma esterno per impostare lo sfondo, bisogna lasciare vuoto il parametro così:

DesktopBackgroundImage=""

45.7   Icewm e immagini di sfondo

Come si fa a mettere una immagine di sfondo su icewm? Ho guardato dentro il file /etc/X11/icewm/preferences, c'è una sezione con una serie di parametri che interessano anche lo sfondo del desktop:

   DesktopBackgroundImage=""

Ho provato ad inserire il percorso di alcune immagini, ma senza risultato. Come posso fare?

Icewm è in grado di gestire solamente immagini di formato .xpm. Puoi comunque usare gimp o qualsiasi editor di immagini per trasformare formati diversi in formati .xpm

Capitolo 46.   Terminale grafico (xterm)

46.1   Chiusura delle applicazioni lanciate da un terminale grafico alla chiusura del terminale stesso.

Perché se sono in modalità grafica e lancio un processo in background da un terminale e poi chiudo il terminale il processo lanciato muore?

Durante la sua «vita», un processo può allocare molte risorse (memoria, finestre, aprire file ecc.). Il sistema tiene traccia di tutto ciò che è legato ad un processo e, quando questo termina, si preoccupa anche di liberare le risorse eventualmente dimenticate dal processo stesso. Questo è utilissimo ad esempio quando un programma genera un «segmentation fault»; dal momento che il processo è terminato in modo anomalo, lascerebbe in giro molta «sporcizia» che viene pulita dal sistema operativo. É il bello di Unix: ecco perché puoi avere una macchina che gira per degli anni senza doverla mai spegnere: perché il sistema si occupa di mantenere pulito sé stesso. Ad esempio, quando dall'interprete dei comandi si impartisce il comando ls, il processo dell'interprete dei comandi lancia un sotto-processo «ls». Tecnicamente, si dice che l'interprete dei comandi esegue una fork() con ls. Dal momento che l'interprete dei comandi è un processo come un altro, se questo viene chiuso, il sistema si occupa di chiudere tutti i sotto processi ad esso collegati, quindi anche eventuali comandi lanciati con l'opzione di spawn (&).

Per evitare che un sotto-processo termini alla chiusura del «genitore», esiste il comando nohup (che significa «No Hang-Up») che assegna come padre del sotto-processo, non l'interprete dei comandi dal quale il sotto processo è stato lanciato, ma init (processo 1) che non può mai essere chiuso, in quanto è il padre di tutti i processi. Per avere un riscontro "grafico" di tutto ciò, lancia qualcosa da un terminale (qualcosa che non si blocca, tipo «top») e poi, da un'altro interprete dei comandi dai:

pstree -p | less[Invio]

e guarda l'albero dei processi.

46.2   Eseguire un'applicazione da terminale grafico dopo avere assunto l'identità di un altro utente

Ho aperto un terminale grafico e avevo l'intenzione, dopo essere diventato momentaneamente utente root tramite il comando su, di lanciare un'applicazione X. Mi viene restituito però il seguente messaggio:

Xlib: connection to ":0.0 " refused by server
Xlib: Client is not authorized to connect to Server
xemacs: cannot connect to x server :0

Se sei diventato root nel terminale questo messaggio è normale. Ogni utente per motivi di sicurezza ha un file nella sua cartella che si chiama .Xauthority che contiene le informazioni per accedere ai vari display locali e remoti che richiedano autenticazione. Se tu non dai all'utente che lancia l'applicativo, il permesso di accedere al Display egli verrà respinto dal server in quanto non è in grado di autenticarsi a questo. Il metodo da utilizzare in questi casi è quello di utilizzare xauth per esportare la chiave di autenticazione nel file .Xauthority di root.

Supponendo che l'utente proprietario del display sia pippo e la sua directory home /home/pippo, quello che devi fare è estrarre la chiave da /home/pippo/.Xauthority e metterla in /root/.Xauthority. Il tutto si traduce nel comando:

xauth -f /home/pippo/.Xauthority extract - :0|xauth merge -[Invio]

Chi utilizza la distribuzione Mandrake deve sapere che il file .Xauthority degli utenti, che ha permessi 600 per motivi di sicurezza, dopo questo comando diventa di proprietà di root, quindi l'utente che è proprietario del Display non può più autenticarsi e non riesce più ad avviare le applicazioni. Su questa distribuzione quindi, oltre al comando sopracitato è necessario il comando:

chown pippo.«gruppo di pippo» /home/pippo/.Xauthority[Invio]

46.3   Colori del terminale grafico

Come si cambiano i colori nel terminale grafico?

__________

Usa le opzioni -fg e -bg per cambiare il colore dei caratteri e dello sfondo.

es.:

$ xterm -fg white -bg black -fn 10x20[Invio]

46.4   Impostazioni predefinite (colori e caratteri) del terminale grafico (xterm)

Vorrei che il terminale grafico avesse un determinato aspetto; mi riferisco alla possibilità di poter cambiare i colori del testo, i colori dello sfondo, il tipo di carattere ecc.

__________

Metti in ~/.Xresources le seguenti righe:

XTerm*foreground: white
XTerm*background: black
XTerm*font: -*-lucidatypewriter-medium-r-normal-sans-14-140-75-75-m-90-*-*

46.5   Login su terminale grafico

Come si fa ad ottenere il login sul terminale grafico (xterm)?

__________

$ xterm -ls[Invio]

46.6   Mancato funzionamento dei terminali grafici in Red Hat 6.0

Perché non mi funzionano i terminali grafici (xterm) sotto Red Hat 6.0? Sono inutilizzabili e al loro interno c'è solo un cursore in alto a sx ma totalmente immobile.

__________

Il problema è in /etc/fstab che nella Red Hat 6.0 viene creato in questo modo:

/dev/hda3               /                       ext2    defaults        1 1
/dev/hda4               swap                    swap    defaults        0 0
/dev/fd0                /mnt/floppy             ext2    noauto          0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,ro       0 0
none                    /proc                   proc    defaults        0 0
none                    /dev/pts                devpts  mode=0622       0 0

Probabilmente avete ricopiato il vostro vecchio fstab in /etc sovrascrivendo l'originale, ma il vecchio file non conteneva l'ultima riga (none /dev/pts devpts ecc.) importantissima, anzi vitale per il funzionamento dei terminali grafici in Red Hat 6.0.

46.7   Tasto 'Canc' nel terminale grafico

Come posso configurare il tasto 'Canc' nei terminali grafici (xterm)? Adesso ha lo stesso comportamento del tasto backspace.

__________

Puoi risolvere con xmodmap.

Se lo lanci con -pke e dirigi l'output su un file e te lo leggi con calma.

Vedrai che è molto inutitivo. Quando hai visto qual è il codice tasto che vuoi impostare (cercando Backspace) lanci:

$ xmodmap -e "keycode xx=KP_Delete"[Invio]

dove xx è il numero che hai ottenuto.

Per trovare il codice tasto si può anche usare xev premendo poi il tasto interessato e leggendo il numero restituito.

La definizione adatta a essere inserita con xmodmap si trova nel file:

/usr/X11R6/include/X11/keysymdef.h togliendo XK_

46.8   Copia ed incolla in X

Qualcuno sa come si possa copiare e incollare il testo tra due finestre di X?

__________

Selezioni con il tasto sinistro del mouse il testo di origine e nella finestra di destinazione clicchi sul tasto centrale (se hai un mouse a 2 tasti clicchi insieme i 2 tasti).

Parte v.   Applicazioni

Capitolo 47.   Editor di testi

47.1   vi, comandi essenziali

Chi mi illustra i comandi essenziali per vi?

__________

i   - Modalità di inserimento alla posizione del cursore
I   - Modalità di inserimento a inizio riga
A   - Modalità di inserimento a fine riga
r   - Sovrascrivere un carattere
R   - Modalità di sovrascrittura
x   - Cancellazione (come tasto Canc)
dd  - Cancellare una riga
:w  - Salvare
:wq - Salva e esce (come ZZ)
:q! - Esce senza salvare

Questi dovrebbero bastare per fare qualche modifica.

47.2   elvis-vi, configurare i caratteri per riga

Come molti uso 'vi' che, nella Slakware è un collegamento ad 'elvis'; pur trovandomi molto bene nell'ordinaria amministrazione tipo modifica dei file o creazione degli stessi, usandolo com mutt mi da dei problemi di ritorno a capo, ovvero se non lo mando a capo a mano, mi fa delle righe di n caratteri che vengono visualizzati in fila indiana e sono molto innervosenti quando vengono letti da un client di posta. Vi chiedo quale sia il file di configurazione per elvis-vi nel quale possa configurare il ritorno a capo dopo una settantina di caratteri (colonne).

__________

Per vi:

Il comando da vi è:

: tw=72[Invio]

(o quanto vuoi che sia).

Crea un .vimrc con dentro scritto:

set tw=72

Per elvis:

scrivi un file .elvisrc nella tua directory home e all'interno di questo metti la riga:

set textwidth=70

Per vim:

la stessa cosa, ma il nome del file è .vimrc

L'opzione è impostata a 0 in maniera predefinita e ovviamente può essere modificata anche all'interno di una sessione vi con il comando:

:set textwidth=65

(Il problema è stato risolto dallo stesso autore della domanda in altro modo vista la particolarità della configurazione dell'editor elvis nella distribuzione Slackware. NdR):

ecco com'è la stringa giusta: in ~/.exrc (o ~/.elvisrc o ~/elvis.rc, a scelta)

:set ttycolumns=num

Capitolo 48.   Applicazioni per comunicazioni telefoniche

48.1   minicom: cambiare le impostazioni

Come si cambiano le impostazioni in minicom?

__________

Con il comando:

# minicom -s[Invio]

Capitolo 49.   Applicazioni fax

49.1   Messaggio di errore: «no dialtone» in invio fax con efax

Non riesco ad inviare fax. Mi restituisce l'errore: «NO DIALTONE»

__________

Va cambiata la stringa di inizializzazione del modem; Bisogna sostituire nel file ~/.efaxrc la riga:

INIT="-iZ -i&FE&D2S7=120 -i&C0"

con questa:

INIT="-iZ -i&FX3E&D2S7=120 -i&C0"

Capitolo 50.   Applicazioni grafica bidimensionale non vettoriale

50.1   Convertire .gif in .png

Come posso convertire delle immagini gif in png?

__________

Con:

gif2png

Greg Roelofs - September 18th 1999, 18:07 EST gif2png is a simple command-line utility to convert images from GIF to PNG format. It automatically preserves transparency, interlacing and text comments, and it can do multiple images in one command (e.g., gif2png *.gif). The distribution also includes a web2png script that can be used to convert an entire web tree; it calls gif2png to do image conversions, then patches IMG SRC tags correctly in referring pages.

Puoi scaricare questo programma OpenSource alla seguente URL:

<http://www.tuxedo.org/~esr/gif2png/>

Capitolo 51.   Applicazioni matematiche

51.1   Programmi per matematica, programmi per fare grafici

Qualcuno sa dirmi se ci sono dei programmi per Linux relativi alla matematica? Del tipo: grafici tridimensionali, sequenze, equazioni parametriche, manipolazione simbolica (derivate, equazioni differenziali, ecc.).

__________

Puoi provare:

R-lab e octave

che sono applicazioni del tipo matlab.

Capitolo 52.   Applicazioni base di dati (database)

52.1   Differenze tra db e dbms

Che differenza c'è tra db e dbms?

__________

Un db è un data base, un archivio cioè un insieme di dati. Chi li gestisce? li gestisce il dbms (Data Base Management System)

52.2   Compilazione php e postgres

ho il seguente problema: quando compilo php con il supporto a postgres (./configure --with-pgsql; make), la compilazione si interrompe con il seguente esito:

/usr/src/packages/SOURCES/php-3.0.12 # make

[...]

functions/php3_pgsql.h:46: libpq-fe.h: No such file or directory
functions/php3_pgsql.h:47: libpq/libpq-fs.h: No such file or directory

[...]

make: *** [internal_functions.o] Error 1

Perché non ci sono quei libpq? È un pacchetto che devo aggiungere? Dove lo trovo?

__________

Nel postgres-devel.

52.3   Problema postgresql + php3

Ho una Debian GNU/Linux 2.1. Questo è l'errore che mi si presenta quando mi connetto ad un archivio con uno script php3:

Unable to connect to PostgresSQL server: connectDB() failed: Is the
postmaster running and accepting connections at 'UNIX Socket' on port
'5432'? in /var/www/prova.php3

oppure

Unable to connect to PostgresSQL server: connectDB() failed: Is the
postmaster running with the '-i option?

Ho provato i vari modi di connessione (mettendo e omettendo il nome del server). Non va sia che l'archivio sia stato creato da un utente apposito (creato con createuser da postgres) che da postgres. Il postmaster funziona molto bene visto che riesco a utilizzare psql normalmente. Nella documentazione c'è scritto che se appare questo errore, o il postmaster non gira (invece gira) o mi connetto al server sbagliato (non mi pare di sbagliare). Il problema è apparso dopo l'aggiornamento del Postgres.

__________

In questo caso è proprio la mancanza dell'opzione -i che nel caso di aggiornamento del PostgreSQL non viene ripristinata.

Per ovviare al problema, devi modificare il file:

/etc/postgresql/postmaster.init

Questo file contiene una riga che serve ad abilitare le connessioni TCP/IP. Questa riga (che probabilmente attualmente è commentata o ha valore 'no'), deve risultare essere qualcosa del genere:

: PGALLOWTCPIP=yes

e ci deve essere anche la configurazione della porta:

: PGPORT=5432

Ci si deve anche ricordare che esiste anche il file pg_hba.conf che ti permette connessioni a distanza.

52.4   PostgreSQL

Ho installato regolarmente il postgres, ma non riesco a creare un archivio. Da cosa dipende?

__________

Dipende dal fatto che si devono creare utenti abilitati alla generazione degli archivi.

La creazione degli utenti è un'operazione che può fare solo l'utente postgres con il comando:

$ createuser nome[Invio]

dando prima il comando:

$ su postgres[Invio]

Se l'utente non è ancora in grado di creare l'archivio (e in realtà neanche l'utente postgres può farlo), allora vuol dire che non è stata inizializzata la struttura delle directory del database di postgres: occorre quindi eseguire:

$ su postgres[Invio]

e:

$ initdb[Invio]

52.5   Esportare database da Microsoft Access a PostgreSQL

É possibile esportare un database da Access a PostgreSQL con il driver ODBC di PostgreSQL. Da <http://www.postgresql.org> occorre scaricare il driver ODBC di PostgreSQL per Windows e poi impostarlo da Windows stesso affinché punti alla sorgente ODBC (la macchina Linux dove c'è PostgreSQL).

Da Access esporti verso quella sorgente le tabelle che ti interessano L'unico problema sta nelle chiavi che non vengono correttamente esportate.

52.6   Creare gli archivi con PostgreSQL

Come si crea un db con PostgreSQL?

$ createdb nomedb[Invio]

(deve essere però un utente abilitato alla creazione degli archivi. Questi poteri glieli conferisce l'utente postgres con il comando createuser)

52.7   Come si fa ad accedere ad un archivio in PostgreSQL?

Per accedere, modificare, aggiungere dati e strutture all'archivio si da il comando:

$ psql nome_archivio[Invio]

(deve essere però un utente abilitato . Questi poteri glieli conferisce l'utente postgres con il comando createuser)

52.8   Messaggio di errore: Unsupported frontend protocol con Postgres

Ho due PC collegati in rete, uno ha Red Hat 5.2 ed un altro la Debian GNU/Linux 2.1 Volevo condividere lo stesso archivio mediante PostgreSQL. Sul server (dove sta l'archivio) ho lanciato il demone postmaster con l'opzione -i.

All'atto però di connettermi all'archivio con:

psql -h 192.168.1.1 db_name

riscontro il seguente errore:

Connection to database 'nome_db' failed.
Unsupported frontend protocol.

Da che dipende?

__________

È un problema di compatibilità tra le due versioni di Postgres. Devono essere necessariamente le medesime. Le due distribuzioni hanno infatti versioni diverse.

Parte vi.   Stampa

Capitolo 53.   Impostazioni generali

53.1   /etc/printcap - la struttura

Qualcuno mi spiega la strutturazione del file /etc/printcap?

__________

È il file letto dal demone lpd e contiene le informazioni relative ai dispositivi di stampa. È diviso in varie sezioni che possono definire stampanti diverse o proprietà diverse della stessa stampante.

Ogni sezione è composta da più righe ognuna delle quali inizia con : e termina con :\ tranne la prima che non ha i : iniziali e l'ultima che termina solo con :

Se non abbiamo linee di commento (che iniziano con #) la prima riga definisce il nome della stampante cui si farà riferimento. Più nomi sono separati dal carattere |:

lp|hpgettoinc:\

In questo caso si usano due nomi per indicare la stessa stampante. Poi viene indicata la directory della coda di stampa:

:sd=/var/spool/lpd/lp:\

poi c'è il limite della dimensione del file che vogliamo stampare e viene lasciato generalmente a 0:

: mx#0:\

poi troviamo il comando che evita la stampa della pagina di separazione tra 2 processi:

:sh:\

poi troviamo l'indicazione del dispositivo che usiamo per stampare:

:lp=/dev/lp0:\

dove si deve sostituire lp0 con il dispositivo del proprio sistema, ed infine troviamo in genere un if cioè un input filter che serve ad invocare quel file che è in grado di gestire una stampa di un file particolare (ps, gif, ecc.):

:if=/var/spool/lpd/lp/filter:

Questo in genere conclude una sezione del file.

53.2   /dev/lp? non trovati

Con la distribuzione Red Hat 6.1 quando provo a configurare la stampante , printtool mi dice che non trova il dispositivo /dev/lp0-1-2.

__________

È un problema della Red Hat 6.1.

In /etc/conf.modules bisogna aggiungere la riga:

alias parport_lowlevel parport_pc
options parport_pc io=0x378,0x278 irq=7,auto

53.3   Red Hat 6.1 e configurazione stampante

Ho installato la Red Hat 6.1 ma non sono riuscito a configurare la stampante. Che operazioni devo compiere?

__________

Nella Red Hat 6.1 hanno tolto il programma che configurava la stampante durante l'installazione. Comunque puoi farlo in X con 'printtool', ma prima devi caricare i giusti moduli per la porta parallela.

in /etc/conf.modules scrivi:

alias parport_lowlovel parport_pc
options parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto

Poi carica i moduli:

# insmod parport[Invio]

# insmod parport_pc[Invio]

# insmod parport_probe [Invio]

# insmod lp parport=0,2[Invio]

lancia il demone lpd:

# lpd[Invio]

o:

# killall -HUP lpd[Invio]

53.4   Impossibilità di stampare - probabile errore nei dispositivi del ghostscript

Ho la Stampante Canon bj200. Le ho provate tutte ma non riesco a stampare.

__________

Il dispositivo (device) del ghostscript bj200 non funziona. Infatti tutte le chiamate che il filtro, sia magicfilter che quello del printtool di Red Hat, fanno al gs è con il device bj200. Ma lui, non funziona.

Prova un altro dispositivo: con epson o ibm proprinter ad esempio.

Alcuni dispositivi che non funzionano con il gs di GNU funzionano con l'Aladin gs.

53.5   Visualizzazione coda di stampa

Come posso visualizzare il contenuto della coda di stampa?

__________

Con:

# lpq -l[Invio]

53.6   Eliminazione processi di stampa

Ho visualizzato con lpq i processi di stampa e vorrei eliminare il processo n. 12. Come posso fare?

__________

Con:

# lprm 12[Invio]

53.7   Eliminazione processi di stampa (tutta la coda)

Come elimino tutta la coda di stampa?

__________

Con:

# lprm -[Invio]

53.8   Effetto scalettatura in stampa testi

Perché quando stampo un file di testo, mi viene un effetto tipo scalettatura?

__________

Perché in un testo Unix alla fine della riga c'è solo l'avanzamento alla riga successiva e non il ritorno carrello. Le stampanti nella maggior parte di casi si aspettano il codice di ritorno carrello. Per ovviare si può creare un filtro in perl:

           
#!perl
while (<STDIN>) {chop $_; print "$_\r\n";};

e farlo invocare da /etc/printcap in una sezione dedicata ad una stampante (ovviamente sempre la stessa) che verrà scelta quando si stampa un file di testo.

Ricordarsi di assegnare i permessi di esecuzione allo script.

53.9   Stampa dei separatori con nome dell'utente

Quando stampo, ogni volta viene stampato anche un separatore con il nome dell'utente e il nome del processo; come posso eliminare questa cosa?

__________

Devi inserire nel file /etc/printcap la riga:

        :sh:\

che elimina il separatore (che serve per la stampa in grosse reti, per capire chi è l'autore della stampa).

Capitolo 54.   Stampa da riga di comando

54.1   Stampa di un file

Come stampo un file?

__________

Con:

$ lpr nome[Invio]

(stampa il file 'nome' o meglio lo mette in coda ed il demone lpd si occupa di stampare la coda di stampa)

54.2   Stampa del contenuto della directory corrente

Come stampo il contenuto della directory corrente?

Con:

$ ls -la |lpr[Invio]

54.3   Stampa di un file postscript

Come stampo da riga di comando un file ps (postscript?)

__________

Con:

$ gs -dNOPAUSE -sDEVICE=deskjet (o laserjet, ecc.) -sOutputFile=|lpr file.ps[Invio]

54.4   Problemi di stampa con i kernel 2.2.xx

Ho cercato fiducioso di mandare un file in stampa, ma niente da fare. La coda c'è, sembra funzionare (cioè digerisce i file in coda di stampa), ma non stampa nulla.

L'inghippo è che con il kernel 2.2.xx la gestione della stampante si fa con il modulo parport, quindi inserisci in /etc/conf.modules le righe:

alias parport_lowlevel parport_pc
options parport_pc io=0x378,0x278 irq=7,auto

Parte vii.   Editoria

Capitolo 55.   Conversione tra formati

55.1   Da html a txt

Qualcuno conosce un programma che trasformi le pagine da formato html a formato testo?

__________

Puoi utilizzare lynx:

$ lynx -dump pagina.html > pagina.txt[Invio]

Capitolo 56.   I file *.ps

56.1   Visualizzare i file .ps in Windows

Mi potete segnalare un buon visualizzatore di file .ps per Windows?

__________

C'è il Ghostview per Windows.

Prova presso: <http://www.cs.wisc.edu/~ghost/gsview/index.html> o <http://www.research.att.com/~jba/ghost/win95.html>

56.2   Stampare sotto Windows i file .ps

Ho scaricato sotto Linux diversi file .ps. Ora ho la necessità di stamparli da Windows. C'è un modo?

__________

Lo puoi fare utilizzando i GS Tools che permettono di visualizzare e stampare da Windows file .ps.

Capitolo 57.   I file *.pdf

57.1   pdf male interpretato

Sto tentando di aprire un file pdf ma, mentre sotto Windows va tutto bene, in Linux sia PSViewer che xpdf aprono il file, la qualità dei font è buona, ma le lettere non sono quelle del documento originale: il mio nome è diventato gklmn e così anche tutte le altre parole sono incomprensibili.

__________

Succede perché non ci sono sul sistema i caratteri (font) adatti per visualizzarlo. In genere conviene usare font convenzionali per aumentare la compatibilità, oppure installare anche i font TTF sotto Linux.

Capitolo 58.   I File *.sgml

58.1   problema con sgml2txt

Quando utilizzo il comando sgml2txt noto che alcune parti di testo delimitate da alcuni marcatori vengono male interpretate. Ad esempio molte volte trovo delle parole con lettere ripetute, invece di prova trovo «ppp rr o vv aaaa».

basta aggiungere l'opzione -f al comando.

Capitolo 59.   I file *.doc

59.1   Leggere e stampare documenti Microsoft Word

Mi aiutate a trovare un qualche programma che legga i documenti di Word? Non vorrei ricorrere però a programmi di grossa mole.

__________

Se consideri Abiword (licenza: GPL) un programma di grossa mole, esistono delle applicazioni eseguibili da riga di comando:

catdoc (licenza: GPL)

trasforma i file .doc in file di testo, e:

mswordview (licenza: GPL)

li traduce in html.

Esiste anche:

word2tex (licenza: GPL)

Un modo per aumentare la compatibilità è in ogni caso usare, da Word, il formato .rtf e non il .doc.

Capitolo 60.   Compatibilità formati GNU/Linux-Dos

60.1   File di testo DOS - Linux

Ho bisogno di aprire mediante Emacs documenti creati sotto DOS ma appaiono diversi «^M» in fondo alle righe,

Il fine-riga in Linux è il carattere LF, mentre nel DOS è la coppia di caratteri CR+LF. Quando importi i file-testo dal DOS devi usare il comando:

mcopy -t nome_del_file_dos nome_da_assegnare[Invio]

Il parametro «-t» informa il comando che il file da copiare è testuale, così nel trasferimento verranno messi a posto i fine-riga.

Parte viii.   I Caratteri (font)

Capitolo 61.   Impostazioni

61.1   Caratteri del prompt

Come si fa a cambiare i caratteri del prompt?

Avendo installato kbd e/o consoletool devi usare o setfont o consolechars seguito dal nome del carattere da utilizzare.

61.2   «Removing unix/:7101 from the valid list of fontpaths»

All'avvio di X, ricevo questo errore:

Removing unix/:7101 from the valid list of fontpaths
Removing /usr/X11R6/lib/X11/fonts/Speedo/ from the valid list of fontpaths
Warning: locale not supported by C library, locale unchanged
Warning: locale not supported by C library, locale unchanged
Warning: locale not supported by C library, locale unchanged
Killed

In /etc/profile la variabile LANG è impostata in questa maniera:

 export LANG=it_IT

__________

A quest'ultima riga prova ad aggiungere:

 export LC_ALL=POSIX

e se ancora non va, togli entrambe e metti:

 localedef -f ISO-8859-1 -i it_IT IT

61.3   Linux e caratteri TTF - pt. 1

Qualcuno può descrivere più o meno ordinatamente il processo da seguire per permettere di utilizzare i caratteri True Type?

__________

Dovrai avere installato xfs.

Procurati i caratteri True Type dalla directory C:\WINDOWS\FONTS\ o da un'altra fonte e mettili in una directory ttfonts che creerai per questo scopo:

# cd /usr/X11R6/lib/X11/fonts[Invio]

# mkdir ttfonts[Invio]

Se necessario, converti i nomi dei caratteri in caratteri minuscoli.

Posizionati nella directory ./ttfonts ed esegui questi due comandi:

# ttmkfdir -o fonts.scale[Invio]

# ttmkfdir -o fonts.dir[Invio]

Ricordati che dovranno essere ripetuti quando aggiungerai nuovi caratteri nella directory.

Adesso configuriamo il server dei caratteri. Modifica questa sezione del file /etc/X11/fs/config (o /etc/X11/xfs/config a seconda delle distribuzioni) in modo che la prima riga punti alla directory dove abbiamo messo i caratteri. Il mio appare così:

catalogue = /usr/X11R6/lib/X11/fonts/ttfonts,
            /usr/X11R6/lib/X11/fonts/misc:unscaled,
            /usr/X11R6/lib/X11/fonts/75dpi:unscaled,
            /usr/X11R6/lib/X11/fonts/100dpi:unscaled,
            /usr/X11R6/lib/X11/fonts/misc,
            /usr/X11R6/lib/X11/fonts/Type1,
            /usr/X11R6/lib/X11/fonts/Speedo,
            /usr/share/fonts/default/Type1,
            /usr/X11R6/lib/X11/fonts/75dpi,
            /usr/X11R6/lib/X11/fonts/100dpi,

Impostiamo xfs in modo che parta automaticamente ad ogni avvio della nostra macchina:

# chkconfig --add xfs[Invio]

Forziamone l'esecuzione con:

# /etc/rc.d/init.d/xfs restart[Invio]

(anche questo devi farlo ogni volta che aggiungi dei nuovi caratteri)

Dobbiamo sistemare l'X Server:

Apri il file /etc/X11/XF86Config e controlla che nella sezione sottostante, se hai più righe dedicate a FontPath, quella con l'istruzione unix/:-1, sia la prima:

Section "Files"

    RgbPath     "/usr/X11R6/lib/X11/rgb"
    FontPath   "unix/:-1"

EndSection

61.4   Linux e caratteri TTF - pt. 2

Come installo i caratteri TTF in Linux?

__________

Ecco i passaggi da eseguire:

  1. crea un directory nella quale copiare i caratteri, ad es. /usr/ttfonts;

  2. copiaci i TTF che interessano;

  3. installa il server xfstt

  4. prepara lo script seguente, dandogli un nome a scelta (io lo ho chiamato addettf). Il percorso è esplicito e si riferisce ovviamente alla directory dove io ho collocato xfstt e xset:

            #!/bin/sh
            /usr/X11R6/bin/xfstt --sync
            /usr/X11R6/bin/xfstt &
            /usr/X11R6/bin/xset fp+ unix/:7100
  5. rendi eseguibile lo script e mettilo in /usr/local/bin:

    # chmod 700 addettf[Invio]

    # mv addettf /usr/local/bin[Invio]

A questo punto sorge il problema di rilanciare lo script. Ciò può avvenire:

Se usi la riga:

/usr/X11R6/bin/xset fp+ unix/:7100

nello script sopra proposto, non devi inserire questa riga in XF86Config.

61.5   Linux e caratteri TTF - pt. 3

Qualcuno può descrivere più o meno ordinatamente il processo da seguire per permettere ad X di utilizzare i caratteri True Type?

__________

  1. Copiati i TTF che hai in una directory di Linux (ad esempio /usr/lib/X11/fonts/ttf)

  2. vai in quella directory e digita:

    # ttmkfdir -o fonts.dir[Invio]

  3. Dai il comando:

    # chkfontpath --add /usr/lib/X11/fonts/ttf[Invio]

  4. penso che il comando ttmkfdir vada ridato ogni volta che aggiungi dei caratteri.

61.6   FS.h e FSprolo.h mancanti in fase di compilazione xfstt

Ho cercato di installare xfstt, ma in fase di compilazione mi viene restituito il seguente errore:

c++ -g -Well - pedantic -DMAGNIFY=0 -c xfstt.cpp
-I/usr/X11R6/include/X11/fonts \ -I/usr/X11R6/include/

xfstt.cpp:47: X11/fonts/FS.h: no such file o directory
xfstt.cpp:48: X11/fonts/FSprolo.h: no such file o directory

tutto questo in corrispondenza della linea in cui si trovano le due istruzioni di include:

#include <X11/fonts/FS.h>
#include <X11/fonts/FSprolo.h>

in effetti questi due file sulla mia macchina non ci sono. Cosa devo fare? Dove recupero i due file?

__________

Installa il pacchetto xlib6g-dev

61.7   È necessario xfstt?

Non ho capito se si deve comunque installare xfstt e modificare Fontmap per poter stampare.

__________

Xfstt non serve come gestore di font, ma è utile per evitare di crearsi a mano la lista dei font per il file di gs, Fontmap. Dopo averlo usato per riempire il file Fontmap, lo puoi disinstallare.

61.8   Automatizzare la partenza di xfstt all'avvio di Linux

Ragazzi, nessuno sa come creare uno script di avvio (da mettere nell'albero degli init) per fare partire automaticamente xfstt all'avvio di Linux? Uso Red Hat 6.0.

__________

Ho fatto così:

Ho installato e compilato xfstt, in /etc/rc.d/init.d/xfs;

ho aggiunto nella riga sotto quella che lancia xfs la riga seguente:

xfstt --daemon

Ecco le righe in questione:

...
start)
        echo -n "Starting X Font Server: "
        rm -fr /tmp/.font-unix
        daemon xfs -droppriv -daemon -port -1
        xfstt -daemon  #nuova riga
        touch /var/lock/subsys/xfs
        echo

stop)
        echo -n "Shutting down X Font Server: "
        killproc xfs
        killproc xfstt  #nuova riga
        rm -f /var/lock/subsys/xfs

per quel che riguarda le opzioni di xfstt guarda i file inclusi insieme ai sorgenti. non dimenticare di aggiungere in XF86Config:

FontPath "unix/:7100"

Parte ix.   Immagini

Capitolo 62.   Generalità

62.1   Creare l'immagine di una partizione

Esiste un modo per fare l'immagine di un disco o di una partizione? Per esempio come si copia tutta la partizione di un disco messo come slave?

__________

# cat /dev/partizione > filedest[Invio]

partizione= es. hda1

Invece del cat puoi usare tar:

# tar czf filedest.tar.gz /dev/partizione[Invio]

Per rimontarli:

# mount -o loop filedest /mnt/XXX[Invio]

62.2   Creazione immagine di un dischetto

Come creo l'immagine di un dischetto?

__________

Con:

$ dd if=/dev/fd0 of=immagine.img[Invio]

62.3   Copia di un'immagine su un dischetto

Come ricreo nel dischetto il contenuto di un'immagine?

__________

Con:

$ dd if=immagine.img of=/dev/fd0[Invio]

62.4   Visualizzazione contenuto immagine

Posso montare un'immagine e vederne il contenuto?

__________

Sì, il comando è:

$ mount -o loop -t ext2 immagine.img /mnt/floppy[Invio]

(ovviamente se l'immagine ha un filesystem ext2; se ha un filesystem diverso è sufficiente sostituire ext2 con, ad esempio, msdos).

62.5   Inserire file in un'immagine

È possibile creare un'immagine vuota da 650Mb, montarla, e poi metterci dentro con un banale cp tutti i file che mi servono?

__________

No. Ma puoi farlo prima. Metti tutti i file che ti servono in una directory temporanea e, poi da quella, crei l'immagine della directory.

62.6   Aggiunta file ad un'immagine iso

Come si aggiungono all'immagine iso altri files?

__________

Non puoi aggiungere file a un'immagine, devi espandere il file e costruirti un'altra immagine:

# insmod loop[Invio]

# mount -o loop image.iso /mnt[Invio]

poi copia il contenuto di mnt (perché è a sola lettura) in una dir temp, aggiungi quello che vuoi fino a 650 Mb e crea una nuova immmagine.

Parte x.   Masterizzazione

Capitolo 63.   Masterizzare da riga di comando

63.1   Masterizzazione sotto Linux: guida rapida dall'immagine alla creazione del CD

Volevo giusto iniziare ad usare Linux per la masterizzazione. Che programma si usa? Si deve prima creare l'immagine del cd? Insomma come funziona?

Devi creare l'immagine e masterizzarla.

Per creare l'immagine:

# mkisofs -a -r -v -T -o ~/immagine.img /doc[Invio]

cioè crea un'immagine (-o nome.img) nella tua directory home della directory /doc e delle discendenti, con estensioni RockRidge (-r) (così mantieni i permessi, i nomi lunghi visto che lo standard iso9660 è 8+3 e senza permessi) ti dice anche qualche informazione (-v) include tutti i file anche quelli nascosti (-a) crea il file trans.tbl per la conversione qualora (-T) utilizzi il CD in un sistema 8+3.

In seguito la monti per verificare che sia stata creata come la volevi tu:

# mount -o loop -t iso9660 ~/immagine.img /mnt/dovevuoi[Invio]

la smonti:

# umount /mnt/dovevuoi[Invio]

la masterizzi:

# cdrecord -v speed=k dev=x,y,z -data immagine.img[Invio]

sostituisci k con 1 se hai un masterizzatore 1x sostituisci k con 2 se hai un masterizzatore 2x sostituisci k con 4 se hai un masterizzatore 4x e così via...

la x in dev indica l'adattatore SCSI (se ne hai uno solo ometti il valore)

la y indica il numero del dispositivo nella catena SCSI (1-6)

la z è generalmente 0 (assenza di LUN).

Ad esempio:

# cdrecord -v speed=6 dev=3,0 -data immagine.img[Invio]

masterizzerà l'immagine della directory corrente nel masterizzatore 6X che riesiede al posto n° 3 della catena SCSI dell'unico adattatore SCSI che c'è nel sistema.

63.2   Copiare una distribuzione Linux

  mkisofs -a -l -J -R -T -v \
  -b percorso/ImmagineAvvio -c percorso/FileCatalogo

percorso=«directory dove hai copiato i file»/«directory file avvio»

63.3   Masterizzare in modalità multisessione

(Si assume che le coordinate dell'unità di masterizzazione siano 0,1,0).

Creare la prima sessione di un cd multisessione:

mkisofs -R -r -J -D -l -T -v -o /1/2/isoimage /directory[Invio]

cdrecord -v -speed=4 dev=0,1,0 -multi /1/2/isoimage[Invio]

Creare la seconda sessione:

cdrecord -msinfo dev=1,0[Invio]

(si otterranno dei numeri del tipo 0,11702 ossia la prima traccia dal settore 0 al settore 11702)

mkisofs -o isoimage2 -R -C 0,11702 -M /dev/scd1 /directory[Invio]

cdrecord -v -speed=4 dev=1,0 -eject -multi isoimage2[Invio]

Per le successive sessioni basta cambiare i numeri che richiede l'opzione -C usando l'opzione msinfo di cdrecord.

63.4   Masterizzare un CD audio - pt. 1

Come si masterizza un CD audio?

__________

Prima si estraggono le tracce audio:

# cdparanoia -B -s[Invio]

che estrae le tracce audio separate (-B) e cerca (-s) da solo il drive con il CD audio nel caso si abbiano 2 lettori CD (lettore e masterizzatore).

Verranno creati i file delle tracce:

track01.cdda.wav, track02.cdda.wav, ecc.

Dopo ciò, si lancia il comando per masterizzare:

# cdrecord -v speed=4 dev=3,0 -audio track*.wav ecc.[Invio]

-v emette informazioni:

speed=4 registra a 4X (2 registra a 2X ecc.)

dev=3,0 ID e LUN del proprio masterizzatore.

L'ID si ottiene con il comando:

# cdrecord -scanbus[Invio]

che restituisce qualcosa simile a:

scsibus0:
                  0) *
                  1) *
                  2) *
                  3) 'YAMAHA  ' 'CRWxxxx         ' '1.0h' Removable
CD-ROM
                  4) *
                  5) *
                  6) *
                  7) *

il LUN è generalmente 0.

63.5   Masterizzare un CD audio - pt. 2

Non riesco a registrare CD audio. Ho un masterizzatore EIDE.

__________

Forse sbagli qualcosa nel procedimento:

Se decidi di adoperare cdda2wav (come ti consiglio), non puoi usare l'emulazione SCSI. Puoi però usare il kernel IDE che è venuto fuori dall'installazione di Linux (insomma quello che non contiene emulazione SCSI). Allora, dopo aver inserito il CD nel lettore ed avere scelto la directory dove vuoi inserire i file audio, puoi copiare un brano musicale:

# cdda2wav -tnn audio_xx.wav[Invio]

dove:

nn= numero del brano musicale nel cd;

xx= numero che vuoi assegnare al file.

Ma, se vuoi copiare tutto il CD, non è necessario eseguire il comando brano per brano, basta fare:

# cdda2wav -B[Invio]

Troverai tutti i brani ricopiati sotto forma audio_nn.wav. Se hai una scheda sonora, puoi controllare con play, wavplay o wavp. Per masterizzare con cdrecord è necessario riavviare con il kernel con emulazione SCSI, poi:

# cdrecord -v -audio speed=2 dev=1,0 audio_*.wav[Invio]

Ma, se vuoi masterizzare solo un determinato brano, userai il numero al posto dell'asterisco.

Potrebbe capitarti di voler utilizzare file .wav prodotti da Microsoft. Questi brani sono un po' particolari, perché prima di funzionare sotto Linux devono essere opportunamente trattati con sox:

# sox nomefile.wav -x nomefile.cdr[Invio]

puoi ascoltare il file così ottenuto con playcdr o masterizzarlo con:

# cdrecord -v -audio speed=2 dev=1,0 *.cdr[Invio]

63.6   Copiare una distribuzione Linux

Come posso copiare una distribuzione Linux. Se il disco è avviabile, come posso renderlo tale?

__________

Come prima cosa se hai un masterizzatore IDE controlla nella sezione SCSI support del kernel che sia abilitato il supporto SCSI per i CD-ROM e il supporto SCSI generico e nella sezione Block Devices l'opzione per il supporto dell'emulazione SCSI.

Se il masterizzatore è SCSI seleziona il driver opportuno nella sezione SCSI low level.

Se vuoi fare un CD avviabile, devi copiare il contenuto del CD d'origine in una directory dopodiché devi utilizzare mkisofs per creare l'immagine iso e le informazioni relative all'avvio:

# mkisofs -a -l -J -R -T -v -b percorso/ImmagineAvvio -c percorso/FileCatalogo[Invio]

Creata l'immagine la puoi verificare prima di scriverla:

$ mount -o loop immagine.iso /mnt/cdrom -t iso9660[Invio]

$ cd /mnt/cdrom[Invio]

e ti trovi nel futuro cd.

Smonti con:

$ umount /mnt/cdrom [Invio]

e passi alla masterizzazione:

# cdrecord dev=X,Y,Z -v -eject -speed=T immagine.iso[Invio]

dove:

  1. dev= se sai i valori scsibus,target,lun da assegnare bene altrimenti:

    # cdrecord -scanbus [Invio]

  2. -v= modalità prolissa;

  3. -eject= espelle il CD quando ha finito;

  4. -speed= velocità di scrittura.

63.7   cd avviabile

Facendo un'immagine di un CD come posso renderlo avviabile?

__________

i CD avviabili contengono un'immagine di un floppy di avvio.

Una volta stabilito qual è il tuo floppy, crei l'immagine con dd e specifichi con l'opzione -b di mkisofs che quel floppy dovrà fare l'avvio, esempio per creare il file-immagine:

# dd if=/dev/fd0 of=floppy_avvio.img[Invio]

per creare il file iso della directory attuale '.':

# mkisofs -b floppy_avvio.img -J -R -o file.iso .[Invio]

alcuni interessanti articoli e link:

<http://www.pluto.linux.it/journal/pj9709/joliet.html>

<http://www.pluto.linux.it/journal/pj9807/writecd-1.html>

<http://www.pluto.linux.it/ildp/HOWTO/CD-Writing-HOWTO.html>

63.8   Creazione di un CD avviabile

Come si ottiene un CD avviabile in Linux?

__________

Usando mkisofs, specifichi -b floppy_di_avvio.img

ti spiego: se hai una directory che contiene la Red Hat, esempio /RH60, devi usare:

# mkisofs -r -o percorso/miofile.iso -b /RH60/images/boot.img[Invio]

63.9   cd riscrivibili

Per i CD riscrivibili qualcuno ha qualche indicazione da darmi?

I CD riscrivibili utilizzano un sistema per la scrittura dei dati chiamato packet writing, che come substrato ha un filesystem chiamato UDF.

Il supporto per l'udf non è ancora incluso nei kernel comuni.

Per ora l'unica cosa che ho visto in giro è un modulo per il kernel che permette l'accesso in sola lettura ai filesystem UDF.

Puoi trovare questo modulo presso Freshmeat (<http://www.Freshmeat.net>), inserendo come chiave di ricerca «udf».

63.10   Ripulire un CD riscrivibile

È possibile fare una formattazione di un CD riscrivibile?

__________

Puoi ridare verginità al tuo CD riscrivibile con:

# cdrecord dev=1,0 blank=fast[Invio]

# cdrecord dev=1,0 blank=all[Invio]

Quest'ultimo comando è più lento ma permette una ripulitura più completa

Capitolo 64.   Masterizzare da applicazione

64.1   Programmi per masterizzare

Quali programmi esistono, in ambiente Linux, per masterizzare?

__________

cdrecord, cdwrite e l'interfaccia grafica xcdroast.

Parte xi.   Audio

Capitolo 65.   Impostazioni

65.1   Moduli audio Alsa. Come procedere

Vorrei installare i moduli Alsa. Come si fa?

__________

Alsa è diverso rispetto ad oss. Requisito essenziale è che il kernel preveda il supporto dell'audio, ma non in modo monolitico. La compilazione e l'installazione prevede nell'ordine:

  1. Dalla directory dei dispositivi eseguire:

    # ./configure --help[Invio]

    per ottenere un aiuto sulla configurazione.

  2. Per una scheda PCI sarà:

    # ./configure --sequencer=yes; make; make install[Invio]

  3. Eseguire lo script:

    # ./snddevices[Invio]

  4. Sia per le librerie che per le utility eseguire:

    # ./configure; make; make install[Invio]

  5. Prima di caricare il modulo della propria scheda si deve tenere presente che non vi devono essere già altri moduli audio caricati e bisogna attivare con isapnp le schede ISA (se non si è fatta la scelta --with-isapnp=yes). Fare riferimento a: 82.1.

  6. Commentare le righe di /etc/conf.modules relative alle scelte effettuate tramite sndconfig o manualmente. (oppure scaricare tutti i moduli con lo script presente in: 82.1.

  7. eseguire:

    # modprobe nome_modulo[Invio]

    per caricare la propria scheda, considerando che alcune schede richiedono parametri aggiuntivi come si legge nel file INSTALL posto nella directory dei driver.

  8. Impostare il volume come descritto in 65.2

  9. 9. Tenendo presente che ALSA è pienamente compatibile con OSS se si vogliono usare applicazioni non native alsa, caricare i moduli oss-like:

    # modprobe snd-pcm1-oss[Invio]

    # modprobe snd-mixer-oss[Invio]

  10. 10.Una volta attivata la scheda, si possono conservare le impostazioni con:

    # alsactl store[Invio]

    (che crea un file /etc/asound.conf) che si potranno ripristinare con:

    # alsactl restore[Invio]

65.2   Nessun suono dopo l'installazione dei driver Alsa

Ho installato i driver Alsa per la mia scheda audio ma non riesco a sentire nulla. Penso che siano stati caricati correttamente ma del suono neanche l'ombra.

__________

Con Alsa appena si installa, i volumi sono impostati a mute, quindi devi impostare il mixer con:

# amixer set Master on[Invio]

# amixer set PCM on[Invio]

# amixer set Master 75%[Invio]

# amixer set PCM 75%[Invio]

dopo puoi usare il mixer che vuoi (se carichi snd-pcm1-oss, anche quelli di oss, tipo aumix).

65.3   Alzare il volume in Alsa nei desktop e nei laptop

Dopo avere installato Alsa, il volume è a zero. Come si alza?

__________

Su questo sito ho trovato uno script per Desktop e Laptop:

<http://www.sr.bham.ac.uk/~sjt/opl3sa2.html>

--Desktop--
#!/bin/sh
AMIX='/usr/bin/amixer -q'
$AMIX set Master 100% unmute
$AMIX set PCM 85% unmute
$AMIX set 'Input Gain' 40%
$AMIX set Line 40% unmute capture
--Laptop--
/usr/bin/amixer -q set Master 90% unmute
/usr/bin/amixer -q set PCM 90% unmute
/usr/bin/amixer -q set Line 60% unmute capture
/usr/bin/amixer -q set CD  60% unmute
/usr/bin/amixer -q set 'Input Gain' 50%
/usr/bin/amixer -q set FM 60% unmute

65.4   Regolazione toni del mixer

Capita anche a voi che il mixer non mantenga il livello dei toni? Ogni volta che attivo il mixer i toni sono al minimo livello.

__________

Prova ad usare aumix, salva le impostazioni con S e metti nei file di avvio (rc.local o nel .bash_profile):

/usr/bin/aumix -L

65.5   Eliminare i bip della riga di comando

Come si possono disabilitare i 'bip' che senti quando premi [tab] sulla riga di comando?

__________

Puoi modificare il file /etc/inputrc oppure ~/.inputrc e inserire la riga:

# set bell-style none[Invio]

Invece con:

# set bell-style visible[Invio]

si fa il contrario

oppure si da il comando (in bash):

# echo -en "\33[11;00]"[Invio]

che emette il suono per zero ms.

65.6   Regolazione volume

Ho abilitato i suoni di sistema, ma sono talmente bassi che devo alzare al massimo il volume delle casse per sentire qualcosa.

__________

Forse dovresti impostare con aumix il valore che preferisci e ricaricarlo all'avvio con:

# aumix -L percorso/.aumixrc[Invio]

Capitolo 66.   CD audio

66.1   Ascoltare i CD audio

Ho un problema con i CD audio, non riesco a montarli!

__________

I CD audio non li puoi montare perché non hanno un filesystem. Devi inserirli e ascoltarli, ad es. con cdplay.

Capitolo 67.   mp3, wav, ecc.

67.1   Applicazioni utili per l'audio in Linux (mp3, wav, ecc.)

Sapreste consigliarmi un buon programma per estrarre tracce dai CD audio ed uno per decodificare i .wav in .mp3, possibilmente per X altrimenti vanno bene anche per riga di comando.

__________

cdda2wav (licenza: GPL) per estrarre le tracce audio. Scrive anche in cdr così i file sono pronti per essere scritti su cd.

BladeEnc (licenza: LGPL) per scrivere da wav a mp3;

tutti gli altri formati tranne l'mp3 si fanno semplicemente con sox (licenza: GPL).

67.2   Da .wav ad .mp3

Sto cercando un programma che trasformi dei brani da formato .wav a formato .mp3.

Ci sono molti applicativi adatti a questo scopo:

67.3   Script per estrazione audio e conversione in mp3

Come potrebbe essere uno script in grado di estrarre brani audio da un CD musicale sotto forma di file *.wav e di passarli infine ad un programma che le trasformi in mp3?

Ecco uno script chiamato makemp3:

 ----------------------------
 #!/bin/bash
 cd ~
 for T in $*; do
 cdparanoia -w -Y $T temp.wav
 gogo temp.wav $T.mp3
 rm -f temp.wav
 done
 ----------------------------

Si usa lanciandolo con:

makemp3 tracciadatrasf1 [tracciadatrasf2] [tracciadatrasf3] ...[Invio]

Es.:

makemp3 1 5 7[Invio]

(trasforma le tracce 1,5 e 7). In uscita emette le traccie come n.mp3 (nel nostro esempio 1.mp3, 5.mp3, ecc.).

67.4   Tag ID3 dei file .mp3

Esiste un'applicazione in grado di leggere i Tag ID3 dei file .mp3?

__________

Esiste il pacchetto MP3info (licenza: GPL).

67.5   Blocco di freeamp

Qualcuno sa dirmi perché se lancio freeamp, appena parte il brano mi si blocca tutto e devo impartire un killall?

__________

Clicca sul tasto in alto a sinistra, quello che ti apre il menù di configurazione; vai su options o opzioni e dai ok su tutte le varie schede che ti compaiono, senza cambiare nulla e tutto dovrebbe funzionare.

Parte xii.   Programmazione

Capitolo 68.   Script per la shell

68.1   Script shell apparentemente inefficaci

Come, mai se faccio uno script stupidissimo come questo:

#!/bin/sh
cd /home/aur

e lo avvio, non mi va alla directory /home/aur?

__________

Perché lo script viene eseguito da una shell secondaria (/bin/sh), che termina quando finisce lo script e pertanto perde tutte le impostazioni (compresa PWD, cioè la directory corrente). Per farlo eseguire dalla shell principale (cioè quella che accetta i tuoi comandi) dovresti creare un alias, una funzione oppure fare:

$ source nomescript[Invio]

o:

$ . nomescript[Invio]

in questo caso infatti sarà la shell corrente ad eseguire i comandi e non un processo figlio.

68.2   È possibile eseguire uno script shell nel web?

__________

Certo, dagli l'estensione .cgi, forniscigli i permessi con:

# chmod 755 file.cgi[Invio]

e richiamalo mediante link o fornendo l'indirizzo esatto. Come cgi puoi usare qualunque linguaggio interpretato o compilato che sia in grado di leggere lo standard input, scrivere su standard output e leggere il contenuto delle variabili d'ambiente.

68.3   Contare i caratteri

Esiste un comando o un sistema per contare i caratteri presenti in un file di testo?

__________

$ cat nomefile | wc -l[Invio]

conta le linee;

$ cat nomefile | wc -c[Invio]

conta i caratteri;

$ man wc[Invio]

per dettagli.

68.4   Stato di uscita di un comando

Come si fa a sapere lo stato di uscita di un comando?

Utilizzando il parametro speciale '?', ad esempio:

ls ; echo -e "\nEXIT_CODE: $?\n"[Invio]

EXIT_CODE: 0

ls dir_che_non_esiste; echo -e "\nEXIT_CODE: $?\n"[Invio]

EXIT_CODE: 1

68.5   Differenze tra $@ e $# negli script shell

Non ho capito la differenza tra il parametro posizionale $@ e $#. Chi me li spiega?

__________

Scrivi questo file: prova.sh

  #!/bin/bash

  echo $@;
  echo $#;

Ora, dopo avergli dato i permessi di esecuzione, prova a lanciarlo in questo modo:

$ ./prova.sh ciao bla "un esempio"[Invio]

Penso che ti sarà molto chiaro il risultato.

$@ stamperà tutti i parametri passati da linea di comando, mentre $# indicherà la posizione dell'ultimo di essi, nel nostro caso 3.

Aggiungi allo script anche la riga:

echo $3

Come puoi vedere, verrà restituito un esempio.

68.6   Eliminare le prime n righe o le ultime n righe di un file di testo

Carica i file da modificare (o parte di essi, se sono davvero troppi) con il vim, tutti in una volta:

vim file1 file2 file3 file4 file5[Invio]

(oppure usa l'asterisco se li puoi raggruppare con uno stesso prefisso o suffisso).

A questo punto scrivi dopo avere premuto il tasto [ESC]:

:nmap z gg:d10<CR>G20kd20<CR>:w<CR>:n<CR>

«z» è il nuovo tasto mappato per eseguire le operazioni che ci interessano, mentre al posto di 10 e di 20 scriverai rispettivamente il numero delle prime n righe ed il numero delle ultime m righe da cancellare. In pratica, lasciando 10 e 20, vengono cancellate le prime 10 righe e le ultime 20.

Dunque, ora ti basta premere il tasto «z» ripetutamente, per quanti sono i file che hai aperto. Automaticamente vim eseguirà le operazioni richieste nella mappatura. I file vengono sovrascritti, quindi in ogni caso prestare attenzione. Quando vim avrà modificato l'ultimo file aperto, ti avvertirà che non ce ne sono altri cui applicare le operazioni. A questo punto salva ed esci normalmente con :wq

68.7   Cancellare tutte le righe di un file che cominciano con una determinata stringa.

Ammettiamo che la stringa sia «pD:» Fai riferimento alla sezione 68.6 e modifica la mappatura in questo modo:

:nmap z /pD\:<CR>dd

Il «\» davanti a «:» protegge quest'ultimo carattere dall'interpretazione del vim.

68.8   Aggiungere numeri di riga ad un file di testo

Come si aggiungono i numeri di riga ad un file di testo? Mi serve di numerare progressivamente tutte le righe di un file.

__________

Lo puoi fare con perl. Crea un file pippo.pl e rendilo eseguibile:

#!/usr/bin/perl 

$nr=0;
while (<STDIN>){
 # Cambia eventualmente %04d con quello che vuoi
 print sprintf("%04d: %s",$nr,$_);
 $nr++;
}
exit;

e poi dai il comando:

$ cat pluto.txt | ./pippo.pl > filenumerato[Invio]

Ecco un altro metodo:

$ cat pluto.txt | awk '{print FNR,$0}'[Invio]

reindirizzando opportunamente l'output.

68.9   Scelta di un file a caso in una directory

Mi chiedevo se esiste già o se è possibile realizzare un comando che esegua il seguente compito:

comando percorso_directory_scelta

con un output costituito da un file a caso (senza tutto il percorso) contenuto nella directory_scelta.

__________

$ ls -1 | sed -e $(random -e `ls -1 | wc -l` ; echo $(( RAND=$?+1 )))p --quiet[Invio]

Possiamo sopperire alla mancanza di 'random' con l'equivalente in perl:

$ perl -e '@files=`ls -1`;print "@files[int(rand($#files))]\n";'[Invio]

68.10   Ricerca di file modificati negli ultimi 30 minuti

Come faccio a trovare tutti i file che contengono una stringa e che ho modificato negli ultimi 30 minuti?

Se intendi farlo nella directory corrente e nelle sue discendenti:

find . -mmin -30 -exec grep -l aabbcc "{}" \;[Invio]

se invece vuoi farlo in tutto il filesystem:

find / -mmin -30 -exec grep -l aabbcc "{}" \;[Invio]

68.11   Ricerca doppioni di file

Ho la necessità di cercare in una directory e nelle relative discendenti, se ci sono o meno dei file con nomi uguali e che il risultato di questa ricerca venga poi inviato ad un file di testo

__________

------
#!/bin/sh
# $1= directory dove cercare i file.

for $i in `find $1 -name *`; do
        $n= basename $i
        if [ `find $1 -name $n |wc -l` -gt 1]; then
                find $1 -name $n
        fi
done
------

Forse un po' lento ma dovrebbe andare. Per mettere l'output in un file di testo basta redirigere l'output con un '>'.

Oppure:

$ for F in `ls -1 -R percorso_dir1`; do find percorso_dir2 -name $F; done > lista_files_doppi[Invio]

dove per percorso_dir1 si intende il percorso completo della prima directory da confrontare, e per percorso_dir2 il percorso della seconda, analogamente.

68.12   Convertire in minuscolo tutti i file di una directory

Come si può creare uno script che mi rinomini in minuscolo tutti i file di una directory? Oppure esiste già un comando apposito?

__________

$ perl -e '@files = `ls -1`; chop @files; foreach $f(@files){!-e lc($f) && rename ($f, lc($f))}'[Invio]

o con:

$ for FILE in `/bin/ls`; do FILELOWER=`echo $FILE | tr A-Z a-z`; mv -i $FILE $FILELOWER; done[Invio]

o con:

------------------------------------
for i in *
do
  echo $i
  j = `echo $i | dd conv=lcase 2>&-`
  mv $i $j
done
------------------------------------

o con:

------------------------------------
for i in *
do
   mv -i `echo $i | awk '{print  tolower($1)}'  -`
done
------------------------------------

68.13   Conversione in minuscolo dei nomi dei file nei collegamenti ipertestuali di una pagina html

Ho una pagina html con dei collegamenti a file che hanno lettere maiuscole e minuscole, ad esempio:

 <A HREF="/dir-a/dir-b/pAGInA.html">

vorrei convertire pAGInA.html in pagina.html e così per tutti i collegamenti.

Questo script dovrebbe fare al caso tuo:

 cat page.html | perl -e 'while($l=<STDIN>){$l=~s/a href=\"(.*)\"\s*/a \
 href=\"\L$1\" /ig;print $l;}' > new.html

68.14   File di testo con nomi di file .html convertiti in collegamenti ipertestuali

Ho un file di testo composto da tante righe ognuna delle quali è il nome di un file html. C'è un sistema per trasformare queste righe in altrettanti collegamenti ipertestuali?

Se il tuo file è qualcosa del tipo:

 file1.html
 file2.html
 file3.html
 file4.html
 [...]
 file34575.html

Potresti utilizzare il seguente comando (interprete bash):

 for i in `cat il_tuo_file`;      \
 do echo "<a href="$i">$i</a>";   \
 done > file_destinazione

Il comando è stato suddiviso in 3 righe per comodità ma può essere eseguito su una singola riga.

68.15   Ordinare le righe di un file di testo al contrario

Ho ricevuto dei file di dati (.txt) in cui gli stessi sono ordinati (con la data ad inizio riga) cronologicamente dal più recente al più vecchio. Mi servono al contrario. In pratica la prima riga deve diventare l'ultima; la seconda la penultima, ecc..

__________

$ cat -n nome_file | sort -r | awk '{$1="";print}' | sed -e s/\ // > nuovo_file[Invio]

oppure:

$ cat nome_file | perl -e '@a=< STDIN >; while(@a){print pop(@a)};' > nuovo_file[Invio]

Non basta il semplice:

$ cat nome_file | sort -r > nome_file.rev[Invio]

che funzionerebbe se il primo campo di ogni riga fosse la data in formato aa/mm/gg. Ma se è invece in formato gg/mm/aa le righe verrebbero ordinate in base al giorno e non in base all'anno.

68.16   Come utilizzare sed per sostituire testo

Vorrei sostituire da una frase una parola con un'altra. Come si fa?

__________

Con il comando sed, eccoti un esempio:

$ echo 'Il miglior sistema operativo: Windows' | sed /Windows/s//Linux/g[Invio]

68.17   Occorrenza di una parola in un file

Come si fa a sapere quante volte compare una parola in un file?

__________

$ grep parola file|wc -w[Invio]

68.18   opzione -f (if) negli script shell

Molto spesso negli script che contengono if compare l'opzione -f. Cosa sta ad indicare?

__________

Credo che tu intenda questo:

#!/bin/bash

if [ -f "$1" ]; then 
        echo "file regolare";
fi

Se il percorso passato come argomento a questo script rappresenta un file regolare, lo script te lo segnala. Per file regolare si intende un qualsiasi file normale, che non sia quindi un dispositivo, un socket, una directory, ecc.

68.19   date: utilizzarlo negli script

In alcuni script shell mi interessa utilizzare la data. Digitando però:

$ date[Invio]

mi vengono restituite informazioni inutili e fastidiose per il mio script. Come posso eliminarle?

__________

Il comando:

$ echo `date +%x`[Invio]

ti restituisce il formato: mm/gg/aa. Utilizzare invece:

$ echo `date +%x` | sed "/\//s///g"[Invio]

ti potrebbe essere più utile in quanto restituisce il formato: mmggaa.

Le virgolette nell'ultimo comando sono necessarie a causa della '\'. Lo stesso risultato lo ottieni con:

$ echo `date +%x | sed 's/\///g'`[Invio]

Con i parametri %d %m %y o %Y si possono quindi ottenere tutte le combinazioni per manipolare il formato della data.

$ date +%Y%m%d[Invio]

20010304

Il parametro %Y restituisce l'anno a quattro cifre mentre %y quello a due.

68.20   Sostituire una stringa in un file di testo

Vorrei che nel file pippo.txt tutte le stringa fossero sostituite da stringa1. Quale è il comando?

__________

Eccolo:

$ sed s/'stringa'/'stringa1'/g pippo.txt > filemodificato.txt[Invio]

68.21   Cerca, trova e copia

Come faccio a cercare tutti i file di un certo tipo (*.png) e a copiarli in una directory?

__________

Se la directory di destinazione è /root/pngfile:

# find / -name "*.png" -exec cp -p {} /root/pngfile \;[Invio]

68.22   Cambiare le estensioni dei file

Come si può creare uno script che mi permetta di cambiare solo le estensioni di gruppi di file?

__________

#!/usr/bin/perl

$old_ext = @ARGV[0] || usage();
$new_ext = @ARGV[1] || usage();

print "$old_ext --> $new_ext\n\n";

@files = `ls -1`;
chop @files;

foreach $f(@files) {
        $f =~ /(^.*)\.$old_ext/ && rename ($f, "$1.$new_ext");
}

sub usage {
        print <<"END";

        Usage: ./script.pl old_ext new_ext

        Example: ./script.pl tar.gz zip

END
        exit(1);
}

Dai i permessi di esecuzione e invocalo nella directory in cui devi rinominare i file.

Siccome lo script per semplicità non effettua alcun controllo sulla nuova estensione richiesta dall'utente, è meglio usarlo con prudenza.

Oppure ecco un altro metodo:

for i in *.vecchiaestensione
do
  echo $i | awk -F. '{print $1 ".nuovaestensione"}'
done

o più semplicemente:

for i in *.vecchiaestensione
do
  echo ${i%.vecchiaestensione}.nuovaestensione
done

68.23   Modificare l'output di pppstats

Dando il comando:

$ pppstats -r -v ppp0[Invio]

ottengo qualcosa tipo:

      IN   PACK VJCOMP VJTOSS NON-VJ  RATIO  UBYTE  |      OUT   PACK VJCOMP VJSRCH VJMISS  RATIO  UBYTE
   48089    366     16      0     99   1.00      0  |   308840    385     54    212      8   1.00      0

vorrei togliere la prima riga e avere la seconda tale e quale, ma tra un numero e l'altro non ci devono essere gli spazi ma dei caratteri di tabulazione.

__________

Ecco i comandi necessari:

# pppstats -r -v ppp0 | grep -v VJCOMP | perl -e '$i=<STDIN>;$i=~s/\s+/\t/g;print $i;' | cut -f 2-[Invio]

# perl -e '@a=split(/\s+/, `pppstats -r -v ppp0|grep -v VJCOMP`);shift(a);foreach $b(@a) {print "$b\t"};'[Invio]

# pppstats -r -v ppp0 | grep -v OUT | sed -e 's/\ \+/ /g' | cut -f 2-[Invio]

(N.B.: nella parte con il sed il tab è scritto con [Ctrl+v] e [tab])

68.24   Sostituire caratteri in un file di testo

Esiste un modo per rimpiazzare da riga di comando alcuni caratteri contenuti in un file di testo con altri caratteri? In sostanza, mi serve un modo per convertire tutti i «<» contenuti in un file in «:»

__________

$ sed -e s/\</:/g nomefile > nuovofile[Invio]

68.25   Ricerca indirizzi e-mail in un file html

Come faccio a ricavare da una pagina html tutti gli indirizzi e-mail in essa contenuti? Mi servirebbe per automatizzare un lavoro che adesso sto facendo a mano. Ho fatto qualche prova con il grep ma senza molti risultati.

__________

Se hai installato l'interprete perl, puoi risolvere con una riga di comando di questo tipo che ti garantisce una certa precisione:

$ cat file.html | perl -e 'while ($l=<STDIN>) {$l=~/mailto:\s*([\w-_\.]+\@[\w-_\.]+\.[\w-_\.]+)/ && print "$1\n";}'[Invio]

Se gli indirizzi e-mail da estrapolare non compaiono sotto forma di tag HTML, puoi togliere la stringa relativa al mailto e lo spazio nella regexp.

68.26   Rinominazione progressiva file - pt. 1

Quale potrebbe essere lo script che prende tutti i file di una directory e li rinomina progressivamente (1.zip 2.zip ecc.) ?

__________

#!/usr/bin/perl

$my_dir = @ARGV[0] || die "Non è stata specificata la directory\n";
@files = `ls $my_dir`;
chop @files;

foreach $f(@files) {
        $count++;
        $f =~ /\.(.*)/;
        rename("$my_dir/$f", "$my_dir/$count.$1");
}

oppure:

#!/bin/bash
#
_N=1
for _F in 'ls'
do
    mv $_F ${_N}.zip
    _N='expr $_N + 1'
done

se invece vuoi aggiungere solamente il suffisso .zip allora:

#!/bin/bash
#
for _F in 'ls'
do
    mv $_F  ${_F}.zip
done

68.27   Rinominazione progressiva file - pt. 2

Come si fa in modo semplice quello che in Dos si faceva per esempio con:

ren abc*.txt abc*.asc ?

__________

Si può fare così:

$ for i in abc*.txt; do mv $i ${i%.txt}.asc; done[Invio]

Se i file sono tantissimi ed eccedi la lunghezza massima di una riga di comando, puoi sempre fare:

$ find . -name "abc*.txt" | while read i; do mv $i ${i%.txt}; done[Invio]

ma attenzione che find è ricorsivo.

Le forme:

${nomevariabile%%pattern}

${nomevariabile%pattern}

${nomevariabile##pattern}

${nomevariabile#pattern}

vengono espanse dalla shell nel contenuto della variabile tranne la parte all'inizio (`#') o alla fine (`%') che soddisfa il pattern. Il pattern è al solito un pattern di shell (*,?,[a-z]), e non un'espressione regolare.

Con `##' e `#' il pattern viene eventualmente tolto dall'inizio, mentre con `%%' e `%' viene eventualmente tolto dalla fine. La differenza tra `##' e `#' (o `%%' e `%') sta nel fatto che il primo rimuove il pattern più lungo possibile, mentre il secondo rimuove il più corto possibile.

68.28   Aggiungere una stringa alla fine di ogni riga di un file testo

Come si fa ad aggiungere una stessa parola alla fine di ogni riga di testo?

__________

$ cat file-name | sed "s/$/xxx/"[Invio]

dove xxx è la stringa da aggiungere.

68.29   Decomprimere diversi file in directory sequenziali

Ho le seguenti necessità:

  1. creare 2000 directory;

  2. inserire in ognuna di esse un file .zip;

  3. entrare nelle directory una ad una e lanciare unzip nomefile di volta in volta.

__________

La shell è lì apposta per questo genere di lavori basta dirgli cosa fare più o meno nei termini in cui l'hai descritto a parole, ossia:

    #!/bin/sh

    cd /zipdir

    for f in *
    do
        mkdir /destinazione/$f
        unzip $f -d /destinazione/$f
    done

Lo script assume che tutti gli zip siano in /zipdir e che la directory /destinazione esista già.

Per il resto non fa altro che elaborare i file uno per uno, creare una directory con lo stesso nome del file .zip, e decomprimercelo dentro.

Capitolo 69.   Linguaggio C

69.1   *.h, *.o e *.c

Che cosa sono precisamente i file *.h e *.o in un programma C?

__________

Supponendo di lavorare sul file miofile, il codice sorgente vero e proprio viene scritto in miofile.c. miofile.h, detto file di intestazione contiene le dichiarazioni delle variabili e delle funzioni implementate nel file miofile.c.

Infine il codice oggetto risultante dalla compilazione risiederà in miofile.o.

69.2   Avvio del compilatore C++

Come faccio ad avviare il compilatore C++ dalla shell di Linux?

__________

Con:

$ g++ -o nomefile nomefile.cpp[Invio]

-o serve a dare un nome all'eseguibile diverso dal nome predefinito, che è 'a.out'.

69.3   Messaggio di errore: bus error

Qualcuno sa dirmi in quali condizioni si verifica un errore di tipoBus Error? Ho scritto un'applicazione C++ che ogni tanto senza spiegazioni cessa di funzionare e restituisce un Bus Error in zone di codice diverse.

__________

Compila il programma con l'opzione -g ed eseguilo. Quando si interrompe, analizza le cause con:

$ dbx nomeprogr core[Invio]

e tramite l'istruzione where puoi vedere dove è accaduto l'errore.

Solitamente Bus Error accade per un superamento dei limiti di memoria, un indice di un array che supera il limite, un fine-stringa mancante ecc.

69.4   Conio.h (da Dos a Linux)

Girovagando tra i miei passati programmi compilati col Turbo C++ ne ho trovato uno che mi potrebbe servire anche in Linux. Questo programma però include alcuni file tipo conio.h, graphics.h e dos.h che in Linux naturalmente non ci sono. Il mio problema è quello di sapere se è possibile trovare file .h omologhi anche in Linux o devo cambiare radicalmente il sorgente?

__________

Cerca su sunsite.unc.edu un file che si chiama:

linux-conio-x.yy.tgz

che sostituisce il conio.h della Borland; ho avuto qualche problemino ma l'ho ritoccato e funziona discretamente.

Comunque, molto brevemente (e imprecisamente):

        conio.h -> ncurses.h
        graphics.h -> vga.h
        dos.h -> ???

Tuttavia le librerie sotto Linux hanno un modo di operare completamente diverso e ti consiglio uno studio accurato della documentazione.

Capitolo 70.   Pascal

70.1   Compilatore Pascal per Linux - conversione da Pascal a C

Posso convertire un sorgente Pascal in C?

__________

Esiste p2c che sta per «da pascal a c». Dato un sorgente Pascal, esso genera un altro sorgente C che puoi compilare tranquillamente con gcc.

Il nome di Pascal-to-C è indicato dal suo autore come P2c. Tuttavia, P2C è anche il nome di un altro compilatore analogo, realizzato per sistemi speciali: <http://www.geocities.com/SiliconValley/Network/3656/p2c/linux.html>. In questo secondo caso, oltre alla particolarità del compilatore stesso, c'è da considerare il fatto che non si tratta di software libero.

Capitolo 71.   Cobol

71.1   Cobol in Linux

Esistono dei compilatori Cobol per Linux?

__________

GNU Cobol2c Versione 0.0.0 (in sviluppo) Home Page: <http://www.gnu.org/software/cobol> (licenza: GPL)

Tiny Cobol (licenza: GPL)

rpcobol (licenza: GPL)

Capitolo 72.   Perl

72.1   Installare moduli Perl

Il modo migliore per installare i moduli in Perl è con il comando:

perl -MCPAN -eshell[Invio]

e al prompt digita:

install Tk[Invio]

(Tk in questo caso è un esempio di modulo da installare) Sarà necessaria una breve fase di configurazione guidata se installi i moduli in questo modo per la prima volta, ma tutta la fase di scarico del modulo, test, installazione è automatica, comprendendo anche eventuali installazioni di moduli necessari a quello in oggetto. In alternativa, per installare un modulo Perl a mano, dopo averlo scompattato ed essere entrati nella directory dove è stato decompresso, si può inizializzare la procedura di installazione con:

perl Makefile.PL[Invio]

Il modulo viene creato mediante il comando:

make[Invio]

testato con:

make test[Invio]

ed installato con:

make install[Invio]

durante tutte queste fasi si possono presentare inconvenienti, ad esempio altri moduli da installare che sono necessari a quello in oggetto, oppure test falliti per qualche ragione.

Parte xiii.   Computer portatili

Capitolo 73.   Problematiche di installazione

73.1   Problemi audio su Acer TM 312D

Ho un paio di problemi con un Acer Travel Mate 312D. Non mi trova la scheda audio che è una OPL3-Sax; la riconosce tramite pnp ma non sembra riconoscere le impostazioni che fornisco io manualmente.

Ho modificato /etc/modules.conf, ma così ho solo risolto parzialmente il problema. Ho provato a modificare /etc/isapnp.conf ma non mi accetta 10 come DMA a 16 bit, peccato che sia proprio quello che mi serve.

__________

Puoi provare a crearti un nuovo file con:

# pnpdump --config>opl3sa.conf[Invio]

e poi lo adatti.

Dovresti arrivare a qualcosa come questo:

######
(READPORT 0x0203)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING

(CONFIGURE YMH0030/2156265473 (LD 0
  (IO 0 (SIZE 16) (BASE 0x0220))
  (IO 1 (SIZE 8) (BASE 0x0530))
  (IO 2 (SIZE 8) (BASE 0x0388))
  (IO 3 (SIZE 2) (BASE 0x0330))
  (IO 4 (SIZE 2) (BASE 0x0370))
  (INT 0 (IRQ 5 (MODE +E)))
  (DMA 0 (CHANNEL 0))
  (DMA 1 (CHANNEL 1))

 (NAME "YMH0030/2156265473[0]{OPL3-SA3 Snd System }")
  (ACT Y)
))
(CONFIGURE YMH0030/2156265473 (LD 1
  (IO 0 (SIZE 1) (BASE 0x0201))

 (NAME "YMH0030/2156265473[1]{OPL3-SA3 Snd System }")
  (ACT Y)
))
(WAITFORKEY)
########

Naturalmente:

# isapnp opl3sa.conf[Invio]

va eseguito senza moduli audio caricati.

Per inserire i moduli nel corretto ordine, ti consiglio:

# modprobe mpu401[Invio]

# modprobe ad1848[Invio]

# modprobe opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1[Invio]

# modprobe opl3 io=0x388[Invio]

come si legge anche nei sorgenti del kernel.

73.2   Tastiera inutilizzabile dopo l'installazione

Ho tentato di installare la Red Hat 6.0 sul mio portatile, ma al login non posso usare alcun tasto. Perché?

__________

Disabilita il pcmcia; all'avvio fa dei danni. Lo puoi far partire dopo e funziona.

Per ovviare all'inconveniente, all'avvio di LILO scrivi:

LILO: linux init 1[Invio]

dalla shell vai in /etc/rc.d/init./ e fai:

# mv pcmcia pcmcia.old[Invio]

Riavvia il sistema.

La macchina ripartirà e non si bloccherà; come utente root dal 'setup' di Red Hat disabilita da 'system service' il pcmcia alla partenza.

C'è un altro metodo: andare a vedere nel BIOS del portatile e mettere sotto la voce pc card il controller mode come Cardbus/16 -bit. Dopodiché il demone pcmcia funzionerà anche al boot.

73.3   Modem pcmcia non riconosciuto

Il kernel non sembra riconoscere il mio modem pcmcia sul mio portatile. Consigli?

__________

Il supporto seriale va compilato nel kernel e non come modulo altrimenti il modem pcmcia non funzionerà.

Parte xiv.   Hardware

Capitolo 74.   Processori

74.1   Processore K6 e Linux

Avevo intenzione di comprare un K6. Ci sono problemi con Linux?

__________

Il K6 III sembra avere dei problemi con i kernel 2.0.x e i primi 2.2.x.

Capitolo 75.   Monitor

75.1   Come si può impostare il risparmio energetico per il monitor?

__________

inserisci in ~/.xinitrc, prima della riga deputata al caricamento del gestore delle finestre, le righe:

xset dpms 420 540 900
xset +dpms

Capitolo 76.   Dispositivi video (scheda, telecamera, ecc.)

76.1   Linux come stazione di montaggio video, informazioni

È possibile realizzare una stazione di montaggio video sotto Linux? Ossia esistono schede di acquisizione compatibili e programmi per farlo?

__________

Il movimento sta crescendo.

Attualmente le schede TV con i chipset BT8xx sono quasi tutte garantite. Io uso la mia scheda TV e prendo immagini e filmati direttamente dalla televisione oppure dall'ingresso S-VHS presente sulla mia scheda.

Per informazioni sui driver BTTV: <http://www.metzlerbros.de/bttv.html>

Tra i programmi per vedere la televisione e catturare troviamo:

<http://www.in-berlin.de/User/kraxel/xawtv.html> (licenza: GPL) per i filmati crea file avi

Ovviamente la risoluzione che offrono è quella di uno schermo TV

Entrambi i programmi sono reperibili in diversi formati al sito <http://www.linuxberg.com>

Sul fronte delle schede Matrox sono nati dei progetti che stanno dando ottimi risultati:

per la Rainbow Runner si possono usare i driver scaricabili dal sito <http://www.penultima.org/~iconnor/mgavideo/>

per quello che la riguarda la Marvel si possono avere informazioni al sito: <ftp://ftp.rwii.com/pub/linux/system/Meteor/meteorman.html>

Esistono anche progetti (che stanno portando i loro frutti) per schede di qualità superiore:

per la MV100 basta recarsi al sito: <http://wpfd25.physik.uni-wuerzburg.de/~karrer/mv1000/mv1000.html>

Per le schede Mirò invece: Dc1 e Dc1Plus: <http://www.net4you.net/users/scherr/dc1plus/index.html>

Per la Dc30: <http://stud3.tuwien.ac.at/~e8125426/dc30/>

Anche per Iomega BUZZ esistono i driver: <http://www.lysator.liu.se/~gz/buz/>

Esiste poi un hardware dedicato a Linux: la scheda LML33 (prezzo ~ 490$) prodotto da LinuxMedialabs <http://www.linuxmedialabs.com/>

Per maggiori dettagli sui driver per la cattura fotogramma tenere sott'occhio il sito: <http://www.atlantek.com.au/USERS/wes/linux/frame/drivers.html>

Tutti i progetti sono raccolti nel Video4Linux: <http://roadrunner.swansea.uk.linux.org/v4l.shtml> che sta arrivando anche alla seconda versione.

Da tenere sotto controllo gli sviluppi di Trinity (licenza: GPL) <http://members.xoom.com/NicholasF/> e Vstream (licenza: GPL) <http://www.ee.up.ac.za/~justin/bttv/>

Se poi hai bisogno di sottotitolare i tuoi film, puoi usare b@k@sub (licenza: GPL) <http://www.allusion.net/bakasub/>.

76.2   G200 AGP e Linux

Per la scheda video G200 AGP, nelle versioni da 8 e da 16 Mb di RAM, occorre aprire il file /etc/X11/XF86Config (se non risiede in questa directory cercalo nel file system perché purtroppo la sua posizione varia da distribuzione a distrubuzione) ed inserire questa sezione:

 ------------------------
 Section "Device"
     Identifier  "G200"
     VendorName  "Matrox"
     BoardName   "AGP" 
     VideoRam 8192
 EndSection
 ------------------------

76.3   Scheda SiS 6326

Come faccio a configurare Linux con la mia scheda SiS 6326

__________

Ho una SiS 6326 ed è gestita Tier 3 (ovvero va, ma solo al 50% delle possibilità) almeno fino all'Xfree86 3.3.5.

Il 3.3.6 dovrebbe avere un sopporto opportuno delle SiS.

Comunque bisogna aggiungere in XF86Config, nella sezione Device:

Section "Device"
    Identifier  "Silicon Integrated Systems [SiS]|86C326"
    VendorName  "Unknown"
    BoardName   "Unknown"
    #VideoRam    4096 
    Option "no_accel" 
    Option "sw_cursor" 
    Option "no_imageblt"
    # Option "no_bitblt"
    Option "fast_vram"
    Option "pci_burst_on"
EndSection

Se hai ancora problemi, prova a decommentare l'opzione no_bitblt.

Così non dovrebbe dare problemi, ma girerà senza alcuna accelerazione.

Capitolo 77.   Tastiera

77.1   Tasti accessori della tastiera (regolazione volume, comandi cd)

Ho una tastiera particolare con parecchi tasti aggiuntivi. Sotto Windows parte di questi tasti servono per controllare l'audio (volume + e -; muto, ecc.) e il CD (play/pausa; stop, chiudi/espelli), altri sono programmabili per far partire determinati programmi, aprire certe cartelle ecc.

C'è un modo per poter assegnare delle funzioni a questi tasti anche sotto Linux? Ho letto da qualche parte che c'è chi ha riprogrammato i tasti Windows e Menù Contestuale delle tastiere Windows, immagino sia la stessa procedura, ma ignoro come si faccia e non so dove trovare informazioni.

__________

Io utilizzo una tastiera a 108 tasti (3 di Windows + sole nascente, mezzaluna e power) che ho riprogrammato così:

con showkey -k controlli quali tasti sono già associati a un codice tasto: premi i vari pulsanti e ti segni il numero decimale corrispondente (per uscire attendi 10s senza premere alcun tasto);

se alcuni tasti non danno segni di vita ripeti l'operazione con showkey -s: ad es. a me i 3 tasti di Windows risultavano assegnati già a 125, 126, 127, mentre i 3 tasti aggiuntivi apparivano muti. Con showkey -s invece ho ottenuto:

0xe0 0x63 
0xe0 0xe3 

pressione e rilascio del tasto col sole

0xe0 0x5f 
0xe0 0xdf 

pressione e rilascio del tasto con la luna

0xe0 0x5e 
0xe0 0xde 

pressione e rilascio del tasto col simbolo power

Ora devi assegnare un codice tasto a tali tasti, col comando:

# setkeycodes scancode keycode[Invio]

Es.:

# setkeycodes e063 122[Invio]

Attenzione: non utilizzare una mappa della tastiera già utilizzata! Meglio controllare prima l'organizzazione della tastiera attiva.

Modifica poi la tua mappa della tastiera per assegnare le funzioni che desideri ai nuovi tasti: io ho proceduto con delle stringhe che contengono i comandi da eseguire, ad es. per spegnere la macchina col tasto power ho modificato così il file /etc/kbd/default.map.gz (ho una Debian GNU/Linux 2.1)

[...]
keycode 124 = F69
[...]

e più avanti:

[...]
string F69 = "shutdown -h 1 &\n"
[...]

(ho messo un ritardo di un minuto in modo da avere il tempo di cancellare lo 'shutdown' in caso di pressioni accidentali. Altrimenti basta spegnere il monitor e andarsene, se è attivo il supporto per APM nel kernel e hai selezionato l'opzione power off on halt la macchina si spegne da sé).

Attenzione anche a concludere la stringa con «\n»! Con questa procedura la pressione di un tasto speciale viene interpretata come la battitura della stringa corrispondente, e come per ogni comando dopo ci vuole l'invio.

77.2   Impostare la tastiera italiana: i passaggi - pt. 1

Come si imposta la tastiera italiana nel mio sistema?

__________

Ecco i passaggi da seguire per impostare la tastiera italiana nella propria macchina.

Posizionarsi in /usr/lib/kbd/keymaps:

# cd /usr/lib/kbd/keymaps[Invio]

qui sono presenti diverse sottodirectory (a seconda della piattaforma), occorre posizionarsi nella directory corrispondente alla propria. Nel caso di Intel sarà i386:

# cd i386[Invio]

In questa directory è presente un'ulteriore struttura che presenta tante sottodirectory quanti sono i modelli di tastiera. In genere, il modello più diffuso è qwerty (dalle prime lettere della tastiera in alto a sinistra)

# cd qwerty[Invio]

a questo punto, con:

# ls it*[Invio]

è possibile verificare che esista il file di configurazione corrispondente alla lingua italiana.

Se non c'è, frugate nei vostri CD che lo trovate.

Le scelte dovrebbero essere: it-ibm.kmap.gz it.kmap.gz it2.kmap.gz (di solito it.kmap.gz dovrebbe andar bene, salvo casi particolari)

Per installare, eseguire il comando:

# loadkeys it[Invio]

che restituirà:

Loading it.kmap.gz

Se vi interessa verificare l'impostazione della tastiera:

# dumpkeys[Invio]

(meglio redirigere l'output in un file, visto che è piuttosto prolisso):

# dumpkeys > tastiera.txt[Invio]

questi passi dovrebbero consentire di configurare la tastiera per la console testuale.

Per X si utilizzi Xf86Setup.

77.3   Impostare la tastiera italiana: i passaggi - pt. 2

Come faccio a impostare la tastiera italiana?

__________

Devi inserire nel file /etc/sysconfig/keyboard la riga:

KEYTABLE="usr/lib/kbd/keytables/it.map" 

o comunque indica il percorso dove c'è il file it.map.

In ogni caso:

# loadkeys it.map[Invio]

(oppure solo it, è indifferente).

Solitamente le mappe delle tastiere sono in /usr/lib/kbd/keytables

Alcune volte la mappa caricata in realtà è un collegamento verso la mappa reale, così basta che cambi il collegamento e sei a posto.

77.4   Impostare tastiere estere

Qualcuno sa come impostare la tastiera americana estesa?

__________

La tastiera si imposta con:

# loadkeys nome-file[Invio]

dove nome-file è il file di mappa della tastiera, normalmente reperibile nella directory:

/usr/share/keytables/

Tali file terminano con .map e hanno un nome abbastanza significativo, tipo it.map it2.map.

77.5   Caratteri accentati su tastiera statunitense

È possibile generare i caratteri accentati su una tastiera statunitense?

__________

Per quanto riguarda X la cosa è molto semplice, basta modificare il file XF86Config mettendo la riga:

XkbLauout "us_intl"

In particolare ho questo file:

 Section "Keyboard"
    Protocol        "Standard"
    AutoRepeat      500 30
    LeftAlt         Meta
    RightAlt        Meta
    ScrollLock      Compose
    RightCtl        Control
    XkbKeycodes     "xfree86"
    XkbTypes        "default"
    XkbCompat       "default"
    XkbSymbols      "us(pc102)"
    XkbGeometry     "pc"
    XkbRules        "xfree86"
    XkbModel        "pc102"
    XkbLayout       "us_intl"
 EndSection

Per quanto riguarda il terminale il problema sono riuscito a risolverlo copiando il file us-acent.kmap.gz.

Se si vuole fare il carattere è basta premere in sequenza `e, Il bello è che si può fare anche È o È premendo 'E o `E! Se si vuole esagerare con "e si ottiene ë, oppure ~a genera ã. L'unica nota di demerito è che se si vuole fare realmente il carattere ` o ' o ancora " o ~ si deve premere successivamente al carattere lo spazio.

77.6   Riconfigurare la tastiera

Come posso modificare le impostazioni dei tasti della tastiera?

__________

Con:

# xkbcomp :0 -[Invio]

viene scaricata su standard output la mappa della tastiera. Se la redirigi su un file, la modifichi, e la reinstalli con il procedimento inverso, puoi configurare la tastiera come vuoi, e far sì, per esempio, che le parentesi graffe siano in corrispondenza di 8 e 9 come con la console testuale.

Capitolo 78.   Mouse

78.1   Configurazione mouse PS2

Durante l'installazione di Debian GNU/Linux 2.1 ho impostato il mouse come seriale, invece del PS2. Se eseguo startx non funziona come dovrebbe. Come devo fare per riconfigurare il mouse?

__________

C'è il programma gpmconfig, che funziona da console. Lo lanci, e visto che anch'io ho avuto diversi problemi con i mouse su X, ti conviene aggiungere l'opzione -R allo script che lancia gpm, comunque gpmconfig ti chiede se vuoi aggiungere qualche opzione.

Poi configuri il mouse in XF86Config così:

Section "Pointer"
   Protocol        "MouseSystems"
   Device          "/dev/gpmdata"

(BaudRate non so se deve essere cambiato, prova con 1200)

In pratica in questo modo il mouse lo comanda sempre gpm, e passa le informazioni a X attraverso /dev/gpmdata.

Il dispositivo per il mouse PS/2 è /dev/psaux. O metti quello quando lanci gpmconfig, oppure fai il link e metti /dev/mouse.

Esiste anche gpm-mouse-test, per controllare la configurazione.

78.2   Rotellina del mouse

Chi saprebbe indicarmi come attivare la rotellina del mouse? Il mouse in questione è PS2, un Logitech MouseWare.

Devi aggiungere nella sezione Pointer di /etc/X11/XF86Config le voci:

 Buttons 5
 ZAxisMapping 4 5

(N.d.A. Questa metodica funziona solo sotto il Desktop Manager Gnome. Questa purtroppo è una mancanza delle librerie QT che non supportano la rotellina in modo nativo, questo vale almeno per le QT 1.x. La soluzione potrebbe essere caricando qualche modulo di Xwindows)

Capitolo 79.   Disco rigido

79.1   Dischi UltraDMA - UltraATA e relativi controller non riconosciuti

Mi compare un messaggio di errore relativo al controller IDE e quindi non riesco ad accedere al disco rigido. Ho una scheda madre il cui controller gestisce il dischi UltraDMA 66 (UltraATA).

__________

I dischi UltraDMA 66 (detti anche UltraATA) utilizzano un controller speciale che permette una velocità di trasferimento di picco di 66mbytes/sec, (siglato HPT366). I kernel della serie 2.2.x non lo gestiscono e bisogna quindi passare ai kernel sperimentali (HPT366 supportati dalla versione 2.3.12 del kernel).

Ne va da sé che tentando di installare una distribuzione che abbia un kernel obsoleto su di un disco UltraATA 66 questa operazione risulterà non possibile. Si potrebbe anche utilizzare un altro disco IDE normale, per l'aggiornamento del kernel e la reinstallazione sul disco UltraATA ma è un lavoro alquanto macchinoso.

Per i più pazienti basterà attendere il rilascio del kernel 2.4.x: l'installazione da CD-ROM di una distribuzione con questo kernel riconoscerà automaticamente i dischi UltraDMA 66.

Capitolo 80.   CD-ROM e masterizzatori

80.1   CD-ROM esterno parallelo

Qualcuno sa dirmi come posso far vedere a Linux un CD-ROM esterno connesso via porta parallela?

__________

Fai un link che fa puntare /dev/cdrom alla tty della parallela.

80.2   Problema con il cdrom

Quando lancio startx il server grafico parte regolarmente ma sulla console da dove ho lanciato X (CTRL+ALT+F1, per intenderci) mi viene segnalato un loop infinito questo errore:

 VFS: busy inodes on changed media.
 Atapi device hdd:
 
 Error : Not ready -- (Sense key = 0x02)
 (reserved error code) -- ( osc = 0x3a,ascq =0x02)
 The failed "Test unit Ready" packet command was:
 "00 00 00 00 00 00 00 00 00 00 00 00 "

__________

La soluzione dovrebbe essere in gnome control center. Prova a disattivare l'«automounter» di Gnome. Basta entrare in «Periferiche» alla voce CD «Properties».

80.3   Configurazione masterizzatore IDE pt. 1/3 (da leggersi unitamente alle altre due)

Come faccio a far riconoscere a Linux il mio masterizzatore ide?

__________

Devi ricompilare il kernel con il supporto emulazione SCSI sui CD-ROM i quali si configurano come SCSI reali.

nel processo di ricompilazione del kernel seleziona:

BLOCK DEVICE e alla voce
SCSI EMULATION SUPPORT

scegliere la Y.

Selezionare SCSI SUPPORT e alla voce:

SCSI GENERIC SUPPORT

scegliere la Y.

Salvare e compilare il kernel (se ovviamente gli altri parametri erano rimasti invariati). I CD-ROM IDE verranno riconosciuti automaticamente. come periferiche SCSI e dovrai riconfigurare il file /etc/fstab di conseguenza. Dovrà risultare qualcosa del tipo:

/dev/scd0 /cdrom iso9660 ro,noauto,user 0 0

80.4   Configurazione masterizzatore IDE pt. 2/3 (da leggersi unitamente alle altre due)

Quali sono, più o meno esattamente, le impostazioni necessarie al kernel per fargli credere che il masterizzatore IDE sia una periferica SCSI?

__________

Il kernel va ricompilato includendo:

SCSi support
SCSI generic support
SCSI CD-ROM support
SCSI emulation support

e disattivando il supporto per i CD-ROM IDE. (riguardo quest'ultimo punto, leggere l'LDR intitolata: Configurazione masterizzatore IDE pt. 3/3)

quando hai fatto tutto, lancia "cdrecord -scanbus" in un terminale grafico per verificare la tua situazione.

80.5   Configurazione masterizzatore IDE pt. 3/3 (da leggersi unitamente alle altre due)

Ma se per far vedere il masterizzatore IDE devo disattivare il supporto per i CD-ROM EIDE, come faccio a utilizzare il CD-ROM (ide)? Emulo pure quello attraverso lo SCSI?

__________

Non eliminare il supporto per i CD-ROM IDE che sarebbe la voce:

include IDE/ATAPI CDROM support

Aggiungi invece la seguente riga a /etc/lilo.conf, nella sezione relativa al linux:

append="hdd=ide-scsi"

(o hdb, hdc, a seconda di dov'è il masterizzatore).

L'accesso in lettura al masterizzatore, avverrà comunque come se fosse uno SCSI.

80.6   Nome del dispositivo associato al masterizzatore ide

Pare che il mio kernel abbia riconosciuto il mio masterizzatore ide ma ora come accedo? Quale è il nome del dispositivo? /dev/cosa?

__________

Dovrebbe essere /dev/hdL (dove L è una lettera: a,b,c,d, ecc.)

Dipende da dove è stato connesso, e segue la stessa regola dei dischi fissi:

prima catena ide: master=hda, slave=hdb;

seconda catena ide: master=hdc, slave=hdd.

Se non sai come è stato connesso, prova per tentativi, eliminando i dispositivi cui corrispondono i dischi e il CD-ROM.

Es.:

inserire un CD-ROM nel masterizzatore, creare la directory di mount:

# mkdir /mnt/masterizzatore[Invio]

(va fatto solo una volta) montare il CD-ROM presente nel masterizzatore:

# mount -t iso9660 /dev/hdb /mnt/masterizzatore[Invio]

se vengono emessi segnali di errore provare con un'altra lettera.

Per provare a vedere il contenuto della directory principale del CD-ROM nel masterizzatore:

# ls -la /mnt/masterizzatore[Invio]

se la directory appare vuota, allora il CD non è stato montato.

80.7   Riconoscere un masterizzatore SCSI

Ho acquistato un masterizzatore SCSI, come faccio a farlo riconoscere?

__________

Ricompila il Kernel attivando:

Enhanced IDE/MFM/RLL....(attivo)
IDE Atapi cd rom (attivato)
SCSI HostAdaptor emulation  (attivo)
Loopback device (modulo)

SCSI support (attivo)
SCSI cd rom support (attivo/modulo)
Enable vendor specific (attivo)
Scsi generic support (attivo)

ISO 9660 cdrom filesystem (attivo)
Microsoft Joliet (attivo)

Compila il nuovo kernel e rinomina l'immagine (bzImage) ad esempio in 'scsi'. Quando vuoi masterizzare in LILO scegli l'etichetta 'scsi' che punta alla nuova immagine.

80.8   Nome del dispositivo del masterizzatore SCSI

Pare che il mio kernel abbia riconosciuto il mio masterizzatore SCSI ma ora come accedo? Quale è il nome del dispositivo? /dev/cosa?

__________

Dovrebbe essere /dev/scdX (devi fare dei tentativi sostituendo X con 0,1,2,3, ecc. durante il montaggio).

Es.:

inserire un CD-ROM nel masterizzatore, creare la directory di mount:

# mkdir /mnt/masterizzatore[Invio]

(va fatto solo una volta) montare il CD-ROM presente nel masterizzatore:

# mount -t iso9660 /dev/scd0 /mnt/masterizzatore[Invio]

se vengono emessi segnali di errore provare con un altro numero.

Per provare a vedere il contenuto della directory principale del CD-ROM nel masterizzatore:

# ls -la /mnt/masterizzatore[Invio]

se la directory appare vuota, allora il CD non è stato montato.

Capitolo 81.   Schede di rete

81.1   Schede di rete NE 2000 compatibili

Ho una scheda NE 2000 compatibile. Come faccio a farla riconoscere a Linux?

__________

Devi dichiarare come modulo il supporto per questa scheda durante la ricompilazione del kernel.

Fatto questo, se la scheda è PCI fai:

# modprobe ne2k-pci[Invio]

Se è ISA prova:

# insmod ne io=0x300H[Invio]

ma controlla i ponticelli per sapere l'indirizzo o rilevalo servendoti del dischetto che di solito accompagna la scheda.

Se rilevi errore prima fai:

# insmod 8310[Invio]

Se tutto funziona inserisci nel file /etc/rc.d/rc.sysinit le righe funzionanti per automatizzare la procedura all'avvio.

Capitolo 82.   Scheda audio

82.1   Rilevare schede audio PNP

Come si fa a rilevare una scheda audio PNP?

__________

Prima di tutto il kernel deve essere compilato prevedendo l'uso dei moduli oss e dei moduli audio appositi oppure si può anche utilizzare alsadriver.

Poi si devono scaricare i moduli audio altrimenti il riconoscimento delle periferiche PNP potrebbe venire compromesso.

Questa momentanea depurazione la si ottiene con questo script:

cat /proc/modules|gawk '/^uar/{print $1}'|xargs -i rmmod {} 
cat /proc/modules|gawk '/^snd/{print $1}'|xargs -i rmmod {} 
cat /proc/modules|gawk '/^opl/{print $1}'|xargs -i rmmod {} 
cat /proc/modules|gawk '/^ad/{print $1}'|xargs -i rmmod {} 
cat /proc/modules|gawk '/^sound/{print $1}'|xargs -i rmmod {} 
cat /proc/modules|gawk '/^mpu/{print $1}'|xargs -i rmmod {} 
cat /proc/modules|gawk '/^isa/{print $1}'|xargs -i rmmod {} 

poi si deve creare il file isapnpNEW.conf per ottenere il file di configurazione generico delle periferiche PNP (e questo vale solo per le schede isa, non per le pci):

# pnpdump --config>isapnpNEW.conf[Invio]

e poi si da il comando:

# isapnp isapnpNEW.conf[Invio]

Bisogna poi inserire i moduli soundcore e sound con i seguenti comandi:

# insmod soundcore[Invio]

e:

# insmod sound[Invio]

Fatto questo bisogna inserire il modulo della scheda audio.

In ogni caso l'elenco dei moduli, le sequenze e le modalità di inserimento cambiano da scheda a scheda e sono presenti in genere nei documenti della directory /usr/src/linux/Documentation/sound/ per cui è consigliabile fare riferimento prima a tale documentazione.

82.2   Scheda audio OPTi 931S su slot ISA

Ho tentato di compilare il kernel 2.2.9 per la mia scheda audio (OPTi 931S su slot ISA) senza però risultato.

__________

La scheda funziona con i moduli OSS: la devi attivare con isapnp e inserire i moduli nel corretto ordine, per questo basta leggere nei sorgenti del kernel; il file è:

/usr/src/linux/Documentation/sound/Opti.

di cui questo è una parte:

This is the sound part of my /etc/conf.modules file.
Following that I will explain each line.

alias mixer0 mad16
alias audio0 mad16
alias midi0  mad16
alias synth0 opl3
options sb mad16=1
options mad16 irq=10 dma=0 dma16=1 io=0x530 joystick=1 cdtype=0
options opl3 io=0x388
post-install mad16 /sbin/ad1848_mixer_reroute 14 8 15 3 16 6

82.3   Riconoscimento SBLive!

Ho una SBLive!. Come faccio a farla riconoscere al mio sistema?

__________

Devi scaricarti il file emu10k1***.tar.gz dal sito della Creative, in seguito occorre ricompilare il kernel secondo le indicazioni del file README. Occorre poi impartire:

# make[Invio]

e:

# make install[Invio]

Comunque, nel kernel-2.3.99-pre6 emu10k1 è integrata. (Si può ancora compilare come modulo o come parte integrante del kernel)

82.4   Sound Blaster PCI 128 - device busy

Sto tentando di configurare la mia scheda audio, una Sound Blaster pnp PCI 128. Il sistema mi riconosce una scheda audio PCI, ma poi mi restituisce un errore:

Device or resource busy.

Lo stesso errore si verifica al momento di caricare il modulo all'avvio.

__________

Prova ad includerne il supporto nel kernel (non a dichiararla come modulo) e controlla che l'irq della scheda non sia in conflitto con qualche altro dispositivo. (la porta parallela ad esempio).

82.5   Sound Blaster PCI 64V - configurazione

Come si configura la scheda in questione?

__________

Si devono mettere queste impostazioni nel kernel:

Sezione sound:

<*> Sound card support
<*> Ensoniq AudioPCI (ES1370)

(o Creative Ensoniq AudioPCI97 ES1371)

<*> OSS sound modules
<*> 100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support
(220) I/O base for SB Check from manual of the card
(7) Sound Blaster IRQ Check from manual of the card
(1) Sound Blaster DMA 0, 1 or 3
(5) Sound Blaster 16 bit DMA
(330) MPU401 I/O base of SB16, Jazz16 and ES1688
(-1) SB MPU401 IRQ
<*> Generic OPL2/OPL3 FM synthesizer support
<*> SoftOSS software wave table engine
(22050) Sampling rate for SoftOSS 8000 to 48000
(32) Max # of concurrent voices for SoftOSS 4 to 32
<*> FM synthesizer (YM3812/OPL-3) support

e in 'Additional low level sound drivers' seleziona:

<*> AWE32 synth

Bene. Questi sono le impostazioni del kernel; ricompila, riavvia e imposta i permessi giusti con i comandi:

# chmod 666 /dev/dsp[Invio]

# chmod 666 /dev/mixer[Invio]

# chmod 666 /dev/sequencer[Invio]

# chmod 666 /dev/audio[Invio]

integrando i driver nel kernel non hai poi bisogno del comando insmod.

Facendo:

# cat /dev/sndstat [Invio]

al successivo riavvio, dovrebbe mostrarti almeno, tra altre cose, un

***********
Synth devices:
0: SoftOSS
***********

Infine devi configurare la parte midi (caricare i banchi col comando sfxload)

82.6   Scheda audio Yamaha opl3-sax

Ho cercato di installare la scheda sonora Yamaha opl3-sax, ma non ci riesco.

__________

Innanzitutto dovresti attivare la scheda con isapnp, dopo esegui:

# modprobe mpu401[Invio]

# modprobe ad1848[Invio]

# modprobe opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1[Invio]

# modprobe opl3 io=0x388[Invio]

(modificando opportunamente i valori).

Prova a vedere lo stato della scheda con:

# cat /dev/sndstat[Invio]

# cat /proc/modules[Invio]

e poi puoi provare il suono:

# play /usr/share/afterstep/desktop/sounds/train.au[Invio]

82.7   Avance Logic ALS 110 - configurazione

Come si fa a configurare ed usare una scheda audio Avance Logic als 110?

__________

L'unico modo che ho trovato per abilitare la als100 è quello di disabilitare il DMA 1 nel file di configurazione:

#/etc/als100.conf
(READPORT 0x020b)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING
(CONFIGURE ALS0110/-1 (LD 0
(IO 0 (BASE 0x220))
(INT 0 (IRQ  5 (MODE +E)))
(DMA 0 (CHANNEL  0))
# (DMA 1 (CHANNEL 0))
# volutamente commentato per conflitto dma
 (NAME "ALS0110/-1[0]{PnP Sound Chip }")
 (ACT Y)
))
(CONFIGURE ALS0110/-1 (LD 1
 (NAME "ALS0110/-1[1]{PnP Sound Chip }")
 (ACT Y)
))
(CONFIGURE ALS0110/-1 (LD 2
 (NAME "ALS0110/-1[2]{PnP Sound Chip }")
 (ACT Y)
))
(CONFIGURE ALS0110/-1 (LD 3
(INT 0 (IRQ 9 (MODE +E)))
 (NAME "ALS0110/-1[3]{PnP Sound Chip }")
 (ACT Y)
))
(WAITFORKEY)

Commenta le righe di /etc/conf.modules e rimuovi i moduli audio caricati; dopo riesegui:

# isapnp /etc/als100.conf[Invio]

ti dovrebbe restituire qualcosa del tipo:

Board 1 has Identity a3 ff ff ff ff 10 01 93 05:  ALS0110 Serial No -1
[checksum a3]
ALS0110/-1[0]{PnP Sound Chip      }: Port 0x220; IRQ5 DMA0 --- Enabled OK
ALS0110/-1[1]{PnP Sound Chip      }: --- Enabled OK
ALS0110/-1[2]{PnP Sound Chip      }: --- Enabled OK
ALS0110/-1[3]{PnP Sound Chip      }: IRQ9 --- Enabled OK

Prova poi a inserire i moduli sound, uart401 e sb come descritto in /usr/src/linux/sound

82.8   Scheda pnp 16 bit ISA Sound Blaster compatibile

Ho una scheda 16 bit 100% Sound Blaster compatibile ISA, ed un kernel 2.2.x ricompilato con tutto il supporto audio modulare; ho istallato e configurato isapnptools, e all'avvio qualcosa di nuovo viene riconosciuto, anche se non so se è la scheda in questione. Ora cosa devo fare?

__________

Inserisci in /etc/conf.modules le righe:

alias sound sb
pre-install sound insmod sound dmabuf=1
alias midi opl3
options opl3 io=0x388
options sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330

in /etc/modules inserisci solo la riga:

auto 

Ovviamente il tuo kernel deve essere ricompilato prestando attenzione che nella sezione Loadable Modules tutte e tre le opzioni siano abilitate. Ovviamente devi sostituire gli indirizzi nel caso cambiassero con quelli della tua scheda.

82.9   Riconoscimento scheda audio Sound Blaster 16 PNP

Ho una Sound Blaster 16 Vibra pnp, come faccio a farla riconoscere da Linux?

__________

Segui le istruzioni indicate in 82.1 fino al passaggio «# isapnp isapnpNEW.conf» compreso.

Poi dai i seguenti comandi:

# modprobe sound[Invio]

# insmod uart401[Invio]

# insmod sb io=0x220 irq=5 dma=1 dma16=7[Invio]

(ma questi valori li devi correggere con i tuoi)

Verifica con:

# play /usr/X11R6/lib/tkdesk/sounds/newmail.au[Invio]

o un altro suono; cercali con:

# find / -name "*.au" (o *.wav)[Invio]

Da /usr/src/linux/Documentation/sound/Soundblaster:

modprobe sound
insmod uart401
insmod sb ...

This loads the driver for the Sound Blaster and assorted clones. Cards that
are covered by other drivers should not be using this driver.

The Sound Blaster module takes the following arguments

io              I/O address of the Sound Blaster chip (0x220,0x240,0x260,0x280)
irq             IRQ of the Sound Blaster chip (5,7,9,10)
dma             8-bit DMA channel for the Sound Blaster (0,1,3)
dma16           16-bit DMA channel for SB16 and equivalent cards (5,6,7)
mpu_io          I/O for MPU chip if present (0x300,0x330)

82.10   Riconoscimento della scheda audio opl3sax

Ho una scheda audio opl3sax, come posso fare per farla riconoscere?

__________

Segui le istruzione preliminari in 82.1.

Dopo ciò carica i moduli necessari per la scheda:

Se avete comiplato i moduli OSS:

# modprobe mpu401[Invio]

# modprobe ad1848[Invio]

# modprobe opl3sa2 io=0x370 mss_io=0x530 mpu_io=0x330 irq=5 dma=0 dma2=1[Invio]

# modprobe opl3 io=0x388[Invio]

sostituendo i valori validi per la vostra scheda.

Per ALSA invece:

# modprobe snd-card-opl3sa2 snd_port=0x370 snd_wss_port=0x530 \ snd_midi_port=0x300 snd_fm_port=0x388 snd_irq=5 \ snd_dma1=0 snd_dma1_size=4 snd_dma2=1 snd_dma2_size=4[Invio]

# modprobe snd-pcm1-oss.o[Invio]

# modprobe snd-mixer-oss.o[Invio]

# aumix -L[Invio]

82.11   Sound blaster PCI 64V e driver ALSA

Ho una Sound Blaster PCI 64V, integrata su scheda madre, che non riesco a far funzionare; vorrei provare con i driver ALSA. Cosa devo fare?

__________

Devi ricompilare il kernel con il solo supporto del suono, senza alcun driver specifico. Installa i driver ALSA, e modifica il file /etc/conf.modules inserendo:

       
       alias char-major-116 snd
       alias snd-card-0 snd-card-ens-1371
       
       alias char-major-14 soundcore
       alias sound-slot-0 snd-card-0
       alias sound-service-0-0 snd-mixer-oss
       alias snd-service-0-1 snd-seq-oss
       alias snd-service-0-3 snd-pcm1-oss

Se lanci il comando:

# cat /proc/modules[Invio]

dovresti ottenere qualcosa tipo:

snd-pcm1-oss           13260   0 (autoclean)
snd-card-ens1371        2332   0 (autoclean)
snd-ens1371             7824   0 (autoclean) [snd-card-ens1371]
snd-pcm1               18108   0 (autoclean) [snd-pcm1-oss snd-ens1371]
snd-timer               8380   0 (autoclean) [snd-pcm1]
snd-ac97-codec         20384   0 (autoclean) [snd-ens1371]
snd-mixer              26688   0 (autoclean) [snd-card-ens1371 snd-ac97-codec]
snd-midi               13388   0 (autoclean) [snd-card-ens1371 snd-ens1371]
snd-seq-device          3136   1 (autoclean) [snd-card-ens1371]
snd-pcm                 8812   0 (autoclean) [snd-pcm1-oss snd-card-ens1371 snd-pcm1]
snd                    34880   1 (autoclean) [snd-pcm1-osssnd-card-ens1371 snd-ens1371 sn
                                              d-pcm1 snd-timer snd-ac97-codec snd-mixer sn
                                              d-midi snd-seq-device snd-pcm]

Prova anche a dare il comando:

# cat /proc/asound/cards[Invio]

e dovresti ottenere qualcosa tipo:

0 [card1          ]: AudioPCI - Ensoniq AudioPCI
                     Ensoniq AudioPCI ES1371 at 0xe400, irq 11

Ricordati che ora il volume è impostato come muto. Fai riferimento a 65.2.

Capitolo 83.   Lettori ZIP

83.1   Dispositivo comunemente associato ad uno Iomega ZIP Atapi installato sul canale master del secondo bus IDE.

Per montare il suddetto lettore ZIP:

mount -t vfat /dev/hdc4 /zip[Invio]

se si scrive «hdc1» (come la logica suggerirebbe) viene restituito errore.

83.2   Configurazione Iomega Zip parallelo in Linux

Come devo configurare il kernel per renderlo in grado di gestire un lettore Iomega Zip esterno da 100M connesso via porta parallela?

__________

Io possiedo il lettore ZIP Parallelo e viene visto come /dev/sda4. Per farlo funzionare devi includere nella compilazione del kernel le opzioni adatte.

Queste sono:

SCSI Support: Yes
SCSI Disk Support: Yes

All'interno della sezione SCSI Low Level Driver:

IOMEGA ZIP: Yes

All'interno della sezione Character Device:

Printer Support: Yes

Ricompila e guarda nei messaggi del kernel (con dmesg) se lo ZIP è stato riconosciuto.

Per montarlo:

# mount -t vfat /dev/sda4 /mount_point[Invio]

Per ulteriori informazioni esiste lo ZIP-Drive mini HOWTO.

83.3   Iomega Zip Plus (unresolved symbol parport...)

Ho un problema con lo Zip Plus. Ho da poco aggiornato la mia distribuzione. Prima per utilizzare lo Zip, utilizzavo i seguenti comandi:

insmod imm.o
mount -t vfat /dev/sda4 /zip

dove /zip è il mount point che avevo creato per lo zip

ora, quando digito insmod ottengo i seguenti messaggi di errore:

/lib/modules/2.2.9-27mdk/scsi/imm.o: unresolved symbol parport_release_Rcdfb4d19
/lib/modules/2.2.9-27mdk/scsi/imm.o: unresolved symbol parport unregister_devoce_R528dbb47
/lib/modules/2.2.9-27mdk/scsi/imm.o: unresolved symbol parport_register_device_R2c1b91b
/lib/modules/2.2.9-27mdk/scsi/imm.o: unresolved symbol parport_claim_r4664b1b5 ...

Che devo fare?

__________

Manca il supporto per la porta parallela, che sui kernel 2.2.x è a sé stante. Devi ricompilare il kernel con questo supporto, e poi dare:

modprobe parport
modprobe parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto

83.4   Verifica delle componenti necessarie per montare uno Zip parallelo

Lo Zip è esterno e parallelo, la porta parallela è libera ed unica; c'è un metodo che mi consente di montare questa periferica senza andarmi a ricompilare il Kernel?

__________

Vedi se in:

/lib/modules/versione_kernel/scsi

hai il modulo ppa.o

Se ce l'hai, è anche possibile che tu abbia il resto dell'armamentario SCSI necessario per montare un lettore zip (se poi hai dischi SCSI non c'è problema).

Prova a vedere se con:

# mount -t vfat /dev/sda4 /mnt/dir_che_crei_appositamente[Invio]

funziona.

Questo è il metodo più veloce.

Poi potresti controllare se ti riconosce la partizione sullo zip:

carichi il modulo (modprobe ppa) e dai:

# fdisk -l[Invio]

se trova la partizione sullo zip te lo comunicherà.

83.5   Modulo ppa per drive Zip

Come faccio a compilare il modulo ppa?

__________

Nella scelta delle componenti del kernel da make menuconfig (o da make xconfig se stiamo in X) alla voce SCSI vai alla voce:

SCSI LOWLEVEL OPTIONS

e lì seleziona i moduli riguardanti lo Iomega Zip. Usa ppa se hai uno zip100 e imm se hai lo Zip Plus.

Se usi i kernel 2.2.x, ed hai uno Zip parallelo, dovrai inserire anche il supporto per la parallela in GENERAL SETUP:

Parallel port support,
PC-style hardware (preferibilmente come modulo)

Poi continui la configurazione del kernel. Se lo hai compilato come mudulo il kernel potrebbe non caricarlo all'avvio (il ppa) in quel caso basta dare:

# modprobe ppa[Invio]

Di solito il dispositivo lo trovi sotto /dev/sdb4.

Capitolo 84.   Nastri

84.1   Nastro DAT SCSI

Non riesco ad utilizzare la periferica per il backup DAT che legge delle cartucce da 90 e 60 Mb; questa periferica è collegata ad un controller SCSI che sembra venir riconosciuto correttamente. Se provo a montare la periferica /dev/st0 mi restituisce errore st0 is not a block device. Se eseguo un fsck sul DAT creando un filesystem ext2 incomincia a leggere nella periferica e dopo circa trenta secondi mi restituisce errore dicendo che la partizione non è ext2, provando con altri tipi di partizioni mi restituisce lo stesso errore.

__________

Un nastro non è un disco, non si può montare! Su un nastro puoi fare TAR o un CPIO, ma non lo puoi montare.

Infatti il driver ti dice che non è un dispositivo ad accesso casuale (a blocchi), ma ad accesso sequenziale (a caratteri).

Se vuoi verificare se il tuo streamer funziona, fai:

# tar cvf /dev/st0 /[Invio]

e se vedi accendere la lucetta del nastro, aspetta che finisca e poi fai:

# tar tvf /dev/st0[Invio]

ti dovrebbe ridire i nomi dei file del tuo disco fisso.

La prima cosa da fare è comunque accertarsi che il controller veda il dispositivo:

# cat /proc/scsi[Invio]

la seconda è inserire nel kernel il modulo Scsi Tape:

# modprobe st[Invio]

la terza è creare un link simbolico abbastanza utile:

# ln -s /dev/st0 /dev/tape[Invio]

la quarta è provare il DAT con mt (magnetic tape):

# mt status[Invio]

84.2   Utilizzo unità DAT

Ho un'unità DAT che non riesco ad utilizzare. Il controller SCSI viene visto correttamente ed anche l'unità (lo vedo quando, all'avvio, inizializza il controller). Devo fare un mount? E con quale dispositivo?

__________

Lo puoi usare con il classico tar, il dispositivo dovrebbe essere /dev/nst0:

# tar cvvf /dev/nst0 file1 file2 dir/[Invio]

puoi anche specificare la grandezza dei blocchi con:

# tar cvvbf 64 /dev/nst0 file1 file2 dir/[Invio]

Per riavvolgere il nastro si usa il comando mt (move tape); se usi sempre quel dispositivo puoi fare un link:

# ln -s /dev/nst0 /dev/tape[Invio]

Ecco altri comandi:

# mt rewi[Invio]

riavvolge il nastro;

# mt offl[Invio]

riavvolge ed espelle il nastro;

# mt fsf[Invio]

avanza di un archivio;

# mt fsf n[Invio]

avanza di n archivi;

# mt bsf[Invio]

torna indietro di un archivio;

# mt bsf n[Invio]

torna indietro di n archivi;

Capitolo 85.   RAM

85.1   Visualizzazione disponibilità RAM

Come faccio a visualizzare la situazione della RAM?

__________

Lo puoi fare con:

# free[Invio]

85.2   Dichiarazione quantità di RAM in possesso

Per chi possiede più di 64MB di RAM, quale riga deve aggiungere nel lilo.conf?

__________

La riga è:

append = "mem=quantitaramM" 

es. altre 64 MB di ram richiederanno:

append="mem=64M"

85.3   Riconoscimento RAM aggiuntiva, possibili errori

Come mai la riga:

append="mem=96M"

che ho aggiunto nel file /etc/lilo.conf, non funziona?

__________

È possibile che tu abbia una scheda video integrata nella scheda madre. Se così fosse vanno sottratte dalle 96 Mega, quelle che sono dedicate alla scheda video. Se la scheda video richiede 4 Mb, allora la riga sarà:

append="mem=92M"

85.4   Manifestazione in Linux di RAM difettosa

Mi potete dire i sintomi (messaggi d'errore, blocchi, ecc.) di Linux se nel sistema c'è della RAM difettosa?

__________

Se durante attività intensiva (ad esempio la ricompilazione del kernel) ti restituisce:

SIGNAL 11

allora potresti avere la ram difettosa.

Capitolo 86.   Scanner

86.1   Scanner HP 6100C, problemi di funzionamento

Il mio scanner (HP 6100C) non funziona correttamente. Ho seguito tutta la documentazione al riguardo ma non c'è nulla da fare. Idee?

__________

Occorre modificare il file:

/usr/src/linux/drivers/scsi/scsi.c

in particolare occorre cercare le seguenti stringhe:

    {"HP", "C1750A", "3226", BLIST_NOLUN},          /* scanjet iic */
    {"HP", "C1790A", "", BLIST_NOLUN},              /* scanjet iip */
[1] {"HP", "C2500A", "", BLIST_NOLUN},              /* scanjet iicx */

ed aggiungere:

[2] {"HP", "C2520A", "3644", BLIST_NOLUN},          /* scanjet 6100C */

ricavi le informazioni sui valori C2520A e 3644 da Windows,

modifichi scsi.c e ricompili il kernel.

Se dai:

# cdrecord -scanbus[Invio]

dovresti avere una verifica che tutto funzioni.

Capitolo 87.   Modem

87.1   Winmodem; ci sono i driver?

Ci sono i driver per i winmodem? Dove posso trovarli?

__________

I driver per ora ci sono solo per i Lucent, per gli altri non credo. Per le ultime notizie potresti provare a guardare qui:

<http://www.o2.net/~gromitkc/winmodem.html>

87.2   Winmodem e Linux

Posso utilizzare un Winmodem con Linux?

__________

I Winmodem attualmente gestiti da Linux sono:

Lucent LT Chipset CL-MD5620DT e PCTel

Ulteriori informazioni: <http://www.o2.net/~gromitkc/winmodem.html>, <http://linmodems.org> e <http://www.geocities.com/SiliconValley/3217/Documents/WinModems.html>

87.3   Riconoscimento modem

Come faccio a riconoscere il mio modem? Non dà segni di vita

__________

Il modem sotto Linux non dovrebbe creare problemi di sorta: il 99.99% dei modem sono Hayes compatibili, ossia hanno un set di istruzioni standard e come tali poco importa quale sia la casa costruttrice.

Magari per farlo andare al massimo delle sue possibilità sarà necessario intervenire un pochino sulla stringa di inizializzazione, ma personalmente non ne ho mai avuto bisogno (oltre a dover dare il famoso comando X3 perché molti modem non riconosco il segnale di libero italiano).

Questo è vero sempre che tu abbia un modem vero e non un winmodem.

Questi sono costituiti da un processore DSP (Digital Signal Processor) che elabora i segnali in modo da renderli uguali a quelli generati o ricevuti da un modem normale, molto bello sulla carta, ma ha bisogno di driver appropriati per funzionare e non ce ne sono sotto Linux, dato che le specifiche non vengono rese pubbliche.

Esclusa quindi questa strada, un modo per vedere se riesci a comunicare con il tuo modem è questo:

# echo ath1 > /dev/ttyS?[Invio]

In pratica chiedi al tuo modem di alzare la cornetta (dovresti sentire il click del relé ed il tu-tu dall'altoparlante del modem).

Al punto interrogativo devi naturalmente sostituire un numero:

0 per la com1 sotto Windows

1 per la com2 ...

Così dovresti verificare solo che riesci a chiacchierare con il tuo modem.

Per riattaccare basta dare:

# echo ath0 > /dev/ttyS?[Invio]

87.4   Problemi modem

Il mio modem non dialoga col sistema (oppure è il contrario, comunque non si capiscono), né attraverso minicom né attraverso ppp.

Mi hanno detto di usare 'setserial' (ho già ricompilato il kernel con il supporto pnp) o isapnp, solo che i manuali non mi hanno aiutato a capire bene cosa devo fare.

Il modem è sulla com 3, quindi /dev/cua2 o /dev/ttyS2.

__________

Anch'io avevo il tuo stesso problema, e l'ho risolto impostando l'irq dell'modem su 4, che è l'irq che Linux utilizza per la ttyS0 e ttyS2.

Io ti consiglio di provare questo:

  1. vedere se Linux ha visto il modem, scrivendo come root da console:

    # setserial /dev/ttS2[Invio]

    se Linux ha riconosciuto il modem, ti dovrebbe apparire qualcosa del genere:

               /dev/ttyS2, UART: 16550A, Port: 0x03e8, IRQ: 4.
  2. se ti appare questa scritta, devi impostare l'irq del tuo modem su 4, facendo una di queste tre cose:

    1. impostare manualmente (se ci sono) i ponticelli sul tuo modem su com 3, irq 4;

    2. se hai un BIOS plug and play, andare in PNP/PCI configuration e cambiare la scritta di fianco a irq 4 dal 'legacy isa' a 'pnp isa card';

    3. usare l'utility isapnp.

  3. Se usando setserial ti appare :

               /dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4

    puoi fare:

    1. sempre da console :

      # setserial /dev/ttyS2 uart 16550a[Invio]

    2. usare isapnp.

Così il modem dovrebbe funzionarti.

87.5   US Robotics ISDN TA

Ho un modem US Robotics ISDN TA e non riesco a farlo funzionare. Ho una Red Hat 6.0. Ho cercato della documentazione ma il panorama è un po' scarso. Qualcuno è in grado di darmi una mano?

__________

Come prima cosa devi assicurarti di avere avviato i seguenti moduli: ppp, shlc e bsd_comp. La configurazione è equivalente ad un normale ppp, l'unica cosa da controllare sono, appunto i moduli e le stringhe da inviare (le trovi sulle istruzioni del modem). Controlla che non utilizzi in maniera predefinita l'hdlc ma l' async ppp to sync ppp e soprattutto la configurazione della comunicazione seriale.

87.6   ISDN TA US Robotics interno

Ho ISDN + un adattatore US Robotics ISDN TA interno, come configuro e connetto a Internet la mia macchina Linux con KDE?

__________

Compila il kernel inserendo le opzioni ISDN per lo Sportster caricando ppp e HISAX come modulo.

Preleva il pacchetto kisdn (<http://www.millenniumx.de>) e configura hisax come modulo da caricare.

(io=268 - sostituisci gli ultimi tre 0 con 268 )

irq=quello che hai impostato sulla scheda con il ponticello.

Preleva isdn4win (<ftp://ftp.suse.com>) e compila oppure usa un rpm pronto.

Un unica attenzione: se il kernel non contiene il pacchetto ISDN aggiornato devi applicare la patch da prelevare sempre su ftp.suse.com.

Te ne accorgi se una volta configurato isdn4win non riesci a compilare a causa della mancanza di alcuni file.

Capitolo 88.   Stampante

88.1   Stampanti gestite da Linux

Dove posso trovare un elenco di tutte le stampanti compatibili con Linux?

__________

Cerca su <http://www.picante.com/~gtaylor/pht/printer_list.cgi>

88.2   Stampare con una HP 720C Deskjet

Viene qui presentata una configurazione funzionante (non per il colore però) per stampare con una stampante HP 720C Deskjet. Il risultato è stato ottenuto mediante il pacchetto pbm2ppa scritto da Tim Norman. La stampa viene effettuata attraverso l'interfaccia Postscript presente in pbm2ppa. Ecco il file /etc/printcap che è stato utilizzato:

 ------------------------------------
 lp:\
        :lp=/dev/lp1:\
        :sd=/var/spool/lpd/lp:\
        :lf=/var/spool/lpd/lp/log:\
        :af=/var/spool/lpd/lp/acct:\
        :if=/usr/local/bin/ps.if:\
        :la:mx#0:\
        :sh:sf:
 ------------------------------------

Il file ps.if:

 ----------------------------------------------------------
 #! /bin/sh
 gs -sDEVICE=pbmraw -q -dNOPAUSE -r600 -sOutputFile= - | \
 /usr/local/bin/pbm2ppa - -
 ----------------------------------------------------------

88.3   Epson Stylus Color - configurazione di /etc/printcap

Non riesco a stampare con la mia Epson Stylus Color. Come mi devo comportare?

Prova a mettere queste configurazioni nel file /etc/printcap.

-------------------------------------------------------
lp|Stylus 360 dpi
        :sd=/var/spool/lpd/lp
        :sh
        :rw
        :lp=/dev/lp0
        :mx#0
        :if=/etc/magicfilter/stylus_color_360dpi-filter

lp720|Stylus 720 dpi
        :sd=/var/spool/lpd/lp720
        :sh
        :rw
        :lp=/dev/lp0
        :mx#0
        :if=/etc/magicfilter/stylus_color_720dpi-filter
-------------------------------------------------------

88.4   Stampante e kernel

Quali opzioni in quali sezioni vanno impostate durante la compilazione del kernel per far lavorare la stampante? Devo per caso, dopo la compilazione, modificare LILO per passare parametri speciali al kernel, oppure aggiungere qualche riga allo stesso?

__________

Se usi il kernel 2.0.3x è sufficiente includere il modulo per la parallela (lp.o), se invece sei passato al 2.2.xx la situazione è più complessa:

nella procedura di ricompilazione del kernel:

CONFIG_MODULES=y
CONFIG_MODVERSIONS=y
CONFIG_KMOD=y

CONFIG_PARPORT=m
CONFIG_PARPORT_PC=m
CONFIG_PARIDE_PARPORT=m

e in /etc/conf.modules:

alias parport_lowlevel parport_pc
options parport_pc io=0x378,0x278 irq=7,auto

Capitolo 89.   Periferiche SCSI

89.1   Emulazione SCSI e gestione delle periferiche ide/SCSI

Come vengono gestite le periferiche ide in emulazione SCSI? Come funziona e perché esiste l'emulazione SCSI?

__________

L'emulazione SCSI è nata con uno scopo ben preciso, cioè quello di evitare di dover riscrivere i driver per le periferiche ed i programmi che già esistono per il protocollo SCSI (masterizzatori, lettori ZIP, ecc.). In pratica quello che viene effettuato al caricamento del modulo ide-scsi è la creazione nel modulo SCSI di una catena SCSI virtuale dove vengono attaccate tutte le periferiche ide che non hanno supporto nativo nel kernel caricato.

In pratica, se io compilo come modulo il supporto per i CD-ROM ATAPI, il supporto per l'emulazione ide-scsi, ed il supporto per il CDROM SCSI, quello che accade è questo:

Se ad esempio avessi necessità, per qualche ragione, di avere a disposizione i dischi come SCSI invece che come ide, allora dovresti togliere il supporto per i dischi ide e caricare il supporto per quelli SCSI.

89.2   Adaptec aha2904

Quale driver del kernel bisogna scegliere per questa scheda scsi?

Devi selezionare «aic7xxx» (vale anche per la famiglia 7xxx e 29xx)

modprobe aic7xxx[Invio]

89.3   Individuazione dispositivo SCSI Adaptec 1510A

Ho una scheda SCSI Adaptec 1510A che non viene individuata dal sistema. Ho letto di provare a forzare l'individuazione della scheda inserendo la riga:

aha152x=0x340,11,7,1

durante l'avvio. Ma in quale file?

__________

In /etc/lilo.conf aggiungi:

append="aha152......."

poi riesegui LILO:

# /sbin/lilo[Invio]

È come scrivere sul prompt di LILO.

89.4   Riconoscimento scheda SCSI in fase di avvio

Come faccio durante l'avvio, a far riconoscere la mia scheda SCSI NCD53C710?

__________

Ricompila il kernel con il supporto per questa scheda. All'avvio dovresti inserire la riga che andrebbe messa poi nel /etc/lilo.conf:

LILO boot: append = "tiposcheda=IOPorts,IRQ"[Invio]

la sintassi comunque non è la stessa per tutte le schede. Trovi tutto nella documentazione del kernel nella directory /usr/src/linux/drivers.

89.5   Riconoscimento controller SCSI Adaptec 1505

Il mio controller Adaptec 1505 non viene riconosciuto da Linux. Come mi devo comportare?

__________

Ho il tuo stesso controller; inserisci nel file /etc/conf.modules queste due righe:

options scsi_hostadapter aha152x=0x340,9,7,1,1 
alias scsi_hostadapter aha152x

crea il file /etc/rc.d/rc.modules e rendilo eseguibile; all'interno inserisci questa linea:

/sbin/insmod -f aha152x aha152x=0x340,9,7,1,1

nella Red Hat 6.1 funzionava a meraviglia e il modprobe installava la scheda subito ma nella 6.2 ho dovuto aggiungere l'opzione -f altrimenti mi restituiva errore.

89.6   Individuazione dispositivo SCSI aha152x

Come faccio a far riconoscere al sistema la mia scheda SCSI aha152x?

__________

Gli vanno passati dei parametri specifici: se lo inserisci come modulo in /etc/conf.modules inserisci queste 2 righe:

options scsi_hostadapter aha152x=0x340,9,7,1,1 
alias scsi_hostadapter aha152x

(I parametri sono: aha152x=IOPORT,IRQ,SCSI_ID,RECONNECT,PARITY,SYNCHRONOUS,DELAY,EXT_TRANS)

Se invece lo si compila monolitico, si può specificare sulla riga di comando di LILO o nel lilo.conf, con i seguenti parametri:

aha152x=<IOPORT>[,<IRQ>[,<SCSI-ID>[,<RECONNECT>[,<PARITY>[,<SYNCHRONOUS>[,<DELAY> [,<EXT_TRANS]]]]]]]

ecco lo schema dei ponticelli:

guardando la scheda con il pettine verso il basso:

 alt    j1  o o  =140h-15fh     o-o  =340h-35fh
 i12    j2  o-o  =irq12
 i11    j3  o-o  =irq11
 i10    j4  o-o  =irq10
 i9     j5  o-o  =irq9

naturalmente uno solo dei ponticelli j2-j5 deve essere chiuso, esempio: se tu vuoi l'irq 9 con indirizzo 340h chiudi j1 e j5 e gli altri liberi.

Importante! Controlla di non avere altre periferiche con lo stesso irq.

Se al riavvio, nel file /var/log/messages non vedi che la scheda è stata configurata, dai il seguente comando direttamente da riga di comando. Questo consente di accedere alla periferica al momento opportuno (scanner, ecc.), anziché tenerlo acceso fin da prima dell'avvio, come è d'obbligo con Windows.

# /sbin/modprobe aha152x.o aha152x=0x340,9,7,1,1[Invio]

Capitolo 90.   Unità disco

90.1   Ls 120 interno

Ho comprato un drive ls-120 interno (ide). Non so come farlo riconoscere a Linux (all'avvio mi dice unknown atapi drive).

__________

Assicurati di avere abilitato il supporto per ATAPI FLOPPY DRIVE nel kernel; dopo averlo fatto lo monti e smonti come un disco rigido normale.

Nel mio caso l'ls-120 è lo slave primario:

# mount -t vfat /dev/hdb /mnt/floppy[Invio]

Capitolo 91.   Periferiche plug and play

91.1   Periferiche plug & play

Come posso gestire periferiche plug & play?

__________

Lo puoi fare con il pacchetto isapnptools. Esso è composto da isapnp e pnpdump. A grandi linee pnpdump legge le varie porte del pnp (ammesso che la scheda madre gestisca le schede isa plug & play) e restituisce dei valori che possono essere reindirizzati su un file.

Isapnp andrà a leggere i valori da tale file per attivare la periferica (scheda audio, rete o altro), esempio:

# pnpdump > isapnp.conf[Invio]

oppure con le ultime versioni:

# pnpdump --config > isapnp.conf[Invio]

nel secondo caso ottieni un file già decommentato, nel primo invece devi decommentare le linee per arrivare a qualcosa del genere (valido per un chip opl3-sax):

#####
#/etc/isapnp.conf
(READPORT 0x0203)
(ISOLATE PRESERVE)
(IDENTIFY *)
(VERBOSITY 2)
(CONFLICT (IO FATAL)(IRQ FATAL)(DMA FATAL)(MEM FATAL)) # or WARNING

(CONFIGURE YMH0030/2156265473 (LD 0

.........snip .......
  (ACT Y)
))
(WAITFORKEY)
##########

per cui se hai chiamato il file /etc/isapnp.conf devi digitare:

# isapnp /etc/isapnp.conf[Invio]

a questo punto dovresti avere a video delle stringhe di conferma con:

ENABLED OK

IMPORTANTE: prima di eseguire isapnp non ci devono essere caricati moduli audio (verifica con cat /proc/modules).

Capitolo 92.   Porte (seriale, parallela, PS/2, USB, ecc.)

92.1   Erronea cancellazione device

Ho voluto creare un link simbolico da cua0 (e cua1) a ttyS0 (e ttyS1) ma ho cancella gli originali. Il problema è che ora X non mi parte più. Parte la schermata grigia ma il mouse non si muove e il gestore delle finestre non viene caricato.

__________

Puoi ricrearti i dispositivi con:

# cd /dev[Invio]

# mknod -m 600 ttyS0 c 4 64[Invio]

# mknod -m 600 ttyS1 c 4 65[Invio]

e poi ricrei il link del mouse (ammesso che il tuo mouse sia su ttyS0 (com1 per Dos):

# ln -sf /dev/ttyS0 /dev/mouse[Invio]

92.2   Sovrascitto /dev/dsp

Ho sovrascritto inavvertitamente il file /dev/dsp. Cosa devo fare?

__________

Dai il comando:

# mknod -m 666 /dev/dsp c 14 3 [Invio]

92.3   Cua(n) obsolete e ttyS(0)

Ho montato una Red Hat 5.2, dopodiché ho deciso di aggiornare il kernel al 2.2.1. Ora il pc mi è diventato pretenzioso e mi dice che i dispositivi /dev/cuan sono obsolete e mi chiede di aggiornare per usare le /dev/ttySn. Volevo chiedere: è possibile ad esempio rimpiazzare il link /dev/mouse -> /dev/cua0 con /dev/mouse -> /dev/ttyS0 o l'operazione è più complicata?

__________

Sì, certo, e non avrai più quei fastidiosi messaggi di warning. Non è il pc ad essere pretenzioso, ma il kernel che ti avverte che presto le cuax saranno abbandonate. Lo stesso dovrai fare con il link del modem, naturalmente.

92.4   Cuax > ttySx

Come si passa dai device cuaX ai ttySX? Dove posso documentarmi?

__________

Si tratta solo di ridirezionare i devices cuax a ttySx, per esempio per il mouse sarà:

# ln -sf /dev/ttyS0 /dev/mouse[Invio]

92.5   Ricreare /dev/null

Come si ricrea il device /dev/null?

__________

Con il comando:

# mknod -m 666 /dev/null c 1 3[Invio]

92.6   Ricreare /dev/lp*

Preso da un bel raptus di idiozia ho fatto: rm /dev/lp*, sicuro di poterli ricreare con il MAKEDEV... cosa che invece pare non si possa fare... avete qualche consiglio per ripristinare la situazione?

__________

Per ricreare i dispositivi lp0, lp1 e lp2:

# cd /dev[Invio]

# mknod -m 660 lp0 c 6 0[Invio]

# mknod -m 660 lp1 c 6 1[Invio]

# mknod -m 660 lp2 c 6 2[Invio]

# chown root.daemon /dev/lp*[Invio]

92.7   Mancato rilevamento dell'IRQ della porta parallela nel kernel 2.2.x

Perché nel kernel 2.2.x non mi viene rilevato l'IRQ della porta parallela, ma solo l'indirizzo? Nel BIOS ho provato a impostare la parallela sia come EPP che come ECP che come EPP+ECP e il problema persiste. Nei kernel 2.0.36 e 2.0.37 l'IRQ viene rilevato perfettamente. Il fatto è che mi servirebbe l'IRQ per collegarmi in plip con l'altro computer, il messaggio di errore che mi da plip è:

parport0 has no IRQ 

e poi mi dice che non può registrare il device plip1.

__________

La porta parallela dei compatibili e specialmente la sua gestione, sono da sempre rognosi, questo a causa di come sono fatte le parallele nei pc.

Controlla con un kernel 2.0.x su quale IRQ e quale I/O ti viene impostata la porta, ed inseriscili nella configurazione del modulo parport_pc:

modprobe parport
modprobe parport_pc io=0x378, irq=7

92.8   Individuare IRQ e I/O

È possibile con gli strumenti base di Linux scoprire gli IRQ e gli indirizzi I/O di una periferica?

__________

Prova con il comando:

# cat /proc/interrupts[Invio]

# cat /proc/ioports[Invio]

Parte xv.   Informazioni generali su GNU/Linux

Capitolo 93.   Progetti

93.1   Beowulf

Qualcuno potrebbe spiegarmi cosa è il progetto Beowulf?

__________

Si tratta di utilizzare gruppi (cluster) di macchine per sommarne quasi in modo aritmetico capacità di CPU e Memoria. Ad esempio per avere un calcolatore molto potente con 16,32,..256 PC.

Comunque la spiegazione dettagliata la trovi al sito <http://www.beowulf.org>

Appendice A.   Licenza GNU GPL

GNU GENERAL PUBLIC LICENSE - Version 2, June 1991

Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

Preamble

The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.

When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.

To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.

For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.

We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.

Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.

Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.

The precise terms and conditions for copying, distribution and modification follow.

GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".

Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.

1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.

You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.

2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:

a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.

b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.

c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)

These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.

Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.

In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.

3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:

a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,

c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)

The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.

If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.

4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.

6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.

7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.

If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.

This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.

8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.

9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.

10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.

NO WARRANTY

11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

END OF TERMS AND CONDITIONS

Appendix: How to Apply These Terms to Your New Programs

If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.

To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) 19yy  <name of author>

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

Also add information on how to contact you by electronic and paper mail.

If the program is interactive, make it output a short notice like this when it starts in an interactive mode:

    Gnomovision version 69, Copyright (C) 19yy name of author
    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show c' for details.

The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.

You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:

  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
  `Gnomovision' (which makes passes at compilers) written by James Hacker.

  <signature of Ty Coon>, 1 April 1989
  Ty Coon, President of Vice

This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.

Appendice B.   Problemi con le licenze e con il software che sembra «libero»

Ci possono essere tanti modi per classificare il software; tuttavia, non basta una classificazione, perché le sfumature possono essere troppe; piuttosto, occorre leggere e interpretare le licenze particolari, quando queste non sono perfettamente uguali a quelle più comuni e conosciute.

Questa appendice cerca di raccoglie alcune annotazioni sulle licenze che possono creare dei problemi di qualche tipo, anche per il solo fatto di essere state mal formulate. Dal momento che si tratta di un argomento molto delicato, si tenga presente che le informazioni che appaiono qui potrebbero essere imprecise. In caso di dubbio, ciò che si legge qui va poi confrontato con le licenze reali, tenendo conto che nel tempo le cose potrebbero cambiare.

Qualunque informazione utile a migliorare le informazioni qui contenute, è gradita all'autore.

B.1   Licenza Artistic

Quello che segue è un brano tratto da The Open Source Definition di Bruce Perens. Viene riportato perché descrive bene i problemi legati alla licenza Artistic.

Sebbene questa licenza sia stata sviluppata in origine per il Perl, è stata utilizzata per altro software. A mio parere si tratta di una licenza formulata male, in quanto impone dei requisiti e fornisce poi delle scappatoie che rendono facile aggirarli. Forse è questa la ragione per cui quasi tutto il software sotto licenza Artistic, ha oggi una seconda licenza, offrendo la scelta fra la licenza Artistic e la GPL.

La sezione 5 della licenza Artistic vieta la vendita del software, ma permette che sia venduta una distribuzione di software aggregato di più di un programma. In questo modo, se si raggruppa un programma sotto licenza Artistic con un hello-world.c di cinque righe di codice, si può vendere la raccolta.

[...]

La licenza Artistic richiede che le modifiche siano rese gratuitamente, ma fornisce poi una scappatoia (nella sezione 7) che permette di mantenerle private e perfino di porre sotto dominio pubblico parti del programma sotto licenza Artistic!

(1)

B.2   LyX

LyX viene rilasciato con la licenza GNU GPL; tuttavia, dipende dalla libreria XForms, la cui licenza non consente la commercializzazione. In altri termini, il sorgente di LyX è software libero, ma da un punto di vista operativo non può esserlo, dal momento che dipende da altro software che non lo è.

B.3   Mpage

La licenza di Mpage, un programma per generare file PostScript a partire da file di testo e per rielaborare in parte i file PostScript stessi, ha una licenza particolare che non consente la modifica. Questo complica la distribuzione di pacchetti già pronti (già compilati).

B.4   Pine

La licenza di Pine, il programma di gestione della posta elettronica della Washington University, non consente la distribuzione di versioni modificate, consentendo invece la circolazione di file di differenze. Questo implica di conseguenza l'impossibilità di distribuire pacchetti già pronti (già compilati).

Per questo motivo, l'unico modo di distribuire Pine è in forma sorgente, assieme ai file di differenze necessari per l'installazione. Questo non pone limiti al suo utilizzo, ma crea qualche problema per la sua installazione da parte di chi non sia competente a sufficienza.

B.5   PSUtils

La licenza del pacchetto PSUtils non è standard, è contraddittoria e di conseguenza è di difficile interpretazione.

B.6   Licenza QPL

Quello che segue è un articolo di Michele Dalla Silvestra, apparso in particolare su LDR: Linux Domande e Risposte. Viene riportato perché descrive bene i problemi legati alla licenza QPL, che è in pratica la licenza della libreria grafica Qt.

La QPL, per il rotto della cuffia, è considerata una licenza libera. La sostanziale differenza dalla GPL è l'obbligo di distribuire versioni modificate in particolari formati (patch).

Però per compilare un programma GPL è necessario che tutti i componenti utilizzati ricadano su una licenza compatibile GPL, o che la licenza di questi componenti rientri nella GPL.

Ad esempio, la licenza BSD permette tutto quello che permette la GPL, quindi un programma GPL si può linkare ad una libreria BSD. Invece un programma GPL non si può linkare ad una libreria QPL visto che la GPL permette di modificare e ridistribuire liberamente il codice, la QPL invece pone delle piccole condizioni sulla ridistribuzione di versioni modificate.

(2)

I collaboratori

Indice analitico