Capitolo 3 Creazione di un print server con Samba Un print server è un elemento preposto ad accogliere le richieste di stampa inoltrate dai client presenti in rete e di indirizzarle a una o più stampanti fisicamente collegate al sistema. Il print server permette in sostanza di condividere in LAN una stampante che originariamente è nata come unità locale da collegarsi a un singolo computer tramite la porta USB o parallela. Si tratta di una funzionalità utile e molto apprezzata dalle aziende, soprattutto quelle più piccole, dal momento che le stampanti dotate di porte di rete Ethernet hanno costi più alti. Fortunatamente è molto semplice ed economico realizzare un print server attraverso Linux e risolvere le necessità di condivisione. Nelle prossime pagine si vedrà come mettere in pratica questa soluzione. Il prerequisito è la disponibilità di un sistema Linux dotato di Samba e configurato in modalità workgroup o dominio. A tal proposito si daranno per messi in atto i concetti e le tecniche di cui si sono occupati i Capitoli 1 e 2. Le configurazioni presentate in quei capitoli saranno arricchite con i blocchi e le direttive necessarie per la gestione della stampa. C’è però un concetto da tenere bene in considerazione: Samba è preposto unicamente alla gestione della condivisione della stampante e della relativa coda di stampa in rete. Il pacchetto non ha la capacità di interagire direttamente con la stampante o di eseguire alcun tipo di elaborazione sui dati. Queste operazioni sono invece svolte da un componente software denominato “sistema di stampa”. Samba si appoggia completamente a questo servizio, inoltrandogli il flusso di dati ricevuti dai client presenti in rete. LinuxServer.indb 37 Sommario • La stampa su Unix • Configurazione della stampante con CUPS • Impostazione guidata di una stampante USB • Configurare una stampante parallela • Configurazione della stampante in SAMBA • Checklist 29-09-2010 12:30:43 38 Capitolo 3 Il sistema di stampa catturerà i dati e provvederà alla comunicazione con la stampante per realizzare la stampa fisica dei lavori. Il sistema di stampa è un aspetto cruciale e prima di eseguire qualunque configurazione su Samba è necessario dare uno sguardo a questo elemento. La stampa su Unix La stampa è una delle aree in cui Linux è stato storicamente considerato debole. Fino a qualche tempo fa si aveva infatti un supporto limitato, riservato a stampanti a modo testo o a costose unità dotate di una scheda interprete per il PostScript. Non si poteva in questo scenario pensare di recarsi in un centro commerciale e comprare una stampante scegliendola, come si fa abitualmente, in base alle proprie esigenze di velocità, risoluzione, qualità e costo. Nella maggior parte dei casi questa stampante non avrebbe funzionato su Linux. Per questo motivo la stampa di lavori complessi su Linux era qualcosa di riservato alle organizzazioni più facoltose, in grado di permettersi stampanti laser di buon livello. Ora la situazione è ben diversa, grazie a un sistema di stampa Open Source denominato CUPS (Common UNIX Printing System), disponibile all’indirizzo www.cups.org (Figura 3.1). Si tratta di un progetto un tempo indipendente, diventato nel 2007 proprietà di Apple. L’acquisizione non ha alterato la diffusione e la disponibilità di CUPS e non si sono verificati gli scenari di chiusura che molti avevano prospettato. Figura 3.1 Sito ufficiale di CUPS. LinuxServer.indb 38 29-09-2010 12:30:44 Creazione di un print server con Samba 39 CUPS fornisce ai costruttori di hardware e agli sviluppatori un supporto completo per la stampa. Qualunque costruttore può in questo modo creare driver Linux per le proprie stampanti, mentre i programmatori possono agganciarsi a CUPS per trasportare su carta i documenti elaborati sugli applicativi. Linux pareggia così la distanza con Windows, sistema operativo storicamente dotato di un sistema di stampa di buona qualità e ben documentato. CUPS non è l’unico sistema di stampa disponibile per Linux, ma è quello che ha certamente maggiore successo e diffusione. Gran parte delle distribuzioni integra infatti questo meccanismo in maniera nativa. Il successo è dato in buona misura dalla scelta di aderire al protocollo IPP, uno standard promosso da IEEE (Institute of Electrical and Electronics Engineers) per la stampa aperta in ambienti di rete. Samba supporta pienamente il sistema di stampa CUPS e nelle prossime pagine si vedrà come usufruirne. Configurazione della stampante con CUPS Per cominciare occorre verificare che il sistema CUPS sia presente sul sistema Linux. Per farlo si può utilizzare il sistema di gestione dei pacchetti e verificare la presenza del pacchetto. Su un sistema basato su Red Hat, come per esempio CentOS o Fedora Core, si può usare la sintassi seguente: rpm -q cups Su Ubuntu si può invece usare questa sintassi: dpkg -l cups Se il pacchetto è disponibile, dovrebbe comparire una riga con un messaggio di conferma. Nel caso CUPS non sia presente si deve procedere alla sua installazione attraverso i meccanismi messi a disposizione dalla propria distribuzione. Si tratta comunque di una situazione poco comune nelle distribuzioni oggi disponibili: tutte le installazioni di default, anche quelle “light”, includono CUPS nell’elenco dei pacchetti base. Verificata la presenza del sistema di stampa si può procedere alla sua configurazione. Si prenderà come esempio il caso di un piccolo ufficio con alcuni impiegati che hanno tutti bisogno di stampare. I volumi di stampa in questo ufficio sono modesti e non sussiste l’esigenza di fornire una stampante a ogni utente. Si punterà piuttosto al risparmio condividendo una piccola unità. Per cominciare si deve lanciare il demone di CUPS: /etc/init.d/cups start La configurazione prosegue ora attraverso un pannello web per l’impostazione guidata della stampante. Nel browser del server Linux si deve digitare l’indirizzo web http://127.0.0.1:631. CUPS risponderà con il pannello principale di gestione e configurazione del sistema (Figura 3.2). LinuxServer.indb 39 29-09-2010 12:30:44 40 Capitolo 3 Figura 3.2 Pannello web per la configurazione di CUPS. Su alcune distribuzioni, per motivi di sicurezza è possibile lanciare il pannello di configurazione web solo dal server locale. Se si desidera accedere anche dalla LAN, si deve editare il file di configurazione principale /etc/cups/cupsd.conf, cercare la direttiva Listen e operare alcune modifiche. La direttiva indica a CUPS su quali schede di rete restare in ascolto e su quali porte. L’esempio seguente, default in molte distribuzioni, permette l’accesso al solo traffico proveniente dall’interfaccia di loopback locale, quindi solo dal server stesso: Listen 127.0.0.1:631 Se la scheda eth0 è configurata con l’indirizzo 192.168.100.20, si può permettere l’accesso a tutta la sottorete IP relativa indicando questa direttiva: Listen 192.168.100.20:631 Il comando segnala a CUPS di ascoltare le richieste sulla scheda di rete agganciata all’IP 192.168.100.20, sulla porta 631. Non è però sufficiente. Si deve anche indicare quali indirizzi della LAN sono abilitati all’accesso. Per farlo bisogna cercare la direttiva <location /> e abilitare per esempio la propria sottorete IP, come in questo esempio: <Location /> Order allow, deny Allow 192.168.0.0/24 </Location> LinuxServer.indb 40 29-09-2010 12:30:44 Creazione di un print server con Samba 41 È stata aggiunta la riga Allow 192.168.0.0/24 per abilitare l’accesso a tutta la sottorete 192.168.0.0. Si dovrà ripetere l’abilitazione anche per le sezioni /admin e /admin/conf. Ora qualunque computer della LAN può puntare con un browser l’IP del sistema Linux con CUPS e accedere alla porta 631. Si vedrà così in apertura la pagina mostrata in Figura 3.2. Impostazione guidata di una stampante USB La configurazione della stampante con il pannello web di CUPS è una procedura rapida. Inizialmente non dovrebbe essere presente alcuna configurazione. Bisogna quindi scegliere Aggiungi stampante (oppure Add Printer se si dispone di una versione inglese del sistema di stampa). Comparirà un pannello specifico per la configurazione. Nella riga Name si deve inserire il nome della coda di stampa. Deve essere una stringa corta e senza spazi, cancelletti o barre (/), per esempio Canon. In Location e in Description vanno inseriti testi liberi per indicare il luogo in cui si trova l’unità (per esempio Ufficio tecnico) e la descrizione estesa dell’unità (per esempio Canon Pixma iP6000D) (Figura 3.3). Inserite queste informazioni si fa clic su Continua (oppure Continue se si dispone di una versione inglese del sistema di stampa). Nella sezione seguente si deve indicare il device di sistema che rappresenta la stampante. Nel caso di connessione USB dovrebbe comparire una riga che identifica la stampante. Se si tratta di una stampante che usa un altro tipo di connessione, per esempio la porta Figura 3.3 Aggiunta di una nuova stampante nel sistema CUPS. LinuxServer.indb 41 29-09-2010 12:30:45 42 Capitolo 3 Figura 3.4 La stampante USB Canon si aggancia attraverso l’apposito device di sistema. parallela, si deve indicare la voce corretta, per esempio LPT #1. In questo esempio viene utilizzata una stampante Canon connessa tramite una porta USB (Figura 3.4). Il passo seguente richiede il modello della stampante. Bisogna scorrere la lista, selezionarlo e confermare la scelta. Difficilmente però la lista comprenderà tutti i modelli commercializzati dal produttore. In tal caso bisogna aggiungere nel sistema il driver specifico, se fornito dal produttore, oppure selezionare un modello compatibile. Le stampanti sono infatti realizzate per famiglie che condividono la stessa logica di stampa. Basta individuare il modello compatibile corretto tramite il sito del produttore o consultando i gruppi di discussione Linux. La stampante Canon Pixma iP6000D non è presente nell’elenco predefinito. L’unità è però compatibile con il driver per la BJC7100, a patto che si imposti in seguito la risoluzione a 1200x600 DPI. Si seleziona quindi la BJC7100 in questo passaggio (Figura 3.5) e si conferma la scelta. Potrebbe essere richiesto di indicare le credenziali di amministratore del sistema Linux. La coda sarà creata solo a seguito del corretto inserimento di queste informazioni. Altre stampanti potrebbero avere il driver già incluso in CUPS oppure avere driver scaricabili dal sito del produttore. La coda creata potrà essere usata da Samba, ma anche dagli applicativi presenti sul server Linux stesso. LinuxServer.indb 42 29-09-2010 12:30:45 Creazione di un print server con Samba 43 Figura 3.5 Selezione del modello di stampante. Configurare una stampante parallela Se si utilizza una vecchia stampante parallela, si deve percorrere la stessa procedura di configurazione esaminata in precedenza. Dopo aver indicato il nome della stampante, l’ubicazione e il commento, si deve specificare, al secondo passaggio, l’intenzione di usare il device parallelo (Figura 3.6) e poi confermare la scelta. Al passaggio seguente viene richiesta la marca della stampante. Si può anche evitare di selezionare il nome del produttore, ma scorrere l’elenco alla ricerca della modalità Raw (Figura 3.7). In questo modo si chiede al sistema di stampa di non compiere alcuna forma di elaborazione sul processo di stampa e di inoltrare tutto il flusso direttamente alla stampante. Saranno i driver presenti sulle singole macchine Windows a realizzare la conversione del lavoro in un flusso di dati compatibile con la stampante utilizzata. Si conferma la scelta facendo clic sul pulsante di avanzamento in fondo. Nel pannello seguente si deve scegliere il modello di stampante. Avendo scelto Raw si avrà un unico modello, ancora una volta di tipo Raw. Basta semplicemente confermare la scelta e fare clic su Aggiungi stampante (oppure Add Printer se si usa una versione inglese del pacchetto). Ora la stampante di tipo Raw è presente nel sistema ed è pronta per essere utilizzata da Samba. Se c’è bisogno di stampare da applicazioni che girano sulla macchina Linux locale è necessario configurare una seconda coda di stampa, ma questa volta nella sezione Marca è necessario specificare il produttore della stampante e in Modello il modello specifico o uno compatibile. LinuxServer.indb 43 29-09-2010 12:30:46 44 Capitolo 3 Figura 3.6 Selezione del device LPT per una stampante parallela. Figura 3.7 La modalità Raw è consigliabile per le stampanti laser collegate tramite la porta parallela. LinuxServer.indb 44 29-09-2010 12:30:46 Creazione di un print server con Samba 45 Ritoccare la configurazione di CUPS Completate le configurazioni guidate è importante eseguire alcune verifiche manuali sui file di configurazione, per essere sicuri che tutto sia impostato correttamente. Bisogna andare in /etc/cups e aprire il file mime.types. In fondo c’è un parametro denominato application/octet-stream: bisogna assicurarsi che non sia preceduto dal carattere # (commento). Questo impedirebbe la stampa in formato raw. Occorre poi aprire il file mime.convs e verificare nuovamente che non ci sia il commento per la riga in che inizia con application/octet-stream. Se sono state eseguite delle modifiche bisogna riavviare il sistema CUPS: /etc/init.d/cups restart Le impostazioni appena implementate permettono ai job in formato raw di essere gestiti correttamente da CUPS. Configurazione della stampante in SAMBA Ora è il momento di configurare Samba. Non si deve realizzare una nuova configurazione, ma bisogna piuttosto continuare da un’impostazione di workgroup o di dominio già funzionante. Nell’eventualità che questa operazione non sia stata eseguita, si devono prima di tutto seguire le indicazioni presenti nei Capitoli 1 o 2. Il file di configurazione di Samba per il dominio o il workgroup deve essere arricchito con alcuni parametri che indicano l’utilizzo del sistema CUPS per la stampa. Questo dettaglio va indicato nella sezione global tramite due direttive: printing = CUPS printcap = CUPS Ora bisogna creare una sezione denominata printers e specificare alcuni aspetti relativi alla stampa: Listato 3.1 [printers] comment = stampanti sul server path = /var/spool/samba printable = YES use client driver = YES Il nome della sezione, ovvero printers, è obbligatorio e indica a Samba che si stanno specificando informazioni relative alle stampanti da condividere. La riga comment contiene un’indicazione a testo libero. La direttiva path si riferisce al percorso sul file system del server Linux dove verrà eseguito lo spooling dei job di stampa. I dati in arrivo dai client e destinati alla stampa saranno salvati in questo punto e poi inoltrati alla stampante. L’operazione non è però necessariamente diretta. CUPS utilizza di default una propria area di spooling, generalmente /var/spool/cups. Ogni job LinuxServer.indb 45 29-09-2010 12:30:47 46 Capitolo 3 di stampa potrebbe quindi transitare in due directory di spooling prima di giungere alla stampante. La direttiva printable = YES permette ai client di scrivere sullo spooler. L’ultima direttiva, use client driver = YES, serve per informare i client Windows collegati al server Samba che dovranno usare i driver installati localmente per eseguire la stampa. Configurando in maniera avanzata CUPS è possibile installare i driver di stampa sul server Linux e fare in modo che questi siano prelevati automaticamente dal server. In tal caso la direttiva sarà use client driver = NO. Questa funzionalità può essere molto utile quando si hanno molti client che accedono alle stampanti condivise. Attraverso un’opportuna configurazione sul server si può evitare di configurare ogni singolo client. Per maggiori dettagli su come configurare CUPS e Samba per abilitare questa funzionalità si consulti la guida “The Official Samba 3.5.x HOWTO and Reference Guide”, sezione CUPS, disponibile online all’indirizzo http://samba.org/samba/docs/man/Samba-HOWTO-Collection/ CUPS-printing.html. A questo punto si può salvare il file di configurazione di Samba e riavviare il servizio. Samba caricherà automaticamente le stampanti precedentemente configurate e le farà comparire in Risorse di rete (Figura 3.8). Bisogna tenere ben presente che se si eseguono modifiche alle configurazioni delle stampanti tramite il pannello di amministrazione di CUPS bisogna riavviare il servizio Samba per usufruire delle nuove stampanti. Figura 3.8 Stampanti configurate con CUPS e visualizzate in Risorse di rete. Installazione dei driver sui client Windows Il lavoro sul versante server è concluso. Non resta che caricare i driver di stampa sui client Windows. LinuxServer.indb 46 29-09-2010 12:30:47 Creazione di un print server con Samba 47 Si deve andare in Pannello di controllo, selezionare l’icona Stampanti e fax e fare clic su Aggiungi stampante. Al primo passaggio bisogna specificare che si sta installando una stampante di rete (Figura 3.9). Figura 3.9 Al primo passaggio si deve indicare che la stampante si trova in rete. Ora occorre selezionare l’opzione Connetti alla stampante (Figura 3.10) e poi fare clic su Avanti. Comparirà l’elenco dei sistemi presenti in rete. Si deve scegliere il print server Samba, in questo caso server1, selezionare la stampante impostata e poi fare clic su Avanti (Figura 3.11). A questo punto occorre selezionare il driver dall’elenco presente in Windows (Figura 3.12) oppure indicare il percorso del driver scaricato dal sito del produttore. Per concludere la fase di installazione della stampante, bisogna specificare se l’unità è predefinita o meno. Eseguita la scelta si fa clic su Avanti. Ora si può cominciare a stampare sul server di stampa. Da un punto di vista pratico non sussiste alcuna differenza tra una stampante locale e la stampante di rete appena realizzata. Non bisogna quindi cambiare alcun aspetto del proprio modo di lavorare. Di seguito è riportata la configurazione completa di Samba che è stata realizzata in questo capitolo usando un modello di rete a dominio. Listato 3.2 #Configurazione della sezione di stampa per un dominio [global] workgroup = INCIPIT LinuxServer.indb 47 29-09-2010 12:30:47 48 Capitolo 3 Figura 3.10 Al passaggio seguente si deve indicare che si desidera cercare la stampante in rete. Figura 3.11 Selezione del print server e dell’unità di stampa. netbios name = SERVER1 server string = PDC Linux security = USER smb passwd file = /etc/samba/smbpasswd encrypt passwords = YES LinuxServer.indb 48 29-09-2010 12:30:47 Creazione di un print server con Samba 49 Figura 3.12 Scelta del driver di stampa in Windows. log file = /var/log/samba/%m.log max log size = 100 log level = 1 # impostazione del server come domain master browser os level = 255 preferred master = YES local master = YES domain master = YES # abilitazione dei logon W95/W98 domain logons = YES # attivazione supporto WINS wins support = YES # impostazione homedir logon home = \\server1\homedir logon drive = U: # impostazione profili mobili logon path = \\server1\profili\%u # impostazione script di logon logon script = logon.bat #logon script = %u.bat # impostazione stampa printing = CUPS printcap = CUPS LinuxServer.indb 49 29-09-2010 12:30:47 50 Capitolo 3 [netlogon] path = /usr/local/samba/netlogon read only = YES write list = root [profili] path = /usr/local/samba/profili read only = NO writable = YES browsable = NO create mask = 0600 directory mask = 0700 [homedir] path = /home/%u read only = NO writable = YES browsable = NO create mask = 0600 directory mask = 0700 hide dot files = YES [comune] comment = cartella comune path =/home/comune public = YES writable = YES [gestionale] comment = area supporto software gestionale path =/home/gestionale public = YES writable = YES [software] comment = file di utilità path =/home/software public = YES writable = NO [printers] comment = stampanti sul server path = /var/spool/samba printable = YES use client driver = YES Checklist 1. Utilizzare una configurazione Samba precedentemente creata per operare su un workgroup oppure su un dominio. 2. Verificare che il pacchetto CUPS sia installato sul sistema. 3. Controllare gli indirizzi IP abilitati alla configurazione di CUPS via browser. 4. Collegarsi al pannello web di CUPS, specificando l’indirizzo locale e la porta 631. LinuxServer.indb 50 29-09-2010 12:30:47 Creazione di un print server con Samba 51 5. Configurare su CUPS una nuova stampante, facendo attenzione a impostare la modalità di elaborazione RAW. 6. Aprire il file /etc/cups/mime.types ed eliminare, se presente, il simbolo di commento dalla riga che inizia con #application/octet in fondo al file. 7. Aprire il file /etc/cups/mime.convs ed eliminare, se presente, il simbolo di commento dalla riga che inizia con #application/octet. 8. Aprire il file di configurazione di Samba e nella sezione global, inserire le direttive printing = CUPS e printcap = CUPS. 9. Creare una sezione printers nel file di configurazione di Samba. 10. Inserire la direttiva comment. 11. Indicare nella direttiva path il percorso della directory di spooling. Questa deve ovviamente essere una directory esistente e accessibile. 12. Inserire la direttiva printable = YES per poter effettuare le operazioni di spooling. 13. Inserire la direttiva use client driver = YES per usare i driver di stampa locali sui sistemi Windows NT/2000/XP/Vista/7. 14. Verificare la correttezza della configurazione di Samba utilizzando il comando testparm. 15. Riavviare i demoni di Samba. 16. Configurare i client. LinuxServer.indb 51 29-09-2010 12:30:48