# SMB-Howto

## Autor:David Wood, dwood@plugged.net.au v1.1, 25 Marca 1999
Wersja polska: Bartosz Maruszewski B.Maruszewski@jtz.org.pl
v1.2, 18 Sierpnia 1999

Jest to dokument z serii HOWTO (Jak To Zrobić). Opisuje on jak używać Server Message Protocol (SMB), zwanego też Session Message Block, NetBIOS lub LanManager w Linuksie. Dokument ten został napisany w standardzie ISO-8859-2. Oryginał można znaleźć pod adresem ftp.icm.edu.pl w katalogu /pub/Linux/sunsite/docs/HOWTO.

## 1. Wprowadzenie.

Jest to dokument z serii HOWTO (Jak To Zrobić). Opisuje on jak używać w Linuksie Server Message Protocol, zwanego też Session Message Block, NetBIOS lub LanManager. Dokument ten skupia się na Linuksie, jednak Samba działa na większości systemów uniksowych.

Dokument ten jest prowadzony przez Davida Wooda dwood@plugged.net.au. Wszelkie dodatki, modyfikacje lub poprawki mogą być przesłane do mnie, aby je później umieścić w następnej wersji.

O wiele więcej dokumentacji znajduje się na stronie WWW Samby pod adresem www.samba.org. Możesz także korzystać z grupy dyskusyjnej comp.protocols.smb lub polskojęzycznej pl.comp.os.linux.sieci.

Protokół SMB używany jest przez Microsoft Windows 3.11, NT i 95/98 aby współdzielić zasoby dyskowe i drukarki. Maszyny Unix-owe (w tym także Linux) mogą korzystać z tych zasobów używając narzędzi stworzonych przez Andrew Tridgella. Przy pomocy narzędzi smbfs autorstwa Paal-Kr. Engstad (pke@engstad.ingok.hitos.no), Volker Lendecke (lendecke@namu01.gwdg.de) maszyny uniksowe mogą montować zasoby udostępniane z Windows.

Są cztery rzeczy, które można zrobić Sambą:

1. Udostępniać dysk Linux-owy dla komputerów z Windows.
2. Udostępniać dysk Windows-owy dla komputerów z Linux-em.
3. Udostępniać drukarkę pod Linux-em dla Windows.
4. Udostępniać drukarkę pod Windows dla Linux-a.

Wszystko to zostało opisane w tym dokumencie.

Zrzeczenie. Procedury i skrypty albo działały u autora, albo zostały opisane jako działające przez tych, którzy je napisali. Różne konfiguracje mogą nie działać z podanymi tutaj informacjami. Jeśli odkryjesz taką sytuację możesz napisać do autora list z sugestią na ulepszenie tego dokumentu, ale autor nic nie gwarantuje. A czego się spodziewałeś ? W końcu autor jest tyklo konsultantem.

Aby maszyny z systemami Windows 3.x mogły korzystać z SMB muszą mieć zainstalowany stos TCP/IP i DLL Win32. Oba te pakiety są dostępne na stronie WWW Microsoftu ( www.microsoft.com).

## 2. Dalsze informacje.

Dokument ten jest próbą opisania jak skonfigurować na Linux-ie podstawowe serwisy SMB związane z plikami i drukarkami. Samba jest bardzo złożonym i kompletnym pakietem. Nie ma sensu, żeby kopiować tutaj wszystko to co jest zawarte w dokumentacji dla tego pakietu.

Dalszych informacji możesz szukać w:

- Dokumentacji do Samby, która jest częścią dystrybucji. Dystrybucja jest dostępna pod adresem: ftp.icm.edu.pl oraz ftp.samba.org
- HOWTO dotyczącym drukowania (Printing HOWTO)
- oraz w mini-HOWTO Print2Win.
- Dokumentacja określająca standard protokołu NetBIOS na TCP/IP.
  RFC 1001 - Ogólne zarysy.
  RFC 1002 - Szczegółowe specyfikacje.

## 3. Instalacja.

Po pierwsz, aby używać Samby wszystkie twoje maszyny muszą byc w jednym segmencie sieci lokalnej i korzystać z protokołu TCP/IP. Samba nie będzie działać na innych protokołach. Jest to łatwe do osiągnięcia ponieważ Linux i Windows 95/98/NT są dostarczane z tym protokołem. Jednak jeśli używasz Windows 3.x, to będziesz musiał dodać obsługę tego protokołu.

Z usług SMB nie można korzystać poprzez routery. Jeśli chcesz takie coś zrobić, to musisz ustawić tunel IP, co jest poza tematyką tego HOWTO.

Najświeższe źródła Samby dostępne są pod adresem ftp.icm.edu.pl w katalogu `/pub/samba`. Oryginalny adres to ftp.samba.org.

Jeśli instalowałeś dystrybucję Red Hat mogłeś wybrać instalację Samby jako jedną z opcji. Niektóre inne dystrybycje też oferują binaria Samby.

Następujące demony są wymagane do pracy z Sambą. Zwykle znajdują się one w katalogu /usr/sbin i są uruchamiane w momencie startu systemu albo przez demon `inetd`. Przykładowe skrypt znajdują się w sekcji Uruchamianie demonów.

          smbd (Demon SMB) i nmbd (Świadczy usługi nameservera NetBIOS-u)

Zauważ, że serwis nazw oferowany przez demona nmbd różni się od tego oferowanego przez DNS (serwis nazw domen). Serwis nazw NetBIOS, to serwis nazw w stylu Windows używany do SMB. Innymi słowy, to że masz DNS nie oznacza, że Samba będzie umiała odczytywać nazwy komputerów.

Zwykle w systemie instalowane są następujące binaraia w katalogu /usr/bin:

       smbclient (Klient dla maszyn Unix-owych), smbprint (skrypt do
       drukowania na drukarce przyłączonej do hosta SMB), smbprint.sysv
       (To samo co wcześniej, ale dla systemu UNIX SVR4), smbstatus
       (Wyświetla bieżące połączenia SMB na lokalnym hoście), smbrun
       (Główny skrypt do uruchamiania aplikacji na hoście SMB)

Binaria do obsługi systemu plików (smbfs) omówione są w dalszej części dokumentu.

Dodatkowo zawarty jest w tym dokumencie skrypt o nazwie "print", który jest pożytecznym dokończeniem skryptu smbprint.

Pakiet Samba jest prosty w instalacji. Ściągnij go z podanego wcześniej miejsca i przeczytaj plik README znajdujący się w dystrybucji. Jest jeszcze plik docs/INSTALL.txt, który podaje krok po kroku co należy zrobić, aby zainstalować Sambę.

