Konfiguracja Samba3, CUPS i ClamAV w Gentoo
1.
Wprowadzenie
Cel
Ten przewodnik ma pomóc w przebudowie sieci, w której klienci mówią różnymi
językami, na taką w której każdy klient mówi tym samym językiem. Ostatecznym
celem jest stworzenie wspólnego środowiska sieciowego dla wielu różnych
architektur i systemów.
Wskazówki w tym przewodniku są krokiem w kierunku wspólnej koegzystencji systemu
Windows oraz wszystkich rodzajów systemów *nix.
Ten przewodnik w początkowej fazie był tylko zbiorem pytań i odpowiedzi. Jego
intencją było ukazanie zespołu funkcji oraz mocy systemu Gentoo, narzędzia
Portage oraz flag USE. Podobnie jak w innych projektach, szybko zorientowano się
czego brakuje królestwu Gentoo: nie było właściwie żadnego przewodnika o Sambie
dla użytkowników Gentoo. Właśnie użytkownicy Gentoo są bardziej wymagający niż
posiadacze innych dystrybucji. Wymagają wydajności, elastyczności oraz
dostosowania do własnych potrzeb. Jednak nie znaczy to, że ten przewodnik nie
może być wykorzystany w innych dystrybucjach. Lecz został on stworzony do pracy
z wysoko zindywidualizowaną wersją Samby.
Ten przewodnik opisuje jak współdzielić pliki oraz drukarki pomiędzy
komputerami z systemem Windows, a tymi z systemami *nix.
Kilka tematów poruszonych tutaj wybiega poza obszar tego przewodnika. Wtedy
zostanie to wyraźnie podkreślone.
Ten przewodnik jest oparty na połączeniu doskonałego przewodnika umieszczonego
na Forum Gentoo przez Andreasa
"daffa" Ntaflosa oraz zgromadzonej przez Joshuę Prestona wiedzy. Odnośnik do tej
dyskusji znajduje się poniżej:
Zanim zaczniemy
Istnieje kilka przewodników dotyczących konfiguracji CUPS i/lub Samby, należy je
również przeczytać, gdyż mogą w nich być rzeczy nie zawarte w tym przewodniku.
Jednym z tych dokumentów jest bardzo użyteczny oraz dobrze napisany Drukowanie w Gentoo, znajdziemy w nim
tematy, które nie są tu poruszane m.in. problemy konfiguracyjne oraz ustawianie
konkretnych drukarek.
Przegląd
Po przedstawieniu wszystkich flag USE, będziemy poruszali tematy zgodnie z
następującą listą:
- Na serwerze Samby:
- Instalacja oraz konfiguracja Samba
- Instalacja oraz konfiguracja CUPS
- Dodawanie drukarki do CUPS
- Dodawanie sterowników PS do klientów z systemem Windows
- Na klientach UNIX-owych:
- Instalacja oraz konfiguracja CUPS
- Konfiguracja domyślnej drukarki
- Montowanie zasobów współdzielonych Windows lub Samby
- Na klientach Windowsowych:
- Konfiguracja drukarki
- Dostęp do zasobów współdzielonych Samby
Wymagania
Potrzebujemy następujących pakietów i urządzeń:
- net-fs/samba
- net-print/cups
- net-print/foomatic
- net-print/hplip (jeśli mamy drukarkę HP)
- Dowolne jądro (serii 2.6)
-
Drukarka (PS lub nie-PS)
-
Działająca sieć (w domu, biurze, itd.) składająca się z co najmniej 2 maszyn
Głównym pakietem, którego będziemy używać jest net-fs/samba, jednakże,
potrzebujemy również jądro z załączonym wsparciem dla CIFS, w celu montowania
zasobów współdzielonych Samby lub Windows z innego komputera. CUPS zostanie
zainstalowany, jeśli jeszcze nie jest.
2.
Zaznajamianie się z Sambą
Flagi USE
Przed zainstalowaniem czegokolwiek, przyjrzyjmy się niektórym flagom USE
dostępnym dla Samby.
Listing 2.1: Samba używa następujących flag USE |
kerberos acl cups ldap pam readline python winbind
|
W zależności od topologii sieci oraz konkretnych wymagań serwera, flagi USE
przedstawione poniżej zdefiniują co należy włączyć lub wyłączyć podczas
instalacji Samby.
| Flaga USE |
Opis |
| kerberos |
Włączenie wsparcia dla Kerberos. Serwer będzie tego potrzebował, jeśli mamy
zamiar dołączyć do istniejącej domeny lub Active Directory. Po więcej
informacji należy zobaczyć poniższą uwagę.
|
| acl |
Włącza Access Control Lists. Wsparcie ACL w Sambie używa poprawionych ext2,
ext3 lub SGI XFS w celu właściwiego funkcjonowania, gdyż rozszerza ona
bardziej szczegółowy dostęp do plików lub katalogów, znacznie bardziej niż
typowe schematy GID lub UID systemów *nix.
|
| cups |
Załącza wsparcie dla Common Unix Printing System. To dostarcza interfejs
pozwalający, aby lokalne drukarki CUPS mogły być udostępnione innym systemom
w sieci.
|
| ldap |
Włącza Lightweight Directory Access Protocol (LDAP). Jeśli Samba ma używać
Active Directory, wtedy ta opcja musi być użyta. Zostanie to wykorzystane,
gdy Samba będzie potrzebowała się zalogować lub dostarczyć wejście do domeny
lub serwera Active Directory. Flaga kerberos jest wymagana dla prawidłowego
funkcjonowania tej opcji.
|
| pam |
Włączanie wsparcia dla pluggable authentication modules (PAM). Dostarcza to
możliwość uwierzytelniania użytkowników na serwerze Samba, który jest
wymagany jeśli użytkownik musi się logować do serwera. Flaga kerberos jest
zalecana razem z tą opcją.
|
| readline |
Łączy Sambę z libreadline. Ta flaga jest mocno polecana i nie powinna być
wyłączana.
|
| python |
Dowiązanie Pythona z interfejsem API. Dostarcza interfejsu API, który
pozwoli Pythonowi na połączenie z Sambą.
|
| winbind |
Winbind pozwala na zunifikowanie sposobu logowania się w domenie. Korzysta z
uniksowych implementacji windowsowych usług RPC, bibliotek PAM oraz
zawartej w bibliotece C obsługi nazw. Pozwala użytkownikom Windows NT
pracować w sieciach uniksowych tak jakby mieli system uniksowy.
|
Kilka rzeczy o flagach USE oraz funkcjach Samby o których warto wspomnieć:
-
ACL na ext2/3 jest wdrażane poprzez rozszerzone właściwości (ang. extended
attributes (EA)). Opcje jądra EA oraz ACL dla ext2 i/lub ext3 należy włączyć
(w zależności jakiego systemu plików używamy).
-
Funkcje Active Directory, ACL i PDC wykraczają poza ten przewodnik, więcej
użytecznych informacji można znaleźć na stronach:
3.
Instalacja oprogramowania serwera
Instalacja Samby
Po pierwsze: należy się upewnić, że wszystkie nazwy hostów w sieci są
rozwiązywane poprawnie. Uzyskamy to jeśli w naszej sieci będziemy posiadali
działający serwer DNS bądź odpowiednie wpisy w pliku /etc/hosts na
każdym z komputerów. cupsaddsmb często zawodzi jeśli nazwy hostów nie
wskazują poprawnych maszyn.
Na szczęście możemy teraz dokonać oceny czego nam aktualnie potrzeba, aby używać
Samby w naszym konkretnym przypadku. Ustawieniami użytymi w tym przewodniku są:
Aby zoptymalizować wydajność, wielkość oraz czas kompilacji, flagi USE są
specjalnie włączane lub wyłączane.
Listing 3.1: Instalacja Samby |
# echo "net-fs/samba readline cups pam" >> /etc/portage/package.use
# emerge net-fs/samba
|
To zainstaluje Sambę oraz CUPS (jeśli CUPS nie jest jeszcze zainstalowany).
Instalujemy foomatic
Listing 3.2: Instalacja foomatic |
# emerge net-print/foomatic
|
Instalujemy net-print/hplip
Ten pakiet jest wymagany tylko w przypadku używania drukarki HP.
Listing 3.3: Instalacja hplip |
# emerge net-print/hplip
|
4.
Konfiguracja serwera
Konfiguracja Samby
Głównym plikiem konfiguracyjnym Samby jest /etc/samba/smb.conf.
Jest on podzielony na części za pomocą [nazwasekcji]. Komentarze są po znaku #
lub ;. Przykładowy smb.conf jest dołączony poniżej z
komentarzami, sugestiami oraz modyfikacjami. Jeśli potrzebnych jest więcej
informacji, wtedy należy spojrzeć do strony manuala smb.conf,
zainstalowanego przykładowego pliku smb.conf.example, strony
domowej Samby lub jakiejkolwiek książki dostępnej na rynku.
Listing 4.1: Przykładowy /etc/samba/smb.conf |
[global]
workgroup =
server string = Samba Server %v
printcap name = cups
printing = cups
load printers = yes
log file = /var/log/samba/log.%m
max log size = 50
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = lo eth0
bind interfaces only = yes
hosts allow = 127.0.0.1 192.168.1.0/24
hosts deny = 0.0.0.0/0
security = share
guest ok = yes
[print$]
comment = Printer Drivers
path = /etc/samba/printer
guest ok = yes
browseable = yes
read only = yes
write list = root
[HPDeskJet930C]
comment = HP DeskJet 930C Network Printer
printable = yes
path = /var/spool/samba
public = yes
guest ok = yes
printer admin = root
[printers]
comment = All Printers
browseable = no
printable = yes
writable = no
public = yes
guest ok = yes
path = /var/spool/samba
printer admin = root
[public]
comment = Public Files
browseable = yes
public = yes
create mode = 0766
guest ok = yes
path = /home/samba/public
|
Ostrzeżenie:
Jeśli lubimy używać konta gościa Samby w celu drukowania dokumentów z klientów
Windowsowych: nie należy ustawiać guest only = yes w części
[global]. Konto gościa stwarza czasem problemy, gdy uruchamiamy
cupsaddsmb z maszyn Windowsowych. Należy spojrzeć poniżej, gdzie jest
omawiany cupsaddsmb oraz problemy jakie mogą z nim wystąpić. Zamiast
tego należy używać konta użytkownika, który ma uprawnienia do korzystania z
drukarki, chociażby printeruser, printer lub printme lub
jakikolwiek inny. To rozwiązanie nie boli, a na pewno uchroni nas przed
niepotrzebnymi problemami.
|
Teraz stworzymy katalogi wymagane do minimalnej konfiguracji Samby, aby móc
współdzielić zainstalowaną drukarkę poprzez sieć.
Listing 4.2: Tworzenie katalogów |
# mkdir /etc/samba/printer
# mkdir /var/spool/samba
# mkdir /home/samba/public
|
Co najmniej jeden użytkownik Samba jest wymagany do zainstalowania sterowniki
drukarki oraz umożliwić innym użytkownikom na łączenie się z drukarką.
Użytkownicy ci muszą być wpisani do pliku systemowego
/etc/passwd.
Listing 4.3: Tworzenie kont użytkowników |
# smbpasswd -a root
# smbpasswd -a nazwaużytkownika
|
Hasła Samby nie muszą być takie same jak hasła systemowe w
/etc/passwd.
Należy również zaktualizować /etc/nsswitch.conf, aby systemy
Windows mogły być łatwo znalezione za pomocą NetBIOS:
Listing 4.4: Edytowanie /etc/nsswitch.conf |
# nano -w /etc/nsswitch.conf
hosts: files dns wins
|
Konfiguracja CUPS
To jest nieco bardziej skomplikowane. Głównym plikiem konfiguracyjnym CUPS
jest /etc/cups/cupsd.conf. Jego struktura przypomina plik
Apache httpd.conf, więc możliwe, że z taką strukturą już się
spotkaliśmy. Nakreślone wpisy w przykładzie należy zmienić:
Listing 4.5: /etc/cups/cupsd.conf |
ServerName PrintServer
ServerAdmin root@PrintServer
AccessLog /var/log/cups/access_log
ErrorLog /var/log/cups/error_log
LogLevel debug
MaxClients 100
BrowseAddress @IF(eth0)
<Location />
Order Deny,Allow
Deny From All
Allow From 192.168.1.*
</Location>
<Location /admin>
AuthType Basic
AuthClass System
Allow From 192.168.1.*
Order Deny,Allow
Deny From All
</Location>
|
Edytujemy /etc/cups/mime.convs, aby odkomentować kilka linii.
Zmiany w mime.convs i mime.types są potrzebne, aby
CUPS mógł drukować dokumenty Microsoft Office.
Listing 4.6: /etc/cups/mime.convs |
application/octet-stream application/vnd.cups-raw 0
|
Edytujemy /etc/cups/mime.types, aby odkomentować kilka linii.
Listing 4.7: /etc/cups/mime.types |
application/octet-stream
|
CUPS musi być uruchomione natychmiast oraz podczas ładowania systemu.
Listing 4.8: Załączanie usługi CUPS |
# rc-update add cupsd default
# /etc/init.d/cupsd restart
|
Instalowanie drukarki dla i z CUPS
Najpierw należy zajrzeć na LinuxPrinting.Org, aby znaleźć oraz
ściągnąć plik PPD dla naszej drukarki oraz CUPS. Aby to wykonać klikamy na
odnośnik Printer Listings, który znajduje się z lewej strony. Wybieramy
producenta oraz model naszej drukarki, np. HP oraz DeskJet 930C. Klikamy "Show".
Na następnej stronie, po przeczytaniu kilku uwag oraz informacji, klikamy
odnośnik "recommended driver". Po czym, ponownie po przeczytaniu kilku uwag,
pobieramy plik PPD z następnej strony. Możliwe, że będziemy musieli ponownie
wybrać producenta oraz model. Przeczytanie CUPS quickstart guide
jest także bardzo pomocne podczas pracy z CUPS.
Teraz mamy plik PPD dla naszej drukarki, aby mogła współpracować z CUPS.
Umieszczamy go w /usr/share/cups/model. PPD dla HP DeskJet 930C
został nazwany HP-DeskJet_930C-hpijs.ppd. Teraz powinniśmy
zainstalować drukarkę. Można to zrobić zarówno poprzez interfejs sieciowy CUPS
jak i poprzez linię poleceń. Interfejs sieciowy znajduje się pod adresem
http://SERWER_WYDRUKU:631, kiedy CUPS jest uruchomiony.
Listing 4.9: Instalacja drukarki poprzez wiersz poleceń |
# lpadmin -p HPDeskJet930C -E -v usb:/dev/ultp0 -m HP-DeskJet_930C-hpijs.ppd
# /etc/init.d/cupsd restart
|
Należy pamiętać, aby dostosować powyższe polecenie do posiadanej drukarki.
Należy się upewnić, że mamy nazwę (argument -p) poprawną (musi ona być
taka sama jaką ustawiliśmy podczas konfiguracji Samby) oraz aby wprowadzić
poprawne usb:/dev/usb/coś, parallel:/dev/coś lub jakiekolwiek inne
urządzenie, którego używamy dla naszej drukarki.
Powinniśmy mieć już dostęp do drukarki poprzez interfejs sieciowy oraz
powinniśmy być w stanie wydrukować stronę testową.
Instalowanie sterowników drukarki systemu Windows
Drukarka działa, więc nadszedł czas, aby zainstalować sterowniki dla klientów
Windowsowych. Samba 2.2 wprowadziła ten zespół funkcji. Będąc w systemie Windows
wchodzimy do "Otoczenie sieciowe", wchodzimy do serwera drukarki i klikamy
prawym przyciskiem na udostępnioną drukarkę wybierając "Połącz", klient
automatycznie ściągnie odpowiednie sterowniki, ominiemy tym samym trudy ręcznej
instalacji sterowników drukarki.
Do tego celu istnieją dwa zbiory sterowników drukarek. Pierwszym są sterowniki
Adobe PS, które mogą być uzyskane ze strony Adobe (sterowniki
drukarki PostScript). Drugim, są sterowniki CUPS PS, które możemy zainstalować
poprzez emerge net-print/cups-windows. Zwróćmy uwagę na to, że wciąż mogą
być zamaskowane poprzez ~arch, więc może być potrzeba dodania ich do
/etc/portage/package.keywords. Zdaje się, że nie ma różnicy w
funkcjonalności tych dwóch sterowników, lecz te spod znaku Adobe PS wymagają
rozpakowania na systemie Windows. Również cała procedura szukania i kopiowania
jest dosyć kłopotliwa. Sterowniki CUPS mają kilka opcji, których brak w
sterownikach Adobe.
Ten przewodnik pokaże jak użyć sterowników Windows:
Listing 4.10: Instalacja sterowników |
# emerge -av cups-windows
|
Teraz użyjemy skryptu cupsaddsmb dostarczonego przez dystrybucję CUPS.
Warto przeczytać stronę manuala (man cupsaddsmb), ponieważ dowiemy się z
niej jakie sterowniki Windows skopiować do poprawnego CUPS. Kiedy wykonamy już
tę czynność, należy ponownie uruchomić CUPS poprzez wydanie polecenia
/etc/init.d/cupsd restart. Następnie uruchamiamy cupsaddsmb w
następujący sposób:
Listing 4.11: Uruchomienie cupsaddsmb |
# cupsaddsmb -H PrintServer -U root -h PrintServer -v HPDeskJet930C
# cupsaddsmb -H PrintServer -U root -h PrintServer -a
|
Ostrzeżenie:
Wykonanie tego polecenia powoduje najwięcej problemów, wnioskujemy to czytając
posty w tym
wątku, aby dowiedzieć się więcej o rozwiązywaniu problemów.
|
Poniżej znajdują się najczęstsze błędy:
-
Nazwa hosta podawana po parametrze -h oraz -H (Serwer
drukarki) często nie jest poprawnie rozwikływana i serwer drukarki nie
może być zidentyfikowany, aby współpraca CUPS-Samba przebiegła pomyślnie.
Jeśli wystąpi błąd typu: Warning: No PPD file for printer
"CUPS_PRINTER_NAME" - skipping!, pierwsze co należy zrobić to zamienić
Serwer drukarki na localhost i spróbować ponownie.
-
Polecenie zawodzi wyświetlając NT_STATUS_UNSUCCESSFUL. Ten błąd jest
dosyć popularny, ale może on być spowodowany wieloma czynnikami. Niestety
wyświetlony komunikat nie jest tu zbyt pomocny. Możemy tymczasowo ustawić
security = user w smb.conf. Po lub jeśli instalacja
zakończy się powodzeniem, powinniśmy zamienić z powrotem na 'share' lub na
cokolwiek co było przedtem.
To powinno zainstalować poprawną strukturę katalogów pod
/etc/samba/printer. W naszym przypadku jest to
/etc/samba/printer/W32X86/2/. Plikami w nim zawartymi powinny być 3
pliki sterownika oraz plik PPD, ze zmienioną nazwą na
NazwaDrukarki.ppd (nazwa której użyliśmy instalując drukarkę -
należy spojrzeć wyżej).
Jeśli jeszcze nie pojawiły się błędy lub inne komplikacje, nasze sterowniki są
już zainstalowane.
Kończenie ustawień
Na zakończenie ustawiamy katalogi.
Listing 4.12: Ostateczne wymagane zmiany |
# mkdir /home/samba
# mkdir /home/samba/public
# chmod 755 /home/samba
# chmod 755 /home/samba/public
|
Testowanie konfiguracji Samby
Teraz chcemy sprawdzić plik konfiguracyjny, aby upewnić się, że jest poprawnie
sformatowany oraz wszystkie nasze opcje mają poprawną składnię. W tym celu
wykorzystujemy testparm.
Listing 4.13: Uruchamianie testparm |
# /usr/bin/testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[printers]"
Global parameter guest account found in service section!
Processing section "[public]"
Global parameter guest account found in service section!
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
...
...
|
Uruchamianie usługi Samba
Konfigurujemy Sambę, aby uruchamiała się podczas ładowania systemu, następnie ją
uruchamiamy.
Listing 4.14: Załączanie usługi Samba |
# rc-update add samba default
# /etc/init.d/samba start
|
Sprawdzanie usług
Najroztropniej byłoby sprawdzić pliki dziennika. Jednakże my sprawdzimy zasoby
współdzielone za pomocą smbclient.
Listing 4.15: Sprawdzanie zasobów współdzielonych za pomocą smbclient |
# smbclient -L localhost
Password:
|
5.
Konfiguracja klientów
Konfiguracja drukarki na klientach systemów *nix
Pomimo różnic, jedyną wymaganą rzeczą jest CUPS. Wykonujemy to samo na klientach
UNIX, Linux lub BSD.
Listing 5.1: Konfiguracja Gentoo |
# emerge cups
# nano -w /etc/cups/client.conf
ServerName PrintServer
|
To wystarczy, nic więcej już nie trzeba.
Jeśli używamy tylko jednej drukarki, będzie ona domyślną. Jeśli nasz serwer
wydruku zarządza kilkoma drukarkami, to domyślną drukarkę wybrał administrator.
Jeśli chcemy zdefiniować inną domyślną drukarkę, wtedy użyteczne będzie
polecenie lpoptions.
Listing 5.2: Ustawianie domyślnej drukarki |
# lpstat -a
HPDeskJet930C accepting requests since Jan 01 00:00
laser accepting requests since Jan 01 00:00
# lpoptions -d HPDeskJet930C
|
Listing 5.3: Drukowanie na systemach *nix |
# lp -d HPDeskJet930C cokolwiek.txt
# lp tratata.cokolwiek.ps
|
Wpisujemy w przeglądarce internetowej adres http://SERWER_WYDRUKU:631,
jeśli chcemy zarządzać drukarkami za pomocą ładnego interfejsu sieciowego.
Zastępujemy printserver nazwą maszyny, która pełni rolę serwera
drukarki, nie nazwą którą podaliśmy serwerowi drukarki CUPS, jeśli użyliśmy
różnych nazw.
Montowanie zasobów współdzielonych Windows lub Samba w GNU/Linux
Uwaga:
Na wszystkich systemach, które będą miały dostęp do współdzielonych zasobów
należy zainstalować pakiet net-fs/mount-cifs lub net-fs/samba.
|
Nadszedł czas, aby skonfigurować wsparcie dla CIFS w jądrze. Ponieważ zakładam,
że skompilowaliśmy przynajmniej jedno jądro, więc musimy się upewnić, że mamy
wszystkie poprawne opcje wybrane w jądrze. Najlepiej byłoby gdybyśmy
skompilowali obsługę smbfs jako moduł. Opinia, że moduły są dobrą rzeczą oraz
powinny być używane kiedy to jest tylko możliwe, jest tylko opinią autora.
Listing 5.4: Wsparcie jądra |
CONFIG_CIFS=m
|
Kompilujemy moduł, instalujemy i ładujemy go za pomocą:
Listing 5.5: Ładowanie modułu jądra |
# modprobe cifs
|
Po załadowaniu modułu, możliwe jest montowanie zasobów współdzielonych Samby lub
Windows. W tym celu używamy polecenia mount:
Listing 5.6: Montowanie zasobów współdzielonych Windows lub Samba |
# mount -t cifs //PrintServer/public /mnt/public
# mount -t cifs -o username=USERNAME,password=PASSWORD //PrintServer/public /mnt/public
|
Po ich zamontowaniu, mamy do nich dostęp tak jakby znajdowały się one na
lokalnym dysku twardym.
Konfiguracja drukarki dla klientów z systemem Windows NT/2000/XP
To jest sprawą tylko kilku kliknięć. Przechodzimy do \\PrintServer,
klikamy prawym przyciskiem na drukarkę (HPDeskJet930C) i wybieramy "Połącz". To
ściągnie potrzebne sterowniki i każda aplikacja (taka jak Word lub Acrobat)
będzie oferować HPDeskJet930C jako dostępną drukarkę. :-)
6.
Uwagi końcowe
Czułe pożegnanie
Na tym kończymy. Powinniśmy posiadać poprawne środowisko drukarskie, które jest
przyjazne dla systemów Windows jak i *nix oraz w pełni bezpieczne zasoby
współdzielone!
7.
Odnośniki i zasoby
Odnośniki
Poniżej znajduje się kilka odnośników, które mogą nam się przydać do
konfiguracji oraz rozwiązywania problemów z naszą instalacją:
Rozwiązywanie błędów
Należy spojrzeć również na tę stronę z
podręcznika "Printing Support in Samba 3.0" Kurta Pfeifle'a. Znajduje się tam
dużo użytecznych wskazówek! Zanim wyślemy gdzieś nasze problemy i pytania,
najpierw należy tam spojrzeć! Być może rozwiązanie naszego problemu znajduje
się właśnie tam.
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|