SMB HOWTO
David Wood,
[email protected]
v1.3, 20 aprile 2000
Questo � lo SMB HOWTO. Il documento descrive come usare il protocollo
Session Message Block (SMB), chiamato anche protocollo NetBIOS o Lan�
Manager, con Linux. Traduzione italiana e manutenzione: Andrea
Girotto (
[email protected])
1. Licenza
Copyright (c) 2000 David Wood.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts and with no Back-Cover
Texts. A copy of the license is available at
http://www.gnu.org/copyleft/fdl.html
<
http://www.gnu.org/copyleft/fdl.html>.
L'unica licenza valida � l'originale in lingua inglese. Di
seguito trovate una traduzione abbastanza fedele che per�
non ha alcun valore.
Copyright (C) 2000 David Wood.
� concessa la copia, la distribuzione e/o modifica di questo documento
nei termini di GNU Free Documentation License, Versione 1.1 oppure
ogni successiva versione pubblicata da Free Software Foundation, senza
variazione delle sezioni, senza testi di Front-Cover o di Back-Cover.
Una copia della licenza � disponibile presso
http://www.gnu.org/copyleft/fdl.html
<
http://www.gnu.org/copyleft/fdl.html>.
2. Introduzione
Questo � lo SMB HOWTO. Il documento descrive come usare il protocollo
Session Message Block (SMB), chiamato anche protocollo NetBIOS o
LanManager, con Linux usando Samba. Nonostante tale documento sia
basato su Linux, � possibile eseguire Samba sulla maggior parte dei
sistemi operativi Unix e simili.
Questo documento � gestito da David Wood (
[email protected]).
Aggiunte, modifiche o correzioni per la versione successiva di questo
documento, possono essere spedite (in inglese) all'indirizzo indicato.
Prima di richiedere aiuto, si prega di consultare il sito di Samba
localizzato presso:
http://www.samba.org/ <
http://www.samba.org/>, che
dispone di molta pi� documentazione. � presente una quantit� enorme
di informazioni. Si pu� anche cercare di leggere il newsgroup
comp.protocols.smb.
Il protocollo SMB � usato da Microsoft Windows 3.11, NT e 95/98 per
condividere dischi e stampanti. Usando la suite di programmi Samba di
Andrew Tridgell (
[email protected]), macchine Unix (compreso
Linux) possono condividere dischi e stampanti con host Windows. Paal-
Kr. Engstad (
[email protected]) e Volker Lendecke
(
[email protected]) hanno sviluppato lo strumento smbfs che
consente a macchine Unix di montare condivisioni SMB da macchine
Windows oppure host Samba.
Il pacchetto Samba sostanzialmente consente di:
1. Condividere un disco Linux con macchine Windows.
2. Condividere un disco Windows con macchine Linux.
3. Condividere una stampante Linux con macchine Windows.
4. Condividere una stampante Windows con macchine Linux.
Tutte queste possibilit� sono discusse in questo documento.
Attenzione: Le procedure, i programmi e gli script riportati, o si
sono dimostrati funzionanti per l'autore, o sono stati riportati
esserlo dalle persone che li hanno forniti; con configurazioni
differenti potrebbero non funzionare; se ci si trova in tale
situazione, � possibile spedire un email all'autore con i suggerimenti
per migliorare questo documento.
Si prega di porre attenzione al fatto che macchine Windows 3.x,
affinch� possano accedere a condivisioni SMB, devono avere uno stack
TCP/IP e le DLL Win32s. Entrambi questi pacchetti sono disponibili
presso il sito di Microsoft (
http://www.microsoft.com
<
http://www.microsoft.com>). Al momento in cui si scrive questa
versione dell'HOWTO, � riportato che Microsoft richiede la
sottoscrizione a Microsoft Software Developers Network (MSDN) al fine
di prelevare lo stack TCP/IP-32 per Windows 3.x dal loro sito. Dal
momento che tale software era distribuito gratuitamente, dovrebbero
essere diffuse diverse copie meno recenti probabilmente presso amici o
tramite gruppi di utenti.
3. Altre informazioni
Questo HOWTO spiega come configurare servizi minimi di file e di
stampa per SMB su una macchina Linux. Samba � un pacchetto piuttosto
completo e complesso. Non sar� fatto alcun tentativo di duplicare
tutta la documentazione Samba.
Per maggiori informazioni, consultare i seguenti documenti:
� La documentazione Samba, disponibile come parte del pacchetto. La
distribuzione � disponibile presso:
ftp://ftp.samba.org/
� Il Printing HOWTO di Linux (in versione italiana presso PLUTO).
� Protocol Standard For A NetBIOS Service On A TCP/UDP Transport.
RFC 1001
> RFC 1001 - Concepts and Methods.
RFC 1002
> RFC 1002 - Detailed Specifications.
4. Installazione
Per prima cosa, al fine di poter usare Samba sulle proprie macchine �
necessario utilizzare un singolo segmento LAN ethernet ed usare il
protocollo TCP/IP. Samba non funzioner� con altri protocolli di rete.
Generalmente � facile soddisfare questa richiesta, dal momento che
Linux e Windows 95/98/NT sono distribuiti con il TCP/IP. Tuttavia, se
si usa Windows 3.x � necessario aggiungere il supporto TCP/IP. Una
delle domande poste pi� di frequente � perch� Samba ``non funziona''
con sistemi Windows senza il protocollo TCP/IP.
Per installare TCP/IP con Windows 95/98, si deve selezionare Pannello
di controllo | Rete, aggiungere e configurare Microsoft TCP/IP. Con
Windows NT, si selezioni Pannello di Controllo | Rete | Protocolli.
Per prelevare l'ultima versione di Samba si deve selezionare il mirror
pi� vicino, dalla lista disponibile presso:
ftp://ftp.samba.org/
Nella maggior parte dei casi, le distribuzioni Linux dispongono gi�
dei pacchetti di una versione recente di Samba.
Il pacchetto Samba richiede due demoni. Tipicamente sono installati
in /usr/sbin ed eseguiti o in fase di avvio dagli script di
inizializzazione del sistema o da inetd. Script di esempio sono
elencati in ``Eseguire i demoni''.
______________________________________________________________________
smbd (Il demone SMB)
nmbd (Fornisce supporto di NetBIOS nameserver per i client)
______________________________________________________________________
Si noti che il servizio dei nomi fornito dal demone nmbd � differente
dal servizio fornito da Domain Name Service (DNS). Il servizio di
nomi NetBIOS usato da SMB � ``stile-Windows''. In altre parole, avere
un DNS attivo, non ha nulla a che vedere con la possibilit� di Samba
di risolvere i nomi dei computer.
Di solito (la posizione � opzionale) i seguenti programmi di Samba
sono installati in /usr/bin oppure /usr/local/samba/bin:
smbclient
Client SMB per macchine UNIX
smbprint
script per usare la stampante di un host SMB
smbprint.sysv
Come smbprint per macchine con UNIX SVR4
smbstatus
Elenca le connessioni SMB correnti per il computer locale
smbrun
Facilita esecuzioni di applicazioni su un host SMB
La distribuzione in formato binario per il supporto del file system
smbfs, � discussa successivamente in questo documento.
Inoltre, � incluso in questo HOWTO uno script chiamato ``print'', da
usare come interfaccia per smbprint.
Il pacchetto Samba � semplice da installare. Per prima cosa �
necessario recuperare il sorgente dal sito elencato precedentemente e
leggere il file README della distribuzione. C'� anche un file
chiamato docs/INSTALL.txt che fornisce istruzioni passo-a-passo.
Seguendo l'installazione, si pongono i demoni in /usr/sbin ed i
programmi in /usr/bin. Le pagine del manuale in /usr/local/man.
Compilando il pacchetto Samba, si specifica nel Makefile la locazione
del file di configurazione smb.conf, generalmente /etc, ma pu� essere
una qualsiasi. Per questo documento si suppone che tale file di
configurazione sia /etc/smb.conf; altri file di configurazione:
/var/log/samba-log.%m e lock directory /var/lock/samba.
Si installi il file di configurazione, smb.conf. Nella directory dove
si � compilato Samba � presente una sottodirectory examples/simple e
si legga il file README. Si copi il file smb.conf in /etc.
ATTENZIONE! Se si ha una distribuzione Linux con gi� Samba
installato, potrebbe gi� essere presente un file di configurazione in
/etc, sarebbe meglio iniziare con quello.
Se non si desidera avere il file di configurazione in /etc, pu� essere
messo in una qualsiasi posizione ed eventualmente collegato con un
link simbolico in /etc:
______________________________________________________________________
ln -s /percorso/di/smb.conf /etc/smb.conf
______________________________________________________________________
5. Eseguire i demoni
I due demoni SMB sono: /usr/sbin/smbd e /usr/sbin/nmbd. Nella maggior
parte delle distribuzioni, questi possono essere fatti partire,
interrompere o riavviare attraverso script di avvio come
/etc/rc.d/init.d/smb e collegati in modo simbolico agli appropriati
runlevel.
Nel caso si decida di non usare i script di avvio, � possibile
eseguire i demoni di Samba da inetd o come singoli processi. Samba
risponder� leggermente pi� velocemente come demone isolato rispetto a
quando eseguito tramite inetd.
In entrambi i casi, � necessario verificare che il file /etc/services
presenti linee simili a queste:
______________________________________________________________________
netbios-ns 137/tcp nbns
netbios-ns 137/udp nbns
netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
netbios-ssn 139/tcp nbssn
______________________________________________________________________
Si faccia attenzione che non siano commentate. A seconda della
distribuzione usata, potrebbe anche essere necessario aggiungerle.
Samba non sar� in grado di collegarsi alle porte appropriate a meno
che il file /etc/services non presenti tali linee.
Per eseguire i demoni da inetd, si deve aggiungere nel file di
configurazione, /etc/inetd.conf:
______________________________________________________________________
# Servizi NetBIOS SAMBA (per condivisione di file e stampanti con PC)
netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd
netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd
______________________________________________________________________
Quindi far ripartire il demone di inetd con il comando:
______________________________________________________________________
kill -HUP `cat /var/run/inetd.pid`
______________________________________________________________________
Per eseguire i demoni dagli script di inizializzazione del sistema, si
possono mettere le istruzioni seguenti in un file chiamato
/etc/rc.d/init.d/smb (nella maggior parte delle distribuzioni) e fare
collegamenti simbolici a file indicati nei commenti:
______________________________________________________________________
#!/bin/sh
#
# /etc/rc.d/init.d/smb - inizia e termina i servizi SMB.
#
# file che seguono devono essere link simbolici a questo file:
# symlinks: /etc/rc.d/rc1.d/K35smb (termina i servizi SMB durante
# shutdown)
# /etc/rc.d/rc3.d/S91smb (inizia i servizi SMB in
# multiuser mode)
# /etc/rc.d/rc6.d/K35smb (Termina i servizi SMB prima
# di reboot)
#
# Sorgente per funzioni di libreria.
. /etc/rc.d/init.d/functions
# Sorgente per la configurazione di rete.
. /etc/sysconfig/network
# Verifica che la rete sia configurata.
[ ${NETWORKING} = "no" ] && exit 0
# Controlla il tipo di chiamata.
case "$1" in
start)
echo -n "Attivati servizi SMB: "
daemon smbd -D
daemon nmbd -D
echo
touch /var/lock/subsys/smb
;;
stop)
echo -n "Terminati servizi SMB: "
killproc smbd
killproc nmbd
rm -f /var/lock/subsys/smb
echo ""
;;
*)
echo "Uso: smb {start|stop}"
exit 1
esac
______________________________________________________________________
Se all'avvio di Samba si presenta un errore che segnala
l'impossibilit� da parte del demone a collegarsi alla porta 139,
allora probabilmente � presente in esecuzione un altro processo Samba
che non � stato ancora interrotto. Verificare la lista dei processi
(con 'ps auxww | grep mbd') per determinare se un altro servizio Samba
� in esecuzione.
6. Configurazione generale ( /etc/smb.conf ).
La configurazione di Samba su Linux (o su altre macchine UNIX) �
controllata da un file soltanto, /etc/smb.conf, che determina quali
risorse di sistema si desidera condividere con il mondo esterno e
quali restrizioni attivare.
Ai fini di introduzione, il primo file smb.conf mostrato, sar� il pi�
semplice possibile per concentrare l'attenzione su come condividere
dischi e stampanti Linux con macchine Windows. Nei paragrafi
successivi si introdurranno altri concetti.
Ciascuna sezione del file inizia con un'intestazione come [global],
[homes], [printers], ecc.
La sezione [global] imposta le variabili usate da Samba per definire
la condivisione di ogni altra risorsa.
La sezione [homes] consente ad un utente remoto accesso alla propria
(e solo a quella) home directory sulla macchina locale (Linux).
Quindi se un utente Windows cerca di connettersi a tale condivisione
da una macchina Windows, verr� collegato alla propria home directory.
Si noti che per poter accedere alla condivisione � necessario avere un
account sulla macchina Linux.
Il file di esempio smb.conf fornito, consente ad utenti remoti di
accedere alla propria home directory dalla macchina locale e di
scrivere in una directory temporanea. Affinch� un utente Windows veda
queste condivisioni, � necessario che la macchina Linux sia sulla rete
locale. Quindi l'utente semplicemente connette un disco di rete dal
File Manager di Windows oppure da Windows Explorer.
Nelle sezioni che seguono saranno fornite specificazioni aggiuntive
per la configurazione al fine di condividere maggiori risorse.
______________________________________________________________________
; /etc/smb.conf
;
; Dopo aver modificato questo file assicurarsi di far ripartire il
; server, ad esempio:
; /etc/rc.d/init.d/smb stop
; /etc/rc.d/init.d/smb start
[global]
; Attivare questa linea se si desidera un account generico
; guest account = nobody
log file = /var/log/samba-log.%m
lock directory = /var/lock/samba
share modes = yes
[homes]
comment = Directory Personali
browseable = no
read only = no
create mode = 0750
[tmp]
comment = Spazio per file temporanei.
path = /tmp
read only = no
public = yes
______________________________________________________________________
Avendo scritto un nuovo smb.conf, � utile verificare la correttezza.
� possibile usare l'utility `testparm' per controllare un file
smb.conf (pagina del manuale: testparm); se non viene riportato alcun
problema, smbd caricher� correttamente il file di configurazione.
Un aiuto prezioso: se il server Samba dispone di pi� di una
interfaccia ethernet, il demone smbd potrebbe collegarsi a quella
sbagliata. In tal caso, � possibile forzare il comportamento
desiderato, aggiungendo nella sezione [global] una linea simile a:
______________________________________________________________________
interfaces = 192.168.1.1/24
______________________________________________________________________
sostituendo al posto dell'indirizzo IP quello assegnato
all'interfaccia ethernet corretta. Il valore ``24'' � corretto per
una rete di classe C, ma dovrebbe essere ricalcolato nel caso di
sottoreti. Tale numero si riferisce alla maschera di rete. Numeri
per altre classi o reti sono disponibilie nell'IP-Masquerade mini-
HOWTO.
� disponibile anche un tool grafico per la configurazione di Samba:
GtkSamba. Si consulti
http://www.open-systems.com/gtksamba.html
<
http://www.open-systems.com/gtksamba.html>.
7. Condividere un disco Linux con macchine Windows
Come dimostrato nel precedente smb.conf, � alquanto semplice
condividere dischi Linux con utenti Windows. Come ogni altra cosa in
Samba, � possibile controllare con notevole precisione il
comportamento. Ecco alcuni esempi. Per condividere pubblicamente una
directory, si pu� creare una copia della sezione [tmp] aggiungendo al
smb.conf qualcosa come:
______________________________________________________________________
[public]
comment = Pubblicamente Accessibile
path = /home/public
public = yes
writable = yes
printable = yes
______________________________________________________________________
Le seguenti modifiche rendono la directory precedente pubblicamente
leggibile e scrivibile solo dalle persone del gruppo staff:
______________________________________________________________________
[public]
comment = Pubblicamente Accessibile
path = /home/public
public = yes
writable = yes
printable = no
write list = @staff
______________________________________________________________________
In passato era cos� semplice. Tuttavia, recentemente Microsoft ha reso
la vita leggermente pi� difficile per chi usa Samba. Windows 98,
Windows NT (service pack 3 e successivi) e le ultime versioni di
Windows 95, usano in modo predefinito password criptate. Samba invece
� impostato per password non criptate. Non � possibile consultare i
server in modo anonimo, quando sia client che server usino password in
codice, perch� non � possibile fare una connessione anonima.
� possibile verificare se � presente un disaccordo sul tipo di
password tra server e client, quando provando a connettersi ad una
condivisione si presenta un dialog box con un messaggio del tipo "Non
� possibile accedere a questo account da questa macchina".
� possibile configurare il server Samba per usare password criptate,
o, in alternativa, configurare i sistemi Windows per usare password in
chiaro.
Al fine di ottenere che Windows usi password in chiaro, usando
l'editor di registro (regedit):
Windows 95/98
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP
Windows NT
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters
Windows 2000
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkStation\Parameters
e si aggiunga un nuovo valore DWORD:
Value Name:
EnablePlainTextPassword
Data:
0x01
Una volta apportate queste modifiche, si faccia ripartire la macchina
Windows e si cerchi di mappare un drive di rete sul server Samba.
Dovrebbe funzionare, posto che il server Samba usi password in chiaro.
Per configurare Samba al fine di usare password criptate, si
aggiungano nella sezione [global] del file /etc/smb.conf le seguenti
linee:
______________________________________________________________________
encrypt passwords = yes
smb passwd file = /etc/smbpasswd
______________________________________________________________________
Prima di intraprendere una tale modifica si consiglia vivamente di
leggere i file ENCRYPTION.txt, Win95.txt e WinNT.txt della
documentazione Samba!
Se i client ed il server usano password criptate, non sar� possibile
elencare le condivisioni sul server, fino a che non ne sia stata fatta
una con appropriata autenticazione. Per avere la connessione
iniziale, o si digiti manualmente il nome della condivisione nel File
Manager di Windows, o nel dialog box di Explorer, nella forma connetta
al server con un username ed una password che siano validi per quella
macchina.
Se si sospetta che il servizio dei nomi NetBIOS non sia correttamente
configurato (magari perch� si ottiene un errore del tipo 'host not
found', quando si cerca di connettersi), si provi ad usare solo
l'indirizzo IP del server: '\\<indirizzi>\<nomecondivisione>'.
Per ottenere che i nomi dei file appaiano correttamente, potrebbe
anche essere necessario impostare alcune opzioni nelle appropriate
sezioni di condivisione. Quelle che si indicano funzionano con
Windows 95/98/NT ma probabilmente sar� necessario modificarle per i
client Windows 3.x:
______________________________________________________________________
; Mangle case = yes seems to give the correct filenames
; for Win95/98/NT.
mangle case = yes
; se samba debba essere sensibile a maiuscole/minuscole
case sensitive = no
; impostazione predefinita per i file creati
default case = lower
; preserva maiuscole/minuscole per tutti i nomi di file
preserve case = yes
; preserva la capitalizzazione per nomi di file dos (8.3)
short preserve case = no
______________________________________________________________________
Consultare la documentazione Samba o le pagine del manuale per altre
configurazioni particolari di condivisione.
8. Condividere un disco Windows con macchine Linux
Sistemi Linux (UNIX) possono anche sfogliare e montare condivisioni
SMB. Si noti che questo � possibile sia con server Windows che con
server Samba.
Con la distribuzione Samba, � incluso un programma client del
protocollo SMB per macchine UNIX. Dispone di un'interfaccia a linea
di comando simile ad ftp. Si pu� usare questo programma per
trasferire file tra un server Windows ed un client Linux.
La maggior parte delle distribuzioni Linux ora include l'utile
pacchetto smbfs, che consente di montare e smontare condivisioni SMB.
Per elencare le condivisioni disponibili su un dato host, �
sufficiente eseguire:
______________________________________________________________________
/usr/sbin/smbclient -L host
______________________________________________________________________
dove host � il nome della macchina che si desidera interrogare.
Questo comando ritorna una lista di nomi di 'servizi', cio� nomi di
dischi o stampanti che si possono condividere. A meno che il server
SMB non sia configurato per nessuna sicurezza, sar� richiesto una
password. Potrebbe essere essere la password per l'account guest di
quella macchina o per il proprio personale.
Per esempio:
______________________________________________________________________
smbclient -L zimmerman
______________________________________________________________________
L'output di questo comando dovrebbe somigliare a qualcosa del tipo:
Server time is Sat Aug 10 15:58:27 1996
Timezone is UTC+10.0
Password:
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[]
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
public Disk Public
C$ Disk Default share
IPC$ IPC Remote IPC
OReilly Printer OReilly
print$ Disk Printer Drivers
This machine has a browse list:
Server Comment
--------- -------
HOPPER Samba 1.9.15p8
KERNIGAN Samba 1.9.15p8
LOVELACE Samba 1.9.15p8
RITCHIE Samba 1.9.15p8
ZIMMERMAN
Il "browse list" elenca altri server SMB sulla rete con risorse da
condividere.
Per eseguire il client:
______________________________________________________________________
/usr/sbin/smbclient servizio <password>
______________________________________________________________________
dove 'servizio' � il nome di macchina e servizio. Per esempio se si
desidera raggiungere una directory condivisa come 'public' su una
macchina chiamata 'zimmerman', il servizio dovrebbe essere chiamato:
\\zimmerman\public. Per le restrizioni dell'interprete dei comandi
(shell) potrebbe essere necessario raddoppiare le barre inverse,
qualcosa come:
______________________________________________________________________
/usr/sbin/smbclient \\\\zimmerman\\public mypasswd
______________________________________________________________________
dove 'mypasswd' � la propria password.
A questo punto smbclient dovrebbe presentare la propria richiesta
comandi:
Server time is Sat Aug 10 15:58:44 1996
Timezone is UTC+10.0
Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51]
smb: \>
Scrivendo 'h' si ottiene aiuto per usare smbclient:
smb: \> h
ls dir lcd cd pwd
get mget put mput rename
more mask del rm mkdir
md rmdir rd prompt recurse
translate lowercase print printmode queue
cancel stat quit q exit
newer archive tar blocksize tarmode
setmode help ? !
smb: \>
Se gi� si conosce ftp, non dovrebbe essere necessario consultare le
pagine del manuale di smbclient.
Nonostante si possa usare smbclient per verificare il funzionamento, �
scomodo per l'uso comune. A questo punto potrebbe tornare utile il
pacchetto smbfs. Smbfs dispone di due semplici utility, smbmount e
smbumount che funzionano come mount e umount per condivisioni SMB.
Una cosa importante da notare: � necessario aver compilato il supporto
SMB nel kernel per usare queste utility!
L'esempio seguente dimostra un tipico uso di smbmount per montare una
condivisione SMB chiamata "customers" da una macchina di nome
"samba1":
______________________________________________________________________
[root@postel]# smbmount "\\\\samba1\\customers" -U rtg2t -c 'mount /customers -u 500 -g 100'
Added interface ip=192.168.35.84 bcast=192.168.255.255 nmask=255.255.0.0
Got a positive name query response from 192.168.168.158 ( 192.168.168.158 )
Server time is Tue Oct 5 10:27:36 1999
Timezone is UTC-4.0
Password:
Domain=[IPM] OS=[Unix] Server=[Samba 2.0.3]
security=user
______________________________________________________________________
Il comando mount ora riporter� la condivisione montata, come se fosse
un export NFS:
______________________________________________________________________
[root@postel]# mount
/dev/hda2 on / type ext2 (rw)
none on /proc type proc (rw)
none on /dev/pts type devpts (rw,mode=622)
//SAMBA1/CUSTOMERS on /customers type smbfs (0)
______________________________________________________________________
Si consultino le pagine del manuale per dettagli su smbmount e
smbumount ed il relativo uso.
9. Condividere una stampante Linux con macchine Windows
Per condividere una stampante Linux con macchine Windows, � necessario
accertarsi che la propria stampante sia correttamente configurata e
funzioni con Linux. Se la stampa da Linux � possibile, � abbastanza
semplice configurare una condivisione per stampante SMB.
Si noti che utenti Windows devono avere un account sulla macchina
Linux/Samba al fine di poter stampare. Windows 95/98 cercher� di
autenticarsi con il print server usando lo username e la password
forniti per login all'avvio. Questo significa che se si seleziona
`Annulla' al LogOn di Windows, non sar� possibile stampare (o
connettersi ad altri servizi SMB)! Windows NT consente di fornire
username e password quando si usa una stampante.
Consultare il Printing HOWTO per configurare la stampa locale.
Aggiungere la configurazione di stampa al proprio smb.conf:
______________________________________________________________________
[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
log file = /var/log/samba-log.%m
lock directory = /var/lock/samba
[printers]
comment = All Printers
security = server
path = /var/spool/lpd/lp
browseable = no
printable = yes
public = yes
writable = no
create mode = 0700
[ljet]
security = server
path = /var/spool/lpd/lp
printer name = lp
writable = yes
public = yes
printable = yes
print command = lpr -r -h -P %p %s
______________________________________________________________________
Accertarsi che il percorso della stampante (in questo caso [ljet])
corrisponda alla directory di spool in /etc/printcap!
Le linee:
______________________________________________________________________
printcap name = /etc/printcap
load printers = yes
______________________________________________________________________
Controllano se tutte le stampanti in /etc/printcap debbano essere
caricate in modo predefinito. In tal caso non c'� ragione per
impostare le stampanti individualmente. La sezione [printers]
specifica opzioni per le stampanti che si definiscono esplicitamente.
Se il sottosistema di stampa in uso non funziona in questo modo (BSD),
� necessario impostare un falso file printcap (oppure usare la tecnica
del `print command'). Per maggiori informazioni relativamente il
sistema printcap, si consulti il Printing HOWTO.
Una tecnica utile per verificare le proprie connessioni � cambiare il
comando di stampa in:
______________________________________________________________________
print command = cp %S /tmp/print.%P.%S
______________________________________________________________________
ed analizzare il file risultante.
NOTA: ci sono alcuni problemi per condividere stampanti di macchine
UNIX con macchine Windows NT usando Samba. Un problema � che NT non
vede correttamente la stampante condivisa. Per rimediare consultare
le note nella distribuzione Samba nel file docs/WinNT.txt. Altri
problemi hanno a che fare con le password. Vedere i commenti nello
stesso file per una maggiore comprensione o in caso di problemi nella
configurazione.
Oleg L. Machulskiy (
[email protected]) ha suggerito un comando di
stampa migliore da usare nell'esempio precedente:
______________________________________________________________________
print command = smb2ps %s | lpr -r -h -P %p
______________________________________________________________________
Dove 'smb2ps' � uno script che trasforma il file di spool ricevuto da
Windows in un file Postscript usabile. � necessario eliminare le prime
3 linee e le ultime 2, perch� contengono codice PJL oppure PCL.
Questo approccio � necessario solo se la macchina Windows stampa PCL e
non realmente Postscript. L'autore ha scoperto che Windows 95/98/NT
non hanno un generico driver Postscript, ma il "Digital turbo
Printserver 20" si � dimostrato essere abbastanza generico per la
maggior parte delle configurazioni. Inoltre pare che anche "Apple
LaserWriter II NTX" funzioni correttamente per questo scopo.
Se si crea una directory di spool al posto di quella impostata
dall'utility fornita con la distribuzione si faccia attenzione ai
permessi. Neil Fraser (
[email protected]) suggerisce che i permessi
della directory di spool (in questo caso /var/spool/lpd/lpr siano 4755
(notare il bit suid); funziona sul suo sistema quando il proprietario
� 'root' ed il gruppo 'lp'.
Jeff Stern (
[email protected]) riporta come impostazione
della propria spool directory 777, per consentire ad utenti senza
privilegi di stampare, anche se indica come avrebbe potuto aggiungere
gli utenti al gruppo 'lp'. Questa decisione spetta al system
administrator locale, se la sicurezza di stampa � necessaria, allora
si limitino i permessi il pi� possibile. In un ambiente casalingo,
probabilmente si desidera che tutti siano in grado di stampare.
Dr. Michael Langner (
[email protected]) indica come i problemi di
permesso di scrittura in /var/spool/lpd/ possono essere evitati se si
usa qualcosa come "path = /tmp" e "print command = lpr -r -P%p %s".
A volte un errore di parsing del Postscript capita quando si stampa da
macchine Windows e causa la stampa di una pagina extra. Tale pagina
avr� sempre "%%[ Lastpage ]%%" in cima. Questo sembra accadere solo
con Windows 95 e 98 a causa del Postscript malformato.
Un modo per gestire questa situazione � di usare uno script per
rimuovere la sequenza Postscript errata. Un altro modo � cercare di
trovare un driver Postscript migliore. Probabilmente il modo migliore
� di usare LPRng invece del Postscript per stampare su un Server
Samba.
Erik Ratcliffe (
[email protected]) di Caldera, riporta che LPRng
comporta che qualsiasi sia il driver sulla macchina Windows, sul
server Samba si usa un /etc/printcap simile a:
______________________________________________________________________
raw:\
:rw:sh:
:lp=/dev/lp1
:sd=/var/spool/lpd/raw
:fx=flp
______________________________________________________________________
LPRng non richiede un :\ alla fine di ogni riga. L'indicazione della
stampante deve comunque essere presente in /etc/smb.conf per la
stampante fisica. Il comando di stampa usa l'entry "raw" ed i dati
sono mandati alla stampante in modo binario. Tale comando somiglia a:
______________________________________________________________________
print command = lpr -b -Praw %s
______________________________________________________________________
Potrebbe anche essere necessario disattivare lo spooling di stampa su
Windows 95 al fine di stampare direttamente.
Se si ottiene sempre una pagina extra alla fine della stampa di client
Windows, si provi ad aggiungere la direttiva "sf" in /etc/printcap. In
questo modo si sopprimono i form feed per separare i job fi stampa, ma
non si interferisce con i from feed dei documenti.
10. Condividere una stampante Windows con macchine Linux
Per condividere una stampante su una macchina Windows, � necessario:
1. Avere una configurazione corretta in /etc/printcap che corrisponda
alla struttura delle directory locali (per le directory di spool,
ecc.)
2. Usare lo script ``/usr/bin/smbprint''. Questo script � disponibile
con il sorgente di Samba, purtroppo non con tutte le distribuzioni
in formato binario. Pi� avanti verr� presentata una versione
leggermente diversa di ``smbprint''.
3. Se si desidera convertire file ASCII in Postscript, � necessario
avere nenscript, o qualcosa di equivalente. nenscript � un
convertitore Postscript generalmente installato in /usr/bin.
4. Si potrebbe desiderare rendere la stampa con Samba pi� semplice
tramite un semplice front-end. Di seguito � riportato un semplice
script (``print'') in Perl per manipolare ASCII, Postscript...
5. Si potrebbe anche usare MagicFilter per ottenere il risultato. I
dettagli necessari per configurare MagicFilter sono presenti nello
script perl. MagicFilter ha dei punti di favore in quanto conosce
automaticamente come convertire tra un gran numero di formati.
La successiva configurazione di /etc/printcap � valida per una
stampante HP 5MP su un host Windows NT. Le linee hanno il seguente
significato:
cm commento
lp dispositivo da aprire per output
sd directory di spool della stampante sulla macchina locale
af file per registrare le transazioni
mx massima grandezza per un file (zero significa nessun limite)
if nome del filtro di output (script)
Per maggiori informazioni consultare il Printing HOWTO o le pagine del
manuale per la voce printcap.
______________________________________________________________________
# /etc/printcap
#
# //zimmerman/oreilly via smbprint
#
lp:\
:cm=HP 5MP Postscript OReilly on zimmerman:\
:lp=/dev/lp1:\
:sd=/var/spool/lpd/lp:\
:af=/var/spool/lpd/lp/acct:\
:mx#0:\
:if=/usr/bin/smbprint:
______________________________________________________________________
� necessario accertarsi che le directory di spool e per la
registrazione delle transazioni (log) esistano e siano scrivibili.
Assicurarsi che la linea 'if' contenga un percorso corretto allo
script di smbprint (``dato oltre'') ed inoltre che il dispositivo
puntato sia corretto (il file speciale /dev).
Di seguito lo script smbprint. Di solito � installato in /usr/bin ed
� attribuibile, per quanto ne so, ad Andrew Tridgell, la persona che
ha creato Samba. Viene fornito con la distribuzione in formato
sorgente di Samba ma � riportato, essendo assente in certe
distribuzioni in formato binario.
Potrebbe essere utile studiarlo attentamente, alcune piccole modifiche
hanno dimostrato essere di enorme utilit�.
______________________________________________________________________
#!/bin/sh -x
# Questo script � un filtro di input per la stampa via printcap da una
# macchina UNIX. Usa il programma smbclient per stampare il file sul
# server e servizio specificati usando il protocollo smb.
# Per esempio � possibile avere una linea del printcap del tipo:
#
# smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
# Che dovrebbe creare una stampante UNIX chiamata "smb" che stamper�
# attraverso questo script. E' necessario creare la directory di spool
# /usr/spool/smb con permessi, proprietario e gruppo appropriati per il
# sistema.
# Assegnare i valori che seguono in modo da accordarsi al server e
# e servizio su cui si desidera stampare. In questo esempio si suppone
# di avere un PC con WfWg chiamato "lapland" che ha una stampante
# esportata chiamata "printer" senza password.
#
# Script modificato da
[email protected] (Michael Hamilton)
# in modo da poter leggere server, servizio e password dal file
# /usr/var/spool/lpd/PRINTNAME/.config
#
# Affinch� tutto funzioni � necessario che esista una linea in
# /etc/printcap che includa il file di accounting (af=...):
#
# cdcolour:\
# :cm=CD IBM Colorjet on 6th:\
# :sd=/var/spool/lpd/cdcolour:\
# :af=/var/spool/lpd/cdcolour/acct:\
# :if=/usr/local/etc/smbprint:\
# :mx=0:\
# :lp=/dev/null:
#
# Il file /usr/var/spool/lpd/PRINTNAME/.config dovrebbe contenere:
# server=PC_SERVER
# service=PR_SHARENAME
# password="password"
#
# Esempio:
# server=PAULS_PC
# service=CJET_371
# password=""
#
# File per i messaggi di debug, cambiare in /dev/null se si preferisce.
#
logfile=/tmp/smb-print.log
# logfile=/dev/null
#
# L'ultimo parametro del filtro � il file per la registrazione delle
# transazioni.
#
spool_dir=/var/spool/lpd/lp
config_file=$spool_dir/.config
# Le seguenti variabili dovrebbero essere assegnate nel file di
# configurazione:
# server
# service
# password
# user
eval `cat $config_file`
#
# Supporto per il debugging si pu� cambiare >> con > per risparmiare
# spazio.
#
echo "server $server, service $service" >> $logfile
(
# NOTA Si potrebbe desiderare di aggiungere la linea `echo translate'
# per avere la conversione automatica CR/LF quando si stampa.
echo translate
echo "print -"
cat
) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile
______________________________________________________________________
La maggior parte delle distribuzioni Linux include nenscript per
convertire documenti ASCII a Postscript. Lo script Perl che segue
rende la vita pi� semplice agendo da semplice interfaccia per la
stampa di Linux attraverso smbprint.
Usage: print [-a|c|p] <filename>
-a prints <filename> as ASCII
-c prints <filename> formatted as source code
-p prints <filename> as Postscript
If no switch is given, print attempts to
guess the file type and print appropriately.
Usare smbprint per stampare file ASCII comporta a volte troncare le
linee lunghe. Lo script che segue interrompe, se possibile, le linee
lunghe su uno spazio (invece che in mezzo ad una parola).
La formattazione del codice sorgente � fatta con nenscript. Il file
ASCII viene formattato su 2 colonne con un'intestazione (data, nome
del file, ecc.) inoltre numera le linee. Usandolo come esempio, �
possibile realizzare altri tipi di formattazione.
I documenti Postscript sono gi� correttamente formattati, quindi
passano senza essere modificati.
______________________________________________________________________
#!/usr/bin/perl
# Script: print
# Autore: Brad Marshall, David Wood
# Plugged In Communications
# Data: 960808
#
# Script per stampare su oreilly che � attualmente connessa a zimmerman
# Scopo: Dati diversi tipi di file come argomenti, li elabora
# correttamente per mandarli in pipe ad uno script di stampa Samba.
#
# Tipi di file correntemente supportati:
#
# ASCII - Verifica che le linee pi� lunghe di $line_length caratteri
# si interrompano su spazio.
# Postscript - Intrapresa nessuna azione.
# Codice - Formatta in Postscript (usando nenscript) per rendere al
# al meglio (in orizzontale, font, ecc.)
#
# Lunghezza massima concessa per ciascuna linea di testo ASCII.
$line_length = 76;
# Nome e percorso dello script di stampa Samba
$print_prog = "/usr/bin/smbprint";
# Nome e percorso di nenscript (converte ASCII-->Postscript)
$nenscript = "/usr/bin/nenscript";
unless ( -f $print_prog ) {
die "Non trovo: $print_prog!";
}
unless ( -f $nenscript ) {
die "Non trovo: $nenscript!";
}
&ParseCmdLine(@ARGV);
# DBG
print "Il file e' di tipo: $filetype\n";
if ($filetype eq "ASCII") {
&wrap($line_length);
} elsif ($filetype eq "code") {
&codeformat;
} elsif ($filetype eq "ps") {
&createarray;
} else {
print "Spiacente...file di tipo sconosciuto.\n";
exit 0;
}
# Pipe the array to smbprint
open(PRINTER, "|$print_prog") || die "Impossibile aprire $print_prog: $!\n";
foreach $line (@newlines) {
print PRINTER $line;
}
# Spedisce un linefeed extra nel caso in cui il file abbia l'ultima linea
# incompleta.
print PRINTER "\n";
close(PRINTER);
print "Finito.\n";
exit 0;
# --------------------------------------------------- #
# Da questo punto in poi ci sono solo subroutine #
# --------------------------------------------------- #
sub ParseCmdLine {
# Analizza la linea di comand, cercando di riconoscere il tipo di
# file.
# Se esistono imposta $arg e $file agli argomenti.
if ($#_ < 0) {
&usage;
}
# DBG
# foreach $element (@_) {
# print "*$element* \n";
# }
$arg = shift(@_);
if ($arg =~ /\-./) {
$cmd = $arg;
# DBG
# print "\$cmd trovato.\n";
$file = shift(@_);
} else {
$file = $arg;
}
# Definisce il tipo di file
unless ($cmd) {
# Nessun argomento
if ($file =~ /\.ps$/) {
$filetype = "ps";
} elsif ($file =~ /\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/) {
$filetype = "code";
} else {
$filetype = "ASCII";
}
# Elabora $file in base al suo tipo e ritorna $filetype
} else {
# Il tipo che e' viene restituito in $arg
if ($cmd =~ /^-p$/) {
$filetype = "ps";
} elsif ($cmd =~ /^-c$/) {
$filetype = "code";
} elsif ($cmd =~ /^-a$/) {
$filetype = "ASCII"
}
}
}
sub usage {
print "
Uso: print [-a|c|p] <nomefile>
-a stampa <nomefile> come ASCII
-c stampa <nomefile> formattato come codice sorgente
-p stampa <nomefile> come Postscript
Se non viene fornito alcun parametro, cerca di
indovinare il tipo e stamparlo adeguatamente.\n
";
exit(0);
}
sub wrap {
# Crea un array di linee del file, dove ciascuna linea e' <
# del numero di caratteri specificato, e termina solo su spazi.
# Recupera il numero di caratteri a cui limitare la linea.
$limit = pop(@_);
# DBG
#print "Entra subroutine wrap\n";
#print "La lunghezza limite per la linea e' $limit\n";
# Leggi il file, analizzalo e mettilo nell'array.
open(FILE, "<$file") || die "Impossibile aprire: $file: $!\n";
while(<FILE>) {
$line = $_;
# DBG
#print "La linea e':\n$line\n";
# Se la linea e' oltre il limite vai a capo.
while ( length($line) > $limit ) {
# DBG
#print "Limita...";
# Prendi i primi $limit +1 caratteri.
$part = substr($line,0,$limit +1);
# DBG
#print "La linea parziale e':\n$part\n";
# verifica se l'ultimo carattere e' spazio
$last_char = substr($part,-1, 1);
if ( " " eq $last_char ) {
# Se lo e' stampa il resto.
# DBG
#print "L'ultimo carattere era spazio\n";
substr($line,0,$limit + 1) = "";
substr($part,-1,1) = "";
push(@newlines,"$part\n");
} else {
# se non lo e', cerca l'ultimo spazio nella
# sottolinea e stampa fino a li'.
# DBG
#print "L'ultimo carattere non era spazio\n";
# RImuove i caratteri oltre $limit
substr($part,-1,1) = "";
# Rovescia la linea per rendere semplice da trovare
# l'ultimo carattere.
$revpart = reverse($part);
$index = index($revpart," ");
if ( $index > 0 ) {
substr($line,0,$limit-$index) = "";
push(@newlines,substr($part,0,$limit-$index)
. "\n");
} else {
# Non c'erano spazi cosi' stampa fino a $limit
substr($line,0,$limit) = "";
push(@newlines,substr($part,0,$limit)
. "\n");
}
}
}
push(@newlines,$line);
}
close(FILE);
}
sub codeformat {
# Chiama la funzione wrap e poi filtra il risultato attraverso
# nenscript
&wrap($line_length);
# Manda il risultato attraverso nenscript per creare un file
# Postscript che abbia un formato accettabile di stampa per
# il codice sorgente (stile orizzontale, font Courier, numeri
# di linea)
# Per prima cosa stampa su un file temporaneo.
$tmpfile = "/tmp/nenscript$$";
open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") ||
die "Non posso aprire nenscript: $!\n";
foreach $line (@newlines) {
print FILE $line;
}
close(FILE);
# Legge il file temporaneo inun array per passarlo allo script di
# stampa di Samba
@newlines = ("");
open(FILE, "<$tmpfile") || die "Impossibile aprire $file: $!\n";
while(<FILE>) {
push(@newlines,$_);
}
close(FILE);
system("rm $tmpfile");
}
sub createarray {
# Crea l'array per Postscript
open(FILE, "<$file") || die "Impossibile aprire $file: $!\n";
while(<FILE>) {
push(@newlines,$_);
}
close(FILE);
}
______________________________________________________________________
A questo punto si pu� esaminare MagicFilter. Ringraziamenti ad Alberto
Menegazzi (
[email protected]) per queste informazioni.
Alberto scrive:
1. Installare MagicFilter con il filtro per le stampanti in
/usr/bin/local ma non si compili il file /etc/printcap con i
suggerimenti dati dalla documentazione di MagicFilter.
2. Si scriva >/etc/printcap in questo modo (l'esempio si riferisce
alla LaserJet 4L dell'autore):
______________________________________________________________________
lp|ljet4l:\
:cm=HP LaserJet 4L:\
:lp=/dev/null:\ # or /dev/lp1
:sd=/var/spool/lpd/ljet4l:\
:af=/var/spool/lpd/ljet4l/acct:\
:sh:mx#0:\
:if=/usr/local/bin/main-filter:
______________________________________________________________________
� necessario spiegare che 'lp=/dev/...' viene aperta e bloccata
(locked) quindi � necessario utilizzare un dispositivo "virtuale" per
ciascuna stampante remota che si debba usare.
� possibile crearli ad esempio con: 'touch /dev/ljet41'
3. Si scriva un filtro /usr/local/bin/main-filter come quello
suggerito, usando ljet4l-filter invece di bf/cat/.
Ad esempio:
______________________________________________________________________
#! /bin/sh
logfile=/var/log/smb-print.log
spool_dir=/var/spool/lpd/ljet4l
(
echo "print -"
/usr/local/bin/ljet4l-filter
) | /usr/bin/smbclient "\\\\SHIR\\HPLJ4" -N -P >> $logfile
______________________________________________________________________
C'� anche un riferimento dal Print2Win mini-Howto relativamente il
locking dei dispositivi e sul perch� conviene creare stampanti
virtuali.
______________________________________________________________________
Suggerimento da Rick Bressler:
A titolo di suggerimento, la configurazione che segue non �
una buona idea:
:lp=/dev/null:\
in quanto lpr apre in modo 'esclusivo' il file specificato
tramite lp=. � necessario per prevenire il tentativo di
diversi processi di stampare contemporaneamente sulla
stessa stampante.
Un effetto collaterale � che in tal caso, eng e colour non
possono stampare contemporaneamente, (di solito � pi� o
meno trasparente dal momento che stampano velocemente, e
dal momento che usano una coda, probabilmente non si nota),
tuttavia ogni altro processo che cerca di scrivere a
/dev/null sar� interrotto!
Non si tratta di un grosso problema in un sistema per utente
singolo. L'autore ha un sistema con pi� di 50 stampanti.
Sarebbe un problema in questo caso.
La soluzione � quella di creare una stampante fittizia per
ciascuna di quelle fisiche, esempio con il comando:
touch /dev/eng
______________________________________________________________________
11. Eseguire copie di sicurezza (backup) di macchine Windows su un
server Linux
Adam Neat (
[email protected]) ha gentilmente contribuito a fornire
lo script che segue per fare backup di macchine Windows usando server
Linux come supporto, tramite l'utility smbclient. Adam � solito fare
backup di macchine Windows 3.x ed NT su un sistema Linux che dispone
di un drive SCSI DAT.
Adam non � soddisfatto dello stile di codifica utilizzato, tuttavia
funziona. Come l'autore ama commentare. "Se funziona ed � stupido,
allora non � stupido".
Un altro script di backup per Windows, � stato fornito da Dan Tager
(
[email protected]). Lo script di Dan � in grado di fare backup di
macchine Unix via rsh e pu� essere facilmente modificato per usare
ssh.
In questo script, la stringa 'agnea1' � il nome dell'utente sulla
macchina Linux che fa il backup.
______________________________________________________________________
#!/bin/bash
clear
echo Inizializzazione ...
checkdate=`date | awk '{print $1}'`
if [ -f "~agnea1/backup-dir/backup-data" ]; then
echo "ERRORE: non esiste il file di configurazione per oggi!"
echo "FATALE!"
exit 1
fi
if [ -d "~agnea1/backup-dir/temp" ]; then
echo "ERRORE: Manca la directory temporanea!"
echo
echo "Tentativo di creazione"
cd ~agnea1
cd backup-dir
mkdir temp
echo "Creata directory - temp"
fi
if [ "$1" = "" ]; then
echo "ERRORE: manca il nome della macchina (es: cdwriter)"
exit 1
fi
if [ "$2" = "" ]; then
echo "ERRORE: Manca la risorsa SMB (Lan Manager) (es: work)"
exit 1
fi
if [ "$3" = "" ]; then
echo "ERRORE: Manca indirizzo IP di $1 (es: 130.xxx.xxx.52)"
exit 1
fi
#############################################################################
# Main Section
#
#############################################################################
cd ~agnea1/backup-dir/temp
rm -r ~agnea1/backup-dir/temp/*
cd ~agnea1/backup-dir/
case "$checkdate"
in
Mon)
echo "Backup di Luned�"
cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N
echo "Completato"
if [ -d "~agnea1/backup-dir/Monday" ]; then
echo "Directory Monday non trovata ... creazione"
mkdir ~agnea1/backup-dir/Monday
fi
echo "Archiviazione ..."
cd ~agnea1/backup-dir/temp
tar -cf monday.tar *
echo "fatto ..."
rm ~agnea1/backup-dir/Monday/monday.tar
mv monday.tar ~agnea1/backup-dir/Monday
;;
Tue)
echo "Backup di Marted�"
cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N
echo "Completato"
if [ -d "~agnea1/backup-dir/Tuesday" ]; then
echo "Directory Tuesday non trovata ... creazione"
mkdir ~agnea1/backup-dir/Tuesday
fi
echo "Archiviazione ..."
cd ~agnea1/backup-dir/temp
tar -cf tuesday.tar *
echo "fatto ..."
rm ~agnea1/backup-dir/Tuesday/tuesday.tar
mv tuesday.tar ~agnea1/backup-dir/Tuesday
;;
Wed)
echo "Backup di Mercoled�"
cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N
echo "Completato"
if [ -d "~agnea1/backup-dir/Wednesday" ]; then
echo "Directory Wednesday non trovata ... creazione"
mkdir ~agnea1/backup-dir/Wednesday
fi
echo "Archiviazione ..."
cd ~agnea1/backup-dir/temp
tar -cf wednesday.tar *
echo "fatto ..."
rm ~agnea1/backup-dir/Wednesday/wednesday.tar
mv wednesday.tar ~agnea1/backup-dir/Wednesday
;;
Thu)
echo "Backup di Gioved�"
cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N
echo "Completato"
if [ -d "~agnea1/backup-dir/Thursday" ]; then
echo "Directory Thrusday non trovata ... creazione"
mkdir ~agnea1/backup-dir/Thursday
fi
echo "Archiviazione..."
cd ~agnea1/backup-dir/temp
tar -cf thursday.tar *
echo "fatto ..."
rm ~agnea1/backup-dir/Thursday/thursday.tar
mv thursday.tar ~agnea1/backup-dir/Thursday
;;
Fri)
echo "Backup di Venerd�"
cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N
echo "Completato"
if [ -d "~agnea1/backup-dir/Friday" ]; then
echo "Directory Friday non trovata ... creazione"
mkdir ~agnea1/backup-dir/Friday
fi
echo "Archiviazione ..."
cd ~agnea1/backup-dir/temp
tar -cf friday.tar *
echo "fatto ..."
rm ~agnea1/backup-dir/Friday/friday.tar
mv friday.tar ~agnea1/backup-dir/Friday
;;
*)
echo "ERRORE FATALE: giorno non corretto"
exit 1
;;
esac
###########
______________________________________________________________________
Lo script di Dan per eseguire il backup
______________________________________________________________________
#!/bin/bash
BACKDIR=3D/backup
WINCMD=3D/usr/bin/smbclient
function CopyWinHost(){
# usa tar e gzip per archiviare "condivisioni windows" in una
# directory locale usando l'utility smbclient della suite samba.
# argomento 1 � il nome del computer windows remoto
# argomento 2 � il nome della condivisione di cui fare backup
echo $1,$2,$3
REMOTE=3D$1
SHARE=3D$2
DEST=3D$3
# crea un file tar gzip usando samba per copiare direttamente
# dal pc con windows
# 12345 � la password. � necessaria anche non e' definita alcuna
# sulla macchina remota
$WINCMD \\\\$REMOTE\\$SHARE 12345 -Tc -|gzip > $DEST
echo `date`": Completato backup da "$REMOTE" a "$DEST
echo
}
function CopyUnixHost(){
# tar e gzip una directory usando rsh
# argomento 1 � il nome del computer remoto
# argomento 2 � il percorso completo della directory sorgente
# remota
# argomento 3 � il nome del file tar-gzip locale. Il nome
# del giorno pi� .tgz sono aggiunti in coda
# all'argomento 3
REMOTE=3D$1
SRC=3D$2
DEST=3D$3
if rsh $REMOTE tar -cf - $SRC |gzip > $DEST; then
echo `date`": Completato backup da "$REMOTE":"$SRC" a "$DEST
else
echo `date`": Errore durante il backup da "$REMOTE":"$SRC" a "$DEST
fi
}
# $1: win=backup macchina windows, unix=backup macchina unix
case $1 in
win)
# $2= nome della macchina remota windows,
# $3= nome della condivisione remota,
# $4= nome della directory locale
CopyWinHost $2 $3 $4;;
unix)
# $2= host remoto,
# $3= directory remota,
# $4= nomde della directory locale
CopyUnixHost $2 $3 $4;;
esac
______________________________________________________________________
12. Usare Samba attraverso reti instradate
Andrew Tridgell afferma che la consultazione di host SMB attraversando
router � problematica. Ecco i suoi suggerimenti per consentire tale
operazione:
Per la consultazione attravero subnet instradate � necessario
comportarsi come segue. Ci sono anche altri metodi ma sono molto pi�
complessi:
1) tutti i computer che si desiderano visibili dovrebbero usare un
solo server WINS (Samba o NT possono)
2) il master browser per ciascuna sotto rete deve essere NT o Samba
(Win9X non comunica correttamente informazioni attraverso cross-
subnet)
3) si dovrebbe usare lo stesso nome di gruppo di lavoro su tutte le
sottoreti. Non � strettamente necessario ma � il modo pi� semplice per
garantire il successo. Se non fosse possibile allora � necessario
organizzarsi in modo che le informazioni di browse possano propagarsi
attraverso le sottoreti (non si propagano tramite WINS). Ci sono due
meccanismi: i) ciascun master nota gli annunci di workgroup da altri
master sullo stesso dominio di broadcast ii) ciascun non Win9X master
contatta il DMB globale per il gruppo di lavoro (tipicamente il domain
controller o un sistema Samba configurato come domain master) e
scambia periodicamente la lista di browse completa.
Inoltre Rakes Bhrania indica che i router Cisco possono essere
configurati per inoltrare il traffico SMB in modo da consentire il
browsing. Il suo suggerimento � di configurare l'interfaccia del
router relativamente host SMB con un comando simile a:
______________________________________________________________________
ip helper-address x.x.x.x
______________________________________________________________________
dove x.x.x.x � l'indirizzo IP del server SMB.
13. Ringraziamenti
Ringraziamente particolari ad Andrew Tridgell (
[email protected])
per aver dato inizio e diretto il progetto Samba e per aver mantenuto
questo documento corretto.
Brad Marshall (
[email protected]) e Jason Parker
(
[email protected]) hanno contribuito con tempo, pazienza, script
e ricerca.
Adam Neat (
[email protected]) e Dan Tager (
[email protected])
hanno fornito script bash usati per il backup di macchine Windows
verso server Linux.
Matthew Flint (
[email protected]) ha suggerito l'uso
dell'opzione 'interfaces' nel file smb.conf
Alberto Menegazzi (
[email protected]) ha contribuito con il setup di
MagicFilter per consentire ad una macchina Linux di condividere una
stampante Windows
Rakesh Bharania (
[email protected]) ha suggerito la configurazione
dei router CISCO.
Rich Gregory (
[email protected]) ed altri hanno suggerito che questo
documento presentasse alcuni dettagli del pacchetto smbfs
Andrea Girotto (
[email protected]) ha contribuito con alcuni
utili suggerimenti.
Grazie anche a tutto i traduttori internazionali che hanno distribuito
questo HOWTO a chi non parla inglese: Takeo Nakano
(
[email protected]), Klaus-Dieter Schumacher (Klaus-
[email protected]), Andrea Girotto
(
[email protected]), Mathieu Arnold (arn_mat@club-
internet.fr), Stein Oddvar Rasmussen (
[email protected]), Nilo
Menezes (
[email protected]) e molti altri di cui non ho le
informazioni per il contatto.