Postępując wraz z instalacją, umieść demony w /usr/sbin i binaria w /usr/bin. Zainstaluj strony do podręcznika systemowego "man" w /usr/local/man.

Kiedy będziesz instalował pakiet Samba, będziesz musiał podać miejsce, gdzie ma się znajdować plik konfiguracyjny `smb.conf`. Z reguły jest to katalog /etc, ale możesz go umieścić, gdzie ci się podoba. Dla dalszych instrukcji założymy, że plik konfiguracyjny umieściłeś w /etc, plik logujący to /var/log/samba-log.%m i katalog blokujący to /var/lock/samba.

Zainstaluj plik konfiguracyjny smb.conf. Przejdź do katalogu, gdzie została skompilowana Samba. Zajrzyj do katalogu `examples/simple` i przeczytaj plik README. Skopiuj znaleziony tam plik `smb.conf` do /etc. OSTROŻNIE !!! Jeśli masz dystrybucję Linux-a, która miała Sambę i zainstalowałeś ją to pewnie masz już plik `smb.conf` w katalogu /etc i lepiej zacznij od tego pliku. Jeśli nie chcesz umieszczać pliku konfiguracyjnego w /etc, to umieść go tam, gdzie chcesz i zrób symboliczne dołączenie:

         ln -s /gdzie/jest/smb.conf /etc/smb.conf

## 4. Uruchamianie demonów.

Dwoma demonami SMB są: `/usr/sbin/smbd i /usr/sbin/nmbd`.

Możesz je uruchomić przez demona `inetd` lub jako osobne procesy. Samba będzie odpowiadać trochę szybciej jeśli jest uruchomiona jako osobny demon niż z inetd.

W obu przypadkach powinieneś sprawdzić czy w pliku `/etc/services` znajdują się takie linie:

           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

Upewnij się, że wszystkie są odkomentowane. W zależności od dystrybucji, możliwe, że będziesz musiał je dodać. Samba nie będzie w stanie dowiązać się do odpowiednich portów jeśli w tym pliku nie znajdą się powyższe linie.

Aby uruchomić demony przez `inetd` umieść następujące linie w pliku `/etc/inetd.conf`:

     Serwis NetBIOS dla Samby
          # netbios-ssn
          stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait
          root /usr/sbin/nmbd nmbd

Następnie wyślij sygnał HUP do procesu nr 1:

         kill -HUP 1 `cat /var/run/inetd.pid`

Dla użytkowników dystrybucji Red Hat. Aby uruchomić te demony ze skryptów startowych, umieść następujący skrypt w katalogu `/etc/rc.d/init.d/smb` i dołącz je symbolicznie do plików podanych w komentarzu:

         #!bin/sh

         #
         # /etc/rc.d/init.d/smb - startuje i zatrzymuje serwis SMB
         #
         # Następujące pliki powinny być symbolicznymi dołączeniami do
         # tego pliku:
         # /etc/rc.d/rc1.d/K35smb (Zatrzymuje serwis SMB podczas
         # zamknięcia systemu.
         # /etc/rc.d/rc3.d/S91smb (Startuje serwis SMB w trybie
         # wieloużytkownikowym
         # /etc/rc.d/rc6.d/K35smb (zatrzymuje serwis SMB podczas resetu)
         #

         # Biblioteka funkcji
         etc/rc.d/init.d/functions

         # Konfiguracja sieci
         etc/sysconfig/network

         # Sprawdź czy jesteśmy w sieci
         [ ${NETWORKING} = "no" ] && exit 0

         # Zobacz jak zostaliśmy wywołani
         case "$1" in
            start) echo -n "Starting SMB services: "
                    daemon smbd -D
                    daemon nmbd -D
                    echo touch /var/lock/subsys/smb
            ;;
            stop) echo -n "Shutting down SMB services: "
                    killproc smbd
                    killproc nmbd
                    rm -f /var/lock/subsys/smb echo ""
            ;;
            *) echo "Usage: smb {start|stop}" exit 1
         esac

Od tłumacza: Jeśli używasz dystrybucji Slackware. Umieść poniższy fragment w skrypcie startowym `/etc/rc.d/rc.local`:

       # czy jesteśmy w sieci
       [ ${NETWORKING} = "no" ] && exit 0

       # Uruchmon demony Samby
       /usr/sbin/smbd -D
       /usr/sbin/nmbd -D

Jeśli podczas startu Samby pojawi się błąd mówiący coś o niemożności dowiązania się do portu 139, to prawdpodobnie jest inny proces Samby jeszcz działąjący. Sprawdź listę procesów (poleceniem 'ps auxww | grep mbd'), żeby zobaczyć czy to prawda.

## 5. Ogólna konfiguracja. (/etc/smb.conf)

Konfiguracja Samby na Uniksie jest kontrolowana jednym plikiem: `/etc/smb.conf`. W pliku tym umieszczasz zasoby jakie chcesz udostępnić dla świata i jakie restrykcje chcesz wprowadzić.

Ponieważ ta sekcja opisuje udostępnianie dysków i drukarek Linux-owych Windowsom, plik smb.conf będzie najprostszym z możliwych.

Nie martw się o szczegóły. Późniejsze sekcje wprowadzą ogólny koncept.

Każda sekcja pliku zaczyna się od nazwy jak np.: [global], [homes], [printers] itp.

Sekcja [global] definiuje kilka ogólnych zmiennych, które będą się odnosić do wszystkich udostępnianych zasobów.

Sekcja [homes] pozwala użytkownikom na dostęp do ich (i tyklo ich) katalogów domowych na lokalnej maszynie Linux-owej. Jeśli jakiś użytkownik Windows będzie chciał skorzystać z udostępnianych zasobów, to zostanie podłączony do swojego katalogu domowego. Zauważ, że aby to zrobić użytkownik musi mieć swoje konto na maszynie Linux-owej.

Poniższy przykładowy plik smb.conf pozwala użytkownikom na dostęp do swoich katalogów domowych i na zapis do katalogu tymczasowego. Aby użytkownik Windows zobaczył udostępniane zasoby, Linux musi być w tej samej sieci lokalnej. Użytkownik Windows po prostu dołącza dysk sieciowy z Menedżera Plików lub Eksploratora Windows.

