lunedì 28 maggio 2007

Un server di cd e dvd

Un cliente dell'azienda per cui lavoro utilizzava un CD-Tower, uno di quegli apparecchi in cui sono impilati uno sopra l'altro numerosi lettori cd/dvd, nel caso specifico erano 8, e che servono a mettere in rete cd e dvd (in questo caso banche dati) a disposizione degli utenti, i quali lavorano tutti su postazioni windows. L'apparecchio inoltre era dotato di un disco da 30Gb, per archiviare le immagini dei cd.
Un bel giorno ha smesso di funzionare, nel senso che andava in crash dopo pochi minuti dall'accensione. Ho tentato (non che ci credessi molto) un aggiornamento firmware ma niente da fare. Una rapida ricerca online ha rivelato come il modello in questione fosse "discontinued" già da tempo e come nessuno fornisse più assistenza. Apparecchi nuovi con le stesse funzionalità hanno dei costi superiori ai 2000€, secondo me decisamente troppo per le funzioni che servivano al cliente.
Ho quindi suggerito di rimpiazzare l'apparecchio con un normalissimo pc, sul quale avrei installato un linux, e col quale avrei messo a disposizione degli utenti le immagini di cd e dvd.
Mi hanno messo a disposizione un buon pc desktop, un P4 a 3 Ghz, con 1Gb di ram, un disco SATA da 75Gb e, ovviamente, un lettore dvd. In realtà basta (e avanza) molto meno, ma per una volta che non si è andato al risparmio non mi sono certo lamentato.


Ho installato una Debian Etch ridotta all'osso, tanto per i miei scopi sarebbe servito solo Samba.
Una volta installato il sistema operativo e configurata la rete questi sono i passaggi che ho seguito per configurare e far funzionare il cd server:

Creare una directory dove salvare le immagini dei cd/dvd:

mkdir /home/cd-iso

Creare l'immagine del cd:

cat /dev/hda > /home/cd-iso/immagine1.iso

dove /dev/hda è il lettore cd. Il comando è lo stesso sia per i cd che per i dvd.

Creare un mount point per l'immagine:

mkdir /mnt/immagine1

Per montare l'immagine "una tantum" e verificare che sia tutto a posto si può usare il comando

mount -t iso9660 /home/cd-iso/immagine1.iso /mnt/immagine1 -o loop

e per smontarla:

umount /mnt/immagine1

Per essere invece sicuri che l'immagine venga montata ad ogni riavvio della macchina occorre editare il file /etc/fstab e aggiungere la seguente riga:

/home/cd-iso/immagine1.iso /mnt/immagine1 iso9660 loop 0 0

A questo punto per montarla senza dover riavviare e per verificare la correttezza della riga in fstab basta il comando

mount -a

Il comando mount senza parametri mostrerà tutte le partizioni montate sul sistema.

In configurazione di default Debian permette l'utilizzo di 8 unità di loop (numerate da 0 a 7). Per aumentarne il numero e quindi poter montare più immagini di cd o dvd è sufficiente creare il file /etc/modprobe.d/loop contenente la seguente stringa:

options loop max_loop=64

Successivamente si può semplicemente riavviare il sistema oppure, se non si vuole o non si può riavviare, si smontano tutte le partizioni di loop montate, si da il comando modprobe -r loop per scaricare il modulo loop dal kernel, e lo si ricarica con modprobe loop. Fatto questo si possono rimontare tutte le immagini con mount -a.

Su altri sistemi la procedura può essere leggermente diversa, può essere necessario ad esempio inserire la stringa options loop max_loop=64 nel file /etc/modules.conf, oppure, se il modulo loop è compilato statico nel kernel, passare al boot l'opzione max_loop=64 (usando la riga append="" in lilo o inserendolo alla fine della riga kernel in grub).

Una volta verificato che l'immagine è stata creata e montata senza errori si può passare alla configurazione di samba per mettere l'immagine in rete. Nel caso più semplice possibile i cd/dvd sono resi disponibili a tutti gli utenti, senza restrizioni di sorta e senza bisogno di autenticazione, la configurazione di samba è quindi estremamente semplice (non è comunque tempo sprecato guardarsi almeno le nozioni di base su come funziona samba).

Una volta installato samba ( apt-get install samba smbclient) il file di configurazione /etc/samba/smb.conf può essere scritto in questo modo:


[global]
workgroup = WORKGROUP
server string = %h server
security = SHARE
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
load printers = No


[immagine1]
comment = Immagine 1
path = /mnt/immagine1
guest ok = Yes


Al posto di "WORKGROUP" va sostituito il nome del dominio o del gruppo di lavoro configurato nella rete, ma non è in alcun modo necessario allacciare la macchina al dominio, perchè si è deciso a priori che le risorse messe in rete non sono soggette a restrizioni.
Se invece fosse necessario implementare restrizioni e/o controlli sugli accessi nulla vieta di allacciare la macchina ad un Dominio o a un Active Directory, ma questo è un passaggio successivo.

A questo punto occorre che gli utenti montino in locale il disco di rete appena creato assegnandogli una lettera di unità. Questo si può fare agendo individualmente su ogni pc ma è scomodo, porta via un sacco di tempo se le postazioni sono numerose (nel mio caso erano una trentina) e porta in breve ad un disordine che complica non poco la vita all'amministratore. Molto meglio, se possibile, agire a livello di logon degli utenti sul controller di dominio inserendo negli script opportuni una riga del tipo:

net use z: \\[indirizzo_ip o nome macchina]\immagine1

In questo modo tutto resta ordinato e facilmente gestibile, soprattutto quando i cd/dvd condivisi cominciano ad essere in buon numero.
Per aggiungere nuovi cd/dvd al server è sufficiente ripetere tutti i passi dall'inizio modificando opportunamente i nomi delle immagini e dei mount point e aggiungere nuovi shares simili a [immagine1] in /etc/samba/smb.conf. In tutto l'installazione della macchina e la configurazione di un paio di cd di prova in rete mi ha portato via circa un'ora e mezzo e posso assicurare che, una volta digerito il meccanismo, l'aggiunta di un nuovo cd al server è un operazione che si fa in pochi minuti.

Nessun commento:

Posta un commento