Matematica e disegno

Transcript

Matematica e disegno
Appunti di informatica libera 2003.01.01
Volume VII
Matematica e disegno
3735
Appunti Linux
Copyright © 1997-2000 Daniele Giacomini
Appunti di informatica libera
Copyright © 2000-2003 Daniele Giacomini
Via Morganella Est, 21 -- I-31050 Ponzano Veneto (TV) -- daniele @ swlibero.org
Le informazioni contenute in questa opera possono essere diffuse e riutilizzate in base alle condizioni poste dalla licenza GNU General Public License, come pubblicato dalla Free Software
Foundation.
In caso di modifica dell’opera e/o di riutilizzo parziale della stessa, secondo i termini della licenza, le annotazioni riferite a queste modifiche e i riferimenti all’origine di questa opera, devono
risultare evidenti e apportate secondo modalità appropriate alle caratteristiche dell’opera stessa. In nessun caso è consentita la modifica di quanto, in modo evidente, esprime il pensiero,
l’opinione o i sentimenti del suo autore.
L’opera è priva di garanzie di qualunque tipo, come spiegato nella stessa licenza GNU General
Public License.
Queste condizioni e questo copyright si applicano all’opera nel suo complesso, salvo ove indicato
espressamente in modo diverso.
The informations contained inside this work can be spread and reused under the terms of the
GNU General Public License as published by the Free Software Foundation.
If you modify this work and/or reuse it partially, under the terms of the license, the notices about
these changes and the references about the original work, must be evidenced conforming to the
work characteristics. IN NO EVENT IS ALLOWED TO MODIFY WHAT ARE CLEARLY
THE THOUGHTS, THE OPINIONS AND/OR THE FEELINGS OF THE AUTHOR.
This work 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.
These conditions and this copyright apply to the whole work, except where clearly stated in a
different way.
Una copia della licenza GNU General Public License, versione 2, si trova nell’appendice A.
A copy of GNU General Public License, version 2, is available in appendix A.
3736
The main distribution for Appunti di informatica libera is described below. For every distribution
channel the maintainer’s name and address is also reported.
Internet
• direct reading: <http://a2.swlibero.org/>
download: <ftp://a2.swlibero.org/a2/> and <http://a2.swlibero.org/ftp/>
Michele Dalla Silvestra, mds @ swlibero.org
• direct reading: <http://appuntilinux.torino.linux.it/>
download: <ftp://ftp.torino.linux.it/appunti-linux/>
Carlo Perassi, carlo @ linux.it
• direct reading: <http://sansone.crema.unimi.it/linux/a2/HTML/>
download: <http://sansone.crema.unimi.it/linux/a2/>
Fabrizio Zeno Cornelli, zeno @ filibusta.crema.unimi.it
• direct reading: <http://www.pctime.it/servizi/appunti-linux/>
download: <http://www.pctime.it/servizi/appunti-linux/a2-prelievo/>
Franco Lazzero, PCTIME, pctime @ pctime.net
• direct reading: <http://www.a2.prosa.it/>
download: <ftp://ftp.a2.prosa.it/>
Davide Barbieri, paci @ prosa.it
• direct reading: <http://linux.pueste.it/>
download: <http://linux.pueste.it/filearea/AppuntiLinux/>
David Pisa, david @ iglu.cc.uniud.it
• direct reading: <http://www.informasiti.com/Appunti/HTML/>
download: <http://www.informasiti.com/Appunti/>
Claudio Neri, Sincro Consulting, neri.c @ sincroconsulting.com
GNU distributions
• GNU/Linux Debian <http://packages.debian.org/appunti-informatica-libera>
Massimo Dal Zotto, dz @ cs.unitn.it
Italian magazine’s CD-ROM
• inter-punto-net <http://www.interpuntonet.it>
Michele Dalla Silvestra, mds @ swlibero.org
• Internet News <http://inews.tecnet.it>
Francesco Facconi, francescofacconi @ libero.it
Fabio Ferrazzo, fabio.fr @ tiscalinet.it
• Linux Magazine <http://www.edmaster.it/prodotti/linux/ult-riv.html>
Emmanuele Somma, esomma @ ieee.org
La diffusione di questa opera è incoraggiata in base ai termini della licenza.
The spread of this work is encouraged under the terms of the license.
3737
Parte lxvii Foglio elettronico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3739
329 Concetti generali sui fogli elettronici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3740
330 Spreadsheet Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3750
Parte lxviii Applicazioni matematiche e grafiche varie . . . . . . . . . . . . . . . . . . . . . . . . . . 3767
331 Gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3768
332 Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3777
333 Applicazioni matematiche varie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3783
Indice analitico del volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3787
3738
Parte lxvii
Foglio elettronico
329 Concetti generali sui fogli elettronici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3740
329.1 Coordinate di celle e di zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3740
329.2 Tipi di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3741
329.3 Espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3742
329.4 Riferimenti relativi e riferimenti assoluti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3746
329.5 Titoli, protezione delle celle e aree nascoste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3747
329.6 Grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3748
329.7 Riordino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3749
330 Spreadsheet Calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3750
330.1 Concetti generali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3750
330.2 Avvio e opzioni di funzionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3753
330.3 Inserimento e modifica dei valori nelle celle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3754
330.4 Formato delle celle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3756
330.5 Comandi per intervenire sui file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3758
330.6 Comandi per intervenire su zone del foglio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3759
330.7 Comandi vari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3761
330.8 Espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3762
330.9 Formato del file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3764
3739
Capitolo
329
Concetti generali sui fogli elettronici
Il foglio elettronico è un insieme di celle accessibili attraverso delle coordinate, organizzate generalmente in forma bidimensionale. Le celle in questione sono delle variabili, rappresentate dalle
coordinate relative.
Figura 329.1. Schema tipico di un foglio elettronico bidimensionale.
---------------------------------------------------------------------------.
|
A
|
B
|
C
|
D
|
E
|
F
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
1 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
2 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
3 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
4 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
5 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
6 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
7 |
|
|
|
|
|
|
---------------------------------------------------------------------------’
Solitamente, le coordinate sono composte dall’accoppiamento di una lettera a un numero (intero), come per esempio A1, B25 e F43, ricordando ciò che si fa normalmente nelle notazioni
matematiche: a1, b25, f43. Visivamente, le celle di un foglio vengono disposte su una tabella, dove
le colonne sono identificate da una o più lettere e le righe sono identificate da un numero intero.
Secondo la tradizione, nelle coordinate delle celle non si distingue tra lettere maiuscole o lettere
minuscole.
La dimensione di una tabella di un foglio elettronico varia a seconda delle potenzialità elaborative
disponibili. In linea di principio non ci sono limiti teorici, dal momento che si possono indicare
colonne anche attraverso l’abbinamento di più lettere alfabetiche.1
329.1 Coordinate di celle e di zone
La rappresentazione delle celle in forma tabellare è la caratteristica fondamentale del foglio elettronico. Questa disposizione facilita l’identificazione di gruppi di celle, ovvero di zone, disposte
su aree rettangolari, dove una cella singola equivale alla zona più piccola disponibile.
Mentre il riferimento a una cella singola avviene in modo abbastanza uniforme tra i fogli elettronici comuni, l’individuazione di una zona avviene attraverso forme di rappresentazione differenti.
In generale rimane un elemento comune: si individua una zona indicando due celle opposte. Per
esempio, osservando la figura 329.2, si vede che è stato circoscritto un gruppo di celle rettangolari; per individuare tutto il gruppo basterebbe fare riferimento alla zona che va da C3 a E6,
oppure da E3 a C6, oppure da C6 a E3, oppure da E6 a C3. In pratica, di solito non ha importanza
l’ordine in cui si indicano le due celle opposte.
1
Si osservi che la numerazione alfabetica è diversa da quella che avviene solitamente attraverso cifre numeriche. Per
la precisione, il problema nasce dal fatto che nella numerazione alfabetica non esiste lo zero. Infatti, se 01 è uguale a 1,
in questo contesto «A» non è uguale ad «AA».
3740
Concetti generali sui fogli elettronici
3741
Figura 329.2. Individuazione di una zona.
---------------------------------------------------------------------------.
|
A
|
B
|
C
|
D
|
E
|
F
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
1 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
2 |
|
|
|
|
|
|
---|-----------|-----------#####################################-----------|
3 |
|
#
|
|
#
|
---|-----------|-----------#-----------|-----------|-----------#-----------|
4 |
|
#
|
|
#
|
---|-----------|-----------#-----------|-----------|-----------#-----------|
5 |
|
#
|
|
#
|
---|-----------|-----------#-----------|-----------|-----------#-----------|
6 |
|
#
|
|
#
|
---|-----------|-----------#####################################-----------|
7 |
|
|
|
|
|
|
---------------------------------------------------------------------------’
Per abbinare le celle opposte che descrivono una zona, si usano simbologie differenti. La tabella
329.1 riassume le modalità comuni.
Tabella 329.1. Forme comuni di rappresentazione delle zone.
Descrizione
zone normali
intervalli di colonne
intervalli di righe
Applicativo
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
SC
SC
Rappresentazione
xm :yn
xm :yn
xm :yn
xm :yn
xm ..yn
x :y
m :n
Alcuni tipi di foglio elettronico consentono di attribuire un nome a delle zone di celle, per potervi
fare riferimento in modo più intelligibile all’interno delle espressioni.
329.2 Tipi di dati
Lo scopo del foglio elettronico è il calcolo automatico di espressioni contenute nelle celle. In
generale, le celle possono essere vuote, possono contenere una costante oppure un’espressione
da calcolare. Volendo fare una classificazione più dettagliata, si può distinguere tra:
• celle vuote, nel senso che non contengono alcunché;
• celle contenenti una costante numerica;
• celle contenenti un’espressione che genera un risultato numerico;
• celle contenenti una costante stringa;
• celle contenenti un’espressione che genera un risultato stringa.
Alcuni fogli elettronici prevedono la rappresentazione di informazioni logiche (booleane). In
questi casi si utilizzano valori numerici che nel contesto sono interpretati come logici: lo zero
vale come Falso, qualunque altro valore vale come Vero.
Concetti generali sui fogli elettronici
3742
Nell’ambito dei fogli elettronici hanno una rilevanza particolare le indicazioni di date e di
orari. Generalmente, questi tipi di valori sono gestiti attraverso l’attribuzione di un significato
speciale ai numeri comuni. Di solito, un numero n intero positivo indica l’n -esimo giorno a
partire da un certo riferimento, mentre un numero positivo, minore o uguale a uno, rappresenta
una frazione di giorno, ovvero un’ora particolare.
329.3 Espressioni
Tutto ciò che si inserisce all’interno di una cella ha la forma di un espressione; anche la costante
è un’espressione. In particolare, le costanti vanno inserite secondo una forma prestabilita, per distinguere tra stringhe e numeri. Generalmente, i numeri si introducono nella forma cui si è abituati
di solito, oppure vengono inseriti in un’espressione esplicita, mentre le stringhe possono richiedere un prefisso per poterle distinguere, oppure vanno inserite anche queste in un’espressione
esplicita.
Tabella 329.2. Forme comuni di inserimento delle costanti.
Descrizione
stringa normale
stringa esplicita
stringa allineata a sinistra
stringa allineata a destra
stringa centrata
espressione
Applicativo
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
1-2-3
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Espressione
stringa
(non disponibile)
stringa
stringa
stringa
(non disponibile)
"stringa
’stringa
’stringa
’stringa
"stringa
^stringa
=espressione
=espressione
=espressione
=espressione
espressione
Il caso di 1-2-3 è eccezionale. Come si vede nella tabella 329.2, si distinguono tre prefissi differenti per inserire una stringa, in base al tipo di allineamento desiderato. In generale i fogli
elettronici non pongono questa limitazione, gestendo l’allineamento in modo indipendente.
Le espressioni vere e proprie si realizzano generalmente attraverso degli operatori e delle
funzioni. La tabella 329.3 cerca di riassumere gli operatori comuni nei vari tipi di fogli elettronici.
Tabella 329.3. Elenco degli operatori comuni nei fogli elettronici.
Descrizione
nessun effetto
inversione di segno
Applicativo
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
Espressione
+n
+n
+n
+n
+n
-n
-n
-n
-n
Concetti generali sui fogli elettronici
Descrizione
somma
sottrazione
moltiplicazione
divisione
concatenamento di stringhe
raggruppamento, precedenza
3743
Applicativo
1-2-3
Gnumeric
MS-Excel
SC
StarOffice
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Espressione
-n
m +n
m +n
m +n
m +n
m +n
m -n
m -n
m -n
m -n
m -n
m *n
m *n
m *n
m *n
m *n
m /n
m /n
m /n
m /n
m /n
m &n
m #n
m &n
m &n
m &n
(...)
(...)
(...)
(...)
(...)
Ciò che non si può fare con gli operatori normali, si ottiene generalmente attraverso delle funzioni, la cui notazione varia a seconda dell’applicativo. Generalmente, una funzione è costituita da
un nome seguito da dei parametri tra parentesi:
nome_funzione (parametro ...)
Si pongono due tipi di problemi: la distinzione dei parametri e il modo in cui si riesce a distinguere che si tratta di una funzione. La separazione dei parametri avviene generalmente attraverso
l’uso di virgole o di punti e virgola, a seconda dei casi. Per quanto riguarda il riconoscimento
della funzione, potrebbe essere necessario iniziare ogni nome con un simbolo speciale.
Le funzioni dei fogli elettronici sono solitamente già stabilite. Purtroppo, la tradizione ha portato
alla traduzione di questi nomi in base alla localizzazione. Dalla localizzazione può dipendere
anche la scelta tra la virgola o il punto e virgola per separare i parametri delle funzioni, dal
momento che si pone la scelta del simbolo usato per rappresentare la separazione tra parte intera
e parte decimale di un numero. La tabella 329.4 elenca alcune funzioni tipiche nella tradizione
dei fogli elettronici, secondo la localizzazione italiana.2
2
Per completezza si indica anche l’espressione condizionale di SC, che usa operatori e non una funzione.
Concetti generali sui fogli elettronici
3744
Tabella 329.4. Elenco di funzioni comuni nei fogli elettronici.
Descrizione
sommatoria
radice quadrata
arrotondamento
selezione condizionale
Applicativo
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Espressione
sum(zona )
@sum(zona )
somma(zona )
somma(zona )
@somma(zona )
sqrt(n )
@sqrt(n )
radq(n )
radq(n )
@radq(n )
round(n ;decimali )
@round(n ,decimali )
arrotonda(n ;decimali )
arrotonda(n ;decimali )
@arrot(n ;decimali )
if(condizione ;risultato_vero ;risultato_falso )
condizione ?risultato_vero :risultato_falso
se(condizione ;risultato_vero ;risultato_falso )
se(condizione ;risultato_vero ;risultato_falso )
@se(condizione ;risultato_vero ;risultato_falso )
Il caso della sommatoria è speciale, in quanto si usa generalmente passando come parametro una
zona intera. In tale situazione, se non fosse disponibile una funzione del genere, capace di accettare una zona intera come argomento, sarebbe necessario scrivere un’espressione, eventualmente
molto lunga, utilizzando sempre l’operatore ‘+’.
I parametri delle funzioni possono essere costituiti da costanti o da espressioni di vario genere,
anche se questo poi si paga con una difficile leggibilità. In questo contesto, le costanti stringa
sono rappresentate generalmente delimitandole tra apici doppi.
Anche se nelle celle di un foglio non dovesse essere stato previsto il tipo di dati logico, ci sono
funzioni che prevedono tra i parametri dei valori logici. In questi casi, può trattarsi solo di espressioni che restituiscono un valore Vero o Falso. Queste espressioni si realizzano attraverso operatori di comparazione, assieme a operatori o funzioni logiche, che generalmente corrispondono a
quanto elencato nella tabella 329.5.
Tabella 329.5. Elenco degli operatori di confronto, degli operatori logici e delle
funzioni logiche, comuni nei fogli elettronici.
Descrizione
uguale
diverso
minore
Applicativo
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Espressione
x =y
x =y
x =y
x =y
x =y
x <>y
x !=y
x <>y
x <>y
x <>y
x <y
x <y
x <y
x <y
x <y
Concetti generali sui fogli elettronici
Descrizione
maggiore
minore o uguale
maggiore o uguale
AND
OR
NOT
3745
Applicativo
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
Espressione
x >y
x >y
x >y
x >y
x >y
x <=y
x <=y
x <=y
x <=y
x <=y
x >=y
x >=y
x >=y
x >=y
x >=y
and(x ;y ;z ... )
x &y
e(x ;y ;z ... )
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
x #AND#y
or(x ;y ;z ... )
x |y
o(x ;y ;z ... )
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
[ ]
[ ]
e(x ;y[;z ...])
[ ]
[ ]
o(x ;y[;z ...])
x #OR#y
not(x )
~x
non(x )
non(x )
#NOT#x
329.3.1 Date e orari
Esistono diversi modi per rappresentare il tempo nei fogli elettronici. In generale esistono due filoni fondamentali; nelle situazioni più comuni si utilizza un numero la cui parte intera rappresenta
la quantità di giorni trascorsi a partire da un tempo di riferimento, mentre le frazioni dell’unità
rappresentano le stesse frazioni di 24 ore; in altri casi, si usa un numero intero che esprime la
quantità di secondi trascorsi da un tempo di riferimento. In generale, non ha importanza sapere
quale sia il tempo di riferimento, tranne per il fatto che non si possono gestire date precedenti a
quello. Al contrario, il modo in cui si annota effettivamente il tempo ha poi delle implicazioni
operative significative, che verranno descritte.
Per gestire questi numeri, si utilizzano solitamente delle funzioni apposite, che generano il numero corretto per la rappresentazione del tempo desiderato. La tabella 329.6 riassume le funzioni
più comuni a questo proposito.
Concetti generali sui fogli elettronici
3746
Tabella 329.6. Elenco delle funzioni comuni per l’inserimento di valori legati al tempo.
Descrizione
data
orario
Applicativo
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Gnumeric
SC
StarOffice
MS-Excel
1-2-3
Espressione
date(anno ;mese ;giorno )
@dts(mese ,giorno ,anno )
data(anno ;mese ;giorno )
data(anno ;mese ;giorno )
@data(anno ;mese ;giorno )
time(ore;minuti ;secondi )
@tts(ore,minuti ,secondi )
orario(ore;minuti ;secondi )
orario(ore;minuti ;secondi )
@orario(ore;minuti ;secondi )
Quando il tempo è rappresentato da un numero che rappresenta una quantità di giorni e frazioni
di giorno, è facile fare delle operazioni; per esempio è facile calcolare quanti giorni sono contenuti in un intervallo di date, perché basta fare una sottrazione e il valore intero che si ottiene è
proprio ciò che si cerca. Lo stesso tipo di operazione diventa più complicato quando il tempo è
rappresentato in una quantità di secondi.
Generalmente, oltre alle funzioni che generano il valore corrispondente al tempo, ce ne sono altre
per estrapolare alcune componenti: il giorno, il mese, l’anno, l’ora, i minuti e i secondi.
329.3.2 Rappresentazione dei dati
Esiste una distinzione importante tra la sostanza dei dati, il modo di memorizzarli e il modo di
rappresentarli. Generalmente, il tipo di memorizzazione dei dati è anche il limite alla realtà che
può essere rappresentata. A titolo di esempio, si può prendere in considerazione il problema già
descritto della forma in cui vengono annotate le informazioni legate al tempo: il tempo, a livello
umano, ha un significato che si traduce in qualche modo in un numero; poi, questo numero deve
poter essere rappresentato in un qualche modo comprensibile a livello umano.
All’inizio del capitolo è stato chiarito che normalmente i dati inseriti nelle celle sono numeri,
stringhe o espressioni che si risolvono in questi due tipi di dati. Un numero può avere un significato diverso a seconda del contesto. I fogli elettronici più recenti sono in grado di interpretare
questo contesto, cercando di rappresentare i valori nel modo ritenuto più appropriato; quando
questo non basta, occorre intervenire chiarendo il significato che l’informazione deve avere.
Volendo fare un esempio più semplice di quanto riferito alla gestione del tempo, basta pensare
ai valori percentuali: il numero 0,1 può trovarsi in un contesto per cui sia giusto rappresentarlo
proprio così, oppure potrebbe rappresentare un valore percentuale, ovvero il 10 %.
329.4 Riferimenti relativi e riferimenti assoluti
Una delle caratteristiche fondamentali di un foglio elettronico è la possibilità di copiare o spostare intere zone in punti diversi da quelli originali, inoltre deve essere possibile l’inserimento e
l’eliminazione di righe e colonne.
In questa prospettiva, quando si scrivono delle espressioni che fanno riferimento a delle celle, o a
delle zone, questi riferimenti sono generalmente relativi. Si osservi la figura 329.3, in cui si vede
la zona A1:B3 che si desidera copiare in D2:E4.
Concetti generali sui fogli elettronici
3747
Figura 329.3. Si vuole copiare la zona A1:B3 in D2:E4.
---------------------------------------------------------------------------.
|
A
|
B
|
C
|
D
|
E
|
F
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
1 | Primo
|
23456 |
|
|
|
|
---|-----------|-----------|-----------#########################-----------|
2 | Secondo
|
87654 |
#
|
#
|
---|-----------|-----------|-----------#-----------|-----------#-----------|
3 | Totale
|
111110 |
#
|
#
|
---|-----------|-----------|-----------#-----------|-----------#-----------|
4 |
|
|
#
|
#
|
---|-----------|-----------|-----------#########################-----------|
5 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
6 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
7 |
|
|
|
|
|
|
---------------------------------------------------------------------------’
Si intuisce che la cella B3 debba contenere un’espressione per il calcolo del totale, per esempio
SOMMA(B1:B2); evidentemente ci si aspetta che la copia della zona A1:B3 in D2:E4 avvenga in
modo «logico», ovvero che l’espressione in E4 sia modificata correttamente in SOMMA(E2:E3).
In modo analogo, ci si aspetta un comportamento «logico» se si desidera inserire un riga nuova
tra la prima e la seconda. In tal modo, la terza riga diventerebbe la quarta, per cui l’espressione
che prima si trovava in B3 andrebbe a finire in B4. A questo punto, sarebbe auspicabile che
l’espressione fosse aggiornata in modo coerente, diventando SOMMA(B1:B3).
Quando si scrive una coordinata e si vuole evitare che questa venga modificata da tali comportamenti, apparentemente logici, si deve aggiungere l’indicazione di quale parte della coordinata
non può essere modificata. Generalmente si aggiunge il simbolo ‘$’ davanti alla lettera della
colonna, davanti al numero della riga, o davanti a entrambi. Per esempio, $A3 è un riferimento alla cella A3, in cui l’indicazione della colonna non può essere alterata per nessun motivo;
nello stesso modo, A$3 è un riferimento alla cella A3, in cui la riga non può essere modificata.
Ovviamente, per impedire qualunque modifica si indica semplicemente $A$3.
329.5 Titoli, protezione delle celle e aree nascoste
Il foglio elettronico si presta particolarmente per la realizzazione di modelli già pronti, in cui può
bastare l’inserimento di alcuni dati in celle prestabilite, per ottenere il completamento necessario
in modo automatico. A titolo di esempio si può pensare al modello di una fattura, in cui basta
inserire la descrizione dell’articolo, la quantità e il prezzo unitario per aggiornare tutte le altre
informazioni. In questa situazione, può essere utile fare in modo di proteggere tutto il foglio
liberando solo alcune celle. In pratica, si consente l’inserimento di dati solo nelle celle previste,
impedendo errori che potrebbero costare l’alterazione di espressioni eventualmente complesse.
Generalmente si usa un approccio di questo tipo: le celle si possono considerare protette o non
protette, ma si possono alterare comunque finché non viene attivata la protezione del foglio.
In pratica, solo quando si richiede la protezione del foglio, nel suo complesso, viene preso in
considerazione lo stato individuale di protezione delle celle. In base a questa logica, tutte le celle
di un foglio nuovo sono protette in modo predefinito, fino a quando l’utilizzatore non toglie,
singolarmente o a zone, la loro protezione; solo dopo questo lavoro di selezione si può abilitare
le protezione globale del foglio, attraverso cui le celle protette non possono essere più modificate.
Alcuni applicativi del genere attivano e disattivano la protezione globale semplicemente a richiesta, mentre altri richiedono l’inserimento di una parola d’ordine, che rende la protezione più
efficace.
3748
Concetti generali sui fogli elettronici
Nel momento in cui si usa il foglio elettronico per realizzare modelli complessi, diventa interessante la possibilità di nascondere delle righe o delle colonne. Questo consente di inserire al loro
interno espressioni per calcoli intermedi di qualche risultato che non conviene mostrare all’utente
a cui verrà fatto utilizzare poi tale lavoro. Questa funzionalità, quando disponibile, si abbina convenientemente alla protezione del foglio, che può impedire eventualmente l’estrazione di queste
informazioni nascoste.3
A completamento di queste funzionalità di protezione, si può aggiungere la possibilità di bloccare
lo scorrimento di alcune righe e colonne iniziali. Si fa riferimento a questo concetto parlando di
«titoli» o di «riquadri». Lo scopo di tale meccanismo è il mantenere in vista alcune righe e alcune
colonne che permettono di interpretare i dati delle celle, quando si realizzano tabelle di dati molto
grandi che superano l’estensione visuale dello schermo.
329.6 Grafici
Attraverso i dati contenuti nelle celle di un foglio elettronico è possibile ottenere generalmente
un grafico, scelto in base al tipo di informazioni che si intendono rappresentare. Il comportamento dei programmi di questo tipo può variare di molto nel modo di richiedere le informazioni
necessarie alla realizzazione di tali grafici. In generale, per quanto riguarda i grafici che si dispongono su assi cartesiani, vengono distinti due gruppi di informazioni fondamentali: una serie
di stringhe descrittive che vanno disposte sull’asse X e più insiemi di valori da disporre sull’asse
Y in corrispondenza dei riferimenti sull’asse X.
Per fare un esempio, osservando la figura 329.4, si vedono tre gruppi di valori abbinati alle descrizioni «Primo», «Secondo» e «Terzo». Si intende che le stringhe contenute nella zona A1:A3
vanno collocate nell’asse X, mentre le zone B1:B3, C1:C3 e D1:D3 sono i valori relativi da
rappresentare.
Figura 329.4. Si vuole realizzare il grafico dei dati contenuti nella zona A1:D3.
---------------------------------------------------------------------------.
|
A
|
B
|
C
|
D
|
E
|
F
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
1 | Primo
|
10 |
15 |
20 |
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
2 | Secondo
|
20 |
17 |
15 |
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
3 | Terzo
|
30 |
19 |
5 |
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
4 |
|
|
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
5 |
|
|
|
|
|
|
---------------------------------------------------------------------------’
In questo caso, i valori da rappresentare, ovvero le serie di valori, sono organizzati in modo
verticale. Quando il programma che si utilizza guida alla realizzazione del grafico, potrebbe
proporre delle soluzioni errate; in questo caso potrebbe proporre la lettura delle serie di valori in
modo orizzontale. È evidente, quindi, che quando si realizza un grafico occorre poi controllare
che ciò che si ottiene corrisponda effettivamente a ciò che si vuole rappresentare. Ci si può
allenare su questo problema provando a ottenere lo stesso grafico orientando diversamente la
tabella dei dati, come si vede nella figura 329.5.
3
Non si deve considerare questa come una misura di sicurezza molto potente. Si tratta piuttosto di una possibilità più
utile allo scopo di evitare errori all’utente inesperto a cui si fa compilare un modello del genere già pronto.
Concetti generali sui fogli elettronici
3749
Figura 329.5. Si vuole realizzare il grafico dei dati contenuti nella zona A1:C4.
---------------------------------------------------------------------------.
|
A
|
B
|
C
|
D
|
E
|
F
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
1 | Primo
| Secondo
| Terzo
|
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
2 |
10 |
20 |
30 |
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
3 |
15 |
17 |
19 |
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
4 |
20 |
15 |
5 |
|
|
|
---|-----------|-----------|-----------|-----------|-----------|-----------|
5 |
|
|
|
|
|
|
---------------------------------------------------------------------------’
329.7 Riordino
Il foglio elettronico non è un sistema adatto per l’elaborazione di dati al livello di una base di
dati. Tuttavia, può essere utile inserire elenchi brevi che poi conviene riordinare in base a qualche
criterio.
Generalmente tali dati vengono inseriti suddivisi in righe. Successivamente il riordino può avvenire in base alla selezione della zona rettangolare in cui si trova l’elenco, specificando quali
colonne usare come criterio di ordinamento. Il riordino fatto in questo modo riguarda solo la zona
selezionata, senza interferire con il resto del foglio, sia in orizzontale che in verticale.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
330
Spreadsheet Calculator
SC, 1 ovvero Spreadsheet Calculator, è un applicativo per l’elaborazione di fogli elettronici di
vecchia concezione che è tuttora valido. La sua origine è molto lontana, a partire da un lavoro
apparso su Usenet, modificato successivamente da più autori. Oggi esistono diverse varianti di
questo applicativo, ognuna con un nome particolare; è disponibile anche una versione per Dos.
A prima vista, l’uso di questo foglio elettronico è piuttosto complicato. In effetti, si tratta di uno
di quei programmi che richiede studio e anche un po’ di memoria per i comandi che non sono così
intuitivi. Nonostante tutti questi problemi, rimane un applicativo fondamentale nell’informatica
del software libero.
330.1 Concetti generali
In condizioni normali, una volta avviato SC, si vede una schermata simile a quanto riportato in
figura 330.1.
Figura 330.1. Aspetto iniziale del foglio elettronico su uno schermo di 80 colonne per
24 righe.
A0 (10 2 0) []
A
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
B
C
D
E
F
G
<
Sullo schermo si distinguono quattro parti. La prima riga in alto, serve per visualizzare il contenuto delle celle e per l’inserimento dei comandi da parte dell’utilizzatore. La seconda riga viene
usata dal programma per mostrare dei messaggi, che si solito servono per conoscere l’esito di un
comando appena impartito. La terza riga e le prime quattro colonne mostrano le coordinate delle
celle, dove le righe sono identificate attraverso un numero e le colonne attraverso una lettera.
Infine, la parte restante dello schermo è riservata alle celle del foglio elettronico.
Le coordinate delle celle sono indicate usando prima la lettera e poi il numero, per esempio
A0. È possibile usare lettere maiuscole o minuscole indifferentemente.
1
SC dominio pubblico
3750
Spreadsheet Calculator
3751
Sono disponibili due cursori: uno per navigare tra le celle; l’altro per scrivere i comandi. Osservando la figura 330.1 si può notare che il cursore del foglio si trova sulla cella A0, alla cui destra
appare il simbolo ‘<’. In condizioni normali, la cella è anche evidenziata con un colore adatto.
È interessante interpretare ciò che appare nella prima parte della prima riga dello schermo. Nel
caso della figura, si vede:
A0 (10 2 0) []
Significa che il cursore si trova sulla cella A0, che il formato della cella è espresso in qualche
modo dalle cifre «10 2 0» e che si il suo contenuto è nullo (è vuota). Il formato si interpreta nel
modo schematizzato nella figura 330.2.
Figura 330.2. Interpretazione delle cifre che descrivono il formato numerico di una
cella.
A0 (10 2 0) []
| | |
| | |
| | tipo di formato:
| |
0 = quantità fissa di cifre decimali
| |
1 = notazione scientifica
| |
2 = notazione ingegnieristica
| |
3 = data (senza orario)
| |
| numero di cifre decimali
|
larghezza della colonna in caratteri
Il formato numerico espresso in questo modo, può essere definito solo su una colonna intera
e non si può circoscrivere a un gruppo più limitato di celle. In un gruppo di celle è possibile intervenire successivamente per modificare la rappresentazione dei valori numerici, senza
alterare la larghezza della colonna.
Prima di descrivere i comandi di SC è bene sapere subito che un comando non completato può
essere annullato premendo il tasto [ Esc ], anche più volte se necessario.
330.1.1 Zona
In tutti gli applicativi per l’elaborazione di fogli elettronici, la zona è un rettangolo di celle che va
da un minimo di una sola cella fino al massimo della dimensione del foglio. Per delineare questo
rettangolo si indicano le coordinate di due celle che si trovano negli angoli opposti di questo
rettangolo. Con SC si usano i due punti (verticali) per unire queste due coordinate.
Per esempio, A0:A0 è la zona che si riduce alla sola cella A0; A0:B1 è una zona di quattro celle
totali, composta in pratica da A0, B0, A1 e B1. Di solito, salvo situazioni particolari, l’inversione
nell’ordine delle coordinate e l’utilizzo degli altri due estremi non cambia il significato, per cui
A0:B1 è uguale a B1:A0, così come è uguale a A1:B0 e a B0:A1.
In certe situazioni, quando si vuole sottolineare il fatto che si sta facendo riferimento a un intervallo di colonne, si usa una forma simile, in cui non appaiono le coordinate numeriche delle
righe. per esempio, A:C rappresenta le colonne A, B e C. Nello stesso modo è possibile indicare
un intervallo di righe; per esempio, 1:3 indica le righe 1, 2 e 3.
Spreadsheet Calculator
3752
330.1.2 Navigazione nel foglio
La navigazione all’interno del foglio potrebbe non essere così intuitiva come ci si aspetterebbe.
Teoricamente, si possono usare i tasti freccia; in pratica, questo potrebbe non essere vero. Quando
ci sono difficoltà bisogna affidarsi alla tradizione, ovvero al metodo di VI, con l’aggiunta di
qualche altra possibilità. La tabella 330.1 riepiloga i comandi per lo spostamento del cursore nel
foglio.
Bisogna considerare che per ottenere l’inserimento di un’informazione in una cella, occorre
usare prima il comando apposito che permette di entrare nella fase di inserimento. Pertanto, la
pressione «casuale» di un tasto si traduce quasi sempre in un comando.
Tabella 330.1. Comandi principali per la navigazione tra le celle del foglio.
Comando
h
j
k
l
Alternativa
Ctrl+b
Ctrl+n
Ctrl+p
Ctrl+f
Spostamento
A sinistra di una cella.
In basso di una cella.
In alto di una cella.
A destra di una cella.
Esistono anche una serie di comandi utili per raggiungere posizioni particolari in modo rapido.
In particolare, può essere utile raggiungere solo celle che contengono già qualcosa (nella documentazione originale si parla di «celle valide»). La tabella 330.2 riepiloga altri comandi per lo
spostamento nel foglio.
Tabella 330.2. Comandi speciali per la navigazione nel foglio.
Comando
^
#
0
$
b
w
gcoordinata
Spostamento
Sulla prima riga della colonna attuale.
Sull’ultima riga che contiene qualcosa, della colonna attuale.
Sulla prima colonna della riga attuale.
Sull’ultima colonna che contiene qualcosa, della riga attuale.
Sulla cella precedente che contiene qualcosa.
Sulla cella successiva che contiene qualcosa.
Sulla cella indicata dalla coordinata.
330.1.3 Inserimento e modifica di dati nella riga di comando
L’aspetto più complicato per un principiante alle prese con questo applicativo è probabilmente
la modifica del testo nella riga di comando. Ci sono varie situazioni in cui occorre inserire un’informazione; di solito si tratta di introdurre il valore di una cella, oppure si deve completare un
comando specificando una zona, o altro. In queste situazioni, si accede alla parte superiore dello
schermo, in quella che qui viene chiamata la riga di comando.
Quando il contesto porta a inserire qualcosa, tutto avviene come ci si potrebbe aspettare, inserendo normalmente il testo, dove il tasto [ backspace ] funziona regolarmente per cancellare. Tuttavia,
la cosa non è così semplice come appare, perché si tratta di una riga che riconosce i comandi di
VI: è sufficiente premere [ Esc ] per passare alla modalità di comando. La tabella 330.3 riepiloga
le funzionalità più importanti della modalità di comando, quando si sta lavorando sulla prima
riga dello schermo.
Spreadsheet Calculator
3753
Tabella 330.3. Comandi disponibili quando si modifica qualcosa sulla prima riga dello
schermo.
Comando
i
a
h
l
x
[ Invio ]
Descrizione
Termina la modalità di comando e inizia l’inserimento.
Termina la modalità di comando e inizia l’inserimento dopo il cursore.
Va a sinistra di un carattere.
Va a destra di un carattere.
Cancella il carattere corrispondente al cursore.
Conferma e conclude.
330.2 Avvio e opzioni di funzionamento
L’avvio di questo programma è molto semplice. Sono disponibili alcune opzioni che hanno dei
comandi corrispondenti in fase di funzionamento del programma.
sc
[opzioni] [file]
La tabella 330.4 riepiloga le opzioni più importanti. Successivamente vengono mostrate altre
tabelle contenenti la descrizione di comandi interattivi.
Tabella 330.4. Opzioni principali da dare all’avvio dell’eseguibile.
Opzione
-r
-c
-m
-n
Descrizione
Ricalcola per righe (predefinito).
Ricalcola per colonna.
Disabilita il ricalcolo automatico.
Inserimento numerico rapido.
Durante il funzionamento sono disponibili due gruppi di comandi per modificare l’impostazione
del programma. Si tratta di comandi che scambiano alcune modalità, attivandole o disattivandole,
in funzione dello stato precedente, oppure di comandi che impostano in modo preciso. I comandi
che scambiano le modalità iniziano con la combinazione [ Ctrl+t ] e seguono con un’altra lettera; i
comandi di impostazione iniziano con la lettera ‘S’ (maiuscola), che richiede poi l’inserimento di
un comando scritto per esteso. Per esempio, la sequenza [ Ctrl+t ][ a ] attiva o disattiva la modalità
di ricalcolo automatico; nello stesso modo, il comando [ S ] seguito da ‘iterations=7’ stabilisce
che le iterazioni da eseguire per ricalcolare i valori delle espressioni devono essere sette. La
tabella 330.5 riepiloga i comandi più importanti da impartire in questo modo.
Tabella 330.5. Alcuni comandi che modificano la modalità di funzionamento, distinguendo tra quelli di scambio, che iniziano con
iniziano con [ S ].
Comando
Ctrl+t a
Ctrl+t c
Ctrl+t n
Ctrl+t t
S byrows
S bycols
S iterations=n
S tblstyle=0
S tblstyle=tbl
S tblstyle=latex
S tblstyle=tex
S tblstyle=frame
[ Ctrl+t ]
e quelli di impostazione, che
Descrizione
Attiva o disattiva il ricalcolo automatico delle celle.
Attiva o disattiva l’evidenziamento della cella corrente.
Attiva o disattiva la modalità di inserimento numerico rapido.
Attiva o disattiva la visualizzazione di informazioni sulla prima riga.
Definisce un ricalcolo delle celle per righe.
Definisce un ricalcolo delle celle per colonne.
Definisce il numero massimo di cicli per il ricalcolo delle celle.
Esporta la tabella con i campi separati da due punti.
Esporta la tabella in formato Tbl (*roff).
Esporta la tabella in formato LaTeX.
Esporta la tabella in formato TeX.
Esporta la tabella in formato FrameMaker.
Spreadsheet Calculator
3754
È opportuno sottolineare che le impostazioni di esportazioni si riferiscono al comando ‘T’, con il
quale si esporta il contenuto della tabella in un altro formato.
330.3 Inserimento e modifica dei valori nelle celle
Questo tipo di elaboratore di fogli elettronici, distingue tra diversi contesti di funzionamento. Inizialmente ci si trova in una modalità di comando, dove molti dei tasti (lettere o numeri) possono
rappresentare l’inizio di un comando. In base a questa logica, l’inserimento dei dati nelle celle deve essere preceduto da un comando apposito: ‘"’ inizia l’inserimento di una cella che rappresenta
un valore stringa; ‘=’ inizia l’inserimento di una cella che rappresenta un valore numerico.
Tale premessa permette di comprendere che questo tipo di foglio elettronico è in grado di gestire
soltanto due tipi di dati: stringhe e numeri (reali). Questi valori possono essere inseriti in forma
costante, oppure si possono indicare delle espressioni che generano un risultato del tipo previsto.
L’uso del comando ‘=’ o ‘"’ porta il programma in un contesto di funzionamento particolare, in
cui si digita l’espressione (costante o meno) sulla prima riga dello schermo, che mostra l’invito
‘i>’ (insert).
i>
Tale digitazione è sottoposta al controllo che è già stato descritto in precedenza: è come se fosse
stato iniziato un comando di inserimento con il programma VI, dal quale, se si preme il tasto
[ Esc ] si passa alla modalità di comando relativa, che viene fatta notare attraverso l’invito ‘e>’
(edit).
e>
Questo è riassunto nella tabella 330.3 che è già stata mostrata in precedenza. L’informazione viene memorizzata nella cella solo se si conclude l’inserimento con la pressione di [ Invio ]; pertanto,
se si passa alla modalità di comando (attraverso il tasto [ Esc ]) e poi si preme nuovamente [ Esc ],
si annulla l’inserimento.
L’inserimento di qualcosa in una cella, viene filtrato attraverso un comando di un linguaggio
interno al foglio elettronico. Se si assegna una stringa, il comando è
label cella =
{stringa_delimitata|espressione_stringa}
mentre se si assegna un valore numerico, il comando è
let cella =
{costante_numerica |espressione_numerica }
Quando si inserisce un valore, bisogna fare attenzione a non modificare la parte iniziale del
comando, a meno che si tratti di un’azione voluta.
Per modificare il contenuto di una cella, in generale è possibile cancellarlo prima, per poi inserire
quello nuovo, dove la cancellazione si ottiene con il comando ‘x’. La modifica del contenuto
richiede invece di passare a un contesto di funzionamento analogo a quello di inserimento, in
cui però ci si trova inizialmente in modalità di modifica. In pratica, ci si trova subito di fronte
all’invito ‘e>’ e ci si deve comportare di conseguenza.
Per passare alla modifica del contenuto di una cella, si usano due comandi differenti, a seconda
che si intenda modificare un valore stringa, ‘E’, o un valore numerico, ‘e’. Questo serve a cambiare il comando interno del foglio elettronico, che nel primo caso è ‘label’, mentre nel secondo
è ‘let’. Tutto questo ha un significato che diventerà più chiaro in seguito, quando verrà descritto
il formato in cui vengono salvati i dati.
Spreadsheet Calculator
3755
Per il momento, è importante comprendere che una cella può contenere simultaneamente due
valori: uno numerico e uno stringa. In generale, una cosa del genere non dovrebbe essere
ammissibile, ma la logica di SC porta a tale situazione.
Tabella 330.6. Comandi di inserimento e modifica dei valori delle celle. I comandi
particolari che sono disponibili durante il contesto di modifica, sono già stati descritti
in un’altra tabella.
Comando
=
"
<
>
e
E
Descrizione
Inizia l’inserimento di un valore numerico.
Inizia l’inserimento di un valore stringa (centrato).
Inizia l’inserimento di un valore stringa a sinistra.
Inizia l’inserimento di un valore stringa a destra.
Inizia la modifica di un valore numerico.
Inizia la modifica di un valore stringa.
330.3.1 Particolarità dell’inserimento di valori ed espressioni stringa
L’inserimento di una stringa, inizia con il comando ‘"’, che porta ad attivare la riga di comando
sulla prima riga dello schermo. Supponendo di intervenire sulla cella A7, si ottiene questo:
i> label A7 = "_
Il cursore per la digitazione della stringa si trova subito dopo gli apici doppi che si vedono nell’esempio. Quello che si sta inserendo è un’istruzione del foglio elettronico, con la quale si assegna
la stringa (label) alla cella A7. Si intuisce che gli apici doppi iniziali servono a delimitare una
stringa costante. Supponendo di voler inserire la parola «ciao», si può procedere come di seguito:
i> label A7 = "ciao_
Alla fine, si può concludere la stringa con un altro apice doppio, oppure si può anche farne a
meno. In ogni caso, al termine si conclude con un [ Invio ].
La stringa può essere collocata al centro della cella, a sinistra o a destra. Il comando ‘"’ inizia
l’inserimento di una stringa centrata; per l’allineamento a sinistra si usa il comando ‘<’; per l’allineamento a destra si usa il comando ‘>’. A questi comandi corrispondono altrettante istruzioni
interne del foglio elettronico, che vengono generate automaticamente:
•
label cella = espressione
stringa centrata;
•
leftstring cella = espressione
stringa allineata a sinistra;
•
rightstring cella = espressione
stringa allineata a destra.
Fino a questo punto è stato mostrato l’inserimento di stringhe costanti. Per quanto riguarda le
espressioni che generano un risultato stringa, bisogna considerare che l’apice doppio iniziale,
inserito automaticamente, deve essere eliminato. Per esempio, se la cella A0 contiene una stringa,
volendo fare riferimento al suo contenuto nella cella B3, si deve usare il riferimento alla cella A0,
senza delimitazioni. In pratica, all’inizio si ha questa situazione:
i> label B3 = "
3756
Spreadsheet Calculator
Quindi, si cancella l’apice doppio e si inserisce l’espressione desiderata:
i> label B3 = A0[ Invio ]
Probabilmente, in una stringa costante è impossibile indicare un apice doppio; inoltre, si può
usare una barra obliqua iniziale per ottenere la ripetizione della parte successiva, per tutta la
larghezza della colonna. In pratica,
i> label A10 = "\-=[ Invio ]
si traduce in pratica nella cella nel modo seguente:
-=-=-=-=-=
330.3.2 Particolarità dell’inserimento di valori ed espressioni
numerici
L’inserimento di valori numerici non presenta situazioni particolari. Infatti, un valore numerico
costante non richiede alcuna delimitazione, così come le espressioni che generano un risultato
numerico. A questo proposito, si può valutare la possibilità di abilitare l’inserimento numerico
rapido, con il comando [ Ctrl+t ][ n ], oppure attraverso l’opzione ‘-n’.
In generale, per coerenza, non è il caso di intervenire in questo modo; tuttavia, di fronte alla necessità di inserire un gran numero di costanti numeriche, può essere conveniente questo
approccio.
330.4 Formato delle celle
La gestione del formato delle celle è piuttosto strana, per cui è necessario trattare l’argomento in
modo particolare.
Per prima cosa occorre considerare la larghezza della colonna che viene determinata attraverso
il comando ‘f’. Questo attende l’inserimento di tre valori numerici: la larghezza in caratteri, la
quantità di cifre decimali e il tipo. Questa cosa è già stata anticipata nella figura 330.2, in cui è
descritto dettagliatamente il significato dell’ultimo valore.
Per fare un esempio molto semplice, il formato ‘10 2 0’, che è quello predefinito, rappresenta
una colonna di 10 caratteri di larghezza, in cui i valori vengono rappresentati con due decimali,
attraverso una notazione normale a virgola fissa. In pratica, in queste condizioni, si possono
rappresentare numeri da ‘-999999.99’ a ‘9999999.99’.
Anche la notazione scientifica e quella ingegnieristica, definite rispettivamente dal tipo uno e
due, utilizzano l’informazione sulla quantità di decimali. Al contrario, il formato delle date (il
numero tre), non dipende dalla quantità dei decimali.
In pratica, il comando ‘f’ definisce il formato numerico generale di una colonna, cosa che
si traduce anche nella definizione della larghezza della colonna stessa. Evidentemente, per
quanto riguarda le stringhe, queste risentono solo della larghezza della cella e non delle altre
informazioni.
Nell’ambito di una sola cella, è possibile cambiare il formato generale della colonna attraverso il
comando ‘F’, mentre per un gruppo di celle si usa il comando analogo ‘/F’. Questo richiede l’inserimento di una stringa speciale, composta da caratteri che servono a rappresentare un formato
numerico. Il significato di questi simboli appare descritto nella tabella 330.7.
Spreadsheet Calculator
3757
Tabella 330.7. Comandi per il controllo del formato delle colonne e della
visualizzazione dei valori numerici.
Comando
f larghezza decimali tipo
tipo:
0
1
2
3
F stringa_formato
#
0
.
,
%
\x
E+ e+
E- e;
/F zona stringa_formato
|
|
Descrizione
Formato generale della colonna.
Virgola fissa.
Notazione scientifica.
Notazione ingegnieristica.
Data.
Formato particolare della cella.
Cifra numerica eventuale.
Cifra numerica fissa.
Separatore decimale.
Separatore delle migliaia.
Inserisce il simbolo e mostra in forma di percentuale.
Tratta x in modo letterale.
Notazione scientifica.
Notazione scientifica mostrando il segno solo quando negativo.
Divide due formati per i valori positivi e i valori negativi.
Formato particolare di una zona di celle.
Si possono osservare i comandi interni del foglio elettronico nel momento in cui si definisce il
formato della colonna, oppure il formato specifico di un gruppo di celle. Nel primo caso si tratta
dell’istruzione ‘format’:
format colonna larghezza decimali tipo
Nel secondo caso, l’istruzione si abbrevia:
fmt zona stringa_di_formato_delimitata
Nel seguito vengono mostrati alcuni esempi, cercando di riprodurre nel modo migliore possibile
la situazione che si vede sullo schermo. Si deve tenere presente che l’istruzione interna del foglio
elettronico viene generata automaticamente; quello che serve, semmai, è di fare attenzione a non
cancellarla.
L’informazione che appare tra parentesi quadre nell’istruzione del foglio elettronico (‘[for
column]’ e ‘[format]’), non fa parte dell’istruzione stessa. Viene collocata per facilitare
all’utilizzatore la comprensione dell’azione che si sta compiendo.
I comandi ‘F’ e ‘/F’ sono identici dal punto di vista del foglio elettronico, perché generano la
stessa istruzione interna. Nel primo caso, la zona viene indicata automaticamente, riferendola
alla cella corrente.
Esempi
[f ]
i> format [for column] A 15 3 0[ Invio ]
Modifica il formato della colonna A, in modo da avere 15 caratteri di larghezza, riservando
tre cifre per i decimali, mostrando valori a virgola fissa.
[f ]
i> format [for column] A 15 3 1[ Invio ]
Spreadsheet Calculator
3758
Come nell’esempio precedente, utilizzando però una notazione scientifica.
[F]
i> fmt [format] A1 "########.000[ Invio ]
Modifica il formato particolare della cella A1, in modo da rappresentare valori che vanno
da un minimo di -9999999,999 a un massimo di 99999999,999.
[F]
i> fmt [format] A2 "###%[ Invio ]
Modifica il formato particolare della cella A1, in modo da rappresentare valori percentuali
interi.
[F]
i> fmt [format] A3 "########.000;\(########.000\)[ Invio ]
Modifica il formato particolare della cella A3, in modo da rappresentare valori che vanno
da un minimo di -99999999,999 a un massimo di 99999999,999. In particolare, i valori
negativi sono rappresentati tra parentesi.
330.5 Comandi per intervenire sui file
Per caricare o salvare il foglio, si interviene con comandi composti da una lettera, seguita dal
nome del file e forse da altre indicazioni. Vengono descritti brevemente questi comandi.
•
G file_da_caricare
Il comando ‘G’ sta per Get e permette di caricare un foglio elettronico che in precedenza era
stato salvato su un file. Appena si preme la lettera ‘G’, si passa sulla parte superiore dello
schermo a scrivere il nome di tale file, che deve essere conosciuto preventivamente, perché
non viene dato alcun ausilio di ricerca:
i> get ["source"] "prova[ Invio ]
L’esempio mostra in pratica il completamento del comando per caricare il file ‘prova’ che
si trova nella directory corrente.
•
M file_da_caricare
Il comando ‘M’ sta per Merge e permette di caricare un altro foglio elettronico che vada a
sommarsi a quanto appare già sullo schermo. In pratica, le celle che dovessero già contenere
qualcosa, vengono sovrascritte, perdendo l’informazione precedente.
•
P
[[file_da_salvare]
]
zona
Il comando ‘P’ sta per Put e permette di salvare il foglio elettronico in un file. Appena si
preme la lettera ‘P’, si passa sulla parte superiore dello schermo a scrivere il nome di tale
file, che però non è necessario se in precedenza il foglio era già stato salvato.
i> put ["dest" range] "prova[ Invio ]
L’esempio mostra in pratica il completamento del comando per salvare il foglio nel file
‘prova’. Se il nome era già stato stabilito in precedenza, è sufficiente premere [ Invio ] per
confermare l’operazione con il nome precedente.
Volendo, è possibile salvare solo una parte del foglio elettronico, definendo le coordinate
della zona a cui si è interessati.
Spreadsheet Calculator
3759
i> put ["dest" range] "prova-1" A0:F10[ Invio ]
In questo caso, si vuole salvare la zona delimitata dalle coordinate A0:F10 nel file
‘prova-1’. Si noti che in questo caso è stato necessario concludere la delimitazione del
nome del file attraverso gli apici doppi finali.
•
W
[[file_di_testo]
]
zona
Il comando ‘W’ sta per Write e si comporta in modo analogo a ‘P’, con la differenza che
genera un file di testo contenente la rappresentazione finale del foglio. In pratica, si tratta
di una forma di esportazione che potrebbe essere diretta anche alla stampa.
i> write ["dest" range] "| lpr" A0:F10[ Invio ]
Con questo comando si vuole stampare la zona A0:F10, attraverso l’invio della stessa al
comando ‘lpr’.
•
T
[[file_da_esportare]
]
zona
Il comando ‘T’ sta per Table e serve a esportare una zona, o tutto il foglio, in un formato
differente, definito attraverso il comando ‘S tblstyle’, già descritto nella tabella 330.5.
Il funzionamento è analogo ai comandi ‘P’ e ‘W’.
Tabella 330.8. Comandi per la gestione dei file.
Comando
G file
M file
P file zona
[ [ ]]
W [file [zona]]
T [file [zona]]
Descrizione
Carica il file.
Sovrappone il file al foglio attuale.
Salva il foglio o solo una zona particolare.
Salva (esporta) in formato testo.
Esporta in un altro formato.
In generale, tutti i comandi che servono a salvare o a esportare dati, permettono l’indicazione
di un file su disco, oppure di un comando del sistema operativo da alimentare attraverso una
pipeline. In pratica, se il nome del file inizia con il simbolo ‘|’, si intende che si tratti di una
pipeline.
330.6 Comandi per intervenire su zone del foglio
Per qualche ragione, i comandi che intervengono su una zona rettangolare del foglio, iniziano
tutti con la barra obliqua normale (‘/’) e continuano con una lettera, dopo la quale, di solito, si è
invitati a inserire la zona a cui si fa riferimento.
Da questo si intende che le coordinate delle zone vanno scritte sempre dopo aver iniziato il
comando, nel modo che è già stato mostrato:
coordinata_iniziale :coordinata_finale
In alternativa, si può indicare il nome della zona, che eventualmente gli fosse stato assegnato in
precedenza con il comando ‘/d’.
Il programma offre anche qualche accorgimento per facilitare l’inserimento delle zone, ma in generale non si tratta di soluzioni convenienti, per cui di solito è meglio usare la digitazione normale. La tabella 330.9 riepiloga brevemente i comandi principali di questo tipo, mentre nel seguito
sono mostrati alcuni esempi, in cui si vede anche l’istruzione interna del foglio elettronico, che
comunque viene generata automaticamente.
Spreadsheet Calculator
3760
Tabella 330.9. Comandi per la gestione delle zone del foglio.
Comando
/x zona
/c zona_destinazione zona_origine
/c zona_destinazione cella_origine
/f zona_destinazione n_iniziale incremento
/d stringa_nome zona
/u zona
/s
/l zona
/U zona
/F zona stringa_formato
Descrizione
Cancella il contenuto delle celle nella zona indicata.
Copia una zona.
Copia una cella riempiendo una zona.
Riempie una zona di valori.
Assegna un nome a una zona di celle.
Cancella il nome assegnato alla zona in precedenza.
Mostra l’elenco delle zone che hanno un nome.
Impedisce la modifica della zona.
Libera la zona indicata che così può essere modificata.
Assegna un formato a una zona di celle.
Esempi
[ / ][ x ]
i> erase A0:F20[ Invio ]
Elimina il contenuto delle celle che si trovano nella zona delimitata da A0:F20.
[ / ][ c ]
i> copy A0:A7 D0:D7[ Invio ]
Copia la zona D0:D7 in A0:A7.
[ / ][ c ]
i> copy A0:A7 D0[ Invio ]
Copia la cella D0 in tutta la zona A0:A7.
[ / ][ f ]
i> fill B0:B7 10 2[ Invio ]
Riempie le celle della zona B0:B7 a partire dal numero 10, per continuare con numeri che
si incrementano di due unità ogni volta.
[ / ][ d ]
i> define "elenco" B0:B7[ Invio ]
Assegna alla zona B0:B7 il nome ‘elenco’.
[ / ][ s ]
Mostra l’elenco delle zone che hanno un nome, inviando l’elenco sotto il controllo di
Less o di un altro programma analogo secondo quanto indicato nella variabile di ambiente
‘PAGER’. Per uscire dalla visualizzazione, occorre usare i comandi di quel programma. Con
Less basta premere la lettera ‘q’.
[ / ][ F ]
i> fmt B0:B7 "####.0000"[ Invio ]
Assegna alla zona B0:B7 il formato ‘####.0000’.
Spreadsheet Calculator
3761
330.6.1 Aiuto alla definizione delle celle e delle zone
Una volta entrati nell’idea di funzionamento di questo tipo di foglio elettronico, le cose non sono più tanto difficili e può essere utile sfruttare qualche accorgimento che facilita l’inserimento
di coordinate riferite a celle o zone. Nel momento in cui ci si trova nella fase di inserimento, nella prima riga dello schermo, sono disponibili alcuni comandi. In particolare i comandi
[ Ctrl+b ], [ Ctrl+n ], [ Ctrl+p ] e [ Ctrl+f ] sono ancora disponibili, per evidenziare una zona nel foglio
sottostante.
Usando questi comandi, la zona evidenziata diventa la zona «predefinita», che si può inserire
automaticamente con il tasto [ Tab ]. Bisogna provare un po’ e poi si comprende il senso di questo.
Tabella 330.10. Comandi speciali disponibili durante la digitazione nella prima riga
dello schermo.
Comando
Ctrl+b
Ctrl+n
Ctrl+p
Ctrl+f
Tab
Ctrl+v
Effetto
Back, estende a sinistra la zona predefinita.
Next, estende in basso la zona predefinita.
Previous, estende in alto la zona predefinita.
Forward, estende a destra la zona predefinita.
Inserisce la zona predefinita nella riga.
Inserisce la cella corrente nella riga.
330.6.2 Coordinate relative o assolute
Le espressioni del foglio elettronico vengono descritte in seguito. Tuttavia, in questa fase è importante rendersi conto della rappresentazione delle celle e delle zone di celle, che in pratica sono
le variabili di un foglio elettronico.
Quando un’espressione contiene un riferimento a una cella o a una zona, se questa cella viene copiata in un’altra posizione, questi riferimenti vengono modificati in modo relativo. Per esempio,
se la cella A0 contiene un riferimento alla cella B1, copiando la cella A0 in C2, il riferimento
interno alla cella C2 sarà alla cella D3. Per indicare un riferimento assoluto, si aggiunge nelle coordinate il simbolo ‘$’, davanti alla componente che si vuole «bloccare». Si osservino gli
esempio seguenti:
• ‘X4’ riferimento relativo alla cella X4;
• ‘$X$4’ riferimento assoluto alla cella X4;
• ‘$X4’ riferimento alla cella X4, dove la colonna è un’informazione assoluta, mentre la riga
rimane un’indicazione relativa;
• ‘X$4’ riferimento alla cella X4, dove la riga è un’informazione assoluta, mentre la colonna
rimane un’indicazione relativa;
330.7 Comandi vari
Nelle sezioni precedenti sono stati esclusi alcuni comandi. In particolare non è ancora stato spiegato come si termina il lavoro con questo programma: ciò si ottiene con [ Q ], [ q ], oppure [ Ctrl+c ];
se il foglio attuale non è stato salvato viene chiesto se si vogliono salvare i dati, oppure se si
intende rinunciare. La tabella 330.11 riepiloga questi comandi.
Spreadsheet Calculator
3762
Tabella 330.11. Comandi vari.
Comando
Q
q
Ctrl+c
Esc
Ctrl+g
Ctrl+l
Ctrl+r
Ctrl+x
@
m
c
+
[ Invio ]
?
Descrizione
Conclude il funzionamento del programma.
"
"
Annulla il comando in corso.
"
Ridisegna lo schermo.
Evidenzia le celle che contengono costanti numeriche.
Evidenzia le celle che contengono espressioni.
Ricalcola le espressioni.
Copia il contenuto della cella in un’area transitoria.
Incolla il contenuto dell’area transitoria nella cella corrente.
In condizioni normali, incrementa il valore numerico della cella.
In condizioni normali, decrementa il valore numerico della cella.
Passa all’inserimento di un’istruzione libera.
Mostra la guida interna.
330.8 Espressioni
Le celle del foglio sono fatte per contenere delle espressioni. Queste possono essere semplicemente dei valori costanti, numerici o stringa, oppure può trattarsi di qualcosa di più complesso.
Le espressioni si ottengono attraverso l’uso di operatori e anche attraverso funzioni che hanno la
caratteristica di iniziare con il simbolo ‘@’. Nel seguito vengono mostrate alcune tabelle che riassumono gli operatori e le funzioni di uso più comune. Resta sempre la documentazione originale
per conoscere le altre possibilità a disposizione.
Si può osservare che è possibile rappresentare un risultato booleano. In pratica, Vero
corrisponde al valore numerico uno; Falso corrisponde al valore numerico zero.
Le espressioni possono essere raggruppate attraverso l’uso di parentesi tonde, più o meno
annidate.
Tabella 330.12. Elenco degli operatori utilizzabili in presenza di valori numerici e logici.
Espressioni
-op
op1+op2
op1-op2
op1*op2
op1/op2
op1%op2
op1^op2
op1<op2
op1>op2
op1<=op2
op1>=op2
op1=op2
op1!=op2
~op
op1&op2
op1|op2
op1?op2:op3
Descrizione
Inverte il segno dell’operando.
Somma i due operandi.
Sottrae dal primo il secondo operando.
Moltiplica i due operandi.
Divide il primo operando per il secondo.
Modulo: il resto della divisione tra il primo e il secondo operando.
Eleva il primo operando alla potenza del secondo.
Vero se il primo operando è minore del secondo.
Vero se il primo operando è maggiore del secondo.
Vero se il primo operando è minore o uguale al secondo.
Vero se il primo operando è maggiore o uguale al secondo.
Vero se gli operandi si equivalgono.
Vero se gli operandi sono differenti.
NOT, inversione logica.
AND logico.
OR logico.
Restituisce il secondo operando se il primo è Vero, altrimenti il terzo.
Spreadsheet Calculator
3763
Tabella 330.13. Elenco di alcuni operatori e di alcune funzioni che hanno a che fare
con le stringhe.
Espressioni
str1 # str2
@substr(str1,n ,m )
@fmt(stringa_printf ,n )
@upper(str1)
@capital(str1)
@eqs(str1,str2)
Descrizione
Concatena le due stringhe.
La sottostringa dalla posizione n per m caratteri.
Converte un numero in stringa, in base al formato indicato.
Converte in maiuscolo.
La prima lettera di ogni parola in maiuscolo.
Vero se le due stringhe sono uguali.
Tabella 330.14. Elenco di alcune funzioni che intervengono su zone.
Espressioni
@sum(zona )
@prod(zona )
@avr(zona )
@count(zona )
@max(zona )
@min(zona )
Descrizione
Sommatoria dei valori della zona.
Prodotto dei valori delle celle.
Media aritmetica di tutti i valori validi.
Quantità di celle contenenti valori validi.
Valore massimo.
Valore minimo.
Tabella 330.15. Elenco di alcune funzioni matematiche comuni.
Espressioni
@sqrt(n )
@exp(n )
@ln(n )
@log(n )
@floor(n )
@ceil(n )
@rnd(n )
@round(n ,m )
@abs(n )
@pow(n ,m )
@pi
@dtr(n )
@rtd(n )
@sin(n )
@cos(n )
@tan(n )
@asin(n )
@acos(n )
@atan(n )
Descrizione
Radice quadrata.
Funzione esponenziale.
Logaritmo naturale.
Logaritmo a base 10.
L’intero più grande non superiore del valore fornito.
L’intero più piccolo non inferiore del valore fornito.
Arrotonda all’intero.
Arrotonda n all’m -esima cifra decimale.
Valore assoluto.
n elevato alla potenza di m .
P-greco.
Converte da gradi a radianti.
Converte da radianti a gradi.
Seno.
Coseno.
Tangente.
Arco-seno.
Arco-coseno.
Arco-tangente.
Tabella 330.16. Elenco di alcune funzioni relative a date e orari.
Espressioni
@now
@dts(mese ,giorno ,anno )
@tts(ore,minuti ,secondi )
@date(tempo_in_secondi )
@year(tempo_in_secondi )
@month(tempo_in_secondi )
@day(tempo_in_secondi )
@hour(orario_in_secondi )
@minute(orario_in_secondi )
@second(orario_in_secondi )
Descrizione
Tempo attuale in secondi (dal riferimento del 31 dicembre 1969).
Tempo in secondi corrispondente alla data fornita.
Orario in secondi a partire dalla mezzanotte.
Restituisce la data corrispondente in forma di stringa.
Restituisce l’anno.
Restituisce il mese.
Restituisce il giorno.
Restituisce l’ora.
Restituisce i minuti.
Restituisce i secondi.
Spreadsheet Calculator
3764
330.9 Formato del file
I file gestiti da SC sono file di testo contenenti direttive del linguaggio interno al foglio elettronico. Per fare un esempio iniziale, basti pensare a un foglio in cui siano state assegnate solo le
celle A0 e B1, come si vede nell’esempio:
0
1
A
123.00
B
ciao
C
D
E
F
G
<
In pratica, la cella A0 contiene il numero 123, mentre la cella B1 contiene la stringa ‘ciao’. Tutto
il resto si considera inutilizzato. Salvando questo lavoro in un file, si ottiene ciò che segue:
# This data file was generated by the Spreadsheet Calculator.
# You almost certainly shouldn’t edit it.
let A0 = 123
label B1 = "ciao"
goto B1
Si intuisce che le righe che iniziano con il simbolo ‘#’, assieme a quelle che sono bianche o semplicemente vuote, vengono ignorate. Tutto il resto viene definito in forma di direttiva, corrispondente a istruzioni del foglio elettronico. In particolare, è stata anche memorizzata la posizione
del cursore, che si presume si trovasse sulla cella B1.
Nell’ambito delle direttive, ciò che appare racchiuso tra parentesi quadre viene considerato un
commento; di conseguenza viene ignorato. Per esempio, se si modifica il file a mano, nel modo
seguente,
# This data file was generated by the Spreadsheet Calculator.
# You almost certainly shouldn’t edit it.
let [ciao ciao] A0 = 123
label B1 = "ciao" [ciao ciao]
goto B1
tutto funziona regolarmente, senza che queste cose influiscano.
Negli esempi che sono già stati mostrati nel capitolo, al riguardo di queste istruzioni interne del
foglio elettronico, sono già apparse indicazioni tra parentesi quadre, usate per suggerire all’utente
le informazioni da inserire. Evidentemente, tali indicazioni non fanno parte delle istruzioni.
La tabella 330.17 riepiloga le istruzioni principali del foglio elettronico, con le quali si può realizzare direttamente un file per SC. Altre istruzioni possono essere individuate semplicemente
osservando il comportamento di questo programma.
Tabella 330.17. Alcune istruzioni interne del foglio elettronico, utili per la realizzazione
diretta dei suoi file.
Espressioni
let cella = espr_num
label cella = espr_str
format colonna = larghezza decimali tipo
fmt zona str_formato
set byrows
set bycols
set iterations = n_iterazioni
set tblstyle = stile
set autocalc
set !autocalc
set numeric
set !numeric
set cellcur
Descrizione
Assegna alla cella un’espressione numerica.
Assegna alla cella un’espressione stringa.
Modifica il formato di una colonna.
Modifica il formato di una zona.
Ricalcola per righe.
Ricalcola per colonne.
Iterazioni per il ricalcolo.
Definisce lo stile di esportazione delle tabelle.
Ricalcola automaticamente.
Non ricalcola automaticamente.
Inserimento numerico rapido.
Inserimento numerico normale.
Evidenzia la cella corrente.
Spreadsheet Calculator
Espressioni
set !cellcur
set toprow
set !toprow
goto cella
3765
Descrizione
Non evidenzia la cella corrente.
Mostra le informazioni sulla prima riga.
Non mostra le informazioni sulla prima riga.
Porta il cursore sulla cella indicata.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
3766
Spreadsheet Calculator
Parte lxviii
Applicazioni matematiche e
grafiche varie
331 Gnuplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3768
331.1 Avvio e interazione normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3769
331.2 Comandi comuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3769
331.3 Espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3771
331.4 Script e file di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3774
331.5 Controllare l’uscita grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3775
332 Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3777
332.1 Avvio e interazione normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3777
332.2 Variabili di Octave e calcoli elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3778
332.3 Vettori e matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3779
332.4 Disegno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3780
332.5 Script di Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3781
332.6 File di dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3781
333 Applicazioni matematiche varie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3783
333.1 Geg -- GTK+ Equation Grapher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3783
333.2 QCad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3786
Indice analitico del volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3787
3767
Capitolo
331
Gnuplot
Gnuplot 1 è un programma applicativo per il disegno di funzioni e di dati nello spazio a due e tre
dimensioni. Il suo funzionamento avviene per mezzo di istruzioni impartite attraverso una riga di
comando e in questo senso il suo utilizzo può risultare un po’ strano all’utilizzatore occasionale.
Gnuplot è disponibile su molti sistemi operativi differenti e per quanto riguarda GNU/Linux, si
utilizza l’interfaccia grafica X. Per la precisione, si deve impegnare una finestra di terminale,
attraverso la quale impartire i comandi. Questi generano eventualmente una rappresentazione
grafica che viene mostrata in una finestra separata. L’esempio seguente mostra una sessione di
lavoro brevissima utilizzando l’eseguibile ‘gnuplot’ per visualizzare la funzione x2 * sin(x),
dove sia l’asse X che l’asse Y vanno da -P-greco a +P-greco.
$ gnuplot[ Invio ]
G N U P L O T
Linux version 3.5 (pre 3.6)
patchlevel beta 347
last modified Mon Jun 22 13:22:33 BST 1998
Copyright(C) 1986 - 1993, 1998
Thomas Williams, Colin Kelley and many others
Send comments and requests for help to [email protected]
Send bugs, suggestions and mods to [email protected]
Terminal type set to ’x11’
gnuplot> splot [-pi:pi] [-pi:pi] x**2 * sin(y)[ Invio ]
La figura 331.1 mostra il risultato di questa funzione, così come appare nella finestra generata
dal comando di Gnuplot che è appena stato visto.
Figura 331.1. Una funzione nello spazio tridimensionale disegnata con Gnuplot.
La versione per GNU/Linux di Gnuplot utilizza la libreria Readline per il controllo della riga di
comando: questo facilita la sua configurazione (attraverso il file ‘~/.inputrc’) e il riutilizzo di
1
Gnuplot software libero con licenza speciale
3768
Gnuplot
3769
comandi già inseriti, attraverso lo scorrimento dello storico. In pratica, chi utilizza già la shell
Bash dovrebbe trovarsi a suo agio di fronte alla riga di comando di Gnuplot.
331.1 Avvio e interazione normale
Gnuplot viene avviato attraverso l’eseguibile ‘gnuplot’, utilizzando necessariamente una finestra di terminale. Non è previsto l’uso di opzioni speciali, a parte quelle comuni per l’uso di
programmi nel sistema grafico X (‘-geometry’, ‘-display’, ecc.).
gnuplot
[opzioni] [file_script ...]
Eventualmente, come si vede dallo schema sintattico, possono essere indicati dei file da caricare
ed eseguire. Si tratta di script di Gnuplot, composti semplicemente da una sequenza di comandi
che potrebbero essere impartiti attraverso la riga di comando normale dello stesso.
Il disegno delle funzioni avviene attraverso il comando ‘plot’, per il disegno di curve nello
spazio a due dimensioni, e ‘splot’, per il disegno di piani nello spazio a tre dimensioni. Il
funzionamento interattivo di Gnuplot (quello normale che si ottiene quando non si indicano file
da caricare) prevede in particolare il comando ‘help’ per ottenere una guida rapida ai comandi e
il comando ‘exit’ (o ‘quit’) per terminarne il funzionamento.
La guida rapida ottenibile con il comando ‘help’ permette di selezionare degli argomenti particolari che generalmente corrispondono ai nomi dei comandi utilizzabili. Il comando ‘help’ da
solo mostra un’introduzione all’uso di Gnuplot e termina elencando gli argomenti per i quali si
possono richiedere informazioni specifiche.
331.2 Comandi comuni
I comandi di Gnuplot sono numerosi e complessi. Qui viene mostrato solo l’uso di alcuni di
questi e in modo elementare, dove in particolare anche gli schemi sintattici vengono semplificati.
In generale, è possibile mettere assieme più comandi in un’unica riga separandoli con il punto
e virgola (‘;’); i comandi possono continuare nella riga successiva se si utilizza la barra obliqua
inversa (‘\’) esattamente alla fine di una riga da continuare. Alcuni argomenti dei comandi sono
delle stringhe, nel senso che non fanno riferimento a parole chiave previste; in tal caso devono
essere delimitate con gli apici singoli (‘’’) o con gli apici doppi (‘"’), dove le stringhe delimitate
con apici doppi espandono alcune sequenze precedute dalla barra obliqua inversa, mentre le altre
no.
Una riga di comando di Gnuplot può contenere anche stringhe delimitate da apici inversi (‘‘’).
In tal caso queste stringhe vengono interpretate come comandi del sistema operativo sottostante
e vengono rimpiazzate con il risultato dell’esecuzione del comando stesso.
I comandi possono contenere dei commenti che iniziano nel momento in cui appare il simbolo
‘#’ e fanno in modo che venga ignorato tutto quello che appare di seguito fino alla fine della riga.
Quando un comando prevede l’indicazione di un intervallo di valori, questo viene indicato utilizzando la notazione ‘[inizio :fine ]’, con le parentesi quadre che fanno parte della notazione
stessa. Se per qualche motivo si deve indicare un intervallo predefinito in modo esplicito, si
possono usare le parentesi aperte e chiuse senza alcuno contenuto: ‘[]’.
Alcuni comandi
help
[voce] | ? [voce]
Mostra la guida interna riferita alla voce richiesta, oppure all’introduzione di Gnuplot.
Gnuplot
3770
exit
| quit
I comandi ‘exit’ o ‘quit’ concludono il funzionamento di Gnuplot.
plot
[intervalli]
funzione
[title
]
stringa_titolo
Il comando ‘plot’ serve per il disegno di punti su un piano (lo spazio a due dimensioni). Di
solito si utilizza preferibilmente per il disegno di una funzione, come nella sintassi mostrata
qui. Gli intervalli sono al massimo due: il primo si riferisce all’asse X e il secondo all’asse
Y. Il titolo che può essere indicato in una stringa dopo la parola chiave ‘title’ serve a
definire una didascalia per la curva che viene disegnata.
plot
[intervalli]
stringa_file_dati
[title
]
stringa_titolo
‘plot’ può essere usato per visualizzare anche una serie di punti come indicato all’interno
di un file di dati che viene descritto più avanti. È importante osservare comunque che un
file di dati di Gnuplot non ha lo stesso formato degli script di questo.
splot
[intervalli]
funzione
[title
]
stringa_titolo
Il comando ‘splot’ serve per il disegno di punti su uno spazio (a tre dimensioni). Di solito
si utilizza preferibilmente per il disegno di una funzione, come nella sintassi mostrata qui.
Gli intervalli sono al massimo tre: il primo si riferisce all’asse X, il secondo all’asse Y e
il terzo all’asse Z. Il titolo che può essere indicato in una stringa dopo la parola chiave
‘title’ serve a definire una didascalia per il piano che viene disegnato.
splot
[intervalli]
stringa_file_dati
[title
]
stringa_titolo
‘splot’ può essere usato per visualizzare anche una serie di punti come indicato all’interno
di un file di dati, esattamente come nel caso di ‘plot’, con la differenza che le coordinate
in questione sono fatte di tre elementi.
load stringa_file_script
‘load’ carica ed esegue il contenuto di uno script di Gnuplot. Al termine dell’esecuzione
dello script riprende il funzionamento normale.
save stringa_file_script
‘save’ salva l’impostazione e il disegno attuale in uno script di Gnuplot. Eventualmente si
può modificare manualmente il file in questione utilizzando un file per la modifica dei file
di testo.
|
print espressione stringa
‘print’ restituisce il risultato dell’espressione oppure la stringa fornita come argomento.
In pratica permette di fare il calcolo di un valore o di mostrare una frase.
[
if (condizione ) comando ; comando
]...
‘if’ esegue il comando (o i comandi se ne viene indicato più di uno) solo se la condizione
posta tra parentesi risulta vera.
pause n_secondi
[stringa]
‘pause’ serve a fare una pausa della durata indicata dal primo argomento. Se si vuole che
per proseguire debba essere premuto il tasto [ Invio ], occorre indicare il valore -1. La stringa
è facoltativa e permette di mostrare un messaggio contenente la stringa stessa. ‘pause’ è
particolarmente adatto negli script di Gnuplot.
Esempi
gnuplot> help plot
Mostra la guida interna riferita al comando ‘plot’.
gnuplot> plot sin(x)
Gnuplot
3771
Disegna la funzione seno utilizzando una zona predefinita degli assi cartesiani.
gnuplot> plot sin(x) title ’seno di x’
Come nell’esempio precedente, indicando la stringa ‘seno di x’ come didascalia riferita
alla curva disegnata.
gnuplot> plot [-3:3] sin(x) title ’seno di x’
Come nell’esempio precedente, limitando l’ampiezza dell’asse X da -3 a +3.
gnuplot> plot [-pi:pi] sin(x) title ’seno di x’
Come nell’esempio precedente, limitando l’ampiezza dell’asse X da -P-greco a +P-greco.
gnuplot> plot ’mio_file.gnuplot’
Disegna nello spazio a due dimensioni i punti annotati nel file ‘mio_file.gnuplot’ che
si trova nella directory corrente.
gnuplot> splot x**2 * sin(y)
Disegna un piano nello spazio corrispondente alla funzione ottenuta dal quadrato di x
moltiplicato per il seno di y.
gnuplot> splot x**2 * sin(y) title ’quadrato di x per seno di y’
Come nell’esempio precedente, indicando la stringa ‘quadrato di x per seno di y’
come didascalia riferita al piano disegnato.
gnuplot> splot [-3:3] [-5:5] x**2 * sin(y) title ’quadrato di x per
seno di y’
Come nell’esempio precedente, limitando l’ampiezza dell’asse X da -3 a +3 e quella
dell’asse Y da -5 a +5.
gnuplot> plot [0:pi] [-pi:pi] x**2 * sin(y) title ’quadrato di x per
seno di y’
Come nell’esempio precedente, limitando l’ampiezza dell’asse X da zero a +P-greco e
quella dell’asse Y da -P-greco a +P-greco.
gnuplot> splot ’mio_file.gnuplot’
Disegna nello spazio a tre dimensioni i punti annotati nel file ‘mio_file.gnuplot’ che si
trova nella directory corrente.
gnuplot> if (1==1) print ’ovvio: 1 è uguale a 1’
Dal momento che la condizione si avvera, mostra la frase «ovvio: 1 è uguale a 1».
331.3 Espressioni
Le espressioni che si possono utilizzare con Gnuplot sono più o meno le stesse dei linguaggi di
programmazione più comuni e, in generale, gli spazi orizzontali sono ignorati. Tra le altre cose
questo giustifica il motivo per cui diversi tipi di argomenti dei comandi di Gnuplot devono essere
definiti come stringhe delimitate.
L’aritmetica di Gnuplot distingue tra numeri interi e numeri a virgola mobile, per cui, utilizzando
numeri interi si hanno risultati interi, mentre utilizzando valori a virgola mobile si ottengono
risultati a virgola mobile. In pratica:
gnuplot> print 10/3[ Invio ]
Gnuplot
3772
3
gnuplot> print 10/3.0[ Invio ]
3.33333333333333
gnuplot> print 10/2[ Invio ]
5
gnuplot> print 10/2.0[ Invio ]
5.0
Le costanti numeriche possono essere indicate nei modi consueti, con o senza segno, separando
la parte intera da quella decimale attraverso un punto, oppure si può usare anche una notazione
esponenziale. Per esempio:
gnuplot> print 1e2[ Invio ]
100.0
gnuplot> print 1e-2[ Invio ]
0.01
Gli operatori che si possono utilizzare nelle espressioni di Gnuplot sono in pratica quelle del
linguaggio C. La tabella 331.1 elenca e descrive gli operatori aritmetici e quelli di assegnamento.
Tabella 331.1. Elenco degli operatori aritmetici e di quelli di assegnamento relativi a
valori numerici.
Operatore e operandi
+op
-op
op1 + op2
op1 - op2
op1 * op2
op1 / op2
op1 % op2
var = valore
op1 ** op2
Descrizione
Non ha alcun effetto.
Inverte il segno dell’operando.
Somma i due operandi.
Sottrae dal primo il secondo operando.
Moltiplica i due operandi.
Divide il primo operando per il secondo.
Modulo: il resto della divisione tra il primo e il secondo operando.
Assegna alla variabile il valore alla destra.
Eleva il primo operando alla potenza del secondo.
Molti degli operatori matematici hanno senso solo perché Gnuplot consente di definire delle
variabili al volo, semplicemente assegnandoci un valore. Per esempio,
gnuplot> a = 2*pi[ Invio ]
assegna alla variabile ‘a’ il doppio del P-greco. Per visualizzarne il contenuto basta utilizzare il
comando ‘print’:
gnuplot> print a[ Invio ]
6.28318530717959
Gli operatori di confronto determinano la relazione tra due operandi. Il risultato dell’espressione
composta da due operandi posti a confronto è di tipo booleano, rappresentabile all’interno di
Gnuplot come !0, o non-zero (Vero), e zero (Falso), esattamente come accade nel linguaggio C.
È importante sottolineare che qualunque valore diverso da zero equivale a Vero in un contesto
logico. Gli operatori di confronto sono elencati nella tabella 331.2.
Gnuplot
3773
Tabella 331.2. Elenco degli operatori di confronto. Le metavariabili indicate
rappresentano gli operandi e la loro posizione.
Operatore e operandi
op1 == op2
op1 != op2
op1 < op2
op1 > op2
op1 <= op2
op1 >= op2
Descrizione
Vero se gli operandi si equivalgono.
Vero se gli operandi sono differenti.
Vero se il primo operando è minore del secondo.
Vero se il primo operando è maggiore del secondo.
Vero se il primo operando è minore o uguale al secondo.
Vero se il primo operando è maggiore o uguale al secondo.
Quando si vogliono combinare assieme diverse espressioni logiche, comprendendo in queste
anche delle variabili che contengono un valore booleano, si utilizzano gli operatori logici (noti
normalmente come: AND, OR, NOT, ecc.). Il risultato di un’espressione logica complessa è
quello dell’ultima espressione elementare a essere valutata. Gli operatori logici sono elencati
nella tabella 331.3.
Tabella 331.3. Elenco degli operatori logici. Le metavariabili indicate rappresentano
gli operandi e la loro posizione.
Operatore e operandi
! op
op1 && op2
op1 || op2
Descrizione
Inverte il risultato logico dell’operando.
Se il risultato del primo operando è Falso non valuta il secondo.
Se il risultato del primo operando è Vero non valuta il secondo.
Gnuplot riconosce una serie di funzioni in parte elencate nella tabella 331.4, oltre alla costante
‘pi’ (solo al minuscolo) che rappresenta il P-greco.
Tabella 331.4. Alcune funzioni riconosciute da Gnuplot.
Operatori e operandi
rand(op)
int(op)
abs(op)
sqrt(op)
log10(op)
log(op)
exp(op)
sin(op)
cos(op)
tan(op)
asin(op)
acos(op)
atan(op)
sinh(op)
cosh(op)
tanh(op)
Descrizione
Numero casuale.
Parte intera.
Valore assoluto.
Radice quadrata.
Logaritmo in base 10.
Logaritmo naturale.
e^x.
Seno.
Coseno.
Tangente.
Arco-seno.
Arco-coseno.
Arco-tangente.
Seno iperbolico.
Coseno iperbolico.
Tangente iperbolica.
Infine, Gnuplot, oltre alla possibilità di creare e assegnare dei valori a delle variabili, può definire
delle funzioni. Per esempio,
gnuplot> funzione(x,y) = x**2 * y[ Invio ]
definisce la funzione denominata ‘funzione’ che ha due variabile, ‘x’ e ‘y’, che si traduce nell’espressione ‘x**2 * y’. In seguito, si può utilizzare la funzione appena creata per farci dei
calcoli,
Gnuplot
3774
gnuplot> print funzione(2,3)[ Invio ]
12
oppure per disegnarne il grafico:
gnuplot> splot funzione(x,y)[ Invio ]
Naturalmente la stessa cosa vale per le funzioni con una sola variabile.
331.4 Script e file di dati
I file che possono essere indicati alla fine degli argomenti della riga di comando dell’eseguibile
‘gnuplot’ e quelli che possono essere caricati attraverso il comando ‘load’, sono degli script
di Gnuplot. La sintassi di questi file è molto semplice: si tratta solo di un elenco di comandi di
Gnuplot.
In particolare, se esiste il file ‘~/.gnuplot’, questo viene trattato come uno script da eseguire
all’avvio di Gnuplot.
A titolo di esempio viene mostrato uno script del genere il cui scopo è quello di mostrare una
serie di funzioni come in una sequenza di diapositive.
#
# Sequenza di funzioni con Gnuplot.
#
plot [-1:1] 2*x title ’f(x) = 2x’
pause -1 ’premere <Invio> per continuare’
plot [-2:2] x**2 title ’f(x) = x^2’
pause -1 ’premere <Invio> per continuare’
plot [-2:100] log(x) title ’log(x)’
pause -1 ’premere <Invio> per continuare’
plot [-pi:pi] sin(x) title ’seno’
pause -1 ’premere <Invio> per continuare’
plot [-pi:pi] tan(x) title ’tangente’
pause -1 ’premere <Invio> per continuare’
splot [-5:5] [-5:5] 2*x+y title ’f(x,y) = 2x+y’
pause -1 ’premere <Invio> per continuare’
splot [-5:5] [-5:5] x**2*y title ’f(x,y) = x^2 * y’
pause -1 ’premere <Invio> per continuare’
splot [-pi/4:pi/4] [-pi/2:pi/2] sin(x)*cos(y) title ’f(x,y) = sin(x)*cos(y)’
pause -1 ’fine della rappresentazione’
# Fine
Gnuplot è in grado di gestire anche i file di dati, ovvero dei file contenenti solo delle coordinate
corrispondenti a punti da rappresentare. Si tratta sempre di file di testo, in cui vengono ignorati i
commenti preceduti dal simbolo ‘#’ oltre alle righe bianche e a quelle vuote, mentre le altre righe
contengono coordinate nella forma:
x y
[z]
Per esempio, la riga
1 2
rappresenta il punto di coordinata X=1 e Y=2, mentre la riga
Gnuplot
3775
1 2 3
rappresenta il punto di coordinata X=1, Y=2 e Z=3.
Eccezionalmente, i comandi ‘plot’ e ‘splot’ possono essere utilizzati direttamente per visualizzare una serie di punti senza doverli caricare da un file esterno. Per ottenere questo si utilizzano
nel modo seguente:
|
plot splot ’-’
coordinata
...
e
Per esempio,
plot ’-’
0 0
1 1
2 2
3 3
4 4
e
mostra cinque punti appartenenti alla retta f(x)=x.
In questo stesso modo si possono rappresentare più gruppi di punti, aumentando
conseguentemente i trattini che fungono da argomento di ‘plot’ o di ‘splot’. Per esempio,
plot ’-’, ’-’
0 0
1 1
2 2
3 3
4 4
e
0 1
1 2
2 3
3 4
4 5
e
mostra cinque punti appartenenti alla retta f(x)=x e altri cinque punti (colorati in modo diverso)
appartenenti alla retta f(x)=x+1.
331.5 Controllare l’uscita grafica
I disegni realizzati con Gnuplot sono diretti normalmente in una finestra di X. Gnuplot controlla
il formato delle immagini che crea attraverso il comando ‘set terminal’.2
set terminal tipo_di_uscita_grafica
[altri_argomenti]
Per esempio, nel caso specifico della rappresentazione normale in una finestra di X, la sintassi
diventa:
set terminal x11
[reset] [n_finestra ]
Per la precisione, si possono visualizzare più finestre contemporaneamente, numerate a partire
da zero. Utilizzando però la parola chiave ‘reset’, si eliminano tutte le finestre.
2
I vari formati grafici in cui possono essere resi i disegni di Gnuplot dipendono dal modo in cui questo è stato
compilato. In pratica, la disponibilità o meno di un certo formato dipende da delle librerie incluse o meno in fase di
compilazione.
Gnuplot
3776
Alternativamente si può fare in modo di generare un’immagine che non viene visualizzata, ma
salvata in un file. La sintassi seguente riguarda la possibilità di generare immagini in formato
PNG.
set terminal png
[small|medium|large] [monochrome|gray|color]
Nello schema sintattico, le parole chiave ‘small’, ‘medium’ e ‘large’, si riferiscono alla dimensione dei caratteri utilizzati nelle scale e nelle didascalie. Le parole chiave ‘monochrome’,
‘gray’ e ‘color’, si riferiscono alla colorazione o meno che devono avere le immagini.
Il comando appena descritto non permette di stabilire la destinazione del file generato, pertanto questa è semplicemente lo standard output. Questo fatto rende praticamente impossibile la
gestione di immagini PNG attraverso l’uso di Gnuplot in modo interattivo. In pratica, si deve
realizzare uno script, in modo da poter avviare Gnuplot ridirigendo lo standard output verso il
file desiderato. Quello che segue è un esempio banale di un tale script.
# parabola.gnuplot
set terminal png medium color
plot x**2
Per generare il file ‘parabola.png’, basta il comando seguente:
$ gnuplot parabola.gnuplot > parabola.png
Eventualmente si può generare anche un’immagine GIF.
[
][
] [small|medium|large]
[colore_disegno ...] ]
set terminal gif transparent
interlace
,→ size pixel_o ,pixel_v
colore_sfondo colore_assi
[
][
←-
La schema sintattico è più complesso e di conseguenza offre maggiori possibilità. Le dimensioni
dei caratteri usati per le scale, i titoli e le didascalie, sono controllate dalle stesse parole chiave
viste per il formato PNG. La parola chiave ‘transparent’ controlla la realizzazione di un disegno con un fondale trasparente; ‘interlace’ fa in modo di generare un file GIF interlacciato. La
dimensione dell’immagine può essere definita attraverso l’opzione ‘size’, seguita dalla quantità
di punti grafici (pixel) orizzontali e verticali (come si vede dallo schema).
In particolare possono essere controllati i colori, indicati attraverso degli argomenti che vengono
posti nella parte finale del comando. Il primo di questi colori si riferisce al fondale, il secondo è
quello degli assi X, Y ed eventualmente Z. I colori successivi si riferiscono agli elementi visualizzati (le curve o i piani nello spazio). Gli argomenti che esprimono i colori hanno il formato
seguente:
xrossoverdeblu
I tre colori fondamentali sono espressi da coppie di cifre esadecimali. Per esempio: ‘xffffff’ è
il bianco, ‘x000000’ è il nero, ‘xff0000’ è il rosso, ‘x00ff00’ è il verde e ‘x0000ff’ è il blu.
set terminal gif xffffff x0000ff x00ff00
splot (x**2)*y
L’esempio mostra uno script con il quale si vuole generare un file GIF (di dimensioni normali)
contenente il grafico della funzione f(z)=(x2)*y, utilizzando dei colori particolari: bianco per lo
sfondo, blu per gli assi e verde per il reticolo che rappresenta il piano nello spazio.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
332
Octave
Octave 1 è un linguaggio di programmazione ad alto livello per il calcolo matematico, usato
fondamentalmente in modo interattivo. Viene usato attraverso un terminale a caratteri, come
una console virtuale di GNU/Linux, ma per ottenere dei grafici si avvale di Gnuplot che così è
opportuno sia installato assieme a Octave. L’interazione tra Gnuplot e Octave è trasparente, se il
secondo viene utilizzato in una finestra di terminale all’interno del sistema grafico X.
In queste sezioni si mostra solo qualche piccolo assaggio di Octave che dispone di ampia
documentazione per conto proprio: octave.info.
Anche Octave utilizza la libreria Readline per il controllo della riga di comando, con tutti i
vantaggi che ciò comporta per l’utilizzatore.
332.1 Avvio e interazione normale
Octave viene avviato attraverso l’eseguibile ‘octave’. Bisogna ricordare che se si vogliono disegnare dei grafici deve essere avviato da una finestra di terminale all’interno di X, diversamente
basta una console virtuale di GNU/Linux. ‘octave’ riconosce una serie di opzioni che qui non
vengono descritte (eventualmente basta utilizzare il comando ‘octave --help’ per ottenerne la
descrizione) e può eseguire il contenuto di un file se viene indicato come ultimo argomento della
riga di comando.
octave
[opzioni] [file_di_comandi ]
Il file di comandi è uno script contenente semplicemente comandi di Octave, dove in particolare
il simbolo ‘#’ serve a indicare l’inizio di un commento che si conclude alla fine della riga e le
righe vuote o bianche vengono semplicemente ignorate.
Eventualmente, uno script di Octave può essere reso eseguibile, purché all’inizio del file venga
aggiunta la solita indicazione dell’interprete da utilizzare:
#!/usr/bin/octave
Se Octave viene avviato in modo normale (senza argomenti particolari e senza l’indicazione di
uno script da eseguire), si ottiene il funzionamento interattivo normale:
$ octave[ Invio ]
Octave, version 2.0.13 (i386-redhat-linux-gnu).
Copyright (C) 1996, 1997, 1998 John W. Eaton.
This is free software with ABSOLUTELY NO WARRANTY.
For details, type ‘warranty’.
octave:1> _
L’invito di Octave (il prompt) è un po’ particolare: mano a mano che si introducono dei comandi si incrementa il numero che appare. Di seguito sono elencati alcuni comandi elementari di
Octave; in altre sezioni ne vengono mostrati degli altri.
Alcuni comandi
help
[-i] [argomento]
Il comando ‘help’ permette di ottenere alcune indicazioni sul funzionamento di Octave. In
particolare, se non si utilizza l’opzione ‘-i’ si ottiene una guida stringata, mentre con ‘-i’
1
Octave GNU GPL
3777
Octave
3778
viene attivata la consultazione del documento octave.info riferito al contesto definito dalla
parola chiave che indica l’argomento.
exit
| quit
Conclude il funzionamento di Octave.
pause
[(n_secondi )]
Il comando ‘pause’ serve a fare una pausa della durata indicata dall’argomento (che deve
essere racchiuso tra parentesi tonde). Se non viene indicato l’argomento, la pausa può essere
interrotta solo attraverso la pressione del tasto [ Invio ]. Questo comando è utile negli script
di Octave.
Esempi
octave:x> help help[ Invio ]
Mostra la guida per utilizzare il comando ‘help’.
octave:x> help -i help[ Invio ]
Mostra la descrizione del comando ‘help’ consultando il documento octave.info.
332.2 Variabili di Octave e calcoli elementari
Octave gestisce variabili scalari di tipo numerico e di tipo stringa (delimitate da apici singoli o
doppi), come avviene comunemente nei linguaggi evoluti più comuni; inoltre permette la definizione di strutture, in particolare i vettori e le matrici (nel senso matematico dei termini), in modo
trasparente. La dichiarazione di una variabile si ottiene semplicemente assegnandoci un valore.
Per esempio,
octave:1> a = 123[ Invio ]
crea, o sovrascrive la variabile ‘a’ assegnandole il valore 123. Assegnando un valore a una variabile si ottiene anche l’eco del risultato e ciò può essere utile se l’assegnamento avviene in
corrispondenza di un’espressione di qualche tipo.
octave:2> b = a / 2[ Invio ]
In questo caso, viene assegnato alla variabile ‘b’ il valore pari alla metà di ‘a’ e si ottiene
opportunamente l’informazione
b = 61.500
che così precisa quale valore è stato assegnato a ‘b’. Le espressioni possono essere calcolate
anche senza bisogno di assegnarne il risultato a qualche variabile; per esempio:
octave:3> a / b[ Invio ]
ans 2
In questo caso, ‘ans’ sta per answer (risposta).
Con la stessa logica per la quale un’espressione che non viene assegnata a una variabile genera
un risultato che viene visualizzato comunque, per conoscere il contenuto di una variabile basta
indicarla sulla riga di comando:
octave:4> a[ Invio ]
a = 123
Octave
3779
octave:5> b[ Invio ]
b = 61.500
332.3 Vettori e matrici
Al posto degli array dei linguaggi di programmazione normali, Octave tratta direttamente con
vettori e matrici (per la precisione: matrici a una e a due dimensioni). Una costante letterale che
rappresenta un vettore ha la forma seguente:
[ elemento_1 , elemento_2 ,
...
elemento_n ]
In particolare, le parentesi quadre fanno parte della dichiarazione e delimitano in pratica gli
elementi del vettore. Una costante letterale che rappresenta una matrice a due dimensioni ha una
forma simile a quella del vettore, con la differenza che gli elementi di una riga rispetto a quelli
di un’altra sono separati da un punto e virgola:
[ r1c1, r1c2,
...;
r2c1, r2c2,
...;
rnc1 , rnc2 ,
...
]
Si osservino gli esempi seguenti.
octave:1> a = [ 1, 2, 3 ][ Invio ]
a =
1
2
3
octave:2> b = [ 4, 5, 6 ][ Invio ]
b =
4
5
6
octave:3> c = [ 1, 2, 3; 4, 5, 6 ][ Invio ]
c =
1
4
2
5
3
6
Eventualmente si possono anche fare delle combinazioni:
octave:4> d = [ a, b ][ Invio ]
d =
1
2
3
4
5
6
octave:5> e = [ a; b ][ Invio ]
e =
1
4
2
5
3
6
Con i vettori e le matrici si possono fare anche dei calcoli nei modi in cui si è abituati in
matematica. In particolare, la notazione ‘x ’’ restituisce la matrice trasposta di x .
octave:6> c’[ Invio ]
ans =
1
4
Octave
3780
2
3
5
6
L’esempio seguente mostra il prodotto tra due matrici; precisamente il prodotto tra la matrice ‘c’
e la sua trasposta.
octave:7> c * c’[ Invio ]
ans =
14
32
32
77
È possibile anche moltiplicare una costante scalare per tutti gli elementi di una matrice:
octave:8> 2 * c[ Invio ]
ans =
2
8
4
10
6
12
Pur senza approfondire il funzionamento di Octave, è il caso di mostrare l’uso della funzione
interna ‘rand()’, il cui scopo è quello di restituire una matrice (a due dimensioni) contenente
valori casuali:
octave:9> f = rand( 2, 3)[ Invio ]
In questo caso, crea la matrice ‘f’ contenente due righe e tre colonne, con valori casuali compresi
tra zero e uno.
332.4 Disegno
Si è già accennato al fatto che Octave dipende da Gnuplot per le rappresentazioni grafiche. Ciò
avviene in modo trasparente, purché si utilizzi Octave da una finestra di terminale all’interno del
sistema grafico X.
L’approccio alla grafica di Octave è più complesso di Gnuplot, perché il suo scopo è differente. In
generale tutto viene visto in forma di vettori e matrici. Di solito, la prima cosa da fare è prendere
confidenza con la funzione ‘linspace()’ il cui scopo è quello di generare un vettore con una
serie di valori equidistanti (lineari):
linspace ( inizio , fine , quantità )
Il primo argomento della funzione definisce il valore del primo elemento del vettore; il secondo
definisce quello dell’ultimo; il terzo argomento definisce la quantità di elementi complessivi e la
funzione determina i valori rimanenti in modo lineare. Per esempio, il comando seguente serve a
creare un vettore di 11 elementi con valori progressivi da 0 a 10:
octave:1> x = linspace( 0, 10, 11)[ Invio ]
x =
0
1
2
3
4
5
6
7
8
9
10
Un’altra cosa da osservare è il fatto che le funzioni matematiche che possono funzionare utilizzando un argomento numerico, possono essere applicate anche a vettori e matrici. Si osservi
l’esempio seguente in cui si genera il vettore ‘y’ calcolando il seno di ogni valore del vettore ‘x’.
octave:2> y = sin(x)[ Invio ]
Octave
3781
y =
Columns 1 through 8:
0.00000
0.84147
0.90930
Columns 9 through 11:
0.98936
0.41212
0.14112
-0.75680
-0.95892
-0.27942
0.65699
-0.54402
Per disegnare il seno calcolato in questo modo, si utilizza la funzione interna ‘plot()’ che ha
bisogno di almeno due argomenti: il vettore dei valori per l’asse X e il vettore corrispondente
dei valori da rappresentare nell’asse Y. Si intuisce che il numero di elementi di questi due vettori
deve essere uguale.
plot ( vettore_x , vettore_y )
Tornando all’esempio, il comando si limita a questo:
octave:3> plot (x, y)[ Invio ]
Se il secondo argomento della funzione ‘plot()’ è una matrice, si ottiene la visualizzazione
di tante curve quante sono le colonne o le righe della matrice (la scelta viene fatta in base alla
corrispondenza con gli elementi del vettore utilizzato come primo argomento).
octave:4> y = [ sin(x); 2 * sin(x)][ Invio ]
Il comando appena mostrato genera la matrice ‘y’ con due righe corrispondenti a due vettori: il
seno dei valori del vettore ‘x’ e due volte il seno dei valori del vettore ‘x’.
octave:5> plot (x, y)[ Invio ]
Disegnando il grafico della matrice ‘y’ si ottengono due curve corrispondenti ai valori delle due
righe della stessa.
332.5 Script di Octave
Si è accennato alla possibilità di realizzare degli script con le istruzioni di Octave. In questo caso
non c’è nulla di speciale rispetto a quanto è stato visto fino a questo punto. A titolo di esempio
viene mostrato uno script con il quale si arriva a disegnare il grafico del seno di x nell’intervallo
di valori da -P-greco a +P-greco.
#!/usr/bin/octave
x = linspace( -pi, +pi, 200)
y = sin(x)
plot (x,y)
pause
Lo script può essere reso eseguibile e avviato autonomamente (purché l’eseguibile ‘octave’ si
trovi effettivamente nella directory ‘/usr/bin/’).
332.6 File di dati
Diversa è invece la possibilità di salvare le variabili. Per questo si utilizzano i comandi ‘save’ e
‘load’:
[opzioni]
load [opzioni]
save
file variabile ...
file variabile ...
Octave
3782
Attraverso le opzioni si specifica normalmente il formato in cui deve essere realizzato il file delle
variabili che vengono salvate; se non viene specificato dovrebbe trattarsi di quello più semplice:
un file di testo puro e semplice.
Le variabili da salvare o da ricaricare vanno annotate dopo il nome del file. Per facilitare la cosa
possono essere usati dei caratteri jolly, con significato equivalente a quello delle shell normali.
Alcune opzioni
-ascii
Salva o carica utilizzando il formato ASCII di Octave.
-binary
Salva o carica utilizzando il formato binario di Octave.
-mat-binary
Salva o carica utilizzando il formato binario di Matlab.
-force
Quando vengono caricate le variabili, forza la sovrascrittura di quelle esistenti.
Esempi
octave:x> save prova a b c[ Invio ]
Salva le variabili ‘a’, ‘b’ e ‘c’, nel file ‘prova’ (nella directory corrente) utilizzando il
formato predefinito.
octave:x> save -ascii prova a b c[ Invio ]
Come nell’esempio precedente, specificando esplicitamente che si vuole usare il formato
ASCII di Octave.
octave:x> save -ascii prova a*[ Invio ]
Salva tutte le variabili che iniziano per ‘a’ nel file ‘prova’ utilizzando il formato ASCII di
Octave.
octave:x> load -ascii -force prova[ Invio ]
Carica tutte le variabili dal file ‘prova’, che dovrebbe essere in formato ASCII di Octave,
sovrascrivendo le variabili eventualmente già esistenti.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
333
Applicazioni matematiche varie
In questo capitolo si raccolgono informazioni su altri programmi matematici e di disegno che
non hanno trovato una collocazione migliore in altri capitoli.
333.1 Geg -- GTK+ Equation Grapher
Geg 1 è un programma applicativo per il disegno di funzioni matematiche a due dimensioni, del
tipo f(x)=y, che utilizza per questo l’interfaccia grafica X. È molto semplice e non offre sostegni
particolari dal punto di vista matematico, ma è facile e intuitivo da usare. La figura 333.1 mostra
come si presenta la finestra di Geg, in cui appare la visualizzazione delle funzioni sin(x), sin(2x)
e sin(2x)+sin(x).
Figura 333.1. Geg.
Nella parte superiore della finestra di Geg è disponibile il menù a tendina, assieme ad alcuni
pulsanti grafici per la selezione rapida delle funzionalità di uso comune. Sotto, nella parte destra,
appare il riquadro ‘f(x)’, ovvero il piano cartesiano su cui vengono disegnate le funzioni. Alla
sinistra appare il riquadro ‘Range’, dove possono essere indicati in modo preciso i valori degli
intervalli di visualizzazione dell’asse X e dell’asse Y; in pratica, basta modificare questi valori e
premere [ Invio ] per modificare la scala e la zona visualizzata a destra. A sinistra in basso appare il
riquadro ‘Log’ che elenca le operazioni compiute: nella parte superiore appare l’ultimo comando
eseguito e in quella inferiore il comando più vecchio. Più in basso, sempre a sinistra, appare il
riquadro ‘Status’ che mostra le coordinate cartesiane in cui si trova il puntatore del mouse,
ammesso che questo sia posizionato sull’area del grafico. Infine, nella parte bassa della finestra
appare la riga di comando all’interno della quale si possono inserire le funzioni da visualizzare.
1
Geg GNU GPL
3783
Applicazioni matematiche varie
3784
333.1.1 Avvio e interazione normale
Geg viene avviato attraverso l’eseguibile ‘geg’ per il quale non sono previste opzioni speciali, a
parte quelle comuni per l’uso di programmi nel sistema grafico X (‘-geometry’, ‘-display’,
ecc.).
geg
[opzioni]
Per disegnare una funzione occorre selezionare il riquadro inferiore, con un clic del mouse, in
modo da fare apparire il cursore per la scrittura; quindi si scrive la funzione (utilizzando solo la
variabile x ) e la si disegna premendo [ Invio ] oppure selezionando il pulsante grafico GO! .
Le operazioni necessarie a ottenere il risultato mostrato nella figura 333.1 sono in pratica quelle
seguenti:
f(x) = sin(x)[ Invio ]
f(x) = sin(2x)[ Invio ]
f(x) = sin(2x)+sin(x)[ Invio ]
ottenendo nel riquadro del riepilogo dei comandi impartiti la sequenza seguente:
sin(2x)+sin(x)
sin(2x)
sin(x)
Per modificare la scala e la zona di grafico visualizzata si può intervenire con i pulsanti I N e
O U T ; oppure attraverso il mouse, utilizzando il primo tasto per delimitare (trascinando) la zona
di grafico su cui si vuole porre l’attenzione; oppure in modo ancora più preciso attraverso il
riquadro ‘Range’. Nella figura 333.2 viene mostrato l’esempio già visto con la scala dell’asse Y
espansa.
Figura 333.2. Modifica della scala di visualizzazione.
In particolare, i valori sull’asse X possono essere mostrati anche in radianti, ovvero in unità Pgreco. Per questo basta selezionare il pulsante grafico R A D I A N , mentre per tornare alla scala
decimale basta selezionare il pulsante D E C I M A L .
Con il terzo tasto del mouse (quello destro) è possibile indicare una zona del grafico all’interno
della quale si vuole conoscere l’intersezione della curva con uno degli assi. Per esempio, indi-
Applicazioni matematiche varie
3785
cando una zona vicina al punto -2 nell’asse X, si ottiene il risultato seguente nel riquadro del
riepilogo che mostra due intersezioni riferite ad altrettante funzioni:
Axis Intercepts:sin(2x)+sin(x), X=-2,0944
sin(2x), X=-1,5708
Con il secondo tasto del mouse (quello centrale) è possibile indicare una zona del grafico all’interno della quale si vuole conoscere l’intersezione tra le curve. Per esempio, indicando una zona
vicina al punto +1 nell’asse X e prima del punto +2 nell’asse Y, si ottiene il risultato seguente
nel riquadro del riepilogo, che mostra due intersezioni distinte:
Function Intercepts:sin(x) and sin(2x)+sin(x) at:
X=1,5708, Y=1,0000
sin(x) and sin(2x) at:
X=1,0472, Y=0,8660
In pratica, le funzioni sin(x) e sin(2x)+sin(x) si incontrano nel punto X=1,5708, Y=1,0000,
inoltre le funzioni sin(x) e sin(2x) si incontrano nel punto X=1,0472, Y=0,8660.
333.1.2 Sintassi delle funzioni
Le funzioni che possono essere disegnate da Geg devono rispettare una certa sintassi riepilogata
nella guida interna di questo applicativo. In generale si possono usare tutti i tipi di parentesi che
si impiegano normalmente in matematica (da quelle tonde a quelle graffe); si possono usare le
notazioni del tipo 3x , 4x ,... dove si sottintende la moltiplicazione della costante numerica per
la variabile; la lettera ‘x’ è l’unica variabile di cui si può fare uso; sono riconosciute le costanti
‘e’ (intesa come la base del logaritmo naturale) e ‘PI’ (intesa come P-greco). La tabella 333.1
riepiloga gli operatori e le funzioni utilizzabili.
Tabella 333.1. Operatori e funzioni di Geg.
Operatori e operandi
op1 + op2
op1 - op2
op1 * op2
costanteop
op1 / op2
op1 ^ op2
sqrt(op)
cbrt(op)
abs(op)
u(op)
log(op)
ln(op)
sin(op)
cos(op)
tan(op)
asin(op)
acos(op)
atan(op)
sinc(op)
sinh(op)
cosh(op)
tanh(op)
Descrizione
Somma i due operandi.
Sottrae dal primo il secondo operando.
Moltiplica i due operandi.
Moltiplica l’operando per il valore della costante.
Divide il primo operando per il secondo.
Elevamento a potenza del primo operando per il secondo.
Radice quadrata.
Radice cubica.
Valore assoluto.
Restituisce uno se l’operando è positivo, zero se negativo.
Logaritmo in base 10.
Logaritmo naturale.
Seno.
Coseno.
Tangente.
Arco-seno.
Arco-coseno.
Arco-tangente.
Seno iperbolico.
Coseno iperbolico.
Tangente iperbolica.
Applicazioni matematiche varie
3786
333.2 QCad
QCad 2 è un programma applicativo per il CAD professionale in grado di generare e di leggere il
formato DFX.
L’utilizzo di un programma del genere richiede delle conoscenze particolari. Lo scopo della
sezione è soltanto quello di mostrare la disponibilità di questo applicativo.
Figura 333.3. QCad dopo aver caricato uno degli esempi che lo accompagna.
Nella figura 333.3 si vede in particolare, nella parte sinistra della finestra di QCad, un menù a
pulsanti grafici. Quello che appare nella figura è il menù principale, dal quale si può selezionare
un menù particolare attraverso un clic con il tasto sinistro del mouse. Per ritornare indietro a un
livello di menù precedente, si preme invece il tasto destro del mouse sopra un pulsante grafico
qualunque.
Non è il caso di aggiungere altro su questo applicativo, che comunque dispone di una sua
documentazione.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
2
QCad GNU GPL
Indice analitico del volume
CAD, 3786
Geg, 3783
Gnuplot, 3768
Octave, 3777
QCad, 3786
SC, 3750
Spreadsheet Calculator, 3750
3787
3788
Appunti di informatica libera 2003.01.01
Volume VIII
Argomenti avanzati e accessori
3789
Appunti Linux
Copyright © 1997-2000 Daniele Giacomini
Appunti di informatica libera
Copyright © 2000-2003 Daniele Giacomini
Via Morganella Est, 21 -- I-31050 Ponzano Veneto (TV) -- daniele @ swlibero.org
Le informazioni contenute in questa opera possono essere diffuse e riutilizzate in base alle condizioni poste dalla licenza GNU General Public License, come pubblicato dalla Free Software
Foundation.
In caso di modifica dell’opera e/o di riutilizzo parziale della stessa, secondo i termini della licenza, le annotazioni riferite a queste modifiche e i riferimenti all’origine di questa opera, devono
risultare evidenti e apportate secondo modalità appropriate alle caratteristiche dell’opera stessa. In nessun caso è consentita la modifica di quanto, in modo evidente, esprime il pensiero,
l’opinione o i sentimenti del suo autore.
L’opera è priva di garanzie di qualunque tipo, come spiegato nella stessa licenza GNU General
Public License.
Queste condizioni e questo copyright si applicano all’opera nel suo complesso, salvo ove indicato
espressamente in modo diverso.
The informations contained inside this work can be spread and reused under the terms of the
GNU General Public License as published by the Free Software Foundation.
If you modify this work and/or reuse it partially, under the terms of the license, the notices about
these changes and the references about the original work, must be evidenced conforming to the
work characteristics. IN NO EVENT IS ALLOWED TO MODIFY WHAT ARE CLEARLY
THE THOUGHTS, THE OPINIONS AND/OR THE FEELINGS OF THE AUTHOR.
This work 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.
These conditions and this copyright apply to the whole work, except where clearly stated in a
different way.
Una copia della licenza GNU General Public License, versione 2, si trova nell’appendice A.
A copy of GNU General Public License, version 2, is available in appendix A.
3790
The main distribution for Appunti di informatica libera is described below. For every distribution
channel the maintainer’s name and address is also reported.
Internet
• direct reading: <http://a2.swlibero.org/>
download: <ftp://a2.swlibero.org/a2/> and <http://a2.swlibero.org/ftp/>
Michele Dalla Silvestra, mds @ swlibero.org
• direct reading: <http://appuntilinux.torino.linux.it/>
download: <ftp://ftp.torino.linux.it/appunti-linux/>
Carlo Perassi, carlo @ linux.it
• direct reading: <http://sansone.crema.unimi.it/linux/a2/HTML/>
download: <http://sansone.crema.unimi.it/linux/a2/>
Fabrizio Zeno Cornelli, zeno @ filibusta.crema.unimi.it
• direct reading: <http://www.pctime.it/servizi/appunti-linux/>
download: <http://www.pctime.it/servizi/appunti-linux/a2-prelievo/>
Franco Lazzero, PCTIME, pctime @ pctime.net
• direct reading: <http://www.a2.prosa.it/>
download: <ftp://ftp.a2.prosa.it/>
Davide Barbieri, paci @ prosa.it
• direct reading: <http://linux.pueste.it/>
download: <http://linux.pueste.it/filearea/AppuntiLinux/>
David Pisa, david @ iglu.cc.uniud.it
• direct reading: <http://www.informasiti.com/Appunti/HTML/>
download: <http://www.informasiti.com/Appunti/>
Claudio Neri, Sincro Consulting, neri.c @ sincroconsulting.com
GNU distributions
• GNU/Linux Debian <http://packages.debian.org/appunti-informatica-libera>
Massimo Dal Zotto, dz @ cs.unitn.it
Italian magazine’s CD-ROM
• inter-punto-net <http://www.interpuntonet.it>
Michele Dalla Silvestra, mds @ swlibero.org
• Internet News <http://inews.tecnet.it>
Francesco Facconi, francescofacconi @ libero.it
Fabio Ferrazzo, fabio.fr @ tiscalinet.it
• Linux Magazine <http://www.edmaster.it/prodotti/linux/ult-riv.html>
Emmanuele Somma, esomma @ ieee.org
La diffusione di questa opera è incoraggiata in base ai termini della licenza.
The spread of this work is encouraged under the terms of the license.
3791
Parte lxix Multimedialità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3795
334 Introduzione alla gestione dell’audio e uso del lettore CD . . . . . . . . . . . . . . . . . . . . . . . 3797
335 Lettore CD audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3801
336 Gestione della scheda audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3813
337 Audio compresso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823
338 Audio attraverso la rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3837
339 Filmato digitale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3844
340 Masterizzazione di CD audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3846
341 X-CD-Roast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3858
Parte lxx Transizione verso il software libero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3867
342 File con formati speciali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3868
343 DOSEMU: l’emulatore di hardware DOS compatibile . . . . . . . . . . . . . . . . . . . . . . . . . . 3876
344 Servente X su altre piattaforme grafiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3884
345 Applicazioni proprietarie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3887
Parte lxxi Prevenzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3903
346 Copie di sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3904
347 Emergenza con GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3915
348 nanoLinux II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3923
349 Dischetti di emergenza delle distribuzioni GNU/Linux e di altre fonti . . . . . . . . . . . . 3938
Parte lxxii Laboratorio didattico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3943
350 Accorgimenti per usare GNU/Linux nella didattica di massa . . . . . . . . . . . . . . . . . . . . . 3944
351 Diskless: elaboratori senza disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3951
Parte lxxiii Informatica gestionale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3963
352 Codici a barre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3964
353 Barcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3979
354 Trasformazione in lettere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3982
Parte lxxiv Annotazioni sulla distribuzione Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3989
355 Configurazione di una distribuzione Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3990
356 Accorgimenti per una distribuzione Debian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4001
Parte lxxv Annotazioni sulla distribuzione Red Hat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4013
357 Configurazione di una distribuzione Red Hat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4014
358 Accorgimenti per una distribuzione Red Hat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4029
Parte lxxvi i86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4043
3792
359 Minix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4044
360 ELKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4064
Parte lxxvii Dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4067
361 Dos: introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4070
362 Dos: dischi, file system, directory e file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4084
363 Dos: configurazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4092
364 Dos: script dell’interprete dei comandi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4099
365 Dos: gestione della memoria centrale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4105
366 FreeDOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4107
367 Progetto GNUish . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4110
368 The valuable DOS Freeware page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4112
369 Clean the Clipper 5.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4118
370 nanoBase 1997 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4143
371 nanoBase 1997 user manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4149
Parte lxxviii Sistemi operativi speciali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4279
372 LeeOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4280
Parte lxxix Braille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4283
373 Introduzione al sistema braille . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4284
374 Sistemi di interazione per non vedenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4289
Parte lxxx Aspetti umani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4293
375 Manifesto GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4294
376 Il progetto GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4302
377 Proprietà del software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4317
378 L’ipotesi del futuro, nel bene e nel male . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4321
Indice analitico del volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4323
3793
3794
Parte lxix
Multimedialità
334 Introduzione alla gestione dell’audio e uso del lettore CD . . . . . . . . . . . . . . . . . . . . . . . 3797
334.1 Kernel per le funzionalità audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3797
334.2 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3800
335 Lettore CD audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3801
335.1 Ascolto di un CD audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3801
335.2 CDDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3806
335.3 Tracce CDDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3807
336 Gestione della scheda audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3813
336.1 Aumix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3813
336.2 Esecuzione e registrazione di brani campionati . . . . . . . . . . . . . . . . . . . . . . . . . . . 3816
336.3 Wavtools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3818
336.4 Xwave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3818
336.5 Sox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3819
337 Audio compresso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823
337.1 Informazioni contenute in un file MP3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3823
337.2 LAME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3827
337.3 MP3blaster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3830
337.4 Xmms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3832
337.5 FreeAmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3834
337.6 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3835
338 Audio attraverso la rete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3837
338.1 NetStreamer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3837
338.2 Icecast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3841
339 Filmato digitale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3844
339.1 GTV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3844
339.2 PlayMPEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3844
339.3 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3845
340 Masterizzazione di CD audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3846
340.1 Cdrdao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3847
340.2 Cdrecord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3854
340.3 Wav2cdr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3855
340.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3857
3795
341 X-CD-Roast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3858
341.1 Configurazione e permessi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3858
341.2 Masterizzazione dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3861
341.3 Copia di un CD contenente dati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3862
341.4 CD contenente tracce audio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863
341.5 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3865
3796
Capitolo
334
Introduzione alla gestione dell’audio e uso del
lettore CD
Negli ultimi tempi, l’elaboratore viene visto sempre più spesso come una macchina multimediale
tuttofare. In questo documento non c’è ancora una parte dedicata soddisfacentemente ai vari
aspetti della «multimedialità» con GNU/Linux. Per il momento, qui si raccolgono soprattutto
alcune notizie utili per la gestione delle funzionalità audio con il sistema GNU/Linux.
In generale, per gestire l’«audio» in qualche modo non è strettamente necessario disporre di
componenti speciali. Per esempio, il lettore CD-ROM può essere gestito in modo indipendente per ascoltare i CD musicali, eventualmente anche per estrarre le tracce audio (anche se poi
mancherebbe la possibilità di ascoltare quanto estratto senza una scheda audio).1
334.1 Kernel per le funzionalità audio
Per includere le funzionalità audio, attraverso dell’hardware apposito, è molto probabile che il
kernel debba essere ricompilato. Tuttavia, il vero problema sta nel fatto che esiste una grande
quantità di schede audio, per cui si deve scegliere attentamente l’hardware e per ogni situazione
si possono presentare degli imprevisti.2
La maggior parte del codice scritto per la gestione delle schede audio è fatto per componenti
un po’ vecchi, realizzati per il bus ISA, senza prevedere le funzionalità Plug & Play. Questo
comporta il problema di dover provvedere alla configurazione di tali schede attraverso altri
sistemi operativi, oppure per mezzo dei programmi del pacchetto Isapnptools, a cui si accenna
nel capitolo 38.
La parte principale del kernel ha un limite nella sua dimensione massima. Dal momento che di
solito la gestione dell’audio non dovrebbe essere una funzionalità vitale, è consigliabile utilizzare
i moduli per queste cose.
Per prima cosa si deve abilitare la gestione dell’audio, in modo da permettere l’accesso alle altre
voci di configurazione del kernel relative a questa gestione (29.2.16).
Nella maggior parte dei casi, la gestione della propria scheda audio rientra nel gruppo OSS
(Open sound system), di conseguenza dovrebbe essere necessario attivare la voce relativa.
Successivamente si dovrà selezionare precisamente il tipo di scheda.
Se si intende realizzare un kernel modulare, come viene suggerito qui, occorre poi fare in modo
che i moduli relativi vengano caricati opportunamente, soprattutto specificando i parametri necessari a raggiungere correttamente la scheda. A titolo di esempio, supponendo di disporre di una
vecchia scheda SoundBlaster a 8 bit, predisposta per utilizzare l’indirizzo di I/O 22016, il livello
di IRQ 5 e il canale DMA 1, si può caricare il modulo relativo con il comando seguente:
1
È bene non farsi illusioni sulle possibilità di un sistema GNU/Linux nei confronti della gestione dell’audio. Il comportamento può cambiare notevolmente da una scheda audio all’altra e non è detto che le cose migliorino quando la
qualità dell’hardware è eccezionale. In generale è possibile ottenere i risultati più buoni con una scheda a 16 bit di quelle
gestite dai driver «OSS» (esiste una classificazione apposita nei sorgenti del kernel con questa sigla).
2
Purtroppo, il fatto che una scheda audio sia «compatibile» con una qualche altra scheda più conosciuta, non è
sufficiente per determinare che queste siano effettivamente equivalenti. In generale, a meno che si stia utilizzando una
scheda audio «originale» che risulta individuata perfettamente nell’elenco proposto dal programma di configurazione
del kernel, è indispensabile localizzare l’integrato principale e annotare il nome o la sigla che vi appare. Con questa
informazione si dovranno leggere i file di documentazione che accompagnano i sorgenti del kernel alla ricerca di notizie
precise al riguardo.
3797
Introduzione alla gestione dell’audio e uso del lettore CD
3798
# modprobe sb irq=5 io=0x220 dma=1
In questo modo vengono caricati automaticamente anche i moduli da cui dipende ‘sb.o’. Lo si
può verificare con ‘lsmod’:
# lsmod
Per verificare che la scheda sia stata riconosciuta correttamente, si può «interpellare» il file di
dispositivo ‘/dev/sndstat’, ovvero il file virtuale ‘/proc/sound’:
# cat /dev/sndstat
# cat /proc/sound
OSS/Free:3.8s2++-971130
Load type: Driver loaded as a module
Kernel: Linux dinkel.brot.dg 2.2.5 #4 SMP lun mag 10 15:02:40 CEST 1999 i586
...
In seguito, si potrà sistemare meglio la cosa inserendo nel file ‘/etc/conf.modules’ le righe
seguenti:
alias sound sb
options sb irq=5 io=0x220 dma=1
La documentazione più aggiornata riferita alle schede audio è contenuta nel pacchetto dei sorgenti del kernel. Precisamente si tratta dei file contenuti nella directory ‘/usr/src/linux/
Documentation/sound/’. È importante leggere i file riferiti alla propria scheda audio e in
generale i file ‘Introduction’ e ‘README.*’.
334.1.1 File di dispositivo
I file di dispositivo relativi alle funzionalità audio sono descritti nel file <file:///usr/src/linux/Doassieme a tutti gli altri. Il documento in questione è precisamente Linux
allocated devices, curato da Peter H. Anvin. Quello che segue è l’estratto significativo di questo
file.
cumentation/devices.txt>,
[...]
13 char
[...]
14 char
PC speaker
0 = /dev/pcmixer
1 = /dev/pcsp
4 = /dev/pcaudio
5 = /dev/pcsp16
Emulates
Emulates
Emulates
Emulates
Sound
0 =
1 =
2 =
3 =
4 =
6 =
8 =
16 =
17 =
18 =
19 =
20 =
33 =
34 =
Mixer control
Audio sequencer
First MIDI port
Digital audio
Sun-compatible digital audio
Sound card status information
Sequencer -- alternate device
Second soundcard mixer control
Sequencer patch manager
Second MIDI port
Second soundcard digital audio
Second soundcard Sun digital audio
Sequencer patch manager
Third MIDI port
card
/dev/mixer
/dev/sequencer
/dev/midi00
/dev/dsp
/dev/audio
/dev/sndstat
/dev/sequencer2
/dev/mixer1
/dev/patmgr0
/dev/midi01
/dev/dsp1
/dev/audio1
/dev/patmgr1
/dev/midi02
/dev/mixer
/dev/dsp (8-bit)
/dev/audio
/dev/dsp (16-bit)
Introduzione alla gestione dell’audio e uso del lettore CD
50 = /dev/midi03
3799
Fourth MIDI port
[...]
A titolo di esempio, dovendo creare il dispositivo ‘/dev/audio’, si potrebbe usare il comando
seguente:
# mknod /dev/audio c 14 4
Sono importanti anche i permessi di questi file. In generale dovrebbero appartenere all’utente
‘root’ e al gruppo ‘audio’, oppure ‘sys’ in sua mancanza. Inoltre, per cominciare potrebbero
avere i permessi di lettura e scrittura per tutti gli utenti: 06668.3
Volendo utilizzare il lettore CD-ROM per ascoltare dei CD audio normali, occorre regolare anche
i permessi del dispositivo corrispondente al lettore stesso. In pratica, occorre prendersi cura del
dispositivo a cui punta il collegamento simbolico ‘/dev/cdrom’. Questo dispositivo, dal momento che è riferito a un’unità in sola lettura, potrebbe essere accessibile in lettura e scrittura a
qualunque utente (a meno che si voglia controllare per qualche motivo). Per questo, di solito si
attribuiscono i permessi 06668.
# chmod 0666 /dev/cdrom
Quando l’elaboratore che dispone di scheda audio è collegato a una rete, potrebbero porsi
dei problemi di sicurezza riguardo ai permessi per gli utenti comuni sui file di dispositivo di
questa. Infatti, un utente che può accedere all’elaboratore, avrebbe la possibilità di attivare
la scheda audio e ascoltare attraverso il microfono, ammesso che questo sia collegato. Nello
stesso modo potrebbe attivare il canale della linea in ingresso e così anche tutte le altre fonti
disponibili. Pertanto, generalmente, questi file di dispositivo sono sprovvisti del permesso di
lettura per gli utenti diversi dal proprietario e dal gruppo di questi file.
334.1.2 # sndconfig
La distribuzione Red Hat ha preparato un programma che facilita la configurazione dei moduli
per la gestione delle funzionalità audio, provvedendo eventualmente anche a sistemare la configurazione Plug & Play delle schede ISA. Il programma è molto utile, soprattutto perché è in grado
di predisporre il file ‘/etc/conf.modules’ correttamente, inoltre, ammesso che la scansione
Plug & Play si concluda senza incidenti, si ottiene il file di configurazione ‘/etc/isapnp.conf’
corretto (e completo) per la propria scheda audio ISA Plug & Play.4
sndconfig
[--noprobe] [--noautoconfig]
Se ‘sndconfig’ viene utilizzato senza opzioni, si prepara immediatamente a eseguire una scansione dell’hardware Plug & Play. Eventualmente, questo può portare anche al blocco del sistema
operativo; pertanto conviene utilizzare questa verifica solo quando l’elaboratore non sta svolgendo alcuna attività importante (meglio ancora se il livello di esecuzione è quello singolo). È molto
importante che non venga avviata questa scansione se non c’è alcuna scheda ISA di tipo Plug &
Play.
L’opzione ‘--noprobe’ serve per evitare che venga eseguita una scansione Plug & Play. Così si
potrà selezionare in modo guidato il tipo di scheda audio e gli indirizzi necessari a gestirla.
L’opzione ‘--noautoconfig’ serve per evitare che venga configurata automaticamente una
scheda audio Plug & Play. In questo modo si lascia all’utilizzatore la scelta dei parametri di
configurazione relativi.
3
4
In seguito è il caso di ridurre i permessi, in modo di abilitare l’accesso alle funzionalità audio solo ad alcuni utenti.
‘sndconfig’ dovrebbe funzionare anche nelle distribuzioni diverse dalla Red Hat.
3800
Introduzione alla gestione dell’audio e uso del lettore CD
La figura 334.1 mostra la maschera di ‘sndconfig’ con la quale si indicano le caratteristiche
di una vecchia scheda audio SoundBlaster (configurata attraverso ponticelli), in modo che venga
generato il file ‘/etc/conf.modules’ più adatto (in questo caso, il file ‘/etc/isapnp.conf’
non serve perché non si tratta di una scheda Plug & Play).
Figura 334.1. Configurazione manuale di una vecchia scheda di cui si conosce la
configurazione hardware.
.---------------| Card Settings |----------------.
|
|
| Please adjust the settings below to match the |
| dip switch settings on your sound card.
|
|
|
| I/O PORT
IRQ
DMA
|
|
|
|
>0x220<
3
>1<
|
|
0x240
>5<
|
|
7
|
|
9
|
|
|
|
.----.
.--------.
|
|
| Ok |
| Cancel |
|
|
‘----’
‘--------’
|
|
|
|
|
‘------------------------------------------------’
Per comprendere meglio il funzionamento di questo programma, ma soprattutto per capire come
ci si deve comportare con la configurazione del file ‘/etc/isapnp.conf’, è opportuno dare
un’occhiata al capitolo 38, in particolare per quello che riguarda il pacchetto Isapnptools.
334.2 Riferimenti
• Jeff Tranter, The Linux Sound HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
• Documentazione del kernel
<file:///usr/src/linux/Documentation/sound/>
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
335
Lettore CD audio
Indipendentemente dal fatto che sia disponibile una scheda audio, è possibile ascoltare dei CD
musicali attraverso il lettore CD-ROM, che dovrebbe essere provvisto di un’uscita autonoma (una
presa stereo per cuffia sulla parte frontale dell’unità). Naturalmente, se è disponibile la scheda
audio, il lettore CD-ROM potrebbe esservi stato collegato attraverso un cavetto schermato, in
modo da poter utilizzare le funzionalità della stessa scheda per rielaborare il suono.
335.1 Ascolto di un CD audio
Il software che si occupa di mettere in funzione il lettore CD-ROM come lettore di CD audio,
interviene solo sul dispositivo ‘/dev/cdrom’ (o meglio, sul dispositivo a cui punta questo collegamento simbolico, che come già spiegato deve avere i permessi opportuni). Il segnale audio
può essere prelevato direttamente dal lettore CD, oppure può essere gestito attraverso la scheda
audio per mezzo di altro software.
Se la scheda audio non è di ottima qualità, questa potrebbe generare un rumore di fondo. Di
conseguenza, per essere certi di prelevare il segnale più pulito possibile, è necessario utilizzare
l’uscita del lettore CD stesso.
Il software che permette l’ascolto di un CD audio, non richiede di tenere sotto controllo il lettore,
per cui potrebbe essere costituito anche da un semplice programma a riga di comando, come nel
caso di ‘dcd’.
I programmi per l’ascolto di CD audio potrebbero comportarsi in maniera differente tra di
loro, tanto che non va esclusa la presenza di errori che impediscono la lettura di CD che in
condizioni normali risultano realizzati correttamente. In altri termini, se per qualche ragione
non si riesce a leggere un CD audio attraverso l’uso di un certo programma, conviene tentare
di utilizzarne altri, prima di arrivare alla conclusione che il CD o il lettore possano essere
difettosi.
Molti programmi per l’ascolto di CD musicali, abbinano anche la funzionalità di interrogazione
della base di dati CDDB. Ciò viene descritto nella sezione 335.2.
335.1.1 Dcd
Dcd 1 è un programma di servizio molto semplice, composto dall’eseguibile ‘dcd’, che segue la
filosofia dei comandi a riga di comando, con tutti i vantaggi che questo può dare. In pratica, senza
impegnare una console virtuale o un terminale, manda al lettore i comandi richiesti di volta in
volta.
[n_traccia ...]
dcd {stop|restart|next|prev|info|dir|loop [n ...]}
dcd
La sintassi è molto semplice: se si indica un numero n si intende avviare l’esecuzione della
traccia n -esima corrispondente; se si indicano più numeri si intende ottenere l’esecuzione di
quelle tracce nella sequenza indicata; se si indica un’altra parola chiave, si vuole impartire il
comando corrispondente:
1
Dcd GNU GPL
3801
Lettore CD audio
3802
• ‘stop’ ferma l’esecuzione (se non funziona basta selezionare la prima traccia e quindi usare
il comando ‘prev’);
• ‘restart’ riavvia la traccia che si sta ascoltando;
• ‘next’ passa alla prossima traccia;
• ‘prev’ passa alla traccia precedente;
• ‘info’ restituisce alcune informazioni sulla traccia attuale;
• ‘dir’ elenca le tracce contenute nel CD;
• ‘loop [n ...]’ esegue la sequenza ripetendo quando raggiunge la fine della sequenza (in tal
caso ‘dcd’ impegna la shell).
Alcuni esempi
$ dcd
Avvia l’esecuzione del primo brano del CD, proseguendo fino all’ultimo.
$ dcd 1
Esattamente come nell’esempio precedente.
$ dcd 1 3 5 7
Richiede l’esecuzione dei brani numero uno, tre, cinque e sette, in sequenza.
$ dcd next
Passa all’esecuzione del brano successivo.
335.1.2 TCD
TCD 2 è un pacchetto composto da due programmi: uno per lo schermo a caratteri e uno per il sistema grafico X. L’utilizzo è intuitivo e non occorrono molte spiegazioni. È importante osservare
che il controllo del volume riguarda il lettore CD e non la scheda audio. In altri termini, si tratta
del volume del segnale che viene generato dal lettore CD: sia quello che si ottiene attraverso
l’uscita sul pannello frontale dell’unità, sia quello che viene inviato alla scheda audio (ammesso
che esista) per mezzo del cavetto schermato interno all’elaboratore.
La figura 335.1 mostra il funzionamento di TCD nella versione per terminali a caratteri, mentre
la figura 335.2 mostra la versione per il sistema grafico X3
2
TCD GNU GPL
TCD si dovrebbe trovare incluso anche nella raccolta degli applicativi di Gnome; in tal caso, l’aspetto della versione
grafica è un po’ diverso rispetto a quanto si vede nelle figure riportate qui.
3
Lettore CD audio
3803
Figura 335.1. Esempio del funzionamento di TCD nella versione per terminali a
caratteri.
.-TCD v2.0, by Tim Gerla------Control Panel------------------------------------.
|
|
|
| Status: Paused
| [P] - Start playing.
[-] - Previous track. |
| Track: 10 of 12
| [U] - Pause or restart.
[+] - Ne|t track.
|
| Time:
03:36
| [E] - Eject CDROM.
[G] - Go to track #.
|
| CD:
55:17
| [S] - Stop playing.
[]] - Skip ahead.
|
|
|
[[] - Skip back.
|
|-Track List----------------| [M] - Change play mode.
< > - Adjust volume.
|
|
| Current Mode: Normal
Current Volume: 10%
|
| 01a - 06:10
|
|
| 02a - 06:21
|
|
| 03a - 03:22
|
|
| 04a - 04:06
|
|
| 05a - 05:51
|
|
| 06a - 08:05
| [T] - Edit track database.
|
| 07a - 04:38
| [D] - Download CDDB data.
|
| 08a - 05:10
|
|
| 09a - 07:55
|
|
| 10a - 08:29
| [Q] - Quit.
|
| 11a - 04:54
|
|
| 12a - 06:37
|-Disc Information---------------------------------|
|
| Length: 71:40
|
|
| Title: Unknown / Unknown
|
|
| Track: Track 10
|
‘------------------------------------------------------------------------------’
Figura 335.2. Esempio del funzionamento di TCD nella versione grafica.
Gli eseguibili sono rispettivamente ‘tcd’ e ‘gtcd’. La lettera «g» di ‘gtcd’ sta per GTK+, ovvero
le librerie grafiche utilizzate.
Una cosa interessante di TCD sta nel fatto che più copie dei suoi eseguibili possono funzionare
in modo concorrenziale, risultando tutte perfettamente sincronizzate, a parte qualche difficoltà
nella regolazione del volume.
335.1.3 Cdcd
Cdcd 4 è un altro programma per l’ascolto di CD musicali che consente un funzionamento a riga
di comando, oppure in modo interattivo, ma sempre attraverso una console. La prima volta che
viene avviato da ogni utente, richiede alcune informazioni elementari di configurazione, con cui
crea il file ‘~/.cdcdrc’:
$ cdcd[ Invio ]
4
Cdcd GNU GPL
3804
Lettore CD audio
La prima cosa che viene richiesta è il file di dispositivo abbinato al lettore CD:
Welcome to cdcd 0.5.0.
You will now be asked a series of questions which will configure
cdcd for your platform. The default answers are given
in brackets.
What is the name of your CD-ROM device? [/dev/cdrom]
Se esiste il collegamento simbolico ‘/dev/cdrom’ che punta al dispositivo corretto, come già è
stato suggerito, basta confermare con la pressione del tasto [ Invio ].
[ Invio ]
Successivamente, Cdcd cerca di ottenere le informazioni necessarie ad accedere alla rete, allo
scopo di contattare una base di dati CDDB, oppure qualcosa di equivalente.
Are you connected to a network (y/n)? [y]
[ Invio ]
There are two methods of retrieving CD track information, CDDB and CD Index.
Using the CD Index will be somewhat faster, but does not yet facilitate inexact
matching. Both methods may be used through HTTP proxy servers.
Choose a method:
1) CDDB
2) CD Index
Which method? [1]
Avendo confermato la disponibilità di un accesso alla rete, viene proposto di accedere a una base
di dati CDDB, oppure a un altro tipo di indice. La scelta più comune è proprio la base di dati
CDDB, come suggerito dal programma stesso.
[ Invio ]
Use a HTTP proxy server? [n]
In questo caso si suppone che non sia necessario utilizzare un proxy, per cui si conferma la
proposta del programma.
[ Invio ]
cdcd version 0.5.0, Copyright (C)1998-99 Tony Arcieri
Distributed under the GNU General Public License. See file COPYING for details.
Built with libcdaudio 0.99.1
Enter ? for help.
cdcd>
Termina così la configurazione e il programma si mette a funzionare in una modalità interattiva,
in attesa di comandi, dove l’invito è la stringa ‘cdcd>’. Per terminare basta dare il comando
‘quit’.
cdcd> quit[ Invio ]
È già stato specificato che Cdcd può funzionare sia in modo non interattivo, a riga di comando,
sia in modo interattivo. In pratica, l’eseguibile ‘cdcd’ può essere avviato indicando un comando
come argomento, per cui eseguirà la richiesta e terminerà di funzionare, oppure può essere avviato senza argomenti e in tal caso mostrerà un invito rimanendo in attesa di comandi. Naturalmente,
i comandi in questione sono gli stessi, sia quando usati come argomento della riga di comando,
sia quando usati nel funzionamento interattivo.
Lettore CD audio
cdcd
3805
[comando]
Si ottiene l’elenco dei comandi disponibili con il comando ‘help’, mentre per conoscere la
sintassi precisa di ogni comando basta il comando ‘help nome_comando ’. Per esempio:
$ cdcd help[ Invio ]
cdcd commands:
play
stop
next
prev
info
tracks
open
getvol
edit
close
setvol
ext
pause
resume ff
rew
status rndplay slot
list
refresh device verbose quit
sites
submit
access
For more specific help, type ’help <command>’
$ cdcd help play[ Invio ]
Usage: play [starttrackname/track #] [endtrackname/track #] [min:sec]
By default, play starts at the beginning of the CD. You may specify tracks
using either the number of the track or a section of the track’s name. The
disc will play from where it starts to the end of the disc or a track you
specify. You may also specify a position within the first track to start.
La tabella 335.1 descrive brevemente i comandi principali di Cdcd.
Tabella 335.1. Comandi principali di Alcune opzioni della riga di comando di Cdcd.
Comando
play
open, eject
pause
resume
ff, rew
next, prev
status
info, tracks, ext
quit
Descrizione
Avvia l’esecuzione, dall’inizio o da una certa traccia.
Termina l’esecuzione ed espelle il CD dal lettore.
Mette in pausa l’esecuzione del CD.
Riprende l’esecuzione dopo una pausa.
Fa avanzare o retrocedere rapidamente nell’ambito del brano che si sta ascoltando.
Fa avanzare alla traccia successiva o retrocedere alla traccia precedente.
Visualizza la situazione del CD.
Visualizza informazioni ottenibili attraverso CDDB.
Termina il funzionamento di Cdcd quando questo funzionava in modalità interattiva.
335.1.4 Gcd
Gcd 5 è un programma grafico per l’ascolto di CD musicali. Può funzionare in modo molto poco
appariscente, come si vede nella figura 335.3, oppure anche come si vede nella figura 335.4.
All’avvio cerca normalmente di contattare una base di dati CDDB e se la connessione fallisce, la
cosa viene segnalata con un messaggio di errore in un riquadro separato.
Figura 335.3. Pannello normale di Gcd.
5
Gcd GNU GPL
Lettore CD audio
3806
Figura 335.4. Pannello di Gcd con il dettaglio delle tracce.
Gcd si avvia con l’eseguibile ‘gcd’ e oltre a questo non c’è molto da aggiungere, dal momento
che il suo funzionamento interattivo è molto intuitivo, guidato anche da etichette a scomparsa
che descrivono il significato dei pulsanti grafici che appaiono sul pannellino di controllo.
335.2 CDDB
CDDB è una base di dati dei CD musicali offerta attraverso la rete. A fianco di servizi CDDB
proprietari, il cui accesso può essere sottoposto a delle condizioni, esiste anche un servizio CDDB
pubblico, corrispondente a Freedb.org (<http://www.freedb.org>).
Il protocollo usato per l’accesso a una base di dati CDDB è denominato CDDBP e utilizza la
porta 8880. Con questo protocollo si può interrogare il servizio utilizzando i pochi dati che fornisce il CD sui brani che contiene, oppure si possono fornire le informazioni conosciute sul CD,
mettendole a disposizione di tutti. Molti programmi per l’ascolto di CD audio sono organizzati
per l’interrogazione automatica di questo servizio, allo scopo di fornire tutte le notizie conosciute
su ciò che si sta ascoltando.
Alcuni sistemi grafici integrati, come Gnome, utilizzano un programma cliente che si occupa di
eseguire le interrogazioni per conto dei programmi che possono averne bisogno, come TCD (nella
versione per Gnome). Nel caso di Gnome si tratta precisamente di ‘cddbslave’, il quale poi
memorizza le informazioni nella directory ‘~/.cddbslave/’, su più file, mentre altri programmi
potrebbero salvare le loro informazioni in file con nomi simili, per esempio ‘~/.cddb’.
Tanto per fare un esempio di come possa funzionare il meccanismo, si fa riferimento a TCD nella
versione per Gnome. Sul pannello frontale, tra le varie icone se ne trova una che permette di accedere alla finestra di inserimento e modifica delle informazioni sulle tracce. Queste informazioni
sono memorizzate naturalmente nella propria directory personale. Si vede questa finestra nella
Lettore CD audio
3807
figura 335.5. In questo caso appaiono anche i titoli dei vari brani, se così non fosse, si potrebbe
interrogare la base di dati CDDB, come suggerisce il pulsante grafico nella parte bassa.
Figura 335.5. Finestra di accesso alle informazioni sulle tracce del CD musicale.
Il servizio offerto da Freedb.org avviene per mezzo di diversi nodi, in particolare
freedb.freedb.org. Tuttavia, il software che si utilizza dovrebbe essere già predisposto
per interrogare correttamente questi indirizzi.
335.3 Tracce CDDA
Le tracce audio di cui si compone un CD musicale sono in pratica dei file audio in un formato
particolare. Anche se con qualche difficoltà, è possibile estrarre queste tracce e, teoricamente, si
possono ricomporre masterizzando un nuovo CD.
È importante ricordare che l’acquisto di un CD non dà implicitamente il diritto di farne quello
che si vuole. In generale si ottiene solo il diritto di ascoltarlo per sé; mentre altre operazioni
come la copia, l’esecuzione in pubblico e la trasmissione, sono attività che devono essere
autorizzate espressamente da chi detiene i diritti di quella pubblicazione sonora, senza contare
l’eventuale presenza di una tassa.
Lettore CD audio
3808
Qui viene mostrato a titolo didattico il modo in cui le tracce audio di un CD possono essere
estratte. Tuttavia, utilizzare questa tecnica per memorizzare tali brani in un’unità di memorizzazione qualunque, vuol dire farne una «copia», ovvero un’azione che normalmente è vietata
da chi possiede i diritti sulla pubblicazione relativa.
L’estrazione delle tracce da un CD non è necessariamente un’operazione illegale, anche se la
prima idea che viene in mente a chiunque è quella di fare così delle copie digitali perfette. In certi
casi può essere l’unico modo per riuscire ad ascoltare un CD attraverso un lettore in cui l’uscita
audio non funziona; in ultima analisi potrebbe essere il modo per realizzare un sistema audio
completamente digitale fino all’ultima fase del processo di elaborazione che si vuole attuare.
In generale, per estrarre le tracce audio da un CD si utilizza Cdda2wav, Cdparanoia o Grip. Il
problema più difficile dell’estrazione dei brani è quello di riuscire a individuarne correttamente
l’inizio e la fine, oltre alla necessità di seguire correttamente la traccia senza salti.
335.3.1 Dispositivi
Quando si utilizzano programmi che accedono direttamente alle tracce audio del lettore CD, è
necessario che i file di dispositivo abbiano i permessi necessari, a meno che si voglia utilizzarli
solo in qualità di utente ‘root’.
Di solito si fa riferimento a ‘/dev/cdrom’ come collegamento simbolico al file di dispositivo
corretto per il tipo di lettore di cui si dispone. Dal momento che gli applicativi in questione
devono poter interagire con il lettore, nel caso questo sia di tipo SCSI è necessario prendersi
cura anche del «dispositivo generico», in pratica di uno che corrisponde al modello ‘/dev/sgn ’.
Alcune distribuzioni GNU/Linux utilizzano una forma non standard per i nomi di questi file di
dispositivo: ‘/dev/sga’, ‘/dev/sgb’,... In questi casi, è necessario creare anche i file corretti, o
abbinare a questi dei collegamenti simbolici opportuni. In generale, da quanto si legge nel Linux
allocated devices, documento mantenuto da Peter H. Anvin e corrispondente al file <file:///usr/src/
linux/Documentation/devices.txt>:
[...]
21 char
Generic SCSI access
0 = /dev/sg0
1 = /dev/sg1
...
First generic SCSI device
Second generic SCSI device
Most distributions name these /dev/sga, /dev/sgb...;
this sets an unnecessary limit of 26 SCSI devices in
the system and is counter to standard Linux
device-naming practice.
[...]
Naturalmente, ‘/dev/sgn ’ si abbina a ‘/dev/srn ’ o ‘/dev/scdn ’. Volendo creare per esempio
il primo di questa serie, si può utilizzare il comando seguente:
# mknod /dev/sg0 c 21 0
Il dispositivo generico deve avere i permessi di scrittura se si vuole permettere a questi applicativi
di funzionare.
Lettore CD audio
3809
335.3.2 Cdparanoia
Cdparanoia 6 è in grado di estrarre le tracce audio di un CD in modo digitale, senza passare per
l’elaborazione della scheda audio. Può generare diversi tipi di formati, tuttavia al principiante
conviene un formato con intestazione, come il WAV-RIFF. Si compone di un eseguibile unico,
‘cdparanoia’:
cdparanoia
[opzioni]
intervallo_di_esecuzione
[file_da_generare]
La caratteristica più importante di questo applicativo sta nel fatto che è in grado di leggere e
rileggere più volte le tracce audio in modo da escludere errori, attraverso il confronto delle letture
successive.
A parte il caso in cui venga utilizzata l’opzione ‘-B’, è obbligatorio specificare l’intervallo di
tracce e di tempo di registrazione. Semplificando al massimo, si tratta dell’intervallo di tracce
espresso semplicemente nella forma m -n , dove m è la traccia iniziale e n quella finale. Nella pagina di manuale cdparanoia(1) si può leggere una spiegazione un po’ più dettagliata che
permette di individuare meglio la porzione desiderata.
Alcune opzioni
-w
| --output-wav
Genera un formato WAV-RIFF.
-B
| --batch
Genera una serie di file, uno per ogni traccia.
-Z
| --disable-paranoia
Disabilita il processo di rilettura e correzione degli errori.
Esempi
$ cdparanoia -w 1 mio_file.wav
Crea il file ‘mio_file.wav’ ottenuto dalla prima traccia del CD contenuto nel lettore.
$ cdparanoia -w 1-2 mio_file.wav
Crea il file ‘mio_file.wav’ ottenuto dalle prime due tracce del CD contenuto nel lettore.
$ cdparanoia -w -B
Crea una serie di file, nella directory corrente, uno per ogni traccia del CD contenuto nel
lettore. I file sono in formato WAV-RIFF.
$ cdparanoia -w 1 - | sox - .wav -t ossdsp /dev/dsp
Legge la prima traccia audio del CD contenuto nel lettore e la passa a un altro programma,
attraverso una pipeline. Quel programma si occupa di convertire il formato in modo da
poterlo inviare al dispositivo ‘/dev/dsp’ che in pratica corrisponde a un ingresso digitale
della scheda audio (viene mostrato nel prossimo capitolo).
A parte la qualità della riproduzione che si ottiene, eventualmente anche pessima, questo
esempio mostra in che modo si può prelevare una traccia audio per rielaborarla prima
dell’ascolto, senza passare per l’uscita audio del CD.
6
Cdparanoia GNU GPL
Lettore CD audio
3810
335.3.3 Grip
Grip 7 è un altro programma in grado di estrarre tracce audio da un CD, pilotando eventualmente
anche la conversione in formato MP3. Eventualmente può funzionare come lettore CD puro e
semplice; in tal caso, si comporta esattamente come Gcd, che in effetti è una versione ridotta
dello stesso Grip.
Anche Grip è quindi un programma grafico interattivo, come lo è Gcd, ma in questo caso è
molto importante la configurazione, che viene memorizzata nel file ‘~/.grip’. Due aspetti molto
importanti della configurazione riguardano il modo in cui vengono prelevate le tracce (figura
335.6) e la conversione eventuale in MP3 (figura 335.7).
Figura 335.6. Configurazione del prelievo delle tracce audio attraverso Grip.
7
Grip GNU GPL
Lettore CD audio
3811
Figura 335.7. Configurazione della conversione delle tracce prelevate in MP3.
Il prelievo normale può avvenire direttamente attraverso Grip stesso, senza l’ausilio di altri programmi, ma in particolare viene definita in questa fase la collocazione dei file ottenuti (che sono
di tipo WAV-RIFF). Nella figura 335.6 si vede in particolare che i file vengono definiti in base
alla stringa ‘~/mp3/%a/%d/%n.wav’. Evidentemente, ‘%a’, ‘%d’, e ‘%n’ sono dei metacaratteri
che rappresentano rispettivamente: il nome dell’artista, il nome del disco e la traccia completa
di numero sequenziale. In pratica, se non è stato ottenuto il nome dell’artista e del CD, la prima
traccia corrisponde al file ‘~/mp3/noartist/unknown_disk/track_1.wav’.
La conversione in MP3 delle tracce richiede un programma apposito. Grip è in grado di utilizzarne diversi, in particolare LAME (capitolo 337). Nella configurazione (figura 335.7) deve
essere indicato il tipo di programma usato per la conversione, il percorso assoluto dell’eseguibile e le opzioni da dargli; inoltre, come nella situazione precedente deve essere indicato in che
modo comporre il nome del file. Anche nella riga di comando del programma di conversione
vengono indicati dei metacaratteri; nella figura si vede l’uso di ‘%b’, ‘%f’ e ‘%o’ che rappresentano rispettivamente il settore di inizio da cui iniziare la conversione, il nome del file WAV-RIFF
da convertire e il nome del file MP3 da generare. Naturalmente, per leggere l’elenco completo
di questi metacaratteri, soprattutto allo scopo di comprendere il significato della configurazione
predefinita, è sufficiente leggere la pagina di manuale grip(1).
Dopo la configurazione, per passare al prelievo occorre prima selezionare le tracce desiderate,
come si vede nella figura 335.8, utilizzando il mouse, premendo il terzo tasto (quello destro).
Successivamente si può passare al prelievo, come si vede nella figura 335.9, dove si può scegliere
se prelevare semplicemente le tracce, generando file di tipo WAV-RIFF, con il pulsante grafico
R I P O N L Y , oppure si può ottenere direttamente la conversione in formato MP3, con il pulsante
grafico R I P +E N C O D E .
Lettore CD audio
3812
Figura 335.8. Selezione delle tracce.
Figura 335.9. Prelievo delle tracce.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
336
Gestione della scheda audio
La scheda audio essenziale è semplicemente un mixer audio comprendente diversi ingressi e una
o più uscite. I dispositivi più importanti relativi alla scheda audio sono ‘/dev/audio’ e ‘/dev/
dsp’. In particolare, il primo permette di trasmettere alla scheda dei file in formato digitale Sun,
ovvero quelli che normalmente hanno l’estensione ‘.au’. Volendo gestire l’audio in modo diretto, attraverso questo file di dispositivo, occorre convertire i file audio nel formato Sun (questo
si ottiene di solito attraverso l’applicativo Sox). Nello stesso modo, leggendo da questo file di
dispositivo, si ottiene un file in formato digitale Sun del segnale gestito o generato dalla scheda
audio. In pratica:
$ cat mio_file.au > /dev/audio
questo comando serve a eseguire il file ‘mio_file.au’, mentre il prossimo
$ dd if=/dev/audio of=registratore.au bs=8k count=8
serve a registrare per otto secondi (ogni secondo è un blocco di 8 Kibyte) generando il file
‘registratore.au’.
336.1 Aumix
Aumix 1 è un applicativo per la gestione delle funzionalità di miscelazione e di equalizzazione
della scheda audio. Può essere usato in modo interattivo, richiedendo in questo caso lo schermo
di un terminale a caratteri, oppure direttamente attraverso le opzioni della riga di comando. In
particolare, nella modalità interattiva mostra solo i canali audio che possono essere controllati
effettivamente.
Il funzionamento di Aumix e degli altri programmi analoghi non è perfetto. Alle volte possono
apparire dei controlli che di fatto non producono alcun risultato. Purtroppo questo dipende
dalla qualità del codice scritto nel kernel per la gestione della scheda audio di cui si dispone.
336.1.1 Funzionamento interattivo di Aumix
La figura 336.1 mostra il funzionamento interattivo di Aumix, che si ottiene avviando l’eseguibile
‘aumix’ senza indicare alcun argomento. In particolare si fa riferimento a una scheda audio
SoundBlaster standard a 16 bit.
Figura 336.1. Esempio del funzionamento di Aumix in modalità interattiva.
aumix
Quit
Load
Save
Keys
Mute
1
++++++++++++++++++++++++++++++O+++<Vol
++++++++++++++++++++++++++++++O+++ Bass
++++++++++++++++++++++++++++++O+++ Trebl
PO+++++++++++++++++++++++++++++++++ Synth
++++++++++++++++++++++++++++++O+++ Pcm
O+++++++++++++++++++++++++++++++++ Spkr
PO+++++++++++++++++++++++++++++++++ Line
RO+++++++++++++++++++++++++++++++++ Mic
PO+++++++++++++++++++++++++++++++++ CD
O+++++++++++++++++++++++++++++++++ Mix
O+++++++++++++++++++++++++++++++++ IGain
++++++++++++++++++O+++++++++++++++ OGain
0
Level
100
Aumix GNU GPL
3813
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
L
Balance
R
Gestione della scheda audio
3814
Tanto per rendersi conto di questa variabilità nell’apparenza di Aumix, si può osservare anche la
figura 336.2 che mostra cosa accade con una vecchia scheda SoundBlaster a 8 bit.
Figura 336.2. Aumix con una vecchia scheda a 8 bit.
aumix
Quit
Load
Save
Keys
Mute
++++++++++++++++++++++++++++++O+++<Vol
PO+++++++++++++++++++++++++++++++++ Synth
++++++++++++++++++++++++++++++O+++ Pcm
PO+++++++++++++++++++++++++++++++++ Line
RO+++++++++++++++++++++++++++++++++ Mic
PO+++++++++++++++++++++++++++++++++ CD
0
Level
100
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
++++++++++++O+++++++++++++
L
Balance
R
I canali stereofonici hanno anche la possibilità di essere bilanciati, come si vede intuitivamente dalle figura. Per selezionare un canale si possono utilizzare i tasti [ freccia su ] e [ freccia giù ];
per passare alla regolazione del bilanciamento si può utilizzare il tasto di tabulazione, [ Tab ], così come lo si può usare per tornare indietro all’elenco dei canali. Infine i tasti [ freccia sinistra ] e
[ freccia destra ] permettono di regolare il volume del canale o di cambiare il bilanciamento, a seconda di dove si trova il cursore. È interessante notare che anche il mouse funziona, se gestito
attraverso il demone ‘gpm’.
A fianco di alcuni livelli di volume appare la lettera «P», oppure la lettera «R». La prima sta
per play, mentre la seconda sta per record. In pratica, i canali contrassegnati con la lettera «P»
rappresentano un segnale in ingresso nel mixer audio, diretti semplicemente all’amplificatore
finale (le uscite normali della scheda audio). Invece, i canali contrassegnati con la lettera «R»,
oltre che essere diretti all’amplificatore finale, sono utilizzati per il campionamento del segnale
(di solito uno soltanto) ed è ciò che si riesce a leggere dal dispositivo ‘/dev/audio’.
Generalmente è solo il canale del microfono ad avere la sigla «R» e questo per ovvie ragioni.
Tuttavia, è possibile modificare il comportamento di alcuni canali utilizzando la [ barra spaziatrice ],
oppure il mouse (basta fare un clic sulla lettera per scambiarne il valore).
Tabella 336.1. Alcuni comandi utili per l’uso di Aumix in modo interattivo.
Tastiera
pagina su, freccia su
pagina giù, freccia giù
Tab, Invio, >, <
+, freccia destra
-, freccia sinistra
|
Spazio
S, s
L, l
K, k
M, m
Esc, Q, q
Descrizione
Passa al canale precedente.
Passa al canale successivo.
Scambia tra la regolazione del livello e del bilanciamento.
Sposta il cursore a destra.
Sposta il cursore a sinistra.
Centra il bilanciamento.
Scambia la modalità di registrazione e di esecuzione.
Salva le impostazioni nel file di configurazione.
Carica le impostazioni dal file di configurazione.
Mostra un guida sull’uso della tastiera.
Azzera o ripristina il volume generale.
Termina il funzionamento.
336.1.2 Avvio di Aumix
aumix
[opzioni_di_canale] [altre_opzioni]
L’eseguibile ‘aumix’ è tutto ciò che compone l’applicativo omonimo. In modo particolare, le
opzioni possono servire per regolare il volume di un certo canale (purché questo abbia una corrispondenza con la scheda audio disponibile effettivamente), oppure per conoscere il livello attuale
o ancora per scambiare le modalità «R» (record) e «P» (play).
Gestione della scheda audio
3815
Alcune opzioni di canale
|[
]
-v percentuale q uery
Definisce o richiede di conoscere il valore del volume generale, espresso in forma
percentuale rispetto al massimo.
|[
]
-s percentuale q uery
Definisce o richiede di conoscere il valore del volume del sintetizzatore, espresso in forma
percentuale rispetto al massimo.
|[
]
-w percentuale q uery
Definisce o richiede di conoscere il valore del volume di una riproduzione digitale (PCM),
espresso in forma percentuale rispetto al massimo. Si tratta del volume dell’esecuzione di
un brano contenuto in un file.
|[
]|R|P
-l percentuale q uery
Definisce o richiede di conoscere il valore del volume della linea di ingresso esterna, espresso in forma percentuale rispetto al massimo. Se si utilizza la lettere ‘R’ o la lettera ‘P’, si
intende passare alla modalità di registrazione o a quella di esecuzione.
|[
]|R|P
-m percentuale q uery
Definisce o richiede di conoscere il valore del volume del microfono, espresso in forma
percentuale rispetto al massimo. Se si utilizza la lettere ‘R’ o la lettera ‘P’, si intende passare
alla modalità di registrazione o a quella di esecuzione.
|[
]|R|P
-c percentuale q uery
Definisce o richiede di conoscere il valore del volume del canale relativo al lettore CD,
espresso in forma percentuale rispetto al massimo. Se si utilizza la lettere ‘R’ o la lettera
‘P’, si intende passare alla modalità di registrazione o a quella di esecuzione.
Altre opzioni generali
-L
Carica le impostazioni dal file di configurazione ‘~/.aumixrc’ o in sua mancanza dal file
‘/etc/aumixrc’.
-q
Interroga lo stato di tutti i canali esistenti e mostra il risultato attraverso lo standard output.
-S
Salva le impostazioni nel file ‘~/.aumixrc’.
Esempi
$ aumix -v 70
Regola il volume generale al 70 %.
$ aumix -m 0 -l R
Regola il volume del canale microfonico a zero e indica la linea di ingresso come canale in
registrazione.
3816
Gestione della scheda audio
336.1.3 Configurazione
La configurazione di Aumix consiste semplicemente dei file ‘~/.aumixrc’. Il file di configurazione personale viene creato utilizzando l’eseguibile ‘aumix’ con l’opzione ‘-S’, oppure quando
il programma funziona in modalità interattiva, attraverso la pressione del tasto [ s ]. Il file di configurazione non viene caricato automaticamente: lo si può richiedere attraverso l’opzione ‘-L’,
oppure attraverso il tasto [ l ].
Quando viene caricata la configurazione, se il file ‘~/.aumixrc’ manca, Aumix fa riferimento
a ‘/etc/aumixrc’, che potrebbe essere ottenuto semplicemente copiando una configurazione
personale che si ritiene adatta a livello generale, in mancanza d’altro.
A titolo di esempio viene mostrato il contenuto di uno di questi file di configurazione, dove il
significato delle righe che lo compongono dovrebbe essere intuitivo.
vol:76:76:P
synth:0:0:P
pcm:0:0:P
line:0:0:P
mic:0:0:R
cd:0:0:P
Alcune distribuzioni GNU/Linux utilizzano Aumix per memorizzare e ripristinare le regolazioni
della scheda audio. In pratica, nella procedura di inizializzazione del sistema si fa in modo di
salvare in un file, presumibilmente ‘/etc/.aumix’, i valori utilizzati per ultimi durante la fase
di arresto, mentre dallo stesso file vengono riletti durante la fase di avvio.
336.2 Esecuzione e registrazione di brani campionati
Per verificare il funzionamento del sistema di registrazione e di riproduzione di brani campionati,
si possono usare direttamente i dispositivi ‘/dev/audio’ e ‘/dev/dsp’. Entrambi permettono di
leggere il risultato di un campionamento e di riprodurre gli stessi brani se questi vengono scritti
sugli stessi dispositivi.
Il primo dei due file di dispositivo, ‘/dev/audio’, fa riferimento al formato standard della Sun,
semplificato al massimo. I file audio con questo formato hanno normalmente l’estensione ‘.au’.
Il secondo, ‘/dev/dsp’, rappresenta un formato audio grezzo.
Per «registrare» da questi dispositivi, basta leggerli e inviare ciò che si ottiene verso un file normale. Lo stesso file può essere diretto al dispositivo attraverso cui è stato generato, ottenendone
la riproduzione. Tuttavia, per registrare occorre selezionare un canale dalla scheda audio, specificando che per questo è abilitata la registrazione. In generale si può trattare del canale microfonico,
di quello del CD e della linea di ingresso esterna. In pratica, utilizzando Aumix, si tratta di avviare l’eseguibile ‘aumix’ con l’opzione ‘-m’, ‘-c’ o ‘-l’, rispettivamente, con l’argomento ‘R’. In
queste condizioni, 8 Kibyte corrispondono a un secondo di riproduzione audio, di conseguenza,
si può utilizzare uno dei due comandi seguenti per campionare e memorizzare per un minuto in
un file.
$ dd if=/dev/audio of=registratore.au bs=8k count=60
$ dd if=/dev/dsp of=registratore bs=8k count=60
Per riprodurre questi file, si devono utilizzare gli stessi dispositivi da cui sono stati generati.
Rispettivamente, valgono i due comandi seguenti.
$ cat registratore.au > /dev/audio
Gestione della scheda audio
$ cat registratore > /dev/dsp
3817
Gestione della scheda audio
3818
336.3 Wavtools
Wavtools 2 è un altro pacchetto per l’esecuzione e la registrazione di file audio in formato WAV.
Utilizza in particolare il dispositivo ‘/dev/dsp’. Si compone di quattro eseguibili: ‘wavr’ e
‘gwavr’ per la registrazione; ‘wavp’ e ‘gwavp’ per l’esecuzione.
[opzioni]
gwavr [opzioni]
wavr
wavp file_wav
gwavp file_wav_gsm
In pratica, non c’è bisogno di opzioni per eseguire un file attraverso ‘wavp’ o ‘gwavp’. La lettera
«g» iniziale di ‘gwavr’ e ‘gwavp’, indica che si tratta della versione predisposta per un formato
WAV compresso utilizzando l’algoritmo GSM.
Alcune opzioni di wavr e gwavr
-f file_wav
Specifica il file da registrare.
-r frequenza_campionamento
Specifica la frequenza di campionamento. Alcuni valori comuni sono: 44100, 22050,
11025 e 8000.
-d dimensione_campione
Definisce la dimensione del campione in bit. Di solito si usano i valori 8 o 16.
|
-c 1 2
Definisce il numero dei canali: uno per una registrazione monofonica, due per una
registrazione stereofonica.
-l n_secondi
Programma la durata della registrazione.
336.4 Xwave
Xwave 3 è un applicativo relativamente completo per la registrazione, la modifica e l’esecuzione
di brani musicali registrati in vari formati, in particolare in WAV-RIFF. Si tratta di un applicativo
per X. Nella figura 336.3 si vede il pannello principale dopo aver caricato un file WAV.
2
3
Wavtools GNU GPL
Xwave GNU GPL
Gestione della scheda audio
3819
Figura 336.3. Pannello principale di Xwave.
Il programma eseguibile che svolge tutto il lavoro è ‘xwave’. Non richiede opzioni e il suo
funzionamento è intuitivo. È interessante la possibilità offerta di modificare un brano, per esempio usando il taglia-incolla (basta selezionare una porzione della traccia con il mouse), oppure
introducendo degli effetti.
Può darsi che la registrazione non sia perfetta, ma questo è un particolare trascurabile rispetto
alle altre possibilità di questo applicativo.
336.5 Sox
Sox 4 è attualmente lo strumento più importante di conversione di file audio. In linea di massima,
Sox è in grado di convertire da un formato a un altro, anche se i passaggi da una frequenza
di campionamento a un’altra non danno risultati ottimi; inoltre riesce a introdurre degli effetti
interessanti.
Meritano attenzione alcuni effetti che Sox permette di introdurre attraverso la rielaborazione
digitale del segnale: è possibile estrarre solo una porzione delle frequenze audio; si possono
introdurre effetti di eco e di vibrato; è possibile invertire il brano.
Una particolarità di Sox è quella di distinguere i formati audio in base all’estensione dei nomi
dei file (in quasi tutti i casi). La tabella 336.2 riporta l’elenco di alcuni di questi; per un elenco
completo e una descrizione più dettagliata si può consultare la pagina di manuale sox(1).
Tabella 336.2. Alcuni dei formati audio gestiti da Sox.
Estensione/tipo
.8svx
.au
.dat
.smp
.voc
.wav
ossdsp
4
Sox licenza speciale
Descrizione
Amiga 8SVX.
AU della Sun Microsystems.
Audio espresso in formato testo.
TurtleBeach MediaVision.
SoundBlaster VOC.
MS-Windows WAV-RIFF.
Formato del dispositivo ‘/dev/dsp’.
Gestione della scheda audio
3820
336.5.1 $ sox
[
][
]
sox opzioni_generali
opzioni_di_formato
,→ file_in_ingresso
effetti
[
]
file_in_ingresso
[opzioni_di_formato ]
←-
‘sox’ è l’eseguibile che svolge tutto il lavoro dell’applicativo Sox. Purtroppo la sintassi è un po’
confusa e lo schema che si vede qui è già una semplificazione di quella completa. In generale è
necessaria l’indicazione di un file in ingresso e di uno in uscita. Per stabilire il formato di un file
si fa riferimento all’estensione utilizzata nel nome; eventualmente si possono realizzare anche
delle pipeline indicando un trattino orizzontale (‘-’) al posto del nome del file corrispondente (in
ingresso o in uscita), però in questo caso occorre indicare un’opzione apposita per specificare il
formato a cui si fa riferimento.
Le opzioni di formato si applicano al file indicato subito dopo; in pratica, quelle che appaiono
prima del file in ingresso, si riferiscono a questo, mentre quelle indicate dopo il file in ingresso,
riguardano il file in uscita.
Gli effetti che Sox è in grado di generare si indicano attraverso delle parole chiave collocate alla
fine della riga di comando, dopo l’indicazione del file in uscita.
Alcune opzioni generali
-V
Emette una serie di informazioni sulle fasi del processo di elaborazione. Serve per avere un
rapporto chiaro delle trasformazioni che sta applicando Sox.
-v volume
Permette di cambiare il volume del segnale. Il valore ‘1.0’ rappresenta il livello iniziale:
valori inferiori diminuiscono il volume, mentre valori superiori lo aumentano.
Alcune opzioni di formato
-t tipo_di_file
Permette di specificare il formato del file successivo (in ingresso o in uscita), attraverso una
stringa che rappresenta l’estensione normale di questo (‘.au’, ‘.wav’, ecc.).
-r frequenza_di_campionamento
Permette di specificare la frequenza di campionamento del file successivo (in ingresso o
in uscita), attraverso l’indicazione di un numero che rappresenta la frequenza in hertz. In
generale, è più probabile l’utilizzo di questa opzione in riferimento a un file in uscita.
-c n_canali
Permette di specificare il numero di canali audio del file successivo (in ingresso o in uscita).
Come si può intendere, uno rappresenta un file monofonico, due stereofonico e quattro
quadrifonico.
Alcune opzioni che rappresentano un effetto
band frequenza_centrale ampiezza
Applica un filtro passa-banda. Gli argomenti di questa opzione sono valori numerici che si
riferiscono a una frequenza in hertz.
highp frequenza_filtro
Applica un filtro passa-alto a partire dalla frequenza indicata come argomento. In pratica,
le frequenze inferiori risulteranno molto attenuate.
echo ritardo volume
Gestione della scheda audio
3821
Inserisce un effetto eco in cui il ritardo è espresso in secondi e il volume è riferito all’unità,
per cui si utilizzano normalmente dei valori inferiori a uno per indicare un’attenuazione
relativa.
vibro velocità profondità
Inserisce un effetto vibrato. La velocità indica la frequenza della vibrazione nel volume del
segnale, mentre la profondità indica il volume dell’oscillazione di questo.
reverse
Inverte il corso del brano. Potrebbe servire in particolare per scoprire dei messaggi nascosti
che siano stati introdotti ad arte nel segnale audio.
Esempi
$ sox prova.wav prova-vibrato.wav vibro 5 0.7
Legge il file ‘prova.wav’ (di tipo WAV, data l’estensione) e lo trasforma nel file
‘prova-vibrato.wav’, mantenendo le stesse caratteristiche riguardo al campionamento,
ma aggiungendo un effetto vibrato.
$ sox prova.wav prova-eco.wav echo 1 0.7
Legge il file ‘prova.wav’ (di tipo WAV, data l’estensione) e lo trasforma nel file
‘prova-eco.wav’, mantenendo le stesse caratteristiche riguardo al campionamento, ma
aggiungendo un effetto eco.
$ sox prova.wav prova-1000.wav band 1000 500
Legge il file ‘prova.wav’ (di tipo WAV, data l’estensione) e lo trasforma nel file
‘prova-1000.wav’, mantenendo le stesse caratteristiche riguardo al campionamento, ma
filtrando il segnale in modo da selezionare in particolare le frequenze da 750 Hz a 1250 Hz.
$ sox prova.wav -t .wav - band 1000 500 > prova-1000.wav
Come nell’esempio precedente, ma in questo caso il file in uscita viene ottenuto attraverso
lo standard output, per cui occorre specificare il tipo con l’opzione ‘-t’.
Non vengono mostrati esempi in cui si cambia il formato dei file audio, perché si tratta
di un’operazione delicata e per questo è meglio leggere la documentazione originale. In
particolare, non conviene tentare di ridurre la frequenza di campionamento, perché di
solito il risultato è pessimo.
336.5.2 $ play, rec
play file
rec file
Sox è accompagnato generalmente da due script: ‘play’ e ‘rec’. Il loro scopo è quello di facilitare l’ascolto e la registrazione, facendo affidamento sulle capacità di Sox di convertire al volo
il formato di questi file. Quando non si ha la possibilità di utilizzare un programma più comodo, questa potrebbe essere l’unica risorsa per riuscire a gestire con un minimo di comodità le
funzionalità audio.
A volte, questi script sono errati, probabilmente per un piccolo errore di sintassi nella scrittura di
una struttura di selezione (‘case’). Per semplificare le cose, viene mostrato il contenuto essenziale di questi due script. L’esecuzione di un brano registrato in un file avviene in pratica con un
comando come quello seguente:
3822
Gestione della scheda audio
sox file_da_eseguire -t ossdsp -w -s /dev/dsp
Naturalmente, prima del file potrebbero essere aggiunte altre opzioni, se lo si ritiene opportuno;
nello stesso modo si potrebbero aggiungere delle opzioni riferite a effetti da inserire nell’audio,
indicandole alla fine del comando. In modo analogo, si può registrare un file:
sox -t ossdsp /dev/dsp file_da_registrare
Valgono le stesse considerazioni fatte per il caso dell’esecuzione di un brano, in particolare, le
opzioni riferite al file che si vuole ottenere vanno messe subito prima di questo file, cioè dopo
l’indicazione del dispositivo ‘/dev/dsp’.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
337
Audio compresso
È molto difficile ridurre un file contenente informazioni sonore. In questo contesto, quando si parla di compressione, si fa riferimento a metodi di semplificazione delle informazioni memorizzate,
basati sulla percezione umana. Questa «semplificazione» si traduce in pratica in una riduzione e
distorsione nei suoni riprodotti.
In generale, il formato più comune per i file audio compressi è MP3, ovvero «MPEG-1 layer 3»,
«MPEG-2 layer 3» o «MPEG-2.5 layer 3». Lo standard MPEG definisce il formato e la decodifica
dei dati, mentre non fissa un metodo per la codifica. Sulla codifica sono state sviluppate tecniche
differenti, alcune delle quali sono brevettate. A causa di questo problema, lo sviluppo di software
libero in grado di generare file MP3 è limitato alla produzione in forma di sorgenti, non potendo
in pratica arrivare alla distribuzione di applicativi già compilati.
337.1 Informazioni contenute in un file MP3
Un file MP3 può includere delle informazioni importanti sul suo contenuto, oltre a ciò che è
indispensabile per la riproduzione (come per esempio l’informazione sulla frequenza di campionamento). In generale, conviene stabilire questi dati nella fase di codifica del file stesso, mentre
una parte di questi può essere modificata anche dopo.
Tabella 337.1. Informazioni comuni che possono essere inserite in un file MP3.
Informazione
originale
copyright
titolo
artista
album
anno
commento
traccia
genere
Tipo
booleano
booleano
testo
testo
testo
testo
testo
numero
numero
Significato
Indica se il contenuto è originale.
Indica se il contenuto è coperto da copyright.
Titolo della canzone o di ciò che è contenuto nel file.
Nome dell’artista o degli artisti.
Nome dell’album di cui fa parte il contenuto del file.
Anno di edizione.
Commento aggiuntivo.
Numero della traccia nel CD a cui si fa riferimento.
Genere, definito da un codice numerico prestabilito.
Tabella 337.2. Genere, secondo lo standard ID3. Prima parte.
Genere
0
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
Definizione
Blues
Country
Disco
Grunge
Jazz
New Age
Other
R&B
Reggae
Techno
Alternative
Death Metal
Soundtrack
Ambient
Vocal
Fusion
Classical
Acid
Genere
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
3823
Definizione
Classic Rock
Dance
Funk
Hip-Hop
Metal
Oldies
Pop
Rap
Rock
Industrial
Ska
Pranks
Euro-Techno
Trip-Hop
Jazz+Funk
Trance
Instrumental
House
Audio compresso
3824
Genere
36
38
40
42
44
46
48
50
52
54
56
58
60
62
64
66
68
70
72
Definizione
Game
Gospel
Alt. Rock
Soul
Space
Instrumental Pop
Ethnic
Darkwave
Electronic
Eurodance
Southern Rock
Cult
Top 40
Pop/Funk
Native American
New Wave
Rave
Trailer
Tribal
Genere
37
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
73
Definizione
Sound Clip
Noise
Bass
Punk
Meditative
Instrumental Rock
Gothic
Techno-Industrial
Pop-Folk
Dream
Comedy
Gangsta Rap
Christian Rap
Jungle
Cabaret
Psychedelic
Showtunes
Lo-Fi
Acid Punk
Tabella 337.3. Genere, secondo lo standard ID3. Seconda parte.
Genere
74
76
78
80
82
84
86
88
90
92
94
96
98
100
102
104
106
108
110
112
114
116
118
120
122
124
126
128
130
132
134
136
138
140
Definizione
Acid Jazz
Retro
Rock & Roll
Folk
National Folk
Fast-Fusion
Latin
Celtic
Avantgarde
Progressive Rock
Symphonic Rock
Big Band
Easy Listening
Humour
Chanson
Chamber Music
Symphony
Primus
Satire
Club
Samba
Ballad
Rhythmic Soul
Duet
Drum Solo
Euro-House
Goa
Club-House
Terror
BritPop
Polsk Punk
Christian Gangsta Rap
Black Metal
Contemporary Christian
Genere
75
77
79
81
83
85
87
89
91
93
95
97
99
101
103
105
107
109
111
113
115
117
119
121
123
125
127
129
131
133
135
137
139
141
Definizione
Polka
Musical
Hard Rock
Folk/Rock
Swing
Bebob
Revival
Bluegrass
Gothic Rock
Psychedelic Rock
Slow Rock
Chorus
Acoustic
Speech
Opera
Sonata
Booty Bass
Porn Groove
Slow Jam
Tango
Folklore
Power Ballad
Freestyle
Punk Rock
A Cappella
Dance Hall
Drum & Bass
Hardcore
Indie
Negerpunk
Beat
Heavy Metal
Crossover
Christian Rock
Audio compresso
Genere
142
144
146
3825
Definizione
Merengue
Thrash Metal
JPop
Genere
143
145
147
Definizione
Salsa
Anime
Synthpop
Le informazioni più voluminose, come il titolo e le altre stringhe di testo, vanno aggiunte in coda
al file MP3. Il modo in cui questi dati vengono segnalati nel file dipende da standard differenti
che nel tempo sono stati aggiornati. In questo senso, alcuni programmi non aggiornati potrebbero
anche non essere in grado di leggere ciò che viene scritto con standard più recenti.
337.1.1 MP3info
MP3info 1 è un programma molto semplice con lo scopo di estrarre le informazioni tipiche dai
file MP3, con la possibilità di modificare i dati descrittivi. Si compone dell’eseguibile ‘mp3info’,
che si utilizza secondo la sintassi seguente:
mp3info
[opzioni]
file_mp3 ...
Se non si indica alcuna opzione, si ottengono le informazioni sui file in forma stringata. Tuttavia,
con l’opzione ‘-F’, o meglio ancora con l’opzione ‘-f’, si può controllare il modo in cui tali
informazioni vengono fornite.
L’opzione ‘-f’ prevede un argomento composto da una stringa contenente delle sequenze di
escape, che si distinguono per il fatto che iniziano con il simbolo di percentuale (‘%’). La tabella
337.4 riporta un elenco parziale di queste sequenze di escape, escludendo in particolare quelle che
rappresentano una scelta sottoposta a una condizione. Per il loro approfondimento è sufficiente
leggere la poca documentazione originale.
Con alcune shell, questi simboli di percentuale potrebbero essere interpretati in modo diverso,
come nel caso di Midnight Commander.
Tabella 337.4. Alcune sequenze di escape utilizzabili come argomento dell’opzione
‘-f’.
Stringa
%%
%t
%a
%l
%y
%c
%g
%#
%v
%V
%L
%A
%C
%b
%F
%M
%O
%o
1
MP3info GNU GPL
Effetto
‘%’
Titolo
Artista
Album
Anno
Commento
Genere in forma testuale
Genere in forma numerica
Versione MPEG in forma numerica
Versione MPEG in forma testuale
Strato MPEG (layer) in numero romano
Strato MPEG (layer) in numero arabo
Protezione dagli errori (restituisce zero o uno)
Quantità di bit utilizzati al secondo
Frequenza di campionamento
Modalità: mono, stereo, ecc.
Copyright (restituisce zero o uno)
Originale (restituisce zero o uno)
Audio compresso
3826
Stringa
%m
%s
%S
%N
%f
%B
%i
Effetto
Lunghezza espressa in minuti
Lunghezza rimanente in secondi
Lunghezza complessiva in secondi
Interruzione di riga
Nome del file, come indicato nella riga di comando
Nome del file senza percorso
Dimensione del file in byte
Per comprendere meglio il significato di tutto questo, l’esempio seguente consente di estrarre
esattamente il nome dell’artista e il titolo della canzone (o di qualunque altra cosa si tratti),
ponendo le due informazioni su righe differenti:
$ mp3info -f "%a%N%t" prova.mp3[ Invio ]
Bla bla bla bla
Pinco Pallino
Volendo si potrebbe realizzare uno script per visualizzare tutto quello che c’è da sapere nel file,
come nell’esempio seguente, in cui si può fare riferimento a un solo file alla volta:
#!/bin/sh
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
mp3info
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
-f
"file:
"dimensione:
"formato:
"CRC:
"bitrate:
"campionamento:
"modalità:
"durata:
"copyright:
"originale:
"titolo:
"artista:
"album:
"anno:
"annotazioni:
"genere:
%f"
%i"
%V layer %L"
%C"
%b Kibit/s"
%F Hz"
%M"
%m:%s"
%O"
%o"
%t"
%a"
%l"
%y"
%c"
%# %g"
$1
$1
$1
$1
$1
$1
$1
$1
$1
$1
$1
$1
$1
$1
$1
$1
MP3info consente anche la modifica di alcune di queste informazioni, ma ciò avviene attraverso
opzioni apposite e le sequenze di escape dell’opzione ‘-f’ non hanno alcun ruolo in questo
contesto.
Alcune opzioni
-f stringa_di_formato
Mostra le informazioni secondo la stringa di formato indicata come argomento. Si
utilizzano le sequenze di escape della tabella 337.4.
-F n
Mostra le informazioni secondo un formato prestabilito, rappresentato da un numero intero
positivo. Basta provare per rendersi conto di come possono essere rappresentate le informazioni in questo modo. Si tratta evidentemente di una semplificazione per chi non vuole
usare l’opzione ‘-f’.
-w
Richiede espressamente la scrittura di informazioni aggiornate. In generale non serve indicare espressamente questa opzione, perché viene richiamata automaticamente in presenza
di opzioni che implicano la modifica di qualche informazione.
Audio compresso
3827
-W
Cancella le informazioni descrittive (titolo, artista, ecc.) contenute nel file.
-t titolo
Imposta il titolo. L’uso di questa opzione implica automaticamente la scrittura, senza
bisogno di specificare l’opzione ‘-w’.
-a artista
Imposta l’artista. L’uso di questa opzione implica automaticamente la scrittura, senza
bisogno di specificare l’opzione ‘-w’.
-l album
Imposta l’album. L’uso di questa opzione implica automaticamente la scrittura, senza
bisogno di specificare l’opzione ‘-w’.
-y anno
Imposta l’anno. L’uso di questa opzione implica automaticamente la scrittura, senza
bisogno di specificare l’opzione ‘-w’.
-c commento
Imposta il commento. L’uso di questa opzione implica automaticamente la scrittura, senza
bisogno di specificare l’opzione ‘-w’.
-g n
| -G
genere_testuale
Imposta il genere, in forma di numero o in modo testuale. L’uso di questa opzione implica
automaticamente la scrittura, senza bisogno di specificare l’opzione ‘-w’. Si osservi che
l’impostazione del genere in forma testuale deve avvenire usando la definizione prevista.
[]
-p n
Elenca i generi in ordine numerico, utilizzando n colonne.
Esempi
Sono già stati mostrati degli esempi riferiti all’uso dell’opzione ‘-f’, che qui non viene
riproposta.
$ mp3info -t "Bla bla bla" -a "Pinco Pallino" -y "2001" ←,→-g 112 prova.mp3
Imposta il titolo, l’artista, l’anno e il genere (tango) nel file ‘prova.mp3’.
$ mp3info -p1
Mostra l’elenco dei generi in una sola colonna, secondo l’ordine numerico attribuito dallo
standard.
337.2 LAME
LAME 2 è un progetto per la codifica in formato MP3 ed eventualmente anche in altri formati
audio compressi. Il progetto produce esclusivamente del codice sorgente (compilabile facilmente)
perché la distribuzione di pacchetti già compilati viene impedita di fatto dalla presenza di vari
brevetti.
In un sistema GNU/Linux la compilazione di LAME avviene in modo molto semplice. Supponendo di disporre del file ‘lame.tar.gz’ e di volere installare i file a partire da ‘/opt/lame/’,
si potrebbe procedere nel modo seguente:
2
LAME GNU LGPL
Audio compresso
3828
$ tar xzvf lame.tar.gz
$ cd lame
$ ./configure --prefix=/opt/lame
$ make
$ su
# make install
Naturalmente, occorre poi preoccuparsi di inserire il percorso ‘/opt/lame/bin/’ nella variabile
di ambiente ‘PATH’. Si veda eventualmente quanto descritto nel capitolo 20.
Al termine della compilazione si ottiene l’eseguibile ‘lame’, che può essere utilizzato secondo la
sintassi seguente:
lame
[opzioni]
file_in_ingresso file_in_uscita
In pratica, il primo argomento dopo le opzioni indica un file, solitamente in formato WAV-RIFF
(salvo la specificazione di qualcosa di differente), mentre il secondo è il file MP3 che si vuole
generare. Naturalmente, se si utilizza il carattere ‘-’ al posto del nome dei file, si fa riferimento
allo standard input e allo standard output rispettivamente.
Alcune opzioni
-r
Il file in ingresso è di tipo PCM grezzo.
-x
Forza lo scambio dei byte in ingresso.
-s frequenza_di_campionamento
Definisce la frequenza di campionamento in ingresso, espressa in kilohertz. Il valore
predefinito è di 44,1 kHz, che si esprime come ‘44.1’.
--mp1input
Indica che il file in ingreso è di tipo «MPEG layer I».
--mp2input
Indica che il file in ingreso è di tipo «MPEG layer II».
--mp3input
Indica che il file in ingreso è di tipo «MPEG layer III».
--ogginput
Indica che il file in ingreso è di tipo «Ogg Vorbis».
-m modalità
Consente di specificare la modalità di registrazione, attraverso l’indicazione di una lettera.
Quelle fondamentali sono:
• ‘s’ stereo;
• ‘j’ stereo congiunto (predefinito);
• ‘m’ mono;
Audio compresso
3829
Le modalità di registrazione effettivamente disponibili dipendono anche dal tipo di codifica
usato.
-a
Mescola i canali del file in ingresso per generare un file monofonico.
--decode
Decodifica un file MP3 generando un file WAV-RIFF. In questo modo, il primo file indicato
nella riga di comando deve essere in formato MP3, mentre ciò che si genera è un file
WAV-RIFF.
-h
Utilizza una compressione lenta dove la qualità è preservata.
-f
Utilizza una compressione rapida dove la qualità dovrebbe essere sufficiente.
-c
Attiva l’indicatore relativo al copyright.
-o
Indica come non originale.
-p
Aggiunge 16 bit di controllo alla fine di ogni frame.
-tt titolo
Aggiunge il titolo.
-ta artista
Aggiunge l’indicazione dell’artista o degli artisti.
-tl album
Aggiunge il titolo dell’album a cui appartiene il contenuto del file.
-ty anno
Aggiunge l’anno.
-tc commento
Aggiunge un commento libero.
-tn n
Specifica il numero di traccia del CD originale, con un numero che va da 1 a 255.
-tg genere
Specifica il genere, espresso per nome o attraverso un numero.
--genre-list
Elenca i generi secondo lo standard ID3. Da questo elenco si può trarre il numero da usare
con l’opzione ‘-tg n ’.
Esempi
$ lame -h prova.wav prova.mp3
L’esempio mostra la situazione più comune di utilizzo, in cui si specifica l’opzione ‘-h’
per ottenere un buon risultato. In pratica, si ottiene il file ‘prova.mp3’ a partire da
‘prova.wav’. Si intende che il file ‘prova.wav’ sia di tipo WAV-RIFF, 16 bit, stereo,
44100 Hz.
$ lame -h -p prova.wav prova.mp3
Audio compresso
3830
Come nell’esempio precedente, ottenendo però un file un po’ più lungo, per l’aggiunta di
un codice di controllo alla fine di ogni frame.
$ lame -h -p -c prova.wav prova.mp3
Come nell’esempio precedente, con l’attivazione dell’indicatore del copyright.
$ lame -h -p -c -tg 101 ←,→-tt "Conferenza sul software libero" -ta "Pinco Pallino" ←,→-ty "2001" prova.wav prova.mp3
Come nell’esempio precedente, con l’aggiunta di altre informazioni utili. Si osservi l’uso
del genere 101.
$ lame --decode prova.mp3 prova.wav
Riproduce il file ‘prova.wav’, completo di intestazione, a partire dal file ‘prova.mp3’.
337.3 MP3blaster
MP3blaster 3 è un programma interattivo per l’esecuzione di file audio (inizialmente solo per
file MP3). Se viene avviato senza argomenti, si ottiene il pannello di controllo che si vede nella
figura 337.1.
Figura 337.1. Pannello principale di MP3blaster.
.------------------------------------------------------------------------------.
|F 1: Select files
|
01:Default
| -|
|F 2: Add group
|---------------------------------------------------|--|
|F 3: Delete group
|
|01|
|F 4: Set group’s title |
| |
|F 5: load/add playlist |
| |
|F 6: Write playlist
|
| |
|F 7: Toggle group mode |
| |
|F 8: Toggle play mode |
| |
|F 9: Play list
|
| |
|F10: Change #threads
|
| |
|
|
| |
|
|
| |
|Current group’s mode: |
| |
|Play in normal order
|
| |
|
|
| |
|Current play-mode:
|
| |
|Play all groups in
|
| |
|normal order
|
| |
|
|
| |
|Threads: 100
|
| |
|------------------------------------------------------------------------------|
|Press ’?’ to get a screen with key functions.
+|
‘------------------------------------------------------------------------------’
In condizioni normali, durante l’esecuzione di un brano viene messo a disposizione un mixer,
come si vede nella figura 337.1, tenendo conto che sono a disposizione anche i controlli di volume
delle linee del mixer che non si vedono; queste appaiono eventualmente scorrendo con i tasti
[ freccia su ] e [ freccia giù ]. I comandi a disposizione durante la modalità di esecuzione di un brano
sono elencati brevemente nella tabella 337.5, mentre gli altri comandi per l’uso interattivo non
vengono mostrati.
3
MP3blaster GNU GPL
Audio compresso
3831
Figura 337.2. Esecuzione di un brano con la funzionalità di mixer attiva.
.-----------------------------------|01.mp3|-----------------------------------.
| Mpeg-1 layer 3 at 44100hz, 128 kb/s (stereo)
|
| ###
00:13/03:31(-03:18)
|
| Songname: 01.mp3
Year :
|
| Artist :
Genre :
|
| Album
:
|
| Info
:
|
|
|
| Vol
|
|
[##################################################]
L
|
|
[##################################################]
R
|
| Pcm
|
|
[########################################
]
L
|
|
[########################################
]
R
|
| Spkr
|
|
[######################################
]
L
|
|
[######################################
]
R
|
|
|
|
|
|
|< << |> >> >| || []
|
|
1 2 3 4 5 6 7
|
|------------------------------------------------------------------------------|
| MP3Blaster V2.0b16 (press ’q’ to return to Playlist Editor)
|
‘------------------------------------------------------------------------------’
Tabella 337.5. Comandi utili in fase di esecuzione dei brani.
Tasto
freccia su
freccia giù
freccia sinistra
freccia destra
1
2
3
4
5
6
7
q
Effetto
Seleziona la linea del mixer precedente.
Seleziona la linea del mixer successiva.
Abbassa il volume della linea selezionata.
Alza il volume della linea selezionata.
Salta al brano precedente.
Torna indietro nel brano in corso di esecuzione.
Avvia l’esecuzione del brano corrente.
Avanza nel brano in corso di esecuzione.
Salta al brano successivo.
Pausa.
Stop.
Conclude la modalità di esecuzione.
337.3.1 Avvio e riga di comando
MP3blaster si avvia attraverso l’eseguibile ‘mp3blaster’, con o senza argomenti:
mp3blaster
[opzioni] [file]...
In generale, se alla fine della riga di comando vengono indicati dei file, viene avviata la loro
esecuzione; altrimenti si ottiene generalmente il pannello iniziale del programma, dal quale si
possono selezionare le funzioni desiderate.
Alcune opzioni
--nomixer
| -n
Disabilita la gestione del mixer in fase di esecuzione dei brani.
{||||||||| }
--runframes= 1 2 3 4 5 6 7 8 9 10
{||||||||| }
-r= 1 2 3 4 5 6 7 8 9 10
Audio compresso
3832
Permette di definire la quantità di frame che devono essere decodificati per ogni ciclo.
Ciò permette di regolare l’esecuzione in base alle capacità di elaborazione disponibili. In
generale, i valori più alti migliorano le prestazioni con microprocessori più lenti. Il valore
predefinito per questa opzione è cinque.
--sound-device=file
| -s=file
In generale, il programma dovrebbe essere già predisposto per utilizzare il file di dispositivo
giusto per accedere all’interfaccia audio. Tuttavia, in caso di necessità può essere definito
attraverso questa opzione. Nei sistemi GNU/Linux si tratta normalmente di ‘/dev/dsp’.
Esempi
$ mp3blaster
Avvia MP3blaster in modalità interattiva.
$ mp3blaster brani/01.mp3
Avvia MP3blaster per l’esecuzione del file ‘brani/01.mp3’. Al termine conclude il suo
funzionamento.
$ mp3blaster brani/*.mp3
Avvia MP3blaster per l’esecuzione di tutti i file MP3 contenuti nella directory ‘brani/’.
Al termine conclude il suo funzionamento.
337.4 Xmms
Xmms, 4 ovvero X multimedia system, è un lettore multimediale grafico, per i formati audio più
comuni. Avviandolo per la prima volta, attraverso l’eseguibile ‘xmms’, si ottiene il pannello di
controllo che si vede nella figura 337.3.
Figura 337.3. Pannello principale di Xmms al primo avvio.
Oltre al pannello principale è possibile visualizzare il mixer e l’elenco dei brani pronti per l’esecuzione (playlist), come si vede nella figura 337.4, dove si vede anche l’esecuzione di un brano
di musica.
4
Xmms GNU GPL
Audio compresso
3833
Figura 337.4. Pannello completo di Xmms.
I brani da eseguire possono essere indicati attraverso l’interazione con il pannello, utilizzando il
menù che si ottiene facendo un clic con il tasto destro del mouse, oppure indicandoli nella riga
di comando. Per esempio:
$ xmms *.mp3
In tal caso, come si intuisce, si caricano tutti i file con estensione ‘.mp3’ della directory corrente.
La prima volta che si avvia, Xmms crea la directory ‘~/.xmms/’, in cui si collocano i file di
configurazione. Questa configurazione memorizza anche l’ultimo elenco di brani selezionati,
consentendo il riavvio successivo di Xmms con il recupero degli stessi dati.
Xmms richiede l’interfaccia grafica X per funzionare; tuttavia, una volta avviato è possibile
controllarlo attraverso altre istanze del comando ‘xmms’, con delle opzioni apposite. Per esempio,
• $ xmms -u
mette in pausa l’esecuzione in corso, oppure la fa riprendere;
• $ xmms -e *.mp3
aggiunge altri brani all’elenco attuale;
• $ xmms -p
fa partire l’esecuzione dell’elenco di brani attuale;
• $ xmms -s
ferma l’esecuzione.
Dal pannello grafico, così come è possibile far apparire il mixer e l’elenco dei brani, è possibile
fare anche sparire tutti i pannelli. In tal senso, la possibilità di controllare l’esecuzione attraverso
i comandi del tipo mostrato, diventa molto conveniente. Eventualmente, per far riemergere il
pannello principale si può usare il comando:
$ xmms -m
Audio compresso
3834
337.5 FreeAmp
FreeAmp, 5 è un programma grafico per l’esecuzione di file audio MP3. All’avvio si presenta
come si vede nella figura 337.5.
Figura 337.5. Pannello frontale di FreeAmp.
L’eseguibile che compie il lavoro è ‘freeamp’ che può ricevere eventualmente come argomento
il nome di un file MP3 da eseguire immediatamente:
freeamp
[file_mp3]
Dal pannello frontale è possibile regolare facilmente il volume della linea di amplificazione;
inoltre è possibile spostare la posizione dell’esecuzione (il punto di inizio). Attraverso il pulsante
grafico M Y M U S I C si accede a una finestra simile a quella che si vede nella figura 337.6, che ha lo
scopo di consentire un accesso facilitato ai file nel proprio disco fisso.
Figura 337.6. Gestore di file MP3 incorporato in FreeAmp.
Tra le tante funzionalità di FreeAmp esiste anche la possibilità di modificare facilmente le informazioni ID3 dei file MP3. Per modificare i dati di un file, basta selezionarlo nell’ambito della
finestra a cui si accede con il pulsante grafico M Y M U S I C , selezionando da lì il pulsante E D I T . Si
ottiene una maschera simile a quella che si vede nella figura 337.7.
5
FreeAmp GNU GPL
Audio compresso
3835
Figura 337.7. Modifica delle informazioni ID3.
FreeAmp è anche in grado di collegarsi a un flusso di dati MP3 fornito attraverso il protocollo
HTTP, ovvero uno stream HTTP, come quello generato da Icecast, descritto nella sezione 338.2.
Per un collegamento del genere, basta avviare l’eseguibile ‘freeamp’ indicando l’URI corretto,
come nell’esempio seguente:
$ freeamp http://dinkel.brot.dg:8000
Come si vede dal comando, pur trattandosi del protocollo HTTP, si utilizza solitamente una
porta differente da quella standard. La figura 337.8 mostra in che modo appare FreeAmp quando
si collega a un flusso HTTP.
Figura 337.8. Pannello frontale di FreeAmp collegato a un flusso HTTP.
337.6 Riferimenti
• Eric Scheirer, Frequently Asked Questions: MPEG, Patents, and Audio Coding, 1998
<http://sound.media.mit.edu/~eds/mpeg-patents-faq>
• The LAME project
<http://www.mp3dev.org/mp3/>
• Martin Nilsson, ID3 tag version 2, 1998
<http://www.id3.org/id3v2-00.txt>
• Phill Kerr, The Linux MP3-HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
3836
Audio compresso
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
338
Audio attraverso la rete
Ci sono tanti modi di gestire l’audio attraverso la rete. La tecnica più semplice, anche se non
è necessariamente la più efficace, consiste nella realizzazione di una connessione TCP normale
dove ogni nodo intrattiene una sessione indipendente. Si intende il limite di questo nel fatto che
ogni utente che si collega aggiunge del carico alla rete. In pratica, questo approccio può andare
bene solo in reti locali poco popolate, oppure con particolari doti di velocità.
Figura 338.1. Idea generale del funzionamento di un sistema di diffusione di audio
attraverso la rete, per mezzo di un servente con funzione di ripetitore.
.--------------.
.-------------.
|
Servente
|----------->| Cliente per |
.----->| ripetitore |------.
| l’ascolto |
|
‘--------------’
|
‘-------------’
|
|
V
|
|
.-------------.
.--------------.
|
| Cliente per |
| Cliente di |
|
| l’ascolto |
| trasmissione |
|
‘-------------’
‘--------------’
V
.-------------.
| Cliente per |
| l’ascolto |
‘-------------’
338.1 NetStreamer
Lo schema di funzionamento di NetStreamer 1 si basa su un demone, ‘NrServer’, che comunque
deve essere avviato esplicitamente sullo sfondo, il quale svolge il ruolo di ripetitore nei confronti
di uno o più clienti di trasmissione. Successivamente, gli utenti che vogliono collegarsi al ripetitore per ascoltare ciò che viene trasmesso, utilizzano altri clienti specifici per la ricezione. Come
accennato le connessioni sono di tipo TCP e di solito si utilizza la porta 8888.
Un solo servente NetStreamer può gestire più sorgenti audio (provenienti da altrettanti clienti per
la trasmissione), per cui i clienti hanno la possibilità di scegliere su quale trasmissione «sintonizzarsi». In base a questo principio, NetStreamer simula la gestione di una stazione radio UHF che
opera sulle frequenze tra 88 MHz e 108 MHz: i clienti di trasmissione, quando si collegano definiscono il nome della propria «stazione radio» e la «frequenza», rappresentando questa ultima
attraverso un valore che esprime decimi di megahertz; i clienti per la ricezione si sintonizzano
utilizzando come riferimento il valore della frequenza utilizzata dalle stazioni di trasmissione.
È importante osservare che la ricezione delle trasmissioni attraverso diversi clienti di ricezione, non può essere sincronizzata. Ciò accade a causa dell’esigenza di accumulare una memoria
tampone necessaria a garantire la continuità nel flusso della riproduzione audio.
338.1.1 Attivazione di un ripetitore
Il ripetitore è quindi il servente di NetStreamer. Nella stessa rete possono essere predisposti
diversi serventi indipendenti, anche se questo non dovrebbe essere di alcuna utilità. Tutto si limita
all’avvio di ‘NrServer’ con l’indicazione della porta TCP da utilizzare per le comunicazioni:
# NrServer :8888 &
1
NetStreamer GNU GPL
3837
3838
Audio attraverso la rete
In alternativa, è possibile indicare anche il nome del nodo, per uniformità con la notazione
utilizzata dai clienti:
# NrServer localhost:8888 &
Si osservi il fatto che ‘NrServer’ deve essere messo esplicitamente in funzione sullo sfondo.
338.1.1.1 Attivazione di una trasmittente
Il cliente che trasmette al ripetitore può essere collocato indipendentemente nello stesso elaboratore del ripetitore o in un altro nodo. Naturalmente, collocandolo nello stesso elaboratore si evita
di intasare ulteriormente la rete locale con questa connessione.
Si tratta di utilizzare ‘NrTransmitter’, il quale deve avere una fonte di audio digitale, indicando in particolare il nodo del ripetitore, la porta di comunicazione, il nome della stazione radio
virtuale e la frequenza virtuale di trasmissione.
Si distinguono tre situazioni importanti in funzione del modo in cui viene fornita l’informazione
audio digitale al programma ‘NrTransmitter’: i file di dispositivo standard, lo standard input
o una serie di file di registrazioni precedenti, realizzati sempre con NetStreamer.
338.1.1.2 Audio digitale proveniente dai dispositivi standard
Quando si dispone di una scheda audio, quello che questa è in grado di catturare, ovvero il canale
audio indicato per la registrazione, può essere letto dai soliti file di dispositivo già mostrati più
volte. Per fare in modo che un cliente di trasmissione NetStreamer prenda questa fonte, si utilizza
la sintassi seguente:
NrTransmitter Device campionamento frequenza_virtuale nome_stazione
[host]:porta
La parola chiave ‘Device’ posta come primo argomento serve proprio a specificare questo comportamento del cliente di trasmissione. La frequenza di campionamento è un numero che si riferisce a kilohertz e comunque può essere scelto solo tra 8 e 16. La frequenza virtuale è un numero
che esprime i decimi di megahertz a cui si vuole simulare la trasmissione radio.
A titolo di esempio, volendo trasmettere quello che viene dalla scheda audio con un campionamento di 16 kHz utilizzando la frequenza virtuale di 88,5 MHz per la stazione radio denominata «Stazione 1», che utilizza il ripetitore dinkel.brot.dg alla solita porta 8888, si può
utilizzare il comando seguente:
$ NrTransmitter Device 16 885 "Stazione 1" dinkel.brot.dg:8888 &
In alternativa, se il ripetitore si trova nello stesso elaboratore, si poteva fare riferimento al nodo
localhost, abbreviando eventualmente nel modo seguente:
$ NrTransmitter Device 16 885 "Stazione 1" :8888 &
338.1.1.3 Audio digitale proveniente dallo standard input
Quando l’audio viene fornito a ‘NrTransmitter’ attraverso lo standard input, questo deve essere in un formato PCM, ovvero senza intestazione particolare, praticamente quello che genera
‘MP3blaster’, solo che per il momento ‘MP3blaster’ non può emetterlo in questo modo:
mp3blaster --sound-device=file_temporaneo file_mp3
Audio attraverso la rete
3839
Successivamente:
cat file_temporaneo | NrTransmitter StdIn campionamento frequenza_virtuale nome_stazione
,→ host :porta campionamento_in_ingresso
[ ]
←-
Rispetto alla sintassi vista per l’utilizzo dei dispositivi standard, in questo caso il primo argomento è la parola chiave ‘StdIn’, aggiungendo in coda un numero corrispondente alla frequenza
di campionamento con cui arrivano i dati in ingresso. L’esempio dei comandi seguenti mostra
l’utilizzo di una pipe con nome per ricreare un flusso continuo.
$ mkfifo /tmp/musica
$ mp3blaster --sound-device=/tmp/musica
In un altro terminale o console virtuale:
$ cat /tmp/musica | NrTransmitter StdIn 16 885 "Stazione 1" ←,→dinkel.brot.dg:8888 44 &
oppure, se la trasmissione avviene nello stesso nodo locale:
$ cat /tmp/musica | NrTransmitter StdIn 16 885 "Stazione 1" :8888 44 &
338.1.2 Audio digitale contenuto all’interno di «nastri»
Attraverso NetStreamer è possibile registrare dei file con un formato audio digitale speciale, che
nella logica di questo applicativo sono dei nastri, esattamente come si farebbe in una stazione
radio. Verrà mostrato in seguito come realizzare tali file; per il momento si tenga presente che
devono avere l’estensione ‘.tape’.
NrTransmitter Directory campionamento frequenza_virtuale nome_stazione
,→ host :porta directory_dei_nastri
[ ]
←-
Rispetto a quanto visto in precedenza, si osserva che il primo argomento è la parola chiave ‘Directory’ e in coda si nota l’indicazione di una directory all’interno della quale
‘NrTransmitter’ va a cercare i file che terminano con l’estensione ‘.tape’. Questi file vengono scelti con una sequenza casuale e trasmessi in continuazione. Vengono riproposti i due esempi
già visti in precedenza; in particolare, si fa riferimento ai file contenuti probabilmente in un disco
montato per l’occasione: ‘/mnt/musica’.
$ NrTransmitter Directory 16 885 "Stazione 1" dinkel.brot.dg:8888 ←,→/mnt/musica &
$ NrTransmitter Directory 16 885 "Stazione 1" :8888 /mnt/musica &
338.1.3 Ricezione di una stazione radio virtuale
La ricezione è un procedimento più semplice; tutto quello che serve è indicare la frequenza
virtuale e il ripetitore a cui ci si vuole collegare:
NrReceiver frequenza_virtuale
[host]:porta
Il risultato viene passato ai file di dispositivo per l’input dell’audio digitale. Per esempio, per
ascoltare la trasmissione proveniente dal ripetitore collocato nel nodo dinkel.brot.dg (alla
solita porta) alla frequenza virtuale di 88,5 MHz, si può usare il comando seguente:
$ NrReceiver 885 dinkel.brot.dg:8888
Audio attraverso la rete
3840
In alternativa a ‘NrReceiver’ si può utilizzare ‘NrRecFrontend’ che, come suggerisce il nome,
è un programma frontale per X. In tal caso si indica solo il ripetitore a cui collegarsi, perché la
frequenza è specificata attraverso il pannello di questo programma.
NrRecFrontend
[host]:porta
La figura 338.2 mostra come si può presentare ‘NrRecFrontend’ quando è collegato alla
stazione radio virtuale vista tante volte in questi esempi.
Figura 338.2. Pannello frontale del ricevitore di NetStreamer.
Come si può osservare, appare anche il pulsante R E C O R D . Questo permette di iniziare una registrazione in un file ‘.tape’ di NetStreamer. Per la precisione, si registra la trasmissione nel file
‘~/default.tape’. Questo file può essere poi rinominato e utilizzato per le trasmissioni.
338.1.4 Creazione di nastri
Oltre alla possibilità di registrare dei file ‘.tape’ per NetStreamer attraverso il pannello di un
ricevitore ‘NrRecFrontend’, si può usare il programma ‘NrEncoder’ che è in grado di generare
tali file a partire da un formato PCM.
NrEncoder campionamento_in_ingresso campionamento_in_uscita
Lo schema sintattico mostra che gli unici argomenti sono il campionamento in ingresso e quello
in uscita espressi in kilohertz. L’input viene fornito attraverso lo standard input e l’output si
ottiene dallo standard output. Per esempio, con l’aiuto di ‘mp3blaster’ si può convertire un file
MP3 in due passaggi:
$ mp3blaster --sound-device=/tmp/musica mio_file.mp3
$ cat /tmp/musica | NrEncoder 44 16 > mio_file.tape
Il formato di questi file di NetStreamer è precisamente: CCITT ADPCM.
Audio attraverso la rete
3841
338.2 Icecast
Icecast 2 è un sistema di trasmissione di audio digitale MP3 attraverso il protocollo HTTP. Il
meccanismo di funzionamento è quello a cui si accenna all’inizio del capitolo, con la particolarità
di presentare il flusso digitale come fa il protocollo HTTP, iniziando con l’intestazione seguente,
seguita poi dalla codifica MP3:
HTTP/1.0 200 OK
Server: icecast/1.0.0
Content-type: audio/mpeg
Icecast si compone di un servente, corrispondente all’eseguibile ‘icecast’ e di un programma
cliente per la trasmissione al servente, ovvero al ripetitore, dei file MP3 che altri clienti possono
poi ricevere e riprodurre.
Il servente ‘icecast’ non richiede file di configurazione, dal momento che tutte le informazioni
necessarie per il suo funzionamento vengono fornite attraverso la riga di comando; tuttavia, le
distribuzioni GNU/Linux possono organizzare il pacchetto in modo da avviare il servizio nell’ambito della procedura di inizializzazione del sistema, dove lo script di avvio potrebbe leggere
un file di configurazione con le informazioni necessarie a comporre il comando completo di avvio
di ‘icecast’.
icecast
[opzioni]
A titolo di esempio si può vedere come potrebbe essere strutturato, in modo elementare, lo script
per l’avvio del servizio Icecast:
#!/bin/sh
#
# init.d/icecast {start|stop|restart}
#
# Importazione della configurazione di Icecast
. /etc/defaults/icecast
# Analisi dell’argomento usato nella chiamata.
case "$1" in
start)
echo -n "Avvio del servizio Icecast: "
/usr/sbin/icecast $OPZIONI &
echo
;;
stop)
echo -n "Disattivazione del servizio Icecast: "
killall icecast
echo
;;
*)
echo "Utilizzo: pippo {start|stop}"
exit 1
esac
exit 0
Si può osservare che lo script importa inizialmente il file ‘/etc/defaults/icecast’, nel quale
evidentemente viene dichiarata la variabile di ambiente ‘OPZIONI’. Per esempio, sempre semplificando al massimo, questo file esterno potrebbe essere strutturato nel modo seguente, con l’unico
scopo di stabilire una parola d’ordine per l’invio di un flusso audio da ritrasmettere:
PASSWORD=ciao
OPZIONI="-p $PASSWORD"
2
Icecast GNU GPL
Audio attraverso la rete
3842
Il servente di Icecast utilizza in modo predefinito delle porte TCP per ricevere e inviare il flusso audio MP3. La porta 8000 viene utilizzata normalmente per concedere l’accesso ai programmi cliente, la porta 8001 viene utilizzata per ricevere il flusso audio da ritrasmettere ed
eventualmente la porta 8002 serve per l’amministrazione remota del servente.
Si osservi il fatto che un servente di Icecast potrebbe essere utilizzato anche da un utente
comune, tanto più in considerazione dell’utilizzo normale di porte non privilegiate per il suo
funzionamento. In tal caso, evidentemente, non si farebbe uso di script della procedura di
inizializzazione del sistema.
L’esempio mostrato anticipa l’uso dell’opzione ‘-p’, con la quale si stabilisce una parola d’ordine. Ciò permette di evitare che un cliente non autorizzato possa utilizzare il servente per
trasmettere un flusso audio. Le opzioni principali per l’utilizzo di ‘icecast’ sono riepilogate
brevemente nella tabella 338.1.
Tabella 338.1. Opzioni principali di ‘icecast’.
Opzione
-P n
-E n
-A n
-m n
-p stringa
Descrizione
Porta TCP per le connessioni dei clienti in ascolto.
Porta TCP per le connessioni dei clienti di trasmissione.
Porta TCP per le connessioni dei clienti di amministrazione remota.
Numero massimo di clienti a cui è consentito l’accesso.
Parola d’ordine.
338.2.1 Trasmissione al ripetitore
Icecast offre il programma ‘shout’ per la trasmissione al servente del flusso audio MP3:
shout host
[opzioni] [file_mp3]...
In condizioni normali, è più che sufficiente l’indicazione dell’indirizzo o del nome del nodo in cui
si trova il servente da contattare per la trasmissione, assieme all’elenco di file MP3 da trasmettere.
Spesso è necessario aggiungere una parola d’ordine per accedere al servente e questo si ottiene
con l’opzione ‘-P’. La tabella 338.2 riepiloga alcune opzione di uso comune.
Tabella 338.2. Opzioni principali di ‘shout’.
Opzione
-P stringa
-e n
-l
-p file_elenco
-r
Descrizione
Parola d’ordine da trasmettere al servente.
Accede al servente attraverso la porta indicata.
Continua la trasmissione all’infinito.
Indica i file da trasmettere attraverso l’elenco contenuto nel file.
Sequenza casuale nella trasmissione dei file audio.
$ shout dinkel.brot.dg -P ciao *.mp3
L’esempio precedente fa sì che vengano trasmessi i file corrispondenti al modello ‘*.mp3’
al servente dinkel.brot.dg, fornendo la parola d’ordine «ciao», utilizzando la porta TCP
predefinita (8001).
$ shout dinkel.brot.dg -P ciao -p elenco
Questo secondo esempio è simile al precedente, con la differenza che i file MP3 non vengono
elencati nella riga di comando, ma sono forniti in un elenco contenuto nel file di testo ‘elenco’.
Audio attraverso la rete
3843
$ shout dinkel.brot.dg -P ciao -r -l -p elenco
Questo ultimo esempio aggiunge l’uso delle opzioni ‘-r’ e ‘-l’, con le quali si ottiene rispettivamente una sequenza casuale nell’ordine dei file audio trasmessi e una trasmissione senza
fine.
338.2.2 Ricezione del flusso audio digitale
Il sistema usato da Icecast per trasmettere audio digitale MP3 attraverso il protocollo HTTP è
uno standard diffuso, per cui sono diversi i programmi per l’esecuzione di file MP3 che sono
anche in grado di collegarsi a un flusso di questo tipo. In particolare è disponibile FreeAmp, che
per accedere a un servente Icecast si utilizza semplicemente così:
freeamp http://host :porta
Per esempio,
$ freeamp http://dinkel.brot.dg:8000
fa sì che FreeAmp si colleghi al nodo dinkel.brot.dg, alla porta 8000 in attesa di un flusso
MP3.
Icecast offre anche un programma cliente abbastanza spartano, che si limita a emettere il flusso
ottenuto attraverso lo standard output. Si tratta di ‘listen’:
listen host porta
[proxy
]
porta
La sintassi del programma è essenziale; in particolare si può osservare il vantaggio dato dall’uso del protocollo HTTP, che in questo modo consente di utilizzare anche un proxy se ciò è
necessario per raggiungere la rete esterna.
Da solo, ‘listen’ serve a poco, perché non fa altro che ricevere il flusso MP3 emettendolo
attraverso lo standard output; tuttavia può essere utile per verificare il funzionamento del servizio
di Icecast.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
339
Filmato digitale
La gestione di filmati avviene generalmente utilizzando il formato MPEG. Per la riproduzione di
questi file, sono disponibili due librerie: MPEG Library 1 e SMPEG, 2 nota anche con il nome
esteso SDL MPEG.
MPEG sta per Moving picture experts group e rappresenta uno standard per la rappresentazione
di immagini, filmati e audio. Gli standard per i filmati sono fondamentalmente due: MPEG-1
e MPEG-2. Il primo è quello più comune, mentre il secondo riguarda prevalentemente i dischi
DVD (Digital versatile disk). L’informazione audio utilizza i formati MP2 e MP3 (MPEG audio
layer 2 e 3). Normalmente, l’estensione di un file contenente un filmato MPEG è ‘.mpg’.
In generale, il software disponibile consente di visualizzare il formato MPEG-1 con audio MP2
o MP3.
339.1 GTV
GTV 3 è un programma molto semplice, per il sistema grafico X, che si avvale della libreria
SDL MPEG. Si compone dell’eseguibile ‘gtv’ e si utilizza senza opzioni nella riga di comando,
con la possibilità di indicare un solo file MPEG. All’avvio si presenta come si vede nella figura
339.1.
Figura 339.1. Pannello di controllo di GTV, dopo aver aperto e avviato il file ‘/tmp/
prova.mpg’.
Si può osservare la disponibilità di una visualizzazione al doppio della dimensione normale,
attraverso il bottone D O U B L E , così come la possibilità di eseguire il file in modo continuo con
il bottone L O O P . Dalla figura si può vedere che il bottone A U D I O non è disponibile, perché il
file in questione non incorpora audio; lo scopo del bottone è proprio quello di abilitare, quando
disponibile, l’ascolto dell’audio.
339.2 PlayMPEG
PlayMPEG 4 è un altro programma per l’esecuzione di file MPEG, per il sistema grafico X, che
utilizza la libreria SDL MPEG. Si compone dell’eseguibile ‘plaympeg’ e si utilizza soltanto
attraverso la riga di comando. Al momento, PlayMPEG non offre alcuna possibilità di controllo
durante l’esecuzione dei brani; tuttavia è almeno possibile indicare una sequenza di file che poi
viene visualizzato in modo continuo.
plaympeg
[opzioni]
file_mpeg ...
1
MPEG Library software libero con licenza speciale
SDL MPEG GNU LGPL
3
GTV GNU GPL
4
PlayMPEG GNU GPL
2
3844
Filmato digitale
3845
Alcune opzioni
--noaudio
Esclude l’audio, se il file contiene questa informazione.
--novideo
Esclude il video se presente.
Anche se potrebbe sembrare strano, PlayMPEG è in grado di eseguire file di formati
audio compatibili con quelli che può includere il formato MPEG video.
--fullscreen
Utilizza lo schermo intero, ma richiede di funzionare con i privilegi dell’utente ‘root’.
--double
| -2
Raddoppia la dimensione dell’immagine.
--loop
Esegue la sequenza di ogni file in modo continuo. In generale, conviene usare questa opzione solo quando si tratta di un file singolo, perché non si ottiene la ripetizione dell’intera
sequenza di file.
--volume n
| -v
n
Permette di specificare il livello del volume sonoro, aggiungendo un numero, da 0 a 100,
dove ovviamente il primo rappresenta un volume nullo e il secondo indica il volume
massimo.
Esempi
$ plaympeg *.mpg
Esegue in sequenza tutti i file che terminano con l’estensione ‘.mpg’.
$ plaympeg *.mp3
Esegue in sequenza tutti i file che terminano con l’estensione ‘.mp3’. Presumibilmente si
tratta di file audio in formato MP3.
$ plaympeg --double *.mpg
Esegue in sequenza tutti i file che terminano con l’estensione ‘.mpg’, ingrandendo le
immagini al doppio della dimensione originale.
339.3 Riferimenti
• MPEG pointers and resources
<http://www.mpeg.org/MPEG/index.html>
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
340
Masterizzazione di CD audio
La realizzazione di un CD audio non è altrettanto semplice quanto creare un CD-ROM (dati).
Esistono diversi fattori di cui occorre prendersi cura:
1. la disposizione corretta delle tracce e delle pause, rispettando gli standard;
2. la conclusione corretta della registrazione (finalization), senza la quale mancherebbero le
informazioni necessarie a raggiungere le tracce, impedendo l’ascolto del CD;
3. la registrazione a una velocità adeguata al tipo di supporto (a seconda delle caratteristiche
del CD vergine possono non essere ammissibili velocità di incisione troppo basse o troppo
alte);
4. il tipo di supporto adatto agli apparecchi di riproduzione comuni.
La scelta del CD vergine incide quindi anche sulla possibilità o meno di utilizzare una certa
velocità di incisione. Di solito si consiglia una velocità doppia (2x), anche se in pratica occorre
sperimentare per determinare effettivamente quale sia la velocità migliore (sia per il tipo di CD
vergine, sia per la possibilità effettiva di ascoltare il CD in apparecchi standard). A ogni modo,
occorre considerare che una velocità di incisione bassa, scalda di più il CD vergine, che se non è
realizzato per sopportarla, può risultare danneggiato al termine del ciclo di registrazione.
Esistono alcuni apparecchi di riproduzione per CD audio che non accettano espressamente i
CD realizzati in modo non industriale. In quei casi, non c’è alcuna possibilità di produrre un
CD compatibile, se non disponendo di tutta l’attrezzatura necessaria.
Quando si realizza un CD audio, capita facilmente che questo funzioni correttamente utilizzando
il lettore di un elaboratore, mentre sia impossibile ascoltarlo in un impianto audio normale. Il
motivo più comune per cui ciò accade è l’utilizzo di un formato non perfettamente standard, probabilmente a causa di una carenza del programma utilizzato per l’incisione. In questa situazione,
può succedere di trovare che il CD che si ottiene non funzioni affatto in certi apparecchi audio,
mentre in altri non riesce a cominciare dall’inizio.
Anche le caratteristiche del CD vergine possono essere motivo di discriminazione tra un lettore e
un altro, ma si tratta di problemi meno frequenti. Tuttavia, per questo si tende a usare CD vergini
realizzati appositamente per le registrazioni audio (consumer), che però richiedono una velocità
di incisione molto bassa: singola (1x) o doppia (2x).
Nel capitolo 70 è già stato mostrato brevemente l’uso di Cdrecord e di Cdrdao, allo scopo di
realizzare CD-ROM molto semplici. Qui viene ripreso l’uso di questi programmi in merito alla
realizzazione di CD audio.
L’intento di questo capitolo è esclusivamente quello di diffondere la conoscenza sull’uso del
CD come unità di memorizzazione di informazioni audio. È responsabilità di chi utilizza le
informazioni sapere quando queste attività sono legali e quando non lo sono, perché lesive del
diritto di autore.
3846
Masterizzazione di CD audio
3847
340.1 Cdrdao
Cdrdao 1 è un programma per l’incisione di CD-R, che richiede la definizione di un file di testo
contenente tutte le informazioni necessarie a collocare correttamente le tracce audio e dati. Si
fa riferimento a questo file come al «file TOC». Questo fatto può apparire come una complicazione eccessiva per la gestione del programma, ma occorre considerare che oltre all’eseguibile
‘cdrdao’, utilizzato attraverso la riga di comando, è disponibile anche ‘xcdrdao’ che è un pannello frontale interattivo in grado di guidare alla realizzazione di tali file TOC per produrre CD
audio.
È opportuno richiamare la sintassi per l’utilizzo dell’eseguibile ‘cdrdao’, dove in particolare si
distingue un primo argomento contenente un comando, seguito da opzioni eventuali e alla fine
dall’indicazione del file TOC:
cdrdao comando
[opzioni]
file_toc ...
Il problema dell’indicazione dell’unità SCSI è già stato descritto nel capitolo 70, a ogni modo,
quando l’unità del masterizzatore è collegato attraverso un adattatore SCSI, si utilizza l’opzione
‘--device’ nel modo seguente:
--device unità_controllo_scsi ,scsi_id,lun
Per poter approfondire le direttive del file TOC occorrerebbe conoscere adeguatamente il tipo
di informazioni che un CD audio può contenere. In pratica, nella realizzazione di un CD non
professionale non si inseriscono informazioni speciali; in particolare non è sensato l’inserimento
di un numero di identificazione. Pertanto, in condizioni normali è sufficiente fare riferimento a
pochi esempi significativi.
In ogni caso è necessario sapere che le righe vuote e quelle bianche vengono ignorate, mentre i
commenti si indicano preceduti da due barre oblique: ‘//’.
CD_DA
TRACK AUDIO
FILE "data.wav" 0
L’esempio che appare sopra è il caso più semplice in cui si vuole ottenere un CD a partire da
una sola traccia audio, contenuta nel file ‘data.wav’ (di tipo WAV-RIFF), collocato nella directory corrente, senza altre inserzioni particolari. Questo tipo di configurazione si presta pertanto
alla registrazione di una conferenza, di una lezione, o di qualunque altra cosa che non ha senso
spezzettare in tracce distinte.
CD_DA
// Traccia 1
TRACK AUDIO
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "traccia-01.wav" 0
// Traccia 2
TRACK AUDIO
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "traccia-02.wav" 0
L’esempio che appare sopra è un po’ più lungo e mostra l’inserimento di due tracce, corrispondenti ai file ‘traccia-01.wav’ e ‘traccia-02.wav’. Le direttive ‘NO PRE_EMPHASIS’ e
‘TWO_CHANNEL_AUDIO’ sono abbastanza intuitive e rappresentano anche la situazione comune
per la registrazione di un CD.
1
Cdrdao GNU GPL
3848
Masterizzazione di CD audio
CD_ROM
// Traccia 1 dati
TRACK MODE1
DATAFILE "dati.iso9660"
ZERO 00:02:00 // post-gap
// Traccia 2 audio
TRACK AUDIO
SILENCE 00:02:00 // pre-gap
START
FILE "audio-1.wav" 0
// Traccia 3 audio
TRACK AUDIO
FILE "audio-2.wav" 0
Questo esempio ulteriore è il più complesso tra quelli mostrati. Si può osservare la dichiarazione
iniziale come CD-ROM, attraverso la direttiva ‘CD_ROM’. Alla fine della prima traccia (dati),
corrispondente al file ‘dati.iso9660’, viene aggiunto uno spazio, azzerato, della lunghezza di
due secondi. All’inizio della prima traccia audio, corrispondente al file ‘audio-1.wav’, viene
aggiunta una pausa di silenzio di due secondi; la seconda traccia audio inizia normalmente.
Si osservi che in un CD che deve contenere sia dati che audio, conviene che ci sia una sola
traccia dati e che sia la prima.
340.1.1 Copia di un CD
Il comando ‘copy’ di Cdrdao consente di ottenere una copia di un CD. Per ottenere questo risultato, Cdrdao deve essere in grado di riconoscere le tracce e le caratteristiche che le riguardano.
In pratica, la copia avviene generando prima un file TOC in base alle informazioni tratte dal CD,
quindi il CD viene letto generando un file temporaneo unico, infine viene eseguita l’incisione
usando il file temporaneo e il file TOC. Eventualmente è possibile saltare la fase di memorizzazione del file temporaneo, se il lettore è diverso dal masterizzatore e se il primo ha una velocità
di accesso tale da garantire che il flusso di dati non venga interrotto. In pratica, non conviene fare
la copia al volo, anche se le unità di lettura e di scrittura sono distinte.
In questa situazione è importante osservare che il file contenente i dati e le tracce audio è uno
solo, per cui il file TOC che si genera è un po’ particolare, a causa della necessità di delimitare la
posizione delle tracce. A titolo di esempio viene mostrato ciò che si potrebbe ottenere da un CD
audio reale:2
CD_DA
CATALOG "0028942693623"
// Track 1
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
SILENCE 00:00:32
FILE "data.bin" 0 03:11:00
START 00:00:32
2
È per questo che appare la direttiva ‘NO COPY’: si tratta di un CD musicale reale per il quale è comunque vietata
la riproduzione. L’esempio serve a vedere come viene interpretato il contenuto di un CD industriale tipico da parte di
Cdrdao.
Masterizzazione di CD audio
// Track 2
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300346"
FILE "data.bin" 03:11:00 03:13:00
// Track 3
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300347"
FILE "data.bin" 06:24:00 02:44:00
// Track 4
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.bin" 09:08:00 04:20:00
// Track 5
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300349"
FILE "data.bin" 13:28:00 03:06:00
// Track 6
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.bin" 16:34:00 03:27:00
// Track 7
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300351"
FILE "data.bin" 20:01:00 03:24:00
// Track 8
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300352"
FILE "data.bin" 23:25:00 03:53:00
// Track 9
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
3849
3850
FILE "data.bin" 27:18:00 02:07:00
// Track 10
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300354"
FILE "data.bin" 29:25:00 03:06:00
// Track 11
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.bin" 32:31:00 03:28:00
// Track 12
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300356"
FILE "data.bin" 35:59:00 03:00:00
// Track 13
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.bin" 38:59:00 03:47:00
// Track 14
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300358"
FILE "data.bin" 42:46:00 03:16:00
// Track 15
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.bin" 46:02:00 03:29:00
// Track 16
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
ISRC "NLA506300360"
FILE "data.bin" 49:31:00 02:37:00
// Track 17
TRACK AUDIO
NO COPY
Masterizzazione di CD audio
Masterizzazione di CD audio
3851
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.bin" 52:08:00 03:26:00
// Track 18
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "data.bin" 55:34:00 04:06:00
Si può osservare che ogni traccia fa riferimento allo stesso file, qui indicato come ‘data.bin’,
dove ogni volta si indica la posizione iniziale, espressa in minuti, secondi e centesimi di secondo,
assieme alla lunghezza della traccia, indicata nello stesso modo.
L’esempio successivo è ottenuto da un CD-ROM industriale. Si può osservare la presenza di una
sola traccia:
CD_ROM
// Track 1
TRACK MODE1
NO COPY
DATAFILE "data_1" 62:14:27 // length in bytes: 573597696
Infine, ecco come si può copiare un CD, indipendentemente dal fatto che si tratti di un CD-ROM
(dati), di un CD audio, o di un CD dati e audio. In particolare, si fa riferimento a un lettoremasterizzatore collocato nell’unità SCSI numero tre. È evidente che il file TOC, denominato
‘elenco.toc’ viene creato automaticamente.
# cdrdao copy -v 2 --speed 4 --device 0,3,0 --buffers 64 ←,→--paranoia-mode 3 --datafile data.bin elenco.toc
L’esempio crea una copia di un CD utilizzando la stessa unità per la lettura del CD e per la
scrittura successiva. In particolare, oltre alle opzioni che dovrebbero essere già note: il file temporaneo che viene creato è ‘data.bin’ (opzione ‘--datafile data.bin’); viene richiesto un
controllo particolare del CD letto (opzione ‘--paranoia-mode 3’).
In alternativa, per fare più copie dello stesso CD, basta creare un’immagine, con il comando
‘read-cd’, che poi viene riprodotta con il comando ‘write’ normale. Per esempio,
# cdrdao read-cd -v 2 --device 0,3,0 --paranoia-mode 3 ←,→--datafile data.bin elenco.toc
per creare il file ‘data.bin’, assieme al file TOC ‘elenco.toc’, quindi
# cdrdao write -v 2 --speed 4 --device 0,3,0 --buffers 64 elenco.toc
per incidere un CD in base a quanto contenuto nel file ‘elenco.toc’, da ripetere per tutte le
copie che si vogliono ottenere.
340.1.2 Xcdrdao
Xcdrdao è un programma frontale per la realizzazione di file TOC di CD audio, guidando fino
all’operazione di incisione dei CD vergini. Se si vuole arrivare a pilotare l’incisione del CD,
occorre avviarlo con i privilegi dell’utente ‘root’; in tal caso dovrebbe essere in grado di individuare l’unità adatta alla masterizzazione, ma se necessario è possibile intervenire nel menù
Settings alla voce Devices.
Masterizzazione di CD audio
3852
Figura 340.1. Xcdrdao all’avvio senza l’indicazione di un file TOC.
Xcdrdao si compone dell’eseguibile ‘xcdrdao’, che può essere avviato eventualmente indicando
il nome di un file TOC. La figura 340.1 mostra il caso comune di Xcdrdao avviato senza alcuna
indicazione, dove tutto deve essere definito.
xcdrdao
[file_toc]
A titolo di esempio, si suppone di disporre di due file WAV-RIFF da inserire in un CD. La prima
cosa che si fa è quella di dare un nome al file TOC, salvandolo anche se vuoto. Per questo si
seleziona la voce Save As del menù File; si ottiene così una finestra che consente la navigazione
tra le directory e l’indicazione del file che si vuole salvare. Per iniziare a inserire le tracce, si
procede selezionando la voce Add Track dal menù Tools; si ottiene la finestra che si vede nella
figura 340.2, dove già ci si accinge a inserire il file ‘/tmp/wav/1.wav’.
Figura 340.2. Aggiunta delle tracce nel file TOC.
Masterizzazione di CD audio
Dopo la conferma con il pulsante grafico
3853
OK
, si può aggiungere un altro file, in questo caso
‘/tmp/wav/2.wav’. Dopo aver confermato anche l’ultimo inserimento, si conclude selezionan-
do il pulsante grafico C A N C E L . Al termine, per visualizzare la situazione dei file aggiunti, conviene selezionare la voce Fullview dal menù View. Ovviamente conviene anche salvare il file
TOC.
Figura 340.3. Xcdrdao dopo la selezione dei file audio da aggiungere.
Al termine della selezione delle tracce, una volta visualizzato il risultato grafico dell’insieme, è
possibile fare una prova di ascolto del CD, prima ancora di passare all’incisione. Si ottiene questo
semplicemente selezionando il pulsante grafico P L A Y . Al termine si può decidere di passare
all’incisione, attraverso la voce Record dal menù Actions. Ovviamente, in questo modo si va a
pilotare l’eseguibile ‘cdrdao’ con il file TOC sul quale si sta lavorando.
Figura 340.4. Ultima conferma prima dell’incisione del CD.
A titolo di esempio, viene mostrato anche il file TOC generato in questo modo:
Masterizzazione di CD audio
3854
CD_DA
// Track 1
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "/tmp/wav/1.wav" 0 10555247
SILENCE 529
// Track 2
TRACK AUDIO
NO COPY
NO PRE_EMPHASIS
TWO_CHANNEL_AUDIO
FILE "/tmp/wav/2.wav" 0 8461487
SILENCE 421
Si può osservare che sono stati aggiunte in modo predefinito le direttive di opzione ‘NO COPY’,
‘NO PRE_EMPHASIS’ e ‘TWO_CHANNEL_AUDIO’, così come le pause di silenzio alla fine delle
tracce.
340.2 Cdrecord
Cdrecord 3 non è particolarmente adatto alla realizzazione di CD audio, tuttavia è opportuno
completare il quadro mostrando in che modo ciò potrebbe essere fatto con questo programma. In
particolare si utilizza l’opzione ‘-audio’ per specificare che i file successivi sono da intendersi
delle tracce audio.
È opportuno richiamare la sintassi per l’utilizzo dell’eseguibile ‘cdrecord’:
cdrecord
[opzioni_generali]
dev=dispositivo
[opzioni_di_traccia]
file_traccia ...
Il problema dell’indicazione dell’unità SCSI è già stato descritto nel capitolo 70, a ogni modo,
quando l’unità del masterizzatore è collegato attraverso un adattatore SCSI, si specifica l’unità in
uno dei due modi seguenti:
dev=unità_controllo_scsi ,scsi_id,lun
dev=scsi_id,lun
In pratica, il secondo modo può essere utilizzato quando si dispone di un’unica unità di controllo
SCSI.
Per quanto riguarda l’uso delle opzioni ‘-data’ e ‘-audio’, è necessario sapere che Cdrecord
considera automaticamente tracce audio i file che terminano con le estensioni ‘.au’ e ‘.wav’.
Vengono mostrati solo alcuni esempi.
# cdrecord -v -speed=2 dev=3,0 -audio prova_*.wav
Questo esempio rappresenta il caso più comune. Viene richiesta l’incisione di un CD contenuto nell’unità SCSI numero tre del primo adattatore SCSI, a doppia velocità, dei file che
corrispondono al modello ‘prova_*.wav’.
# cdrecord -v -speed=2 dev=3,0 immagine.iso9660 -audio prova_*.wav
Questo esempio ulteriore mostra il caso di un CD contenente una traccia dati e una serie di tracce
audio. In pratica, differisce dall’esempio precedente solo per l’aggiunta dell’indicazione del file
3
Cdrecord GNU GPL
Masterizzazione di CD audio
3855
‘immagine.iso9660’, che si intende un’immagine di un file system ISO 9660. Si osservi la
mancanza dell’opzione ‘-data’, perché non indispensabile.
340.3 Wav2cdr
Wav2cdr 4 è un programma nato originariamente per convertire file WAV-RIFF nel formato CDR,
ovvero quello adatto alla masterizzazione di CD audio. Tuttavia, sia Cdrdao, sia Cdrecord sono
in grado di accettare direttamente file in formato WAV-RIFF, senza bisogno di convertirli prima
in formato CDR, per cui questa funzionalità di Wav2cdr non è più così importante. L’eseguibile
che compie il lavoro è ‘wav2cdr’ e la sua sintassi generale è molto vaga:
wav2cdr opzioni
La caratteristica più importante di Wav2cdr è invece quella di riuscire a individuare facilmente
le pause di silenzio all’interno di un file e di consentirne la suddivisione. Prima di arrivare a
comprendere il meccanismo è necessario prendere confidenza con l’opzione ‘--cut’ che richiede
l’indicazione di una serie di coppie di numeri, secondo l’unità «C», che per Wav2cdr esprime
1/72 di secondo. Per esempio,
--cut 10000C 20000C 20100C 50000C 55000C 70000C
serve a delimitare tre pezzi che vanno dalla posizione 10001 alla 20000, dalla 20101 alla 50000
e dalla 55001 alla 70000. Si osservi quindi che nell’elenco di argomenti dell’opzione ‘--cut’,
il primo numero di ogni intervallo è escluso.
Per individuare le pause in modo automatico, Wav2cdr deve essere informato della durata minima
che queste devono avere e dell’ampiezza sonora massima da considerare come «silenzio» (il
livello di soglia del rumore di fondo). La durata delle pause si definisce attraverso l’opzione
‘--silencedelay’, a cui segue l’indicazione del numero corrispondente a quantità di 1/72 di
secondo (come già visto per l’opzione ‘--cut’), mentre il livello sonoro massimo di queste pause
è definito dall’opzione ‘--silencethresh’, a cui si aggiunge un numero da determinare in base
a delle prove. In generale, il valore predefinito per questo livello sonoro è 10; incrementandolo
si intende superare un rumore di fondo eventuale, come quello contenuto in una registrazione su
nastro magnetico analogico.
Per suddividere un file audio con Wav2cdr si passa generalmente per due stadi: la scansione
del file per individuare gli intervalli, utilizzando l’opzione ‘--silencecuts’, generando un file
contenente l’indicazione di tali intervalli; quindi la suddivisione del file, con l’opzione ‘--cut’,
riutilizzando il file contenente l’elenco dei tagli da fare. Ecco come si potrebbe procedere con
una registrazione ottenuta da una cassetta audio analogica:
$ wav2cdr --inwav --infile prova.wav ←,→--silencecuts --silencedelay 30C --silencethresh 80 > elenco
$ wav2cdr --inwav --towav --infile prova.wav ←,→--outfile traccia --cut ‘cat elenco‘
Come si può intuire, il file WAV-RIFF che viene scandito e poi separato è ‘prova.wav’, mentre
il file contenente l’elenco delle sezioni separate dalla pausa stabilita è ‘elenco’. Il secondo dei
due comandi creerà quindi una serie di file, in questo caso ancora WAV-RIFF in quanto richiesto
espressamente, con nomi corrispondenti al modello ‘traccian ’ (‘traccia01’, ‘traccia02’,
ecc.).
4
Wav2cdr GNU GPL
Masterizzazione di CD audio
3856
Dopo una suddivisione del genere è utile ascoltare i vari file ottenuti per determinare se le suddivisioni sono corrette o meno. Nel caso si voglia eliminare una suddivisione è facile modificare
l’elenco. Per esempio, supponendo di avere l’elenco
0C 2528C
2528C 3236C
3236C 5422C
5422C 6597C
6597C 18907C
18907C 27772C
27772C 40000C
si può decidere di eliminare completamente il primo intervallo, di fondere assieme il secondo
con il terzo e il quarto con il quinto, lasciando stare il resto. Basterebbe modificare l’elenco nel
modo seguente, ottenendo in pratica solo quattro suddivisioni:
2528C 5422C
5422C 18907C
18907C 27772C
27772C 40000C
Alcune opzioni
--cut n_iniziale_escluso C n_finale_incluso C
[n_iniziale_escluso C
]...
n_finale_incluso C
Delimita gli intervalli di tempo da estrarre dal file in ingresso.
--infile nome_file_in_ingresso
Definisce il nome del file audio in ingresso.
--outfile radice_nome_file_in_uscita
Definisce la radice del nome dei file audio ottenuti dalla separazione del file in ingresso. A questo nome viene aggiunto un numero composto da due cifre, per distinguerne la
sequenza.
--inwav
| --incdr
Il file in ingresso è di tipo WAV-RIFF, oppure è in formato CDR.
--towav
| --tocdr
I file da generare devono essere in formato WAV-RIFF oppure CDR.
--silencecuts
Emette l’elenco di intervalli distinguibili dalle pause di silenzio (da definire in base alle
opzioni ‘--silencedelay’ e ‘--silencethresh’). Si osservi che l’elenco viene emesso
attraverso lo standard output, mentre dallo standard error si ottengono ugualmente altre
informazioni generali.
--silencedelay n C
Definisce la durata minima delle pause di silenzio, dove il numero esprime unità di 1/72 di
secondo. Se non si usa questa opzione è stabilita una pausa minima di «30C», pari a 0,4 s.
--silencethresh n
Esprime il livello sonoro massimo, al di sotto del quale si intende si tratti di silenzio. Il
valore predefinito è 10 e valori superiori alzano la soglia del rumore di fondo consentito.
Masterizzazione di CD audio
340.4 Riferimenti
• Jeff Tranter, CDROM HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
• Winfried Trümper, CD-writing HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
3857
Capitolo
341
X-CD-Roast
X-CD-Roast 1 è un sistema di programmi fatti per la masterizzazione di CD audio e dati, raccolti assieme sotto un pannello di controllo grafico per X. X-CD-Roast non è un applicativo
indispensabile, tuttavia promette di essere aggiornato nel tempo e di facilitare sempre di più la
realizzazione di CD.
Come al solito, a questo proposito, occorre ricordare che l’acquisto di un CD audio non dà
implicitamente il diritto di farne quello che si vuole. In generale si ottiene solo il diritto di
ascoltarlo per sé; mentre altre operazioni come la copia, l’esecuzione in pubblico e la trasmissione, sono attività che devono essere autorizzate espressamente da chi detiene i diritti di
quella pubblicazione sonora.
Tra le altre cose, X-CD-Roast facilita notevolmente l’estrazione di tracce dati e audio da un
CD; tuttavia, utilizzare questa tecnica per memorizzare brani musicali o altri dati in un’unità
di memorizzazione qualunque, vuol dire farne una «copia» e ciò rappresenta un’azione che
normalmente è vietata da chi possiede i diritti sulla pubblicazione relativa, salvo che si tratti
di software libero, o di un’altra forma di espressione artistica altrettanto libera.
In generale, a meno di provvedere da soli alla compilazione dei sorgenti di X-CD-Roast, questo applicativo funzionerà bene solo se quello che si installa è un pacchetto fatto proprio per la
propria distribuzione GNU/Linux. In questo modo, tra le altre cose, si garantisce che siano soddisfatte tutte le dipendenze con i vari programmi, la cui presenza è necessaria per tutte le funzioni
che X-CD-Roast è in grado di controllare.
341.1 Configurazione e permessi
Per svolgere le sue funzioni correttamente, X-CD-Roast richiede spesso i privilegi dell’utente
‘root’. Sarebbe meglio che questo programma venisse usato soltanto dall’utente ‘root’, ma
spesso questa limitazione non è tollerabile e si è quasi costretti ad attivare il bit SUID dell’eseguibile ‘xcdroast’ per scavalcare tutti i vincoli. Per limitare il problema le funzioni disponibili
agli utenti comuni che dovessero avviarlo sfruttando la presenza del permesso SUID sono limitate; tuttavia, ciò non può bastare per garantire contro l’uso improprio del programma e tanto meno
per risolvere tutti i problemi di sicurezza che potrebbero apparire in futuro. Quindi, se si decide
di attivare il bit SUID dell’eseguibile ‘xcdroast’, bisogna sapere che il sistema non è più tanto
sicuro (ammesso che prima lo fosse).
Una volta installato per la prima volta X-CD-Roast, prima di manomettere i suoi permessi, l’utente ‘root’ che vuole concedere l’uso dell’applicativo anche agli altri utenti deve avviare una
volta l’eseguibile ‘xcdroast’ con l’opzione ‘-nonroot’. Dopo una prima schermata di avvertimento, con la quale si chiede di prendere atto dei pericoli che si corrono utilizzando questo
applicativo, si arriva alla maschera del menù generale, in cui si vede chiaramente che la modalità
di funzionamento è quella definita come ‘nonroot’. Si veda a questo proposito la figura 341.1.
# xcdroast -nonroot
1
X-CD-Roast GNU GPL
3858
X-CD-Roast
3859
Figura 341.1. Menù iniziale di X-CD-Roast. Si osservi che il programma sta funzionando
in modalità ‘nonroot’.
La prima cosa da fare è quella di definire la configurazione di partenza, per gli aspetti a cui
gli utenti comuni non potranno accedere successivamente. Si fa questo selezionando il pulsante
grafico S E T U P .
Figura 341.2. Configurazione del masterizzatore e del lettore. In questo caso, il lettore
è lo stesso masterizzatore.
In particolare, meritano attenzione le cartelle per la configurazione del masterizzatore e del lettore, oltre all’area da utilizzare per le immagini delle tracce. Nella figura 341.2 si vede che X-CDRoast dovrebbe essere in grado di individuare da solo il tipo di masterizzatore e il tipo di lettore
di CD, ma qui deve essere regolata almeno la velocità di masterizzazione. Nella figura 341.3 si
vede invece la definizione dell’area di memoria da utilizzare per preparare o per scaricare le immagini delle tracce. Se si dispone di un elaboratore di fascia media, è più che sufficiente la scelta
di una directory apposita. Nella figura si mostra l’uso di ‘/tmp/’.
X-CD-Roast
3860
Figura 341.3. Configurazione dell’area di memoria temporanea, nel disco fisso, per le
immagini delle tracce. Si osservi la selezione della directory ‘/tmp/’.
Dopo aver controllato anche le altre cartelle, si può salvare la configurazione selezionando il
pulsante grafico S A V E . Ciò fa sì che venga creato il file di configurazione generale, che potrebbe
essere ‘/etc/xcdroast/xcdroast.conf’, o un altro simile collocato altrove (ma questo fatto
non è auspicabile). Da questo momento in poi, l’utilizzo di X-CD-Roast è sempre in modalità
‘nonroot’ e si può attivare il bit SUID se lo si ritiene opportuno (per uscire dalla configurazione
basta selezionare il pulsante grafico D O N E e quindi E X I T per terminare il funzionamento di
questa sessione di lavoro particolare).
# chmod u+s /usr/bin/xcdroast
In seguito, X-CD-Roast può essere usato anche dagli utenti comuni, che avranno accesso a
una configurazione ridotta; in particolare non potranno cambiare la definizione della memoria temporanea per la gestione delle tracce. La configurazione personalizzata degli utenti viene
memorizzata nel file ‘~/.xcdroast/xcdroast.conf’.
Però, non è ancora tutto finito se si vuole lasciare effettivamente che gli utenti comuni utilizzino
questo programma. Infatti, è necessario regolare i permessi dei file di dispositivo relativi alle
unità a cui deve accedere X-CD-Roast. In generale, i file di dispositivo corrispondenti ai lettori
CD devono avere esclusivamente i permessi di lettura e scrittura per l’utente ‘root’;
# chmod 0600 /dev/sg* /dev/sr* /dev/scd*
ma per consentire la copia rapida, è necessario che gli utenti in questione possano leggere il
dispositivo corrispondente al lettore CD. Se si suppone che il collegamento simbolico ‘/dev/
cdrom’ corrisponda al file di dispositivo corretto, basta intervenire su questo. Prima di modificare
tali permessi, però, si pone il problema di decidere quale libertà dare agli utenti comuni. Se si
decide di concedere l’accesso a tutti, si può usare il comando:
# chmod a+r /dev/cdrom
Invece, se si vuole limitare l’accesso agli utenti che appartengono al gruppo di questo file di
dispositivo (di solito si tratta di ‘disk’), occorre limitare i permessi al gruppo:
# chmod g+r /dev/cdrom
X-CD-Roast deve poter accedere anche al file di dispositivo ‘/dev/dsp’, almeno in scrittura.
Anche in questo caso vale la possibilità di distinguere se si vuole concedere l’accesso solo a chi
appartiene anche al suo gruppo (di solito si tratta di ‘audio’), oppure se si ritiene opportuno
lasciare l’accesso a qualunque utente:
X-CD-Roast
3861
# chmod g+w /dev/dsp
oppure
# chmod a+w /dev/dsp
Se si lasciano i permessi di lettura agli utenti, questi possono ascoltare attraverso la scheda
audio, anche attraverso la rete, arrivando a poter spiare le conversazioni che si svolgono nella
stanza in cui si trova quell’elaboratore. Questo è il motivo per cui si cerca di evitare di dare i
permessi di lettura a questo file di dispositivo.
341.2 Masterizzazione dati
La masterizzazione tradizionale, che parte dalla creazione di un’immagine per arrivare all’incisione di un disco, avviene per mezzo della funzione accessibile tramite il pulsante grafico
M A S T E R CD , del menù principale di X-CD-Roast. La figura 341.4 mostra la selezione della
directory a partire dalla quale si vuole ottenere l’immagine del contenuto.
Figura 341.4. Definizione della directory di partenza per la creazione di un’immagine.
Con il pulsante S E T I M A G E -T Y P E si accede a una maschera con la quale si definiscono
alcuni dettagli importanti sulle caratteristiche dell’immagine. In generale, conviene attivare
simultaneamente sia le estensioni Rock Ridge che quelle Joliet.
Con il pulsante M A S T E R I M A G E si accede alla maschera con la quale poi si può confermare l’avvio della creazione del file contenente l’immagine ISO 9660, che successivamente potrà essere
trasferita nel CD. Per iniziare, basta selezionare il pulsante S T A R T M A S T E R I M A G E . La figura
341.5 mostra la finestra di attesa per il processo di preparazione dell’immagine.
X-CD-Roast
3862
Figura 341.5. Attesa per la preparazione dell’immagine.
Con il pulsante W R I T E I M A G E si accede alla maschera con la quale poi si può confermare l’avvio
dell’incisione del CD vergine. Si osservi nella figura 341.6 la disponibilità di una casella di selezione con la quale si può richiedere di eseguire l’operazione solo in simulazione, per controllare
che il flusso di dati possa avvenire effettivamente alla velocità stabilita.
Con il pulsante V E R I F Y B U R N E D I M A G E si accede alla maschera di controllo del CD appena inciso. Il controllo avviene attraverso la lettura integrale della traccia. Infine, con il pulsante D E L E T E I M A G E S si accede alla maschera con la quale si possono selezionare i file che
rappresentano le immagini contenute nella directory temporanea che funge da serbatoio di questi.
Figura 341.6. Preparazione alla scrittura del CD.
341.3 Copia di un CD contenente dati
La copia di un CD contenente dati consiste nel trasferimento dell’immagine dalla traccia dati
del CD-ROM in un file e nel successivo riutilizzo per l’incisione di un altro CD. L’operazione è
molto semplice, ma bisogna ricordare che questo tipo di copia può essere fatto solo quando i dati
in questione possono essere riprodotti legalmente. Si accede a questa funzione di X-CD-Roast
attraverso il pulsante grafico C O P Y D A T A -CD del menù principale, quindi, in breve:
•
RE A D IM A G E
•
VE R I F Y IM A G E
•
WR I T E IM A G E
legge l’immagine del CD-ROM in un file;
monta l’immagine e ne permette il controllo, prima di incidere un CD;
inizia l’incisione di un nuovo CD;
X-CD-Roast
•
VE R I F Y
3863
BURNED
IM A G E
verifica l’integrità del CD appena inciso;
•
permette di eliminare facilmente le immagini che non servono più dalla
directory che le contiene;
•
Q U I C K CD C O P Y permette di incidere un CD a partire da un originale, senza passare per la
generazione di un file-immagine (ammesso che sia disponibile un altro lettore CD.
DE L E T E IM A G E S
341.4 CD contenente tracce audio
Un CD contenente dati, di solito è composto da una sola traccia, mentre un CD audio è composto
da tante tracce quanti sono i brani musicali contenuti. La riproduzione di un CD audio passa normalmente per l’estrazione di tutte le tracce in altrettanti file, che poi possono essere ricomposte
come si vuole in un altro CD. Per accedere a queste funzionalità, si seleziona il tasto grafico
C O P Y A U D I O -CD del menù principale.
Per l’ennesima volta, si ricorda che queste cose si possono fare solo se sono concesse
espressamente da chi detiene i diritti di autore.
In questa sezione, piuttosto che mostrare in dettaglio come estrapolare le tracce da un CD audio,
per generarne una copia, si preferisce puntare l’attenzione sulla creazione di un CD audio in
proprio. Tuttavia, non ci si devono aspettare risultati eccellenti, dal momento che spesso, per
qualche motivo, i CD che si ottengono non funzionano sugli apparecchi di ascolto comuni.
X-CD-Roast consente di partire da tracce audio in formato grezzo, oppure in formato WAV-RIFF
(16 bit, stereo, 44100 Hz). Il secondo, essendo fornito di intestazione, rappresenta decisamente la
scelta migliore; infatti, se si vuole usare un formato grezzo, occorre poi preoccuparsi di stabilire
l’ordine giusto dei byte.
Una volta preparati i file WAV, questi vanno collocati nella directory in cui X-CD-Roast si aspetta
di trovare le tracce da registrare. Nella figura 341.7 si vede la situazione mostrata dalla maschera
che si raggiunge con il tasto W R I T E T R A C K S , prima di avere selezionato i file WAV da utilizzare
per le tracce del CD da registrare.
È importante che la casellina indicata come ‘Fix Wav-Files’, sia selezionata, come si vede
nella figura.
X-CD-Roast
3864
Figura 341.7. Preparazione alla scrittura del CD audio.
In questo caso si vede già che sono disponibili due file (tracce), dei quali, nessuno è stato ancora
indicato. Per farlo, occorre selezionare il pulsante grafico S E L E C T /S H O W T R A C K S T O W R I T E e,
nella finestra che si ottiene, occorre indicare l’ordine delle tracce. Nella figura 341.8 si vede che
è appena stato indicato questo ordine, mentre nella figura 341.9 si vede il risultato confermato con
la selezione del pulsante grafico R E F R E S H . Al termine, si esce da questa finestra con il pulsante
grafico D O N E .
Figura 341.8. Selezione delle tracce audio.
X-CD-Roast
3865
Figura 341.9. Conferma della selezione delle tracce audio.
Dalla maschera precedente, basta selezionare il pulsante grafico
avviare l’incisione del CD.
ST A R T WR I T E TR A C K S
per
Il CD audio che si ottiene potrebbe non funzionare in un lettore normale di sistemi audio, ma
questa è una carenza del sistema di riproduzione, non del procedimento con cui si realizza il
CD.
341.5 Riferimenti
• Thomas Niederreiter, Manual for X-CD-Roast
<file:///usr/share/doc/xcdroast/README.html>
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
3866
X-CD-Roast
Parte lxx
Transizione verso il software libero
342 File con formati speciali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3868
342.1 Conversione da un insieme di caratteri a un altro . . . . . . . . . . . . . . . . . . . . . . . . . 3868
342.2 File .DBF -- dBase III e derivati . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3870
342.3 File tipici di MS-Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3873
343 DOSEMU: l’emulatore di hardware DOS compatibile . . . . . . . . . . . . . . . . . . . . . . . . . . 3876
343.1 Predisporre un ambiente adatto al Dos all’interno di DOSEMU . . . . . . . . . . . . 3876
343.2 La configurazione di DOSEMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3877
343.3 Installare e utilizzare il Dos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3879
344 Servente X su altre piattaforme grafiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3884
344.1 MI/X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3884
344.2 X-Win32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3886
345 Applicazioni proprietarie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3887
345.1 Motif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3887
345.2 StarOffice 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3887
345.3 StarOffice 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3893
345.4 StarOffice 5.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3895
345.5 Netscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3896
345.6 XV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3898
345.7 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3902
3867
Capitolo
342
File con formati speciali
Uno degli aspetti deleteri dell’informatica è stato il proliferare di formati incompatibili nei file di
dati.
In questo capitolo si raccolgono le informazioni sugli strumenti a disposizione per poter recuperare dati contenuti in file con un formato che in passato hanno avuto una certa diffusione. Come
si può intuire, di solito non si tratta delle dotazioni normali di una distribuzione GNU/Linux,
per cui, i programmi che vengono descritti qui vanno forse cercati tra i «contributi» esterni alla
propria distribuzione.
342.1 Conversione da un insieme di caratteri a un altro
Quando si convertono dati da un formato a un altro, il primo problema è e quello di traslitterare l’insieme di caratteri. Purtroppo, non sempre è possibile «traslitterare» in modo reversibile,
spesso si è costretti ad accettare una trasformazione che non permette più di riottenere lo stesso formato iniziale. Questo fatto si comprende facilmente pensando alla necessità eventuale di
convertire un insieme di caratteri in un altro in cui non si dispone di alcuni simboli del primo.
Un caso particolare riguarda le conversioni di file di testo dove da un sistema di interruzioni di
riga composte dalla sequenza <CR><LF> si vuole passare al solo <LF>. Per qualche motivo,
il file di origine potrebbe contenere qualche codice <LF> isolato, che nel file di destinazione
verrebbe interpretato alla fine come un’interruzione di riga. In pratica, se si volesse riconvertire
il file nel formato precedente, tutti i codici <LF> verrebbero riconvertiti in <CR><LF>.
342.1.1 $ recode
recode
[opzioni]
codifica_prima ..codifica_dopo
[file ...]
‘recode’ 1 è un programma per la conversione di file da un insieme di caratteri a un altro.
‘recode’ non si limita semplicemente a questo; spesso è in grado di intervenire anche su codifi-
che composte da sequenze di caratteri, anche se in queste situazioni il suo utilizzo si complica e
i risultati non sono sempre garantiti.
Osservando lo schema sintattico mostrato, si può vedere che è necessario indicare il tipo di conversione attraverso due parole chiave: la prima serve a stabilire il modo in cui sono codificati i
dati in ingresso, la seconda stabilisce in che modo li si vuole trasformare in uscita.
Uno o più file in ingresso possono essere indicati alla fine della riga di comando, facendo sì che
‘recode’ tenti di sovrascriverli; in alternativa, un file in ingresso può essere fornito attraverso lo
standard input, ottenendo come il risultato della conversione dallo standard output.
Bisogna essere prudenti con ‘recode’ quando si indicano i file nella riga di comando, perché
la conversione potrebbe essere irreversibile.
Nel suo piccolo, ‘recode’ è un programma complesso. Questa sezione mostra solo alcuni aspetti
banali, mentre per sfruttare bene tutte le sue potenzialità è necessario leggere la documentazione
originale: recode.info.
1
recode GNU GPL
3868
File con formati speciali
3869
Alcune opzioni
-a
[codifica] | --auto-check [codifica]
Questa opzione è speciale e di solito viene usata da sola, senza indicare altri argomenti nella
riga di comando di ‘recode’. Serve per ottenere da ‘recode’ un riassunto sulle possibilità
di conversione da o verso la codifica indicata.
-g
| --graphics
Questa opzione riguarda la conversione dall’insieme di caratteri ‘IBM-PC’, a un altro tipo, dove si vuole tentare di trasformare in qualche modo i simboli grafici tipici di quella
codifica. È evidente che questa conversione è irreversibile.
Alcune codifiche
Le codifiche da utilizzare nelle conversioni sono indicate attraverso la notazione
codifica_prima ..codifica_dopo , come si vede nello schema sintattico introduttivo. Le parole chiave utilizzate per questo possono essere indicate indifferentemente utilizzando le
lettere minuscole o maiuscole. L’elenco delle codifiche (e quindi delle trasformazioni possibili) è molto lungo e potrebbe essere ottenuto un riepilogo attraverso l’opzione ‘-a’. Tuttavia, sarebbe meglio leggere prima ciò che è stato annotato nel documento recode.info al
riguardo, per non rischiare di trovarsi poi nei pasticci.
IBM437
| 437 | cp437
Rappresenta la codifica IBM usata normalmente nel Dos. Quando si converte da questa
codifica a un’altra, i codici di interruzione di riga vengono lasciati inalterati.
IBM-PC
| ibmpc
È praticamente la stessa codifica IBM437, con la differenza che quando si converte da
questa codifica a un’altra, i codici di interruzione di riga vengono trasformati.
IBM850
| 850 | cp850
Rappresenta la codifica IBM usata normalmente nel Dos per la localizzazione europea.
ISO_8859-1:1987
l1
| ISO_8859-1 | ISO-8859-1 | CP819 | IBM819 | iso-ir-100 |
| latin1
Si riferisce alla codifica ISO 8859-1.
Esempi
$ recode -a IBM437
Mostra tutte le possibilità di abbinamento con la codifica IBM437.
$ recode -a IBM-PC
Mostra tutte le possibilità di abbinamento con la codifica IBM-PC.
$ recode IBM-PC..ISO_8859-1 lettera
Converte il file ‘lettera’ dalla codifica IBM-PC a ISO 8859-1, sovrascrivendo il file.
$ recode IBM-PC..ISO_8859-1 < lettera > lettera2
Converte il file ‘lettera’ dalla codifica IBM-PC a ISO 8859-1, generando il file
‘lettera2’.
$ recode -g IBM-PC..ISO_8859-1 < schema1 > schema2
Converte il file ‘schema1’ dalla codifica IBM-PC a ISO 8859-1, generando il file
‘schema2’, tentando di convertire anche i simboli grafici.
File con formati speciali
3870
342.2 File .DBF -- dBase III e derivati
Il software basato sui file in formato ‘.DBF’, ovvero quelli di dBase III, è stato molto importante
nell’ambito del sistema operativo Dos. Nel suo piccolo ha permesso agli utenti di quel sistema
operativo di realizzare delle strutture di dati che si avvicinavano alle potenzialità di una base di
dati relazionale.
Ancora oggi si trovano programmi applicativi gestionali basati su questo formato, scritti probabilmente con il famoso compilatore Clipper. Attualmente è disponibile il compilatore Harbour,
che si ripromette di offrire un ambiente totalmente compatibile con il passato; tuttavia è possibile
leggere il contenuto di questi attraverso alcuni piccoli programmi.
342.2.1 $ dbview
dbview
[opzioni]
file_dbf
Il programma ‘dbview’ 2 consente di leggere il contenuto dei file ‘.DBF’ di dBase III e probabilmente anche le versioni di dBase IV. Se viene avviato senza opzioni, si ottiene la visualizzazione
del contenuto del file indicato nel formato predefinito, come si vede dall’esempio seguente:
Articolo
Descr
Prezzo u
Import
Scadenza
Note
:
:
:
:
:
:
1
bicicletta uomo
500.00
T
20011120
2
Articolo
Descr
Prezzo u
Import
Scadenza
Note
:
:
:
:
:
:
2
bicicletta donna
550.00
Articolo
Descr
Prezzo u
Import
Scadenza
Note
:
:
:
:
:
:
3
bicicletta uomo/donna leggera
600.00
20011120
3
20011120
4
In realtà, in questo modo, i nomi dei campi vengono mostrati in modo diverso dal reale, utilizzando anche le lettere minuscole ed eliminando i trattini bassi. Utilizzando l’opzione ‘-r’, il primo
record apparirebbe così:
ARTICOLO
DESCR
PREZZO_U
IMPORT
SCADENZA
NOTE
:
:
:
:
:
:
1
bicicletta uomo
500.00
T
20011111
2
È necessario osservare che i campi booleani (in questo caso si tratta di quello intitolato ‘IMPORT’)
mostrano solo la lettera ‘T’ per il valore Vero, altrimenti non si ha alcuna indicazione; inoltre, le
date vengono espresse secondo il formato AAAAMM GG . Infine, dall’esempio non si intuisce,
ma il campo ‘NOTE’ è di tipo «memo» e in questo caso si sono persi i dati.
I dati contenuti nei file ‘.DBF’, dal momento che sono stati memorizzati presumibilmente con
un sistema operativo Dos, utilizzano molto probabilmente un insieme di caratteri diverso da
2
dbview GNU GPL
File con formati speciali
3871
Latin 1 o comunque diverso da ciò che si utilizza con GNU/Linux. Pertanto, è probabile che sia
necessario rielaborare ciò che si ottiene con ‘dbview’ attraverso un programma di conversione
come ‘recode’. Tuttavia, è bene considerare che nella storia dei file ‘.DBF’ sono state usate
anche codifiche differenti dal solito IBM437 e di questo occorre tenerne conto quando ci si
accorge che la conversione non funziona come ci si aspetterebbe.
Alcune opzioni
--browse
| -b
Se si utilizza questa opzione, i record vengono mostrati su una sola riga per volta, separando
i campi con un simbolo, il separatore, che di solito è costituito dai due punti (‘:’).
--delimiter x
| -d
x
Con questa opzione è possibile specificare il simbolo da utilizzare per separare i campi dei
record che vengono visualizzati. Il simbolo di separazione predefinito sono i due punti (‘:’)
--description
| -e
x
In questo caso, oltre a mostrare il contenuto del file, nella parte iniziale vengono riepilogate
le caratteristiche dei campi contenuti.
--omit
| -o
x
Non elenca il contenuto del file, ma si limita a dare le altre informazioni se richieste
attraverso le opzioni opportune.
--reserve
| -r
x
Mostra i nomi dei campi così come sono stati memorizzati.
Esempi
$ dbview articoli.dbf
Elenca il contenuto del file ‘articoli.dbf’ nella forma predefinita.
$ dbview -b articoli.dbf
Mostra i record utilizzando una sola riga per ognuno.
$ dbview -b articoli.dbf | recode ibm437:latin1
Come nell’esempio precedente, ma utilizza ‘recode’ per trasformare i caratteri speciali
che altrimenti non sarebbero visibili correttamente (per esempio le lettere accentate).
342.2.2 $ dbf2pg
dbf2pg
[opzioni]
file_dbf
Il programma ‘dbf2pg’ 3 consente di leggere il contenuto di un file ‘.DBF’ e di inserire i dati
relativi in una tabella di una base di dati di PostgreSQL (capitolo 324 e successivi). In base
alle opzioni che vengono indicate, i dati possono essere aggiunti a una tabella esistente, oppure
possono sostituire le righe di tale tabella, oppure si può creare una tabella da zero. Quello che
conta è che i permessi fissati attraverso PostgreSQL consentano l’accesso e le operazioni che si
intendono svolgere.
3
dbf2pg software libero con licenza speciale
File con formati speciali
3872
‘dbf2pg’ non è in grado di trasferire i campi «memo», quelli che tradizionalmente venivano
creati utilizzando file con estensione ‘.DBT’.
Alcune opzioni
-v
-vv
Permette di avere informazioni sulle operazioni svolte, ottenendo un dettaglio maggiore nel
secondo caso.
-h host
Permette di specificare il nodo a cui accedere per connettersi con il servente di PostgreSQL.
In mancanza di questa indicazione, viene tentato l’accesso a localhost.
-d base_di_dati
Permette di specificare il nome della base di dati a cui ci si vuole connettere. In mancanza
di questa indicazione, viene tentata la connessione con la base di dati ‘test’.
-t tabella
Permette di specificare il nome della tabella in cui si vogliono trasferire i dati del file ‘.DBF’.
In mancanza di questa indicazione, viene tentato l’inserimento nella tabella ‘test’.
-D
Con questa opzione, si fa in modo di cancellare il contenuto della tabella di destinazione,
prima di iniziare l’inserimento dei dati.
-c
Richiede espressamente che sia creata la tabella di destinazione. In mancanza di questa
opzione, la tabella deve essere già disponibile, altrimenti l’operazione fallisce. Nel caso
si utilizzi questa opzione mentre una tabella con lo stesso nome esiste già, si ottiene la
cancellazione del suo contenuto prima di iniziare, come se fosse stata usata al suo posto
l’opzione ‘-D’.
-f
Prima di procedere, converte i nomi dei campi in modo che questi siano scritti utilizzando
solo lettere minuscole.
-l
-u
Con l’opzione ‘-l’ si fa in modo che il contenuto dei campi venga convertito in lettere
minuscole, mentre con l’opzione ‘-u’ si ottiene una conversione in maiuscole.
-s nome_vecchio =nome_nuovo
[,nome_vecchio =nome_nuovo ]...
Con questa opzione si può stabilire la sostituzione di alcuni nomi dei campi della tabella.
Ciò può essere particolarmente utile nel caso in cui i nomi originali siano incompatibili con
PostgreSQL.
-s n_riga_iniziale
-e n_riga_finale
Le opzioni ‘-s’ e ‘-e’ permettono di definire l’intervallo di righe da trasferire, dove nel
primo caso si indica la riga iniziale e nel secondo quella finale. Se non si indicano, il
trasferimento parte dall’inizio e prosegue fino alla fine.
Esempi
$ dbf2pg -d Anagrafe -c -t Indirizzi address.dbf
File con formati speciali
3873
Crea la tabella ‘Indirizzi’ nella base di dati ‘Anagrafe’ disponibile presso l’elaboratore
locale, prelevando i dati dal file ‘address.dbf’.
$ dbf2pg -h localhost -d Anagrafe -c -t Indirizzi address.dbf
Esattamente come nell’esempio precedente, con l’indicazione precisa del nodo locale.
342.3 File tipici di MS-Windows
Alcuni formati di file utilizzati con MS-Windows sono considerati da molti degli «standard». Tra
tutti, il più «importante» è quello di MS-Word, con in più il problema che di questo ne esistono
molte versioni.
342.3.1 $ mswordview
mswordview
[opzioni]
file_doc
‘mswordview’ 4 è un programma il cui scopo è quello di convertire file di MS-Word in HTML.
La conversione non può essere perfetta, ma il progetto è condotto con impegno e i risultati che
dà questo programma sono buoni.
Inizialmente, ‘mswordview’ è in grado di convertire i file di MS-Word 8, ma dovrebbero
aggiungersi successivamente anche i formati precedenti.
‘mswordview’ è in grado di convertire solo un file alla volta, precisamente quello che viene
indicato alla fine degli argomenti. Se non viene richiesto qualcosa di particolare attraverso le
opzioni, ‘mswordview’ tenta di creare un file con lo stesso nome di quello che viene convertito,
con l’aggiunta dell’estensione ‘.html’. Inoltre, se il file contiene delle immagini incorporate,
queste vengono trasferite su file esterni.
Alcune opzioni
-o file_html
| --outputfile
file_html
Permette di indicare esplicitamente il file HTML che si vuole generare.
-g file_errori
| --errorfile
file_errori
Permette di annotare gli errori incontrati durante la conversione nel file indicato.
342.3.2 $ catdoc
catdoc
catdoc
[opzioni]
[opzioni]
file_doc
< file_doc
5
è un programma molto semplice, che si sostituisce idealmente a ‘cat’ quando si
tratta di visualizzare il contenuto di file scritti in formato MS-Word. Il suo funzionamento è
intuitivo e in generale non servono opzioni: il file indicato come argomento, o fornito attraverso
lo standard input, viene emesso dallo standard output dopo una conversione in formato testo. Se
il file originale contiene in realtà solo testo puro, non avviene alcuna conversione.
‘catdoc’
4
5
mswordview GNU GPL + alcuni file con licenza speciale
catdoc GNU GPL
File con formati speciali
3874
Alcune opzioni
-b
Cerca di elaborare anche file MS-Word che apparentemente non lo sono, a causa di una
firma iniziale errata.
-mn
Specifica il margine destro del testo ottenuto. Il margine predefinito è a colonna 72. Si
osservi che l’opzione ‘-m0’ equivale a ‘-w’.
-w
Specifica il margine destro del testo ottenuto di lunghezza indefinita, in modo da ottenere
che i paragrafi occupino una riga intera.
-v
Genera alcune informazioni diagnostiche prima del testo trasformato.
Configurazione
Per quanto semplice, ‘catdoc’ prevede una configurazione, composta dal file ‘/etc/
catdocrc’ per il sistema e dai file ‘~/.catdocrc’ per gli utenti. Senza entrare nel
dettaglio delle direttive di configurazione, è il caso di descrivere quella che rappresenta
l’impostazione comune:
charset_path=/usr/lib/catdoc
map_path=/usr/lib/catdoc
source_charset=cp1252
target_charset=8859-1
unknown_char=’?’
Come si può intuire, le direttive ‘charset_path’ e ‘map_path’ servono a indicare la collocazione di file utilizzati da ‘catdoc’ per la conversione. La direttiva ‘source_charset’
permette di stabilire la codifica predefinita del file sorgente, quando questo non appare utilizzare la UTF-16. La direttiva ‘target_charset’ permette di definire la codifica da usare
per il testo generato; come si vede nell’esempio viene usata la codifica ISO 8859-1. Infine,
è possibile stabilire in che modo mostrare i caratteri che non possono essere rappresentati,
attraverso la direttiva ‘unknown_char’, che in questo caso usa il punto interrogativo.
Esempi
$ catdoc pippo.doc | less
Visualizza il contenuto del file ‘pippo.doc’, con l’aiuto di ‘less’ per scorrerlo.
$ catdoc pippo.doc > pippo.txt
Genera il file ‘pippo.txt’ a partire da ‘pippo.doc’.
342.3.3 $ antiword
antiword
[opzioni]
file_doc ...
‘antiword’ 6 è un programma molto semplice per convertire file dal formato MS-Word (versione
6 o successiva) in testo puro e semplice, oppure in PostScript , estrapolando anche le immagini. Il
suo funzionamento è intuitivo e in generale non servono opzioni: il file indicato come argomento,
viene emesso attraverso lo standard output dopo la conversione.
6
Antiword GNU GPL
File con formati speciali
3875
Alcune opzioni
-t
Genera una conversione in formato testo puro e semplice. L’uso di questa opzione è
implicito.
-w n_colonne
Permette di specificare, nell’ambito di una conversione in formato testo, l’ampiezza del
testo in caratteri. Se si utilizza il valore zero, si ottiene ogni paragrafo in una sola riga.
-m file_mappa
Consente di indicare la conversione che si vuole ottenere da Unicode in un insieme di caratteri a 8 bit. Se non si usa questa opzione, è come se fosse stato stabilito ‘-m 8859-1.txt’,
corrispondente alla richiesta di ottenere una conversione nello standard ISO 8859-1. Questi
file di conversione dovrebbero trovarsi nella directory ‘/usr/share/antiword/’.
-p dimensioni_carta
L’utilizzo di questa opzione richiede implicitamente la conversione in formato PostScript,
mentre in condizioni normali si ottiene un testo puro e semplice. L’argomento dell’opzione
stabilisce la dimensione della carta e può trattarsi delle parole chiave seguenti, con il significato intuitivo che hanno: ‘10x14’, ‘a3’, ‘a4’, ‘a5’, ‘b4’, ‘b5’, ‘executive’, ‘folio’,
‘legal’, ‘letter’, ‘note’, ‘note’, ‘quarto’, ‘statement’, ‘tabloid’.
-L
Nell’ambito di una conversione in PostScript, indica un orientamento orizzontale del foglio.
-i livello_di_visualizzazione_immagini
Consente di specificare cosa fare delle immagini che fossero eventualmente contenute
nel file di partenza. L’argomento è un numero che ha il significato descritto nell’elenco
seguente.
• 0 genera un file compatibile con Ghostscript, ma non adatto a stampanti PostScript
comuni. Tuttavia, in condizioni normali, se si arriva alla stampa, si passa generalmente
per Ghostscript, per cui questo valore è quello che può essere adatto.
• 1 non estrapola le immagini.
• 2 PostScript livello 2.
• 3 PostScript livello 3.
-s
Include anche il testo nascosto, indicato come tale nel file originale.
Esempi
$ antiword pippo.doc | less
Visualizza il contenuto del file ‘pippo.doc’, con l’aiuto di ‘less’ per scorrerlo.
$ antiword -p a4 pippo.doc > pippo.ps
Genera il file ‘pippo.ps’ (PostScript, A4) a partire da ‘pippo.doc’.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
343
DOSEMU: l’emulatore di hardware DOS compatibile
DOSEMU 1 è fondamentalmente un emulatore dell’hardware x86 per vari sistemi Unix funzionanti su architettura i386. Il suo obiettivo è quello di permettere il funzionamento del sistema
operativo Dos (MS-Dos o cloni). Si tratta di un progetto eternamente in fase di sviluppo (alpha),
anche se da diversi anni è sufficientemente funzionante. Tuttavia non ci sono punti fermi: da una
versione all’altra si possono incontrare novità imprevedibili.
Dal momento che l’emulazione riguarda l’hardware, il Dos deve essere installato all’interno di
questo sistema di emulazione; quindi, è necessaria una copia di questo sistema operativo, insieme
alla licenza d’uso.
DOSEMU permette di utilizzare la stessa copia installata del Dos su più terminali contemporaneamente. Se si intende concedere l’utilizzo simultaneo di una singola copia di questo sistema
operativo, è necessario un numero maggiore di licenze d’uso, oppure una licenza multipla.
A fianco del lavoro su DOSEMU è anche in corso quello sul progetto FreeDOS per un sistema
operativo Dos libero (capitolo 366).
343.1 Predisporre un ambiente adatto al Dos all’interno di
DOSEMU
Perché il sistema operativo Dos possa funzionare all’interno di DOSEMU, occorre preparare un
file-immagine di un disco Dos dal quale si possa effettuare l’avvio del Dos stesso. Questo file
che viene descritto di seguito, verrà visto dal Dos come disco ‘C:’.
Successivamente è conveniente predisporre uno spazio all’interno del file system del proprio
sistema GNU/Linux da utilizzare per i programmi Dos che verrà letto come un disco di rete.
343.1.1 Un disco C: immagine
Per effettuare l’avvio del Dos occorre che sia predisposta l’immagine di un disco di piccole
dimensioni. Questo potrebbe essere un file contenuto nella directory ‘/var/lib/dosemu/’,
oppure ‘/var/state/dosemu/’, il cui nome inizia normalmente per ‘hdimage’.
Attualmente, il file dovrebbe chiamarsi ‘hdimage.first’ e al limite potrebbe essere un
collegamento simbolico a un altro file che costituisce l’immagine vera e propria.
Se non esiste questo file è necessario copiarlo dal pacchetto sorgente. Il nome dovrebbe essere
‘hdimage.dist’, o qualcosa di simile. Questa immagine verrà preparata in seguito.
1
DOSEMU GNU GPL
3876
DOSEMU: l’emulatore di hardware DOS compatibile
3877
343.1.2 Un disco D: virtuale o di rete
In questa fase conviene preparare una directory che servirà per definire l’inizio (la radice) del
disco ‘D:’ virtuale utilizzato dai programmi Dos. Stabiliamo che questo sia ‘/var/emul/dos/’.
Da questo punto in poi, ‘D:\’ è equivalente a ‘/var/emul/dos/’.
343.1.3 La struttura essenziale del disco D: virtuale
Il disco ‘D:’ virtuale dovrebbe contenere alcune directory che riproducono in pratica il classico
ambiente Dos:
• ‘D:\TEMP\’
equivalente a ‘/var/emul/dos/temp/’;
• ‘D:\DOS\’
equivalente a ‘/var/emul/dos/dos/’.
Per evitare la proliferazione di directory temporanee, è possibile utilizzare al posto di ‘/var/
emul/dos/temp/’ un collegamento simbolico che punti a ‘/tmp/’.
# ln -s /tmp /var/emul/dos/temp
343.2 La configurazione di DOSEMU
La configurazione di DOSEMU consiste nella modifica dei file ‘/etc/dosemu.conf’ e di
‘/etc/dosemu.users’. Il file ‘/etc/dosemu.users’ permette di definire gli utenti che
possono utilizzare DOSEMU, mentre l’altro stabilisce tutte le altre caratteristiche.
Purtroppo, la configurazione di DOSEMU, specialmente per ciò che riguarda il file ‘/etc/
dosemu.conf’, è complessa e cambia da versione a versione. Inoltre, DOSEMU può costituire
anche un problema per la sicurezza del sistema dal momento che di solito l’eseguibile ‘dos’,
deve essere SUID-root (cioè deve appartenere a ‘root’ e avere il bit SUID attivato) per utilizzare
funzionalità particolari dell’hardware (soprattutto l’adattatore grafico VGA).2
343.2.1 /etc/dosemu.users
DOSEMU permette di distinguere alcune categorie di utenti, attribuendogli privilegi differenti, in base a una diversa configurazione nel file ‘/etc/dosemu.conf’. Tali categorie di utenti
dipendono quindi dalla configurazione di questo file.
Il file ‘/etc/dosemu.users’ può contenere righe di commento, introdotte dal simbolo ‘#’, righe
bianche o vuote, che vengono ignorate, e direttive espresse dalla sintassi seguente:
utente
[variabile_di_configurazione ...]
In pratica, si possono abbinare a un utente una o più variabili di configurazione che fanno riferimento a elementi del file ‘/etc/dosemu.conf’. È da osservare, in particolare, che si può
indicare anche un utente particolare, ‘all’, per fare riferimento a tutti gli utenti a cui non si fa
menzione in modo esplicito.
2
Se ci si accontenta di uno schermo a caratteri, senza grafica e senza cornici, non dovrebbe essere necessario attivare
il bit SUID.
DOSEMU: l’emulatore di hardware DOS compatibile
3878
A titolo di compromesso, viene mostrato un esempio di configurazione del file ‘/etc/
dosemu.users’ che dovrebbe essere sufficiente nella maggior parte delle situazioni. Si tratta in pratica della versione standard distribuita assieme a DOSEMU, con l’aggiunta di qualche
utente ipotetico.
# This is a sample /etc/dosemu.users file
# For more details look at ./doc/README.conf
root c_all
nobody guest
guest guest
#
#
#
#
root is allowed to do all weird things
variable ’guest’ is checked in /etc/dosemu.conf
to allow only DEXE execution
login guest treated as ’nobody’
# Utenti inseriti normalmente
tizio
caio
semproni
# If you want to allow limited dosemu to all users, uncomment the line below
#all restricted
# all other users have normal user restrictions
Come si intuisce, l’utente ‘root’ ha tutti i diritti necessari a compiere quello che vuole dall’interno di DOSEMU. Sono previsti gli utenti ‘nobody’ e ‘guest’, a cui sono concesse solo poche
cose, mentre agli utenti ‘tizio’, ‘caio’ e ‘semproni’ sono concessi privilegi normali. Infine,
appare commentata la direttiva ‘all restricted’, con la quale si potrebbe consentire l’utilizzo
di DOSEMU a tutti gli altri utenti, con privilegi ridotti.
343.2.2 /etc/dosemu.conf
La preparazione di ‘/etc/dosemu.conf’ è invece più delicata. Il file di esempio già fornito all’interno del pacchetto di distribuzione di DOSEMU è commentato molto dettagliatamente, però
è anche molto complesso. Di seguito vengono indicate solo alcune parti particolarmente importanti. Le altre direttive di questo file, possono essere lasciate come sono, ignorandole, almeno
fino a quando non si raggiunge una buona esperienza con l’uso di DOSEMU.
# Viene impostata la mappa della tastiera per uniformarsi alla
# disposizione dei tasti in Italia.
$_rawkeyboard = (1)
# bypass normal keyboard input, maybe dangerous
$_layout = "it"
# one of: finnish(-latin1), de(-latin1), be, it, us
# uk, dk(-latin1), keyb-no, no-latin1, dvorak, po
# sg(-latin1), fr(-latin1), sf(-latin1), es(-latin1)
# sw, hu(-latin2), hu-cwi, keyb-user
$_keybint = (on)
# emulate PCish keyboard interrupt
# Vengono definite le potenzialità dello schermo
# (per poter utilizzare la grafica, come impostato in questo
# esempio, occorre avviare il programma dos con i privilegi
# dell’utente root).
$_video = "vga"
# one of: plainvga, vga, ega, mda, mga, cga
$_console = (1)
# use ’console’ video
$_graphics = (1)
# use the cards BIOS to set graphics
$_videoportaccess = (1) # allow videoportaccess when ’graphics’ enabled
$_vbios_seg = (0xc000) # set the address of your VBIOS (e.g. 0xe000)
$_vbios_size = (0x10000)# set the size of your BIOS (e.g. 0x8000)
$_vmemsize = (1024)
# size of regen buffer
$_chipset = ""
# one of: plainvga, trident, et4000, diamond, avance
# cirrus, matrox, wdvga, paradise
$_dualmon = (0)
# if you have one vga _plus_ one hgc (2 monitors)
# Viene definito l’uso dei dischetti e dell’immagine del disco C:.
$_floppy_a ="threeinch" # or "fiveinch" or empty, if not existing
DOSEMU: l’emulatore di hardware DOS compatibile
$_floppy_b = ""
3879
# ditto for B:
$_hdimage = "hdimage.first" # list of hdimages under /var/lib/dosemu
# assigned in this order such as
# "hdimage_c hdimage_d hdimage_e"
# If the name begins with ’/dev/’, then partition
# access is done instead of virtual hdimage such as
# "/dev/hda1" or "/dev/hda1:ro" for readonly
# Currently mounted devices and swap are refused.
# Hdimages and devices may be mixed such as
# "hdimage_c /dev/hda1 /dev/hda3:ro"
# Note: ’wholedisk’ is _not_ supported.
$_hdimage_r = $_hdimage # hdimages for ’restricted access (if different)
# Viene definita la stampante.
$_printer = "lp"
# list of (/etc/printcap) printer names to appear as
# LPT1, LPT2, LPT3 (not all are needed, empty for none)
$_printer_timeout = (20)# idle time in seconds before spooling out
$_ports = ""
# list of portnumbers such as "0x1ce 0x1cf 0x238"
# or "0x1ce range 0x280,0x29f 310"
# or "range 0x1a0,(0x1a0+15)"
343.3 Installare e utilizzare il Dos
Il prossimo problema è quello di riuscire a installare il Dos nel file-immagine che servirà per
effettuare l’avvio del Dos stesso. L’immagine in questione, che probabilmente è il file ‘/var/
lib/dosemu/hdimage.first’, contiene già una serie di programmi Dos che fanno parte di
DOSEMU e come tali non vanno cancellati. Ma l’immagine che viene distribuita così non è
avviabile e il problema è proprio quello di inserirvi il kernel del Dos e l’interprete dei comandi
‘COMMAND.COM’, salvo il caso in cui sia già presente una versione di FreeDOS.
1. Preparazione di un dischetto di avvio
Per prima cosa occorre preparare un dischetto Dos avviabile che contenga qualche programma di servizio indispensabile. Da un elaboratore che stia eseguendo il sistema operativo Dos
si procede come segue:
C:> FORMAT A: /S
C:> COPY C:\DOS\SYS.* A:
C:> COPY C:\DOS\FDISK.* A:
Oltre a questi file converrebbe preparare nel dischetto un programma per la creazione e
modifica di file di testo. Servirà per preparare i file ‘CONFIG.SYS’ e ‘AUTOEXEC.BAT’.
2. Avvio del dischetto attraverso DOSEMU
È necessario quindi avviare il Dos contenuto nel dischetto appena creato attraverso
DOSEMU. Per fare questo, dall’elaboratore GNU/Linux si avvia DOSEMU nel modo
seguente:
# dos -A
Se tutto è andato bene si avvia il Dos; quindi, dopo la richiesta della data e dell’ora appare l’invito classico (il prompt), per l’inserimento dei comandi attraverso la shell
(‘COMMAND.COM’).
A:\>
DOSEMU: l’emulatore di hardware DOS compatibile
3880
3. Trasferimento del sistema
Per trasferire nel file-immagine il sistema contenuto nel dischetto, in modo da rendere questa immagine avviabile, occorre procedere prima con la creazione di un MBR (Master boot
record):
A:\> FDISK /MBR
quindi con il trasferimento del sistema:
A:\> SYS C:
Se è andato tutto bene, adesso il disco ‘C:’, cioè l’immagine, è pronto.3
4. Controllo del disco C:
Il disco ‘C:’ dovrebbe contenere alcuni file di DOSEMU. Per verificare il contenuto è
sufficiente spostarsi in ‘C:’.
A:\> C:
C:\> DIR
5. Modifica di config.sys
Trovandosi in ‘C:’, potrebbe essere conveniente modificare i file ‘CONFIG.SYS’ e
‘AUTOEXEC.BAT’. Si inizia con ‘CONFIG.SYS’.
Si stabilisce di poter utilizzare tutte le lettere di unità (drive) a disposizione.
LASTDRIVE=Z
Si definisce attraverso il driver ‘EMUFS.SYS’ di DOSEMU che la prossima lettera di disco
a disposizione punti alla directory ‘/var/emul/dos/’. Di conseguenza, quella directory
verrà interpretata come disco ‘D:’
DEVICE=C:\EMUFS.SYS /var/emul/dos
Viene avviato il driver ‘EMS.SYS’ di DOSEMU che si occupa della gestione della memoria
estesa.
DEVICE=C:\EMS.SYS
Se in seguito sarà opportuno, si potrà sempre apportare modifiche a questo file.
6. Modifica di ‘AUTOEXEC.BAT’
Inizialmente il file non necessita di modifiche. Si vedrà in seguito come configurare al
meglio questo file.
7. Conclusione dell’installazione
Per terminare la sessione di lavoro dell’installazione occorre fare terminare l’esecuzione di
DOSEMU che era stato avviato in precedenza con il comando ‘dos -A’. Per chiudere si
utilizza il programma ‘EXITEMU.COM’:
C:\> C:\EXITEMU
8. Verifica
Se tutto è andato come previsto, il Dos è pronto. Si può provare ad avviare il Dos senza
l’uso del dischetto semplicemente con il comando:
$ dos
Se ha funzionato, si otterrà l’invito normale:
3
Il comando ‘FDISK /MBR’ riguarda precisamente MS-Dos, mentre nel caso di cloni le cose potrebbero essere
differenti; per esempio potrebbe essere necessario avviare il programma nel modo solito e poi specificare la richiesta
selezionando una voce da un menù.
DOSEMU: l’emulatore di hardware DOS compatibile
3881
C:\>
Per uscire si utilizza il programma ‘EXITEMU.COM’:
C:\> EXITEMU
343.3.1 I dischi virtuali con LREDIR.COM
Il programma ‘LREDIR.COM’ è in grado di consentire l’accesso a porzioni del file system di
GNU/Linux attribuendo una lettera di unità. Per esempio:
C:\> LREDIR X: \linux\fs\/home
fa sì che il disco ‘X:’ corrisponda al contenuto della directory ‘/home/’. Invece,
C:\> LREDIR Y: \linux\fs\${home}
fa sì che il disco ‘Y:’ corrisponda al contenuto della directory personale dell’utente che sta usando
DOSEMU.
343.3.2 Il mouse
Teoricamente, DOSEMU è in grado di gestire da solo il mouse. In pratica potrebbe non essere così. In tal caso conviene provare ad avviare un programma apposito all’interno del ‘CONFIG.SYS’
o di ‘AUTOEXEC.BAT’.
343.3.3 Un esempio di AUTOEXEC.BAT
Nell’esempio seguente viene utilizzato un programma per la gestione del mouse estraneo a DOSEMU. Il disco ‘D:’ era stato definito implicitamente all’interno di ‘CONFIG.SYS’ attraverso
‘DEVICE=C:\EMUFS.SYS /var/emul/dos’.
@echo off
LREDIR H: linux\fs\${home}
LREDIR R: linux\fs\/mnt/cdrom
PROMPT=$p$g
PATH=c:\
PATH=%PATH%;D:\;D:\DOS
SET TEMP=D:\TEMP
D:
D:\DOS\MOUSE
ECHO "Questo è DOSEMU. Benvenuto!"
343.3.4 DOSEMU e le console virtuali
Quando viene avviato il Dos attraverso DOSEMU, questo opera nella console virtuale sulla quale ci si trova. Di solito, per passare da una console virtuale all’altra è sufficiente premere la
combinazione [ Alt+F1 ] o [ Alt+F2 ]... Quando ci si trova su una console virtuale all’interno della
quale sta funzionando il Dos, per passare a un’altra si agisce con la combinazione [ Ctrl+Alt+F1 ]
o [ Ctrl+Alt+F2 ]...
3882
DOSEMU: l’emulatore di hardware DOS compatibile
343.3.5 DOSEMU da X
Per avviare il Dos in una finestra del sistema grafico X, conviene avviare DOSEMU attraverso
‘xdos’ che normalmente è un collegamento simbolico a ‘dos’.
343.3.6 DOSEMU e Mtools
Nelle sezioni precedenti si è visto l’uso del file-immagine ‘/var/lib/dosemu/hdimage’, che
costituisce normalmente il disco ‘C:’ per DOSEMU. Questo file non è gestibile con strumenti
Unix normali, soprattutto perché non è un’immagine standard. Si tratta dell’immagine di un
piccolo disco fisso contenente una partizione, con l’aggiunta di un’intestazione aggiuntiva.
Questo disco ‘C:’ può essere utilizzato principalmente attraverso strumenti Dos all’interno di
DOSEMU, così come è stato già mostrato, oppure può essere raggiunto anche tramite Mtools,
purché configurato opportunamente. Infatti, è sufficiente informare Mtools sulla posizione esatta
in cui ha inizio la prima partizione all’interno del file-immagine, per potervici accedere anche con
questo strumento. Potrebbe trattarsi della direttiva seguente, nel file di configurazione ‘/etc/
mtools.conf’.
drive n: file="/var/lib/dosemu/hdimage.first" partition=1 offset=128
In tal modo, per Mtools, il disco ‘N:’ corrisponderebbe al disco ‘C:’ di DOSEMU.
È importante fare attenzione al valore dello scostamento (offset) che potrebbe cambiare da una
versione all’altra di DOSEMU.
343.3.7 Implicazioni sulla gestione dei permessi
Il Dos non è un sistema operativo multiutente e di conseguenza non è in grado di attribuire dei
permessi ai file. Quando si utilizza il Dos all’interno di DOSEMU, i permessi vengono gestiti in
modo predefinito.
Quando si crea un file gli vengono attribuiti i permessi predefiniti in base a quanto stabilito con
la maschera dei permessi; inoltre, l’utente e il gruppo proprietario corrispondono all’utente che
ha avviato DOSEMU e al gruppo cui questo utente appartiene.
Quando si accede a un file, l’apparenza delle caratteristiche di questo cambiano a seconda che
l’accesso avvenga da parte di un utente rispetto a un altro: l’utente che ha creato il file può
modificarlo, un altro potrebbe trovarlo protetto in sola lettura.
In particolare, i file contenuti nel file-immagine che costituisce il disco ‘C:’ hanno le proprietà e
i permessi del file-immagine stesso.
Ma il Dos non è in grado di gestire tutte le finezze che può invece amministrare un sistema Unix,
di conseguenza, quando si tenta di fare qualcosa che i permessi non consentono, si ottengono per
lo più delle segnalazioni di errore che normalmente non si vedono quando si usa il Dos da solo
senza emulazioni.
Quando si utilizza il Dos con DOSEMU su un sistema al quale accede un solo utente, non dovrebbero porsi problemi: basta che l’unico utente utilizzi sempre lo stesso nominativo (lo stesso
UID). Quando lo si utilizza invece in un sistema al quale accedono più utenti, è ragionevole desiderare che i dati personali possano essere inaccessibili agli altri; quindi, questo modo trasparente
di gestire i permessi può essere solo positivo. Quando si vogliono gestire alcune attività in gruppo
DOSEMU: l’emulatore di hardware DOS compatibile
3883
si può aggirare eventualmente l’ostacolo utilizzando un utente comune creato appositamente per
quel compito.
Un’ultima annotazione deve essere fatta per i file eseguibili che non necessitano dei permessi
di esecuzione, come invece richiederebbe GNU/Linux. È generalmente sufficiente che ci siano
i permessi di lettura. A volte sono necessari anche quelli in scrittura, ma prima di dare questi
permessi è meglio verificare, onde evitare di lasciare campo libero a un possibile virus.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
344
Servente X su altre piattaforme grafiche
Una delle caratteristiche importanti di X è quella di permettere l’utilizzo di un servente grafico
in una stazione di lavoro diversa dall’elaboratore in cui il programma applicativo viene eseguito
realmente.
Normalmente, quando la propria rete locale è composta sia da elaboratori con sistema operativo
Unix che di altro tipo, si può accedere agli elaboratori Unix attraverso il protocollo TELNET,
ma con questo strumento manca la possibilità di utilizzare le applicazioni che usano la grafica.
Per questo occorre un programma che svolga le funzioni di X anche nelle altre piattaforme.
Generalmente, tale programma sfrutta l’ambiente grafico del sistema operativo in cui si trova a
funzionare.
Un software del genere è anche chiamato terminale X , perché in pratica permette l’utilizzo di un
elaboratore come terminale grafico per le applicazioni X.
344.1 MI/X
MI/X 1 è un servente X in grado di gestire le finestre di applicazioni in funzione su altri elaboratori. Può funzionare solo se nell’elaboratore in cui viene installato è attivata la gestione delle
connessioni TCP/IP.
Ne esistono due versioni: una per MS-Windows 95/98/NT/2000 e una per MacOS. È prodotto da
MicroImages, Inc., <http://www.microimages.com/>, che ne rilascia una versione gratuita, non molto
sofisticata, ma funzionante.
L’installazione di questo servente non richiede alcuna configurazione particolare, bisogna però ricordarsi di avviarlo prima di tentare di utilizzare applicativi che ne richiedono la presenza.
Basta fare una connessione TELNET con l’elaboratore dal quale si vogliono avviare gli applicativi da utilizzare attraverso il servente grafico e ricordarsi di mettere l’opzione ‘-display’
seguita dall’indirizzo dell’elaboratore locale e del numero dello schermo, come nell’esempio
seguente. L’elaboratore locale (MS-Windows) è roggen.brot.dg e quello remoto (Unix o
GNU/Linux) è dinkel.brot.dg.
C:\> TELNET dinkel.brot.dg[ Invio ]
login: tizio[ Invio ]
Password: ****[ Invio ]
Finalmente appare l’invito dell’elaboratore remoto.
dinkel$ xterm -display roggen.brot.dg:0[ Invio ]
In questo modo dovrebbe apparire la finestra di terminale nel servente X locale.
Il servente MI/X sfrutta l’ambiente grafico del sistema operativo in cui è stato installato, in particolare utilizza una finestra che, a sua volta, diventerà la finestra principale per tutte le applicazioni
X.
Il solo servente grafico non può essere sufficiente a gestire le finestre delle varie applicazioni. Per
questo, MI/X incorpora un gestore di finestre simile a ‘twm’.
MI/X può essere ottenuto direttamente da MicroImages, Inc., all’indirizzo <http://
www.microimages.com/freestuf/mix/download.htm>.2
1
2
MI/X software proprietario
La versione gratuita di questo servente funziona bene se la profondità di colori è di 256, pari a 8 bit. Non è in grado
3884
Servente X su altre piattaforme grafiche
di funzionare se la risoluzione è inferiore, mentre se è superiore, funziona, ma si possono presentare dei problemi.
3885
3886
Servente X su altre piattaforme grafiche
344.2 X-Win32
X-Win32 3 è un servente X in grado di fare gestire a MS-Windows 95/98/NT/2000 le finestre di
applicazioni X che sono in funzione su altri elaboratori. Può funzionare solo se nell’elaboratore
in cui viene installato è attivata la gestione delle connessioni TCP/IP.
È prodotto da StarNet Communications Corporation <http://www.starnet.com/>. Di questo software
non esiste alcuna versione gratuita, ma può essere scaricato liberamente dalla rete e provato in
modalità dimostrativa (dopo alcune ore di funzionamento si interrompe eliminando i processi).
Il funzionamento è analogo a quello di altri prodotti del genere. La particolarità più importante sta nella gestione delle finestre completamente a carico di MS-Windows, cosa che facilita
notevolmente l’impiego.
X-Win32 può essere ottenuto direttamente da StarNet all’indirizzo già segnalato. La stessa
azienda produce anche una versione di questo servente funzionante su MS-Windows 3. .
*
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
3
X-Win32 software proprietario
Capitolo
345
Applicazioni proprietarie
La disponibilità di software proprietario per GNU/Linux dimostra la maturità di questo sistema operativo. Negli ambienti meno preparati dal punto di vista informatico, i sistemi operativi
Unix sono semplicemente temuti. Il software proprietario confortevole e spesso uniforme tra una
piattaforma e un’altra, permette di attenuare questi problemi di inserimento.
Attualmente il software libero offre molte alternative valide alla maggior parte del software proprietario; pertanto, le notizie che appaiono in questo capitolo, hanno più un valore storico che
altro.
345.1 Motif
Motif 1 è un’interfaccia grafica sviluppata originariamente da OSF (Open software foundation),
divenuta attualmente parte di The Open Group. Motif costituisce ancora uno standard molto importante, tanto che quasi tutte le applicazioni grafiche proprietarie, funzionanti su Unix e quindi
su X, utilizzano questa GUI.
La cosa più importante di Motif sono le librerie che possono fornire ai programmi una serie di
funzioni e di oggetti grafici.
345.1.1 Link statico o dinamico
Un programma che utilizza le librerie Motif può essere stato compilato utilizzando queste librerie
in modo differente: con un link statico o dinamico.
Un programma prodotto con un link statico si trova in pratica a incorporare le librerie, per cui,
può essere utilizzato così com’è senza la necessità di installarle separatamente. Un programma
prodotto con un link dinamico richiede la presenza delle librerie, ma ha il vantaggio di richiedere
un po’ meno risorse rispetto a quello compilato in modo statico.
Normalmente, la licenza di Motif consente di incorporare le librerie nel programma e non di
distribuirle assieme al programma. Di conseguenza, se si vogliono utilizzare programmi che si
servono delle librerie Motif in modo dinamico, occorre acquistare una copia delle librerie Motif.
345.1.2 Il prezzo del nome
Motif viene commercializzato da diverse aziende che spesso utilizzando nomi differenti. Nella
maggior parte dei casi si tratta sempre di lavori derivati dagli stessi sorgenti e perfettamente
compatibili con l’originale, ma l’uso del nome Motif ha un prezzo.
Per quanto riguarda la piattaforma i386 si possono trovare nomi come Moo-tiff, SWiM, Metro
Link, MoTeeth,...
345.2 StarOffice 3.1
StarOffice 2 è stato prodotto dalla Star Division, oggi acquisita dalla Sun Microsystems (<http://
www.sun.com/staroffice/>). Si tratta di un pacchetto integrato per ufficio, comprendente un programma di scrittura, un foglio elettronico, un programma di disegno vettoriale, un programma per il
fotoritocco, un disegnatore di grafici e un programma per la scrittura di equazioni.
1
2
Motif software proprietario
StarOffice 3.1 software proprietario, gratuito per alcuni tipi di utenti
3887
3888
Applicazioni proprietarie
Una delle caratteristiche più importanti è la sua compatibilità con i formati di altri prodotti proprietari, almeno fino alle versioni esistenti nell’anno 1997; inoltre, anche se si tratta di un’edizione molto vecchia, c’è da considerare che si tratta della versione che esige meno risorse per
funzionare e per questo è l’unica che possa essere usata su macchine con poco più di 16 Mibyte
di memoria centrale.
La versione per GNU/Linux può essere ritrovata ancora in diversi FTP e per raggiungerli si può
sempre chiedere aiuto a FTPSearch <http://www.alltheweb.com/?c=ftp>.3
345.2.1 Archivi necessari
La versione GNU/Linux di StarOffice è organizzata in blocchetti contenuti in archivi compressi
attraverso ‘tar’ e ‘gzip’. I file utili sono:
• ‘StarOffice31-common.tar.gz’;
• ‘StarOffice31-english.tar.gz’;
• ‘StarOffice31-dynbin.tar.gz’, nel caso si disponga di Motif 2.0;
• ‘StarOffice31-statbin.tar.gz’, nel caso non si disponga di Motif 2.0.
Nel caso si disponga già dei file della versione 3.1beta4, basta utilizzare l’archivio
‘StarOffice31-upgrade2final.tar.gz’ per togliere la scadenza di funzionamento che
aveva quella versione. Di fatto la versione 3.1 non è altro che la stessa 3.1beta4 senza alcuna
scadenza.
345.2.2 Librerie
Le versioni Unix di StarOffice, utilizzano la libreria grafica Motif 2.0, cioè un altro prodotto
proprietario. Per questo motivo, tra i file di StarOffice che vengono distribuiti, esistono due tipi
di binari: quelli che richiedono la presenza della libreria Motif e quelli che sono stati compilati in
modo da contenerla già come libreria statica. I secondi sono i binari che possono essere utilizzati
senza la libreria Motif, anche se ciò penalizza notevolmente le prestazioni di StarOffice.
345.2.2.1 libc
StarOffice richiede la presenza di una versione di ‘libc’ superiore o uguale a 5.4.4. Se nel proprio
sistema è installata una versione precedente, bisogna provvedere all’aggiornamento. Se non si
ha la possibilità di effettuare un aggiornamento automatico, dopo aver copiato i file aggiornati
della libreria nella directory ‘/lib/’, occorre correggere il collegamento ‘libc.so.5’, ma in
un colpo solo! Supponendo di avere copiato i file della versione 5.4.28, si può procedere come
nell’esempio seguente:
# ln -sf /lib/libc.so.5.4.28 /lib/libc.so.5
3
Oltre alle considerazioni di carattere tecnico per motivare la scelta di una versione così antiquata, è importante
notare che la versione 3.1 disponeva di una licenza molto chiara per la parte che riguarda l’utilizzo «non-commerciale»,
al contrario delle versioni immediatamente successive. Con l’acquisizione del prodotto da parte della Sun Microsystems,
la versione 5.1 ha offerto il prodotto gratuitamente, con una licenza non ambigua.
Applicazioni proprietarie
3889
345.2.3 Localizzazione
StarOffice è sensibile al contenuto della variabile di ambiente ‘LANG’. Se contiene il valore corretto, cioè ‘it_IT’ (o ‘it_IT.ISO-8859-1’, si può verificare con ‘locale -a’), tutti i messaggi
(o quasi) appariranno in italiano.
Vale la pena di predisporre in ogni caso questa variabile, non solo per StarOffice.
345.2.4 Collocazione
La collocazione del programma non è obbligatoria, a parte il nome della directory da cui si dirama
tutto l’applicativo: ‘StarOffice-3.1/’. Normalmente si pongono due alternative: installare a
partire dalla directory ‘/usr/local/’, oppure da ‘/opt/’: negli esempi che seguono si suppone
di installare da questa ultima directory.
Ci si posiziona nella directory ‘/opt/’ e da lì si espandono i file necessari.
Se
si
installa
la
versione
beta,
occorre
espandere
l’archivio
‘StarOffice31-upgrade2final.tar.gz’ per ultimo.
# cd /opt
# tar xzvf StarOffice31-common.tar.gz
# tar xzvf StarOffice31-english.tar.gz
...
345.2.5 Librerie dinamiche (ld.so)
L’archivio ‘StarOffice31-common.tar.gz’, espandendosi, colloca una serie di librerie nella directory ‘/opt/StarOffice-3.1/linux-x86/lib/’. Prima di poter fare qualunque cosa con StarOffice, occorre aggiornare il file ‘/etc/ld.so.conf’ e avviare il programma
‘ldconfig’ in modo da ottenere un nuovo file ‘/etc/ld.so.cache’.
Si procede aggiungendo la riga seguente al file ‘/etc/ld.so.conf’.
/opt/StarOffice-3.1/linux-x86/lib/
Quindi si avvia semplicemente il programma ‘ldconfig’ che provvede a fare il resto.
# ldconfig
Eventualmente, se non si vuole intervenire in questo modo, si può agire su una variabile di ambiente, ‘LD_LIBRARY_PATH’, che deve contenere anche il percorso necessario a raggiungere le
librerie di StarOffice. Questa variabile viene gestita normalmente attraverso uno script creato
automaticamente dalla procedura di installazione.
Applicazioni proprietarie
3890
345.2.6 Installazione personale: setup
Finalmente, al termine di tutte queste operazioni ogni utente è pronto per installare StarOffice
nella propria directory personale. Le operazioni seguenti vanno svolte utilizzando una finestra di
terminale (come ‘xterm’ per esempio) all’interno dell’ambiente grafico X.
$ cd /opt/StarOffice-3.1
$ ./setup
StarOffice 3.1 Installation Tool
Figura 345.1. Inizio della procedura di installazione personale di StarOffice.
Dopo la presentazione, viene offerta una scelta possibile tra diversi tipi di installazione:
• installazione da rete o CD;
• personalizza installazione;
• installazione minima;
• installazione standard.
Nel primo caso, viene creata la directory ‘~/StarOffice-3.1/’ contenente altre directory e poi
soltanto collegamenti a file contenuti nella posizione originale. Negli altri casi, vengono copiate
localmente le porzioni di StarOffice che si intendono utilizzare. In generale, dovrebbe essere
sufficiente il primo tipo di installazione.
Al termine, nella directory personale dell’utente si troveranno due script: ‘.sd.sh’ e ‘.sd.csh’.
Il primo è fatto per essere interpretato da una shell Bourne o una compatibile, mentre il secondo
da una shell C.
In pratica, se si utilizza la shell Bash, si tratta di includere alla fine di ‘~/.bash_profile’ o ‘~/
.profile’, o ancora in ‘~/.bashrc’ (a seconda di come è organizzato il proprio sistema), la
riga seguente:
. ~/.sd.sh
In questo modo, il file ‘.sd.sh’ viene letto ed eseguito.
Il file ‘.sd.sh’, come pure ‘.sd.csh’, contiene la dichiarazione della variabile ‘LANG’ con il
valore ‘us’. Evidentemente questo è sbagliato. Se è stato seguito il consigliato di predisporre
la variabile ‘LANG’ nel modo corretto, basta commentare questa dichiarazione.
Applicazioni proprietarie
3891
345.2.6.1 Se setup non funziona
Potrebbe anche capitare che il programma ‘setup’ non funzioni nella propria installazione di GNU/Linux. Tuttavia, non è detto che sia pregiudicato il funzionamento del resto
dell’applicativo.
La cosa più importante che viene svolta dal programma di installazione è la creazione dei due
file script citati precedentemente. Si può sostituire la loro funzione con lo script seguente, adatto
per una shell Bourne o derivata.
#!/bin/sh
PATH="/opt/StarOffice-3.1/linux-x86/bin:$PATH"
export PATH
LD_LIBRARY_PATH="/opt/StarOffice-3.1/linux-x86/lib:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH
XPPATH="/opt/StarOffice-3.1/xp3"
export XPPATH
HELPPATH="/opt/StarOffice-3.1/linux-x86/modules"
export HELPPATH
XENVIRONMENT="/opt/StarOffice-3.1/starview.xres"
export XENVIRONMENT
SVFONTPATH="/opt/StarOffice-3.1/fonts/75dpi:\
/opt/StarOffice-3.1/fonts/75dpi/bdf:/opt/StarOffice-3.1/fonts/type1"
export SVFONTPATH
SVHOME="$HOME"
export SVHOME
Evidentemente, se si intende installare StarOffice a partire da una directory differente da
‘/opt/’, occorre cambiare i percorsi indicati nell’esempio. La creazione della directory ‘~/
StarOffice-3.1/’ (quella che parte dalla directory personale dell’utente) e delle discendenti,
con il loro contenuto di collegamenti simbolici, non è strettamente necessaria: a volte si potrebbero ricevere delle segnalazioni di errore, così come qualche componente potrebbe non funzionare perfettamente. Eventualmente si può provare a creare un collegamento simbolico che punti
direttamente alla posizione originale dell’applicativo, come nell’esempio seguente:
$ ln -s /opt/StarOffice-3.1 ~/StarOffice-3.1
345.2.7 Avvio
I file binari di StarOffice sono collocati nella directory ‘/opt/StarOffice-3.1/linux-x86/
bin/’, ma se l’installazione personale è stata eseguita correttamente, dovrebbero essere
raggiungibili senza l’indicazione del percorso.
Prima di avviare un eseguibile qualunque di StarOffice, conviene attivare la guida interattiva e il
sistema di comunicazione interna.
$ svdaemon
$ svportmap
I programmi a disposizione sono:
• ‘sdraw3’ -- un disegnatore vettoriale;
Applicazioni proprietarie
3892
• ‘swriter3’ -- un programma di scrittura;
• ‘scalc3’ -- un foglio elettronico;
• ‘smath3’ -- un programma per la scrittura di equazioni matematiche;
• ‘schart3’ -- un programma di grafici;
• ‘simage3’ -- un programma per il fotoritocco.
345.2.8 Linguaggio
Se la variabile ‘LANG’ è configurata correttamente, i messaggi appaiono in lingua italiana, ma
non tutti, dove mancano le traduzioni appaiono in inglese o in tedesco.
È importante sapere che «beenden» significa terminare, ovvero, «fine lavoro».
345.2.9 Stampa
StarOffice è (almeno in teoria) in grado di gestire alcuni tipi di stampanti diversi da PostScript.
Utilizzando ‘lpr’ (cioè il sistema di stampa BSD, o uno compatibile), è sufficiente avere predisposto un filtro di stampa adatto a convertire il formato PostScript in quello della propria
stampante. Quando si stampa, quindi, si deve scegliere il tipo di stampante ‘lp’, eventualmente
modificando la riga di comando. Di solito è sufficiente specificare la voce corrispondente alla
stampante o al filtro di stampa più adatto alle proprie esigenze.
Figura 345.2. Richiamando l’impostazione della stampante, vengono proposti diversi
tipi di driver, ma se il proprio sistema è configurato correttamente, dovrebbe essere
sufficiente selezionare il tipo standard: ‘lp’.
Applicazioni proprietarie
3893
Figura 345.3. La riga di comando per ottenere la stampa può essere modificata a
seconda delle esigenze, per esempio si può cambiare l’indicazione della voce del
file ‘/etc/printcap’ e di altre indicazioni. Di solito, non serve alcuna intestazione, in tal
caso, l’opzione ‘-T’ non serve e può essere cancellata.
345.2.10 Semplificazioni nella distribuzione Debian
La distribuzione GNU/Linux Debian organizza un pacchetto speciale, per installare StarOffice
3.1. Il nome del pacchetto in questione è ‘staroffice3’; con questo basta procurarsi i file
che compongono la distribuzione originale di StarOffice 3.1 e collocarli nella directory ‘/tmp/’.
L’installazione del pacchetto Debian, attraverso l’avvio degli script di installazione, provvede a
installare anche i file di StarOffice, predisponendo tutti gli accorgimenti necessari a garantire il
suo funzionamento corretto.
Il pacchetto ‘staroffice3’ organizza anche alcuni script che avvolgono gli eseguibili originali.
Questo serve a controllare all’avvio che tutto sia in ordine e, se necessario, ad avviare prima
l’installazione personale del programma. In questo modo, vengono creati automaticamente anche
i file ‘~/.sd.sh’ e ‘~/.sd.csh’, che poi vengono caricati automaticamente, senza la necessità
di manomettere la configurazione della propria shell.
In breve, se si utilizza la distribuzione Debian, l’installazione di StarOffice 3.1 diventa
un’operazione banale.
Se si vuole disinstallare StarOffice 3.1, quando questo è stato installato con l’aiuto del pacchetto
Debian a cui si fa riferimento, basta disinstallare il pacchetto: i suoi script di disinstallazione
provvedono a eliminarlo.
345.3 StarOffice 5.1
StarOffice 4 nella versione 5.1 torna a essere accessibile gratuitamente, con una licenza che consente espressamente la duplicazione per uso interno. Quello che conta è acquisire «correttamente» il pacchetto degli eseguibili binari, da una fonte autorizzata. A questo proposito, la stessa Sun
Microsystems vende il CD-ROM (senza assistenza) a un prezzo molto basso. Comunque, è bene
non fare confusione: non si tratta di software libero, ma di software gratuito.5
Questa versione di StarOffice è disponibile solo su piattaforma i386 e richiede molta memoria centrale: 64 Mibyte, anche se teoricamente ne basterebbero solo 32. Per quanto riguarda
4
StarOffice 5.1 e 5.2 software gratuito, non libero
Per quanto riguarda la versione 5.1, la Sun Microsystems non consente la ridistribuzione del prodotto, benché questo
sia gratuito, a meno che sia stato ottenuto un permesso esplicito dalla Sun stessa. In particolare, alle scuole è consentito di
firmare una licenza apposita, nella quale viene consentito espressamente di distribuire l’applicativo al personale di facoltà
e agli studenti, purché queste persone accettino a loro volta le condizioni della licenza. Per ottenere questo risultato, è
necessario spedire una copia firmata di questa licenza specifica, che si ottiene dal sito della Sun.
5
3894
Applicazioni proprietarie
GNU/Linux, è importante poter disporre di un kernel relativamente recente, sono indispensabili
le librerie GNU C Library (ovvero ‘/lib/libc.so.6*’) ed è necessario che X sia messo in
funzione con una risoluzione di almeno 256 colori (8 bit).
345.3.1 Archivio di partenza, documentazione e installazione nel
sistema
La versione GNU/Linux di StarOffice 5.1 è distribuita in pratica in un solo archivio ‘tar’, che
non è compresso perché i file che contiene sono già stati compressi in precedenza. Il file in questione è ‘so51a_lnx_39.tar’, oppure potrebbe trattarsi di un nome simile in caso di edizioni
successive, anche se attribuibili sempre alla stessa versione 5.1. Il contenuto di questo file deve
essere estratto da qualche parte, per esempio in una directory temporanea:
# tar xvf so51a_lnx_39.tar
Come si vede, in questa fase conviene agire con i privilegi dell’utente ‘root’. Dopo aver
estratto il contenuto dell’archivio, si ottengono due sottodirectory: in una si trova la documentazione (‘so51inst/documentation/’), che dovrebbe essere distribuita in forma di file
PDF, mentre nell’altra (‘so51inst/office51/’) si trovano una serie di file che vengono usati
nell’installazione.
# cd so51inst/office51
Conviene spostarsi nella directory contenente i file necessari all’installazione, come si vede nell’esempio. Qui si dovrebbero trovare un paio di file di testo: ‘LICENSE’, che è bene leggere prima
di iniziare l’installazione, e ‘README’ che riepiloga le informazioni salienti sull’installazione del
pacchetto.
Per iniziare l’installazione basta avviare l’eseguibile ‘setup’, tenendo conto però che è
necessario farlo a partire dall’ambiente grafico.
La prima volta che si installa il pacchetto nel sistema, è bene utilizzare l’opzione ‘/net’, in modo
da renderla disponibile a tutti gli utenti:
# ./setup /net
A questo punto, il programma di installazione si avvia e comincia a mostrare le finestre di dialogo
attraverso le quali guida l’amministratore all’installazione dell’applicazione.
Viene mostrato il testo del file ‘README’ e del file ‘LICENSE’, quindi viene richiesta l’approvazione esplicita del contenuto del secondo. Successivamente si passa alla selezione dei componenti
che si vogliono installare: in condizioni normali si seleziona tutto, «installazione standard», evitando così di essere interrogati ulteriormente a questo proposito. Dopo questa fase, subito prima
di passare all’installazione dei file, viene richiesta la directory in cui dovrà risiedere l’applicativo.
In questa situazione, è consigliabile limitarsi a due sole alternative: ‘/opt/Office51’, oppure
‘/usr/local/Office51’.
Purtroppo, l’installazione generale non basta: ogni utente che vuole usare l’applicativo deve avviare una sua configurazione, attraverso la quale verrà anche invitato a registrarsi personalmente
(anche se per questo non si è obbligati espressamente).
Applicazioni proprietarie
3895
345.3.2 Installazione personale e avvio
Una volta che i file di StarOffice sono stati installati nel sistema dall’amministratore, supponendo
che questo sia avvenuto nella directory ‘/opt/Office51/’, l’utente che vuole farne uso deve
configurarlo la prima volta, sempre attraverso l’interfaccia grafica:
$ /opt/Office51/bin/setup
Questa volta, oltre a chiedere l’approvazione della licenza d’uso, l’utente è invitato a inserire i
propri dati, allo scopo di effettuare la registrazione. La compilazione di questa mascherina non è
indispensabile per il funzionamento di StarOffice.
Successivamente viene chiesto di precisare il tipo di «installazione» che si intende eseguire. Infatti, devono essere installati alcuni file, potendo scegliere tra l’installare solo il minimo indispensabile, «installazione workstation standard», oppure l’installazione dell’applicativo completo in
una sottodirectory della propria directory personale. In condizioni normali, gli utenti sceglieranno la prima ipotesi. In ogni caso, questi file vanno installati da qualche parte ed è normale che
questo avvenga nella directory ‘~/Office51/’.
A partire dalle versioni 4. di StarOffice, è stato introdotto il file ‘.sversionrc’ nella directory personale degli utenti che hanno installato la sua configurazione. All’interno di questo
file sono elencate le versioni installate dell’applicativo, assieme al percorso dell’eseguibile da
avviare. Se l’utente ha già installato personalmente una copia dell’applicativo, che poi ha cancellato manualmente, mentre adesso vuole reinstallarne la configurazione, deve prima cancellare in questo file la riga che vi fa riferimento, altrimenti il programma propone di modificare
l’impostazione dell’installazione precedente, anche se questa non c’è più.
*
L’avvio dell’applicativo, una volta completate le fasi di installazione e di configurazione, avviene
per mezzo dell’eseguibile ‘soffice’, meglio se con tutto il suo percorso iniziale:
$ /opt/Office51/bin/soffice &
345.3.3 Stampa
In generale, se il proprio sistema GNU/Linux è stato configurato correttamente per ciò che riguarda la stampa, in modo che attraverso il comando ‘lpr’ possano essere stampati file PostScript, non c’è bisogno di modificare l’impostazione predefinita di StarOffice sulla stampa.
Eventualmente, l’amministratore del sistema potrebbe valutare la possibilità di ritoccare qualcosa
attraverso il programma ‘spadmin’:
# /opt/Office51/bin/spadmin
345.4 StarOffice 5.2
StarOffice 5.2 ha un’installazione simile a quella della versione 5.1. L’archivio viene fornito in
forma binaria, dove l’estrazione del contenuto prima dell’installazione vera e propria avviene in
modo automatico, creando una directory temporanea che al termine viene rimossa.
Per l’installazione è sufficiente il file eseguibile ‘so-5_2-ga-bin-linux-it.bin’, procedendo semplicemente secondo i passi seguenti:
Applicazioni proprietarie
3896
1. l’utente ‘root’ avvia X e da lì, con una finestra di terminale, avvia l’eseguibile
‘so-5_2-ga-bin-linux-it.bin’ con l’opzione ‘/net’;
# so-5_2-ga-bin-linux-it.bin /net &
2. l’utente ‘root’ richiede l’installazione in una directory conveniente, per esempio ‘/opt/
Office52/’;
3. al termine dell’installazione, l’utente ‘root’ conclude il funzionamento di X;
4. l’utente comune che vuole utilizzare StarOffice deve avviare a sua volta X;
5. l’utente comune, attraverso una finestra di terminale, avvia l’installazione personalizzata con l’eseguibile ‘setup’, specificando la modalità workstation standard, quando
richiesto;
$ /opt/Office/program/setup &
6. al termine dell’installazione personalizzata, l’utente comune può avviare StarOffice con il
comando ‘/opt/Office/program/soffice’.
$ /opt/Office/program/soffice &
345.5 Netscape
Netscape Communicator 6 è prodotto dalla Netscape Communications Corporation (<http://
www.netscape.com>). Si tratta di un cliente integrato per diversi tipi di protocolli Internet, in
particolare: HTTP, FTP e GOPHER, oltre che per la posta elettronica e i gruppi di discussione.
Recentemente, la Netscape Communications Corporation ha dichiarato ufficialmente di rilasciare
il suo prodotto, nella versione normale, in forma gratuita per qualunque piattaforma.
345.5.1 Configurazione
Ogni utente ha una propria configurazione di Netscape e una propria gestione della memoria cache delle pagine visitate di recente. La prima volta che viene avviato, viene richiesta l’accettazione esplicita delle condizioni della licenza d’uso, quindi viene creata la directory ‘~/.netscape’
che poi si articola ulteriormente.
$ netscape[ Invio ]
6
Netscape Communicator software gratuito, non libero
Applicazioni proprietarie
3897
Figura 345.4. Quando un utente avvia per la prima volta Netscape, viene richiesta
l’accettazione esplicita della licenza d’uso. Trattandosi di un prodotto proprietario,
per quanto gratuito, è bene leggere e verificare la licenza.
Figura 345.5. Dopo l’accettazione della licenza, viene creata una directory per
contenere la configurazione e la memoria cache delle pagine visitate.
La configurazione di Netscape è abbastanza intuitiva. In generale vi si accede attraverso il menù
Edit, selezionando la voce Preferences.
Applicazioni proprietarie
3898
Figura 345.6. La configurazione di Netscape, attraverso la selezione della voce
dal menù Edit.
Preferences,
345.5.2 Tempi morti
Un problema che riguarda un po’ tutti questi programmi cliente, sono i tempi morti. Questi
programmi, quando tentano di accedere a un risorsa senza riuscirci, restano a lungo in attesa
prima di restituire una segnalazione di errore. Se si utilizza, o si gestisce, un servente DNS e
questo non risulta raggiungibile, oppure a sua volta non riesce a raggiungere gli altri serventi
DNS di livello superiore, le attese sono dovute al ritardo nella risposta nella risoluzione dei
nomi.
Quando si vuole utilizzare Netscape semplicemente per delle attività locali e si notano questi
problemi nelle risposte, se si gestisce un servente DNS locale che, almeno temporaneamente,
non ha accesso alla rete esterna, si può provare a disattivarlo utilizzando il comando seguente:
# rndc stop[ Invio ]
In seguito, per riattivarlo, basterà utilizzare il comando opposto.
# rndc restart[ Invio ]
345.6 XV
XV 7 è un applicativo proprietario di tipo shareware, anche se abbastanza permissivo, per l’elaborazione di immagini. È relativamente completo, nel senso che consente di effettuare un buon
numero di operazioni e trasformazioni. Il suo funzionamento è un po’ insolito e le prime volte
possono sfuggire molte delle sue buone qualità.
7
XV software gratuito, non libero
Applicazioni proprietarie
3899
345.6.1 Avvio di XV
xv
[opzioni] [file ...]
L’eseguibile ‘xv’ è quello che svolge tutto il lavoro. Si tratta di un programma interattivo con cui
solitamente non viene usata alcuna opzione e nemmeno alcun nome di file. Quello che si ottiene
è una finestra di presentazione sulla quale basta portare il cursore e fare un clic con il terzo tasto
per ottenere il pannello di controllo del programma.
Figura 345.7. All’avvio dell’eseguibile ‘xv’ senza argomenti, viene visualizzata questa
immagine. Basta portavi sopra il puntatore del mouse e fare un clic con il terzo tasto
per fare apparire il pannello di controllo.
La finestra che contiene questa immagine di presentazione è quella utilizzata per mostrare le
immagini che si elaborano, o che semplicemente si vogliono visualizzare.
XV potrebbe essere utilizzato anche solo come mezzo per visualizzare delle immagini. In tal
caso, indicando i nomi dei file nella riga di comando dell’eseguibile, si ottiene la visualizzazione
del primo nella finestra iniziale e le operazioni più semplici possono essere compiute attraverso
l’uso della tastiera. La tabella 345.1 elenca i comandi che possono essere impartiti attraverso la
tastiera per ottenere lo scorrimento, la rotazione e l’ingrandimento delle immagini.
Tabella 345.1. Alcuni comandi utili per l’uso di XV come visualizzatore di immagini.
Tastiera
Spazio
m
n
t
h
v
q
Descrizione
Passa all’immagine successiva.
Ingrandisce l’immagine al massimo consentito dallo schermo.
Riporta l’immagine alla sua dimensione normale.
Ruota di 90 gradi in senso orario.
Rovescia l’immagine orizzontalmente.
Rovescia l’immagine verticalmente.
Termina l’esecuzione del programma.
345.6.2 Controlli
Come accennato precedentemente, portando il puntatore del mouse sull’immagine e premendo il
terzo tasto appare il pannello di controllo di XV. La parte centrale di questo mostra un elenco di
file di immagini. Questo potrebbe essere vuoto se il programma è stato avviato senza argomenti,
come nel caso mostrato nella figura 345.8.
Applicazioni proprietarie
3900
Figura 345.8. Il pannello di controllo di XV.
Tutto attorno a questa zona centrale appaiono una serie di pulsanti grafici, che permettono di
accedere a menù nascosti oppure eseguono subito delle funzioni particolari.
345.6.3 Caricamento, salvataggio, scorrimento e stampa
I pulsanti grafici posti alla destra dell’elenco di file sono particolarmente importanti. La figura
345.9 mostra un elenco di immagini e i pulsanti relativi.
Figura 345.9. Le funzioni principali del pannello di controllo di XV.
La tabella 345.2 elenca le funzioni riferite a questi pulsanti.
Tabella 345.2. Alcuni comandi utili per l’uso di XV come visualizzatore di immagini.
Nome
Previous
Next
Load
Save
Print
Delete
Descrizione
Visualizza l’immagine precedente dell’elenco.
Visualizza l’immagine successiva dell’elenco.
Carica un file, lo aggiunge all’elenco e lo visualizza.
Salva un’immagine, eventualmente cambiandone il formato o il nome.
Stampa l’immagine selezionata.
Elimina un’immagine dall’elenco oppure cancella il file corrispondente.
Applicazioni proprietarie
3901
345.6.4 Funzionalità di uso frequente
Nella parte inferiore del pannello di controllo appaiono alcuni pulsanti con significati che possono apparire più o meno oscuri, fino a quando non si è appreso il loro funzionamento. La figura
345.10 mostra questa serie di pulsanti.
Figura 345.10. Le funzionalità di uso frequente, poste nella parte inferiore del pannello
di controllo di XV.
I pulsanti che non possono essere utilizzati, in funzione del contesto, sono offuscati. Molte di
queste funzioni fanno riferimento a una zona dell’immagine selezionata. Questa zona può essere
definita utilizzando il mouse, puntando il cursore su un punto nella finestra contenente l’immagine, premendo il primo tasto e trascinando. I pulsanti grafici della prima fila sono particolarmente
importanti:
1. copia la zona selezionata dell’immagine visualizzata;
2. taglia la zona selezionata dell’immagine visualizzata;
3. riproduce la zona copiata o tagliata precedentemente;
4. cancella il contenuto di una zona;
Per riprodurre una zona copiata o tagliata precedentemente, è necessario prima selezionare l’immagine su cui intervenire (potrebbe essere la stessa di origine). Quindi occorre selezionare la
zona di destinazione, nel solito modo, attraverso un’operazione di trascinamento del mouse. Per
facilitare tutto questo si può usare lo stesso pulsante grafico di riproduzione della zona ritagliata:
la prima volta che viene richiamato evidenzia un rettangolo nell’immagine attuale che può essere
spostato dove serve, trascinandolo con il mouse; la seconda volta che viene richiamato, incolla il
ritaglio in quel punto.
Quando di un’immagine serve solo una parte, basta selezionare la zona nel solito modo, attraverso
il mouse. Quindi, utilizzando il pulsante C R O P si ottiene una nuova immagine contenente solo il
pezzo selezionato precedentemente. Eventualmente, si può evitare questo metodo utilizzando al
suo posto il salvataggio della sola zona selezionata.
Un’altra funzionalità importante, racchiusa in questa parte del pannello di controllo, è il pulsante
G R A B . Attraverso questo è possibile catturare una finestra o una zona dello schermo.
345.6.5 Menù
Nella parte superiore del pannello di controllo appaiono alcuni pulsanti grafici che in realtà richiamano diversi menù. Possono apparire più o meno oscuri, fino a quando non si è appreso il
loro funzionamento. Il manuale di XV è il punto di riferimento migliore per apprendere l’uso di
queste funzioni. La figura 345.11 mostra questo sistema di menù.
Figura 345.11. Il sistema di menù posto nella parte superiore.
Applicazioni proprietarie
3902
In particolare, con il pulsante W I N D O W S è possibile selezionare un menù contenente un po’ di
tutto. Attraverso la funzione Visual Schnauzer si ottiene un gestore di file (file manager) per
la ricerca e la visualizzazione in anteprima delle immagini da caricare. La figura 345.12 mostra
l’aspetto di questo gestore di file.
Figura 345.12. Il gestore di file di XV.
345.7 Riferimenti
• Matthew Borowski, StarOffice mini-HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Parte lxxi
Prevenzione
346 Copie di sicurezza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3904
346.1 Scelta del sistema di copia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3904
346.2 Strategia nelle copie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3906
346.3 Supporti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3908
346.4 Compressione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3908
346.5 Archiviazione e recupero attraverso tar e gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3909
346.6 Archiviazione di un file system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3914
347 Emergenza con GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3915
347.1 Dischetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3915
347.2 Personalizzazione di dischetti di emergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3917
347.3 Dischetti Slackware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3918
347.4 Kernel per dischetti di emergenza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3920
347.5 Cavi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3921
347.6 Utenti e gruppi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3922
348 nanoLinux II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3923
348.1 Lavoro di cesello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3923
348.2 Dischi più grandi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3927
348.3 Provare nanoLinux II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3927
348.4 Organizzazione di nanoLinux II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3930
348.5 Personalizzazione della procedura di inizializzazione del sistema . . . . . . . . . . 3936
349 Dischetti di emergenza delle distribuzioni GNU/Linux e di altre fonti . . . . . . . . . . . . 3938
349.1 SuSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3938
349.2 Dischetti realizzati per scopi specifici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3942
3903
Capitolo
346
Copie di sicurezza
L’amministrazione di un sistema Unix è da sempre un grosso problema sotto tutti i punti di vista.
Il primo tra tutti è quello della salvaguardia dei dati, ma al rischio della loro perdita si pone
rimedio solo attraverso una corretta gestione delle copie di sicurezza.
346.1 Scelta del sistema di copia
Gli strumenti a disposizione per eseguire copie di sicurezza sono molti e si possono distinguere
due estremi possibili:
• copiare i file e le directory;
• copiare una partizione o un disco intero.
La copia di una partizione o di un disco può avere il vantaggio di permettere l’archiviazione
della situazione esatta in cui si trova, problemi inclusi. Inoltre, non avendo un processo di lettura
sui file, la data di lettura di questi non viene modificata. Lo svantaggio fondamentale di tale
tipo di copia è che questa è riferita a un disco particolare (o a una partizione) di una macchina
particolare: è molto poco probabile che si possano recuperare dati archiviati in questo modo in un
disco fisso diverso. Questa tecnica, più che per eseguire delle copie di sicurezza, viene utilizzata
per archiviare dischetti nel loro stato originale.
La copia di file e directory non tiene conto del supporto fisico in cui si trovano e nemmeno del
tipo di file system utilizzato. Questo comporta una serie di conseguenze:
• i file e le directory vengono scanditi in lettura, alterando quindi le date di lettura;
• i collegamenti simbolici vanno copiati come tali e non devono essere copiati gli oggetti a
cui questi puntano;
• i collegamenti fisici potrebbero non essere distinti.
In generale, dal momento che una copia di file e directory è portabile, mentre una copia di un
dispositivo intero non lo è (quando non si tratta di un dispositivo standard come i dischetti),
dovrebbe essere preferibile la prima di queste due soluzioni.
346.1.1 Archiviazione
È intuitiva la ragione per la quale le copie di sicurezza non vanno fatte archiviando un dispositivo
intero come se fosse un file unico. La copia pura e semplice dei file e delle directory è una tecnica
possibile, ma richiede condizioni particolari:
• l’unità di destinazione deve essere in grado di accogliere i dati come sono all’origine, in
pratica dovrebbe trattarsi di un disco;
• deve trattarsi di unità rimovibili;
• la capacità di queste unità deve essere maggiore di quella del file più grande che si ha a
disposizione.
Di solito si preferisce la tecnica dell’archiviazione dei dati in un file unico (che rappresenta
l’archivio), assieme a tutte le informazioni necessarie per riprodurre i file e le directory originali.
In questo modo si possono utilizzare unità di memorizzazione di qualunque tipo, eventualmente
suddividendo l’archivio in pezzi più piccoli contenibili al loro interno.
3904
Copie di sicurezza
3905
346.1.2 Archiviazione di file speciali
Gli oggetti contenibili in un file system possono essere di vario tipo (file puri e semplici, directory,
file di dispositivo, collegamenti, ecc.) e così pure i loro attributi (permessi, date, ecc.). Il sistema
di archiviazione che si utilizza deve essere in grado riprodurre correttamente tutti i dati del tipo
di file system che si utilizza.
Per esempio, non sarebbe possibile archiviare i dati di un file system Unix in un archivio ‘.zip’
che è nato per gli ambienti Dos.
346.1.3 Utenti e gruppi proprietari
Tra gli attributi dei file, è molto importante l’indicazione degli utenti e dei gruppi proprietari.
I programmi di archiviazione potrebbero non essere in grado di memorizzare il numero UID e
GID, limitandosi ad annotare solo i nomi degli utenti e dei gruppi. In tal modo, nel momento del
recupero, i numeri UID e GID verrebbero riprodotti in base alle caratteristiche del sistema, cioè
in base alla particolare configurazione dei file ‘/etc/passwd’ e ‘/etc/group’.
Il fatto che il programma di archiviazione memorizzi i numeri UID e GID, oppure che memorizzi
i nomi di utenti e gruppi, ha delle implicazioni che si traducono, a seconda delle circostanze, in
vantaggi o svantaggi.
Se i dati archiviati devono essere riprodotti in un sistema diverso da quello di origine, in cui ci
sono gli stessi nomi di utenti e di gruppi, che però potrebbero corrispondere a numeri UID e GID
differenti, diventa conveniente un metodo di archiviazione che ignori i numeri degli utenti e dei
gruppi. Tuttavia, se alcuni nomi di utenti o gruppi non sono presenti nel sistema di destinazione,
la proprietà di questi file verrebbe assegnata automaticamente all’utente ‘root’.
Quando si esegue una copia di sicurezza di un intero sistema e poi lo si vuole riprodurre altrove,
si agisce per mezzo di un sistema operativo minimo, avviato probabilmente attraverso dischetti.
In queste condizioni, lo scopo è quello di riprodurre esattamente il sistema originale, per cui, i numeri UID e GID andrebbero rispettati fedelmente, nell’attesa che sia ripristinato tutto, compresi
i file ‘/etc/passwd’ e ‘/etc/group’ originali.
Quando il programma di archiviazione memorizza entrambe le informazioni, sia UID/GID che
i nomi, nel momento del recupero si pone il problema di come comportarsi quando questi non
corrispondono. Si presentano queste alternative:
• se i numeri corrispondono ai nomi, non si pongono problemi nell’estrazione;
• se i numeri e i nomi non sono utilizzati nel sistema di destinazione, si possono estrarre i
dati utilizzando i numeri originali, anche se non sono abbinati ad alcun nome;
• se i numeri non sono utilizzati nel sistema di destinazione, mentre i nomi sì, si possono
cambiare i numeri in modo che corrispondano i nomi;
• se i nomi non sono utilizzati nel sistema di destinazione, mentre i numeri corrispondono
a nomi differenti, non si può fare altro che recuperare i numeri come solo, assegnando in
pratica la proprietà a utenti e gruppi con nomi differenti;
• se sono presenti sia i nomi che i numeri, ma questi non hanno lo stesso abbinamento (cioè
i numeri corrispondono a nomi diversi), dovrebbe essere preferibile cambiare i numeri in
modo che corrispondano ai nomi.
3906
Copie di sicurezza
346.1.4 Percorsi assoluti o relativi
Quando si intende archiviare una porzione di file system e quindi solo ciò che si trova a partire da
una certa directory in poi, è importante sapere come si comporta il programma di archiviazione
al riguardo della registrazione dei percorsi (path). Se si vuole archiviare la directory ‘/home/
tizio/esempi/’, il programma di archiviazione potrebbe registrare il suo contenuto in uno dei
tre modi seguenti.
1. ‘/home/tizio/esempi/*’
2. ‘home/tizio/esempi/*’
3. ‘./*’
Naturalmente, ciò dipende anche dal modo in cui vengono date le istruzioni al programma stesso.
Nel primo caso, quando dovesse rendersi necessario il recupero dei dati, questi verrebbero collocati esattamente nella directory indicata, in modo assoluto. Nel secondo, verrebbero collocati in modo relativo a partire dalla directory corrente, ottenendo così la directory ‘./home/
tizio/esempi/ ’. Nel terzo caso si avrebbe il recupero del contenuto di quella directory senza
*
informazioni sul percorso precedente.
346.2 Strategia nelle copie
Le copie di sicurezza permettono di conservare la situazione dei dati in un istante determinato,
ma i dati sono soggetti a continui aggiornamenti. Per questo occorre una procedura attraverso la
quale si possa avere una gestione ordinata e ragionevolmente sicura delle copie.
A parte i rischi connessi con il tipo di supporto utilizzato per le copie e il luogo in cui queste
vengono conservate, vanno almeno considerate le modalità sequenziali con cui queste possono
essere eseguite. È importante rispettare un paio di regole elementari:
1. non si riutilizzano i supporti contenenti la copia effettuata la volta precedente;
2. non si utilizzano supporti in cattive condizioni.
346.2.1 Generazioni delle copie
Per distinguere una copia effettuata in un momento rispetto a quella fatta in un altro, si parla
di generazione . In pratica, l’ultima copia di sicurezza effettuata è l’ultima generazione, mentre
le altre sono tutte generazioni precedenti. Questo termine si riferisce naturalmente a copie fatte
sullo stesso insieme di dati.
Il buon senso suggerisce di utilizzare almeno tre generazioni di copie: l’ultima, quella precedente
e quella ancora precedente.
Copie di sicurezza
3907
346.2.2 Livelli delle copie
La copia di un file system intero comporta solitamente un impegno consistente, sia in termini di
tempo che di supporti impiegati. Il programma che si utilizza per le copie, oppure un gruppetto
opportuno di script di shell, potrebbe permettere di effettuare la copia successiva dei soli file che
sono stati modificati nel frattempo.
Quando si esegue una copia dei soli file che risultano diversi rispetto all’ultima copia completa,
si parla di copia di primo livello; quando se ne esegue un’altra in un momento successivo per le
variazioni avvenute dopo quella di primo livello, si parla di secondo livello e così di seguito.
A parte le difficoltà legate alla conservazione dell’informazione sullo stato dei file (di solito
si tratta della data di modifica e di creazione), si pongono poi dei problemi nel momento in
cui dovesse essere necessario un ripristino dalle copie. Si dovrebbe ripristinare l’ultima copia
completa, seguita da tutte quelle aggiuntive dei soli file modificati, nello stesso ordine in cui
sono state fatte: dalla più vecchia alla più recente.
Sotto questo aspetto, quando non si vuole ripetere una copia completa troppo frequentemente, si
cerca almeno di eseguire copie successive sempre di primo livello (si hanno quindi più generazioni di copie di primo livello). In tal modo, un eventuale recupero richiederebbe solo il ripristino
dell’ultima generazione di copia completa e dell’ultima generazione di copia di primo livello.
Questo sistema potrebbe non tenere conto dei file cancellati dopo l’ultima generazione di copia
completa: in tal modo, un eventuale recupero dalle copie di sicurezza potrebbe comportare il
ripristino di file che non servono più.
346.2.3 Distribuire le responsabilità
In un sistema monoutente, l’unico utilizzatore è anche l’amministratore del proprio sistema e di
conseguenza anche l’unico responsabile. Sarà quindi lui (o lei) a sapere esattamente cosa ha fatto
e cosa è necessario copiare per sicurezza.
In un sistema multiutente o comunque quando si condividono dati in gruppo, anche se a prima
vista potrebbe sembrare conveniente la gestione delle copie in modo centralizzato, è comunque
utile affidarla in parte anche alla responsabilità dei singoli:
• periodicamente, un amministratore potrebbe occuparsi di eseguire la copia complessiva di
tutto il sistema;
• ogni giorno, gli utenti dovrebbero preoccuparsi di eseguire le copie dei dati di loro
competenza.
Nel momento in cui dovesse essere necessario, si dovrebbero recuperare i dati dalle copie generali
fatte dall’amministratore e successivamente da quelle particolari dei singoli utenti.
Se determinate attività vengono svolte in gruppo, si potrebbe eleggere ugualmente un
responsabile all’interno di questo che si occupi delle copie di quell’attività.
Il vantaggio di questo metodo sta nell’alleggerimento delle responsabilità dell’amministratore e
nella soluzione più facile di piccoli problemi locali:
• se un gruppo di lavoro ha alterato i dati a causa di un’operazione errata, è sufficiente
recuperare i dati di quel gruppo senza disturbare l’intero sistema;
• la distribuzione della responsabilità aumenta la consapevolezza da parte degli utenti.
3908
Copie di sicurezza
346.3 Supporti
La scelta del supporto di conservazione della copia è importante e comporta alcune conseguenze:
• il costo;
• la disponibilità di unità in grado di utilizzarli;
• la facilità o difficoltà nel recupero di porzioni dei dati archiviati.
Il supporto tradizionalmente più economico e più diffuso nel passato è il nastro magnetico. Questo ha però lo svantaggio fondamentale di essere un mezzo di memorizzazione sequenziale: non
è possibile estrarre un file se prima non si scorre tutto il nastro (o tutti i nastri) che c’è prima di
quel dato. Un altro svantaggio importante sta nella necessità di rileggere il suo contenuto, dopo
la copia, per verificare che i dati siano stati registrati correttamente.
Da alcuni anni si possono trovare dischi rimovibili di grandi capacità a prezzi ragionevolmente
bassi. Questi hanno il vantaggio di poter essere utilizzati come dischi normali, pertanto, il recupero di dati parziali diventa molto più facile, anche quando la copia di sicurezza avviene per
mezzo di un’archiviazione tradizionale.
Anche i CD-R sono diventati un ottimo mezzo di archiviazione, data l’economicità dei supporti:
anche se è possibile una sola registrazione, il prezzo di un CD vergine è molto contenuto. La
preparazione di un CD-ROM richiede molto spazio su disco per la preparazione dell’immagine
prima dell’operazione di «incisione» (burn) e richiede anche l’investimento del masterizzatore.
Si tratta di soldi ben spesi: una copia di sicurezza fatta su CD-ROM può essere letta ovunque ci
sia un lettore, ma questo è ormai un accessorio standard degli elaboratori; inoltre, il CD-ROM
ha una vita media molto lunga, garantendo la durata delle copie di sicurezza. Esiste tuttavia
un problema nuovo: si deve essere prudenti con le copie obsolete. Infatti, quando le copie di
sicurezza sono molto vecchie e non servono più, si può essere tentati di conservare i CD o di
donarli a qualcuno, magari per gioco, o perché li usi come un addobbo. È evidente che si tratta di
un’idea sbagliata: dal momento che questi CD-ROM sono stati usati per delle copie di sicurezza,
contengono potenzialmente informazioni delicate e riservate.
I CD-ROM contenenti copie di sicurezza obsolete vanno distrutti prima di essere gettati nel
cassonetto del riciclaggio del materiale plastico! Per distruggere un CD, basta tagliarlo a metà
con una forbice normale.
Quando i dati da archiviare sono pochi, può convenire l’utilizzo dei soliti dischetti: sono sicuramente una scelta economica e le unità a dischetti sono disponibili ovunque. Per quanto riguarda la
facilità di estrazione dei dati, ciò dipende dal modo con cui questi vengono usati: se si registrano
i dati al loro interno senza fare uso di alcun file system, si ottiene un comportamento equivalente
ai nastri; se si utilizzano con un file system, è necessario che l’archivio sia contenibile all’interno
di un solo dischetto.
346.4 Compressione
Il problema della dimensione dei dati da archiviare può essere ridotto parzialmente con l’aiuto
della compressione. La tecnica della compressione può essere applicata all’archiviazione in due
modi possibili:
• prima della costruzione dell’archivio, ottenendo così un’archivio di file compressi;
Copie di sicurezza
3909
• dopo la costruzione dell’archivio, ottenendo così un archivio compresso.
La differenza è enorme. La compressione introduce un elemento di rischio maggiore nella perdita
di dati: se una copia di sicurezza viene danneggiata parzialmente, l’effetto di questo danno si
riflette in una quantità di dati maggiore (spesso è compromesso tutto l’archivio).
346.4.1 Compressione prima dell’archiviazione
I programmi di archiviazione compressa maggiormente diffusi negli ambienti Dos utilizzano
la tecnica della compressione prima dell’archiviazione. È questo il caso degli archivi ‘.zip’,
‘.arj’, ‘.lzh’ e di altri ancora. Tale sistema ha il vantaggio di permettere una facile scansione
dell’archivio alla ricerca di file da estrarre (e decomprimere) o un ampliamento dell’archivio in
un momento successivo alla sua creazione. Un altro vantaggio è la minore sensibilità alla perdita
dei dati: se una parte dell’archivio è danneggiato, dovrebbe essere possibile ripristinare almeno il
resto. Lo svantaggio principale è che la compressione fatta in questo modo, a piccoli pezzi, non
è molto efficiente.
346.4.2 Compressione dopo l’archiviazione
La compressione fatta dopo l’archiviazione elimina ogni possibilità di accedere ai dati contenuti
nell’archivio e di poterlo ampliare, se non dopo averlo decompresso. Questo significa anche che
un danneggiamento parziale dell’archivio implica la perdita di tutti i dati da quel punto in poi.1
Un altro tipo di problema deriva dalla difficoltà di distribuire un archivio compresso suddividendolo su più unità di memorizzazione. In questo caso però, l’efficienza della compressione è
massima. Negli ambienti Unix, di fatto, è questa la scelta preferita.
346.5 Archiviazione e recupero attraverso tar e gzip
La coppia ‘tar’ e ‘gzip’ rappresenta lo standard nell’archiviazione dei dati: ‘tar’ genera un
archivio non compresso che può comprendere anche collegamenti simbolici e file speciali; ‘gzip’
lo comprime generando un archivio più piccolo.
La coppia funziona così bene che ‘tar’ è in grado di utilizzare ‘gzip’ direttamente senza dover far uso di pipeline, purché il risultato dell’archiviazione non debba essere suddiviso su più
supporti.
L’origine del nome ‘tar’ è Tape archive, ma questo programma permette ugualmente di gestire
qualunque altro tipo di sistema di memorizzazione.
La versione GNU di ‘tar’ (quella utilizzata normalmente nelle distribuzioni GNU/Linux), non
memorizza percorsi assoluti.
I programmi ‘tar’ e ‘gzip’ sono descritti rispettivamente nelle sezioni 76.1.2 e 76.2.1. Nelle
sezioni seguenti sono riportati alcuni esempi.
Negli esempi seguenti si immagina di dover archiviare il contenuto della directory ‘~/
lettere/’, equivalente a ‘/home/tizio/lettere/’, comprese eventuali sottodirectory
discendenti.
1
Ci sono programmi di archiviazione che si comportano così anche se non subiscono compressioni successive.
3910
Copie di sicurezza
Negli esempi si cerca di utilizzare la forma tradizionale per l’indicazione delle opzioni standard
di ‘tar’. Alcune di queste possono fare a meno del trattino iniziale, come nel caso di ‘c’ e ‘x’.
Altre opzioni hanno quel trattino, ma possono essere aggregate in un’unica serie di lettere, come
nel caso di ‘czvf’, dove si ha l’unione di: ‘c’, ‘-z’, ‘-v’ e ‘-f’.
Copie di sicurezza
3911
346.5.1 Archiviazione diretta su dispositivi di memorizzazione
L’archiviazione attraverso la registrazione diretta sui dispositivi utilizza completamente il supporto di memorizzazione destinatario, anche se la quantità di dati da archiviare è molto
piccola.
Quello sotto indicato è un esempio di archiviazione in un nastro magnetico singolo: l’opzione
‘c’ sta per Create; ‘-f’ sta per File e permette di definire la destinazione dell’archiviazione;
‘-z’ attiva la compressione attraverso ‘gzip’. Dal momento che si utilizza la compressione,
l’archiviazione multivolume non è ammissibile.
# tar czf /dev/ftape ~/lettere
I dischetti possono essere utilizzati come i nastri, in modo sequenziale, ma questo lo si fa solo quando l’archivio generato non è contenibile in un solo dischetto: si ha quindi una copia
multivolume e in tal caso non è ammissibile l’uso della compressione.
# tar cf /dev/fd0u1440 -M ~/lettere
In questo caso, l’opzione ‘-M’ sta proprio per Multivolume indicando quindi la possibilità che
il supporto di destinazione non sia in grado di contenere l’intero archivio. In tal modo, ‘tar’ si
prende cura di sospendere l’archiviazione ogni volta che viene raggiunta la capienza massima.
‘tar’ non è in grado di determinare da solo questa capacità, per cui, nell’esempio, il dispositivo
del dischetto è stato indicato in modo da riconoscerne la geometria, ma in alternativa si poteva
utilizzare l’opzione ‘-L’ seguita dalla dimensione:
# tar cf /dev/fd0 -M -L 1440 ~/lettere
Quando si utilizzano in questo modo, i dischetti non contengono un file system e di conseguenza non possono essere montati. La lettura del loro contenuto avviene nello stesso modo della
scrittura, attraverso il nome del dispositivo.
L’archiviazione su dischetti, attraverso il dispositivo, richiede comunque che questi siano già
stati inizializzati (a basso livello) secondo il formato che viene indicato. Non conta che siano
vuoti: è importante che ci siano le tracce e i settori come previsto.
346.5.2 Archiviazione normale su file
Quando l’archiviazione può essere fatta su dischi (con file system ) di dimensione sufficiente
a contenere l’archivio intero, invece di utilizzare l’opzione ‘-f’ per specificare un file di dispositivo, si può indicare direttamente un normalissimo file al loro interno, come nell’esempio
seguente:
$ tar cf /mnt/mo1/lettere.tar ~/lettere
In pratica, nel caso appena visto, si utilizza un disco montato nella directory ‘/mnt/mo1/’ e si
crea il file ‘lettere.tar’ al suo interno.
L’archiviazione compressa, con l’utilizzo di ‘gzip’, può essere ottenuta semplicemente con
l’opzione ‘-z’, come nell’esempio seguente:
$ tar czf /mnt/mo1/lettere.tar.gz ~/lettere
In tal caso l’estensione standard utilizzata (ma non obbligatoria) è ‘.tar.gz’ che rende esplicito
il fatto che la compressione è stata fatta dopo l’archiviazione. In alternativa si può usare anche
‘.tgz’, diffusa nei sistemi Dos.
3912
Copie di sicurezza
346.5.3 Archiviazione e percorsi
Gli esempi seguenti, pur archiviando gli stessi dati, mostrano un modo diverso di registrare i
percorsi all’interno dell’archivio. La directory di lavoro nel momento in cui si avvia il comando,
è ‘/home/tizio/’, corrispondente alla directory personale dell’utente.
/home/tizio$ tar czf /mnt/mo1/lettere.tar.gz ~/lettere
/home/tizio$ tar czf /mnt/mo1/lettere.tar.gz /home/tizio/lettere
/home/tizio$ tar czf /mnt/mo1/lettere.tar.gz lettere
/home/tizio$ tar czf /mnt/mo1/lettere.tar.gz ./lettere
Nei primi due esempi, viene archiviata l’indicazione del percorso precedente, ma pur essendo
stato dato in modo assoluto (‘/home/tizio/lettere’), questo viene reso relativo da ‘tar’,
eliminando la prima barra obliqua che si riferisce alla directory radice.2
Negli ultimi due esempi, viene archiviata l’indicazione della sola directory ‘lettere/’, sempre
in modo relativo.
346.5.4 Archiviazione di periodi
I file sono forniti di informazioni orarie. In base a queste è possibile eseguire delle copie di
sicurezza riferite a dei periodi. Le copie di sicurezza a più livelli possono essere ottenute in
modo semplificato attraverso l’uso dell’opzione ‘-N’ seguita da una data di partenza: si ottiene
l’archiviazione di quanto variato a partire da una certa data; di solito si utilizza quella dell’ultima
archiviazione completa.3
$ tar czf /mnt/mo1/lettere.tar.gz -N 19970801 ~/lettere
In questo caso, la data che segue l’opzione ‘-N’ rappresenta la mezzanotte del primo agosto 1997.
$ tar czf /mnt/mo1/lettere.tar.gz -N "19970801 15:30" ~/lettere
Questo ultimo esempio aggiunge alla data l’indicazione di un’ora particolare, 15:30; per evitare
che sia interpretato in maniera errata, il gruppo data-orario viene racchiuso tra virgolette.
346.5.5 Archiviazione limitata a un’unità
Quando si eseguono delle copie di sicurezza, è probabile che si voglia archiviare solo la situazione di una certa unità di memorizzazione (partizione o directory condivisa in rete). In tal caso si
deve indicare precisamente questo limite con l’opzione ‘-l’ (Limit).
346.5.6 Estrazione dei percorsi
Quando si accede all’archivio per estrarne il contenuto o per compararlo con i dati originali, entra
in gioco il problema dei percorsi. I dati vengono estratti normalmente nella directory corrente,
oppure vengono comparati utilizzando come punto di partenza la directory corrente. Quindi, se
l’archivio contiene la directory degli esempi precedenti, registrata a partire dalla radice (ma come
già spiegato, senza l’indicazione della radice stessa), questi verranno estratti in ‘./home/tizio/
lettere/’, oppure comparati con i dati contenuti a partire da questo percorso.
2
Questo comportamento riguarda almeno il programma ‘tar’ di GNU.
Il concetto di variazione, in questo caso, si deve intendere come variazione del contenuto o degli attributi. Quindi si
tratta della data di modifica o della data di «creazione».
3
Copie di sicurezza
3913
Se in fase di estrazione o comparazione si vuole fare riferimento a percorsi assoluti, si può utilizzare l’opzione ‘-P’. In questo modo si afferma esplicitamente che i percorsi indicati nell’archivio
vanno considerati come discendenti dalla directory radice.
Questo particolare della gestione dei percorsi è molto importante quando si fanno le copie di
sicurezza: spesso si hanno dischi montati su punti di innesto provvisori, pertanto non è molto
conveniente memorizzare anche il percorso su cui sono montati.
346.5.7 Recupero
Per poter effettuare un recupero di dati da un archivio è necessario conoscere in particolare il
modo in cui questo era stato creato: normale, compresso, multivolume.
In generale, per recuperare dati da un archivio si utilizza l’opzione ‘x’ (Extract) al posto di ‘c’ e
a essa si devono eventualmente aggiungere ‘-z’ nel caso di estrazione da un archivio compresso
con ‘gzip’ o ‘-M’ nel caso di un archivio multivolume.
Durante il recupero di una copia di sicurezza è importante fare in modo che i dati riprodotti mantengano gli stessi attributi originali (permessi e proprietà). Per questo si aggiungono le opzioni
‘-p’ (riproduce i permessi) e ‘--same-owner’ (riproduce le proprietà: UID e GID).
L’esempio seguente mostra un recupero da un archivio multivolume su dischetti.
~$ tar x -M -p --same-owner -f /dev/fd0u1440
L’esempio seguente mostra un recupero con percorso assoluto: i percorsi indicati all’interno
dell’archivio vengono aggiunti alla directory radice.
$ tar xz -P -p --same-owner -f /mnt/mo1/lettere.tar.gz
346.5.8 Recupero parziale
Il recupero parziale del contenuto di un archivio ‘tar’ può essere fatto per file singoli o per directory, oppure attraverso l’uso di caratteri jolly. In questo ultimo caso però, occorre fare attenzione
a evitare che la shell esegua l’espansione: è compito di ‘tar’ determinare a cosa corrispondano
all’interno dei suoi archivi.4
Valgono le regole solite: l’asterisco rappresenta un insieme di caratteri qualunque; il punto interrogativo rappresenta un carattere qualsiasi; le parentesi quadre rappresentano un carattere a
scelta tra un insieme o tra un intervallo determinato.
Quando si indicano nomi di file o directory, o quando si utilizzano i caratteri jolly, occorre tenere
presente che si sta facendo riferimento ai dati contenuti nell’archivio, con i percorsi memorizzati
originariamente. Inoltre, se con i caratteri jolly si determina la corrispondenza con una directory,
si ottiene l’estrazione del contenuto complessivo di quella.
L’esempio seguente mostra in che modo potrebbero essere recuperate le lettere contenute nella
directory ‘home/tizio/lettere/nuove/’ (l’esempio appare diviso su due righe, a causa della
sua lunghezza).
$ tar xz -P -p --same-owner -f /mnt/mo1/lettere.tar.gz ←,→home/tizio/lettere/nuove
L’esempio seguente mostra l’estrazione di tutti i file e delle directory corrispondenti a ‘home/
tizio/lettere/ve ’. Gli apici sono necessari per evitare che intervenga la shell a espandere
*
l’asterisco.
4
Questo è un po’ quello che accade a ‘find’ con l’opzione ‘-name’: è ‘find’ stesso ad analizzare i caratteri jolly.
3914
Copie di sicurezza
$ tar xz -P -p --same-owner -f /mnt/mo1/lettere.tar.gz ←,→’home/tizio/lettere/ve*’
346.5.9 Elenco e controllo
Per ottenere un elenco del contenuto di un archivio e per compararne il contenuto con i dati
originali, valgono le stesse regole del recupero dei dati. In particolare, al posto dell’opzione ‘x’
si deve utilizzare ‘t’ (List) per gli elenchi e ‘d’ (Diff ) per la comparazione.
346.6 Archiviazione di un file system
L’archiviazione di un file system intero, va fatta considerando le caratteristiche di questo, in particolare della sua struttura fisica: partizioni e condivisione attraverso la rete. In generale dovrebbe
essere conveniente l’archiviazione separata per ogni partizione e per ogni file system condiviso
in rete.
Oltre a questo occorre evitare di archiviare anche l’archivio che si sta creando: quando la destinazione dell’archiviazione è un file su disco, questo deve essere montato da qualche parte e per
questo si potrebbe creare un circolo vizioso.
Ci sono directory che, per la loro natura, non conviene o non devono essere archiviate: per
‘/tmp/’ non conviene; con ‘/proc/’ non si deve.5 In questi casi si deve solo ricordare di ricreare
queste directory, nel momento in cui fosse necessario il recupero.6
346.6.1 Strumenti per il recupero
L’archiviazione di copie di sicurezza non è sufficiente a garantirsi contro gli incidenti: in che
modo si può avviare un elaboratore in cui è appena stato sostituito il disco fisso? Evidentemente,
occorre essere più previdenti e predisporre in anticipo gli strumenti necessari per preparare le
partizioni di un nuovo disco fisso e per recuperare i dati archiviati precedentemente.
Questo argomento viene trattato nei prossimi capitoli.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
5
6
GNU/Linux
Non bisogna dimenticare i permessi: ‘/tmp/’ 17778 e ‘/proc/’ 05558.
Capitolo
347
Emergenza con GNU/Linux
Nel momento dell’imprevisto si può agire solo se si è stati previdenti, pensando ai tipi di situazioni che si possono presentare e preparando gli strumenti necessari in anticipo. Le copie di
sicurezza sono la prima cosa da fare per prepararsi ai guai, ma da sole non bastano: occorrono
altri strumenti per rimettere in sesto un sistema prima di poter effettuare un eventuale recupero
dalle copie.
347.1 Dischetti
Di fronte a un problema qualunque di una gravità tale da non permettere l’avvio di un sistema
locale, l’unica possibilità di intervenire è data da strumenti su dischetti. Esistono diversi tipi di
dischetti che possono essere stati preparati in precedenza:
• dischetti di avvio;
• dischetti di installazione della distribuzione GNU/Linux;
• dischetti preparati appositamente.
347.1.1 Dischetti di avvio
Un dischetto di avvio può essere utile quando, per qualche motivo, il metodo normale di caricamento del sistema operativo non funziona più. Esistono almeno tre tipi di dischetti di questo
tipo:
• dischetti con un settore di avvio, ma senza kernel;
• dischetti con un settore di avvio e con il kernel;
• dischetti contenenti solo l’immagine del kernel.
347.1.1.1 Settore di avvio senza il kernel
La prima soluzione, quella del dischetto senza kernel, non è adatta per avviare un sistema in
difficoltà: è solo un modo per verificare una configurazione di LILO quando non si vuole interferire con l’MBR del disco fisso. In pratica si ottiene semplicemente indicando nel file ‘/etc/
lilo.conf’ la riga ‘boot=/dev/fd0’, come nell’esempio seguente:
boot=/dev/fd0
prompt
timeout=50
image=/boot/vmlinuz
label=linux
root=/dev/hda2
read-only
Quando viene avviato l’eseguibile ‘lilo’ con questa configurazione, si ottiene la scrittura del
primo settore del primo dischetto (il dischetto deve essere stato inizializzato in precedenza e può
anche non contenere alcun file system). Ma in questo modo si intende che i file per il caricamento
del sistema si devono trovare nella directory ‘/boot/’ del momento in cui si esegue ‘lilo’,
3915
3916
Emergenza con GNU/Linux
ovvero nel file system in funzione in quel momento e non nel dischetto. Inoltre, anche il kernel
‘/boot/vmlinuz’ si intende contenuto in quel file system e non nel dischetto.
Quando si avvia con un dischetto fatto in questo modo, il programma contenuto nel primo settore
va alla ricerca del kernel e degli altri file, necessari per il caricamento del sistema, nel disco fisso
nel momento dell’utilizzo di LILO. Se il sistema non si avvia perché questi file o il kernel sono
stati spostati, a nulla serve un dischetto fatto in questo modo.
347.1.1.2 Settore di avvio e kernel
Per fare in modo che il dischetto avvii un kernel contenuto al suo interno, è necessario che
questo dischetto contenga un file system, che vi sia stata copiata la directory ‘/boot/’ con il
suo contenuto, la directory ‘/etc/’ con il file ‘lilo.conf’ e che sia stata riprodotta la directory
‘/dev/’ con il file di dispositivo ‘fd0’ (assieme agli altri file di dispositivo necessari a individuare
i dischi o le partizioni a cui si vuole fare riferimento). Quindi è sufficiente eseguire ‘lilo’ con
l’opzione ‘-r’, come descritto nella sezione 18.4.
Esiste anche la possibilità di usare SYSLINUX, che permette di realizzare un dischetto con le
stesse caratteristiche e con meno difficoltà. SYSLINUX è descritto nel capitolo 16.
Rispetto alla prossima tecnica, un dischetto contenente LILO e il kernel, come appena descritto,
è uno strumento di avvio più completo perché permette di specificare, sia attraverso la configurazione del file ‘/etc/lilo.conf’ che per mezzo del cosiddetto bootprompt, alcuni parametri
di avvio particolari del quale il proprio sistema potrebbe avere bisogno.
347.1.1.3 Immagine del kernel
L’ultima possibilità è la più semplice e, sotto questo aspetto, anche la più sicura: il file del kernel
viene copiato sul dispositivo del dischetto, senza fare uso di alcun file system. Si può utilizzare
uno dei due modi seguenti.
# cp vmlinuz /dev/fd0
# dd if=vmlinuz of=/dev/fd0
Evidentemente, il file del kernel è speciale perché riesce ad avviare se stesso. Il kernel da solo,
però, potrebbe non sapere quale dispositivo contiene il file system principale da montare al momento dell’avvio. È necessario utilizzare il programma ‘rdev’ per inserire questa e altre notizie
nel kernel.
Supponendo che si debba avviare la partizione ‘/dev/hda2’, inizialmente in sola lettura, si
procede come segue per fare queste annotazioni in un kernel copiato in un dispositivo ‘/dev/
fd0’:
# rdev /dev/fd0 /dev/hda2
# rdev -R /dev/fd0 1
Emergenza con GNU/Linux
3917
347.1.2 Dischetti di una distribuzione
La maggior parte delle distribuzioni GNU/Linux predispone dei dischetti di emergenza che
consentono generalmente di accedere al disco fisso e di fare delle piccole riparazioni.
Tra tutti, i dischetti più rudimentali sono quelli della distribuzione Slackware. La loro semplicità è da considerare un pregio, dal momento che utilizzandoli ci si trova di fronte un sistema
GNU/Linux più o meno tradizionale, senza ottimizzazioni particolari.
347.1.3 Dischetti realizzati appositamente
Ogni sistema ha le proprie caratteristiche ed esigenze. I dischetti di emergenza preparati da altri, oppure ottenuti da una distribuzione GNU/Linux, possono adattarsi a un certo insieme di
situazioni, ma non a tutte.
Quando si vuole essere sicuri di avere gli strumenti giusti al momento giusto, occorre che questi
siano stati preparati e collaudati bene, in modo da non sprecare tempo inutilmente. In sostanza,
la realizzazione o la personalizzazione di dischetti di emergenza è una tappa importante per chi
vuole amministrare seriamente il proprio sistema.
347.2 Personalizzazione di dischetti di emergenza
L’utilizzo di dischetti di emergenza preparati da altri è un buon punto di partenza, ma le
particolarità che ogni sistema può avere consigliano almeno una personalizzazione del kernel.
347.2.1 Loopback block device
Per poter costruire o almeno personalizzare dei dischetti di emergenza è particolarmente utile
attivare nel kernel la gestione diretta delle immagini di questi (sezione 29.2.7).
In questo modo, un’immagine non compressa di un dischetto può essere montata con un comando
simile a quello seguente:
mount -o loop -t tipo_di_file_system file_immagine punto_di_innesto
347.2.2 disco RAM
Il file system principale può essere caricato in memoria centrale (RAM) e montato da lì. Si ottiene
un cosiddetto disco RAM. A parte ogni considerazione sui vantaggi che questo può avere nelle
prestazioni del sistema, si tratta di una modalità quasi obbligata per l’utilizzo di dischetti di
emergenza. Infatti, un disco RAM può essere ottenuto a partire da un’immagine compressa: è il
kernel stesso che la espande in memoria all’atto del caricamento. Quindi, si può fare stare in un
dischetto un’immagine di dimensioni superiori alla sua capacità.
Oltre a questo vantaggio, che però richiede la presenza di molta memoria RAM, un dischetto
contenente un file system che è stato trasferito nella RAM, può essere rimosso subito dopo il
suo caricamento, permettendo il riutilizzo dell’unità a dischetti, magari per accedere ad altri
programmi di servizio non inclusi nel disco RAM.
Per la gestione di un disco RAM occorre che il kernel sia configurato appositamente (29.2.7).
3918
Emergenza con GNU/Linux
347.2.3 Scostamento (offset)
Quando il kernel carica un disco RAM da un’immagine contenuta in un dischetto, deve conoscere
la posizione di inizio di questa immagine. Ciò è importante quando sia il kernel che l’immagine
da caricare risiedono nello stesso dischetto. Quando l’immagine da caricare nel disco RAM è
contenuta in un dischetto separato, questa si troverà normalmente a partire dall’inizio di questo,
cioè da uno scostamento pari a zero.
347.3 Dischetti Slackware
I dischetti della distribuzione Slackware sono i più semplici ed efficaci in situazioni di emergenza.
Per essere avviati necessitano di un dischetto di avvio (boot) contenente il kernel, ma questo può
essere eventualmente predisposto localmente in modo da avere a disposizione la configurazione
più adatta al proprio sistema. Questi dischetti sono reperibili normalmente presso gli indirizzi
seguenti:
<http://www.ibiblio.org/pub/Linux/distributions/slackware/rootdsks/>
<http://www.ibiblio.org/pub/Linux/distributions/slackware/bootdsks.144/>
Il dischetto migliore per la soluzione di problemi è rappresentato dall’immagine compressa
‘rescue.gz’. Se si intende utilizzare anche un dischetto di avvio ottenuto dalla distribuzione,
occorre sceglierlo in base alle indicazioni che si trovano nei file di testo inclusi nelle directory
indicate.
L’immagine ‘rootdsks/rescue.gz’ è compressa e contiene in pratica un disco in formato
Ext2 di qualche mebibyte (simbolo: Mibyte). Questo implica che per poterne fare uso occorre
molta memoria RAM.
Nelle prime versioni della distribuzione Slackware era distribuita un’immagine ‘rescue.gz’
molto più piccola, che poteva essere espansa e collocata comodamente su un dischetto da
1440 Kibyte. Questa immagine è ancora disponibile e si trova nel percorso ‘rootdsks/
obsolete/rescue.gz’. Il fatto di poterla decomprimere su un dischetto da 1440 Kibyte permette di evitare il caricamento nella RAM. Per elaboratori aventi fino a 8 Mibyte di memoria
RAM, questo è l’unico dischetto di emergenza che possa essere utilizzato ragionevolmente.
Se si intende utilizzare l’immagine ‘rootdsks/obsolete/rescue.gz’, è necessario
avviare con un kernel in grado di gestire i vecchi binari a.out.
347.3.1 Organizzazione dei dischetti Slackware
Come già accennato, la distribuzione Slackware mette a disposizione immagini di dischetti di avvio, contenenti essenzialmente il kernel, assieme a immagini di dischetti contenenti il file system
principale (root).
Le immagini per l’avvio rappresentano dischetti con un file system normale, contenente un settore di avvio, la directory ‘/boot/’ e il kernel. Si tratta in pratica di dischetti realizzati in modo
analogo a quanto descritto in precedenza nella sezione 347.1.1, quando si faceva riferimento a
dischetti contenenti questi elementi. Le immagini dei dischetti di avvio, anche se non sono di
dimensioni pari a quelle di un dischetto normale, non dovrebbero essere compresse e si possono
copiare semplicemente sul dispositivo del dischetto di destinazione.
Emergenza con GNU/Linux
3919
# dd if=net.i of=/dev/fd0
Le immagini dei dischetti contenenti il sistema minimo (root), sono invece dischetti di qualche
mebibyte, compressi in modo da poter essere collocati all’interno di un dischetto da 1440 Kibyte,
costringendo però all’uso di un disco RAM.
347.3.2 Utilizzare un kernel personalizzato
Per abbinare un kernel personalizzato a un dischetto contenente il sistema minimo della distribuzione Slackware, si potrebbe ricostruire un dischetto di avvio seguendo le stesse modalità usate
dalla distribuzione stessa, oppure in maniera più semplice, copiando il kernel in un dischetto
direttamente attraverso il suo dispositivo e poi intervenendo con il programma ‘rdev’. Viene
descritta l’ultima di queste modalità.
# dd if=zImage of=/dev/fd0
La copia di un kernel in un dischetto, attraverso il suo dispositivo, genera il solito dischetto
di avviamento già descritto tante volte. Questo kernel su dischetto deve però essere informato
di dove e come fare il caricamento del sistema. Il file system principale viene caricato da un
dischetto, quindi si scrive questo messaggio nel kernel attraverso ‘rdev’.
# rdev /dev/fd0 /dev/fd0
I dischetti contenenti il sistema minimo della distribuzione Slackware non prevedono il controllo
del file system e il successivo montaggio in lettura e scrittura. In pratica, il file system principale
deve essere montato inizialmente in lettura-scrittura.
# rdev -R /dev/fd0 0
Infine si deve specificare che:
• l’immagine del dischetto contenente il sistema (compressa o meno che sia) si trova in un
dischetto separato e parte dalla posizione iniziale: lo scostamento è pari a zero;
• si vuole, oppure non si vuole, che tale dischetto sia caricato in un disco RAM;
• si vuole un preavviso per sapere quando si può togliere il dischetto del kernel per inserire
il dischetto contenente il sistema.
Per fare questo si agisce su una serie di bit configurabili attraverso ‘rdev’ con l’opzione ‘-r’:
• i primi 11 (dal bit 0 al bit 10) permettono di definire l’indirizzo dello scostamento (in
blocchi di 1024 byte);
• il bit 14 indica che si vuole caricare un disco RAM;
• il bit 15 indica che si vuole avere una pausa per lo scambio dei dischetti.
Se si vuole caricare il file system principale in un disco RAM si deve utilizzare ‘rdev’ nel modo
seguente:
# rdev -r /dev/fd0 49152
infatti, 215 + 214 + 0 = 49152.
Se invece non si vuole il disco RAM si deve utilizzare ‘rdev’ nel modo seguente:
Emergenza con GNU/Linux
3920
# rdev -r /dev/fd0 32768
infatti, 215 + 0 + 0 = 32768.
347.4 Kernel per dischetti di emergenza
Quando si configura un kernel da utilizzare assieme a dischetti di emergenza, occorre tenere presente che non è ragionevolmente possibile utilizzare i moduli ed è importante attivare determinate
caratteristiche che di solito non vengono considerate per i sistemi normali.
• Gestione dei binari a.out.
I dischetti di emergenza obsoleti sono nel vecchio formato a.out. Il kernel deve essere stato
predisposto per gestirli.
Kernel support for a.out binaries
• File system Minix.
Il file system più utilizzato in passato per i dischetti di emergenza, specialmente quando questi dovevano essere di dimensioni minime, è Minix. Anche se adesso i dischetti di
emergenza che si trovano in circolazione sono prevalentemente in formato Ext2, conviene
includere la gestione di questo vecchio tipo di formato.
Minix fs support
• dischi RAM.
Anche se non si intendono utilizzare dischetti caricati in memoria RAM, vale la pena di
preparare un kernel che ne permetta comunque l’utilizzo.
RAM disk support
• Porta parallela PLIP.
Un kernel per un dischetto di emergenza deve permettere la gestione della rete (TCP/IP)
e, in particolare, invece di attivare la gestione della porta parallela per la stampa, conviene
attivare la gestione della connessione PLIP.
PLIP (parallel port) support
347.4.1 Tastiera
Quando si usano dei dischetti di emergenza si hanno già molte limitazioni e a queste si aggiunge
anche la scomodità di una tastiera che non combacia con quella USA.
Si può risolvere il problema direttamente nel kernel senza dover tentare di inserire il programma
‘loadkeys’ in dischetti già troppo piccoli. È sufficiente trovare il file della mappa della tastiera
italiana (di solito si tratta del file ‘it.kmap’ collocato nella directory ‘/usr/share/keymaps/
piattaforma /qwerty/’) e quindi generare il sorgente ‘defkeymap.c’. Si procede come segue,
nel caso si utilizzi la piattaforma i386.
# cd /usr/src/linux/drivers/char
# loadkeys --mktable /usr/share/keymaps/i386/qwerty/it.kmap ←,→> defkeymap.c
La compilazione successiva di un nuovo kernel utilizzerà la mappa italiana come predefinita e
non ci sarà bisogno di utilizzare ‘loadkeys’.
Emergenza con GNU/Linux
3921
347.5 Cavi
Quando si ha la disponibilità di più elaboratori, è probabile che il danno presentatosi su uno di
questi non si sia riprodotto in tutti. Una piccola rete locale potrebbe essere di aiuto in situazioni
di emergenza e in sua mancanza potrebbero andare bene anche dei cavi paralleli PLIP. Questo
tipo di cavo viene descritto nella parte xciv. La sua realizzazione non è difficile: basta un piccolo
saldatore, un po’ di stagno, due connettori maschi DB-25 e una piattina multipolare con almeno
13 fili. La schermatura non è necessaria.
Con i dischetti della distribuzione Slackware, preferibilmente con l’immagine ‘resque.gz’, è
possibile stabilire una semplice connessione con un servente NFS.
347.5.1 Ethernet
Attraverso una connessione Ethernet, con un’interfaccia riconosciuta come ‘eth0’, si può agire
come nell’esempio seguente. Si suppone in particolare che l’indirizzo di rete sia 192.168.1.0,
che la maschera di rete sia 255.255.255.0 e di poter utilizzare l’indirizzo IP 192.168.1.17 per
l’elaboratore avviato con i dischetti di emergenza.
# ifconfig eth0 192.168.1.17 netmask 255.255.255.0
# route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
Per verificare la connessione si può fare un ‘ping’ verso l’elaboratore da raggiungere: potrebbe
trattarsi dell’indirizzo 192.168.1.1.
# ping 192.168.1.1
Se tutto è andato bene si può procedere. Si suppone che l’elaboratore 192.168.1.1 metta a
disposizione il suo file system a partire dalla directory radice.
# mount -t nfs 192.168.1.1:/ /mnt
347.5.2 PLIP
Nel caso di una connessione PLIP, la procedura è un po’ differente. In particolare bisogna ricordare che l’elaboratore dal quale si vogliono attingere i dati attraverso il protocollo NFS, deve
avere un kernel compilato in modo da gestire questo tipo di connessione.
Si fa riferimento allo stesso esempio riportato nella sezione precedente. L’unica differenza sta
nell’interfaccia usata per la comunicazione: si suppone che sia stata riconosciuta la ‘plip1’ da
entrambi i lati.
Il procedimento di connessione va fatto da entrambi i capi, infatti, raramente un elaboratore
ha una connessione PLIP stabile, per cui non si trova ad avere un indirizzo e una tabella di
instradamento già pronti.
Dal lato dell’elaboratore avviato con i dischetti si procede come segue:
rescue# ifconfig plip1 192.168.1.17 pointopoint 192.168.1.1
rescue# route add -host 192.168.1.17 dev plip1
rescue# route add -host 192.168.1.1 dev plip1
3922
Emergenza con GNU/Linux
Dal lato dell’elaboratore servente si effettua l’operazione inversa.
server# ifconfig plip1 192.168.1.1 pointopoint 192.168.1.17
server# route add -host 192.168.1.1 dev plip1
server# route add -host 192.168.1.17 dev plip1
Per verificare la connessione si può fare un ‘ping’.
rescue# ping 192.168.1.1
Se tutto è andato bene si può procedere montando il file system di rete.
rescue# mount -t nfs 192.168.1.1:/ /mnt
347.5.3 Considerazioni accessorie
Il dischetto di emergenza ha bisogno di un altro punto di innesto per accedere a un disco fisso
locale. È sufficiente creare un’altra directory.
Quando si accede a un servente NFS e non è possibile farlo mantenendo i privilegi dell’utente
‘root’, una semplice copia attraverso ‘cp -dpR’ non dà un risultato garantito: alcuni file potrebbero risultare inaccessibili in lettura. La cosa si risolve facilmente impacchettando quello che
serve nell’elaboratore di origine e dando a questo archivio tutti i permessi necessari.
347.6 Utenti e gruppi
Quando si utilizza un sistema operativo minimo, avviato attraverso dischetti di emergenza, per
recuperare i dati da uno o più archivi, occorre fare mente locale al problema dell’abbinamento
utenti/gruppi, UID/GID.
Trattandosi di un sistema minimo, conterrà alcuni nomi di utenti e di gruppi, presumibilmente
non «umani», ma comunque esistenti. Solitamente, questi nomi di utenti e di gruppi sono standardizzati, tuttavia il loro abbinamento con numeri UID/GID non è sempre uniforme. A questo
punto, se si recuperano i dati di un sistema in cui questi nomi non corrispondono esattamente,
si rischia di riprodurre una copia differente, che non sarà valida quando il sistema normale sarà
ripristinato.
Se non ci sono alternative, si può accettare l’inconveniente, riavviare il sistema rigenerato e
ripetere il recupero. In questo modo, i file verranno sovrascritti e le proprietà saranno abbinate in
base ai nuovi file ‘/etc/passwd’ e ‘/etc/group’.
In generale, proprio per questo problema, sarebbe opportuno che il dischetto di emergenza contenesse esclusivamente l’indicazione dell’utente e del gruppo ‘root’, eliminando
qualunque altro tipo di utente di sistema.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
348
nanoLinux II
In questo capitolo si intende descrivere in che modo si può preparare un sistema GNU/Linux di
emergenza attraverso un esempio allegato a questa documentazione.
In questo periodo le unità di memorizzazione a disco, di medie o alte capacità, diventano sempre
più accessibili e presto potrebbero addirittura sostituire completamente i nastri. In questa situazione, un piccolo sistema GNU/Linux potrebbe risiedere all’interno di dischi, insieme a delle
copie di sicurezza, di modo che, con l’aiuto di un semplice dischetto di avvio, si possa ripristinare
facilmente un sistema danneggiato.
A parte le considerazioni legate a una buona strategia per la sicurezza del proprio sistema, un
piccolo sistema GNU/Linux può essere un buon banco di scuola per apprendere il funzionamento
di componenti che altrimenti sfuggono nell’intrico di file di cui un sistema normale è composto.
Le condizioni alle quali è sottoposto l’utilizzo di nanoLinux II sono riportate nell’introduzione.
nanoLinux II contiene una vecchia edizione di Secure Shell, con una licenza particolare,
benché gratuita.
nanoLinux II è un lavoro ormai obsoleto, ma può essere ancora utile in situazioni di emergenza.
348.1 Lavoro di cesello
Il modo più semplice per arrivare a una mini configurazione è quello di preparare una piccola
partizione, installarvi GNU/Linux selezionando il minimo numero possibile di pacchetti, cancellando tutto quello che sembra inutile per i propri scopi. Naturalmente, non si può fare tutto in
una volta, bisogna andare per tentativi: a un certo punto si potrebbe scoprire semplicemente che
questo sistema non si avvia più.
Quanto più la distribuzione GNU/Linux che si utilizza è sofisticata, attenta alla sicurezza e
gradevole da utilizzare, tanto più difficile sarà questa operazione.
Se il risultato finale è di dimensioni ragionevolmente piccole (la dimensione critica potrebbe
essere intorno agli 8 Mibyte), si può decidere di preparare un file-immagine. Quindi, con un po’
di fortuna, se comprimendolo si riesce a stare al di sotto della dimensione fatidica di 1440 Kibyte,
si può realizzare il proprio dischetto di emergenza, altrimenti occorre lasciare fuori una parte che
non pregiudichi l’avvio, caricandola durante la fase di inizializzazione del sistema.
348.1.1 Scegliere la fonte
Un mini sistema GNU/Linux necessita di pochi attributi: semplicità e funzionalità. La sicurezza
non conta, o almeno non dovrebbe. Quando si sceglie la fonte di GNU/Linux da «cannibalizzare»
per arrivare a una propria miniconfigurazione, non contano le misure di sicurezza che potrebbero
invece servire a complicare le cose ulteriormente.
Per questo è il caso di rivolgersi alla distribuzione Slackware: la più semplice e spartana, sia
per il modo in cui sono realizzati i pacchetti che per la semplicità nella struttura degli script
della procedura di inizializzazione del sistema (‘/etc/rc.d/*’). Vale la pena di ricordare che
per installare un pacchetto Slackware qualunque basta decomprimere i pacchetti con ‘tar’ ed
eseguire lo script ‘/install/doinst.sh’.
3923
3924
nanoLinux II
348.1.2 Installare e cancellare il superfluo
Dopo aver installato il minimo indispensabile, si procede con la cancellazione di ciò che non è assolutamente necessario, come per esempio la documentazione. Il vero problema sono le librerie:
bisogna conservare fino all’ultimo quelle contenute in ‘/lib/*’; solo dopo che è stato deciso
quale insieme di programmi si vuole mantenere si potranno eliminare le librerie superflue.
Ci sono due librerie essenziali:
• ‘/lib/ld.so’, la libreria dinamica per i binari compilati in formato a.out;
• ‘/lib/ld-linux.so’, la libreria dinamica per i binari compilati in formato ELF.
Se si utilizza solo uno dei due formati di programmi binari, basta la libreria dinamica relativa.
Il nome effettivo di queste librerie è formato spesso dall’aggiunta dei numeri di versione. Quindi,
‘ld.so’ potrebbe essere in realtà ‘ld.so.1.7.14’, o qualunque altra cosa. Per fare in modo che
non ci siano problemi a raggiungere le librerie, occorre abbinare dei collegamenti (di solito sono
collegamenti simbolici) in modo da mantenere i riferimenti ai nomi normali.
Per conoscere di quali altre librerie si può avere bisogno, basta utilizzare il programma ‘ldd’.
Per esempio:
$ ldd /bin/gzip[ Invio ]
libc.so.5 => /lib/libc.so.5.4.38 (0x40002000)
Quando si interviene con i file di libreria, specialmente nel caso in cui questi vengano spostati o aggiunti, è necessario rigenerare il file ‘/etc/ld.so.cache’, attraverso il programma
‘ldconfig’.
Se si sta tentando di preparare un sistema su un disco che non sia il file system principale attuale, il file ‘ld.so.cache’ potrebbe trovarsi ovunque, per esempio in ‘/mnt/prove/etc/
ld.so.cache’. In una situazione del genere, si può utilizzare l’opzione ‘-r’, come mostrato
nell’esempio seguente:
# ldconfig -r /mnt/prove
348.1.3 Revisione della procedura di inizializzazione del sistema
Vale la pena di analizzare e modificare anche l’insieme di script che compongono la procedura
di inizializzazione del sistema, quelli che solitamente si trovano sotto ‘/etc/rc.d/’. Da loro
dipende l’avvio e l’arresto corretto del sistema. L’attivazione di tutti i demoni superflui può
essere eliminata.
Se l’obiettivo finale è quello di realizzare un dischetto da caricare come disco RAM, non è
possibile fare il controllo della partizione o del disco contenente il file system principale.
nanoLinux II
3925
348.1.4 Preparazione di un file-immagine
Quando si pensa di avere raggiunto un risultato accettabile, se le dimensioni sono ragionevoli,
si può preparare un file da utilizzare come immagine di un disco ipotetico. Si pone subito il
problema della scelta del formato: Ext2 o Minix? Probabilmente il sistema appena sintetizzato
avrà un numero molto elevato di file a causa dei dispositivi elencati all’interno di ‘/dev/’. Se
non si eliminano quelli superflui, un’immagine Minix potrebbe non permettere l’inserimento di
un numero di file così elevato. Nel caso del tipo Ext2 occorre specificare una dimensione di inode
molto piccola per permettere l’inserimento del massimo numero di voci possibili.
Si inizia con la creazione del file-immagine, per esempio di 4 Mibyte.
# dd if=/dev/zero of=~/miniroot.img bs=1k count=4k
Nell’esempio viene creato il file ‘~/miniroot.img’, composto da caratteri <NUL>.
Si procede quindi con la creazione di un file system Ext2.
# mke2fs -v -m 0 -i 1024 ~/miniroot.img
In questo modo si ottiene la creazione del file system; in particolare non viene riservata alcuna parte per l’utente ‘root’ e la dimensione degli inode viene limitata a 1024 byte (il minimo possibile). Si ottiene quindi la possibilità di inserire un massimo teorico di 4096 file al suo
interno.
Il programma fa notare che non si tratta di un disco, ma basta confermare e l’operazione procede
ugualmente. Un controllo può essere utile per verificare la situazione.
# e2fsck ~/miniroot.img
Infine, per potervi inserire il sistema GNU/Linux creato, si deve eseguire il montaggio
dell’immagine (sempre che il kernel permetta di farlo).
# mount -o loop -t ext2 ~/miniroot.img /mnt
Nel file-immagine non vanno copiati i file contenuti nella directory ‘/boot/’ e tanto meno il
kernel.
348.1.5 Preparazione del dischetto
Con un po’ di fortuna, si riesce a comprimere il file-immagine portandolo a una dimensione così
piccola da poter essere contenuto in un dischetto. Prima di farlo, occorre che sia stato smontato.
# umount /mnt
# gzip -9 ~/miniroot.img
Il risultato sarà naturalmente il file ‘~/miniroot.img.gz’. Se è andato tutto bene, si può
trasferire in un dischetto.
# dd if=~/miniroot.img.gz of=/dev/fd0
Al termine il dischetto è pronto.
nanoLinux II
3926
348.1.6 Kernel
L’ultima cosa da fare è la preparazione del kernel. Nel capitolo precedente sono state descritte
alcune caratteristiche importanti che questo dovrebbe avere. Vale la pena di ricordare che deve
essere in grado di gestire i dischi RAM, altrimenti non si può avviare un’immagine compressa.
Alla fine deve essere preparato nel modo seguente:
1. Viene copiato nel dispositivo del dischetto.
# dd if=zImage of=/dev/fd0
2. Il file system principale si troverà nel dischetto posto nella prima unità (anche se si tratta di
un’immagine compressa).
# rdev /dev/fd0 /dev/fd0
3. Il file system principale viene aperto inizialmente in lettura e scrittura: trattandosi di un
disco RAM non è possibile fare altrimenti.
# rdev -R /dev/fd0 0
4. L’immagine contenente il file system principale si trova in un dischetto separato, nel quale
si colloca a partire dalla posizione iniziale dello stesso: lo scostamento è zero; si vuole che
l’immagine del file system principale sia caricata in un disco RAM; si vuole un preavviso
per sapere quando si può togliere il dischetto del kernel per inserire il dischetto successivo.
215 + 214 + 0 = 49152
# rdev -r /dev/fd0 49152
La dimensione predefinita del disco RAM è di 4 Mibyte. Se questo non basta, occorre informare
il kernel in qualche modo. Se ci si trova in questa situazione, non è più tanto conveniente l’utilizzo di un kernel copiato direttamente e configurato attraverso ‘rdev’; piuttosto diventa preferibile
la preparazione di un dischetto con LILO che provvede all’avvio del kernel con tutte le opzioni necessarie. A questo proposito, si potrebbe usare una configurazione di ‘/etc/lilo.conf’
simile a quanto descritto più avanti in riferimento a nanoLinux II.
348.1.7 Ultime considerazioni
Se si è fortunati, la coppia di dischetti è pronta per essere collaudata. Naturalmente, oltre alla
fortuna occorre avere anche una buona quantità di memoria RAM.
C’è un particolare che è stato trascurato fino ad ora e qualcuno potrebbe porsi il problema. Cosa
deve contenere il file ‘/etc/fstab’ sulla riga che descrive il file system principale? Si tratta
di un disco RAM e teoricamente vi si dovrebbe fare riferimento utilizzando il file di dispositivo
‘/dev/ram’. Se non dovesse funzionare così, si può lasciare il nome del dispositivo del dischetto,
benché ciò sia falso.
/dev/fd0
/
ext2
defaults
1
1
nanoLinux II
3927
348.2 Dischi più grandi
Se si hanno a disposizione dischi più grandi, non è necessario indaffararsi così tanto: con l’aiuto
del programma di installazione della distribuzione che si ha a disposizione dovrebbe essere facile,
relativamente, arrivare a una configurazione inferiore ai 20 Mibyte.
348.3 Provare nanoLinux II
nanoLinux II richiede molta memoria RAM per poter funzionare, almeno 20 Mibyte. Per poterlo
utilizzare occorrono tre dischetti: uno per contenere il kernel, un altro per l’immagine compressa del file system principale e l’ultimo per i file aggiuntivi che non potevano essere contenuti
nell’immagine compressa.
348.3.1 Reperire nanoLinux II
nanoLinux II dovrebbe essere raggiungibile presso lo stesso nodo dal quale è stato ottenuto
questo documento, oppure presso uno dei vari siti speculari FTP di Appunti di informatica libera.
Si tratta di tre file: uno contenente l’immagine di un dischetto avviabile con un kernel molto semplice, in grado di gestire un disco RAM, una scheda Ethernet NE2000 e una connessione PLIP;
gli altri due sono il vero nanoLinux II, cioè un’immagine compressa del file system principale,
seguita da una serie di file aggiuntivi che non potevano essere contenuti nell’altro dischetto. I
nomi dovrebbero essere strutturati nel modo seguente:
1. ‘nLinux-II.boot’
2. ‘nLinux-II.root1.gz’
3. ‘nLinux-II.root2.tar.gz’
I file vanno copiati così come sono nei dischetti, senza decomprimerli.
348.3.2 Preparazione dei dischetti
Si procede nel solito modo trasferendo prima l’immagine di avvio.
# dd if=nLinux-II.boot of=/dev/fd0
Se invece di utilizzare questa immagine si preferisce un kernel realizzato personalmente, sarebbe
meglio ricostruire un dischetto simile a quello che accompagna nanoLinux II, di tipo Ext2, contenente LILO. Infatti, è necessario specificare l’utilizzo di un disco RAM complessivo di 7 Mibyte.
In pratica, è necessario il file ‘/etc/lilo.conf’ seguente:
boot=/dev/fd0
#map=/boot/map
install=/boot/boot.b
prompt
#timeout=50
#message=/intro.txt
image=/vmlinuz
label=linux
root=/dev/fd0
append="ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1 ramdisk_size=7168"
read-write
nanoLinux II
3928
Quindi si possono preparare gli altri dischetti.
# dd if=nLinux-II.root1.gz of=/dev/fd0
# dd if=nLinux-II.root2.tar.gz of=/dev/fd0
348.3.3 Avvio di nanoLinux II
Per avviare nanoLinux II basta avviare l’elaboratore con il dischetto del kernel. Nel momento in
cui il kernel presenta la richiesta
VFS: Insert root floppy disk to be loaded into ramdisk and press ENTER
si deve sostituire il dischetto con quello successivo (‘*.root1.*’) e quindi si può premere
[ Invio ].
RAMDISK: Compressed image found at block 0
Se l’elaboratore è dotato di memoria sufficiente, l’immagine compressa contenuta nel dischetto
viene caricata ed espansa, altrimenti si blocca il sistema.
Inizia quindi la procedura di inizializzazione del sistema e viene richiesto quasi subito
l’inserimento dell’ultimo dischetto.
Inserire il secondo dischetto e premere un tasto.
Successivamente viene richiesto di inserire la parola d’ordine per l’utente ‘root’. È necessario
definire tale parola d’ordine, dal momento che nanoLinux II mette in funzione alcuni servizi di
rete che, nel tempo in cui vengono usati, potrebbero essere sfruttati per attaccare l’elaboratore su
cui sono in funzione.
Appare quindi la richiesta di un possibile utilizzo della rete. Conviene rispondere
affermativamente, almeno nella maggior parte dei casi.
"Si vuole utilizzare un collegamento in rete? (s/n)"
s[ Invio ]
Viene quindi richiesta l’indicazione del tipo di interfaccia di rete da utilizzare.
Selezionare l’interfaccia
1) eth0
2) eth1
3) eth2
4) plip0
5) plip1
6) plip2
#?
Supponendo di volere utilizzare una connessione PLIP sulla porta parallela, probabilmente si
dovrà utilizzare l’interfaccia ‘plip1’.1
5[ Invio ]
Selezionare l’indirizzo.
1) 1.nano
4) 4.nano
2) 2.nano
5) 5.nano
7) 7.nano
8) 8.nano
1
Dipende dal kernel l’assegnazione di questi nomi di interfaccia. Le nuove versioni 2.1.x e successive, potrebbero
assegnare alla prima porta parallela l’indirizzo zero e di conseguenza si avrebbe ‘/dev/lp0’ o ‘plip0’.
nanoLinux II
3) 3.nano
#?
3929
6) 6.nano
9) 9.nano
nanoLinux II prevede già una rete e degli indirizzi abbinati a dei nomi, in modo da facilitare le
operazioni di connessione con un altro elaboratore avviato con gli stessi dischetti. In questa fase,
un indirizzo vale l’altro: viene scelto il primo.
1[ Invio ]
Dal momento che si tratta di una connessione PLIP e quindi punto-punto, è necessario indicare
l’indirizzo dell’elaboratore all’altro capo. L’altro elaboratore verrà avviato nello stesso modo,
utilizzando la stessa coppia di dischetti, ma facendo riferimento a indirizzi inversi.
Selezionare l’indirizzo dell’altro
1) 1.nano
4) 4.nano
7)
2) 2.nano
5) 5.nano
8)
3) 3.nano
6) 6.nano
9)
#?
capo.
7.nano
8.nano
9.nano
2[ Invio ]
Al termine si ottiene un riassunto finale.
La configurazione selezionata è la seguente.
Interfaccia
plip1
Indirizzo
1.nano
Indirizzo punto-punto
2.nano
Si intende confermarla? (s/n)
Se va tutto bene si conferma.
s[ Invio ]
La procedura di inizializzazione del sistema prosegue e al termine viene presentata la richiesta di
identificazione per l’accesso.
(none) login:
Si può usare solo l’utente ‘root’ e la parola d’ordine è quella specificata in precedenza, all’inizio
della procedura di avvio.
root[ Invio ]
348.3.4 NFS
Continuando con lo stesso esempio iniziato nella sezione precedente, supponendo che anche
l’elaboratore all’altro capo del cavo sia stato configurato correttamente (2.nano), le operazioni
per il montaggio del file system di rete sono state semplificate opportunamente.
# mount /mnt/2
Quello appena visto è il modo più semplice per montare tutto il file system (a partire dalla directory radice) del nodo 2.nano nella directory ‘/mnt/2/’. Sono state previste tutte le directory necessarie, più altre aggiuntive (‘/mnt/a/’ e ‘/mnt/b/’ per i dischetti Dos-VFAT, ‘/mnt/
cdrom/’ per il CD-ROM e ‘/mnt/hd*/’ per i dischi fissi).
3930
nanoLinux II
348.3.5 SMB
nanoLinux II contiene anche il necessario per collegarsi a un servente SMB (Samba). sotto questo
aspetto, se la cosa non scandalizza, potrebbe anche essere utilizzato per ripristinare un elaboratore
su cui si utilizza MS-Windows 95/98, accedendo a un altro elaboratore del genere.
Per eseguire il montaggio di una directory condivisa da un servente SMB, si deve utilizzare
‘smbmount’. Per esempio, se il servente ‘\\W5\’ offre la condivisione di una directory identificata con il nome ‘C’ e il suo indirizzo IP è 192.168.100.1, la si può montare nel modo
seguente:
# smbmount //W5/C /mnt/extra1 -c micro -I 192.168.100.1
Parte delle opzioni di questo comando potrebbero essere ridondanti, ma conviene avere un
esempio completo piuttosto che insufficiente. La directory condivisa viene montata a partire da
‘/mnt/extra1/’; l’elaboratore locale (quello avviato con il dischetto) verrà identificato con
il nome ‘micro’ ai fini del protocollo NetBIOS; l’elaboratore da raggiungere ha l’indirizzo IP
192.168.100.1 (questo deve essere specificato se si deve attraversare un router).
Operando come utente ‘root’, per smontare il file system di rete basta il normale ‘umount’.
# umount /mnt/extra1
348.3.6 Spegnimento
La conclusione avviene nel modo solito.
# shutdown -h now
348.4 Organizzazione di nanoLinux II
nanoLinux II è il risultato delle operazioni di finitura descritte in precedenza, a partire dai binari
di una distribuzione Slackware 3.5 e in parte da una distribuzione S.u.S.E. 5.2. Si tratta di un
mini sistema di emergenza che comprende anche un servente NFS, un servente Rlogin/Rsh e un
servente Secure Shell, in modo da permettere il trasferimento di dati tra elaboratori connessi in
una piccola rete locale o attraverso un cavo parallelo (PLIP), senza bisogno di un servente già
esistente. Per motivi di comodità di utilizzo, la shell è Bash.
Tutto questo occupa un file system Ext2 di 7 Mibyte, al quale si può accedere decomprimendo l’immagine del dischetto contenente il file system (‘*.root1.*’) e copiandovi dentro il
contenuto della seconda immagine (che in pratica è solo un file tar+gzip).
mount -o loop -t ext2 nLinux-II.root1 punto_di_innesto
cd punto_di_innesto ; tar xzvf nLinux-II.root2.tar.gz
348.4.1 Struttura
La struttura di questa specie di dischetto è molto semplice ed è schematizzabile nel modo
seguente:
/
|-- bin
|
|
|
‘ binari di uso generale
nanoLinux II
|
|-|
|
|
|-|
|
|
|
|
|
|
|
|
|
|
|-|
|
|
|-|
|
|
|-|
|-|
|
|
|-|
|-|
|
|
|-|
|
|
|
|
|
|-|
|-|
|
|
|
|
|
‘--
3931
dev
|
‘ file di dispositivo
etc
|
|-- rc.d
|
|
|
|-- init.d
|
|
|
|
|
‘ script per il controllo dei servizi
|
|
|
‘ script di inizializzazione
|
‘ file di configurazione
lib
|
‘ file di libreria
mnt
|
‘ varie directory di innesto
proc
root
|
‘ file di configurazione dell’utente root
sbin --> bin
script
|
‘ script di servizio
share
|-- terminfo
|
|
|
‘ informazioni sui tipi di terminale
|
‘ file condivisi
tmp
usr
|
|-|-|-‘--
bin --> ../bin
sbin --> bin
lib --> ../lib
share --> ../share
var
|
‘ directory e file amministrativi vari
348.4.2 Procedura di inizializzazione del sistema
La prima cosa da fare per comprendere il funzionamento di un sistema particolare, è l’analisi
della procedura di inizializzazione del sistema: ‘/etc/inittab’ e gli script collegati.
• ‘/etc/inittab’
nanoLinux II
3932
#
#
#
#
#
#
#
#
Livelli di esecuzione:
0 Arresto del sistema
1 Monoutente
2
3 Multiutente
4
5
6 Riavvio
# Livello di esecuzione predefinito.
id:3:initdefault:
# Inizializzazione del sistema - viene eseguito all’avvio.
si::sysinit:/etc/rc.d/rc Sysinit
# Monoutente
l1:1:wait:/etc/rc 1
# Multiutente: Servente di rete
l3:3:wait:/etc/rc.d/rc 3
# [Ctrl+Alt+Canc].
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now
# Il livello di esecuzione 0 ferma il sistema.
l0:0:wait:/etc/rc.d/rc 0
# Il livello di esecuzione 6 riavvia il sistema.
l6:6:wait:/etc/rc.d/rc 6
# Attivazione della console.
c1:3:respawn:/sbin/agetty 38400
c2:3:respawn:/sbin/agetty 38400
c3:3:respawn:/sbin/agetty 38400
c4:3:respawn:/sbin/agetty 38400
c5:3:respawn:/sbin/agetty 38400
c6:3:respawn:/sbin/agetty 38400
tty1
tty2
tty3
tty4
tty5
tty6
linux
linux
linux
linux
linux
linux
Come si può osservare i livelli di esecuzione sono i soliti. Il livello normale è il numero tre,
che permette la gestione dei demoni per l’attivazione dei servizi di rete.
Si fa riferimento sempre solo a uno script: ‘/etc/rc’. A seconda dei casi, viene chiamato
con un argomento differente.
• ‘/etc/rc.d/rc’
Il file ‘/etc/rc.d/rc’ è organizzato in funzioni, in modo da permettere un’organizzazione
strutturata dello script. Quello che segue è lo schema che ne riassume il funzionamento.
#!/bin/bash
function Sysinit () {
...
/sbin/update &
...
OperazioniIniziali
}
function ControlloDisco () {
...
fsck ...
...
}
function OperazioniIniziali () {
...
}
function OperazioniFinali () {
...
}
nanoLinux II
3933
function Net () {
ifconfig ...
route add ...
}
function Monoutente () {
...
}
function Multiutente () {
Net
Server
OperazioniFinali
}
function Server () {
/etc/rc.d/init.d/portmap start
/etc/rc.d/init.d/nfs start
/etc/rc.d/init.d/inet start
...
}
function Conclusione () {
...
/etc/rc.d/init.d/inet stop
/etc/rc.d/init.d/nfs stop
/etc/rc.d/init.d/portmap stop
...
sync
...
umount ...
}
function Halt () {
halt -f
}
function Reboot () {
reboot -f
}
#----------------------------------------case $1 in
Sysinit) Sysinit
0) Conclusione ; Halt
1) Monoutente
3) Multiutente
6) Conclusione ; Reboot
Server) Server
esac
;;
;;
;;
;;
;;
;;
Lo script inizia alla fine, dopo la dichiarazione di tutte le funzioni. A seconda
dell’argomento ricevuto, esegue una catena differente di funzioni.
348.4.3 Configurazione della rete
La rete è già stata configurata in modo da facilitare le connessioni volanti tra un piccolo gruppo
di elaboratori avviati con nanoLinux II. È stata definita una rete secondo gli elementi riportati
nella tabella 348.1.
nanoLinux II
3934
Tabella 348.1. Configurazione preimpostata della rete all’interno di nanoLinux II.
Elemento
rete loopback
loopback
rete esterna
elaboratore 1
elaboratore 2
elaboratore 3
elaboratore 4
elaboratore 5
elaboratore 6
elaboratore 7
elaboratore 8
elaboratore 9
Indirizzo IP
127.0.0.0
127.0.0.1
192.168.100.0
192.168.100.1
192.168.100.2
192.168.100.3
192.168.100.4
192.168.100.5
192.168.100.6
192.168.100.7
192.168.100.8
192.168.100.9
Nome completo
localdomain
localhost.localdomain
nano
1.nano
2.nano
3.nano
4.nano
5.nano
6.nano
7.nano
8.nano
9.nano
Abbreviazione
localhost
uno
due
tre
quattro
cinque
sei
sette
otto
nove
• ‘/etc/host.conf’
Non si usa alcun servente DNS e quindi la risoluzione dei nomi viene fatta esclusivamente
utilizzando il file ‘/etc/hosts’.
order hosts
multi on
• ‘/etc/networks’
loopback
nano
127.0.0.0
192.168.100.0
• ‘/etc/hosts’
127.0.0.1
192.168.100.1
192.168.100.2
192.168.100.3
192.168.100.4
192.168.100.5
192.168.100.6
192.168.100.7
192.168.100.8
192.168.100.9
localhost
1.nano
2.nano
3.nano
4.nano
5.nano
6.nano
7.nano
8.nano
9.nano
localhost.localdomain
uno
due
tre
quattro
cinque
sei
sette
otto
nove
348.4.4 File system
Il file ‘/etc/fstab’ è organizzato in modo tale da facilitare il montaggio dei file system di rete
e di dischetti Dos eventuali.
Quindi, per esempio, per montare un dischetto Dos, è sufficiente il comando
# mount /mnt/a
e per montare la directory ‘/mnt/’ dell’elaboratore 5.nano basta il comando seguente:
# mount /mnt/5
• ‘/etc/fstab’
#dispositivo
/dev/ram
proc
1.nano:/mnt
2.nano:/mnt
3.nano:/mnt
mount
/
/proc
/mnt/1
/mnt/2
/mnt/3
tipo
ext2
proc
nfs
nfs
nfs
opzioni
defaults
ignore
noauto
noauto
noauto
dump
1
fsck
1
nanoLinux II
3935
4.nano:/mnt
5.nano:/mnt
6.nano:/mnt
7.nano:/mnt
8.nano:/mnt
9.nano:/mnt
/dev/fd0
/dev/fd1
/mnt/4
/mnt/5
/mnt/6
/mnt/7
/mnt/8
/mnt/9
/mnt/a
/mnt/b
nfs
nfs
nfs
nfs
nfs
nfs
vfat
vfat
noauto
noauto
noauto
noauto
noauto
noauto
noauto
noauto
• ‘/etc/exports’
Il sistema consente l’utilizzo del proprio file system a partire dalla directory ‘/mnt/’, in
lettura e scrittura a tutta la rete locale 192.168.100.0 (il dominio nano), specificando anche
che l’utente ‘root’ può mantenere i suoi privilegi. In aggiunta, è consentito l’accesso in
lettura a tutto il file system
/
/mnt
*.nano(ro) 192.168.100.*(ro)
*.nano(rw,no_root_squash) 192.168.100.*(rw,no_root_squash)
348.4.5 Shell
La shell utilizzata è Bash, in modo da concedere all’utilizzatore un minimo di comodità. Il file
dello storico dell’utente ‘root’ e dell’utente generico sono in realtà diretti a ‘/dev/null’ in
modo da non utilizzare inutilmente lo spazio prezioso.
• ‘/etc/profile’
Attraverso la configurazione della shell si introducono dei sistemi minimi di protezione
contro gli errori: la cancellazione, lo spostamento e la copia, non possono eliminare file
senza una conferma precisa da parte dell’utente.
PATH="/sbin:/usr/sbin:/usr/local/sbin:/bin:/usr/bin:\
/usr/local/bin:/script:."
TERM=linux
PS1=’\u:\w\$ ’
PS2=’> ’
ignoreeof=10
export PATH TERM PS1 PS2 ignoreeof
umask 022
alias cp=’cp -i’
alias rm=’rm -i’
alias mv=’mv -i’
348.4.6 Attivazione e disattivazione dei servizi
All’avvio, nanoLinux II attiva il supervisore dei servizi di rete, il demone per i servizi RPC (da cui
dipende NFS), quelli per il servizio NFS e quello di Secure Shell. L’attivazione e la disattivazione
di questi servizi può essere comandata agevolmente, utilizzando gli script collocati nella directory
‘/etc/rc.d/init.d/’. È sufficiente utilizzare gli argomenti ‘start’, ‘stop’ e ‘restart’ per
ottenere rispettivamente l’avvio, la conclusione e il riavvio dei servizi relativi. Non sono state
prese misure per controllare se un servizio è già attivo o meno.
A titolo di esempio, viene mostrato come disattivare il servizio NFS.
# /etc/rc.d/init.d/nfs stop
3936
nanoLinux II
348.5 Personalizzazione della procedura di inizializzazione
del sistema
La procedura di inizializzazione del sistema (Init) è il primo punto su cui intervenire per
una possibile personalizzazione. Oltre al file ‘/etc/rc.d/rc’, vengono anche utilizzati quelli
seguenti.
‘/etc/rc.d/rc.config’ è uno script che serve a configurare la rete al volo prima che il sistema
sia avviato completamente. Lo script, attraverso una serie di domande, prepara il file ‘/etc/
rc.d/rc.netconfig’ che viene letto successivamente dallo stesso ‘/etc/rc.d/rc’. Lo script
‘/etc/rc.d/rc.config’ viene avviato all’interno della funzione ‘OperazioniIniziali’,
mentre ‘/etc/rc.d/rc.netconfig’ viene letto all’interno della funzione ‘Net’.
# OperazioniIniziali
...
#-------------------------------------------------------------# Obbliga l’utente a configurare il sistema.
# Se si vuole usare una configurazione fissa nel file
# /etc/rc.d/rc.netconfig, si può commentare.
#-------------------------------------------------------------/etc/rc.d/rc.config
...
# Net
...
#-------------------------------------------------------------# Carica la configurazione contenuta in /etc/rc.d/rc.netconfig.
#-------------------------------------------------------------. /etc/rc.d/rc.netconfig
...
Per quanto riguarda la gestione della rete, vanno considerate due parti: la connessione alla rete
stessa, attraverso l’indicazione degli indirizzi a cui si appartiene, e i servizi che si intendono
concedere all’esterno.
La funzione ‘Net’ è quella che si occupa di reperire e configurare gli indirizzi; la funzione
‘Server’ è quella che avvia i servizi concessi all’esterno. L’obiettivo di nanoLinux II è quello di facilitare la connessione tra elaboratori attraverso il protocollo NFS e altri servizi. Quindi,
nella funzione ‘Server’ sono avviati per questo scopo vari demoni, attraverso gli script contenuti nella directory ‘/etc/rc.d/init.d’, che a loro volta accettano gli argomenti ‘start’ (per
l’avvio) e ‘stop’ (per l’arresto).
348.5.1 Utilizzo in una partizione normale
Se si vuole trasferire nanoLinux II in una partizione, nel file ‘/etc/rc.d/rc’ occorre togliere,
o commentare, il caricamento del contenuto del secondo dischetto di root, attivando il sistema di
controllo attraverso ‘fsck’. Si interviene nella funzione ‘Sysinit’.
# Sysinit
...
#-------------------------------------------------------------# Carica il secondo dischetto.
# Per qualche strano motivo, sono necessari due read.
#-------------------------------------------------------------#cd /
#echo "Inserire il secondo dischetto e premere un tasto."
#read
#read
#tar xzf /dev/fd0 2> /dev/null
#--------------------------------------------------------------
nanoLinux II
3937
# Controlla l’integrità del file system principale.
# Commentare in caso di disco RAM!
#-------------------------------------------------------------ControlloDisco
...
Oltre a questo, si dovrà modificare il file ‘/etc/fstab’ in modo da indicare correttamente la
partizione utilizzata per il file system principale.
Probabilmente occorre aggiungere la directory ‘/boot/’ con il suo contenuto opportuno, in
modo da poter utilizzare LILO per l’avvio.
Infine, il file ‘/etc/lilo.conf’ andrà adattato opportunamente.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
349
Dischetti di emergenza delle distribuzioni
GNU/Linux e di altre fonti
All’inizio di questa serie di capitoli si è accennato alla distribuzione GNU/Linux Slackware contenente un buon dischetto utilizzabile per emergenza: il file-immagine ‘rescue.gz’. Il problema
di quella distribuzione sta piuttosto nella mancanza di un buon dischetto di avvio, organizzato in
modo da poter caricare i moduli necessari per le caratteristiche particolari del proprio sistema.
Molte altre distribuzioni permettono di gestire l’installazione di GNU/Linux in modo agevole,
proprio attraverso questo meccanismo del caricamento dei moduli, cosa che potrebbe rendere più
facile anche la realizzazione di dischetti da usare in caso di emergenza. Purtroppo, solo poche
distribuzioni sono ben organizzate anche dal punto di vista della gestione delle situazioni di
emergenza.
349.1 SuSE
La distribuzione SuSE è nata come un’evoluzione della distribuzione Slackware, tanto che da
essa ha ereditato una struttura dei pacchetti molto simile. Nello stesso modo ha ereditato l’idea
della realizzazione di diversi dischetti di avvio e diversi dischetti contenenti il sistema minimo
(la tecnica è diversa dalla distribuzione Slackware, ma l’idea essenziale è la stessa). I dischetti di
avvio sono tutti costruiti a partire da kernel modulari, ma la distinzione è necessaria perché non
sempre tutti i dispositivi funzionano correttamente sotto forma di moduli. Per quanto riguarda
i dischetti con il sistema, in pratica dovrebbe trattarsi di uno solo, l’immagine ‘rescue’, da
usare in caso di emergenza, dal momento che l’installazione dovrebbe poter avvenire utilizzando
esclusivamente il primo dischetto di avvio.
Come si può intuire, una volta scelto il dischetto di avvio più adatto, abbinandolo al dischetto
con il sistema di emergenza contenuto in ‘rescue’, oppure abbinandolo allo stesso nanoLinux,
si ottiene un mini sistema operativo di emergenza. Il vantaggio di poter utilizzare il dischetto di
avvio scegliendolo da questa distribuzione, sta nella sua organizzazione che viene descritta nelle
sezioni seguenti. Per la precisione, si fa riferimento al file-immagine ‘eide01’ che dovrebbe
addattarsi alla maggior parte delle configurazioni hardware esistenti.
Le immagini dei dischetti della distribuzione SuSE possono essere ottenute da uno dei vari siti
speculari nella sottodirectory ‘SuSE-Linux/versione /disks/’, dove la versione è rappresentata
da un numero (per esempio 6.0). Eventualmente si può provare l’URI <ftp://ftp.suse.com/pub/suse/>.
349.1.1 Preparazione e avvio
Come al solito, trattandosi di dischetti distribuiti in forma di immagine su file, questi dovranno essere riprodotti su dischetti reali, nel solito modo, utilizzando dischetti già formattati in
precedenza.
# cp eide01 /dev/fd0
# cp rescue /dev/fd0
Una volta inserito il dischetto ottenuto dal file-immagine ‘eide01’ e riavviato il sistema, viene
richiesto il linguaggio da utilizzare e la tastiera disponibile. Negli esempi vengono mostrati i
messaggi in inglese, perché quelli in italiano non sono sempre tradotti perfettamente e possono
risultare ambigui.
3938
Dischetti di emergenza delle distribuzioni GNU/Linux e di altre fonti
3939
Figura 349.1. Scelta del linguaggio per i messaggi e le voci di menù.
.----------------------------.
| Please choose the language |
‘----------------------------’
.--------------------.
|
Deutsch
|
|
English
|
|
Italiano
|
‘--------------------’
.--------.
.--------.
|
Ok
|
| Back |
‘--------’
‘--------’
Il funzionamento del programma che guida all’installazione della distribuzione SuSE è abbastanza semplice e intuitivo: i tasti freccia spostano il cursore sulle voci di menù, il tasto [ Tab ]
permette di selezionare uno dei pulsanti grafici, il tasto [ Esc ] permette di tornare indietro, [ Invio ]
seleziona la voce corrispondente al pulsante grafico evidenziato.
Figura 349.2. Scelta tra visualizzazione monocromatica o a colori.
.-------------------------------------.
| What kind of display do you use?
|
‘-------------------------------------’
.-----------------------------.
|
Color Display
|
|______Monochrom Display______|
‘-----------------------------’
.--------.
.--------.
|
Ok
|
| Back |
‘--------’
‘--------’
Figura 349.3. Scelta della mappa della tastiera.
.-------------------------------------.
|
Please choose a keyboard map.
|
‘-------------------------------------’
.---------------.
|
Deutsch
|
|
American
|
|
Suomi
|
|
British
|
|
Français
|
|
Espanol
|
|___Italiano____|
‘---------------’
.--------.
.--------.
|
Ok
|
| Back |
‘--------’
‘--------’
Dopo avere selezionato la lingua, il tipo di schermo e la disposizione dei tasti sulla tastiera, si
giunge al menù principale (figura 349.4).
Figura 349.4. Menù generale del sistema di installazione SuSE.
.---------------------------------------.
|
main menu
|
‘---------------------------------------’
.---------------------------------------.
|
Settings
|
|
System informations
|
|
Kernel modules (hardware drivers)
|
|
Start installation / system
|
|
End / Reboot
|
‘---------------------------------------’
.--------.
.--------.
|
Ok
|
| Back |
‘--------’
‘--------’
3940
Dischetti di emergenza delle distribuzioni GNU/Linux e di altre fonti
349.1.2 Utilizzo delle voci di menù
L’utilizzo normale di questo dischetto, prevede la selezione dei moduli necessari e quindi l’avvio
dell’installazione, o del dischetto di emergenza. Vale comunque la pena di dare un’occhiata a
tutte le voci, nell’ordine in cui sono.
1. ‘Settings’
La selezione della voce ‘Settings’ permette di modificare le impostazioni iniziali dello
schermo e della tastiera. Sotto questo aspetto non c’è niente di importante, almeno per lo
scopo di utilizzo che ci si prefigge in questo capitolo.
2. ‘System informations’
La voce ‘System informations’ permette di dare un’occhiata alle informazioni conosciute sul sistema, in pratica quanto il kernel mette a disposizione nel file system virtuale ‘/proc/’. A questo proposito, è opportuno tenere presente che sono disponibili
informazioni anche sulle diverse console virtuali.
È importante tenere presente che le informazioni che si ottengono in questo modo,
dipendono anche dalla presenza o assenza di determinati moduli.
3. ‘Kernel modules (hardware drivers)’
Attraverso la voce ‘Kernel modules’ è possibile caricare i moduli di cui si conosce la
necessità. La figura 349.5 mostra l’elenco delle voci del menù a cui si accede.
Figura 349.5. Menù per la gestione dei moduli.
.---------------------------------------.
|
Load SCSI module
|
|
Load CD-ROM module
|
|
Load network card module
|
|
Load PCMCIA modules
|
|
Show loaded modules
|
|
Unload modules
|
|
Autoload of modules
|
‘---------------------------------------’
A titolo di esempio si carica il modulo per la connessione PLIP attraverso la porta parallela.
Per questo si deve selezionare la voce ‘Load network card module’.
Si ottiene l’elenco dei moduli disponibili per le interfacce di rete, dal quale si deve
selezionare il modulo ‘plip’.
Figura 349.6. Selezione del modulo per l’interfaccia di rete.
.----------------------------------------------.
|
...
|
|
arcnet : ARCnet
|
|________plip : PLIP (IP via Parallel Port)____|
|
3c505 : 3Com 505
|
|
3c507 : 3Com 507
|
|
3c515 : 3Com 515
|
|
...
|
‘----------------------------------------------’
Dopo avere selezionato un modulo, a seconda del tipo, ne vengono richieste le caratteristiche. Il capitolo 31 tratta l’argomento e riporta la descrizione di alcuni moduli con il tipo di
informazioni che devono essere fornite. Nel caso del modulo ‘plip’, appare la maschera
illustrata dalla figura 349.7 che permette l’inserimento dell’indirizzo di I/O e del numero
di IRQ abbinato alla porta parallela che si vuole utilizzare per questo scopo. Viene anche
proposto un esempio che corrisponde alla configurazione comune.
Dischetti di emergenza delle distribuzioni GNU/Linux e di altre fonti
3941
Figura 349.7. Maschera di inserimento delle caratteristiche del dispositivo da
utilizzare.
.----------------------------------------------.
|
Please enter parameters for "plip"
|
|
|
|
Example: io=0x378 irq=7
|
‘----------------------------------------------’
.----------------------------------------------.
|
##################################
|
‘----------------------------------------------’
Se tutto va bene, cioè se il modulo non entra in conflitto con altri e l’impostazione fornita è
corretta, si ottiene un messaggio di conferma, dopo il quale si può proseguire.
Se si ritiene di avere caricato un modulo errato si può utilizzare la voce ‘Unload
modules’, mentre se si vuole tentare di caricare i moduli in modo automatico si può anche usare la voce ‘Autoload of modules’ (anche se ciò non porta solitamente a risultati
corretti).
4. ‘Start installation / system’
Una volta caricati i moduli necessari, si può scegliere tra l’avvio di un sistema già installato
o di un sistema di emergenza, oltre ad altre operazioni possibili. Si veda la figura 349.8.
Figura 349.8. Scelta tra l’avvio dell’installazione, di un sistema già installato o di
un sistema di emergenza.
.----------------------------------.
|
Start installation
|
|
Boot installed system
|
|
Start rescue system
|
|
Start CD-ROM demo
|
‘----------------------------------’
Questa, finalmente, è la scelta più importante. Infatti, con la voce ‘Boot installed
system’ è possibile indicare una partizione da cui avviare il file system principale che
per qualche motivo non si avvia più da solo. Con la voce ‘Start rescue system’ si può
avviare un sistema in un dischetto: l’immagine ‘rescue’ della stessa SuSE, nanoLinux,
oppure anche il file ‘rescue.gz’ della Slackware.
349.1.3 Avvio di un sistema su dischetto
Quando si seleziona la voce ‘Start rescue system’, è possibile indicare diverse fonti da
cui potrebbe essere reperita l’immagine del dischetto da avviare. La possibilità di avviare tale
immagine da una fonte diversa da un dischetto, riguarda solo quanto già predisposto dalla distribuzione SuSE. Nel caso si voglia avviare un dischetto qualunque (purché compatibile con il
kernel) si deve usare solo la voce corrispondente all’uso di un dischetto.
È stato ripetuto più volte che si possono usare anche altri dischetti alternativi a quello generato dall’immagine ‘rescue’ della distribuzione SuSE. Tuttavia occorre tenere presente
che deve trattarsi sempre di immagini compresse: se si tenta di caricare la vecchia immagine ‘rescue.gz’ della distribuzione Slackware (quella obsoleta che si trova nella directory
‘rootdsks/obsolete/’) dopo averla decompressa (è l’unico mini-sistema in circolazione che
possa essere contenuto in un dischetto da 1440 Kibyte), questa non verrà caricata.
Come ormai dovrebbe essere chiaro, il dischetto che viene avviato in questo modo, diviene in pratica un disco RAM. Per poter utilizzare il dischetto di emergenza predisposto dalla distribuzione
SuSE, occorre disporre di almeno 16 Mibyte.
3942
Dischetti di emergenza delle distribuzioni GNU/Linux e di altre fonti
349.2 Dischetti realizzati per scopi specifici
Vale la pena di annotare l’esistenza di progetti specifici per la realizzazione di dischetti di emergenza particolari, anche se spesso si tratta di lavori conclusi che non verranno aggiornati in
futuro.
• Small Linux
<http://sourceforge.net/projects/smallinux/>
Consente di avviare un sistema minimo utilizzando meno di 4 Mibyte di memoria RAM,
montando il file system principale dal dischetto, senza caricarlo in un disco RAM.
• LOAF: Linux on a floppy
<http://www.ecks.org/projects/loaf/>
Consente di avviare un sistema minimo disponendo almeno di 4 Mibyte di memoria RAM,
a partire da un solo dischetto, contenente kernel e file system principale. Il file system viene
caricarlo in un disco RAM.
Lo scopo di questi dischetti è di consentire l’avvio di un elaboratore che possa accedere alla
rete, per esempio attraverso Telnet.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Parte lxxii
Laboratorio didattico
350 Accorgimenti per usare GNU/Linux nella didattica di massa . . . . . . . . . . . . . . . . . . . . . 3944
350.1 Utente speciale per uno scopo speciale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3944
350.2 Spegnimento da parte di utenti comuni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3944
350.3 Autorizzare chiunque ad aggiungersi come nuovo utente . . . . . . . . . . . . . . . . . . 3946
350.4 Sincronizzazione di file di configurazione senza NIS . . . . . . . . . . . . . . . . . . . . . 3948
351 Diskless: elaboratori senza disco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3951
351.1 Principio di funzionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3951
351.2 Preparazione del cliente GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3951
351.3 Preparazione del servente GNU/Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3954
351.4 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3961
3943
Capitolo
350
Accorgimenti per usare GNU/Linux nella didattica di massa
La gestione di un laboratorio munito di elaboratori in una scuola media è problematica, a causa
di diversi fattori: l’età degli studenti; il poco tempo a disposizione degli insegnanti; la necessità
di svolgere una gran mole di esercitazioni specifiche.
GNU/Linux è un sistema operativo sofisticato e sotto questo aspetto non è adatto a un ambiente
del genere. In questo capitolo si raccolgono delle idee su possibili soluzioni ai problemi tipici di
un tale laboratorio.
350.1 Utente speciale per uno scopo speciale
Quando si vuole permettere agli utenti comuni di compiere attività che altrimenti sarebbero esclusivamente di competenza dell’utente ‘root’, si può utilizzare ‘sudo’, oppure si può creare un
utente apposito nell’elenco del file ‘/etc/passwd’, al quale, invece di associare una shell, si
associa il programma o lo script che si vuole fare eseguire.
CIAO::0:0:Esempio generico:/:/etc/script/.CIAO
L’esempio mostra una riga del file ‘/etc/passwd’ in cui viene definito l’utente ‘CIAO’, senza
parola d’ordine, con lo stesso UID e GID dell’utente ‘root’, avendo di conseguenza gli stessi
privilegi, al quale viene però associata la directory ‘/’ (per motivi di sicurezza è meglio evitare
l’uso di ‘/tmp/’), dove al posto di una shell si abbina lo script ‘/etc/script/.CIAO’.
In questo modo, accedendo con il nominativo ‘CIAO’, si esegue lo script ‘/etc/script/.CIAO’.
Al termine dell’esecuzione dello script, la sessione di lavoro come utente ‘CIAO’ termina.
Il meccanismo rende il sistema molto poco sicuro, ma ha il vantaggio di essere un modo semplice
per l’esecuzione di alcuni comandi che sono normalmente di competenza dell’utente ‘root’.
È importante che la dichiarazione del vero utente ‘root’ sia precedente a quella di questi finti
utenti ‘root’.
Per fare in modo che gli eventuali sistemi di sicurezza abbandonino ogni resistenza, è probabile
che si debba includere l’ipotetico programma ‘/etc/script/.CIAO’ nel file ‘/etc/shells’.
Inoltre, dovrebbe essere evidente che in una situazione del genere non sia sensata l’attivazione
delle password shadow (si veda anche quanto scritto a proposito del file ‘/etc/login.defs’
nel capitolo dedicato proprio alle password shadow).
Se si intende utilizzare questo tipo di utente attraverso un programma per l’accesso remoto
(‘rlogin’, ‘rsh’, ‘telnet’ o ‘rexec’) è necessario che il file ‘/etc/securetty’ contenga
l’indicazione dei terminali da cui questo pseudo utente ‘root’ può accedere.
350.2 Spegnimento da parte di utenti comuni
Generalmente, un utente comune non è autorizzato a utilizzare ‘shutdown’ o equivalenti, per
chiudere l’attività di GNU/Linux. Però, in certi casi, può essere utile che ciò sia possibile. Il
modo più semplice di permettere agli utenti comuni di avviarlo, è attribuirgli il permesso SUID,
come nell’esempio seguente:
# chmod u+s /sbin/shutdown
3944
Accorgimenti per usare GNU/Linux nella didattica di massa
3945
Eventualmente si può completare la cosa creando un collegamento nella directory ‘/bin/’ in
modo che sia accessibile facilmente agli utenti comuni, senza bisogno di indicarne il percorso.
# ln -s /sbin/shutdown /bin/shutdown
Viene mostrata anche una tecnica diversa che si basa sul trucco dell’utente speciale descritta
sopra. Questo modo può sembrare più laborioso e inutile; in realtà ci sono dei vantaggi, in particolare la possibilità di controllo sull’operazione stessa. Come è già stato mostrato nella sezione
precedente, si aggiunge l’utente ‘SPEGNIMI’ nel file ‘/etc/passwd’:
SPEGNIMI::0:0:Spegnimento dell’elaboratore:/:/etc/script/.SPEGNIMI
Quindi, lo script ‘/etc/script/.SPEGNIMI’ potrebbe essere preparato in modo da poter
abilitare o disabilitare la possibilità di eseguire la procedura di arresto del sistema.
#!/bin/bash
#======================================================================
# .SPEGNIMI
#======================================================================
#-----------------------------------------------------------------# Verifica la presenza del file SPEGNIMI.OK
#-----------------------------------------------------------------if [ -f /etc/script/data/SPEGNIMI.OK ]
then
#-------------------------------------------------------------# Il file esiste e si può spegnere.
# Esegue lo shutdown con un’attesa di 10 secondi.
#-------------------------------------------------------------sleep 10s
/sbin/shutdown -h now
else
#-------------------------------------------------------------# L’operazione di spegnimento non è consentita.
#-------------------------------------------------------------echo "L’operazione richiesta di spegnimento non è consentita!"
fi
Lo script deve essere accessibile in tutti i modi solo all’utente ‘root’ e in nessun modo agli altri
utenti (07008).
L’esecuzione di ‘shutdown’ dipende quindi dalla presenza del file ‘/etc/script/data/
SPEGNIMI.OK’. In questo modo è possibile regolare semplicemente l’accessibilità a questa
funzione di spegnimento.
Per utilizzare in pratica questo sistema, si può agire attraverso un accesso locale o remoto. Attraverso un accesso normale è possibile spegnere il sistema: basta utilizzare l’utente ‘SPEGNIMI’,
per il quale non è richiesta alcuna parola d’ordine.
Attraverso ‘rlogin’ è possibile attivare una connessione con lo stesso elaboratore su cui si sta
operando, ottenendone lo spegnimento. L’esempio seguente utilizza ‘hostname’ per determinare
il nome dell’elaboratore: è importante che questo restituisca un nome corretto.
rlogin -l SPEGNIMI ‘hostname‘
Nello stesso modo si può spegnere un elaboratore attraverso la rete da un’altra posizione.
rlogin -l SPEGNIMI indirizzo_da_spegnere
Per rendere più facile il meccanismo, si può creare uno script ulteriore con lo stesso nome
dell’utente fittizio ‘SPEGNIMI’.
#!/bin/sh
#======================================================================
# SPEGNIMI
Accorgimenti per usare GNU/Linux nella didattica di massa
3946
#======================================================================
rlogin -l SPEGNIMI ‘hostname‘
In tal modo si utilizza lo stesso termine, sia in presenza di una richiesta di accesso, sia durante
una sessione di lavoro normale.
Per avviare la procedura di arresto del sistema su un gruppo di elaboratori in un colpo solo, si
può creare uno script che esegue una serie di ‘rlogin’ su tutti gli elaboratori interessati.
#!/bin/sh
#======================================================================
# SPEGNITUTTI
#======================================================================
rlogin
rlogin
rlogin
rlogin
rlogin
#...
-l
-l
-l
-l
-l
SPEGNIMI
SPEGNIMI
SPEGNIMI
SPEGNIMI
SPEGNIMI
host01.brot.dg
host02.brot.dg
host03.brot.dg
host04.brot.dg
host05.brot.dg
&
&
&
&
&
In alternativa, se per qualunque motivo si ha difficoltà a utilizzare ‘rlogin’ o ‘rsh’ come si
vorrebbe, si può utilizzare Secure Shell (capitolo 202), configurandola in modo che utilizzi una
forma di autenticazione che non richieda l’inserimento di una parola d’ordine. Lo script potrebbe
essere modificato nel modo seguente:
#!/bin/sh
#======================================================================
# SPEGNITUTTI
#======================================================================
ssh -l
ssh -l
ssh -l
ssh -l
ssh -l
#...
SPEGNIMI
SPEGNIMI
SPEGNIMI
SPEGNIMI
SPEGNIMI
host01.brot.dg
host02.brot.dg
host03.brot.dg
host04.brot.dg
host05.brot.dg
&
&
&
&
&
350.3 Autorizzare chiunque ad aggiungersi come nuovo
utente
Normalmente, non è sensato concedere a chiunque di registrarsi da solo all’interno di un sistema,
ma su un elaboratore destinato alla didattica, in un ambiente in cui non si vuole utilizzare il NIS,
questo potrebbe essere più che giustificato. Con la tecnica già vista nella sezione, si aggiunge
l’utente ‘AGGIUNGI’.
AGGIUNGI::0:0:Aggiunta nuovo utente:/:/etc/script/.AGGIUNGI
Lo script ‘/etc/script/.AGGIUNGI’ potrebbe essere preparato in modo da poter abilitare o
disabilitare la possibilità di eseguire il programma ‘adduser’.
Il programma ‘adduser’ non è necessariamente presente con questo nome e con lo stesso comportamento in tutte le distribuzioni GNU/Linux. In questi esempi si suppone che
‘adduser’ accetti un solo argomento: il nome dell’utente da aggiungere.
#! /bin/bash
#======================================================================
# .AGGIUNGI
#======================================================================
Accorgimenti per usare GNU/Linux nella didattica di massa
3947
#======================================================================
# Inizio.
#======================================================================
#-----------------------------------------------------------------# Verifica la presenza del file AGGIUNGI.OK
#-----------------------------------------------------------------if [ -f /etc/script/data/AGGIUNGI.OK ]
then
#-------------------------------------------------------------# Il file esiste e si può aggiungere l’utente.
# Si inizia ottenendo il nome da utilizzare.
#-------------------------------------------------------------echo "Inserisci il nome dell’utente."
echo "Si possono utilizzare al massimo otto caratteri."
read
#-------------------------------------------------------------# Controlla la risposta data dall’utente.
#-------------------------------------------------------------if [ ${#REPLY} = 0 ]
then
#---------------------------------------------------------# La risposta è nulla, così si interrompe l’inserimento.
#---------------------------------------------------------exit
fi
#-------------------------------------------------------------# Finalmente viene creato l’utente.
#-------------------------------------------------------------NUOVO_UTENTE=$REPLY
/usr/sbin/adduser $NUOVO_UTENTE
#-------------------------------------------------------------# Viene definita la password.
#-------------------------------------------------------------while [ 0 ]
# FOREVER
do
if /usr/bin/passwd $NUOVO_UTENTE
then
#-----------------------------------------------------# La password è stata inserita correttamente.
#-----------------------------------------------------break
else
#-----------------------------------------------------# Meglio ripetere l’operazione.
#-----------------------------------------------------continue
fi
done
else
#-------------------------------------------------------------# L’operazione non è consentita.
#-------------------------------------------------------------echo "L’operazione richiesta non è consentita!"
fi
#======================================================================
Lo script deve essere accessibile in tutti i modi solo all’utente ‘root’ e in nessun modo agli altri
utenti (07008).
L’esecuzione di ‘adduser’ dipende quindi dalla presenza del file ‘/etc/script/data/
AGGIUNGI.OK’. In questo modo è possibile regolare semplicemente l’accessibilità a questa
funzione.
Per utilizzare in pratica questo sistema, basta identificarsi come l’utente ‘AGGIUNGI’ in fase di
accesso.
Accorgimenti per usare GNU/Linux nella didattica di massa
3948
350.4 Sincronizzazione di file di configurazione senza NIS
Un laboratorio potrebbe essere organizzato in modo da centralizzare le directory personali degli
studenti in un solo file system di rete (di solito NFS), allo scopo di consentire a ogni studente
di utilizzare qualunque elaboratore. In generale, per ottenere questo risultato c’è bisogno di centralizzare anche il sistema di autenticazione, normalmente attraverso un servizio NIS. Tuttavia,
questa ultima necessità può diventare eccessivamente onerosa per l’amministratore.
Di per sé, l’uso di un file system di rete e del NIS, mette tutto il sistema in una condizione di
estrema debolezza rispetto alla possibilità di un’aggressione esterna. Pertanto, si vuole proporre
qui un metodo alternativo al NIS, altrettanto debole, ma più semplice da realizzare.
Figura 350.1. Schema semplificato di una rete per un laboratorio, in cui si condividono
le directory personali degli utenti, ma non si usa il NIS.
.------.
.------.
.------.
.------.
.------.
.------.
| nodo |
| nodo |
| nodo |
| nodo |
| nodo |
| nodo | B
‘------’
‘------’
‘------’
‘------’
‘------’
‘------’
|
|
|
|
|
|
- -*-----------*-----------*-----*-----*-----------*-----------*---- - - rete locale del laboratorio
|
|
.--------------------------.
| Elaboratore contenente i |
| servizi e le directory
| A
| personali che i nodi
|
| normali condividono.
|
‘--------------------------’
Osservando la figura 350.1, l’elaboratore «A» deve consentire l’accesso alla directory ‘/home/’,
attraverso il protocollo NFS, mentre gli elaboratori «B» montano il file system di rete nella stessa
directory, che per loro sarebbe vuota.
A questo punto, l’aggiunta di un utente dovrebbe passare per l’elaboratore «A», attraverso la
procedura normale, cosa che comporta la modifica dei file ‘/etc/passwd’ e ‘/etc/group’
(salvo l’uso delle password shadow, che in questo caso non hanno una ragione valida per essere utilizzate), inoltre, genera le directory personali che normalmente si collocano al di sotto di
‘/home/’.
Quando gli elaboratori «B» montano la directory ‘/home/’, si trovano di fronte alla stessa situazione dell’elaboratore «A», per cui, per consentire l’accesso agli studenti da questi nodi, basterebbe ricopiare i file ‘/etc/passwd’ e ‘/etc/group’. Per farlo in modo automatico, si potrebbe
usare Rsync (capitolo 171), predisposto in modo da non dover digitare manualmente delle parole
d’ordine, ogni volta che si aggiorna un nodo di tipo «B».
Per usare Rsync in modo autonomo, senza l’ausilio di alcuna shell remota, bisogna configurare
tutti i nodi «B» nel modo elencato di seguito.
1. È necessario verificare che il file ‘/etc/services’ contempli il servizio RSYNC,
contenendo le righe seguenti:
rsync
rsync
873/tcp
873/udp
# rsync
# rsync
2. È necessario aggiornare il file ‘/etc/inetd.conf’, in modo da avviare ‘rsync’ come
demone, quando viene interpellata la porta del servizio corrispondente:
rsync
stream
tcp
nowait
root
/usr/bin/rsync
rsyncd --daemon
Naturalmente occorre riavviare il supervisore dei servizi di rete (‘inetd’), in modo che
venga acquisita la modifica fatta in questo file di configurazione.
Accorgimenti per usare GNU/Linux nella didattica di massa
3949
3. Si deve preparare il file di configurazione di Rsync, per il suo utilizzo in qualità di demone.
Il file in questione dovrebbe essere ‘/etc/rsyncd.conf’, ma in caso di dubbio, si può
usare l’opzione ‘--config’ (in questo caso, la riga è spezzata in due per motivi tipografici):
rsync
stream tcp
nowait root
/usr/bin/rsync ←,→rsyncd --daemon --file=/etc/rsyncd.conf
Il file in questione deve contenere la dichiarazione di un modulo adatto per questo scopo:
[utenze]
uid = root
gid = root
path = /etc
read only = false
auth users = root
strict modes = false
secrets file = /etc/rsyncd.secrets
comment = Esportazione delle utenze attraverso Rsync
4. Nel file di configurazione si vede la dichiarazione di un file di «segreti», che in pratica contiene le parole d’ordine in chiaro degli utenti che possono utilizzare tale servizio. In questo
caso, si tratta esclusivamente dell’utente ‘root’, per cui il file ‘/etc/rsyncd.secrets’
potrebbe contenere la riga seguente:
root:supersegretissimo
La parola d’ordine è in chiaro, per cui sarebbe bene che il file fosse accessibile esclusivamente all’amministratore, utilizzando dei permessi 06008. In particolare, nella configurazione è stata specificata la direttiva ‘strict modes = false’ in modo da evitare che il demone Rsync possa opporsi all’accesso nel caso i permessi non siano esattamente così. Eventualmente, se si preferisce si può abilitare questo controllo:
‘strict modes = true’.
A questo punto, dal lato dei nodi «B» è tutto pronto; basta solo preparare uno script opportuno
nell’elaboratore «A», per automatizzare l’operazione:
#! /bin/sh
RSYNC_PASSWORD=supersegretissimo
export RSYNC_PASSWORD
rsync -zv /etc/passwd [email protected]::utenze
rsync -zv /etc/group [email protected]::utenze
rsync -zv /etc/passwd [email protected]::utenze
rsync -zv /etc/group [email protected]::utenze
rsync -zv /etc/passwd [email protected]::utenze
rsync -zv /etc/group [email protected]::utenze
#...
Evidentemente si suppone che i vari nodi «B» abbiano gli indirizzi IP 192.168.1.1*. Naturalmente, se è disponibile il servizio DNS si potevano usare dei nomi al posto degli
indirizzi.
Dal momento che questo tipo di approccio non è esente da incidenti, prima di organizzare un
sistema di sincronizzazione occorre essere sempre sicuri di disporre di dischetti di emergenza
con cui poter avviare gli elaboratori «B», nel caso i file ‘/etc/passwd’ e ‘/etc/group’
dovessero risultare danneggiati in qualche modo. Pertanto, tali dischetti di emergenza devono
disporre di un sistema autonomo, in quanto non basterebbe un kernel che monta il file system
principale che contiene gli stessi file danneggiati.
3950
Accorgimenti per usare GNU/Linux nella didattica di massa
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
351
Diskless: elaboratori senza disco
Una caratteristica importante del sistema di condivisione dei file system attraverso la rete, l’NFS,
è quella che permette l’utilizzo di macchine senza disco: diskless.
Nel passaggio da una macchina autonoma a una senza disco, ci sono varie fasi intermedie, in
cui si possono sfruttare più o meno intensivamente le risorse NFS di altri serventi. La macchina
senza disco, perché non ha fisicamente il disco fisso, oppure perché non lo adopera per contenere
dati o programmi, ha comunque un certo fascino, che si avverte particolarmente quando si deve
allestire un certo numero di macchine uniformi e amministrate in modo centralizzato.
A differenza del terminale remoto che utilizza ‘telnet’ o un programma di comunicazione su
linea seriale o dedicata, la macchina senza disco ha il vantaggio di poter utilizzare la grafica con
il sistema X. In questo senso, una macchina senza disco è normalmente ben dotata dal punto di
vista del processore e della memoria centrale.
351.1 Principio di funzionamento
L’idea alla base della macchina senza disco è molto semplice:
1. viene caricato il kernel in qualche modo, con tutte le informazioni necessarie ad accedere
alla rete e al servente NFS;
2. viene eseguito il montaggio del file system principale (dalla rete) in lettura e scrittura;
3. viene eseguita la procedura di inizializzazione del sistema (Init).
Il vero problema di tutto questo è il primo punto, ovvero l’avvio del kernel con le informazioni
necessarie, specialmente quelle sull’indirizzo IP dell’interfaccia di rete utilizzata.
Volendo predisporre una vera macchina senza disco, sarebbe necessario realizzare, o procurarsi,
una ROM speciale da applicare alla scheda di rete. Questa, con il software contenuto al suo
interno, attraverso vari protocolli, dovrebbe permettere alla scheda di rete di ottenere il proprio
indirizzo IP e subito dopo di ricevere il kernel da avviare.
A meno di avere il sostegno di persone qualificate, in grado di predisporre una macchina senza
disco a tutti gli effetti, ci si accontenta solitamente di preparare un dischetto con un kernel adatto,
assieme a tutte le informazioni necessarie sulla rete locale e il servente NFS da raggiungere.
Questa è la soluzione che viene presa in considerazione nel capitolo.
351.2 Preparazione del cliente GNU/Linux
La preparazione del cliente cioè del dischetto necessario ad avviare l’elaboratore senza disco
fisso, è la parte più semplice, pertanto viene mostrata per prima.
351.2.1 Kernel
Prima di tutto, occorre preparare un kernel adatto alla stazione senza disco che si vuole utilizzare. Di sicuro, occorre attivare la gestione della rete (sezione 29.2.9), la gestione necessaria
per l’interfaccia di rete che si utilizza (sezione 29.2.12) e la gestione relativa all’NFS, indicando eventualmente la necessità di montare il file system principale attraverso il protocollo NFS
(29.2.9).
3951
Diskless: elaboratori senza disco
3952
Naturalmente, tali funzionalità devono essere incluse come elementi del kernel monolitico,
perché non disponendo di un disco locare sarebbe complicato caricare dei moduli.
Date le difficoltà che comporta la preparazione di un sistema senza disco è il caso di consigliare l’utilizzo di soli kernel monolitici, anche per i dispositivi che potrebbero essere caricati
in un secondo momento.
La stazione senza disco potrebbe, nonostante il nome, dover accedere anche a unità a disco locali,
come un dischetto o un lettore CD-ROM. Nel momento in cui si predispone un kernel per tale
scopo, è bene tenere presente anche queste esigenze.
351.2.2 Parametri di avvio
All’avvio, il kernel deve ottenere alcuni parametri che gli permettano di configurare l’interfaccia
di rete, di definire l’instradamento e di montare il file system principale attraverso il protocollo
NFS.
root=/dev/nfs
Si tratta di un messaggio con cui si informa il kernel di voler utilizzare come file system principale
ciò che viene fornito attraverso il protocollo NFS. Il dispositivo ‘/dev/nfs’ non esiste in realtà.
[
]
[
[ ]]
nfsroot= ip_del_servente : directory_radice ,opzione_nfs ,...
Serve a definire le informazioni necessarie al montaggio della directory del servente che verrà
utilizzata come radice del file system. L’indirizzo IP del servente è facoltativo, perché viene
indicato nuovamente nel parametro ‘nfsaddrs’.
Le opzioni_NFS sono facoltative e, in ogni caso, si tratta delle stesse opzioni utilizzabili in condizioni normali con i file system NFS (il modello sintattico viene spezzato in due per mancanza
di spazio).
[
][
][
][
][
]
]
nfsaddrs= ip_del_cliente : ip_del_servente : ip_del_router : maschera_di_rete :←,→ nome_dell’host : dispositivo_di_rete : auto_configurazione
[
][
Il parametro ‘nfsaddrs’ permette di definire tutte le informazioni necessarie a stabilire il collegamento nella rete. Tutte le informazioni possono essere determinate in modo predefinito, ma
non tutte contemporaneamente. Come si potrà intuire: le informazioni sugli indirizzi del cliente
e del servente possono essere ottenute automaticamente in base ai protocolli RARP o BOOTP;
l’indirizzo di un router non è necessario nel caso tutto si svolga in una rete locale; la maschera
di rete può essere determinata automaticamente in base alla classe di indirizzi utilizzati; il nome
del nodo potrebbe corrispondere allo stesso numero IP attribuitogli; infine l’interfaccia di rete
potrebbe essere semplicemente la prima a essere individuata.
Almeno le prime volte, non è una buona idea lasciare che i valori vengano determinati
automaticamente.
L’ultima opzione, permette di definire il metodo di configurazione automatica. Si possono utilizzare le parole chiave ‘rarp’ o ‘bootp’ per indicare che si vuole sia utilizzato il protocollo RARP
oppure BOOTP, rispettivamente. In alternativa si può indicare la parola chiave ‘both’ per fare
sì che vengano gestiti entrambi, oppure ‘none’ per non utilizzarne alcuno. Se non viene indicato
nulla nell’ultimo campo, si intende che non si deve utilizzare alcun protocollo.
Se non viene utilizzato alcun protocollo per la configurazione automatica, è chiaro che occorre
specificare necessariamente gli indirizzi IP del cliente e del servente.
Diskless: elaboratori senza disco
3953
351.2.3 Un esempio
Prima di proseguire con la descrizione di ciò che serve per predisporre un cliente senza disco, conviene introdurre una situazione di esempio, che poi verrà utilizzata nelle spiegazioni
successive.
Si suppone di disporre di un servente nella stessa rete locale in cui si vuole collocare il cliente. In tal caso, pur non essendo necessario, viene indicato ugualmente un router che in pratica
corrisponde allo stesso indirizzo del servente. La tabella 351.1 mostra questa situazione.
Tabella 351.1. Configurazione di esempio.
Elemento
servente
cliente
router
maschera di rete
nome del cliente
interfaccia di rete
directory remota
Valore
192.168.1.1
192.168.1.7
192.168.1.1
255.255.255.0
diskless7
eth0
/tftpboot/192.168.1.7
In questa situazione, i parametri del kernel dovranno essere quelli indicati qui di seguito.
root=/dev/nfs
nfsroot=192.168.1.1:/tftpboot/192.168.1.7
nfsaddrs=192.168.1.7:192.168.1.1:192.168.1.1:255.255.255.0:diskless7:eth0:
La scelta della directory remota da utilizzare come file system principale non è casuale; si tratta
di una convenzione diffusa:
/tftpboot/indirizzo_del_cliente /
351.2.4 /dev/boot255
Esistono diversi modi per avviare un kernel. Dovendo fare in modo che il kernel si avvii montando il file system principale dalla rete, si utilizza il parametro ‘root=/dev/nfs’, dove ‘/dev/
nfs’ non esiste in realtà.
Quando si utilizza LILO, ma anche in altre situazioni, è necessario fare riferimento a un dispositivo esistente realmente, almeno nel momento in cui si «installa» il sistema di avvio. Per questo
si deve creare il dispositivo denominato ‘/dev/boot255’, con numero primario zero e numero
secondario 255.
# mknod /dev/boot255 c 0 255
351.2.5 Avvio del kernel dal dischetto
L’avvio del kernel da un dischetto è un problema che è stato già descritto a sufficienza in questo
documento, in particolare nel capitolo 16. Qui si intende solo riepilogare in che modo configurare
i vari sistemi di avvio.
• Se si intende avviare il kernel copiandolo in un dischetto senza file system, utilizzando
quindi ‘dd’ (o anche ‘cp’), non è possibile fornire alcun parametro, tranne l’indicazione del
dispositivo attraverso il programma ‘rdev’. In pratica, se il dischetto immagine del kernel
si trova nella prima unità, si utilizza il comando seguente:
Diskless: elaboratori senza disco
3954
# rdev /dev/fd0 /dev/boot255
Tutte le altre informazioni, devono provenire dal protocollo RARP o BOOTP. Pertanto,
questo tipo di avvio non è consigliabile in generale.
• Se si realizza un dischetto contenente il kernel, avviato attraverso LILO, si possono dare i
parametri necessari attraverso la configurazione del file ‘/etc/lilo.conf’. Segue il pezzo significativo, relativo all’esempio proposto in precedenza (la direttiva ‘append’ appare
spezzata su più righe per motivi tipografici, ma dovrebbe occupare una riga sola).
image=/vmlinuz
label=diskless
root=/dev/boot255
append="root=/dev/nfs ←,→nfsroot=192.168.1.1:/tftpboot/192.168.1.7 ←,→nfsaddrs=192.168.1.7:192.168.1.1:192.168.1.1:255.255.255.0:diskless7:eth0:"
• SYSLINUX si configura in modo simile a LILO, con la differenza che basta collocare i file
necessari nel dischetto, senza creare collegamenti tra loro. In questo senso è particolarmente
comodo e decisamente preferibile quando si deve avviare un kernel da dischetto. Segue un
pezzo della configurazione del file ‘SYSLINUX.CFG’ (anche in questo caso, la direttiva
‘APPEND’ appare spezzata su più righe per motivi tipografici, ma dovrebbe occupare una
riga sola).
LABEL diskless
KERNEL LINUX
APPEND "root=/dev/nfs ←,→nfsroot=192.168.1.1:/tftpboot/192.168.1.7 ←,→nfsaddrs=192.168.1.7:192.168.1.1:192.168.1.1:255.255.255.0:diskless7:eth0:"
Si osservi il fatto che qui non viene utilizzato il dispositivo ‘/dev/boot255’.
• Loadlin richiede la preparazione di un dischetto con un sistema Dos minimo, dal quale
poter avviare (di solito attraverso il file ‘AUTOEXEC.BAT’) il programma ‘LOADLIN.EXE’.
Segue l’esempio di questo comando, separato su più righe per motivi tipografici.
LOADLIN vmlinuz root=/dev/nfs nfsroot=192.168.1.1:/tftpboot/192.168.1.7 ←,→nfsaddrs=192.168.1.7:192.168.1.1:192.168.1.1:255.255.255.0:diskless7:eth0:
351.3 Preparazione del servente GNU/Linux
Il servente richiede una preparazione più complessa e delicata, da studiare prima a tavolino in
funzione delle cose che si vogliono fare con le macchine senza disco. Il problema, a questo proposito, risiede nel fatto che ogni distribuzione GNU/Linux ha una sua impostazione, dove sono
proprio queste diversità che richiedono lo sforzo maggiore nello studio necessario ad arrivare a
un servente per questo scopo.
Ogni distribuzione GNU/Linux dovrebbe fornire gli strumenti necessari ad automatizzare la
creazione e la gestione del servente; in realtà solo poche fanno tanto.
In queste sezioni si fa riferimento a un servente realizzato su una distribuzione Red Hat, ma senza
porre un accento eccessivo sulle particolarità di questa distribuzione.
351.3.1 Pianificare gli obiettivi da raggiungere
È importante decidere prima quali sono le attività per le quali verranno utilizzate le stazioni senza
disco e quindi quali programmi verranno utilizzati. Ciò servirà per stabilire quali componenti
devono essere predisposti nella gerarchia utilizzata come directory radice NFS.
È bene chiarire in mente che i clienti dovrebbero avere una configurazione uniforme e che su
quelle stazioni non ci dovrebbero essere utenti ‘root’, a parte l’amministratore del servente.
Diskless: elaboratori senza disco
3955
Se non fosse così, i vantaggi nell’utilizzo di macchine senza disco sarebbero troppo pochi per
giustificare lo sforzo necessario a predisporle.
Se si intende utilizzare il sistema grafico X, anche l’uniformità delle schede video sarebbe
auspicabile.
Le password shadow non dovrebbero essere utilizzate.
Come ultima considerazione, i clienti non dovrebbero offrire servizi di rete.
351.3.2 Directory radice NFS
La cosa più delicata da organizzare è la directory radice dei clienti senza disco. Queste directory,
per tradizione (e per stare fuori dai guai), vanno collocate a partire da ‘/tftpboot/indirizzo /’.
Per fare un esempio, il cliente individuato dall’indirizzo IP 192.168.1.7, dovrebbe trovare la sua
directory radice a partire dalla directory ‘/tftpboot/192.168.1.7/’ del servente.
Generalmente se ne prepara una per un cliente particolare; una volta verificato che tutto funziona
come si vuole, si preparano le altre utilizzando dei collegamenti fisici. Se tutto va bene, non ci
sarà bisogno di modificare la configurazione riferita a un cliente particolare, rispetto agli altri.
La directory radice NFS di ogni cliente deve contenere il necessario a permettere l’avvio del
cliente stesso, lasciando che il resto venga montato durante la fase di inizializzazione del sistema.
In pratica, sono necessarie le directory ‘bin/’, ‘dev/’, ‘etc/’, ‘home/’, ‘lib/’, ‘mnt/’, ‘opt/’,
‘proc/’, ‘root/’, ‘sbin/’, ‘tmp/’, ‘usr/’ e ‘var/’. Alcune di queste vanno copiate, così come
sono le directory corrispondenti del file system principale del servente, altre servono vuote, altre
vanno copiate solo parzialmente.
Nella spiegazione seguente si fa l’esempio della predisposizione della directory radice NFS per
il cliente 192.168.1.7; tutte le directory degli altri clienti verranno ottenute attraverso l’uso di
collegamenti fisici, a partire dall’esempio di partenza.
Si inizia creando la directory ‘/tftpboot/’ e quindi la directory ‘/tftpboot/
192.168.1.7/’.
# mkdir /tftpboot
# mkdir /tftpboot/192.168.1.7
Si prosegue copiando alcune directory così come sono nel servente (è meglio non fare
collegamenti ai file utilizzati dal sistema del servente) e creando altre directory vuote.
# cp -dpRv /bin /tftpboot/192.168.1.7
# cp -dpRv /dev /tftpboot/192.168.1.7
# cp -dpRv /etc /tftpboot/192.168.1.7
# mkdir /tftpboot/192.168.1.7/home
# cp -dpRv /lib /tftpboot/192.168.1.7
# mkdir /tftpboot/192.168.1.7/mnt
# mkdir /tftpboot/192.168.1.7/opt
# mkdir /tftpboot/192.168.1.7/proc
Diskless: elaboratori senza disco
3956
# mkdir /tftpboot/192.168.1.7/root
# cp -dpRv /sbin /tftpboot/192.168.1.7
# mkdir /tftpboot/192.168.1.7/tmp
# chmod 1777 /tftpboot/192.168.1.7/tmp
# mkdir /tftpboot/192.168.1.7/usr
# cp -dpRv /var /tftpboot/192.168.1.7
A questo punto si rifinisce un po’.
• Nella directory ‘lib/’ si potrebbero eliminare i moduli, se si è deciso che i kernel dei
clienti non ne faranno uso.
• Nella directory ‘etc/’ si potrebbero eliminare tutti i file e le sottodirectory riferite a
programmi, inclusi i demoni, che non verranno utilizzati.
• Nella directory ‘etc/’, i file ‘passwd’ e ‘group’ potrebbero essere dei collegamenti fisici
ai file corrispondenti della directory ‘/etc/’ del servente.1
• Nella directory ‘var/’ bisognerebbe eliminare tutto quello che non serve, lasciando comunque, almeno le directory vuote dove necessario. In particolare vanno eliminati tutti i file di
lock, i file delle registrazioni e tutti i file amministrativi dei programmi che non riguardano
i clienti. Altri file vanno lasciati, ma per ognuno di questi occorre conoscerne il motivo.
Per fare un esempio, il file ‘var/lib/dosemu/hdimage’ serve per avviare DOSEMU e
potrebbe essere condiviso tranquillamente tra tutti i clienti.
Anche le directory riferite alle stampanti costituiscono un problema. Se la stampa è necessaria, è il caso di predisporre le directory e i file necessari per una stampante di rete, in
modo da poter poi condividere tra tutti i clienti la stessa configurazione.
Dopo quanto descritto sulla directory ‘var/’, potrebbe essere utile proporre una struttura di
esempio, come guida per la scelta su cosa sia da eliminare o meno.
var
|-|-|
|
|
|
|
|
|
|
|
|
|
|-|-|
|
1
cache/
catman/
|-- X11/
|
|-- cat1/
|
|-- cat2/
|
...
|-- cat1/
|-- cat2/
...
‘-- local/
|-- cat1/
|-- cat2/
...
dhcpd/
lib/
‘-- texmf/
|-- fonts/
Questa soluzione non è «sicura», ma dovrebbe servire per centralizzare la gestione degli utenti senza la presenza
di un sistema NIS. Tuttavia, potrebbe essere inutile, dal momento che programmi come ‘useradd’ rinominano i file
‘passwd’ e ‘group’ e poi ne generano sempre di nuovi: in questo caso conviene fare uno script per ricopiare questi file
nelle directory relative ai sistemi senza disco ogni volta che si fa una modifica.
Diskless: elaboratori senza disco
|
|-|-|
|-|
|
|
|
|
|
|-|-|-|
|-|
|
|
|
|
|
|
|
|
|
‘--
3957
‘-- texfonts/
local/
lock/
‘-- subsys/
log/
|-- cron/
|-- dmesg/
|-- maillog/
|-- messages/
|-- secure/
‘-- spooler/
nis/
preserve/
run/
‘-- netreport/
spool
|-- at/
|
‘-- spool/
|-- cron/
|-- lpd/
|
|-- lp/
|
|
|
|
... ... (dipende se si vuole gestire la stampa)
|-- mail/
|-- mqueue/
‘-- rwho/
tmp -> /tmp
Come si può osservare nell’esempio, si è scelto di fare in modo che ‘var/tmp’ sia un collegamento simbolico alla directory ‘tmp/’, per non perdere il controllo sulla proliferazione dei file
temporanei.
351.3.3 Directory radice NFS da usare come base di partenza
È stato indicato che basta predisporre una directory radice per un cliente senza disco e poi le altre
per gli altri clienti possono essere ottenuti a partire da quella, con una serie di collegamenti fisici.
Questo è vero in parte. Quando si utilizza anche una sola volta il cliente di esempio, vengono
creati una serie di file amministrativi, temporanei, nella directory ‘var/’ (e nelle sue sottodirectory). Questi file vengono cancellati quando non servono più, o sostituiti, ma questo non avviene
regolarmente alla conclusione dell’attività, ma solo quando serve. Questi file non possono essere
condivisi tra i vari clienti e quindi non se ne può fare il collegamento.
Ecco quindi che diviene necessario predisporre una directory radice NFS standard che non verrà
utilizzata direttamente da alcun cliente e che servirà per generare le altre.
La directory standard va preparata congiuntamente a quella del primo cliente utilizzato come
prova del buon funzionamento della directory radice NFS. Quando si cambia qualcosa nella
directory del cliente, lo si deve fare anche in quella standard, se questa modifica non si riflette
già automaticamente per effetto di eventuali collegamenti fisici.
Per avere un riferimento con gli esempi, stabiliamo che la directory radice NFS standard sia
‘/tftpboot/standard/’.
351.3.4 Procedura di inizializzazione del sistema
Il problema più grosso da risolvere è la procedura di inizializzazione del sistema. A partire dal
file ‘etc/inittab’ è necessario analizzare tutto quello che succede nella propria distribuzione
GNU/Linux e intervenire in modo da permettere l’avvio dei clienti senza disco.
3958
Diskless: elaboratori senza disco
Prima di farlo, si deve fare mente locale alla situazione che si ha di fronte: il kernel dei clienti
provvede da solo a definire l’indirizzo dell’interfaccia di rete e a instradarsi verso il servente;
inoltre monta da solo il file system principale attraverso il protocollo NFS. Quindi, la procedura
di inizializzazione del sistema non ha alcuna necessità, né la possibilità di eseguire un controllo
del file system principale e nemmeno di altri dischi; inoltre non deve configurare la rete, che è
già configurata.
A questo si può aggiungere il fatto che sarebbe meglio eliminare la gestione dei moduli del
kernel, in modo da avere un problema in meno a cui badare.
Nel caso della distribuzione Red Hat, si può modificare il file ‘etc/rc.d/rc.sysinit’ nel
modo seguente:
#! /bin/sh
# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
# Clear mtab
>/etc/mtab
mount -av
if grep -i nopnp /proc/cmdline >/dev/null ; then
PNP=
else
PNP=yes
fi
# set up pnp
if [ -x /sbin/isapnp -a -f /etc/isapnp.conf ]; then
if [ -n "$PNP" ]; then
echo "Setting up ISA PNP devices"
/sbin/isapnp /etc/isapnp.conf
else
echo "Skipping ISA PNP configuration at users request"
fi
fi
# Clean out /etc.
rm -f /etc/mtab~ /fastboot /fsckoptions
>/var/run/utmp
# Delete UUCP lock files.
rm -f /var/lock/LCK*
# Delete stale subsystem files.
rm -f /var/lock/subsys/*
# Delete stale pid files
rm -f /var/run/*.pid
# Delete X locks
rm -f /tmp/.X*-lock
# Set the system clock.
echo -n "Setting clock"
ARC=0
UTC=0
if [ -f /etc/sysconfig/clock ]; then
. /etc/sysconfig/clock
# convert old style clock config to new values
Diskless: elaboratori senza disco
3959
if [ "${CLOCKMODE}" = "GMT" ]; then
UTC=true
elif [ "${CLOCKMODE}" = "ARC" ]; then
ARC=true
fi
fi
if [ -x /sbin/hwclock ]; then
CLOCKFLAGS="--hctosys"
CLOCK=/sbin/hwclock
else
CLOCKFLAGS="-a"
CLOCK=/sbin/clock
fi
if [ $UTC = "true" ]; then
CLOCKFLAGS="$CLOCKFLAGS -u";
echo -n " (utc)"
fi
if [ $ARC = "true" ]; then
CLOCKFLAGS="$CLOCKFLAGS -A";
echo -n " (arc)"
fi
echo -n ": "
$CLOCK $CLOCKFLAGS
date
# Initialize the serial ports.
if [ -f /etc/rc.d/rc.serial ]; then
. /etc/rc.d/rc.serial
fi
# Now that we have all of our basic modules loaded and the kernel going,
# let’s dump the syslog ring somewhere so we can find it later
dmesg > /var/log/dmesg
# Feed entropy into the entropy pool
/etc/rc.d/init.d/random start
La cosa più importante da osservare in questo esempio è il fatto che il montaggio dei file system
elencati nel file ‘etc/fstab’ viene fatto quasi subito; tutta la gestione del controllo dei dischi,
l’attivazione della memoria virtuale e dei moduli del kernel sono stati eliminati.
Eventualmente, è anche possibile l’attivazione della memoria virtuale utilizzando per questo il
disco fisso dei clienti senza disco, ammesso che ce ne sia uno nella realtà, cosa che comunque
appare un po’ come un controsenso: che motivo ci sarebbe di montare il file system principale
dalla rete, se si dispone di un disco fisso, per quanto piccolo possa essere.
Dal momento che la gestione della rete non è più compito della procedura di inizializzazione del sistema, nel caso della distribuzione Red Hat è opportuno eliminare i file
‘etc/sysconfig/network’, ‘etc/sysconfig/static-routes’ e tutta la directory ‘etc/
sysconfig/network-scripts/’.
351.3.5 Servizi e demoni
Un’altra cosa a cui fare attenzione, sono i demoni avviati nei clienti. Bisogna ridurli al minimo
indispensabile, anche in considerazione del fatto che è improbabile l’attivazione di servizi su dei
clienti senza disco.
Diskless: elaboratori senza disco
3960
351.3.6 Configurazione di etc/fstab
Il file ‘etc/fstab’ utilizzato dai clienti senza disco va predisposto in modo da montare ciò
che manca dopo il file system principale di tipo NFS. Si tratta delle directory ‘proc/’, ‘usr/’,
‘opt/’ e ‘home/’; la prima in modo predefinito, la seconda e la terza in sola lettura, mentre la
quarta anche in scrittura. Se si vogliono utilizzare dischetti e CD-ROM nei clienti, sarà il caso di
predisporre i punti di innesto rispettivi. L’esempio seguente dovrebbe essere chiaro a sufficienza,
tenendo conto che si riferisce al nodo identificato dall’indirizzo IP 192.168.1.7.
192.168.1.1:/tftpboot/192.168.1.7
none
192.168.1.1:/usr
192.168.1.1:/opt
192.168.1.1:/home
/dev/fd0
/dev/fd0
/dev/cdrom
/
/proc
/usr
/opt
/home
/mnt/floppy
/mnt/a
/mnt/cdrom
nfs
proc
nfs
nfs
nfs
ext2
vfat
iso9660
defaults
defaults
ro
ro
defaults
user,noauto
user,noauto
user,noauto,ro
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Si può intendere quindi che anche la directory ‘mnt/’ deve essere organizzata opportunamente.
L’indicazione esplicita del file system principale va fatta per permettere la chiusura corretta
del funzionamento quando si avvia la procedura di arresto del sistema. Infatti, il file system
principale è già montato quando il sistema legge questo file all’avvio.
351.3.7 Esportazione del file system nel servente
Perché la gestione degli elaboratori clienti senza disco possa funzionare, occorre evidentemente
che il servente consenta l’accesso al proprio file system attraverso il protocollo NFS. Si tratta, in
pratica, di configurare correttamente il file ‘/etc/exports’ e quindi di riavviare i demoni che
ne permettono l’uso.
Seguendo gli esempi già visti, il modo più corretto per configurare tale file dovrebbe essere il
seguente:
/tftpboot
192.168.1.0/255.255.255.0(rw,no_root_squash)
#
/usr
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
/opt
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
/home
192.168.1.0/255.255.255.0(rw,no_root_squash)
#
/lib
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
/bin
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
/sbin
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
/etc
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
/mnt
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
/var
192.168.1.0/255.255.255.0(ro,squash_uids=0-100,squash_gids=1-80)
Dagli esempi mostrati in questo capitolo, è indispensabile la condivisione delle sole directory
‘/tftpboot/’, ‘/usr/’, ‘/opt/’ e ‘/home/’. Tuttavia, le altre directory indicate potrebbero
essere utili, ed è meglio prevederne subito la condivisione.
Purtroppo, i demoni che gestiscono il servizio NFS potrebbero non essere in grado di interpretare
correttamente la sintassi dell’esempio mostrato, per quanto questa sia corretta. Se si notano difficoltà, si può rimediare accontentandosi della configurazione seguente, dove il dominio brot.dg
corrisponde a quello utilizzato nella rete 192.168.1.0/255.255.255.0.
/tftpboot
*.brot.dg(rw,no_root_squash)
#
/usr
*.brot.dg(ro)
Diskless: elaboratori senza disco
/opt
/home
#
/lib
/bin
/sbin
/etc
/mnt
/var
3961
*.brot.dg(ro)
*.brot.dg(rw,no_root_squash)
*.brot.dg(ro)
*.brot.dg(ro)
*.brot.dg(ro)
*.brot.dg(ro)
*.brot.dg(ro)
*.brot.dg(ro)
351.3.8 Attivazione di un nuovo cliente
Per attivare un nuovo cliente basta riprodurre la directory radice NFS standard, creando solo collegamenti fisici, come nell’esempio seguente, in cui si suppone di aggiungere il cliente
192.168.1.77.
# cp -ldpR /tftpboot/standard /tftpboot/192.168.1.77
In questo modo vengono copiate le directory, mentre i file vengono riprodotti come collegamenti.
351.3.9 Memoria virtuale
In questo capitolo è stato ignorato volutamente il problema della memoria virtuale. Per attivare
la sua gestione, le macchine usate come cliente dovrebbero avere un disco fisso e in tal senso
dovrebbe essere modificata la procedura di inizializzazione del sistema.
351.4 Riferimenti
• Gero Kuhlmann, Mounting the root filesystem via NFS (nfsroot)
<file:///usr/src/linux/Documentation/nfsroot.txt>
• Stefano Salvi, AngoLinux, Realizzazione di un Laboratorio Diskless
<http://www.itis.mn.it/linux/>
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
3962
Diskless: elaboratori senza disco
Parte lxxiii
Informatica gestionale
352 Codici a barre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3964
352.1 Codice di controllo «modulo n » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3964
352.2 UPC-E e UPC-A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3965
352.3 EAN-8 e EAN-13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3965
352.4 Code 39 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3971
352.5 Code 128 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3972
352.6 ITF, ovvero i25 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3976
352.7 Sistemi bidimensionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3977
352.8 Riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3977
353 Barcode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3979
353.1 Utilizzo del programma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3979
353.2 Codifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3980
354 Trasformazione in lettere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3982
354.1 Da numero a sequenza alfabetica pura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3982
354.2 Da numero a numero romano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3983
354.3 Da numero a lettere, nel senso verbale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3986
3963
Capitolo
352
Codici a barre
I codici a barre sono dati memorizzati in forma ottica, attraverso l’uso di barre verticali che
possono essere lette e interpretate facilmente con strumenti non troppo complessi. La tecnica dei
codici a barre nasce negli anni 1960 e si diffonde negli anni 1970, con lo scopo di identificare
rapidamente imballaggi e merci.
Gli standard sui codici a barre sono molti e il problema più importante da risolvere quando
si vogliono usare è il decidere quale sia quello più conveniente per i propri fini. Si parla di
simbologia per fare riferimento al tipo di codice a barre, ovvero allo standard di rappresentazione
dei dati; la simbologia definisce implicitamente il tipo di dati che possono essere memorizzati.
Per fare un esempio abbastanza comune, i codici ISBN dei libri sono scritti usando codici a
barre di tipo EAN-13, che si compongono di 13 cifre numeriche; in questo caso, la simbologia è
EAN-13, con la quale si vanno a rappresentare in pratica i codici ISBN.
Le rappresentazioni normali di un codice a barre sono a una sola dimensione, ovvero, è prevista
una lettura orizzontale unica. Nella lettura vengono attraversate barre verticali nere e spazi bianchi; queste barre di larghezze differenti e gli spazi di ampiezze diverse sono gli elementi della
simbologia; ogni simbologia usa un proprio numero di elementi differenti. Nel capitolo vengono
descritte brevemente alcune simbologie standard.
352.1 Codice di controllo «modulo n »
Alcuni tipi di codici numerici utilizzano un numero di controllo (o codice di controllo) per permettere una verifica facile dell’integrità del dato rappresentato. Esiste un genere comune di algoritmi per il calcolo di tali numeri di controllo, a cui si fa spesso riferimento con la definizione
modulo n , dove n è un numero intero maggiore di uno.
In questo modo si fa riferimento a una somma di valori, ottenuta moltiplicando ogni cifra del
numero di partenza, compreso il numero di controllo, per un certo peso (un altro numero intero
positivo), che deve essere un multiplo del numero n stabilito. Si osservi l’esempio seguente, in
cui il numero di controllo finale è calcolato con i pesi dati, dividendo per il modulo 5:
Valore
Peso
Peso*Valore
1
5
5
3
4
12
5
3
15
7
2
14
4
1
4
5 + 12 + 15 + 14 + 4 = 50
50 è divisibile perfettamente per cinque, senza lasciare resti, garantendo l’integrità del valore.
In pratica, il peso che si dà al valore da usare come numero di controllo è solitamente uno, per
cui diventa facile il calcolo di questa cifra:
5 + 12 + 15 + 14 = 46;
46 / 5 = 9, con il resto di 1;
5 - 1 = 4, ovvero il valore cercato come numero di controllo.
3964
Codici a barre
3965
352.2 UPC-E e UPC-A
UPC è un insieme di simbologie standard utilizzato in particolare negli Stati Uniti e nel Canada.
Con UPC-E e UPC-A si possono rappresentare solo cifre numeriche: UPC-A consente di rappresentare 11 cifre più una di controllo; UPC-E consente di rappresentare sei cifre, senza codice di
controllo (il controllo di integrità avviene in forma differente).
La figura 352.1 mostra rispettivamente l’esempio di 123456 con UPC-E e di 12345678901 con
UPC-A.
Figura 352.1. Esempi di codici a barre con simbologia UPC-E e UPC-A.
Gli elementi utilizzati nella simbologia UPC sono otto, composti da quattro tipi di barre nere e
quattro tipi di spazi.
Il codice di controllo di UPC-A si calcola moltiplicando in modo alterno le cifre che compongono
il numero, per tre, o per uno, sommando alla fine i risultati. Ciò che si ottiene si divide per 10 e
si tiene il resto; infine, 10 meno il resto ottenuto dà il codice di controllo cercato (modulo 10).
Per esempio, nel caso di 12345678901 si ottiene il codice di controllo due, in base al calcolo
seguente:
Valore
Peso
Peso*Valore
1
3
3
2
1
2
3
3
9
4
1
4
5
3
15
6
1
6
7
3
21
8
1
8
9
3
27
0
1
0
1
3
3
Il totale che si ottiene è 98; pertanto: 98/10 = 9 con un resto di 8; 10-8 = 2.
352.3 EAN-8 e EAN-13
EAN (European article number) è un insieme di simbologie standard di origine europea,
utilizzato anche in altri paesi, nato come estensione delle simbologie UPC.
EAN-8 e EAN-13 permettono di rappresentare solo cifre numeriche: EAN-8 consente di rappresentare sette cifre più una di controllo, mentre EAN-13 consente di rappresentare 12 cifre
numeriche più una di controllo.
La figura 352.2 mostra rispettivamente l’esempio di 1234567 con EAN-8 e di 123456789012
con EAN-13.
Figura 352.2. Esempi di codici a barre con simbologia EAN-8 e EAN-13.
Il codice di controllo di EAN-8 e di EAN-13 si calcola nello stesso modo di UPC-A. Per esempio, nel caso di 1234567 (EAN-8) si ottiene il codice di controllo zero, mentre nel caso di
123456789012 (EAN-13) si ottiene otto.
Codici a barre
3966
Valore
Peso
Peso*Valore
1
3
3
2
1
2
3
3
9
4
1
4
5
3
15
6
1
6
7
3
21
Il totale che si ottiene è 60; pertanto: 60/10 = 6 con un resto di 0; 10-0 = 10, da cui si prende
solo l’ultima cifra (lo zero).
Valore
Peso
Peso*Valore
1
1
1
2
3
6
3
1
3
4
3
12
5
1
5
6
3
18
7
1
7
8
3
24
9
1
9
0
3
0
1
1
1
2
3
6
Il totale che si ottiene è 92; pertanto: 92/10 = 9 con un resto di 2; 10-2 = 8.
La rappresentazione di ogni cifra numerica può avere tre forme differenti, a cui si attribuisce
convenzionalmente una lettera alfabetica maiuscola: A, B e C. Nella simbologia EAN-8, le prime
quattro cifre sono rappresentate secondo la forma A, mentre le ultime quattro secondo la forma C.
Invece, la rappresentazione delle cifre nella simbologia EAN-13 è più complessa, per l’esigenza
di essere compatibile con UPC-A.
Con EAN-13 si rappresentano effettivamente solo le ultime 12 cifre (incluso il codice di controllo), mentre la prima viene determinata in base al modo in cui vengono rappresentate le sei cifre
successive. In pratica, a seconda del valore della prima cifra, si determina la combinazione delle
forme A e B, per le sei cifre che seguono la prima, mentre le ultime sei sono rappresentate con la
forma C.
Valore iniziale
0
1
2
3
4
5
6
7
8
9
A
A
A
A
A
A
A
A
A
A
A
A
A
A
B
B
B
B
B
B
A
B
B
B
A
B
B
A
A
B
A
A
B
B
A
A
B
B
B
A
A
B
A
B
B
A
A
A
B
B
A
B
B
A
B
B
A
B
A
A
Dallo specchietto si può notare che con una prima cifra pari a zero, le sei cifre successive si
rappresentano secondo la forma A, esattamente come avviene nella simbologia UPC-A. In pratica, a parte qualche differenza estetica minima, un codice a barre realizzato con la simbologia
EAN-13 è uguale a un altro realizzato con la simbologia UPC-A, quando la prima cifra è pari a
zero, tenendo conto che lo zero iniziale non può cambiare nulla anche nel calcolo del codice di
controllo finale.
352.3.1 Codici UCC ed EAN
In generale, la simbologia EAN-13 viene utilizzata per identificare degli «articoli», intesi principalmente come prodotti in vendita. Per poter applicare un codice a barre del genere occorre
naturalmente avere ottenuto il numero per uno scopo preciso;1 tuttavia esiste un prefisso iniziale
che fa parte dello standard e serve a stabilire l’origine del codice. l’origine è un concetto riferito precisamente a chi ha rilasciato il numero, che nella maggior parte dei casi si riferisce a
un’organizzazione con competenza nazionale.
1
L’ente italiano competente per l’attribuzione dei codici EAN è Indicod.
Codici a barre
3967
Questo prefisso iniziale dipende principalmente da due organizzazioni: UCC (Uniform code
council) ed EAN (European article number). La prima organizzazione, definisce codici in cui
la prima cifra identifica l’origine nell’area nell’ambito di Stati Uniti e Canada, mentre la seconda
copre tutto il mondo, includendo la codifica UCC a cui si aggiunge la cifra iniziale zero.
Le tabelle 352.6 352.7 mostrano in pratica un elenco abbastanza completo dei prefissi EAN, che
solitamente si applicano ai codici a barre con simbologia EAN-13. Si può osservare che ormai
i codici assegnati all’area Stati Uniti e Canada non ha più solo lo zero iniziale; resta comunque l’abbinamento tra codice UCC e codice EAN, per cui il primo si trasforma nel secondo
aggiungendo uno zero iniziale.
Tabella 352.6. Attribuzione dei prefissi secondo la codifica EAN. Prima parte.
Prefisso
00-13
2
380
384
386
388-389
45
470
472-473
475
477
479
481
483
485
487
489
50
520
528
530
532-534
536-538
54
560
569
58
591-593
595-598
600-601
609
611
613
616
619
621
623
625
627
629
64
690-693
Contesto
USA, Canada
uso interno
Bulgaria
ISO 3166
US, CA
Giappone
JP
Lettonia
Lituania
Sri Lanka
Belarus
LV
LT
LK
BY
Armenia
Kazakistan
Hong Kong
Gran Bretagna
Grecia
Libano
AM
KZ
HK
UK
GR
LB
Belgio, Lussemburgo
Portogallo
Islanda
BE, LU
PT
IS
Sud Africa
Mauritius
Marocco
Algeria
Kenia
Tunisia
Siria
ZA
MU
MA
DZ
KE
TN
SY
Giordania
Kuwait
Emirati
Finlandia
Cina
JO
KW
AE
FI
CN
BG
Prefisso
14-19
30-37
383
385
387
400-440
460-469
471
474
476
478
480
482
484
486
488
49
51
521-527
529
531
535
539
55
561-568
57
590
594
599
602-608
610
612
614-615
617-618
620
622
624
626
628
63
65-68
694-699
Contesto
ISO 3166
Francia
Slovenia
Croazia
Bosnia Erzegovina
Germania
Federazione russa
Taiwan
Estonia
Azerbaijan
Uzbekistan
Filippine
Ucraina
Moldavia
Georgia
FR
SI
HR
BA
DE
RU
TW
EE
AZ
UZ
PH
UA
MD
GE
Giappone
JP
Cipro
Macedonia
Malta
Irlanda
CY
MK
MT
IE
Danimarca
Polonia
Romania
Ungheria
DK
PL
RO
HU
Egitto
Libia
Iran
Arabia Saudita
EG
LY
IR
SA
Codici a barre
3968
Tabella 352.7. Attribuzione dei prefissi secondo la codifica EAN. Seconda parte.
Prefisso
70
729
740
742
744
746
750
759
770
773
775
777
779
781-783
785
787-788
80-83
850
858
860
867
869
880
885
888
890
893
899
92
94
955
958
977
980
983-989
Contesto
Norwegia
Israele
Guatemala
Honduras
Costa Rica
Repubblica Dominicana
Messico
Venezuela
Colombia
Uruguay
Perù
Bolivia
Argentina
ISO 3166
NO
IL
GT
HN
CR
DO
MX
VE
CO
UY
PE
BO
AR
Italia
Cuba
Slovacchia
Jugoslavia
Nord Korea
Turchia
Sud Korea
Thailandia
Singapore
India
Vietnam
Indonesia
IT
CU
SK
YU
KP
TR
KR
TH
SG
IN
VN
ID
Nuova Zelanda
Malaysia
Macau
periodici (ISSN)
ricevute di rimborso (refund receipts)
NZ
MY
MO
Prefisso
710-728
73
741
743
745
747-749
751-758
76
771-772
774
776
778
780
784
786
789
84
851-857
859
861-866
868
87
881-884
886-887
889
891-892
894-898
90-91
93
950-954
956-957
959-976
978-979
981-982
99
Contesto
Svezia
El Salvador
Nicaragua
Panama
Svizzera
Cile
Paraguay
Ecuador
Brasile
Spagna
Czech
Olanda
Austria
Australia
libri (ISBN)
tagliandi di valuta (common currency cou
tagliandi (coupons)
Si può osservare in particolare che il prefissi 978 e 979 sono riservati per i libri, mentre il prefisso
977 è riservato per i periodici (riviste). Dal momento che il prefisso EAN definiva originariamente
un’area nazionale, era stato attribuito al codice 978 la denominazione bookland (la terra dei
libri). Molta documentazione sui codici a barre e sulla numerazione ISBN fa ancora riferimento
a questo nome per indicare tale prefisso.
Un altro prefisso interessante è il due, che rimane libero. Molti negozi usano codici a barre EAN13, con prefisso due per annotare il prezzo di qualcosa che non è identificabile diversamente,
come gli alimentari ottenuti da un banco di salumi e formaggi. La figura 352.3 mostra un esempio
reale in cui, tra le altre cose, si annota un prezzo di 5835 LIT.
Codici a barre
3969
Figura 352.3. Esempio di un codice a barre con simbologia EAN-13, usato per
annotare un prezzo.
2 000120 058354
352.3.2 ISBN
La simbologia EAN-13 viene usata in diverse situazioni comuni, in particolare per ciò che
riguarda le pubblicazioni.
La codifica ISBN (International standard book number) permette di identificare un libro in una
sua edizione precisa, attraverso un numero composto da 10 cifre. Il numero in questione contiene
quattro parti: l’origine (ovvero l’ente che lo ha rilasciato), l’editore, il titolo (il libro) e un numero
di controllo finale (una sola cifra).
Per facilitare la lettura di queste informazioni, le quattro parti vengono mostrate solitamente
come separate, attraverso un trattino. Per esempio, ‘88-8331-223-6’ indica l’origine 88 (Italia),
l’editore 8331, il titolo 233 e il numero di controllo 6.
Le varie parti in cui si suddivide l’informazione contenuta in un numero ISBN non sono di
lunghezza fissa e la dimensione dell’una limita quella delle altre. In generale sono disponibili i
raggruppamenti seguenti.
1. La prima parte identifica l’area (nazionale, linguistica e geografica) e viene attribuita
dall’agenzia internazionale dell’ISBN. Il numero assegnato all’Italia è 88.
• 0-7
• 80-94
• 950-994
• 9950-9989
• 99900-99999
2. La seconda parte identifica l’editore e viene attribuito dall’agenzia ISBN competente
nell’area di riferimento.
• 00-19
• 200-699
• 7000-8499
• 85000-89999
• 900000-999999
3. La terza parte identifica il titolo, relativamente all’editore a cui si fa riferimento, utilizzando
lo spazio rimanente, escludendo il numero di controllo finale.
4. Il numero di controllo viene calcolato moltiplicando le cifre per un numero che va da 10 a
uno, sommando ciò che si ottiene e dividendo per il «modulo 11. In questo modo, il valore
che si ottiene può andare da 0 a 10, dove il 10 si rappresenta con una lettera «X».
Codici a barre
3970
Per comprendere il meccanismo del calcolo del numero di controllo, conviene vedere un esempio
reale, il numero ISBN ‘88-8331-223-6’. In pratica, si tratta di verificare che il numero sei sia
effettivamente il numero di controllo corretto.
Valore
Peso
Peso*Valore
8
10
80
8
9
72
8
8
64
3
7
21
3
6
18
1
5
5
2
4
8
2
3
6
3
2
6
6
1
6
Il totale che si ottiene è 286, che diviso per 11 dà esattamente 26, senza resto, a conferma della
validità del numero di controllo. Non conoscendo il numero di controllo lo si potrebbe calcolare:
la somma che si otterrebbe sarebbe solo 280, che divisa per 11 dà 25 con il resto di 5, per cui, 11
- 5 dà 6, il numero cercato.
Il numero ISBN si trasforma in EAN-13 mettendo anteriormente il valore 978 e togliendo il
numero di controllo finale che va sostituito con quello calcolato secondo lo standard EAN-13;
naturalmente, i trattini di divisione sono perduti. La figura 352.4 mostra l’esempio del codice
ISBN 88-481-0113-5 rappresentato secondo la simbologia EAN-13, che si trasforma nel numero
9788848101134.
Figura 352.4. ISBN 88-481-0113-5.
A seconda del paese in cui si utilizza il numero ISBN, può essere obbligatorio o meno un codice
a barre aggiuntivo contenente l’informazione sul prezzo.
352.3.3 ISSN
La codifica ISSN permette di identificare una pubblicazione periodica attraverso una tecnica
simile a quella del numero ISBN per i libri. In questo caso, il numero è composto da otto cifre
numeriche (compreso il numero di controllo), che vanno inserite in una simbologia EAN-13
aggiungendo all’inizio il prefisso 977, togliendo il numero di controllo ISSN, aggiungendo due
cifre che rappresentano il codice del prezzo e aggiungendo il codice di controllo EAN-13. Inoltre,
va aggiunto un codice a barre ulteriore per rappresentare due o cinque cifre in cui si indica il
numero del fascicolo.
Per esempio, il numero ISSN ‘1129-1346’ di una rivista potrebbe tradursi nel codice a barre
9771129134006, con l’aggiunta di 10110, dove il codice del prezzo è assente e si fa riferimento
al fascicolo numero 110.
La figura 352.5 mostra l’esempio del codice di due riviste, in cui appare anche un’estensione
contenente il numero della pubblicazione.
Figura 352.5. Esempio di due codici ISSN, riferiti a riviste, con un’estensione
contenente il numero della pubblicazione (rispettivamente 106 e 23).
Codici a barre
3971
352.4 Code 39
La simbologia denominata Code 39, ovvero 3 of 9, consente di rappresentare 42 simboli, composti da lettere maiuscole, cifre numeriche e pochi altri segni. La tabella 352.9 riepiloga l’insieme
di caratteri. Un codice a barre Code 39 è composto da un carattere di inizio, dai dati che deve
contenere, da un codice di controllo (che non appare tradotto per la lettura umana) e dal carattere
di fine. Il carattere usato per iniziare e per concludere la sequenza è l’asterisco, che quindi non
può essere utilizzato nei dati contenuti.
Tabella 352.9. Insieme di caratteri per la simbologia Code 39.
Valore
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Carattere
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
G
H
I
J
K
L
Valore
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
inizio/fine
Carattere
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
.
space
$
/
+
%
*
Figura 352.6. Esempio di codice a barre Code 39.
Gli elementi utilizzati nella simbologia Code 39 sono quattro, composti da due tipi di barre nere
e due tipi di spazi. Ogni carattere o segno che può essere rappresentato con questa simbologia, si
avvale di cinque barre e di quattro spazi, per un totale di nove elementi. Il nome della simbologia,
che si può tradurre come «tre su nove», indica il fatto che tre elementi su nove sono sempre di
tipo largo (rispetto agli altri che invece sono stretti).
Il codice di controllo si ottiene sommando assieme i valori abbinati ai segni che si possono
rappresentare, secondo la tabella di conversione 352.9, dividendo per 43. Il resto della divisione
è il codice di controllo. Nel caso dell’esempio che appare in figura 352.6, si tratta della lettera
‘L’:
«CIAO» = 12 + 18 + 10 + 24 = 64
Codici a barre
3972
64 / 43 = 1 lasciando un resto di 21 = ‘L’
352.4.1 Code 39 esteso
Esiste anche un’estensione della simbologia Code 39, allo scopo di consentire la rappresentazione dell’ASCII standard completo. Si ottiene questo risultato scrivendo due simboli normali
al posto di uno. Naturalmente, dal momento che non esiste un modo per distinguere la codifica
standard da quella estesa, è necessario che il lettore di codice a barre sia impostato nel modo
più conveniente. La tabella 352.10 mostra l’insieme di caratteri esteso e la corrispondenza con i
segni della simbologia Code 39 normale.
Tabella 352.10. Insieme di caratteri esteso per la simbologia Code 39.
ASCII
<NUL>
<SOH>
<STX>
<ETX>
<EOT>
<ENQ>
<ACK>
<BEL>
<BS>
<HT>
<LF>
<VT>
<FF>
<CR>
<SO>
<SI>
<DLE>
<DC1>
<DC2>
<DC3>
<DC4>
<NAK>
<SYN>
<ETB>
<CAN>
<EM>
<SUB>
<ESC>
<FS>
<GS>
<RS>
<US>
Code 39
%U
$A
$B
$C
$D
$E
$F
$G
$H
$I
$J
$K
$L
$M
$N
$O
$P
$Q
$R
$S
$T
$U
$V
$W
$X
$Y
$Z
%A
%B
%C
%D
%E
ASCII
<SP>
!
"
#
$
%
&
’
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
Code 39
=
/A
/B
/C
/D
/E
/F
/G
/H
/I
/J
/K
/L
/M
/N
/O
0
1
2
3
4
5
6
7
8
9
/Z
%F
%G
%H
%I
%J
ASCII
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
Code 39
%V
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
%K
%L
%M
%N
%O
ASCII
‘
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
<DEL>
Code 39
%W
+A
+B
+C
+D
+E
+F
+G
+H
+I
+J
+K
+L
+M
+N
+O
+P
+Q
+R
+S
+T
+U
+V
+W
+X
+Y
+Z
%P
%Q
%R
%S
%T
Codici a barre
3973
352.5 Code 128
La simbologia denominata Code 128, ovvero USS Code 128, consente di rappresentare 106 simboli, che possono essere interpretati secondo tre insiemi di caratteri, distinti in base a una lettera:
A, B e C. Per questa ragione, un codice a barre realizzato secondo la simbologia Code 128 inizia sempre con la dichiarazione dell’insieme di caratteri. L’informazione non ha una lunghezza
predeterminata e può essere modificato l’insieme di caratteri quando serve. La simbologia Code 128 prevede l’inserimento di un codice di controllo, calcolato automaticamente per consentire
la verifica della lettura meccanica, ma questa cifra non viene mostrata per la lettura umana.
Tabella 352.11. Insiemi di caratteri per la simbologia Code 128. Prima parte. L’ultima
colonna riporta anche la descrizione della rappresentazione a barre, dove un numero da uno a tre indica la larghezza della barra, ‘b’, o dello spazio, ‘s’, dalla grandezza
più piccola alla più grande.
Valore
Code A
Code B
Code C
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<SP>
<SP>
!
"
#
$
%
&
’
(
)
*
+
’
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
!
"
#
$
%
&
’
(
)
*
+
’
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Barre e spazi:
bsbsbs
212222
222122
222221
121223
121322
131222
122213
122312
132212
221213
221312
231212
112232
122132
122231
113222
123122
123221
223211
221132
221231
213212
223112
312131
311222
321122
321221
312212
322112
322211
212123
212321
232121
111323
131123
131321
112313
132113
132311
211313
231113
Codici a barre
3974
Valore
Code A
Code B
Code C
41
42
43
44
45
46
47
48
49
50
51
52
I
J
K
L
M
N
O
P
Q
R
S
T
I
J
K
L
M
N
O
P
Q
R
S
T
41
42
43
44
45
46
47
48
49
50
51
52
Barre e spazi:
bsbsbs
231311
112133
112331
132131
113123
113321
133121
313121
211331
231131
213113
213311
Tabella 352.12. Insiemi di caratteri per la simbologia Code 128. Seconda parte. Si
osservi che lo stop ha una barra in più alla fine.
Valore
Code A
Code B
Code C
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
U
V
W
X
Y
Z
[
\
]
^
_
U
V
W
X
Y
Z
[
\
]
^
_
‘
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<NUL>
<SOH>
<STX>
<ETX>
<EOT>
<ENQ>
<ACK>
<BEL>
<BS>
<HT>
<LF>
<VT>
<FF>
<CR>
<SO>
<SI>
<DLE>
<DC1>
<DC2>
<DC3>
<DC4>
<NAK>
<SYN>
<ETB>
<CAN>
<EM>
<SUB>
Barre e spazi:
bsbsbs
213131
311123
311321
331121
312113
312311
332111
314111
221411
431111
111224
111422
121124
121421
141122
141221
112214
112412
122114
122411
142112
142211
241211
221114
413111
241112
134111
111242
121142
121241
114212
124112
124211
411212
421112
421211
212141
214121
Codici a barre
3975
Valore
Code A
Code B
Code C
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<ESC>
<FS>
<GS>
<RS>
<US>
{
|
}
~
FNC 3
FNC 2
Shift
Code C
Code B
FNC 4
FNC 1
Start A
Start B
Start C
Stop
FNC 3
FNC 2
Shift
Code C
FNC 4
Code A
FNC 1
Start A
Start B
Start C
Stop
91
92
93
94
95
96
97
98
99
Code B
Code A
FNC 1
Start A
Start B
Start C
Stop
<DEL>
Barre e spazi:
bsbsbs
412121
111143
111341
131141
114113
114311
411113
411311
113141
114131
311141
411131
211412
211214
211232
2331112
Gli insiemi di caratteri A, B e C sono elencati nelle tabelle 352.11 e 352.12. Come si può vedere,
l’insieme A consente di rappresentare l’alfabeto maiuscolo, le cifre numeriche, vari simboli di
punteggiatura e caratteri di controllo; in pratica, ciò che si può rappresentare con la prima parte
della codifica ASCII, tenendo conto che le posizioni non corrispondono. L’insieme B consente di
rappresentare praticamente tutto l’alfabeto ASCII, compresa la distinzione tra lettere maiuscole
e minuscole, a esclusione dei caratteri di controllo. L’insieme C consente di rappresentare valori
numerici a coppie, per cui, un valore composto da un numero dispari di cifre acquisisce uno zero
iniziale.
Figura 352.7. Esempio di due codici Code 128, realizzati usando l’insieme B e l’insieme
C, per rappresentare due dati equivalenti: «Ciao» e 37 736 578.
La figura 352.7 mostra la comparazione tra un codice a barre realizzato usando l’insieme B
e un altro con l’insieme C. L’informazione contenuta è la stessa dal punto di vista dei valori
rappresentabili (eventualmente si osservino le tabelle degli insiemi di caratteri). Se fosse possibile
sovrapporre i due codici, si noterebbe che cambia solo la parte iniziale, quella in cui si dichiara
l’insieme di caratteri, e la parte finale, dove si inserisce il codice di controllo. Si può anche
osservare che gli ultimi elementi rimangono uguali e sono quelli che contengono il codice di
conclusione.
Volendo entrare nel dettaglio, l’esempio di figura 352.7 si compone di: ‘Start B’, 35, 73,
65, 79, codice_di_controllo , ‘Stop’; ovvero, nel secondo caso, ‘Start C’, 35, 73, 65, 79,
codice_di_controllo , ‘Stop’.
Quando si vuole cambiare l’insieme di caratteri, si inserisce un simbolo ‘Code A’, ‘Code B’ o
‘Code C’, per introdurre l’insieme a cui si vuole fare riferimento da quel punto in poi.
Il codice di controllo finale si calcola sommando il valore corrispondente alla dichiarazione iniziale dell’insieme di caratteri alla somma dei valori successivi, moltiplicati per la loro posizione.
Codici a barre
3976
La somma complessiva va divisa per 103 e il resto che si ottiene è il codice di controllo finale. Si
osservi l’esempio:
Peso
Valore
Peso*Valore
Start B
1
104
104
C
1
35
35
i
2
73
146
a
3
65
195
o
4
79
316
Stop
Pertanto:
104 + 35 + 146 + 195 + 316 = 796
796 / 103 = 7 con resto di 75. Il codice di controllo è il simbolo corrispondente al valore 75.
Usando l’insieme di caratteri C la cosa cambia, perché il simbolo iniziale ha il valore 105, per
cui il codice di controllo finale è 76:
Peso
Valore
Peso*Valore
Start C
1
105
105
35
1
35
35
73
2
73
146
65
3
65
195
79
4
79
316
Stop
Dalla simbologia Code 128 derivano diverse applicazioni speciali che si distinguono per avere una struttura particolare. Esiste anche una variante che consente la rappresentazione di più
caratteri rispetto all’ASCII standard.
352.5.1 UCC/EAN 128
La simbologia UCC/EAN 128 è un’applicazione di Code 128, in cui si inizia dichiarando
l’insieme di caratteri e si inserisce subito dopo il simbolo ‘FNC 1’ (Function code one).2
Dopo il simbolo ‘FNC 1’ viene indicato un codice che indica il tipo di applicazione. Si fa riferimento a questo con la sigla AI (Application identifier). L’informazione in questione viene
rappresentata per la lettura umana tra parentesi tonde, proprio per facilitare l’interpretazione, a
sottolineare il fatto che si tratta di un prefisso. Naturalmente, l’informazione può essere anche
più complessa e altre parti dei dati successivi possono essere separate ed evidenziate nello stesso
modo o in modi differenti.
352.6 ITF, ovvero i25
La simbologia ITF, o i25, nota come Interleaved two of five, ovvero «interfogliata due su cinque»,
consente la rappresentazione di soli valori numerici, di lunghezza indefinita, purché in numero di
cifre pari. La simbologia prevede una cifra di controllo finale, opzionale.
La simbologia si compone di due tipi di barre e due tipi di spazi. Ogni simbolo si rappresenta
con cinque barre e cinque spazi, dove due barre su cinque e due spazi su cinque sono più larghi.
La simbologia è detta «interfogliata», perché una cifra è codificata nelle barre e la successiva
lo è negli spazi che separano gli elementi del carattere precedente. Prima dei dati è previsto un
simbolo iniziale, composto da una barra sottile, uno spazio breve, una barra sottile e un altro
spazio breve; alla fine c’è un simbolo finale, composto da una barra larga, uno spazio sottile e
una barra sottile.
2
L’uso comune è dell’insieme di caratteri C, ma ciò non è imposto dallo standard.
Codici a barre
3977
Figura 352.8. Esempio di codice a barre con simbologia interfogliata due su cinque.
352.7 Sistemi bidimensionali
Il codice a barre comune è a una sola dimensione, nel senso che contiene una sola riga di informazioni, eventualmente anche molto breve. Semplificando le cose, si può dire che quando si
sovrappongono più righe in un codice a barre, questo diventa a due dimensioni.
Un sistema di codice a barre a due dimensioni, con lo scopo di memorizzare dati, deve essere
organizzato in modo da permettere al lettore meccanico di riconoscere e seguire le righe; inoltre
deve essere previsto un sistema di informazioni ridondanti, anche molto complesso, in modo da
garantire la lettura in presenza di errori.
Lo standard più comune per i codici a barre a due dimensioni è il PDF417, che comunque qui
non viene descritto.
352.8 Riferimenti
• EAN international
<http://www.ean-int.org/>
• The EAN.UCC system
<http://www.ean-int.org/barcodes.html>
• Tino Hempel, Die Europäische Artikelnummer (EAN)
<http://members.aol.com/hempeltino/info/mathe/ean/ean.pdf>
• Barcoding for Beginners & Bar Code FAQ
<http://www.idautomation.com/barcoding4beginners.html>
• Code 39 Barcode FAQ and Tutorial
<http://www.idautomation.com/code39faq.html>
• Code 128 / USS Code-128 Barcode FAQ & Tutorial
<http://www.idautomation.com/code128faq.html>
• PDF417 Barcode FAQ
<http://www.idautomation.com/pdf417faq.html>
• UPC / EAN Barcode Font Data Sheet
<http://www.bizfonts.com/upc-ean/faq.htm>
• PDF417
<http://www.pdf417.com/>
Codici a barre
3978
• Uniform Code Council, UPC symbol specification manual, 1986
<http://www.uc-council.org/reflib/01302/d36-t.htm>
• Uniform Code Council, UPC symbol specification manual, Specification for The EAN Code
<http://www.uc-council.org/reflib/01302/d36-g.htm>
• Uniform Code Council, UCC/EAN-128 application identifier standard, 1995
<http://www.uc-council.org/reflib/00403/d30-t.htm>
• Uniform Code Council, UPC film master verification manual, 1996
<http://www.uc-council.org/reflib/01403/d35-t.htm>
• Russ Adams, Barcode 1
<http://www.barcode-1.com/>
• International ISBN Agency: Coordinator of the International Standard Book Number
system
<http://www.isbn.spk-berlin.de/>
• International ISBN Agency, The ISBN Users’ Manual
<http://www.isbn.org/standards/home/isbn/International/ISBNmanual.asp>
• AIE - Agenzia ISBN
<http://www.aie.it/ISBN/intro.asp>
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
353
Barcode
Barcode 1 è una libreria e anche un programma molto semplice per la realizzazione di codici
a barre standard a una sola dimensione. Il codice a barre viene realizzato in forma di file PostScript, che successivamente può essere utilizzato direttamente o convertito in altri formati grafici,
attraverso programmi standard.
353.1 Utilizzo del programma
Barcode, come programma, si compone in pratica dell’eseguibile ‘barcode’. Questo genera un
file PostScript che normalmente viene emesso attraverso lo standard output.
barcode
[opzioni]
Teoricamente si può usare Barcode anche senza l’indicazione di alcun argomento, per ottenere
la conversione automatica di quanto inserito attraverso lo standard input, scegliendo la simbologia in modo automatico. Tuttavia, in genere è opportuno accertarsi di selezionare la simbologia
attraverso l’opzione ‘-e’.
Le opzioni che vengono mostrate qui sono poche; in particolare mancano quelle che servono a
definire la stampa di codici a barre in modo organizzato sul foglio, allo scopo di centrare delle
etichette adesive. Per approfondire basta leggere la documentazione originale: barcode.info.
Alcune opzioni
-e simbologia
Consente di specificare la simbologia dei codici a barre che si vogliono realizzare. Sono
disponibili diverse parole chiave da usare come argomento dell’opzione, secondo la tabella
353.1.
-i file
Stabilisce il nome di un file contenente un elenco di codici da trasformare in codici a barre.
Se manca questa indicazione e se manca anche l’opzione ‘-b’, viene letto lo standard input.
La lettera dell’opzione richiama mnemonicamente la parola «input».
-b stringa
Consente di indicare una stringa da convertire in un codice a barre singolo. La stringa deve
essere compatibile con i tipi di dati che possono essere rappresentati con la simbologia
prescelta. La lettera dell’opzione richiama mnemonicamente la parola barcode, ovvero il
codice a barre che si vuole ottenere dalla stringa.
-E
Genera un file PostScript incapsulato (EPS).
Esempi
$ barcode -E -e i25 -b "12345678" > prova.ps
Converte il numero 12345678 in un codice a barre secondo la simbologia interfogliata sue
su cinque, generando il file ‘prova.ps’, di tipo EPS.
$ barcode -E -e i25 -b "12345678" -o prova.ps
Esattamente come nell’esempio precedente.
1
Barcode GNU GPL
3979
Barcode
3980
$ barcode -E -e isbn -b "88-386-4177-3" -o prova.ps
Come nell’esempio precedente, usando la simbologia EAN-13 per rappresentare un codice
ISBN, come indicato con l’opzione ‘-b’.
353.2 Codifica
Generalmente, Barcode viene utilizzato indicando il tipo di simbologia, attraverso una parola
chiave secondo l’elenco della tabella 353.1. In generale, si tratta di nomi che fanno riferimento
al tipo di codice a barre; in alcuni casi, il nome indica anche altre caratteristiche. Per esempio,
la parola chiave ‘code128b’ indica la simbologia Code 128, nella quale si utilizza l’insieme di
caratteri B; inoltre, la parola chiave ‘isbn’ fa riferimento al codice ISBN, che viene rappresentato
correttamente secondo la simbologia EAN-13.
Tabella 353.1. Simbologie disponibili con Barcode.
Simbologia
UPC-A
UPC-E
UPC-A o UPC-E automaticamente
EAN-8
EAN-13
EAN-8 o EAN-13 automaticamente
Code 39
Code 128 insieme di caratteri B
Code 128 insieme di caratteri C
Code 128 insieme di caratteri A, B o C, automaticamente
Code 128 libero
interfogliata due su cinque
Codabar
Plessey
ISBN attraverso EAN-13
Parola chiave
upc-a
upc-e
upc
ean8, ean-8
ean13, ean-13
ean
code39, 39
code128b, 128b
code128c, 128c
code128, 128
128raw
i25, interleaved 2 of 5
cdr, codabar
pls, plessey
isbn
Nel caso dell’uso della simbologia Code 128, si pone il problema di rappresentare i codici da
<NUL> a <US>, il codice <DEL> e le funzioni speciali previste dalla simbologia. Usando l’eseguibile ‘barcode’ diventa difficile indicare questi simboli; con la libreria non ci sono problemi
a indicare i codici ASCII da <SOH> a <US> e il codice <DEL>, mentre negli altri casi viene fatta
una trasformazione, come rappresentato nella tabella 353.2.
Tabella 353.2. Rappresentazione dei caratteri speciali per la simbologia Code 128,
quando si usa la libreria Barcode.
Codice o simbolo
<NUL>
FNC 1
FNC 2
FNC 3
FNC 4
Ottale
2008
3018
3028
3038
3048
Decimale
128
193
194
195
196
Esadecimale
8016
C116
C216
C316
C416
Sempre a proposito della simbologia Code 128, è possibile utilizzando la parola chiave ‘128raw’
per indicare un codice attraverso una stringa espressa nella forma:
n_1 n_2 ... n_n
In pratica, si indicano una serie di numeri separati tra loro da uno spazio. I numeri in questione
Barcode
3981
rappresentano il valore indicato nelle tabelle 352.11 e 352.12; inoltre occorre tenere in considerazione che va fornito anche il valore iniziale, con il quale si definisce solitamente l’insieme di
caratteri A, B o C, mentre il codice di controllo finale e lo stop sono aggiunti automaticamente.
Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- daniele @ swlibero.org
Capitolo
354
Trasformazione in lettere
Nell’ambito della realizzazione di applicativi gestionali, capitano frequentemente problemi di
conversione di numeri interi in una qualche forma alfabetica. In questo capitolo vengono mostrati
degli algoritmi molto semplici per risolvere questo tipo di problemi.
354.1 Da numero a sequenza alfabetica pura
Esiste un tipo di numerazione in cui si utilizzano solo le lettere dell’alfabeto, dalla «a» alla «z»,
senza accenti o altri simboli speciali, senza distinguere tra maiuscole e minuscole. In generale,
i simboli da «a» a «z» consentono di rappresentare valori da 1 a 26, dove lo zero è escluso.
Per rappresentare valori superiori, si possono accoppiare più lettere, ma il calcolo non è banale,
proprio perché manca lo zero.
Attraverso la pseudocodifica introdotta nel capitolo 282, si può descrivere una funzione che calcoli la stringa corrispondente a un numero intero positivo, maggiore di zero. Per prima cosa,
occorre definire una sotto funzione che sia in grado di trasformare un numero intero, compreso
tra 1 e 26 nella lettera alfabetica corrispondente; ciò si ottiene abbastanza facilmente, attraverso
la verifica di più condizioni in cascata. Il vero problema, purtroppo, sta nel costruire una stringa
composta da più lettere, quando si vuole rappresentare un valore superiore a 26. Non essendoci
lo zero, diventa difficile fare i calcoli. Se si parte dal presupposto che il numero da convertire
non possa essere superiore a 702, si sa con certezza che servono al massimo due lettere alfabetiche (perché la stringa «ZZ» corrisponderebbe proprio al numero 702); in tal caso, è sufficiente
dividere il numero per 26, dove la parte intera rappresenta la prima lettera, mentre il resto rappresenta la seconda. Tuttavia, se la divisione non dà resto, la stringa corretta è quella precedente.
Per esempio, il numero 53 corrisponde alla stringa «BA», perché 53/26 = 2 con un resto di 1.
Nello stesso modo, però, 52 si traduce nella stringa «AZ», perché 53/26 = 2, ma non c’è resto,
pertanto, «B » diventa «AZ».
La pseudocodifica seguente riepiloga il concetto in modo semplificato, dove, a seconda delle
esigenze, la conversione è sempre limitata a un valore massimo. Le omissioni sono parti di codice
facilmente intuibili.
INTEGER_TO_ALPHABET (N)
ALPHABET_DIGIT (DIGIT)
IF DIGIT = 0
THEN
RETURN ""
ELSE IF DIGIT = 1
THEN
RETURN "A"
ELSE IF DIGIT = 2
THEN
RETURN "B"
...
...
ELSE IF DIGIT = 26
THEN
RETURN "Z"
ELSE
RETURN "##ERROR##"
FI
END ALPHABET_DIGIT
IF N <= 0
THEN
RETURN "##ERROR##";
3982
Trasformazione in lettere
3983
ELSE IF N <= 26
THEN
RETURN ALPHABET_DIGIT (N)
ELSE IF N <= 52
THEN
N := N - 52
RETURN "A" ALPHABET_DIGIT (N)
ELSE IF N <= 78
THEN
N := N - 78
RETURN "B" ALPHABET_DIGIT (N)
...
...
ELSE IF N <= 702
THEN
N := N - 702
RETURN "Z" ALPHABET_DIGIT (N)
ELSE IF N <= 728
THEN
N := N - 728
RETURN "AA" ALPHABET_DIGIT (N)
ELSE IF N <= 754
THEN
N := N - 754
RETURN "AB" ALPHABET_DIGIT (N)
...
...
ELSE
RETURN "##ERROR##"
END IF
END INTEGER_TO_ALPHABET
354.2 Da numero a numero romano
La conversione di un numero intero positivo in una stringa che rappresenta un numero romano,
ha un discreto livello di difficoltà, perché la numerazione romana non prevede lo zero, perché
la tecnica prevede la somma e la sottrazione di simboli (a seconda della posizione) e poi perché
diventa difficile indicare valori multipli delle migliaia.
Per prima cosa è necessario conoscere il valore associato ai simboli elementari:
Simbolo
I
V
X
L
C
D
M
Valore corrispondente
1
5
10
50
100
500
1000
Un simbolo posto alla destra di un altro simbolo con un valore maggiore o uguale di questo, viene
sommato; al contrario, un simbolo posto alla sinistra di un altro simbolo con un valore maggiore
o uguale di questo, viene sottratto. Per esempio, «VI» equivale a 5+1, mentre «IV» equivale a
5-1. Esistono comunque anche altri vincoli, per evitare di creare numeri difficili da interpretare
a causa di una complessità di calcolo eccessiva.
Per risolvere il problema con un algoritmo relativamente semplice, si può scomporre il valore di partenza in fasce: unità, decine, centinaia e migliaia (la conversione di valori superiori
genererebbe soltanto una serie lunghissima di «M» che risulta poi troppo difficile da leggere).
Trasformazione in lettere
3984
INTEGER_TO_ROMAN (N)
LOCAL
LOCAL
LOCAL
LOCAL
DIGIT_1
DIGIT_2
DIGIT_3
DIGIT_4
DIGIT_1
DIGIT_2
DIGIT_3
DIGIT_4
:=
:=
:=
:=
INTEGER
INTEGER
INTEGER
INTEGER
0
0
0
0
DIGIT_1_TO_ROMAN (DIGIT)
IF DIGIT = 0
THEN
RETURN ""
ELSE IF DIGIT = 1
THEN
RETURN "I"
ELSE IF DIGIT = 2
THEN
RETURN "II"
ELSE IF DIGIT = 3
THEN
RETURN "III"
ELSE IF DIGIT = 4
THEN
RETURN "IV"
ELSE IF DIGIT = 5
THEN
RETURN "V"
ELSE IF DIGIT = 6
THEN
RETURN "VI"
ELSE IF DIGIT = 7
THEN
RETURN "VII"
ELSE IF DIGIT = 8
THEN
RETURN "VIII"
ELSE IF DIGIT = 9
THEN
RETURN "IX"
END IF
END DIGIT_1_TO_ROMAN
DIGIT_2_TO_ROMAN (DIGIT)
IF DIGIT = 0
THEN
RETURN ""
ELSE IF DIGIT = 1
THEN
RETURN "X"
ELSE IF DIGIT = 2
THEN
RETURN "XX"
ELSE IF DIGIT = 3
THEN
RETURN "XXX"
ELSE IF DIGIT = 4
THEN
RETURN "XL"
ELSE IF DIGIT = 5
THEN
RETURN "L"
ELSE IF DIGIT = 6