W następnych sekcjach będą dodawane kolejne linie do tego pliku, aby umożliwić dostęp do większej ilości zasobów.

     etc/smb.conf
       ;
       ; Po wprowadzeniu zmian do tego pliku zrestartuj demony Samby
       ; kill -9 `pidof smbd`; kill -9 `pidof nmbd`
       ; /usr/sbin/smbd; /usr/sbin/nmbd
       [global] Umieść to w pliku jeśli chcesz konto anonimowe guest account = nobody
          log file = /var/log/samba-log.%m lock directory = /var/lock/samba share
          modes = yes

       [homes] comment = Katalogi Domowe browseable = no read only = no create
          mode = 0750

       [tmp] comment = Miejsce na pliki tymczasowe path = /tmp read only = no
          public = yes

Po stworzeniu nowego pliku `smb.conf` dobrze jest zweryfikować czy jest poprawny. Można to zrobić przy pomocy programu testparm (informacje o nim znajdziesz na stronie podręcznika systemowego). Jeśli program ten nie zgłosi żadnych błędów, to smbd poprawnie załaduje ten plik.

Oto pewien trick: Jeśli twój serwer Samba ma więcej niż jeden interfejs ethernetowy, smbd może dołączyć się do złego. Jeśli tak się stanie, to możesz zmusić smbd do dowiązania się do dobrego przez dodanie do sekcji [global] poniższej linii:

    interfaces = 192.168.1.1/24

Uwaga: Liczba po znaku '/' odnosi się do maski podsieci. "24" to wartość jaką należy użyć dla niepodzielonej klasy C. Więcej informacji okalkulacjach dotyczących podsieci znajdziesz pod adresem www.ziplink.net/~ralphb/IPSubnet/index.html.

Dostępne jest graficzne narzędzie konfiguracyjne do Samby: GtkSamba. Zerknij pod adres www.open-systems.com/gtksamba.html.

## 6. Udostępnianie dysku Linuksowego komputerom z Windows.

Jak widać na powyższym przykładzie udostępnianie dysków Linux-owych użytkownikom Windows jest proste. Dostęp do zasobów udostępnianych poprzez Sambę można w bardzo dużym stopniu kontrolować.

Aby udostępnić wszystkim jakieś zasoby, dodaj poniższe linie do smb.conf:

       [public]
       comment = Public Stuff path = /home/public public = yes writable = yes
          printable = no

Aby umożliwić zapis do tego katalogu tylko dla członków grupy staff, zmodyfikuj te linie w następujący sposób:

       [public]
       comment = Public Stuff path = /home/public public = yes writable = yes
          printable = no write list = @staff

Kiedyś było to bardzo proste: po prostu startowałeś Sambę i zasoby można było przeglądać z Windows na PC. Jednak Microsoft ostatnio trochę utrudnił życie korzystającym z Samby. Systemy Windows 98, Windows NT (z service pack 3 i nowszym) i ostatnie Windows 95 używają teraz standardowo kodowanych haseł. Samba natomiast korzysta domyślnie z niekodowanych haseł. Nie można przeglądać zasobów jeśli albo klient albo serwer używa kodowanych haseł ponieważ nie można połączyć się anonimowo.

Jeśli taki właśnie konflikt występuje u ciebie, to podczas próby połączenia się z zasobem powinieneś zobaczyć okienko z komunikatem: "You are not authorized to access that account from this machine".

Możesz skonfigurować albo Sambę do używania zakodowanych haseł, albo Windows do używani niekodowanych haseł.

Konfigurowanie Windows do używania kodowanych haseł Samby:

Windows 95/98

Używając edytora rejestrów (regedit) stwórz takie ustawienie: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP dodaj nową wartość DWORD: Value name: EnablePlainTextPassword Data: 0x01.

Windows NT

Używając edytora rejestrów (regedit) stwórz takie ustawienie: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters, dodaj nową wartość DWORD: Value Name: EnablePlainTextPassword Data: 0x01.

Kiedy te zmiany zostaną zrobione, zresetuj komputer z Windows i spróbuj podłączyć się do jakiegoś zasobu z Samby. Powinno to działać o ile serwere Samby używa niekodowanych haseł

Konfigurowanie Samby do używania haseł kodowanych:

W sekcji [global] w pliku `/etc/smb.conf` dodaj następujące linie:

           encrypt passwords = yes
           smb passwd file = /etc/smbpasswd

Zanim to zrobisz zachęcam mocno do przeczytania plików `ENCRYPTION.txt`, `Win95.txt` i `WinNT.txt` w dokumentacji do Samby.

Jeśli twoi klienci i serwer używają kodowanych haseł nie będziesz mógł przeglądać zasobów serwera zanim nie zostanie zainicjowane pierwsze połączenie z poprawną autentykacją. Aby to uczynić wpisz ręcznie nazwę zasobu w Menedżerze Plików lub Eksplorerze w postaci `\\<nazwa serwera>\<nazwa zasobu>`. Zaloguj się z poprawnym loginem i hasłem na tym serwerze.

Jeśli podejrzewasz, że serwis nazwa NetBIOS jest źle skonfigurowany (może dlatego, że pojawiają się błędy "host not found" podczas połączenia), to spróbuj użyć tylko adresu IP serwera `\\<IP serwera>\<nazwa zasobu>`.

Żeby nazwy plików pojawiały się poprawnie możliwe, że musisz dodać kilka ustawień do odpowiedniej sekcji zasobu. Poniższe działa poprawnie dla Windows 95/98/NT, ale możliwe, że trzeba te ustawienia zmodyfikować w przypadku Windows 3.x:

          ; Mangle case = yes zdaje się podawać poprawne nazwy
          ; dla Win 95/98
          mangle case = yes

          ; Czy rozróżniać duże i małe litery
          case sensitive = no

          ; Domyślna wielkość liter przy tworzeniu plików
          default case = lower

          ; Zachowaj ustawienia dot. liter dla wszystkich plików
          preserve case = yes

          ; Zachowaj ustawienia dor. liter dla nazwa dos-owych (8.3)
          short preserve case = no

Więcej informacji na temat różnych sposobów udostępniania zasobów znajdziesz w dokumentacji do Samby. Możliwości konfiguracji Samby są o wiele większe niż pokazane tutaj. Na początek jednak wystarczy. Jeśli chcesz zrobić coś bardziej zaawansowanego, to zajrzyj na wspomnianą wcześniej stronę WWW Samby.

## 7. Udostępnianie dysku spod Windows maszynom z Linux-em.

Wraz z dystrybucją Samby otrzymujemy klienta dla Unix-ów. Jego interfejs poleceń jest podobny do ftp. Możesz go używać, aby przenosić pliki między Windowsowym "serwerem" a klientem Linux-owym.

Aby zobaczyć jakie zasoby sa udostępnione na danym hoście napisz:

         /usr/sbin/smbclient -L host

gdzie host jest nazwą maszyny, której zasoby chcesz zobaczyć. Polecenie to zwróci listę nazw serwisów - to znaczy nazw dysków lub drukarek, które może udostępnić. Serwer Samby będzie cię pytał o hasło, o ile nie ma skonfigurowanego bezpiecznego dostępu.

Np.

         smbclient -L zimmermann

Polecenie to powinno wyświetlić coś na kształt:

     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

Browse list pokazuje inne serwery SMB udostępniające zasoby w sieci.

Aby użyć klienta napisz:

         /usr/sbin/smbclient serwis <hasło>

gdzie serwis jest nazwą maszyny i zasobu. Na przykład jeśli próbujesz dostać się do katalogu, który jest udostępniany jako public na maszynie o nazwie zimmermann, serwisem byłoby: \\zimmerman\public. Chociaż z powodu powłoki w Linux-ie będziesz musiał oznaczyć znaki \ specjalnie i polecenie ostatecznie wygląda tak:

         usr/sbin/smbclient \\\\zimmerman\\public hasło

gdzie hasło jest łańcuchem znaków będącym twoim hasłem.

Pojawi się wtedy znak zachęty klienta Samby:

        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: \>

Napisz 'h', aby uzyskać pomoc:

         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: \>

Jeśli umiesz używać ftp, to nie powinieneś potrzebować czytać podręcznika systemowego na temat smbclient.

smbclient może być dobry do testowania jednak szybko może się znudzić w codziennej pracy. Będziesz pewnie chciał używać pakietu smbfs. Zawarte są tam dwa proste narzędzia: smbmount i smbumount. Działają dokładnie tak samo jak linuksowe polecenia mount i umount z tym, że operują na zasobach SMB.

Pakiet smbfs jest zawarty w większości dystrybucji Linuksa. Jedna ważna uwaga: Musisz mieć wkompilowaną w jądro obsługę systemu plików SMB (smbfs), aby móc używać tych narzędzi!

## 8. Udostępnianie drukarki Linux-owej komputerom z Windows.

Aby udostepnić drukarkę Linux-ową Windowsom musisz się upewnić, że drukarka działa dobrze pod Linux-em. Jeśli możesz drukować spod Linux-a to ustawienie serwera SMB dla drukarki jest bardzo proste.

Przeczytaj Priniting-HOWTO na temat ustawienia drukarki pod Linux-em.

Ponieważ autor używa drukarki połączonej z Windows NT (bardzo dawno temu - zanim nasza sieć została całkiem przeniesiona na Linuksa), sekcja ta nie powinna być brana za definicję, ale bardziej jako sugestia. Jeśli ktokolwiek ma ochotę się podzielić szczegółami na temat innych konfiguracji proszę o kontakt, aby ta sekcja mogła zostać skończona: dwood@plugged.net.au.

Dodaj konfigurację na temat drukowania do 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 = Wszystkie drukarki 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

Upewnij się, że ścieżka do drukarki (w tym wypadku w sekcji ]ljet[) jest taka sama jak katalog zadań w `etc/printcap`.

Linie:

         printcap name = /etc/printcap
         load printers = yes

decydują czy wszystkie drukarki zdefiniowane w `/etc/printcap` powinny być załadowane. Jeśli to zrobisz, to nie ma sensu konfigurować drukarek indywidualnie. Sekcja [printers] określa ustawienia dla drukarek, które chcesz wyraźnie zdefiniować. Jeśli twój system drukowania nie działa w ten sposób (BSD), to musisz skonfigurować fałszywy plik konfiguracyjny dla drukarek (albo użyć techniki z poleceniem 'print'; zobacz dalej). Więcej informacji na temat drukowania znajdziesz w Printing-HOWTO.

Pożyteczną techniką testowania połączenia sieciowego jest zmiana polecenia print na:

         print command = cp %S /tmp/print.%P.%S

Można potem przeanalizować plik wynikowy.

UWAGA: Są pewne problemy przy udostępnianiu drukarki Unixowej przez Sambę komputerom z Windows NT. Jeden problem to taki, żeby NT widziało poprawnie drukarkę. Aby go zlikwidować przeczytaj plik `docs/WinNT.txt`, który jest dostarczany wraz z dystrybucją. Drugi problem to hasła. Przeczytaj ten sam plik, aby rozwiązać ten problem.

Oleg L. Machulskiy (machulsk@shade.msu.ru) proponuje, że lepszym poleceniem byłoby:

           print command = smb2ps %s | lpr -r -h -P %p

gdzie smb2ps to skrypt zamieniający plik otrzymany z Windows na bardziej użyteczny PostScript. Musi on odciąć pierwsze 3 linie i ostatnie dwie ponieważ te linie zawierają pewne kody PJL lub PCL.

Takie podejście jest potrzbne tylko wtedy jeśli Windows u ciebie drukuje PCL a nie prawdziwy PostScript. Dowiedziałem się, że Windows 95/98/NT nie posiadają same z siebie sterownika do PostScriptu, ale sterownik "Digital turbo Printserver 20" jest dobrym zamiennikiem takiego w większości przypadków. Słyszałem także, że sterownik "Apple LaserWriter II NTX" działa dobrze.

Jeff Stern (jstern@eclectic.ss.uci.edu) zgłosił coś takiego, co może niektórym z was pomóc:

--------------------------%<----------------------------------

Mój problem polegał na tym, że mogłem drukować na drukarce z samego Linuksa, ale nie mogłem drukować na niej z Windows 95. Kiedy próbowałem polecenia smbclient \\eclectic\belen -P i potem próbowałem wydrukować plik pojawiały się komunikaty o braku dostępu (access denied). Tak więc ustawiłem dla katalogu `/var/spool/lpd/lp1` atrybuty 777. Przykro mi, ale musiałem to zrobić. Mogłem też wszystkich użytkowików zapisać do grupy 'lp' i ustawić takie prawa dla tej grupy, albo zmienić właściciela grupowego katalogu na 'users' ... . Ale jak na razie to działa z prawami root:lp 777.

Inną rzeczą jaką administratorzy muszą wiedzieć, to fakt, że nazwa konta,z którego użytkownik próbuje drukować z Windows, musi istnieć także na Linuksie. I tak: jeśli na Windows jest użytkownik 'joe', ti na Linuksie musi być też użytkownik 'joe'. Hasło logowania użytkownika 'joe' będzie hasłem dostępu do drukarki na Linuksie. Użytkownik będzie zapytano o to hasło podczas dodawania drukarki sieciowej do swojego komputera.

Myślałem, że to nie będzie problemem u mnie, bo ustawiłem swoją drukarkę jako 'public' (ogólnie dostępną) w `/etc/smb.conf`. Ale jednak wciąż jest pytanie o hasło. Windows nie daje niestety możliwości podania innego loginu dla drukarki zdalnej. Używa po prostu tego, którym zalogowałeś się do Windows.

--------------------------%<----------------------------------

Dr. Michael Langner (langner@fiz-chemie.de) wskazuje, że problemu z prawami dostępu dla katalogu `/var/spool/lpd/` można uniknąć przez użycie takich ustawień:

    path = /tmp
    print command = lpr -r -P%p %s

Czasami pojawi się błąd podczas przetwarzania PostScriptu z Windows, który powoduje wydrukowanie dodatkowej strony na końcu każdego zadania. Na początku każdej takiej strony znajduje się ''"%%[ Lastpage ]%%". Zdarza się to tylko w Windows 95/98 i spowodowane jest błędami w PostScripcie.

Jednym ze sposobów, aby sobie z tym poradzić jest użycie skryptu usuwającego ten kawałek złego PostScriptu z zadania wydruku. Innym sposobem jest znalezienie lepszego sterownika do PostScriptu do Windows. Najlepszym sposobem jest prawdopodobnie użycie LPRng zamiast PostScriptu do drukowania na serwerze Samby.

Erik Ratcliffe (erik@caldera.com) z Caldery powiedział mi, że używanie LPRng oznacza, że na maszynach z Windows może byc użyty każdy sterownik. Na serwerze Samby, używali oni takiego pliku `/etc/printcap`:

           raw:\
                   :rw:sh:
                   :lp=/dev/lp1
                   :sd=/var/spool/lpd/raw
                   :fx=flp

LPRng nie wyamaga znaków ':\' na końcu każdej linii. Wciąż potrzebna jest pozycja dotycząca drukarek w pliku `/etc/smb.conf`. Polecenie 'print' musi używać drukarki zdefiniowanej jako "raw" w `/etc/printcap` i dane muszą być wysyłane do tej drukarki binarnie. Spróbuj użyc poniższej linii:

           print command = lpr -b -Praw %s

Możliwe też, że będziesz musiał skonfigurować kolejkowanie na Windows 95, tak żeby wysyłać wydruki bezpośrednio do drukarki zamiast je kolejkować.

## 9. Udostępnianie drukarki spod Windows komputerom z Linux-em.

Aby udostępnić drukarkę spod Windows-ów musisz zrobić następujące rzeczy:

1. Musisz mieć poprawne pola w `/etc/printcap` i muszą one odpowiadać lokalnej strukturze katalogów (katalog dla drukarki itp.)
2. Musisz mieć skrypt `/usr/bin/smbprint`. Skrypt ten znajduje się w źródłach Samby, ale nie w każdym pakiecie binarnym. Poniżej znajduje się trochę zmodyfikowana wersja tego skryptu.
3. Jeśli chcesz zamieniać pliki ASCII na PostScript, musisz mieć nenscript albo jego ekwiwalent. nenscript jest konwerterem PostScript-owym i jest z reguły instalowany w `/usr/bin`.
4. Możesz ułatwić drukowanie poprzez Sambę pisząc skrypt. Poniżej podany jest prosty skrypt w Perl-u obsługujący pliki ASCII, PostScript i stworzony PostScript.
5. Mógłbys też użyć MagicFilter do powyższych zadań. Szczegóły na temat konfiguracji tego filtru są podane za skryptem w perlu. Zaletą tego filtru jest znajomość wielu formatów plików i umiejętność ich konwersji.

Poniższe pola w `/etc/printcap` są dla drukarki HP 5MP dołączonej do komputera z Windows NT.

         cm - komentarz; lp - urządzenie, na które ma być wysłany wydruk;
         sd - katalog zadań dla drukarki (na lokalnym komputerze); af -
       katalog accounting; mx - maksymalny rozmiar pliku (0 - bez
       ograniczenia); if - nazwa filtru wejściowego (skryptu).

Więcej informacji znajdziesz w Printing-HOWTO lub w podręczniku systemowym dla "printcap".

     etc/printcap
       #
       # //zimmerman/oreilly przez smbprint
       #
       lp:\ cm=HP 5MP Postscript OReilly na zimmerman:\ lp=/dev/lp1:\
               :sd=/var/spool/lpd/lp:\ af=/var/spool/lpd/lp/acct:\ mx#0:\
               :if=/usr/bin/smbprint:

Upewnij się, że katalogi zadań i zliczania (accounting) istnieją i są zapisywalne oraz że if ma poprawną ścieżkę do scryptu `smbprint` (patrz poniżej) i że lp wskazuje poprawne urządzenie (plik specjalny w katalogu `/dev`)

Następnym krokiem jest skrypt `smbprint`. Zwykle znajduje się on w `/usr/bin` i jest przypisywany Andrew Tridgellowi - osobie, która stworzyła Sambę o ile wiem. Przychodzi on wraz z dystrybucją źródeł Samby, ale nie ma go w dystrybucji binariów, więc go tutaj stworzyłem.

Możesz przejrzeć go dokładniej. Przerobiłem go trochę, ponieważ przeróbki wydawały mi się użyteczne.

       #!/bin/sh
       # Skrypt ten jest filtrem wejściowym do drukowania na drukarce
       # dołączonej do Unix-a. Używa programu smbclient do drukowania
       # pliku. Na przykład twój printcap mógłby wyglądać nastepująco:
       #
       #
       # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
       #
       #
       # Stworzyłby on drukarkę o nazwie smb, która drukowałaby poprzez
       # ten skrypt. Musiałbyś stworzyć katalog zadań /usr/spool/smb z
       # odpowiednimi dla twojego systemu prawami dostępu i właścicielem.
       #
       # Ustaw następujące rzeczy na serwer i serwis przez, który chcesz
       # drukować. W tym przykładzie mam PC-ta z WfWg o nazwie "lapland",
       # który ma drukarkę o nazwie printer bez hasła.
       #
       #
       # W dalszej części skrypt został przerobiony przez hamilton@ecnz.co.nz
       # (Michael Hamilton, tak aby serwer, serwis i hasło mogły być
       # przeczytane z pliku /usr/var/spool/lpd/PRINTNAME/.config
       #
       # Aby to działało /etc/printcap musi mieć pole 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:
       #
       # Plik /usr/var/spool/lpd/PRINTNAME/.config powinien zawierać:
       #   server=PC_SERVER service=PR_SHARENAME password="password"
       #
       # Np. server=PAULS_PC service=CJET_371 password=""

       #
       # Plik, do którego mają byc zapisywane wiadomości ze śledzenia;
       # możesz zmienić na /dev/null jeśli chcesz:
       #
       logfile=/tmp/smb-print.log logfile=/dev/null

       #
       # Ostatnim parametrem do filtra jest nazwa pliku accounting.
       #
       spool_dir=/var/spool/lpd/lp config_file=$spool_dir/.config

       # Powinien czytać te zmienne z pliku konfiguracyjnego: serwer
       # serwis hasło użytkownik
       eval `cat $config_file`

       # Trcohę pomocy, zmień >> na > jeśli chcesz zachować trochę
       # miejsca na dysku.
       #
       echo "server $server, service $service" >> $logfile

       (UWAGA Możesz dodać linię `echo translate' jesli chcesz
       # automatycznego tłumaczenia CR/LF podczas drukowania.
            echo translate echo "print -" cat
       ) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user
       -N -P >>
       $logfile

Większość dystrybucji Linux-owych posiada nenscript do zamiany dokumentów ASCII na PostScript. Następujący skrypt w Perl-u ułatwia życie stwarzając prosty interfejs dla drukowania w Linux-ie przez smbprint.

         Stosowanie: print [-a|c|p] <nazwa_pliku>
         -a drukuje <nazwa_pliku> jako ASCII; c drukuje <nazwa_pliku>
         sformatowane jako źródło; -code p drukuje <nazwa_pliku> jako
         PostScript.
         Jeśli nie ma żadnej opcji, print próbuje odgadnąć typ pliku i
        odpowiednio go wydrukować.

Użycie smbprint do drukowania plików ASCII powoduje obcinanie długich linii. Ten skrypt dzieli długie linie w miejscu spacji (zamiast w środku słowa) jeśli jest to możliwe.

Formatowanie źródła odbywa sie przy pomocy programu nenscript. Bierze on plik ASCII i formatuje go w dwie kolumny z dodatkowym nagłówkiem (data, nazwa pliku, itp.) Zlicza także ilość linii. Wzorując się na tym przykładzie możesz zrobić inne typy formatowania.

Dokumenty PostScript-owe są już sformatowane więc przechodzą bezpośrednio do drukarki.

     usr/bin/perl

    # Skrypt:   print Autorzy: Brad Marshall, David Wood
    #           Plugged In Communications Date: 960808
    #
    # Skrypt do drukowania na drukarce oreilly, która jest dołączona do
    # komputera zimmerman. Opis działania: Jako argumenty przyjmuje pliki
    # różnych typów i wysyła je odpowiednio do skryptu drukujacego Samby
    #
    # Obecnie obsługiwane typy plików:
    #
    # ASCII         - Upewnij się, że linie dłuższe niż $line_length zostały
    #               podzielone w miejscu spacji.
    # PostScript    - Nie robi nic.
    # Code          - Formatuje na PostScript używając "nenscript", aby wszystko
    #               było odpowiednio wyświetlone (ułożenie, czcionki, itd.)
    #
    #
    # Ustaw maksymalną ilość znaków w linii dla plików ASCII. line_length
    $= 76;

    # Ustaw ścieżkę i nazwę skryptu drukującego Samby print_prog =
    $"/usr/bin/smbprint";

    # Ustaw ścieżkę i nazwę "nenscript-u" (zamiana ASCII-->PostScript)
    $nenscript = "/usr/bin/nenscript";

    unless ( -f $print_prog ) { die "Can't find $print_prog!";
    }
    unless ( -f $nenscript ) { die "Can't find $nenscript!";
    }

    &ParseCmdLine(@ARGV);

    # DBG print "filetype is $filetype\n";

    if ($filetype eq "ASCII") { ero;wrap($line_length); elsif ($filetype eq
            &"code") {
    } ero;codeformat; elsif ($filetype eq "ps") {
            &createarray; else {
    } print "Sorry..no known
            &file type.\n"; exit
    } 0;
    }
    # Wyślij tablcę do smbprint open(PRINTER, "|$print_prog") || die "Can't
    open $print_prog: $!\n"; foreach
    $line (@newlines) {
            print PRINTER $line;
    }
    # Wyślij dodatkowy znak LF jeśli plik ma niekompletną ostatnią linię. print
    PRINTER "\n"; close(PRINTER); print "Completed\n"; exit 0;

    # --------------------------------------------------- #
    #        Wszystko poniżej jest procedurą              #
    # --------------------------------------------------- #

    sub ParseCmdLine { Interpretuje wiersz poleceń, szukając jakiego typu jest
            # plik

            # Gets $arg and $file to be the arguments (if they exists) and the
            # filename
            if ($#_ < 0) { ero;usage;
            }
            # DBG foreach $element (@_) { print "*$element* \n";
    #       }

            $arg = shift(@_); if ($arg =~ /\-./) { cmd = $arg; DBG print "\$cmd
            found.\n";

                    $file = shift(@_); else { file = $arg;
            }

            # Definiowanie typu pliku dopóki ($cmd) { Nie mamy argumentów

                    if ($file =~ /\.ps$/) { filetype = "ps"; elsif ($file =~
                            $/\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/)
                            ${ filetype = "code"; else { filetype = "ASCII";
                    }

                    # Przerób $file odpowiednio do jego typu i zwróć $filetype
            } else { Mamy typ pliku w $arg if ($cmd =~ /^-p$/) {
                    filetype = "ps"; elsif ($cmd =~
                            $/^-c$/) { filetype
                    } = "code"; elsif ($cmd =~
                            $/^-a$/) {
                    } filetype = "ASCII"
                    }
            }
    }

    sub usage { print " Stosowanie: print [-a|c|p] <plik>
           -a drukuje <plik> jako ASCII c drukuje <plik> sformatowany jako
             źródło
           -code p drukuje <plik> jako PostScript
            Jeśli nie ma żadnej opcji, print próbuje odgadnąć typ pliku i
            odpowiednio go wydrukować.\n
    ";
            exit(0);
    }

    sub wrap { Stwórz tablicę linii w pliku, gdzie każda linia jest krótsza od
            # podanej ilości znaków i jest podzielona tylko w miejscach spacji

            # Pobierz ilość znaków jaka może być w linii.  limit =
            $pop(@_);

            # DBG print "Entering subroutine wrap\n"; print "The line length
            #limit is $limit\n";

            # Wczytaj plik, sformatuj i umieść w tablicy.  open(FILE,
            "<$file") || die "Can't open $file: $!\n"; while(<FILE>) {
                    $line = $_;

                    # DBG print "The line is:\n$line\n";

                    # Podziel linię jeśli jest dłuższa niż podana ilość znaków.  while (
                    length($line) > $limit ) {

                            # DBG print "Wrapping...";

                            # Pobierz pierwsze $limit+1 znaków.  part =
                            $substr($line,0,$limit +1);

                            # DBG print "The partial line is:\n$part\n";

                            # Sprawdź czy ostatni znak jest spacją.
                            $last_char = substr($part,-1, 1);
                            if ( " " eq $last_char ) { Jeśli tak, wydrukuj resztę.

                                # DBG print "The last character was a space\n";

                                substr($line,0,$limit + 1) = "";
                                substr($part,-1,1) = "";
                                push(@newlines,"$part\n");
                            } else { Jeśli nie, znajdź ostatnią spację w
                                    # pod-linii i drukuj do niej

                                # DBG print "The last character was not a
                                #space\n";

                                 # Usuń znaki dalsze niż $limit
                                 substr($part,-1,1) = ""; Odwróć linię
                                 # aby ułatwić odnajdywanie ostatniej spacji
                                 $revpart = reverse($part);
                                 $index = index($revpart," ");
                                 if ( $index > 0 ) {
                                   substr($line,0,$limit-$index) = "";
                                   push(@newlines,substr($part,0,$limit-$index)
                                       . "\n"); else { Nie było spacji w linii
                                 } więc
                                   # wydrukuj do $limit.
                                   substr($line,0,$limit) = "";
                                   push(@newlines,substr($part,0,$limit)
                                       . "\n");
                                 }
                            }
                    }
                    push(@newlines,$line);
            }
            close(FILE);
    }

    sub codeformat { Wywołaj procedurę wrap i przefiltruj przez nenscript
            &wrap($line_length);

            # Przepuść wynik przez nenscript, aby utworzyć plik PostScript,
            # który pasuje do jakiegoś przyzwoitego formatu źródeł do drukowania
            # (ułożenie, czcionki Courier, ilość linii). Najpierw wydrukuj to do
            # pliku tymczasowego.
            $tmpfile = "/tmp/nenscript$$";
            open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") || die "Can't
                    open nenscript: $!\n"; foreach $line (@newlines)
            {
                    print FILE $line;
            }
            close(FILE);

            # Wczytaj plik tymczasowy spowrotem do tablicy, tak aby mógł być
            # wysłany do skryptu print Samby.
            @newlines = ("");
            open(FILE, "<$tmpfile") || die "Can't open $file: $!\n";
            while(<FILE>) {
                    push(@newlines,$_);
            }
            close(FILE); system("rm $tmpfile");
    }

    sub createarray { Stwórz tablicę dla PostScript-u open(FILE, "<$file") ||
            # die "Can't
            open $file: $!\n"; while(<FILE>) {
                    push(@newlines,$_);
            }
            close(FILE);
    }

Teraz sposób z MagicFilter. Dziękuję za tę informację Alberto Menegazzi ( flash.egon@iol.it).

Alberto pisze:

--------------------------%<----------------------------------

1) Zainstaluj MagicFilter dla odpowiednich drukarek w `/usr/bin/local/`, ale nie umieszczaj w `/etc/printcap` tego co sugeruje dokumentacja do tego filtru.

2) Utwórz plik `/etc/printcap` na podobieństwo tego poniżej (to jest konfiguracja dla mojej drukarki LaserJet 4L):

    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:

Powinieneś wiedzieć, że lp=/dev/... otwierane jest z lokowaniem, tak więc powinny być używane virtualne urządzenia; jedno dla każdej odległej drukarki.

Np. stworzone przez 'touch /dev/ljet4l'.

3) Stwórz filtr `/usr/local/bin/main-filter` jak poniżej:

    #! /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

P.S. Oto cytat z mini-HOWTO Print2Win na temat lokowania i po co tworzyć wirtaulne drukarki.

---Początek cytatu

Wskazówka od Ricka Bresslera:

Dobra rada. Ja używam czegoś bardzo podobnego. Jedna pomocna wskazówka, to poniżej nie jest dobrym pomysłem:

            :lp=/dev/null:\

lpr otwiera plik podany w ustawieniu lp= na wyłączność. Robi tak, żeby zapobiec zapisywaniu przez wiele procesów do tej samej drukarki w tym samym czasie.

Ubocznym efektem tego jest, że w twoim przypadku 'eng' i 'colour' nie mogą drukować w tym samym czasie (zwykle mniej lub bardziej przezroczyste, ponieważ będą raczej drukowały szybko no i jest też kolejka. Tak że nie powinieneś niczego zauważyć). Ale każdy inny proces, który spróbuje zapisać do /dev/null przerwie działanie.

W systemie jednoużytkownikowym nie jest to problem. Ja mam system z 50. drukarkami - i tam byłby to problem.

Rozwiązaniem jest stworzenie fałszywej drukarki dla każdej. Np. 'touch /dev/eng'.

Zmodyfikowałem pola w pliku `/etc/printcap` powyżej i wziąłem pod uwagę sugestie Ricka. Wykonałem te dwa polecenia:

    #touch /dev/eng
    #touch /dev/colour

---Koniec cytatu

--------------------------%<----------------------------------

## 10. Tworzenie kopii zapasowej komputerów z Windows na Linuksie.

Adam Neat ( adamneat@ipax.com.au) uprzejmie podał następujący skrypt, służący do robienia kopii zapasowych Windowsów na Linuksie przy pomocy narzędzia smbclient. Adam twierdzi, że używa go do robienia kopii zapasowych Windows 3.x i NT na Linuksie na napędzie DAT SCSI.

Adam nie jest dumny ze stylu kodowania, ale to działa. Jak ja to lubię mówić: "Jeśli działa i jest głupie, to nie jest głupie".

W skrypcie tym agnea1 jest nazwą użytkownika na Linuksie, który robi kopie.

    #!/bin/bash

    clear
    echo Initialising ...
    checkdate=`date | awk '{print $1}'`

    if [ -f "~agnea1/backup-dir/backup-data" ]; then

            echo "ERROR: No config file for today!"
            echo "FATAL!"
            exit 1
    fi

    if [ -d "~agnea1/backup-dir/temp" ]; then

            echo "ERROR: No tempoary directory found!"
            echo
            echo "Attempting to create"
            cd ~agnea1
            cd backup-dir
            mkdir temp
            echo "Directory Made - temp"
    fi

    if [ "$1" = "" ]; then

            echo "ERROR: enter in a machine name (ie: cdwriter)"
            exit 1
    fi

    if [ "$2" = "" ]; then

            echo "ERROR: enter in a SMB (Lan Manager) Resource (ie: work)"
            exit 1
    fi

    if [ "$3" = "" ]; then

            echo "ERROR: enter in an IP address for $1 (ie:
            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 "Backuping for Monday"
                    cat backup-data | /usr/local/samba/bin/smbclient
                    \\\\$1\\$2 -I$3 -N echo "Complete"

                            if [ -d "~agnea1/backup-dir/Monday" ]; then
                                    echo "Directory Monday Not found ...
                                    making" mkdir
                                    ~agnea1/backup-dir/Monday
                            fi

                    echo "Archiving ..."
                    cd ~agnea1/backup-dir/temp
                    tar -cf monday.tar *                echo "done ..."
                    rm ~agnea1/backup-dir/Monday/monday.tar
                    mv monday.tar ~agnea1/backup-dir/Monday
                    ;;

            Tue)
                    echo "Backuping for Tuesday"
                    cat backup-data | /usr/local/samba/bin/smbclient
                    \\\\$1\\$2 -I$3 -N echo "Complete"

                            if [ -d "~agnea1/backup-dir/Tuesday" ]; then
                                    echo "Directory Tuesday Not found ...
                                    making" mkdir
                                    ~agnea1/backup-dir/Tuesday
                            fi
                    echo "Archiving ..."
                    cd ~agnea1/backup-dir/temp
                    tar -cf tuesday.tar *
                    echo "done ..."
                    rm ~agnea1/backup-dir/Tuesday/tuesday.tar
                    mv tuesday.tar ~agnea1/backup-dir/Tuesday
                    ;;

            Wed)
                    echo "Backuping for Wednesday"
                    cat backup-data | /usr/local/samba/bin/smbclient
                    \\\\$1\\$2 -I$3 -N echo "Complete"

                            if [ -d "~agnea1/backup-dir/Wednesday" ]; then
                                    echo "Directory Wednesday Not found
                                    ... making" mkdir
                                    ~agnea1/backup-dir/Wednesday
                            fi
                    echo "Archiving ..."
                    cd ~agnea1/backup-dir/temp
                    tar -cf wednesday.tar *
                    echo "done ..."
                 rm ~agnea1/backup-dir/Wednesday/wednesday.tar
                    mv wednesday.tar ~agnea1/backup-dir/Wednesday
                    ;;

            Thu)
                    echo "Backuping for Thrusday"
                    cat backup-data | /usr/local/samba/bin/smbclient
                    \\\\$1\\$2 -I$3 -N echo "Complete"

                            if [ -d "~agnea1/backup-dir/Thursday" ]; then
                                    echo "Directory Thrusday Not found ...
                                    making" mkdir
                                    ~agnea1/backup-dir/Thursday
                            fi
                    echo "Archiving ..."
                    cd ~agnea1/backup-dir/temp
                    tar -cf thursday.tar *
                    echo "done ..."
                    rm ~agnea1/backup-dir/Thursday/thursday.tar
                    mv thursday.tar ~agnea1/backup-dir/Thursday
                    ;;

            Fri)
                    echo "Backuping for Friday"
                    cat backup-data | /usr/local/samba/bin/smbclient
                    \\\\$1\\$2 -I$3 -N echo "Complete"

                            if [ -d "~agnea1/backup-dir/Friday" ]; then
                                    echo "Directory Friday Not found ...
                                    making" mkdir
                                    ~agnea1/backup-dir/Friday
                            fi
                    echo "Archiving ..."
                    cd ~agnea1/backup-dir/temp
                    tar -cf friday.tar *
                    echo "done ..."
                    rm ~agnea1/backup-dir/Friday/friday.tar
                    mv friday.tar ~agnea1/backup-dir/Friday
                    ;;

            *)
                    echo "FATAL ERROR: Unknown variable passed for day"
                    exit 1;;

    esac
    ###########

## 11. Prawa autorskie.

Prawa autorskie tego HOWTO należą do Davida Wooda © 1996-1999, Można je reprodukować w każdej postaci oraz dystrybuować bez ograniczeń tak długo jak długo nie będzie zmieniana jego zawartość włącznie z tym stwierdzeniem.

## 12. Podziękowania.

Brad Marshall ( bmarshall@plugged.net.au) and Jason Parker ( jparker@plugged.net.au) dostarczyli czasu, cierpliwości, trochę skryptów i badań.

Adam Neat ( adamneat@ipax.com.au) dostarczył skrypt w bashu do robienia kopii zapasowych Windows na Linuksie.

Matthew Flint ( matthew@philtrum.demon.co.uk) powiedział mi o ustawienia interfaces w `smb.conf`.

Oleg L. Machulskiy ( machulsk@shade.msu.ru), Jeff Stern ( jstern@eclectic.ss.uci.edu), Dr. Michael Langner ( langner@fiz-chemie.de i Erik Ratcliffe ( erik@caldera.com) zasugerowali modyfikacje w rozdziale na temat udostępniania drukarki na Linuksie maszynom z Windows.

Alberto Menegazzi ( flash.egon@iol.it) dostarczył konfigurację MagicFilter.

Andrea Girotto ( icarus@inca.dei.unipd.it) dostarczył wielu wartościowych sugestii na temat całego dokumentu.

Dzięki także wszystki międzynarodowym tłumaczom, którzy umożliwili czytanie tego HOWTO ludziom nie znającym angielskiego: Takeo Nakano ( nakano@apm.seikei.ac.jp), Klaus-Dieter Schumacher ( Klaus-Dieter.Schumacher@fernuni-hagen.de), Andrea Girotto ( icarus@inca.dei.unipd.it) i wielu innym, z którymi nie mam kontaktu.

## 12.1 Od tłumacza.

Tłumaczenie to jest chronione prawami autorskimi © Bartosza Maruszewskiego. Dozwolone jest rozprowadzanie i dystrybucja na prawach takich samych jak dokument oryginalny.

Jeśli znalazłeś jakieś rażące błędy ortograficzne, gramatyczne, składniowe, techniczne to pisz do mnie:

B.Maruszewski@jtz.org.pl

Oficjalną stroną tłumaczeń HOWTO jest http://www.jtz.org.pl/

Aktualne wersje przetłumaczonych dokumentów znajdują się na tejże stronie. Dostępne są także poprzez anonimowe ftp pod adresem ftp.jtz.org.pl w katalogu `/HOWTO/`.

Przetłumaczone przeze mnie dokumenty znajdują się także na mojej stronie WWW. Są tam też odwołania do Polskiej Strony Tłumaczeniowej.

Kontakt z naszą grupą, grupą tłumaczy możesz uzyskać poprzez listę dyskusyjną jtz@ippt.gov.pl. Jeśli chcesz sie na nią zapisać, to wyślij list o treści `subscribe jtz Imię Nazwisko` na adres `majordomo@ippt.gov.pl`