Historia zmian | |
---|---|
Zmiana $Rev: 12145 $ | |
beta |
Spis treści
Spis rysunk�w
Spis tabel
Spis treści
Dziękujemy za zainteresowanie się PLD Linux Distribution™!
W tym rozdziale przedstawione zostaną r�żne aspekty dotyczące projektu PLD, takie jak jego historia, cele, model rozwoju, itp.
Aby jak najlepiej zrozumieć i przyswoić informacje zawarte w tym podręczniku, warto zapoznać się wpierw z użytymi konwencjami.
$ komenda
W ten spos�b opisywane są komendy, kt�re wykonać możemy z uprawnieniami użytkownika.
# komenda
Tutaj natomiast przedstawiona została komenda, kt�rą należy wykonać z poziomu użytkownika root, czyli administratora.
Zbyt długie linie zrzut�w ekranowych, kt�re nie mieszczą się w jednej linii, podzielone są przy pomocy znaku \. Czyli:
# komenda z_bardzo_\ długim_parametrem
należy zinterpretować jako:
# komenda z_bardzo_długim_parametrem
W dokumentacji dosyć często korzysta się z następującej konstrukcji:
{$zmienna}
Tak oznaczane są miejsca, w kt�rych użytkownik może lub musi samodzielnie dokonać wyboru i wstawić w miejsce ciągu znak�w {$zmienna} odpowiednią wartość.
Niejdnokrotnie w nazwach plik�w pojawia się znak "gwiazdki", kt�ry należy odczytywać podobnie jak robi to powłoka (shell), a więc zastępuje dowolny ciąg znak�w, przykładowo:
/katalog/plik.*
oznacza wszytskie pliki zaczynjące się od
plik.
w katalogu
/katalog
.
Celem tego podręcznika jest pomoc w zainstalowaniu PLD Linux Distribution™ na Twojej maszynie. Nie jest to i nigdy nie będzie zamiennik dokumentacji systemowej. Jeśli będzie to Twoja pierwsza instalacja Linuksa, gorąco zachęcamy Cię do przeczytania wpierw tego podręcznika. Nawet jeśli jesteś doświadczonym użytkownikiem, warto przestudiować instrukcje dotyczące instalacji, aby upewnić się, że wszystko p�jdzie gładko.
Opr�cz niniejszej dokumentacji możemy szukać pomocy w wielu innych miejscach. Prężnie działają listy dyskusyjne oraz oficjalne kanały IRC (#PLD i #PLDhelp). Na często zadawane pytania (FAQ) odpowiedzi można znaleźć na głï¿½wnej stronie WWW.
Jeśli uważasz, że dokumentacja jest niepełna,
znalazłeś błędy, lub chciałbyś do nas dołączyć prosimy
o wysłanie informacji na listę dyskusyjną
<[email protected]>
lub o kontakt z jednym z
autor�w dokumentacji, kt�rych listę zamieszczono w
„Autorzy dokumentacji PLD”
Wraz ze wzrostem zainteresowania Linuksem w Polsce, rosły naciski na stworzenie polskiej dystrybucji tego systemu. Niemal wszyscy jej chcieli, a niekt�rzy nawet m�wili, że już takową robią. Nic jednak z tego nie wynikało. Wreszcie, w lipcu 1998, zawiązał się projekt mający na celu stworzenie polskiej dystrybucji Linuxa. Projekt PLD, czyli Polish(ed) Linux Distribution, był na tyle dobrze zorganizowany, by przetrwać trudne początki. Nie obeszło się oczywiście bez burzliwych dyskusji na temat kształtu dystrybucji, doboru oprogramowania jak r�wnież wersji jądra, na kt�rej projekt ma być rozwijany. W efekcie zdecydowano się prowadzić r�wnolegle dwa projekty. Pierwszy został nazwany PLD-devel i był forpocztą dla obecnego PLD-stable. Prace nad 1.1 PLD (devel) koordynowali przede wszystkim Wojtek Ślusarczyk, Marcin Korzonek i Arek Miśkiewicz. Miała to być pierwsza dystrybucja Linuxa zgodna z nowym, promowanym przez OpenGroup, standardem - Unix98. R�wnolegle druga grupa, na czele z Tomkiem Kłoczko i Arturem Frysiakiem, pracowała nad podwalinami właściwej PLD-stable.
Nieco p�źniej, przede wszystkim z braku wolnego czasu z prac nad projektem wycofali się Wojtek Ślusarczyk, Andrzej Nakonieczny oraz Marcin Korzonek. Tomasz Kłoczko postanowił kontynuować prace nad PLD, gromadząc wok�ł siebie coraz to większą liczbę developer�w. Pojawiła się domena pld.org.pl, a wraz z nią liczne adresy "funkcjonalne", takie jak ftp.pld.org.pl, www.pld.org.pl czy cvs.pld.org.pl. Ruch na listach mailingowych stawał się coraz większy, widać było, iż projekt zyskiwał na popularności.
22 listopada 2002 roku światło dzienne ujrzała pierwsza stabilna wersja dystrybucji PLD Linux Distribution 1.0 (Ra). Jeszcze w czasie jej stabilizacji rozpoczęły się prace nad kolejną wersją.
Tw�rcy projektu zakładali uniwersalność PLD, kt�ra pozwalałaby na korzystanie z dystrybucji przez użytkownik�w z całego świata, jednak pojawiły się obawy, że nazwa Polish(ed) Linux Distribution ™ odstraszy potencjalnych odbiorc�w z innych kraj�w. Postanowiono, że zmieniona zostanie nazwa projektu. Pozostawiono charakterystyczny skr�t "PLD" w niezmienionej postaci, zmieniono zaś jego rozwinięcie - nazwa "PLD" stała się rekurencyjnym skr�tem od PLD Linux Distribution™.
Pierwszego kwietnia 2007 roku wydana została wersja Ac, długi okres rozwoju przyzwyczaił użytkownik�w do nieustających aktualizacji oprogramowania. Taki model rozwoju dystrybucji okazał się na tyle wygodny, że postanowiono by kolejne wydanie miały być rozwijane bez końca. Oznacza to, że na razie nie są planowane żadne kolejne wydania, a do stabilnej gałęzi pakiet�w nieprzerwanie trafiają aktualizacje.
PLD-Linux jest dystrybucją rozwijaną głï¿½wnie w Polsce. Jest to produkt grupy entuzjast�w Linuksa chcącej stworzyć system operacyjny dopasowany do własnych potrzeb. Aktualnie rozwojem dystrybucji interesuje się około 200 os�b, z pośr�d nich najbardziej aktywna jest grupa 50 deweloper�w.
PLD jest jednym z najaktywniejszych projekt�w Open Source na świecie. Dzięki temu powstała jedna z największych dystrybucji Linuksa, w trakcie prac nad drugą wersją systemu (Ac) ilość dostępnych pakiet�w zbliżyła się do trzynastu tysięcy.
Jedną z największych bolączek administrator�w jest chroniczny brak czasu, dlatego bardzo istotne jest zminimalizowanie nakładu pracy przy codziennych zajęciach administracyjnych. Mając to na uwadze, stworzono dystrybucję, kt�ra zapewnia wysokie bezpieczeństwo i łatwość administracji. PLD jest tak projektowane by w możliwie najkr�tszym czasie uruchomić bezpieczny, wydajny i łatwy w zarządzaniu system produkcyjny. Założono, że administrator nie może tracić czasu na kompilację jądra, program�w czy też pisania rc-skrypt�w.
PLD jest uniwersalną i elastyczną dystrybucją, dzięki czemu sprawdzi się w r�żnorodnych zastosowaniach. Przy jej tworzeniu, głï¿½wny nacisk jest jednak kładziony na niezawodne działanie usług. Utarło się nawet powiedzenie, że PLD jest dystrybucją tworzoną przez administrator�w dla administrator�w, mamy więc do czynienia z systemem dobrze przygotowanym do pracy w roli serwera.
Nie oznacza to bynajmniej, że PLD nie nadaje się na system dla stacji roboczej, doskonale sprawdza się r�wnież w tym zastosowaniu. Zwykły użytkownik nie znajdzie tu wielu ułatwiających życie początkującym narzędzi, aby używać PLD konieczna jest solidna porcja wiedzy. Mamy nadzieję, że niniejszy podręcznik będzie pomocny w jej zdobyciu.
Poniżej przedstawiono zestawienie najciekawszych cech systemu.
w systemie dostępne są silnie zmodularyzowane jądra, dzięki czemu w ogromnej większości wypadk�w nie trzeba go kompilować na nowo; wystarczy wybrać właściwy kernel i załadować potrzebne moduły
w PLD zastosowano skrypty startowe (rc-skrypty) typu System-V, Pozwoliło to na maksymalne zautomatyzowanie procesu instalacji usług systemowych.
podobną koncepcją do rc-inetd™ kierowano się w tworzeniu pakietu rc-boot™, pozwala on na łatwe zarządzania bootloaderami
używanie FHS 2.x jako specyfikacji struktury katalog�w
całkowite odejście od termcap™ i libtermcap™ (w PLD nie ma pakietu z libtermcap i samego termcapa; ani jeden pakiet nie jest związany z termcapem)
uporządkowane rozmieszczenia plik�w w gałęzi
/usr
- żaden pakiet dystrybucyjny
nie umieszcza plik�w
w katalogach wewnątrz /usr/local
domyślne jądro zawiera grsecurity™
restrykcyjne uprawnienia dla użytkownik�w
przystosowanie do łatwego przejścia systemu na alternatywne metody autoryzacji (i -- w zależności od potrzeb -- szyfrowania) komunikacji po sieci, jak PAM, czy GSAPI, TSL/SSL... Jest bardzo prawdopodobne, że już w niedługiej perspektywie dużą rolę zacznie tu odgrywać SASL. W praktyce owo łatwe dostosowywanie do np. kerberyzacji systemu jest realizowane także z użyciem rc-inetd, kt�ra to platforma ułatwia znakomicie podmianę r�żnych serwis�w na wersje skerberyzowane czy też wykorzystujące inne mechanizmy jak np. socks5 (tutaj jeszcze jest mało zrobione, ale furtka jest szeroko i jednoznacznie otwarta)
mechanizm sys-chroot™ ułatwiający zarządzanie środowiskami typu chroot oraz dobre wsparcie dla środowisk Linux VServer™
PLD posiada najlepszą obsługę przyszłościowego protokołu IPv6 z pośr�d innych dystrybucji Linuksa.
używanie iproute2™ jako podstawowego narzędzia do operowania na interfejsach sieciowych, dzięki czemu np. skrypty startowe z PLD są prostsze i kr�tsze mimo większej funkcjonalności w stosunku do swoich odpowiednik�w z RH; inną zaletą jest wsteczna kompatybilność z opisem interfejs�w sieciowych z tym, co jest stosowane w initscripts z RH; kolejną cechą skrypt�w startowych jest to, że -- w zależności od preferencji użytkownika -- mogą one wyświetlać wszystkie komunikaty po polsku
PLD zawiera rc-inetd™ - interfejs do zarządzania usługami typu inetd. Pozwala zarządzać takimi usługami (np.: telnetd, cvs-pserver) bez znaczenia jakiego typu demon inetd jest używany
PLD zawiera ogromne ilości gotowych, binarnych pakiet�w; pozwala to uniknąć instalacji oprogramowania spoza dystrybucji
w dystrybucji używane są pakiety typu RPM™, do zarządzania nimi stworzono program o swojsko brzmiącej nazwie Poldek™, można też używać klasycznego programu RPM
możliwość samodzielnego budowania pakiet�w RPM pozwoli na łatwe skompilowanie pakietu z nietypową funkcjonalnością
znaczna liczba program�w podzielona jest na mniejsze pakiety, pozwalające instalować tylko te elementy systemu, kt�re są akurat potrzebne
pakiety często są wstępnie skonfigurowane i gotowe do działania, ponadto nakładane są na nie istotne łaty
w PLD nie są faworyzowane żadne z usług czy program�w. To czego używamy zależy tylko od nas
pełne przygotowanie pakiet�w do automatycznego uaktualnienia. Pakiety z RH kompletnie nie są na to przygotowane. Przygotowanie to wiąże się z restartowaniem serwis�w przy ich uaktualnieniu, odpowiednim przygotowywaniem procedur uaktualnienia w taki spos�b, by umożliwić automatyczną aktualizację nawet przy zmianie plik�w konfiguracyjnych
kompresowanie wszystkich plik�w dokumentacji z użyciem gzip (bzip2 nic w praktyce tu nie wnosi, a dostarcza tylko nowych kłopot�w, czego doświadczają od czasu do czasu użytkownicy Mandrake)
separacja bibliotek statycznych w osobne podpakiety
{$nazwa}-static
(nie każdy
tego potrzebuje), a nagłï¿½wk�w do
{$nazwa}-devel
uzupełnianie opis�w pakiet�w i dokumentacji w r�żnych
językach. W dużej części robi się to niejako przy okazji.
Użytkownik może sobie skonfigurować i zainstalować
wybrane oprogramowanie ze wsparciem dla preferowanego
zestawu język�w, np.: angielski i niemiecki czy też
angielski i polski (zasoby dla innych język�w zostaną
pominięte). Tak unikalną możliwość konfiguracji
osiągamy dzięki konsekwentnemu oznaczaniu zasob�w
narodowych makrem %lang()
w
poszczeg�lnych pakietach
PLD jest systemem przyjaznym dla programisty. Dostępne są narzędzia do tworzenia aplikacji w wielu językach programowania. Dotyczy wielu "standardowych" język�w programowania takich jak C, C++, Perl czy Python. Dostępne są też kompilatory do nieco mniej znanych język�w takich jak SML, Prolog, OCaml jak też eksperymentalne kompilatory: Cyclone, Ksi. Dodatkowo mamy wyb�r wielu narzędzi programistycznych i bibliotek.
maksymalna automatyzacja r�żnych powtarzalnych czynności (dotyczy to zar�wno metodologii bieżącej pracy jak i zawartości pakiet�w)
dystrybucja jest przystosowana do obsługi wielu język�w narodowych, a w tym języka polskiego. Jest to najlepiej przygotowana dystrybucja na potrzeby polskich użytkownik�w
brak nałożonych z g�ry ograniczeń co do zestawu pakiet�w, jakie mogą być w dystrybucji. W praktyce oznacza to, że użytkownik ma do dyspozycji wszystko, co udało się nam zebrać, Jeżeli coś zostanie opracowane i przystosowane do tego, żeby mogło wsp�łgrać z resztą pakiet�w, to znaczy, że komuś było potrzebne, więc może komuś przydać się w przyszłości
W PLD™ wersjom dystrybucji nadawane numery oraz dwuliterowe oznaczenia kodowe, kt�re pochodzą od skr�towych oznaczeń pierwiastk�w. Pierwszej wersji PLD nadano oznaczenie Ra (Rad), zaś kolejne odpowiadają nazwom pierwiastk�w poukładanych zgodnie z kolejnością określoną przez ich liczbę atomową. Aktualnie mmy trzy oficjalne wydania: Ra, Ac, Th, jest też nieoficjalny fork Titanium prowadzony przez jednego z deweloper�w.
Rozw�j PLD Linux Distribution przebiega w spos�b otwarty i elastyczny. Efekt końcowy to wynik nakładu wielu os�b, nie tylko developer�w posiadających prawo zapisu do repozytorium CVS (o kt�rym poniżej), ale także użytkownik�w zgłaszających informacje o błędach lub nadsyłających poprawki lub propozycje zmian. Z chęcią przyjmiemy nowych developer�w, a osoby chcące być bardziej związane z projektem powinny zapisać się na listę dyskusyjną developer�w [email protected].
Informacje o PLD i sposobie jego rozwoju:
Repozytorium CVS
Źr�dła PLD Linux Distribution trzymane są w repozytorium CVS (Concurrent Versions System, http://www.cyclic.com/CVS/index.html), wolnodostępnym systemie kontroli wersji dostarczanym wraz z naszą dystrybucją. Serwer CVS PLD Linux Distribution (http://cvs.pld-linux.org/) jest dostępny dla wszystkich w trybie tylko dla odczytu (Read Only), oraz dodatkowo w trybie do odczytu/zapisu (Read/Write) dla developer�w. Repozytorium zostało podzielone na kilka modułï¿½w w celu ułatwienia pracy osobom doń commitującym (określenie commit pochodzi z podręcznika systemowego cvs).
Serwer DistFiles
W zamierzchłych czasach wszystkie pliki (a więc kody źr�dłowe, łatki (patche), poprawki, itp) potrzebne do zbudowania pakiet�w trzymane były w repozytorium. Niestety CVS nie został zaprojektowany do przechowywania plik�w binarnych (a archiwum tar.gz takim jest) i pr�ba zmuszenia go do przechowywania takowych dostarczała r�żnych problem�w. A to osoba posiadające stosunkowo wolne łącze zaczęła wrzucać kilkudziesięcio megabajtowy plik, skutecznie blokując możliwość pracy innym developerom na kilka godzin. Uciążliwe były też pozostające tzw. 'locki', czyli blokady na modułach repozytorium (przede wszystkim SOURCES/). Rozwiązaniem tych problem�w było wprowadzenie w maju 2003 roku serwera DistFiles, do kt�rego przeniesiono większość plik�w binarnych z CVS.
Core Developers Group
Gdyby PLD Linux Distribution było firmą, Core Developers Group najtrafniej można by określić jako Radę Nadzorczą. Jej celem jest podejmowanie w spos�b demokratyczny krytycznych dla dystrybucji decyzji oraz rozwiązywanie konflikt�w, kt�rych nie dało się zażegnać w inny spos�b. W skład Grupy wchodzą developerzy aktywnie udzielający się w projekcie.
Lista dyskusyjna [email protected]
Na liście tej prowadzone są dyskusje na temat bieżących prac nad dystrybucją, jak r�wnież ustalane są plany na przyszłość. Jeśli nie posiadasz prawa zapisu do repozytorium, a chciałbyś podzielić się efektami swych prac z innymi, lista ta jest najlepszym miejscem na poinformowanie o tym fakcie.
Buildery
Mianem builder�w określane są specjalnie przygotowane środowiska (często na dedykowanych maszynach), na kt�rych budowane są pakiety, kt�re p�źniej zostaną umieszczone na serwerach FTP projektu. Każda z linii dystrybucji ma swoje oddzielne buildery, stworzone z pakiet�w dla niej przeznaczonych.
Nie wszyscy developerzy mają prawo do puszczania zleceń na buildery, czyli rozkaz�w zbudowania poszczeg�lnych pakiet�w - przywiliej ten ma ledwie garstka os�b, zaznajomionych z automatyką oraz znających potrzeby danej dystrybucji. Rzadko kiedy zachodzi potrzeba bezpośredniego grzebania w strukturze danego środowiska - codzienna praca opiera się na wysyłaniu odpowiednio przygotowanych maili, podpisanych kluczem PGP osoby uprawnionej.
Rescue CD
Jest to niewielka dystrybucja startująca z płyty CD, bez konieczności instalacji na twardym dysku. Zawiera zestaw wyspecjalizowanych narzędzi pomocnych w przypadku usuwania awarii systemu. Rescue CD oparto o jądro PLD i wyposażono w zestaw najbardziej niezbędnych program�w, dzięki czemu udało się uzyskać niewielkie rozmiary dystrybucji. Pozwala to załadowanie całości do pamięci operacyjnej, a następnie a wyjęcie płyty CD z czytnika. Lista dostępnych program�w jest umieszczona na domowej stronie WWW projektu.
PLD Live CD http://livecd.pl/
Pierwszy, oparty o PLD Ac projekt, mający na celu stworzenie kompletnej dystrybucji Linuksa startującej z płyty CD, zawiera znaczną ilość narzędzi i program�w użytkowych. PLD Live jest przygotowane dla zwykłych użytkownik�w chcących bliżej poznać PLD, zawiera system X Window i liczne programy użytkowe. Z założenia w PLD Live dokonywano jak najmniej zmian w stosunku do bazowej dystrybucji.
PLD Live.th http://livecd.pld-linux.org
Wersja Live zbudowana na bazie Th i środowiska GNOME
PLD-Linux LiveCD http://kde4.livecd.pld-linux.org/index.php
Wersja Live zbudowana na bazie Titanium i środowiska KDE
Spis treści
Strona głï¿½wna - http://pld-linux.org
Dokumentacja - http://pl.docs.pld-linux.org
Listy dyskusyjne - http://lists.pld-linux.org
Częściowe archiwa list dyskusyjnych - mail-archive.com, Gmane
Serwer IRC (freenode) http://irc.freenode.net
Serwer IRC (IRCnet) http://ircnet.org
Serwer PLDNet: irc.pld-linux.org
Istniejące kanały:
#pld - kanał przeznaczony dla Developer�w.
#pldhelp - kanał użytkownik�w PLD
#pldlivecd - kanał użytkownik�w LiveCD
Kanały w powyższych sieciach są połączone za pomocą specjalnego bota. Przydatny w takich przypadkach może być skrypt do programu irssi™ znajdujący się na stronie http://vorlon.icpnet.pl/~agaran/forwardfix.pl lub w zasobach poldka (poldek -i irssi-script-forwardfix), kt�ry ma zadanie przekazywać wiadomości między sieciami.
System zgłaszania błęd�w - http://bugs.pld-linux.org
Rescue CD - http://rescuecd.pld-linux.org
PLD Live CD - http://livecd.pld-linux.org
Obrazy ISO są katalogowane wg. schematu
{$serwer}/{$wersja}/{$arch}
np.:
ftp.iso.pld-linux.org/2.0/i586
.
Wersje systemu szerzej opisano w
„
Oficjalne wersje PLD
”, zaś architektury w
„Architektury pakiet�w”.
Dla każdego z obraz�w ISO dostępna jest suma MD5, umieszczona
w pliku o rozszerzeniu md5
. Dzięki
niej będziemy mogli sprawdzić przed nagraniem czy pobrany
obraz nie zawiera żadnych zmian. Do obliczenia skr�t�w MD5
w pod systemami uniksowymi posłużymy się programem
md5sum, zaś w systemach Microsoftu użyjemy
dostępnego na serwerze programu md5sum.exe.
Serwery FTP z obrazami ISO:
TASK, Gdańsk, Polska - ftp://ftp.iso.pld-linux.org
Pakiety są katalogowane wg. schematu
{$serwer}/dists/{$wersja}/{$źr�dło}/{$arch}
np.:
ftp.pld-linux.org/dists/2.0/PLD/i586/
.
Wersje systemu szerzej opisano w
„
Oficjalne wersje PLD
”, źr�dła w
„Źr�dła pakiet�w”, zaś architektury w
„Architektury pakiet�w”.
PLD możemy zainstalować z sieci za pomocą protokołu FTP, HTTP lub RSYNC. Pakiety możemy pobierać z głï¿½wnego serwera PLD lub z jednego z wielu lustrzanych.
FUH KERNEL, VNET.sk, Bratysława, Słowacja - ftp://ftp.pld-linux.org/ , ftp://ftp.sk.pld-linux.org/ ,
Gdańsk, Polska - ftp://ftp2.pld-linux.org/
Uniwersytet Kardynała Stefana Wyszyńskiego, Polska - ftp://ftp3.pld-linux.org/ , ftp://ftp.csi.pld-linux.org/
ATM S.A., Warszawa, Polska - ftp://ftp4.pld-linux.org/ , ftp://ftp.atm.pld-linux.org/
Uniwersytet Warszawski, Wydział Prawa i Administracji, Polska - ftp://ftp5.pld-linux.org/ , ftp://ftp.wpia.pld-linux.org/
TASK, Gdańsk, Polska - ftp://ftp6.pld-linux.org/ , ftp://ftp.task.pld-linux.org/
Politechnika Wrocławska, Polska - ftp://ftp.pwr.wroc.pl/pld/
ICM, Polska - ftp://ftp.icm.edu.pl/pub/linux/distributions/pld-linux/
Bratysława, Słowacja - ftp://spirit.bentel.sk/mirrors/PLD
FUH KERNEL, VNET.sk, Bratysława, Słowacja - http://ftp.pld-linux.org/
Gdańsk, Polska - http://ftp2.pld-linux.org/
ATM S.A., Warszawa, Polska - http://ftp4.pld-linux.org/
TASK, Gdańsk, Polska - http://ftp.task.pld-linux.org/
Bratysława, Słowacja - http://spirit.bentel.sk/PLD/
Osoby zainteresowane udostępnianiem serwera lustrzanego przy
pomocy protokołu RSYNC proszone są o kontakt z nami w celu
uzyskania szczeg�łowych informacji:
<[email protected]>
Spis treści
Pomysł na nasze logo zrodził się w głowie Agnieszki Sloty. Projekt graficzny został stworzony przez Marcina Mierzejewskiego (Kevin) i Maćka Zielińskiego.
Może być używane tylko wtedy, gdy:
produkt z logiem jest używany zgodnie z udokumentowanymi na www.pld-linux.org zasadami (na przykład oficjalne płyty CD)
uzyskają aprobatę PLD Linuksa™ do używania loga w określonych celach
Część całkowitego produktu uznana jest oficjalnie za należącą do PLD™ (tak jak jest to opisane w punkcie pierwszym) i jeśli posiada wyraźnie zaznaczone informacje, że tylko ta cześć została zatwierdzona
Zastrzegamy sobie prawo do unieważnienia i modyfikacji licencji dla danego produktu
Pozwolenie na używanie oficjalnego loga zostało przyznane dla wszelkiego typu odzieży (t-shirty, czapki, itd) ale pod warunkiem, że są one wykonywane przez developer�w PLD™ i nie są sprzedawane dla zysku.
Wyjaśnienie: Licencja "zapożyczona" z Debiana™.
Powered by PLD Linux™
To logo i jego zmodyfikowane wersje mogą być zamieszczane dla podkreślenia poparcia dla projektu, lecz nie oznacza ono, że dany produkt jest częścią projektu.
Przypomnienie: docenimy jeśli dodasz do obrazka link wskazujący na www.pld-linux.org i umieścisz go na swojej stronie.
To logo i jego zmodyfikowane wersje mogą być zamieszczane dla podkreślenia poparcia dla projektu, lecz nie oznacza ono, że dany produkt jest częścią projektu.
Przypomnienie: docenimy jeśli dodasz do obrazka link wskazujący na www.pld-linux.org i umieścisz go na swojej stronie.
Pod tym adresem http://www.inf.sgsp.edu.pl/pub/MALUNKI/PLD/ Karol Kreński "Mimooh" umieścił sporą galerię obrazk�w związanych z PLD Linux Distribution™
Spis treści
Instalacja systemu przy użyciu chroot
Mamy możliwość zainstalowania PLD™ przy użyciu innego systemu operacyjnego, spos�b ten ma tę zaletę, że daje nam okazję dobrego poznania PLD już na etapie instalacji, a ponadto umożliwia wykonanie bardziej wyrafinowanych operacji, kt�re są niedostępne z poziomu instalatora. Ta metoda instalacji pozwala zainstalować bardzo małą wersję systemu, (ok. 120MB), kt�ra wystarcza do uruchomienia systemu, skonfigurowania sieci, Poldka™ i pobrania kolejnych pakiet�w.
Do instalacji możemy użyć działającej dystrybucji, jednak
najwygodniejsze będzie użycie dystrybucji typu live:
RescueCD™ lub PLD-Live™.
Użycie systemu z płyty CD ma tą zaletę, że instalacja może być
wykonywana na docelowej maszynie, co ułatwi nam stworzenie
prawidłowego obrazu initrd
. Do instalacji Th należy
użyć RescueCD 2.90 lub nowszej (kiedy się pojawią), zaś do instalacji Ac
- jednej ze starszych wersji np. 2.01.
Osoby ciekawe jak wygląda przebieg instalacji "na żywo", mogą obejrzeć nagranie przykładowej instalacji.
Uwaga! W niniejszym rozdziale nie zawarto wielu zbyt szczeg�łowych opis�w, dlatego w przypadku drukowania na papierze może być konieczne dodrukowanie innych rozdziałï¿½w dokumentacji.
W przypadku instalacji z działającego systemu musimy podłączyć dysk twardy do komputera i uruchomić go. W przypadku płyty CD typu live - w BIOS-ie maszyny docelowej włączamy opcję startu systemu z płyty, a następnie umieszczamy nośnik w napędzie i czekamy na start systemu.
Wsp�łczesne dystrybucje typu live same wykrywają sprzęt i ładują odpowiednie moduły kernela, jeśli jednak to się nie powiedzie to musimy wtedy wykonać tę operację samodzielnie, więcej na ten temat w „Statyczne zarządzanie modułami”. Interesują nas jedynie moduły kontrolera ATA/SATA/SCSI oraz interfejsu sieciowego.
System możemy zainstalować na klasycznych partycjach dyskowych, woluminach LVM lub programowych macierzach, instalacja z chroot-a daje w tej kwestii dużą swobodę. Opis tworzenia wolumin�w LVM przedstawiliśmy w „LVM” zaś macierzy w „RAID programowy”. Dla ułatwienia jednak dalsze przykłady będą dotyczyły zwykłych partycji.
Potrzebujemy co najmniej dw�ch partycji: jednej na głï¿½wny
system plik�w i drugiej na obszar wymiany. Obszar wymiany
nie jest wymagany do instalacji, jednak dla porządku
utworzymy go już na tym etapie. Przykłady będą
dotyczyły dysku /dev/sda
. Nazewnictwo
urządzeń masowych wyczerpująco przedstawiono w
„Nazewnictwo urządzeń masowych”.
Na uprzywilejowanej pozycją będą tym razem użytkownicy kompletnych system�w, kt�re umożliwiają użycie programu GParted™ lub QTParted™, w przeciwnym wypadku użyjemy programu fdisk™ lub cfdisk™ np.:
# cfdisk /dev/sda
Podział dysku na partycje szerzej opisano w „Podział na partycje”. Zakładamy, że na pierwszej partycji dysku IDE umieścimy obszar wymiany, zaś na drugiej głï¿½wny system plik�w.
Inicjujemy obszar wymiany:
# mkswap /dev/sda1
Tworzymy system plik�w (np. ext3):
# mkfs.ext3 /dev/sda2
Powyższe operacje om�wiliśmy dokładnie w „Systemy plik�w”.
Zapamiętujemy układ partycji i system�w plik�w, gdyż
będzie on nam potrzebny do prawidłowego skonfigurowania
pliku /etc/fstab
.
Teraz przyszedł czas na utworzenie punktu montowania
i podmontowania partycji np.:
# mkdir /pldroot # mount /dev/sda2 /pldroot
Jeśli system ma używać większej ilości partycji (np. dla
/boot
) to montujemy je wszystkie.
Założyliśmy, że będziemy instalować pakiety z sieci, dlatego musimy skonfigurować połączenie. W opisach przyjęliśmy, że maszyna jest podłączona do sieci Ethernet.
W przypadku RescueCD system domyślnie pr�buje pobrać
konfigurację z DHCP, dlatego od razu po uruchomieniu powinniśmy
mieć działającą sieć. Jeśli w sieci nie ma takiego serwera to
musimy statycznie przydzielić parametry połączenia.
Zakładając, że chcemy ustawić adres 192.168.0.2 z maską /24
parametry pliku konfiguracji interfejsu
(np.: /etc/sysconfig/interfaces/ifcfg-eth0
) powinny mieć
następujące wartości:
DEVICE=eth0 IPADDR=192.168.0.2/24 ONBOOT=yes BOOTPROTO=none
W pliku /etc/sysconfig/static-routes
dodajemy trasę routingu do bramy (np.: 10.0.0.254):
eth0 default via 10.0.0.254
W pliku /etc/resolv.conf
podajemy przynajmniej jeden adres serwera DNS:
nameserver 193.192.160.243
Na koniec przeładowujemy podsystem sieci:
# service network restart
Konfigurację sieci szerzej opisano w „Wstęp”.
Jeśli potrzebujemy skorzystać z proxy ustawiamy odpowiednią zmienną środowiskową np.:
# export ftp_proxy=w3cache.dialog.net.pl:8080
Szczeg�ły konfiguracji proxy odnajdziemy w „Proxy”.
Zaczynamy od ustawienia najlepiej dopasowanej
architektury instalowanych pakiet�w, za pomocą opcji
_pld_arch
w pliku
/etc/poldek/repos.d/pld.conf
.
Więcej o architekturach pakiet�w w
„Architektury pakiet�w”.
Dobrym pomysłem jest ustawienie opcji, umożliwiającej precyzyjne
wybieranie alternatywnych pakiet�w (dla nieco bardziej zaawansowanych):
choose equivalents manually = yes
w pliku
/etc/poldek/poldek.conf
.
Teraz tworzymy katalog na indeksy Poldka np.:
# mkdir -p /pldroot/var/cache/poldek-cache
Następnie w konfiguracji Poldka musimy wskazać ten katalog,
odszukujemy w pliku /etc/poldek/poldek.conf
opcję cachedir
, w kt�rej definiujemy ścieżkę
do katalogu:
cachedir = /pldroot/var/cache/poldek-cache
Zanim zaczniemy instalować pakiety musimy mieć świadomość, że
zachodzi między nimi wiele zależności. Zostaną zainstalowane
wszystkie wymagane dodatkowo pakiety, jednak nie mamy wpływu
na kolejność instalacji. Zdarza się, że pakiet wymaga pliku lub
programu, kt�rego jeszcze nie ma w instalowanym systemie, przez
co nie mogą być wykonane pewne operacje poinstalacyjne. Pojawią
się nam wtedy na ekranie komunikaty błęd�w, nie należy się tym
martwić, gdyż naprawimy ten problem reinstalując pakiet.
Musimy jedynie wywołać instalację
z opcją --reinstall
Instalację rozpoczynamy od inicjacji bazy danych pakiet�w:
# rpm --root /pldroot --initdb
W tej części instalacji zainstalujemy kolejno pakiety:
setup
, FHS
, dev
,
pwdutils
, chkconfig
,
dhcpcd
, poldek
,
vim
(lub inny edytor), geninitrd
,
module-init-tools
, cpio
, bootloader lilo
lub
grub
, mount
oraz mingetty
.
Możemy dodatkowo zainstalować wiele innych pakiet�w,
jednak możemy spokojnie to wykonać z działającego już systemu.
Mamy możliwość użycia trybu interaktywnego Poldka:
# poldek --root /pldroot poldek> install setup FHS dev pwdutils chkconfig dhcpcd poldek vim geninitrd \ module-init-tools cpio grub mount login mingetty
lub wsadowego
# poldek --root /pldroot -i setup FHS dev pwdutils chkconfig \ dhcpcd poldek vim geninitrd module-init-tools cpio grub mount login mingetty
Jeśli zdecydowaliśmy sie macierze dyskowe, to powinniśmy
zainstalować dodatkowo pakiety: mdadm
i
mdadm-initrd
(jeśli jest na głï¿½wnym
systemie plik�w). Jeśli używamy wolumin�w logicznych (LVM) to
potrzebujemy pakiety odpowiednio lvm2
i
lvm2-initrd
.
Przed instalacją jądra musimy wykonać operacje konieczne do
prawidłowego wygenerowania initrd
:
Montujemy pseudo-system plik�w /proc
:
# mount /proc /pldroot/proc -o bind
Konfigurujemy plik /pldroot/etc/fstab
,
tak by wpisy odpowiadały wybranemu przez nas układowi
partycji i system�w plik�w. Dla przykład�w z początku
rozdziału wpisy będą wyglądały następująco.:
/dev/sda1 swap swap defaults 0 0 /dev/sda2 / ext3 defaults 0 0
Więcej w „Kluczowe pliki”.
Dokonać odpowiednich koniecznych operacji
konfiguracyjnych w przypadku korzystania z macierzy RAID
(plik /etc/mdadm.conf
)
lub wolumin�w LVM (/etc/lvm/lvm.conf
).
Musimy wybrać, kt�ry kernel zainstalujemy, na początek
powinniśmy się zainteresować pakietami: kernel
,
kernel-grsecurity
i ew. ich odmiany z SMP.
W wyborze może pom�c nam opis kerneli w „Jądro systemu”.
Kiedy już wybraliśmy, instalujemy wybrany pakiet:
# poldek --root /pldroot -i kernel
Jeśli nie pominęliśmy żadnego kroku, to powinien nam się wygenerować prawidłowy obraz initrd, w przeciwnym wypadku musimy to wykonać samodzielnie wg. opisu zamieszczonego w „Initrd”.
Jeśli wybraliśmy LILO™ jako
bootloader to powinniśmy odpowiednio zmodyfikować plik
konfiguracji (/pldroot/etc/lilo.conf
),
w przypadku użytej w przykładach konfiguracji będzie
wyglądał on następująco:
boot=/dev/sda read-only lba32 prompt timeout=100 image=/boot/vmlinuz label=pld root=/dev/sda2 initrd=/boot/initrd
Kiedy konfiguracja jest skończona wydajemy polecenie:
# chroot /pldroot /sbin/lilo
W przypadku GRUB-a™ plik
konfiguracji (/pldroot/boot/grub/menu.lst
)
powinien wyglądać tak:
timeout 10 title pld root (hd0,1) kernel /boot/vmlinuz boot=/dev/sda initrd /boot/initrd
Teraz instalujemy bootloader:
# chroot /pldroot /sbin/grub
Kiedy zgłosi się nam powłoka GRUB-a kolejno wydamy następujące polecenia:
grub> root (hd0,1) grub> setup (hd0) grub> quit
Konfigurację bootloadera wyczerpująco przedstawiono w
„Wstęp”. Jeśli gałąź
/boot
ma być na macierzy to powinniśmy
umieścić bootloader na wszystkich wchodzących w skład tej macierzy
dyskach, szczeg�ły tej operacji
przedstawiliśmy w „RAID programowy”.
Jeśli chcemy używać systemu urządzeń udev, to jest doskonała okazja żeby go zainstalować. Podstawowe pakiety wymagają urządzeń z pakietu dev, dlatego możemy go zainstalować dopiero teraz:
# poldek --root /pldroot -i udev # poldek --root /pldroot -e dev
Urządzenia dev oraz udev zostały opisane w „Urządzenia”.
Aby m�c się zalogować do nowego systemu musimy nadać hasło dla root-a:
# chroot /pldroot /usr/bin/passwd
Nic nie stoi na przeszkodzie, żeby utworzyć konta użytkownik�w i
skonfigurować uprawnienia.
W tym celu posłużymy się narzędziami z pakietu
shadow™ lub pwdutils™,
zanim to jednak zrobimy musimy ustalić z jakiej powłoki będą
korzystać użytkownicy. Domyślnie oba pakiety ustawiają użytkownikom
powłokę /bin/bash
, dlatego przy tworzeniu kont musimy
ustawić ją na /bin/sh
, lub zainstalować Basha.
Zakładając, że mamy zainstalowanego Basha dodajemy konto użytkownika następująco:
# chroot /pldroot /usr/sbin/useradd -m jkowalski
# chroot /pldroot /usr/bin/passwd jkowalski
Szczeg�łowy opis narzędzi z pakietu pwdutils znajdziemy w „Konta użytkownik�w”.
Spis treści
Aktualizacja systemu PLD z RA do AC
Gdy mamy zainstalowane już na dysku PLD 1.x,
aby przejść do 2.0 (AC) nie musimy od nowa
instalować całego systemu. Możemy posłużyć się
skryptem ra2ac
. Pakiety z tego skryptu
standardowo pobierane są z ftp. Czynnością kt�rą musimy wykonać zanim
posłużymy się skryptem to aktualizacja kernela do wersji 2.4.x. Gotowe
pakiety możemy pobrać z dw�ch źr�deł w zależności od architektury.
Dla architektur: i686 oraz ppc: ftp://ftp.pld-linux.org/dists/ra/updates/2.4/
Dla architektur: i386, i586, i686: ftp://atos.wmid.amu.edu.pl/pub/pld/ra-24/
Cała aktualizacja systemu sprowadzi się do uruchomienia skryptu i ręcznej rekonfiguracji nowych wersji usług.
Należy pamiętać, że AC jest na kernelu 2.6, lub 2.4 do wyboru, w tych kernelach nie ma ipchains-�w, zamiast tego jest narzędzie nazywające się iptables. Pomimo iż służy do tego samego, regułki mają inną składnie. W kernelach 2.4 i 2.6 niekt�re moduły urządzeń inaczej się nazywają, więc na to też należy być przygotowanym.
Skrypt jest przeznaczony dla ludzi, kt�rzy wiedzą co robią i mają og�lne pojęcie o linuksie, jeżeli jesteś początkującym użytkownikiem PLD, to lepszą decyzją będzie od nowa zainstalowanie systemu.
Pierwszym krokiem powinno być zrobienie kopii
zapasowej plik�w konfiguracyjnych - najlepiej
przekopiować gdzieś cały katalog /etc
, jeżeli
masz np. postgresa, to ważne jest abyś zrzucił
gdzieś bazy. O innych ważnych usługach i
zmianach w konfiguracjach powinniśmy poczytać
wcześniej. Wiele nowszych pakiet�w, stare pliki
konfiguracyjne przekopiuje do plik�w z
rozszerzeniem *.old
Zainstalowanego na komputerze kde™ lub
gnome™
najlepiej jest usunąć (łącznie z katalogami i
plikami zaczynającymi się od .kde
i
.gnome
w
katalogach domowych użytkownik�w) - gdyż zmiany są bardzo
duże i praca ze starymi ustawieniami powoduje
często wadliwą prace. Generalnie ważne jest aby aktualizować
jak najmniejszą liczbę pakiet�w, wtedy
wszystko powinno p�jść w miarę gładko. Resztę pakiet�w
można p�źniej ręcznie doinstalować po aktualizacji.
Teraz pobieramy z cvsu skrypt ra2ac
poleceniem:
# cvs -d :pserver:[email protected]:/cvsroot get raac-converter cvs server: Updating raac-converter U raac-converter/ChangeLog U raac-converter/TODO U raac-converter/ra2ac
Lub korzystamy z adresu www
Następnie uruchamiamy ra2ac:
# sh raac-converter/ra2ac
Czekamy aż skończy się instalowanie pakiet�w, na przewijające się niespełnione zależności i błędy nie zważamy :)
I na samym końcu najbardziej nieprzyjemna część aktualizacji - konfiguracja. Należy teraz większość usług jeszcze raz przekonfigurować, część usług będzie potrzebowała tylko przekopiowania konfigu z Ra, jednak inne (np. exim™, postfix™) wymagają od administratora edycji nowych plik�w konfiguracyjnych. Ważne jest żeby poczytać w dokumentacji o zmianach w plikach konfiguracyjnych między wersjami kt�re mieliśmy w RA, a wersjami występującymi teraz po skończeniu działania skryptu.
Spis treści
Spis treści
W tym rozdziale znajdziesz podstawowe komendy i czynności, kt�re powinieneś znać.
Dokument, kt�ry aktualnie czytasz zawiera minimalny zestaw instrukcji i porad koniecnych do instalacji i zarządzania dystrybucją PLD Linux™. Większość opisywanych mechanizm�w i narzędzi ma o wiele większe możliwości, aby je poznać powinniśmy używać podręcznik�w systemowych info™ i man™ (przestarzały). Aby z nich korzystać musisz je zainstalować (o ile nie są już zainstalowane) poleceniami:
poldek -U man poldek -U info
W skr�cie z podręcznika korzystamy następująco:
info {$hasło}
{$hasło}
może być nazwą programu, biblioteki,
pliku konfiguracyjnego. Dodatkową dokumentację odnajdziemy
w katalogu /usr/share/doc
,
tam też możemy odnaleźć przykładowe pliki konfiguracji,
historię zmian programu, licencje i wiele innych informacji.
Jeśli szukasz prostego narzędzia o konkretnych możliwościach możemy przejrzeć dokumentację systemową zestawu coreutils™:
info coreutils
Możesz r�wnież szukać pomocy na listach dyskusyjnych, IRC-u, czy forum. Listę tych jak i wielu innych użytecznych adres�w odnajdziesz w „Ważne adresy”.
Tradycyjną metodą wyłączania komputera jest komenda shutdown, np.:
# shutdown -h now
Lub poweroff dająca ten sam efekt.
Użycie komendy halt jest też właściwe.
# halt
Aby zresetować system wpisujemy reboot albo korzystamy z kombinacji klawiszy CTRL+ALT+DEL.
W trakcie pracy możemy dowolnie przełączać się pomiędzy trybami pracy. Służy do tego polecenie init {$nr} ({$nr} to liczba oznaczająca tryb pracy) np.
# init 5
Zmianę poziomu pracy szerzej opisano tutaj: „Zmiana poziomu pracy systemu”
Zawartość plik�w wyświetlamy poleceniem cat.
$ cat archiwum
Jeśli chcemy przyjrzeć się plikowi, kt�ry nie mieści się na ekranie po wykonania cat możemy uzyskać poleceniem less. Możemy wtedy przeglądać plik używając "strzałek", a kiedy skończymy - naciskamy q.
$ less plik
Komendą touch możemy modyfikować znaczniki czasu pliku, częściej jednak używa się jej do tworzenia pustych plik�w.
$ touch pusty_plik
Polecenie mkdir tworzy katalog.
$ mkdir archiwum
Za pomocą polecenia rmdir usuwamy puste katalogi.
$ rmdir archiwum
Plik możemy przenieść, albo zmienić jego nazwę, za pomocą polecenia mv.
$ mv listing listing.old $ mv /home/listing.old /usr/src/
W podobny spos�b operujemy na katalogach.
$ mv archiwum smietnik $ mvdir smietnik /usr/src/smietnik/
Do kopiowania służy polecenie cp.
$ cp listing podkatalog/
Kasujemy poleceniem rm.
$ rm plik // Kasuje plik. $ rm * // Kasuje wszystkie pliki w danym katalogu. $ rm * -i // Kasuje wszystkie pliki w danym katalogu z potwierdzeniem. $ rm * -f // Kasuje wszystkie pliki w danym katalogu bez pytania. $ rm -r // Kasuje wszystkie pliki, także te w podkatalogach $ rm -rf /home/ // Kasuje wszystkie pliki i katalogi w katalogu /home/
Do poruszania się w drzewie katalog�w w trybie tekstowym można używać programu Midnight Commander™ uruchamianego poleceniem mc, jednak nie każdy go instaluje, więc warto zapoznać się z kilkoma poleceniami przedstawionymi w tym rozdziale.
Do poruszania się w drzewie katalog�w używamy polecenia cd ścieżka np.:
$ cd /home/users/zenek/
Ten sam efekt uzyskamy poleceniem
$ cd users/zenek/
wykonanym w katalogu /home
Kilka innych przykład�w przedstawiamy poniżej.
W systemach uniksowych wyr�żniamy kilka rodzaj�w specjalnych katalog�w. Najważniejszym w całym drzewie jest katalog głï¿½wny -korzeń (ang. root) oznaczany przez ukośnik: "/"
$ cd /
Często po lewej stronie ścieżki podaje się korzeń aby wskazać położenie katalogu lub pliku bez względu na miejsce z kt�rego wydajemy polecenie np.:
$cd /etc/sysconfig
Polecenie ls powoduje wyświetlenie zawartości katalogu. Należy po nim podać nazwę katalogu, kt�ry chcemy zobaczyć, w przeciwnym wypadku wyświetlona zostanie zawartość katalogu bieżącego.
$ls / bin dev home lib mnt proc sbin srv tmp var boot etc initrd media opt root selinux sys usr $cd /home $ls services users
Parametr -a powoduje, że funkcja pokazuje r�wnież pliki ukryte (zaczynające się od kropki). -R powoduje wylistowanie r�wnież podfolder�w.
Polecenie pwd powoduje wyświetlenie ścieżki bieżącego katalogu.
$cd users/bart $pwd /home/users/bart/
Ważnym katalogiem jest katalog domowy użytkownika - oznaczany znakiem tyldy (~). Każdy użytkownik może używać w ścieżce tego znaku i zawsze będzie oznaczał jego własny katalog domowy np.:
$ ls ~/dokumenty
Kolejnym takim katalogiem jest katalog nadrzędny oznaczany za pomocą dw�ch kropek. Będąc w katalogu: /home/users/zenek możemy przejść o jeden poziom do g�ry używając polecenia
cd ..
Dzięki temu znajdziemy się w katalogu /home/users.
By wyświetlić aktualny czas i datę systemową posługujemy się komendą date:
$ date sob kwi 26 23:48:33 CEST 2003
Opr�cz możliwości wyświetlania daty i czasu w niemal dowolnym formacie, pozwoli nam na ustawianie czasu systemowego. Szczeg�łowy opis programu znajdziemy w podręczniku man.
Czas działania komputera sprawdzamy komendą uptime.
$ uptime 5:27pm up 6:51, 4 users, load average: 0.32, 0.08, 0.02
W sytuacji gdy chcemy z zmierzyć czas potrzeby na wykonanie operacji/czynności/procesu to posługujemy się komendą time.
$ time find /home/users/rennis/ HELLO real 0m13.297s user 0m0.060s sys 0m0.230s
Przykład ten poszukuje pliku HELLO w moim katalogu domowym, co zajmuje systemowi ~13s.
W systemach z rodziny UNIXa konfiguracja systemu jest przechowywana w plikach tekstowych. Zaletą tego rozwiązania jest możliwość konfigurowania systemu przy pomocy bardzo prostych narzędzi, wadą zaś to że można łatwo popełnić błąd. Dlatego jeśli chcemy tylko przeglądać plik powinniśmy użyć programu less np.:
# less /etc/poldek/poldek.conf
Jeśli jesteśmy pewni że chcemy dokonać zmian, powinniśmy wcześniej wykonać kopię zapasową pliku (pliki kopii zapasowej kończy się tyldą).
# cp /etc/poldek/poldek.conf /etc/poldek/poldek.conf~
Teraz możemy zacząć modyfikować plik, domyślnie instalowanym edytorem plik�w jest vim, dlatego dobrze jest umieć się nim posługiwać choćby w podstawowym zakresie. Bardzo użyteczną cechą Vima jest kolorowanie składni podstawowych plik�w konfiguracji (o ile nasz terminal jest kolorowy), dzięki czemu łatwo możemy zauważyć ewentualne błędy.
Aby otworzyć nim plik do edycji wydajemy polecenie
# vim /etc/poldek/poldek.conf
Po otworzeniu pliku jesteśmy w trybie wydawania poleceń, aby przejść do trybu edycji naciskamy klawisz i. Teraz możemy wprowadzać zmiany. Po wykonaniu zmian naciskamy klawisz Esc aby powr�cić do trybu wydawania poleceń. Teraz należy opuścić program jednym z poniższych poleceń: :q - wyjście z programu jeśli nie dokonaliśmy żadnych zmian; :wq - wyjście z zapisaniem zmian do pliku; :q! - wyjście z programu bez zapisywania dokonanych zmian.
Początkującym można zaproponować edytor mcedit będący częścią programu mc (Midnight Commander), inne nieco mniej popularne edytory to: emacs, pico, joe
Należy pamiętać o tym, że prawo zapisu plik�w w katalogu konfiguracji systemu (/etc) ma tylko superużytkownik (root) i z takimi uprawnieniami należy uruchamiać edytor. Pliki konfiguracyjne w linuksie muszą kończyć się znakiem nowej linii, dlatego przed zapisem należy pamiętać o sprawdzeniu czy jest wstawiony. Po raz kolejny swoją przewagę nad innymi edytorami pokazuje Vim, kt�ry automatycznie wstawia znak nowej linii.
Aby używać przedstawionych tu program�w, należy mieć uprawnienia superużytkownika lub być zapisanym do odpowiedniej grupy. Listę grup i odpowiadających im uprawnień zamieszczono w „Zarządzanie uprawnieniami”. Bardziej zaawansowane narzędzia sieciowe opisano w „Narzędzia sieciowe”.
Najczęściej używanym narzędziem diagnostycznym jest program ping™ - pozwala on zbadać istnienie połączenia między dwoma komputerami, drogę pomiędzy nimi, czas potrzebny na przejście pakietu oraz sprawdza czy drugi komputer pracuje w danym momencie w sieci. Przy okazji ping™ dokonuje tłumaczenia adresu domenowego na numer IP. Program ten jest przydatny do określania stanu sieci i określonych host�w, śledzenia i usuwania problem�w sprzętowych, testowania, mierzenia i zarządzania siecią, oraz do badania sieci. Polecenie ping {$nazwa/$numer_IP} wysyła specjalne pakiety ICMP do wskazanego komputera i czeka na odpowiedź. Możemy podawać jako cel adres domenowy lub numer IP. Przy okazji program ten dokonuje tłumaczenia adresu domenowego na numer IP.
$ ping pld-linux.org PING pld-linux.org (81.0.225.27) 56(84) bytes of data. 64 bytes from 81.0.225.27: icmp_seq=1 ttl=44 time=135 ms 64 bytes from 81.0.225.27: icmp_seq=2 ttl=44 time=99.8 ms 64 bytes from 81.0.225.27: icmp_seq=3 ttl=44 time=149 ms --- pld-linux.org ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 99.840/128.084/149.144/20.761 ms
pracę programu przerywamy skr�tem ctrl+c
Na powyższym wydruku przedstawiono 3 odpowiedzi na wysłane pakiety. Jeden wiersz oznacza odpowiedź na jeden pakiet, dla każdego z nich podawane są parametry trasy pomiędzy komputerami. Najistotniejszym parametrem jest czas odpowiedzi (time). W przypadku problem�w z siecią część pakiet�w może zostać zagubiona, będzie wskazywane przez specjalny licznik (icmp_seq) oraz przez końcowe statystyki. Brak jakiejkolwiek odpowiedzi można interpretować jako brak połączenia sieciowego z interesującym nas komputerem, blokadę tego typu pakiet�w na komputerze zdalnym lub zwyczajne wyłączenie maszyny. Na końcu wyświetlane są dodatkowo szczeg�łowe statystyki. Przy prawidłowym połączeniu czas odpowiedzi dla sieci lokalnej zazwyczaj nie przekracza 1 ms zaś w internecie może sięgnąć nawet kilkuset ms.
Komenda może dać r�wnież efekt podobny do poniższego:
[root@g82 ~]# ping google.pl PING google.pl (216.239.57.99) 56(84) bytes of data. From 192.168.6.1 icmp_seq=1 Packet filtered From 192.168.6.1 icmp_seq=2 Packet filtered --- google.pl ping statistics --- 2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1000ms
Może to oznaczać, że w naszej sieci zabronione jest wysyłanie ping�w poza LAN.
Nieco bardziej zaawansowanym programem jest traceroute™. Pokazuje on trasę jaką przechodzą pakiety między naszym komputerem, a sprawdzanym przez nas hostem. Wskazuje on czasy przesłania pakiet�w pomiędzy sąsiadującymi ze sobą routerami (tzw. czasy przeskok�w), znajdującymi się na trasie połączenia dw�ch maszyn. Pozwala śledzić trasę pakiet�w oraz wykrywać r�żnego rodzaje problemy w sieciach np.: błądzenie pakiet�w w sieci, "wąskie gardła" sieci, oraz awarie połączeń.
$ traceroute pld-linux.org traceroute to pld-linux.org (81.0.225.27), 30 hops max, 38 byte packets 1 192.168.1.1 (192.168.1.1) 0.295 ms 0.608 ms 0.484 ms 2 217.153.188.173 (217.153.188.173) 1.012 ms 0.648 ms 0.495 ms 3 217.8.190.153 (217.8.190.153) 30.894 ms 28.983 ms 29.719 ms
Jak widać, polecenie to wypisuje linie zawierające TTL, adres bramki oraz czas przebycia każdej z pr�bek z r�żnych gateway�w. Jeśli nie było odpowiedzi w ciągu trzech sekund to dla pr�bki drukowane jest '*'
Zdarza się, że chcemy lub musimy korzystać z serwera pośredniczącego (proxy), w tym celu trzeba wskazać programowi jego adres i port. Konfiguracja proxy w GNU/Linuksie zależy od programu klienckiego i może być wykonana na jeden z trzech sposob�w, oto ich lista:
zmienne środowiskowe -
z nich korzystają głï¿½wnie programy działające
w trybie znakowym np.: lynx™,
wget™,
poldek™.
Definiujemy je następująco:
{$protok�ł}_proxy
np.
serwer proxy dla FTP wskazujemy za pomocą
zmiennej ftp_proxy
zaś dla HTTP za pomocą http_proxy
np.:
export ftp_proxy=w3cache.dialog.net.pl:8080
Są programy, kt�re akceptują nazwy tych zmiennych napisanych wyłącznie wielkimi literami, tak więc dla wygody i pewności możemy zdefiniować obie wersje. Więcej o zmiennych środowiskowych znajdziemy w „Zmienne środowiskowe”.
opcje programu - wiele bardziej rozbudowanych aplikacji używa własnej konfiguracji proxy. Są to przeważnie programy dla środowiska X-Window np.: gFTP™, Firefox™, Opera™.
konfiguracja środowiska - programy ściśle związane ze środowiskami graficznymi Gnome™ lub KDE™ używają ustawień tychże środowisk. Do tego typu program�w należą np.: Epiphany™, Konqueror™.
Tutaj opisano spos�b badania zasob�w systemu operacyjnego.
Wiele poleceń zwracających wielkości zajmowanej pamięci obsługuje parametr -h przedstawiający wielkości w jednostkach bardziej wygodnych dla człowieka.
Komenda df służy do pokazania ilości miejsca na zamontowanych partycjach.
$ df -h System plik�w rozm. użyte dost. %uż. zamont. na /dev/hdc1 36G 5.6G 29G 16% /
Natomiast komendą du można sprawdzać objętość plik�w oraz całych katalog�w. Uruchomienie du -h wyświetli listę plik�w, katalog�w i ich objętości (z bieżącego katalogu)
$ du -h 4.1kB ./archiv/httpd 4.1kB ./archiv/mysql 4.1kB ./archiv/exim 17kB ./archiv 4.1kB ./httpd 4.1kB ./mysql 111kB ./exim 107kB ./ircd 4.1kB ./mail 2.1MB .
Za pomocą opcji -s
uzyskamy sumę objętości
wszystkich plik�w
$ du -sh /bin 3,4M /bin
Listę wszystkich uruchomionych proces�w oraz dotyczące ich dane otrzymamy dzięki poleceniu ps
$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1350 0.0 0.1 1788 868 ? Ss May27 0:00 syslog-ng zenek 2252 0.0 1.2 11316 6668 ? Ss May27 0:01 xfce4-session root 2301 0.0 0.3 2748 1556 tty2 Ss May27 0:00 -bash
Oraz w formie drzewa proces�w rodzic�w i proces�w potomnych
$ ps xf PID TTY STAT TIME COMMAND 2459 ? S 0:32 xmms 2460 ? S 0:00 \_ xmms 2461 ? S 0:00 \_ xmms 2465 ? S 0:00 \_ xmms 2816 ? S 0:00 \_ xmms
W przypadku potrzeby ciągłego śledzenia zmian w systemie możemy użyć programu top. Program ten pokazuje najbardziej zasobożerne procesy. Dodatkowo na bieżąco wyświetla całkowite zużycie procesora (CPU), pamięci operacyjnej(Mem) oraz zajętość przestrzeni wymiany (Swap).
$ top top - 01:38:54 up 3:28, 4 users, load average: 0.10, 0.08, 0.08 Tasks: 63 total, 2 running, 61 sleeping, 0 stopped, 0 zombie Cpu(s): 2.3% us, 1.3% sy, 0.0% ni, 96.1% id, 0.0% wa, 0.3% hi, 0.0% si Mem: 516244k total, 440344k used, 75900k free, 11840k buffers Swap: 1076312k total, 0k used, 1076312k free, 328012k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2240 root 15 0 62644 24m 45m S 1.6 4.9 7:37.40 X 2892 zenek 16 0 1880 928 1672 R 0.6 0.2 0:00.05 top 2695 zenek 16 0 6532 3824 5056 R 0.3 0.7 0:01.63 xterm 1 root 16 0 1532 584 1372 S 0.0 0.1 0:00.82 init
Informacje o samej pamięci i przestrzeni wymiany uzyskamy dzięki komendzie free
$ free total used free shared buffers cached Mem: 516244 445536 70708 0 11880 332728 -/+ buffers/cache: 100928 415316 Swap: 1076312 0 1076312
Całkowita ilość zużytej pamięci (razem z buforami dyskowymi) mieści się w pierwszym wierszu w kolumnie USED. Zaś ilość pamięci zużytej jedynie przez programy mieści się w drugim wierszu w tej samej kolumnie.
Do śledzenia zmian zużycia zasob�w systemu w funkcji czasu warto polecić program vmstat z liczbą sekund w parametrze. Podany czas jest odstępem pomiędzy pomiarami, program pokazuje zmiany w wykorzystaniu pamięci, obszaru wymiany, czasu procesora, przerwań czy wielkości transferu do i z urządzeń masowych:
# vmstat 2 procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 0 0 0 276896 980 89812 0 0 377 6 482 818 6 2 90 1 0 0 0 276780 980 89816 0 0 0 0 456 770 0 0 100 0 0 0 0 276772 980 89816 0 0 0 28 461 846 0 0 100 0
Szczeg�łowy opis oznaczeń kolumn odnajdziemy w podręczniku systemowym man/info.
Do proces�w kt�rych jesteśmy właścicielami możemy wysyłać sygnały (root może wysłać sygnał do każdego procesu). Aby zakończyć jakiś proces należy do procesu wysłać sygnał TERM. Dokonuje się tego poleceniem kill lub killall. Pierwsze zabija proces o podanym numerze PID (unikalnym identyfikatorze procesu) np.:
$ kill 2901
Drugie z poleceń zabija wszystkie procesy, kt�re mają podaną nazwę np.:
$ killall xmms
Sygnał TERM może być nieskuteczny w niekt�rych wypadkach, wtedy należy użyć bardziej brutalnej metody - sygnału KILL. Możemy go wysłać programem kill lub killall z odpowiednim parametrem: "-9" lub "-KILL":
kill -9 2901
W systemach uniksowych można ustawiać priorytety uruchamianym programom bądź też modyfikować bieżący priorytet działającego procesu. Priorytet jest nazywany jest "liczbą nice". M�wi ona jak mili jesteśmy dla systemu i innych użytkownik�w. Priorytet możemy ustawiać od -20 do +19, przy czym domyślna wartość zazwyczaj wynosi 0. Ujemne wartości oznaczają wyższy priorytet, zaś dodatnie niższy. Ujemną wartość może nadać tylko superużytkownik.
Aby uruchomić proces z priorytetem innym niż domyślny należy użyć programu nice np.:
$ nice -n +5 mc
Działającym procesom można zmieniać priorytet. Aby to zrobić używamy polecenia renice:
$ renice +5 mc
Pierwszą komendą jest who. Podaje ona nam nazwę użytkownika, terminal na kt�rym jest zalogowany oraz czas rozpoczęcia pracy.
$ who gozda tty1 Apr 18 10:52 gozda pts/1 Apr 18 16:21 gozda pts/4 Apr 18 11:06 gozda pts/6 Apr 18 14:46 gozda pts/8 Apr 18 16:25 gozda pts/9 Apr 18 18:25 gozda pts/10 Apr 18 18:29
Kolejna komenda w pokazuje nam kto jest zalogowany i co robi na poszczeg�lnych sesjach.
$ w 6:56pm up 8:05, 7 users, load average: 1.94, 1.75, 1.61 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT gozda tty1 - 10:52am 8:03m 16.67s 0.02s sh /usr/X11R6/bin/startx gozda pts/1 - 4:21pm 6:45 5.37s 5.32s irssi gozda pts/4 - 11:06am 37:46 3.22s 3.17s ekg gozda pts/6 - 2:46pm 10:17 12.66s 1.08s mp3blaster gozda pts/9 - 6:25pm 0.00s 0.12s 0.03s w gozda pts/10 - 6:29pm 22:07 3:58 0.02s ./mozilla-bin
Komenda users. Pokazuje ona pseudonimy użytkownik�w zalogowanych w systemie.
$ users gozda gozda gozda gozda gozda gozda gozda
Poleceniem whoami dowiadujemy się, jak nazywa się użytkownik, na kt�rym pracujemy.
$ whoami gozda
Spis treści
Spis treści
Ten rozdział opisuje metody zarządzania pakietami w systemie PLD.
Instalowanie, deinstalowanie oraz aktualizowanie składnik�w systemu operacyjnego to jedne z najważniejszych zadań administratora. Zautomatyzowanie tych proces�w pozwala na znaczne przyspieszenie i ułatwienie zarządzania systemem.
W świecie Otwartego Oprogramowania pomiędzy programami istnieją liczne powiązania, kt�re w efekcie wymuszają konieczność instalacji dodatkowych program�w i/lub bibliotek. Pominięcie tych zależności spowoduje problemy z działaniem programu lub całkowity jego brak. Śledzenie tych zależności może przyprawić o b�l głowy większość administrator�w. Na szczęście istnieją mechanizmy i narzędzia, kt�re pomagają znacznie zautomatyzować ten proces.
Elementy systemu operacyjnego dostępne są w tzw. pakietach (pot. "paczkach"). W PLD zastosowano system pakiet�w RPM™ (RPM Packet Manager™), kt�ry został stworzony przez tw�rc�w dystrybucji Red Hat Linux™. Istnieje możliwość instalacji pakiet�w RPM przygotowanych dla innych dystrybucji, jednak nie skorzystamy wtedy z dobrodziejstwa zależności dotyczących danego pakietu. Wymagane dodatkowe pakiety należy wtedy zainstalować samodzielnie.
Do zarządzania pakietami (instalacja, deinstalacja, uzyskiwanie informacji) używa się specjalnych program�w zwanych menadżerami pakiet�w:
Poldek™
Poldek to domyślny menadżer pakiet�w dla PLD. Jest nakładką na RPM-a o ogromnych możliwościach, pozwalającym na znaczną automatyzację procesu zarządzania dużymi ilościami pakiet�w. Jest "wołem roboczym" odciążającym administratora w jego żmudnym zajęciu. Konfigurację i opis Poldka przedstawiono w „Poldek”.
PackageKit™
Prosty zarządca pakiet�w, dla środowiska X-Window. Został stworzony pierwotnie dla Gnome, ma także wersję dla Qt. Jest to wygodne narzędzie, dobrze sprawujące się przy zrządzaniu niewielkimi ilościami pakiet�w. PackageKit wyświetla na tacce systemowej dostępność aktualizacji. PackageKit jest świetnym wyborem dla zupełnie niezaawansowanych użytkownik�w.
RPM™
Niskopoziomowy zarzdca pakiet�w, używany zwykle w nietypowych i awaryjnych sytuacjach. Opis posługiwania się tym programem zamieszczono w „RPM”.
Jedną z najczęściej używanych form instalacji jest instalacja z sieci, dlatego jeśli nie zostanie podane inaczej to właśnie taka instalacja jest traktowana jako domyślna. Używamy tej metody nawet jeśli system był instalowany z lokalnego źr�dła (np. z dysku), choćby w celu aktualizacji systemu.
Menadżery pakiet�w są wstępnie skonfigurowane, Aby jednak instalować niestandardowe pakiety lub użyć innego źr�dła, musimy podać odpowiednie parametry. Konfiguracja w tym zakresie jest opisana w „Serwery z pakietami”.
Istotną cechą pakiet�w RPM jest mechanizm tzw. zależności, dzięki nim w trakcie instalacji pakietu instalowane są automatycznie dodatkowe wymagane pakiety. Niekiedy w ramach zależności wymagana jest funkcjonalność dostarczana przez więcej niż jeden pakiet. W takim wypadku zostaniemy zapytani o to kt�ry pakiet ma być zainstalowany. Wynika to z filozofii PLD, kt�ra dopuszcza bogaty wyb�r oprogramowania spełniającego tą samą rolę.
Istnieją zależności wymagające wzajemnego wykluczania się pakiet�w, tak aby w systemie była zainstalowany był tylko jeden program z pośr�d kilku dostępnych. Jako przykład można wskazać serwery usług tego samego rodzaju lub pakiety zawierające w nazwie słowa "inetd" oraz "standalone".
Dodatkowo system pakiet�w pilnuje, aby nie można było mieć zainstalowanych dw�ch wersji tego samego pakietu. Pr�ba instalacji pakietu starszego niż ten, kt�ry mamy w systemie zakończy się niepowodzeniem, zaś przy instalacji nowszego nastąpi jego aktualizacja.
Menadżery pakiet�w pozwalają na ignorowanie powyższych zależności, jest to jednak operacja nie zalecana, gdyż powoduje p�źniej trudny do ogarnięcia bałagan. Wyjątki od tej zasady powinny być robione jedynie w razie uzasadnionej konieczności, takim przypadkiem jest np. aktualizacja kernela, operacja ta została opisana w „Jądro systemu”.
Dawniej zależności były budowane na podstawie nazw pakiet�w, w tej chwili stopniowo wprowadzane są zależności na podstawie plik�w (program�w, bibliotek itd.). Zyskujemy w ten spos�b elastyczność kosztem wygody w niekt�rych, rzadko spotykanych sytuacjach. W przypadku codziennej pracy z pakietami, nie odczujemy większych r�żnic i nie musimy się tym martwić.
Ważnymi elementami mechanizmu zależności są tzw. wymagania i własności. Pierwsza z cech wskazuje listę wymaganych dodatkowo element�w (pakiet�w, plik�w) do działania instalowanej aplikacji, druga zaś informuje, kt�re z element�w są dostarczane wraz z pakietem. Aby poznać wymagania pakietu posłużymy się Poldkiem w trybie interaktywnym:
poldek:/all-avail> desc -r logrotate Package: logrotate-3.7-2 PreReqs: /bin/sh, fileutils Requires: /bin/mail, /bin/sh, config(logrotate) = 3.7-2, crondaemon, glibc, libc.so.6, libc.so.6(GLIBC_2.0), libc.so.6(GLIBC_2.1), libc.so.6(GLIBC_2.2), libc.so.6(GLIBC_2.3), libpopt.so.0, libselinux, libselinux.so.1, popt RPMReqs: rpmlib(CompressedFileNames) <= 3.0.4-1, rpmlib(PayloadFilesHavePrefix) <= 4.0-1, rpmlib(PayloadIsBzip2) <= 3.0.5-1
Powyższe polecenie ma zadanie czysto informacyjne, gdyż jak już wspomniano zależnościami zajmie sie menedżer pakiet�w.
Sprawa nieco komplikuje się w przypadku własności, ponieważ w PLD nierzadko mamy dostępnych wiele pakiet�w spełniających podobne wymagania. Aby sprawdzić dostarczaną funkcjonalność ponownie użyjemy Poldka:
poldek:/all-avail> desc -p vixie-cron Package: vixie-cron-4.1-7 Provides: config(vixie-cron) = 4.1-7, crondaemon, crontabs >= 1.7, group(crontab)
Analizując powyższe przykłady można dopatrzyć się
informacji o dostarczaniu własności
crondaemon
przez vixie-cron, kt�ra
z kolei jest wymagana przez logrotate.
Własność crondaemon
jest dostarczana przez większą ilość pakiet�w,
możemy samodzielnie wybierać, kt�ry z
pakiet�w ma być instalowany lub ustawić automatyczny
wyb�r. O tym decyduje ustawienie opcji
choose equivalents manually
w
konfiguracji Poldka. Jeśli ustawimy opcję na
yes
(zalecane) to instalacja programu może
wyglądać następująco:
poldek:/all-avail> install logrotate Przetwarzanie zależności... Więcej niż jeden pakiet udostępnia właściwość "crondaemon": a) anacron-2.3-22 b) fcron-3.0.0-3 c) hc-cron-0.14-22 d) vixie-cron-4.1-7 Which one do you want to install ('Q' to abort)? [b]
Na powyższym przykładzie widać listę pakiet�w
mogących pełnić funkcję demona
zegarowego (crondaemon
),
dodatkowo podana jest domyślna wartość wyboru, nie
zawsze jest to najlepszy wyb�r dla konkretnej
instalacji, dlatego powinniśmy się upewnić, że
wybieramy najwłaściwszy pakiet. Więcej informacji o
obsłudze i konfiguracji Poldka odnajdziemy w
„Poldek”.
Pakiety mogą zawierać wiele małych program�w i/lub bibliotek albo jeden duży program może być podzielony na kilka pakiet�w. W PLD najczęściej stosowane jest to drugie rozwiązanie: osobno przechowywane są pliki uruchomieniowe, osobno biblioteki, a jeszcze osobno moduły, wtyczki i dodatki. Ponadto jeśli tylko można to są umieszczane w pojedynczych pakietach, dzięki temu unikamy dużych, zbiorczych paczek. Pozwala to instalować tylko to co jest nam potrzebne. Przykładowo jeśli program ABC wymaga bibliotek programu XYZ to instalujemy tylko pakiet z bibliotekami tego drugiego. Skraca to czas instalacji (zwłaszcza przy pobieraniu plik�w z Internetu) i pozwala oszczędzać miejsce na dysku.
Nierzadko do osobnych pakiet�w trafiają elementy aplikacji, kt�re zostały przewidziane przez jej tw�rc�w jako kompletna instalacja. Nie należy się tego obawiać, gdyż mechanizm zależności wymusi instalację wszystkich wymaganych dodatkowo pakiet�w.
Tak silne rozdrobnienie powoduje czasami, że do przy instalacji mechanizm zależności zaznacza sporą ilość dodatkowych pakiet�w. Potrafi to wprowadzić w konsternację, jednak nie należy się tego obawiać, gdyż są to zazwyczaj małe pakiety i po zainstalowaniu zajmują tyle samo lub mniej niż domyślna instalacja.
Aby ułatwić poruszanie się w tym gąszczu, możemy posłużyć się opisami pakiet�w:
poldek:/all-avail> desc proftpd-inetd
lub listami plik�w dostarczanych przez pakiet:
poldek:/all-avail> desc -f proftpd-inetd
Zdarza się, że znamy nazwę pliku, ale nie wiemy w jakim pakiecie się znajduje. Do odnalezienia pakietu posłużymy się poleceniem:
poldek:/all-avail> search -f */sendmail
Dodatkowo możemy korzystać z zamieszczonej dalej tabeli.
Nazwy pakiet�w mają następującą budowę:
{$nazwa}-{$wersja}.{$arch}.rpm
np.: 0verkill-0.16-3.i686.rpm
.
Tak wyglądają nazwy pakiet�w w systemie plik�w lub
na serwerze FTP. W menedżerach pakiet�w posługujemy się jedynie
nazwą lub nazwą i wersją (nie licząc instalacji za pomocą rpm-a).
Tabela 8.1. Opis zawartości pakiet�w w zależności od ich nazwy
Nazwa pakietu | Zawartość |
---|---|
program, program-core | głï¿½wny pakiet programu, zawiera pliki wykonywalne, dokumentację, skrypty startowe w przypadku usług, niekiedy biblioteki |
program-common | podstawowe, wsp�lne pliki; zwykle samodzielny taki pakiet jest bezużyteczny i wymaga zainstalowania dodatkowych pakiet�w |
program-libs | zestaw bibliotek stworzonych na potrzeby danego programu, są niekiedy wymagane przez inne programy |
program-tools, program-utils, program-progs | dodatkowe narzędzia, zwykle nie są konieczne do podstawowej pracy programu |
program-extras | dodatkowe, rzadziej używane elementy |
program-mod, program-plugin, program-applets, program-addon | r�żnej maści moduły, "wtyczki", applety i dodatki przeważnie nie są konieczne do podstawowej pracy programu |
program-skin(s), program-theme(s) | "sk�rki" i "tematy" modyfikujące wygląd programu |
program-driver | sterowniki |
program-backend | specjalne interfejsy służące do rozszerzania możliwości programu, łączenia z innymi programami, sprzętem itp. |
program-i18n | dodatkowe wersje językowe |
program-doc | dokumentacja programu |
program-devel | pakiety potrzebne dla programist�w i os�b kt�re zajmują się własnoręczną kompilacją program�w, bądź budowaniem pakiet�w. |
program-static | program skompilowany statycznie - nie wymaga bibliotek |
program-debuginfo | informacje dla debuggera - pliki użyteczne tylko dla os�b badających problemy z działaniem programu |
lib_nazwa_biblioteki | zestaw uniwersalnych bibliotek, nie związanych z żadnym konkretnym programem. |
usługa-inetd, usługa-standalone | alternatywne pakiety służące do wyboru trybu pracy niekt�rych usług. Należy wybrać jeden z nich: uruchamianie przez Inetd™ lub praca w tle (standalone). Pakiety te wzajemnie się wykluczają na poziomie mechanizmu zależności. |
usługa-init | skrypty startowe programu |
metapackage-program | metapakiet |
program-legacy | starsze wersje program�w lub sterowniki do starszych urządzeń |
kernel | pakiety okołokernelowe, zostały om�wione w „Jądro systemu” |
Wadą silnego rozdrobnienia pakiet�w jest pracochłonne zarządzanie, aby temu zaradzić stworzono tzw. metapakiety, zwane r�wnież pakietami wirtualnymi. Są to pakiety zawierający jedynie wymagania (requires), nie zawierają żadnych plik�w, ani własności (provides). Ich zadaniem jest zautomatyzowana instalacja większych grup pakiet�w oraz utrzymanie wstecznej zgodności w nazwach.
Część metapakiet�w łatwo odnajdziemy dzięki nazwie,
kt�ra zawiera słowo metapackage
,
np. metapackage-gnome
. Aby poznać
listę wymagań takiego pakietu, użyjemy opisanego nieco
wcześniej polecenia desc -r
trybu
interaktywnego Poldka.
Prace przy zarządzaniu pakietami niekiedy kończą się komunikatami skierowanymi do administratora, są to dość ważne informacje, dlatego powinniśmy je uważnie czytać. Zazwyczaj dotyczą plik�w konfiguracji, zarządzania użytkownikami/grupami, modyfikacji systemu rc-skrypt�w oraz zalecenia dalszego postępowania po instalacji pakietu. Dla przykładu poniżej przedstawiono komunikaty wyświetlane po instalacji Exim-a™:
Adding group exim GID=79. Adding user exim UID=79. Run "/etc/rc.d/init.d/exim start" to start exim daemon.
Pakiety, opr�cz plik�w programu, zawierają dokumentację, przykładowe pliki konfiguracji, strony podręcznika systemowego (man, info) oraz automatykę. Owa automatyka jest uruchamiana w trakcie instalowania bądź odinstalowania pakietu i wykonuje konieczne prace w systemie, dzięki czemu zmniejsza się nakład pracy administratora do absolutnego minimum. Jest tak skonstruowana, aby nie zaskakiwać administratora w najmniej oczekiwanych momentach oraz zapewnić nieprzerwanie działanie systemu, poniżej przedstawiono kilka przykład�w jej działania.
Jeśli instalujemy w systemie jakąś usługę to zostanie zapisana odpowiednia informacja do skrypt�w startowych i nowe oprogramowanie uruchomi się przy najbliższej zmianie trybu pracy lub restarcie systemu. Jeżeli jakaś usługa jest wyłączona z działania i nastąpi jej aktualizacja, to w dalszym ciągu nie będzie uruchamiana.
Jeśli działa usługa, a my ją zaktualizujemy lub
doinstalujemy dodatkowy moduł, to zostanie
ona automatycznie zrestartowana lub taka operacja zostanie
zasugerowana przez pakiet. Będzie to zależało od ustawienia
opcji RPM_SKIP_AUTO_RESTART
w
konfiguracji rc-skryptu lub globalnie w
/etc/sysconfig/rpm
- opcja przyjmuje
wartość yes/no
. Konfigurację rc-skrypt�w
dokładniej om�wiono w „Zarządzanie podsystemami i usługami”.
Po aktualizacji pakietu nie są naruszanie istniejące pliki
konfiguracji, nowe wersje tych plik�w są zapisywane z
rozszerzeniem ".rpmnew
". Przykładowo
po zaktualizowaniu pakietu sudo™
obok pliku /etc/sudoers
pojawi się
nowy plik o nazwie /etc/sudoers.rpmnew
,
tak więc zaktualizowany program będzie używał starego pliku
konfiguracji. W większości wypadk�w nie będzie to
stanowić problemu, jednak dla pewności należy skonfigurować
plik dostarczony z nowszym pakietem na wz�r poprzedniej
konfiguracji i zmienić mu nazwę poprzez usunięcie
omawianego rozszerzenia. Jest to pierwsza rzecz, kt�rą
należy sprawdzić w razie problem�w z działaniem
programu po aktualizacji.
Kiedy odnajdziemy plik *rpmnew to możemy łatwo sprawdzić czym r�żni się jego zawartość w stosunku do obecnie używanego pliku konfiguracji. Posłużymy się w tym celu programem diff z pakietu diffutils np.:
# diff jakis_plik.conf jakis_plik.conf.rpmnew
W przypadku niekt�rych program�w, po odinstalowaniu
pakietu, pozostawiane są jego pliki konfiguracji, posiadają
one rozszerzenie ".rpmsave
", możemy je
zachować lub skasować jeśli uznamy że są nam zbędne.
Osoby chcące trzymać porządek w systemie powinny zajmować się
plikami .rpmnew
i .rpmsave
od razu po pracy z menadżerem pakiet�w. Pliki łatwo
odnajdziemy, gdyż występują zwykle w katalogu
/etc
, odszukamy je następująco:
$ find /etc -name "*rpmnew" $ find /etc -name "*rpmsave"
W PLD programy są kompilowane dla wielu architektur
sprzętowych, pozwala to na używanie systemu na bardziej
r�żnorodnym sprzęcie oraz na lepsze dopasowanie do
używanego procesora.
Architekturę pakietu rozpoznamy po nazwie, jest to kilkuznakowe
oznaczenie znajdujące się tuż przed rozszerzeniem pliku.
W przypadku pakietu 0verkill-0.16-3.i686.rpm
jego architektura to i686
.
Aby sprawdzić architekturę komputera, używamy polecenia arch lub uname -m.
Pakiety zbudowane dla poszczeg�lnych architektur są umieszczane w odpowiednich katalogach na serwerze. Ścieżka katalog�w na serwerze wygląda następująco:
/dists/{$wersjaPLD}/PLD/{$architektura}
Przykładowo adres
ftp://ftp.pld-linux.org/dists/2.0/PLD/i686/
dotyczy systemu w wersji 2.0 (Ac)™ z
wybraną architekturą "i686
".
Poldek instaluje pakiety z tej architektury, do kt�rej należał
pakiet z Poldkiem, co w zasadzie jest jednoznaczne z architekturą, kt�ra została
wybrana przy instalacji. Konfiguracja źr�deł pakiet�w w Poldku została opisana
w „Poldek”.
Tabela 8.2. Lista nazw kodowych architektur i odpowiadających im rodzin procesor�w:
Nazwa architektury | Obsługiwana platforma | Dostępna wersja PLD |
---|---|---|
alpha | DEC/Compaq/HP Alpha AXP | Ra, Ac |
amd64 / x86_64 | AMD K8: Opteron, Athlon 64, Sempron (socket: 754, 939), Intel EM64T | Ac, Th |
athlon | AMD K7: Athlon, Duron, Sempron (socket A) | Ac |
i386 | wszystkie procesory zgodne z i386 firmy Intel | Ra, Ac |
i486 | Intel 486, AMD K5 (socket 3) i nowsze | Th |
i586 | Intel 586 Pentium, Cyrix 5x86, Cyrix 6x86, AMD K5 (socket 7), AMD K6 i nowsze | Ra, Ac |
i686 | Intel Pentrium II, Pentium PRO, AMD K7 i nowsze | Ra, Ac, Th |
ppc | PowerPC | Ra, Ac |
sparc | Sun SPARC 32bit | Ra, Ac |
sparc64 | Sun SPARC 64bit | Ac |
noarch | dowolna | - |
Należy pamiętać by instalować pakiety wyłącznie
przeznaczone dla używanej architektury. Wyjątkiem są
pakiety z oznaczeniem noarch
oraz
pakiety przeznaczone dla procesor�w Intel x86 i
zgodnych: i386
, i486
, itd.
Architektury z rodziny x86 są bardziej lub mniej
wyspecjalizowanymi grupami, najbardziej og�lna jest
386
, zaś każda następna w kolejności
jest bardziej wyspecjalizowana.
Im węższa specjalizacja grupy tym mniej modeli procesor�w
obsługuje. Przykładowo na maszynie z procesorem
Pentium III™
(i686
) możemy zainstalować system w
wersji i386
, ale na procesorze
386™ wersja i686
nie będzie działać. Jeśli mamy nowszy procesor, to
będziemy mogli użyć bardziej wyspecjalizowanej
architektury, a co za tym idzie lepiej wykorzystać jego
potencjał.
W PLD jest kilka grup pakiet�w (źr�deł) w ramach tej samej wersji dystrybucji, r�żnią się one wersjami pakiet�w i zastosowaniem. Ich listę uzyskamy za pomocą Poldka:
$ poldek -l
W większości wypadk�w, będziemy korzystać z głï¿½wnego źr�dła (main), jednak od czasu do czasu potrzeba zaktualizować system lub pobrać niestandardowe wersje pakiet�w, właśnie wtedy z nich skorzystamy. Źr�dła są oznaczane za pomocą etykiet:
main
(np. th
): głï¿½wne
źr�dło pakiet�w (domyślne), zawiera stabilne wersje, od chwili
wydania danej wersji dystrybucji, nie są tu dokonywane żadne
zmiany
obsolete (np. th-obsolete
):
stare pakiety, usunięte z main w wyniku aktualizacji.
Dzięki temu źr�dłu, możemy wr�cić do starszej wersji pakietu, jeśli
zajdzie taka konieczność. Źr�dło wprowadzone w Th.
test (np. th-test
):
trafiają tu pakiety prostu z builder�w, bez sprawdzenia
czy w og�le działają i czy są spełnione zależności. Używanie
pakiet�w z tego źr�dła jest dosyć ryzykownym krokiem, dlatego należy go
wykonywać wyłącznie w ostateczności
ready (np. th-ready
):
następny krok w życiu pakietu, jeśli pakiety działają
bez zarzutu, to są przenoszone razem z zależnościami do main.
Pakiety te są już wstępnie przetestowane, nadal jednak
powinniśmy zachować ostrożność instalując pakiety z tego katalogu
debuginfo (np. th-debuginfo, th-ready-debuginfo
):
pakiety zawierające wyłącznie symbole potrzebne przy debugowaniu.
Pakiety te są pomocne dla programist�w i deweloper�w.
home: źr�dło lokalne, pozwala łatwo
instalować pakiety z katalogu ~/rpm/RPMS
- miejsca domyślnego
umieszczania własnoręcznie zbudowanych pakiet�w.
Multilib
W środowisku x86_64 możemy używać także aplikacji 32 bitowych, aby wygodnie
instalować pakiety zostały przygotowane źr�dła multilib
/etc/poldek/repos.d/pld-multilib.conf
. Domyślnie są przygotowane
dla i686.
Źr�dła używane w starszych wersjach PLD:
updates
(np. ac-updates
) -
aktualizacje, zaleca się regularne sprawdzanie czy
nie pojawiają się tu nowe pakiety, źr�dło stało się zbędne w Th i
nie jest używane. W Th w roli updates używa się źr�dła ready.
W Ra™ istniały dwa niezależne źr�dła
pakiet�w z aktualizacjami: {$wersja}-updates-security
i {$wersja}-updates-general
.
W Ac™ nastąpiło ich połączenie
i od tej pory źr�dło nazywa się
{$wersja}-updates
.
supported (np. ac-updates
)
- nietypowe pakiety, kt�re nie powinny być trzymane w głï¿½wnym
źr�dle. Są tu umieszczane pakiety rzadko używane
lub starsze wersje, podobnie jak updates przestało
mieć rację bytu w Th.
Aby wybrać źr�dło inne niż domyślne należy użyć
parametru -n
np.:
$ poldek -n th -n th-ready
Należy pamiętać, że użycie każdego źr�dła będzie możliwe dopiero po pobraniu aktualnych indeks�w:
$ poldek -n debuginfo --up
Poldek jest dostarczany z właściwie skonfigurowanymi etykietami, są one zdefiniowane
w plikach /etc/poldek/source.conf
i /etc/poldek/repos.d/pld.conf
.
Adresy oficjalnych serwer�w i mirror�w znajdziemy w „Serwery z pakietami”.
Etykieta źr�dła rozpoczyna się od przedrostka określającego
wersję dystrybucji, zapisaną małymi literami, poniżej
przedstawiono ją jako ciąg {$wersja}
, kt�ry może
mieć wartość np. ra
, ac
lub th
.
Ciąg {$arch}
to architektura pakiet�w.
main: dists/{$wersja}/PLD/{$arch}/PLD/RPMS
obsolete: dists/{$wersja}/obsolete/{$arch}/RPMS
test: dists/{$wersja}/test/${arch}/
ready: dists/{$wersja}/ready/${arch}/
home: katalog lokalny: ~/rpm/RPMS
Zbudowany pakiet trafia do test gdzie oczekuje na zbudowanie zależności, następnie jest przenoszony przez RM-a do ready. kiedy wszytko jest w porządku trafia w końcu do main/updates. W przypadku bardziej krytycznych pakiet�w kiedy pojawia się aktualizacja to starsza wersja trafia do obsolete. Proces ten został szerzej opisany w podręczniku dewelopera.
W większości wypadk�w będziemy korzystali z gotowych pakiet�w, zdarza się jednak, że nie ma dostępnego jakiegoś pakietu lub nie odpowiadają nam opcje z jakimi został skompilowany. Co więcej może się zdarzyć, że będziemy potrzebować starszej, niedostępnej już wersji programu.
W takim wypadku nie powinniśmy pod żadnym pozorem kompilować samodzielnie program�w, jeśli nie upewnimy się, że nie można go zbudować.
Budowanie jest operacją tworzenia pakiet�w na podstawie plik�w spec, do tego nie potrzeba umiejętności tworzenia spec�w ani wiedzy dewelopera. Wystarczy odpowiednio przygotować środowisko, zainstalować kilka pakiet�w i użyć odpowiedniego narzędzia. Tak utworzymy nasz własny, prywatny builder, kt�ry może nam wielokrotnie służyć.
Opis budowania pakiet�w odnajdziemy w przewodniku dla deweloper�w PLD, wszystkie potrzebne informacje odnajdziemy pod adresem pld-linux.org/DevelopingPLD oraz w „Co jest potrzebne”.
Jeśli utworzymy środowisko wg. podanych wskaz�wek
pakiety będą umieszczane w katalogu
~/rpm/RPMS
.
Ułatwi to ich instalację, gdyż Poldek ma ustawione
lokalne źr�dło dla tego katalogu.
Zbudowany pakiet będziemy mogli instalować
dowolną ilość razy, warto więc przechowywać je
uznamy że mogą nam się jeszcze przydać.
Jeśli wymagamy od programu nietypowej
funkcjonalności i budujemy pakiet z niestandardowymi
opcjami to może się zdarzyć, że przy aktualizacji
zastąpimy naszą wersję programu tą z pakietu
dystrybucyjnego. Dlatego musimy być czujni przy
operacji aktualizacji lub dopisać nazwę tego
pakietu do opcji hold
w pliku
konfiguracji Poldka.
Poldek™ jest nakładką na program rpm™, zapewniającą wygodny interfejs obsługi oraz kilka dodatkowych funkcji. Poldek jest pośrednikiem w pobieraniu pakiet�w, indeksuje ich listy oraz ułatwia zarządzanie wieloma źr�dłami, może pobierać pakiety lokalnie (dyski twarde, napędy optyczne) lub z sieci (FTP, HTTP, HTTPS, SMB, RSYNC). Obsługuje ponadto zależności miedzy pakietami, wykrywa konflikty itp. Poldek nie obsługuje jednak wszystkich operacji możliwych na pakietach RPM, dlatego nie może całkowicie zastąpić programu rpm.
Poldek do wielu operacji (pobieranie pakiet�w i indeks�w, wyszukiwanie informacji itp.) nie wymaga praw administratora, wymagane są jednak do operacji zapisu w systemie, np. instalowanie, odinstalowanie, itp. Poldek w tym celu automatycznie używa programu sudo™, z tego względu konieczne jest posiadanie skonfigurowanego sudo, w przeciwnym razie pozostaje nam uruchamianie programu z konta roota.
Konfiguracja Poldka jest dość złożona i wyjaśnienie wszystkich szczeg�łï¿½w zajęło by zbyt wiele miejsca, dlatego zajmiemy się jedynie najczęściej używanymi opcjami. Nie powinniśmy się jednak tym przejmować, program jest gotowy do działania od razu po zainstalowaniu i w większości wypadk�w nie ma potrzeby nic modyfikować. Musimy jednak się upewnić, że mamy dobrze skonfigurowane adresy serwer�w i architekturę pakiet�w, co zostało om�wione w dalszej części rozdziału.
Więcej informacji o poldku i jego konfiguracji odnajdziemy w podręczniku systemowym (man,info) oraz na witrynie projektu pod adresem http://poldek.pld-linux.org.
Konfiguracja Poldka jest przechowywana w kilku plikach
wewnątrz katalogu /etc/poldek
, to czy
dany plik konfiguracji jest używany określa opcja
%include
, umieszczona w głï¿½wnym pliku
konfiguracji.
poldek.conf
- głï¿½wny
plik konfiguracji, jeśli nie zostało
zaznaczone inaczej to właśnie ten plik ma
na myśli autor
aliases.conf
- zawiera
zdefiniowane aliasy poleceń dla trybu
interaktywnego
fetch.conf
- zawiera
konfigurację alternatywnych program�w do
pobierania pakiet�w, domyślnie konfiguracja
z tego pliku nie jest wczytywana.
repos.d/pld.conf
-
ustawienia źr�deł pakiet�w dla PLD
source.conf
- plik
przeznaczony dla lokalnych źr�deł pakiet�w
.poldekrc
- plik
konfiguracji użytkownika, kt�ry umieszczamy
w katalogu domowym.
W pliku repos.d/pld.conf
mamy dwie
ważne opcje wskazujące skąd mają być pobierane
pakiety. Opcja _pld_arch
wskazuje
architekturę sprzętową pakiet�w, zaś
_pld_prefix
m�wi skąd mają być
pobierane pakiety i dla jakiej wersji dystrybucji.
Więcej o architekturach pakiet�w znajdziemy w
„Architektury pakiet�w”,
adresy serwer�w i oficjalnych mirror�w zawarto w
„Serwery z pakietami”.
Poldek zacznie korzystać z proxy po ustawieniu właściwych
zmiennych środowiskowych - zar�wno w przypadku wbudowanego
klienta jak i klient�w zewnętrznych (np. wget). Możemy też
użyć opcji proxy
.
Konfigurację proxy dla Linuksa szerzej opisano w
„Proxy”.
Poldek przechowuje indeksy pakiet�w w
katalogu zdefiniowanym w opcji cachedir
,
domyślnie jest to $HOME/.poldek-cache
.
Jest to dobre rozwiązanie jeśli z Poldka korzysta jeden
użytkownik, jeśli ma używać go więcej
os�b to lepiej ustawić wsp�lny katalog np.
/var/cache/poldek-cache
,
w ten spos�b unikniemy wielokrotnego pobierania indeks�w.
use sudo
- użycie sudo przy uruchomieniu
z konta zwykłego użytkownika.
hold
- blokuje aktualizację
pakiet�w kt�re znalazły się na jej liście.
ignore
- opcja ukrywająca podane pakiety
na liście dostępnych.
choose equivalents manually
- pozwala
wybierać użytkownikowi jeden z kilku pakiet�w oferujących
tą samą funkcjonalność, domyślnie wyłączona przez co
wyb�r następuje automatycznie. Pozwala bardzo precyzyjnie
wybierać pakiety do zainstalowania.
Kolejną ważną jego cechą jest możliwość pracy zar�wno w trybie wsadowym jak i interaktywnym. Pierwszy z nich nadaje do wszelkiej maści skrypt�w i automatyki, zaś drugi jest wygodniejszy do bezpośredniej obsługi przez użytkownika. Komfort pracy w trybie interaktywnym sprawia, że użytkownicy na co dzień korzystają niemal zawsze z niego. Stąd jeśli nie zostało to inaczej napisane to właśnie ten tryb autor ma na myśli.
Praca w trybie interaktywnym przypomina do złudzenia używanie powłoki systemowej (shella). Dostępne są: historia poleceń, pomoc, dopełnianie komend i nazw pakiet�w, aliasy, potoki itp. Na potrzeby tego rozdziału w przykładach taki tryb będziemy sygnalizować następującym znakiem zachęty:
poldek>
Jedną z największych zalet trybu interaktywnego jest dopełnianie nazw pakiet�w i poleceń za pomocą tabulatora. Przykładowo naciśnięcie klawisza tab po poleceniu:
poldek> upgrade
spowoduje wyświetlenie listy pakiet�w, dla kt�rych są dostępne aktualizacje.
W przypadku nazw pakiet�w możemy używać "gwiazdki" jako znaku zastępczego (wildcard), kt�ry zastępuje dowolny ciąg znak�w. Przedstawiono to na poniższym przykładzie, kt�ry spowoduje zainstalowanie wszystkich pakiet�w o nazwach zaczynających się od "gnome-theme"
poldek> install gnome-theme*
Zazwyczaj nie ma potrzeby podawania wersji programu, jednak w pewnych przypadkach możemy mieć dostępnych kilka wersji tego samego pakietu (np. przy używaniu wielu źr�deł na raz). Wtedy musimy podać jednoznacznie wersję pakietu.
Mamy do dyspozycji potoki:
poldek> ls perl* | grep curses
Możemy r�wnież wywoływać polecenia zewnętrzne:
poldek> ls perl* | !wc -l
W obsłudze źr�deł i pakiet�w występuje wiele podobieństw do systemu plik�w. Źr�dła są traktowane jak katalogi zaś pakiety jak pliki, do poruszania się w tym środowisku używamy poleceń takich jak pwd, ls oraz cd.
Opis wszystkich parametr�w trybu wsadowego uzyskamy dzięki poleceniu
$ poldek --help
Jest tam całe bogactwo
opcji, dzięki kt�rym będziemy mogli ułatwić sobie pracę.
Na szczeg�lną uwagę zasługuje parametr --shcmd
pozwalający wydawać polecenia w trybie wsadowym jak w trybie
powłoki np.:
$ poldek --shcmd="desc apache"
Możemy w tym celu użyć r�wnież polecenia ipoldek, np.:
$ ipoldek desc apache
Poldek uruchomiony po raz pierwszy (bez podawania parametr�w)
sprawdza czy istnieją indeksy dla źr�deł, kt�re ma automatycznie
obsługiwać. Jeśli ich nie ma, to zostaną automatycznie pobrane
i zapisane w miejscu wskazanym przez om�wioną powyżej opcję
cachedir
. Po tej operacji zostanie
uruchomiony Poldek trybie interaktywnym i będzie gotowy do
pracy.
Przed każdą kolejną pracą z programem musimy uaktualnić
indeksy pakiet�w, na wypadek gdyby w źr�dłach nastąpiły
zmiany, w przeciwnym razie możemy otrzymywać komunikaty
o braku pakiet�w. Aby uaktualnić indeksy domyślnych źr�deł
wywołujemy następująco program z powłoki systemowej:
$ poldek --up
Aby pobrać na nowo indeksy wywołujemy Poldka z parametrem
--upa
,
dla pozostałych źr�deł musimy podać ich nazwę po parametrze
-n
,
źr�dła pakiet�w zostały om�wione w dalszej części rozdziału.
Po uruchomieniu programu mamy od razu możliwość zarządzania pakietami, aby zobaczyć listę dostępnych poleceń wpisujemy help i naciskamy klawisz Enter. Większość poleceń ma składnię:
poldek> {$polecenie} {$pakiet} {$opcje}
Opis dodatkowych parametr�w znajdziemy w pomocy danego polecenia, po napisaniu:
poldek> {$polecenie} -?
Aby opuścić program wpisujemy polecenie quit lub wciskamy ctrl+d
Mamy dostępne następujące polecenia zarządzania pakietami:
operacje instalacji (install), aktualizacji
pakiet�w (upgrade), usuwania pakiet�w
(uninstall), pobierania pakiet�w bez
instalacji (get). Ponadto mamy polecenia do
zbierania danych o pakietach: wyświetlanie listy dostępnych
(ls), wyświetlenia informacji
(desc) oraz przeszukiwania bazy
(search).
W wielu przypadkach pomocna będzie opcja -t
,
kt�ra przeprowadzi symulację całej operacji, dzięki kt�rej
dowiemy się jak duże i jak istotne zmiany zostaną dokonane
w systemie po operacji. Najczęściej jest używana przy
aktualizacji i usuwaniu pakiet�w.
Poniżej zamieszczono kilka przykład�w zarządzania pakietami, na początek przykład wyświetlenia listy pakiet�w (wszystkich zaczynających się od zsh):
poldek> ls zsh*
wyświetlenie informacji o pakiecie:
poldek> desc zsh
instalacja pakietu:
poldek> install zsh
deinstalacja:
poldek> uninstall zsh
To jedynie podstawowe polecenia, więcej informacji znajdziemy w pomocy Poldka.
Poldek ma kilka zdefiniowanych źr�deł pakiet�w w plikach
source.conf
i
repos.d/pld.conf
, pierwszy z plik�w
jest głï¿½wnym plikiem konfiguracji źr�deł, drugi zaś
zawiera wpisy dla oficjalnych źr�deł PLD. Aby wyświetlić
listę skonfigurowanych źr�deł, wraz użytymi opcjami
użyjemy polecenia:
$ poldek -l ac ftp://ftp.ac.pld-linux.org/dists/ac/PLD/athlon/PLD/RPMS/ (type=pndir) ac-ready ftp://ftp.ac.pld-linux.org/dists/ac/ready/athlon/ (noauto,type=pndir) ac-supported ftp://ftp.ac.pld-linux.org/dists/ac/supported/athlon/ (noauto,type=pndir) ac-test ftp://ftp.ac.pld-linux.org/dists/ac/test/athlon/ (noauto,type=pndir) ac-updates-general ftp://ftp.ac.pld-linux.org/dists/ac/updates/general/athlon/ (noauto,type=pndir) ac-updates-security ftp://ftp.ac.pld-linux.org/dists/ac/updates/security/athlon/ (type=pndir) home /home/users/qwiat/rpm/RPMS/ (noauto,noautoup,type=dir)
Nie wszystkie źr�dła są obsługiwane automatycznie,
zależy to od ustawienia
opcji noauto
w konfiguracji danego źr�dła
(zauważymy ją też na powyższym zrzucie ekranu).
Aby tymczasowo użyć innego zestawu źr�deł przy uruchomieniu
musimy podać ich listę poprzedzonych parametrem
-n
np.:
$ poldek -n ac -n ac-ready
Teraz lista dostępnych pakiet�w będzie się składała z
zawartości źr�deł ac
i
ac-ready
,
jeśli chcemy, aby zawsze korzystał z niestandardowego
zestawu źr�deł wygodniej będzie zmodyfikować ustawienie opcji
noauto
. Oficjalne źr�dła PLD
zostały wyczerpująco om�wione w
„Źr�dła pakiet�w”.
Istnieje możliwość instalacji pakiet�w Poldkiem z lokalnych
źr�deł, zamiast posługiwania się programem rpm.
W pliku source.conf
zdefiniowane
jest źr�dło home
, kt�re służy do wygodnego
instalowania pakiet�w z katalogu
$HOME/rpm/RPMS
, używanego powszechnie
do umieszczania samodzielnie budowanych
pakiet�w. Nie ma jednak potrzeby każdorazowego
umieszczania tam pakiet�w jeśli to uznamy za konieczne.
Możemy utworzyć tymczasowe źr�dło lokalne na podstawie
zawartości katalogu za pomocą
opcji -s
:
poldek -s /jakis/katalog
Poldek po uruchomieniu tworzy dla
wygody dodatkowe źr�dła wirtualne: all-avail
i installed
. Pierwsze zawiera
sumę pakiet�w ze wszystkich wskazanych źr�deł, drugie
to lista zainstalowanych pakiet�w.
Przy pracy z samodzielnie podawanymi źr�dłami należy wskazywać też głï¿½wne źr�dło pakiet�w (main), tak aby mogły zostać pobrane pakiety wymagane w ramach zależności. W przeciwnym razie możemy otrzymać błędy o nieistniejących pakietach.
Używając programu rpm posługujemy się następującym schematem: rpm [opcje] pakiet.rpm
Instalacja pakietu jest dosyć prosta. Załï¿½żmy że pobraliśmy
z sieci plik
docbook-dtd31-sgml-1.0-12.noarch.rpm
,
teraz jedyną rzeczą jaką musimy wykonać jest wydanie polecenia
rpm z opcją -i
. Używając
kombinacji -ivh
dla procesu instalacji,
-Uvh
uzyskamy pasek postępu instalacji dla
poszczeg�lnych instalowanych pakiet�w.
# rpm -i docbook-dtd31-sgml-1.0-12.noarch.rpm
Brak ostrzeżeń lub błęd�w oznacza prawidłową instalację, teraz nieco skomplikujemy sytuację:
# rpm -i libghttp-devel-1.0.9-4.i686.rpm error: failed dependencies: libghttp = 1.0.9 is needed by libghttp-devel-1.0.9-4
Tym razem instalacja się nie powiodła, ponieważ pakiet
libghttp-devel
wymaga
zainstalowanego pakietu libghttp
.
Aby instalacja pakietu się powiodła wykonujemy
następujące polecenie:
# rpm -i libghttp-devel-1.0.9-4.i686.rpm libghttp-1.0.9-4.i686.rpm
Teraz wszystko jest w porządku, oba pakiety są zainstalowane.
Możliwe jest instalowanie pakietu z opcją ignorowania
zależności: --nodeps
,
opcję tą stosujemy jednak w ostateczności.
Aktualizacja przebiega podobnie jak instalacja, tyle że używamy
przełącznika -U
np.:
# rpm -U docbook-dtd31-sgml-1.0-13.noarch.rpm
Należy pamiętać o tym, że aktualizacja nastąpi tylko wtedy gdy w systemie jest zainstalowana starsza wersja, w przeciwnym wypadku zostaniemy poinformowani, że pakiet jest już zainstalowany. Aby dokonać reinstalacji pakietu wykonujemy polecenie
# rpm -i docbook-dtd31-sgml-1.0-13.noarch.rpm --force
Zainstalowaliśmy kilka pakiet�w, teraz możemy spr�bować je
odinstalować - wykonujemy to przy użyciu opcji
-e
.
# rpm -e libghttp-devel-1.0.9-4.i686.rpm libghttp-1.0.9-4.i686.rpm error: package libghttp-devel-1.0.9-4.i686.rpm is not installed error: package libghttp-1.0.9-4.i686.rpm is not installed
C�ż tu się stało? Podano nieprawidłową nazwę pakietu, należy pamiętać o tym, że przy odinstalowaniu pakietu nie podaje się rozszerzenia pakietu. Poprawne polecenie przedstawiono poniżej:
# rpm -e libghttp-devel libghttp
lub:
# rpm -e libghttp-devel-1.0.9-4 libghttp-1.0.9-4
Uwaga: pierwszy przykład stosuje się w przypadku zainstalowania jednej wersji pakietu, drugi zaś używa się w przypadku kilku r�żnych (np. dwie r�żne wersje jądra).
Dobrym zwyczajem jest używanie Poldka z poziomu zwykłego użytkownika z włączoną obsługą sudo:
use sudo = yes
Jest to domyślne zachowanie Poldka, dzięki temu dla operacji wymagających uprawnień superużytkownika używany jest program sudo. Oczywiście w systemie musi być zainstalowany pakiet sudo, a dany użytkownik musi być uprawniony do jego używania.
W PLD mamy możliwość kontrolowania podpis�w pakiet�w, dzięki czemu zyskujemy pewność, że instalujemy pakiety z zaufanego źr�dła. Importując klucz klucz publiczny GPG unikamy r�wnież zasypywania następującymi komunikatami:
Nagłï¿½wek V3 sygnatura DSA: NOKEY, key ID 1bbd5459
Zaczynamy od zaimportowania klucza publicznego (dla Ac) z serwera FTP:
rpm --import ftp://ftp.pld-linux.org/dists/2.0/PLD-2.0-Ac-GPG-key.asc
Od tej pory nie zobaczymy żadnych komunikat�w z ostrzeżeniami,
warto dodatkowo zabezpieczyć się przed przypadkowym zainstalowaniem
niepodpisanych pakiet�w. Wystarczy, że do każdego z podpisanych źr�deł
zdefiniowanych w pliku /etc/poldek/pld-source.conf
dodajemy wiersz:
signed = yes
przykładowe źr�dło będzie wyglądało następująco:
[source] type = %{_ac_idxtype} name = ac path = %{_pld_prefix}/PLD/%{_pld_arch}/PLD/RPMS/ signed = yes
Teraz Poldek będzie ostrzegał przy instalacji niepodpisanego pakietu:
uwaga: rhythmbox-0.9.8-2.athlon.rpm: gpg/pgp nie znaleziono podpisu błąd: rhythmbox-0.9.8-2: signature verification failed Wystąpiły błędy weryfikacji podpisu. Kontynuować? [y/N]
Więcej informacji w dokumentacji programu rpm i Poldka.
Jeśli chcemy utworzyć listę zainstalowanych pakiet�w w kolejności wg. daty instalacji to posłużymy się poleceniem
# rpm -qa --last
Bywa, że pakiet w wyniku błęd�w w skryptach
nie pozwala się odinstalować, możemy go jednak
łatwo usunąć wydając polecenie deinstalacji z
parametrem --noscripts
np.:
# rpm -e lockdev-1.0.2-1 --noscripts
Jeśli obawiamy się aktualizacji jakichś pakiet�w,
możemy posłużyć się operacją repackage
-
ponownego umieszczenia plik�w w pakiecie rpm. Jeśli program po
aktualizacji odmawia posłuszeństwa, wystarczy ponownie
zainstalować pakiet w starszej wersji.
Aby włączyć repakietację wystarczy, że
ustawimy niezerową wartość dla makra
%_repackage_all_erasures
w pliku
/etc/rpm/macros
:
%_repackage_all_erasures 1
Od tej pory każda aktualizacja rozpocznie się od ponownego złożenia pakietu. Dla pojedynczych pakiet�w nie ma sensu modyfikować pliku z makrami, lepiej przekazać parametr do rpm-a:
poldek> upgrade geninitrd-10000.18-6.noarch --pmop=--repackage
W przypadku bezpośredniego użycia rpm-a:
# rpm -U --repackage geninitrd-10000.18-6.noarch
Tak zbudowane pakiety
trafiają do katalogu /var/spool/repackage
Repakietacja jest czasochłonna, ponadto dodatkowo
zajmowane jest miejsce na dysku, dlatego najlepiej używać tej
funkcji tylko dla wybranych program�w.
Aby cofnąć wersję pakietu wykonujemy następującą operację:
rpm -U --oldpackage /var/spool/repackage/1189984560/geninitrd-10000.18-6.noarch
Zdarza się, że potrzebujemy sprawdzić czy nie nastąpiły w systemie uszkodzenia jakichś plik�w lub ich modyfikacje. Takie zdarzenia mogą się pojawić w wypadku uszkodzenia systemu plik�w, błędu człowieka lub ataku crackera. W obu przypadkach możemy posłużyć się weryfikacją pakiet�w RPM. Kontrola przyniesie oczekiwany skutek tylko wtedy, gdy jesteśmy pewni, że sama baza RPM nie została skompromitowana lub uszkodzona.
Aby uzyskać listę zmodyfikowanych plik�w użyjemy programu rpm:
# rpm --verify --all ......G. /etc/cups S.5....T /usr/lib/libsasl2.so.2.0.22 S....... c /etc/xml/catalog .M...UG. c /etc/samba/smb.conf
szczeg�łowy opis oznaczeń znajdziemy w manualu programu rpm. Musimy pamiętać, że wiele plik�w konfiguracyjnych (oznaczanych literką "c") jest modyfikowanych po instalacji programu, dlatego ich obecność na liście jest naturalna.
Załï¿½żmy, że poznaliśmy listę zmodyfikowanych plik�w i chcemy na jej podstawie stworzyć listę pakiet�w do reinstalacji. Zaczynamy od odfiltrowania wszystkiego pr�cz nazw plik�w:
# rpm --verify --all | sed 's/.*\ //' > pliki.txt
Taką listę możemy teraz sobie obejrzeć i ewentualnie zmodyfikować, kiedy lista już nam odpowiada sprawdzamy z jakich pakiet�w pochodzą pliki:
# cat pliki.txt | xargs rpm -qf --qf '%{NAME}\n' | sort -u > pakiety.txt
Powyższy ciąg poleceń stworzy listę składającą się wyłącznie z nazw pakiet�w, by uniknąć problem�w w przypadku r�żnic w wersjach pakiet�w: tych zainstalowanych z dostępnymi do instalacji. Mając listę unikalnych nazw pakiet�w, możemy wywołać polecenie ich reinstalacji:
# poldek --reinstall --pset pakiety.txt
System pakiet�w RPM opiera się na bazie w postaci plik�w
przechowywanych w katalogu /var/lib/rpm
.
Nagłe przerwanie pracy programu, kt�ry na niej operował
może zaowocować błędami w jej strukturze.
Na początek należy się upewnić, że żaden z
proces�w nie operuje na bazie:
# lsof | grep /var/lib/rpm
jeśli nie wyświetlą nam się żadne informacje to
możemy usunąć pliki blokad, łatwo je rozpoznamy,
gdyż zaczynają się od __db
# rm -f /var/lib/rpm/__db*
Teraz możemy spr�bować czy sytuacja się poprawiła, jeśli nie to musimy spr�bować przebudować bazę. Zaczynamy od wykonania kopii bezpieczeństwa:
# tar -czf rpm.tar.gz /var/lib/rpm/
następnie wydajemy polecenia przebudowania:
# rpm --rebuilddb
W większości wypadk�w ta operacja pomoże nam odzyskać bazę, może się jednak zdarzyć, że odtworzy nam się tylko jej część. Do oszacowania strat konieczne będzie utworzenie listy pakiet�w w bazie:
# rpm -qa
Kiedy ustalimy listę brakujących pozycji,
najłatwiejszym sposobem dodania brakujących
wpis�w będzie instalacja pakiet�w z opcją
--justdb
, powodującą jedynie
modyfikowanie bazy RPM.
Zdarza się, że potrzebujemy zainstalować na nowo wszystkie pakiety, np. w wypadku zainstalowania pakiet�w w niewłaściwej architekturze. Nie jest to pracochłonna operacja, wystarczy, że z powłoki Poldka wydamy polecenie:
poldek> install -F * --reinstall --nodeps --nofollow
Ten rozdział zawiera dostępnych w PLD bootloader�w
Podczas startu naszego komputera z naszego dysku uruchamiany jest bootloader. To właśnie on odpowiada za załadowanie prawidłowego jądra systemu, czy też przekazywanie do jądra specjalnych parametr�w. Dla architektur x86 mamy do wyboru jeden z dw�ch bootloader�w: LILO™ oraz Grub™ (brak wersji 64 bit).
Oba bootloadery pozwalają na przekazywanie do jądra specjalnych parametr�w, dzięki kt�rym możemy wpływać na start lub pracę systemu jeszcze przed jego załadowaniem. Parametry przekazane przed startem systemu będą przesłaniać te użyte w konfiguracji bootloadera. W poniższej tabeli przedstawiono najczęściej używane opcje.
Przekazywanie parametr�w jądra wygląda podobnie w
obu wypadkach, po włączeniu specjalnego trybu w
bootloaderze otrzymujemy wiersz, na końcu kt�rego
dopisujemy potrzebne nam parametry lub modyfikować
istniejące.
Poniżej przedstawiamy przykładowe dodanie parametru
init
w bootloaderze Grub:
grub append> root=/dev/sda2 init=/bin/sh
Tryb modyfikacji parametr�w startowych w Grubie aktywujemy przez wciśnięcie klawisza e, w przypadku LILO wpisujemy etykietę obrazu, jeśli to jest graficzne LILO to użyjemy klawisza tab.
Tabela 9.1. Parametry jądra
Parametr | Znaczenie | Przykład |
---|---|---|
{$nr}/single |
Cyfra (1-5) wskazująca kt�ry poziom
uruchomieniowy (run level), opcja
single to tryb jednego użytkownika.
Dzięki nim opcjom można przesłonić
ustawienie opcji
Więcej o poziomach pracy w
„Zmiana poziomu pracy systemu”, zaś o pliku
|
single lub
1
|
root={$urządzenie} |
Wskazanie urządzenia (partycji) na
kt�rym znajduje się głï¿½wny system
plik�w. Wartością parametru może być
ścieżka do urządzenia w katalogu
Urządzenia oraz liczby major i minor szerzej opisano w „Urządzenia” |
root=/dev/hda1 lub
root=0x301
|
init={$program} | Wskazanie programu, kt�ry ma zostać użyty zamiast domyślnego programu Init™; opcja używana w krytycznych sytuacjach, np. gdy system nie może zostać uruchomiony nawet w trybie single. | init=/bin/bash |
vga={$tryb} | Wskazanie trybu bufora ramki, więcej o buforze ramki w następnym rozdziale. | vga=0x303 |
Opis wybranych parametr�w jądra zamieszczono na stronie
http://www.jtz.org.pl/Html/BootPrompt-HOWTO.pl.html,
zaś pełną ich listę odnajdziemy w dokumentacji
jądra, w pliku
/usr/src/linux/Documentation/filesystems/devfs/boot-options
Są r�wnież specjalne parametry, kt�re przekazuje się do jądra w trakcie pracy systemu, opisaliśmy je w „Parametry jądra”.
Oba bootloadery mają możliwość instalacji zar�wno w obszarze MBR dysku, jak i bootsectorze partycji. Instalacja w MBR jest dosyć wygodna i o wiele bardziej popularna, dlatego właśnie tam powinniśmy instalować bootloader. Instalacja w bootsectorze w wypadku niekt�rych system�w plik�w (np. XFS) jest niemożliwa, gdyż ich superblok jest umieszczany na samym początku partycji - w miejscu kt�re powinno być zarezerwowane dla bootloadera.
Frame Buffer (bufor ramki) to m.in. mechanizm pozwalający
na pracę konsoli w wyższych rozdzielczościach. Aby go
włączyć przekazujemy parametr vga
przy
uruchomieniu bootloadera
lub dodajemy go do pliku konfiguracji np.:
vga=0x303
Spos�b dodania tej opcji do pliku konfiguracji bootloadera opisano w dotyczących ich rozdziałach.
Wartość opcji vga
to numer trybu
graficznego dla danej rozdzielczości i głębi koloru,
listę dostępnych tryb�w przedstawiono w poniższej tabeli.
Kodowe oznaczenia tryb�w bufora ramki możemy podawać
zar�wno szesnastkowo jak i dziesiętnie, dlatego też
w tabeli, obok wartości szesnastkowych umieszczono
wartości w systemie dziesiętnym (w nawiasach).
Tabela 9.2. Tryby bufora ramki
Głębia koloru | 640x480 | 800x600 | 1024x768 | 1280x1024 |
---|---|---|---|---|
256 (8 bit) | 0x301 (769) | 0x303 (771) | 0x305 (773) | 0x307 (775) |
32k (15 bit) | 0x310 (784) | 0x313 (787) | 0x316 (790) | 0x319 (793) |
65k (16 bit) | 0x311 (785) | 0x314 (788) | 0x317 (791) | 0x31A (794) |
16M (24 bit) | 0x312 (786) | 0x315 (789) | 0x318 (792) | 0x31B (795) |
Zamiast wskazywać konkretny tryb możemy opcji
vga
przypisać wartość
ask
, dzięki temu jądro pozwoli wyświetlić
listę tryb�w i wybrać jeden z nich.
Więcej o buforze ramki dowiemy się z dokumentacji kernela,
jeśli zainstalowaliśmy pakiet z dokumentacją jądra to
znajdziemy ją w katalogu
/usr/src/linux/Documentation/fb
.
LILO™ (LInux LOader) jest najbardziej popularnym linuksowym
bootloaderem. Jego instalacja polega na utworzeniu pliku
konfiguracyjnego (/etc/lilo.conf
) a następnie
na wydaniu polecenia lilo w celu instalacji w
MBR lub bootsektorze. Każda modyfikacja pliku konfiguracji,
wygenerowanie nowego obrazu initrd
lub
instalacja nowego jądra pociąga za sobą konieczność ponownej
instalacji obrazu.
O initrd
poczytamy w „Initrd”.
Poniżej, dla przykładu przedstawiony został bardzo prosty plik konfiguracji, ma on za zadanie umieścić lilo w MBR dysku twardego, umożliwiając w ten spos�b uruchomienie naszej dystrybucji.
boot=/dev/hda read-only lba32 image=/boot/vmlinuz label=pld root=/dev/hda1 initrd=/boot/initrd
Plik konfiguracji lilo dzieli się na dwie zasadnicze części:
blok opcji głï¿½wnych oraz opcje obrazu. W powyższym przykładzie
opcje głï¿½wne umieszczone są na samym początku (do pustego
wiersza). Wartość zmiennej
boot
m�wi gdzie ma zostać zainstalowany
bootloader (bootsector/MBR), w tym wypadku jest o MBR dysku.
Opcja read-only
wymusza start systemu w
trybie tylko do odczytu (p�źniej jest przemontowany na tryb
do odczytu i zapisu), lba32
włącza
wykorzystanie 32-bitowego adresowania (jest rozwiązaniem
limitu cylindra 1024).
Następna sekcja (ustawienia obrazu) to konfiguracja dla
konkretnego systemu operacyjnego (tutaj Linuksa). Każdy
system, kt�ry mielibyśmy
obsługiwać z poziomu lilo, musi mieć taką sekcję. Opcja
image
rozpoczyna sekcję i jednocześnie
wskazuje ściekę do jądra, label
to
wyświetlana etykieta obrazu, root
wskazuje
urządzenie z głï¿½wnym systemem plik�w,
initrd
to ścieżka do obrazu initrd (initial
ramdisk).
Opcję root
szerzej opisano w
„Wstęp”. Z nazewnictwem
urządzeń masowych zapoznamy się w
„Nazewnictwo urządzeń masowych”.
Dzięki powyższej konfiguracji bootloader bezzwłocznie uruchomi nasze PLD zainstalowane na pierwszej partycji dysku hda bez zadawania jakichkolwiek pytań. W wielu przypadkach będziemy chcieli przekazać do kernela specjalne parametry lub mieć możliwość wyboru innego systemu operacyjnego (o ile dodaliśmy do lilo taką możliwość). Wtedy konieczne będzie zdefiniowanie dw�ch dodatkowych opcji:
prompt timeout=100
Pierwsza włącza tryb interaktywny, druga zaś ustawia czas oczekiwania na naszą reakcję, podawany w dziesiątych częściach sekundy. W tej chwili możemy wygenerować lilo i zrestartować maszynę aby sprawdzić czy dokonaliśmy prawidłowej konfiguracji.
Istnieje możliwość uruchamiania wielu system�w operacyjnych
z poziomu lilo, w tym celu do pliku konfiguracji musimy
dodać odpowiednie obrazy i opisane wcześniej opcje
prompt
i timeout
.
Poniżej została umieszczona sekcja pozwalająca uruchomić
system DOS/Windows umieszczony na dysku hda3.
other=/dev/hda3 label=windows
Domyślnym obrazem wybranym przez bootloader jest
pierwszy w kolejności z pliku konfiguracji. Możemy to
ustawienie bardzo prosto modyfikować za pomocą opcji
default
wskazującej etykietę domyślnego
obrazu, np.:
default=pld
Opcję default
umieszczamy w głï¿½wnej
części konfiguracji.
Frame Buffer (bufor ramki) to m.in. mechanizm pozwalający
na pracę konsoli w wyższych rozdzielczościach. Aby go
włączyć, do konfiguracji linuksowego obrazu lub do
sekcji głï¿½wnej dodajemy parametr jądra
vga
np.:
vga=0x303
Przykładowa konfiguracja obrazu będzie wyglądała następująco:
image=/boot/vmlinuz label=pld root=/dev/hda1 initrd=/boot/initrd vga=0x303
Listę dostępnych tryb�w zamieszczono w „Wstęp”.
Jeśli zdecydowaliśmy się na wyświetlanie menu początkowego
(za pomocą opcji prompt
) to możemy się
pokusić o ustawienie graficznego menu. Z pakietem lilo
dostajemy odpowiednio przygotowane bitmapy, musimy tylko
dodać kilka opcji do głï¿½wnej sekcji pliku konfiguracji.
Wskazujemy interesujący nas obrazek:
bitmap = /boot/lilo-pldblue8.bmp
Określamy kolory i położenie tekstu na ekranie:
bmp-table = 17,9;1,14,16,4 bmp-colors = 0,213,137;152,24,1 bmp-timer = 2,29;152,52,1
Musimy pamiętać że powyższe dane są dobrane dla konkretnego obrazka i dla innego mogą nie być dobre.
GRUB™ (GRand Unified Bootloader) jest bootloaderem zdobywającym sporą popularność, ze względu na swoją elastyczność i duże możliwości. Jest tak rozbudowany, że musi trzymać część swoich danych na dysku twardym, z tego też względu obsługuje kilka system�w plik�w i może wykonywać proste operacje dyskowe. GRUB normalnie "widzi" pliki na dysku, a więc widzi własny plik konfiguracji, kernel i obraz initrd. Dzięki temu nie ma potrzeby robienia czegokolwiek po zmianie konfiguracji, wygenerowaniu initrd czy aktualizacji kernela. Jest za to czuły niekiedy na aktualizacje "samego siebie" i wymaga niekiedy ponownej instalacji do MBR-u/bootsectora, nie ma tu jednak żadnej jasnej reguły. GRUB na każdym etapie konfiguracji (w trybie interaktywnym) wspiera nas wbudowaną pomocą oraz dopełnianiem nazw plik�w, urządzeń i partycji.
Do największych zalet GRUB-a można zaliczyć możliwość zmiany konfiguracji startowej z poziomu działającego bootloadera. Kiedy uruchomiony zostanie bootloader wybieramy obraz a następnie wciskamy klawisz e. Wyświetlą nam się wiersze konfiguracji, możemy je modyfikować za pomocą wbudowanego prostego edytora tekst�w. Po skończonej edycji wciskamy klawisz b, aby uruchomić system z wprowadzonymi zmianami.
Kolejną ważną jego cechą jest możliwość używania klawiatury USB, w przeciwieństwie do LILO™, jedyną rzeczą jaką musimy zrobić w tym wypadku to włączyć obsługę klawiatury USB w BIOS-ie.
O initrd poczytamy w „Initrd”.
Nie używamy nazw dysk�w opierających się na urządzeniach
widniejących w /dev
(np.
/dev/hda
). GRUB przy pomocy BIOS-u sprawdza
istniejące dyski i numeruje je począwszy od zera. Dla przykładu,
jeżeli posiadamy dwa dyski twarde (np. hda
i
hdc
), pierwszy z nich zostanie oznaczony jako
hd0
, drugi jako hd1
. Sytuacja
z partycjami wygląda podobnie, r�wnież numerowane są od zera,
natomiast pierwsza partycja logiczna będzie oznaczona numerem 4.
Obszar MBR oznaczany jako /dev/hda
będzie widziany jako (hd0)
, partycja
/dev/hda1
będzie rozpoznawana jako
(hd0,0)
. Podane nawiasy nie są przypadkowe,
jest to cecha składni poleceń GRUB-a.
Urządzenia masowe opisano szerzej w „Nazewnictwo urządzeń masowych”.
Konfiguracja polega na odpowiednim skonfigurowaniu pliku
/boot/grub/menu.lst
i instalacji
bootloadera w MBR/bootsektorze dysku. W poniższych
przykładach założyliśmy, że zar�wno /
(rootfs) jak i /boot
leżą na tej samej
partycji pierwszego dysku twardego. W przykładowej konfiguracji
będzie to /dev/hda1
. Poniżej przedstawiono
przykładową konfigurację:
timeout 15 title pld root (hd0,0) kernel /boot/vmlinuz root=/dev/hda1 initrd /boot/initrd
Konfiguracja GRUB-a podzielona jest na sekcję głï¿½wną i sekcje obraz�w, sekcja głï¿½wna są to ustawienia globalne, zaś konfiguracja obraz�w to opcje dla każdego z obsługiwanych system�w operacyjnych. Powyżej mamy sekcję głï¿½wną oraz sekcję obrazu oddzieloną pustym wierszem.
Opcja timeout
w sekcji głï¿½wnej to
czas w sekundach oczekiwania na reakcję użytkownika.
Opcja title
w sekcji obrazu to jego
etykieta, root(hd0,0)
to partycja na
kt�rej GRUB będzie szukał swoich plik�w (w PLD GRUB trzyma
swoje pliki w /boot/grub
). Parametry
kernel
i initrd
to
ścieżki do plik�w kernela
i
initrd
, w powyższym przykładzie
będą szukane na urządzeniu (hd0,0)
gdyż
podane do nich ścieżki są względne. Parametr
root=
jest parametrem jądra wskazującym
położenie głï¿½wnego systemu plik�w, opisanym
szerzej w „Wstęp”. Może mieć
zar�wno postać liczbową jak i postać nazwy urządzenia z
katalogu /dev
np.
/dev/hda1
.
Kiedy plik konfiguracji jest gotowy możemy przejść do instalacji GRUB-a.
Przejdźmy teraz do instalacji GRUB-a w MBR, rozpoczynamy od uruchomienia programu grub, mamy teraz do dyspozycji interaktywną powłokę, oferującą liczne polecenia, dopełnianie oraz pomoc. Rozpoczynamy od polecenia root z parametrem wskazującym miejsce gdzie znajdują się pliki GRUB-a, konieczne do jego instalacji.
grub> root (hd0,0) Filesystem type is xfs, partition type 0x83
Teraz uruchamiamy instalację bootloadera w MBR dysku, wydajemy polecenie setup z odpowiednim parametrem:
grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/xfs_stage1_5" exists... yes Running "embed /boot/grub/xfs_stage1_5 (hd0)"... 18 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+18 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded Done.
Komunikaty wskazują poprawność operacji, więc pozostaje nam tylko wyjście z powłoki programu.
grub> quit
W ten oto spos�b staliśmy się posiadaczami GRUB-a w naszym systemie, możemy teraz zrestartować maszynę.
Zakładam, że chcemy dodać system Microsoftu zainstalowany
na partycji /dev/hda2
, oto sekcja
jaką musimy dopisać do
/boot/grub/menu.lst
:
title Windows rootnoverify (hd0,1) chainloader +1
Domyślnym obrazem wybranym przez bootloader jest ten
pierwszy w kolejności w pliku konfiguracji. Możemy to
ustawienie bardzo prosto modyfikować za pomocą opcji
default
wskazującej numer obrazu. Obrazy
są numerowane wg. kolejności począwszy od 0 np.:
default 2
Omawianą opcję wstawiamy do sekcji głï¿½wnej pliku konfiguracji.
Frame Buffer (bufor ramki) to mechanizm pozwalający m.in.
na pracę konsoli w wyższych rozdzielczościach. Aby go
włączyć, do parametr�w jądra w konfiguracji linuksowego
obrazu dodajemy parametr vga
np.
vga=0x303
. Przykładowa
konfiguracja obrazu będzie wyglądała następująco:
title pld root (hd0,0) kernel /boot/vmlinuz root=0301 vga=0x303 initrd /boot/initrd
Listę dostępnych tryb�w zamieszczono w „Wstęp”.
W pakiecie z GRUB-em dostępne są grafiki, co sugeruje
możliwość wyświetlenia ich w menu, jednak GRUB w PLD
domyślnie ich nie obsługuje. Aby włączyć taką możliwość
musimy samemu zbudować pakiet z opcją
--with splashimage
.
Instalujemy zbudowany pakiet, a następnie do pliku konfiguracji, do sekcji głï¿½wnej dodajemy opcję wskazującą bitmapę, kt�ra ma być wyświetlana np.:
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
Aby napisy pozostały czytelne możemy ustalić ich kolor za
pomocą opcji foreground
i
background
np.:
foreground = ffffff background = 000000
Pierwsza z opcji wskazuje głï¿½wny kolor liter, druga zaś określa kolor ich cienia, oba parametry przyjmują szesnastkowe wartości. Teraz restartujemy komputer, aby sprawdzić czy wszystko działa poprawnie.
Grafiki możemy tworzyć samemu, GRUB wymaga indeksowanej bitmapy o 14 kolorach i rozdzielczości 640x480, typu .xpm, plik musi być dodatkowo skompresowany programem Gzip.
Jak już zostało wspomniane, GRUB trzyma część swoich danych
w systemie plik�w, co przy poważnym uszkodzeniu systemu
plik�w może uniemożliwić start systemu. Rozwiązaniem tego
problemu, może być umieszczenie gałęzi
/boot
na osobnej partycji, tak jak to
było dawniej robione dla ominięcia
ograniczeń starych wersji LILO™.
Więcej o podziale na partycje odnajdziemy w
„Podział na partycje”.
Dla większego bezpieczeństwa partycję taką można montować
w trybie tylko do odczytu, musimy jednak wtedy pamiętać o
konieczności przemontowania jej do trybu rw
,
przed każdą aktualizacją jądra, lub bootloadera.
W przypadku nietypowych konfiguracji będziemy zmuszeni
do podawania ścieżek bezwzględnych do plik�w. Podajemy
je następująco: (hdX,Y)/katalog/plik
np.:
(hd0,0)/boot/vmlinuz
GRUB wymaga kompletnej listy urządzeń w katalogu
/dev
, stąd mogą pojawić się
problemy przy pr�bie instalacji go
z chroota opartego o udev. Należy w tym wypadku
podmontować z głï¿½wnego system katalog
/dev
z opcją
-bind
. Pliki urządzeń zostały
dokładniej opisane w „Urządzenia”.
Osoby nie przepadające za konfiguracją powyższych bootloader�w, mogą skorzystać z narzędzia o nazwie rc-boot™. Jest to proste i wygodne w użyciu narzędzie, stworzone dla potrzeb PLD, kt�re zapewnia uniwersalny interfejs do zarządzania bootloaderem. Został stworzony w celu automatycznego aktualizowania bootloadera po zaktualizowaniu jądra, jednak nie zdobył szerszej popularności wśr�d użytkownik�w. Dzięki rc-boot możemy używać dowolnego bootloadera (np. LiLo™, Grub™), nie znając zasad ich działania czy składni plik�w konfiguracji.
W gruncie rzeczy korzystanie z rc-boot ma sens wyłącznie przy używaniu LiLo. Bootloader GRUB nie wymaga przeładowania po aktualizacji jądra, dlatego użytkownicy używają właśnie jego zamiast rc-boot.
Aby utworzyć
bootloader omawianym narzędziem należy się posłużyć poleceniem
rc-boot, to jaki bootloader zostanie użyty i
jakie opcje będą ustawione, definiujemy w jednym uniwersalnym
pliku konfiguracji:
/etc/sysconfig/rc-boot/config
. Dodatkowo
wymagane są specjalne pliki "obraz�w" odpowiadające każdemu
systemowi operacyjnemu, kt�ry chcemy obsługiwać z poziomu
bootloadera. Są to proste pliki konfiguracyjne umieszczane w
katalogu /etc/sysconfig/rc-boot/images
.
Po zainstalowaniu systemu powinien tam być przynajmniej jeden
taki plik.
Po zainstalowaniu pakietu rc-boot™
wymagane są poprawki w konfiguracji pliku
/etc/sysconfig/rc-boot/config
. Na początek
odblokujemy działanie rc-boot™:
DOIT=yes
Kolejno wybieramy bootloader jaki chcemy używać, mamy do wyboru lilo™ oraz grub™:
LOADER=grub
Następnie ustalamy gdzie ma być zainstalowany bootloader np.:
/dev/hda
, /dev/hdb2
lub
mbr
. Wartość mbr
oznacza
że rc-boot™ stara się automatycznie
wykryć gdzie jest tw�j MBR (Master Boot Record).
BOOT=mbr
Jeśli posiadamy więcej niż jeden obraz, możemy wskazać
domyślny, poprzez podanie nazwy pliku obrazu z katalogu
/etc/sysconfig/rc-boot/images
. Definiowanie
tej opcji nie jest konieczne, gdyż
rc-boot™ pr�buje samemu wykryć
domyślny system operacyjny, jednak w naszym przykładzie
ustawimy to "na sztywno":
DEFAULT=pld
Teraz możemy przejść do utworzenia plik�w obraz�w. Mają one bardzo prostą budowę - są to pliki tekstowe składające się z kilku wierszy. Poniższa treść pliku jest wystarczającą konfiguracją do uruchomienia Linuksa, plikowi temu nadamy nazwę "pld".
TYPE=Linux ROOT=/dev/hda3 KERNEL=/boot/vmlinuz INITRD=/boot/initrd
Opcja TYPE
określa rodzaj systemu
operacyjnego dla danego obrazu, mamy do wyboru następujące
pozycje: Linux
, DOS
(DOS/Windows), BSD
. Opcja
ROOT
wskazuje partycję na kt�rej znajduje
się system, wartość podana powyżej jest tylko przykładem.
Wartości KERNEL
i
INITRD
są wskazaniami do pliku kernela i
pliku initrd - muszą odnosić się do właściwych pozycji
w katalogu /boot
Dla każdego kolejnego obsługiwanego systemu operacyjnego należy dodać kolejny plik obrazu. Jeśli chcemy używać systemu firmy Microsoft, należy utworzyć pusty plik o nazwie np. "windows" i umieścić w nim przykładową konfigurację:
TYPE=dos ROOT=/dev/hda1
Na koniec generujemy bootloader używając polecenia rc-boot.
# rc-boot pld taken as defult image image: pld * is linux on /dev/hda3 image: windows is dos on /dev/hda1
Spis treści
Abstrakt
Jak zapewne większości z was wiadomo jądro (kernel) jest najważniejszym elementem każdego systemu. W uproszczeniu można powiedzieć, że zajmuje się ono nadzorowaniem komunikacji wszystkich element�w systemu.
Jedną z silniejszych stron PLD™ są dobrze przygotowane jądra systemu, pozwala to szybko uruchomić system produkcyjny bez zbędnych przygotowań. Poniżej zamieszczono listę najistotniejszych cech jąder PLD:
funkcjonalność - nakładanych jest wiele łat rozszerzających możliwości domyślnego kernela.
modularność - jądro jest tak
małe, jak to tylko możliwe; jeśli czegoś potrzebujemy
to wystarczy załadować odpowiedni moduł. Konsekwencją
takiego rozwiązania jest konieczność używania obrazu
initrd
, co zostało drobiazgowo om�wione w
„Initrd”.
elastyczność - mamy wyb�r kilku jąder, przygotowanych w postaci binarnych pakiet�w dla kilku najczęstszych zastosowań; dzięki temu unikamy czasochłonnej kompilacji. Dostępne jądra zostały opisane w dalszej części rozdziału.
bezpieczeństwo - domyślny kernel ma nakładaną łatę grsecurity™ (www.grsecurity.net), ponadto możemy mieć jądro z obsługą Linux VServers™ (linux-vserver.org).
Podsumowując można stwierdzić, że dla większości zastosowań jądra dystrybucyjne spełnią wszystkie stawiane przed nimi wymagania, bez konieczności rekompilacji.
Używaną wersję jądra sprawdzimy za pomocą programu uname:
# uname -r 2.6.14.7-5
Jeśli interesuje nas konfiguracja danego jądra, to
możemy ją odczytać z pliku /proc/config.gz
(w Th
plik jest dostępny po uprzednim załadowaniu modułu configs) np.:
# zcat /proc/config.gz
lub z pliku config-dist
dostarczanego z właściwym
pakietem kernel-headers np.:
# cat /usr/src/linux-2.6.27.13/config-dist
Z PLD dostarczanych jest kilka kerneli, przygotowanych do r�żnych zastosowań, jedyną rzeczą jaka nam pozostaje to wyb�r właściwego jądra dla naszej maszyny. W poniższej tabeli zamieszczono przykładowe zestawienie dostępnych kerneli. Nie wszystkie z wymienionych poniżej pakiet�w bezpośrednio dostępne na liście pakiet�w, jeśli tak nie jest to trzeba je zbudować samodzielnie ze speca.
Tabela 10.1. Kernele
Nazwa | Cechy |
---|---|
kernel | uniwersalny kernel z wieloma dodatkowymi funkcjami przydatnymi na serwerach, będzie dobry dla większości zastosowań (w PLD Th i w Ac z ac-updates obsługuje Linux VServers™). |
kernel-grsecurity | kernel z obsługą grsecurity™ (przyrostek "grsecurity" wprowadzono w PLD Ac) - przeznaczony raczej dla serwer�w |
kernel-desktop | przeznaczony dla stacji roboczych: obsługa m.in.: squashfs, bootsplash; pakiet jest budowany z kernel-desktop.spec |
kernel-laptop | odmiana kernel-desktop, przeznaczona przede wszystkim dla komputer�w przenośnych |
kernel-vanilla | Kernel bez jakichkolwiek modyfikacji (tzw. waniliowy), zwykle dostarcza najaktualniejszą wersję jądra. Brakuje mu wielu funkcji z głï¿½wnego w PLD jądra, niekiedy jednak bywa od niego szybszy. |
kernel-mosix | jądro z obsługą klastr�w openMOSIX™ |
kernel24 | rodzina kerneli z serii 2.4.x - obecnie przestarzała, ciągle jednak dostępna w Ac. |
Powyższe zestawienie należy traktować orientacyjnie, gdyż kernel ciągle
się zmienia. Aby poznać szczeg�ły, najlepiej jest sprawdzić plik
spec dla konkretnego
kernela. Ułatwieniem w poszukiwaniu właściwej rewizji,
mogą być tagi zaczynające się od auto-
, np.:
auto-th-kernel-2_6_27_12-1
. Tagi te są nadawane dla każdej
wersji pakietu trafiającego na serwery FTP/HTTP.
W wersjach Ra™ i Ac™
istniał podział na kernel jednoprocesorowy
(tzw. up
) oraz wieloprocesorowy - SMP
(symmetric multiprocessing). Dla odr�żnienia te z obsługą wielu
procesor�w miały w nazwie pakietu przyrostek -smp
.
W Th™ i pakietach z ac-updates zaniechano takiego
podziału i wszystkie jądra obsługują wiele procesor�w i jednocześnie zrezygnowano
z przyrostka -smp
.
Należy zwr�cić uwagę, na inne przyrostki po słowie
kernel
w nazwach pakiet�w, nie m�wią one o rodzaju
kernela ale o pakiecie z dodatkowymi modułami:
kernel-net
, kernel-sound
,
kernel-video
, dokumentacją: kernel-doc
i inną zawartością.
Kernel jest kluczową częścią systemu, dlatego zaleca się inaczej podejść do jego aktualizacji niż do innych pakiet�w, dobrym zwyczajem jest instalacja nowej wersji, zamiast aktualizacji np.:
poldek> install -I kernel-2.6.14.7-5
Po tej operacji zostanie na nowo wygenerowany obraz
initrd
, użytkownicy LiLo muszą dodatkowo
wydać polecenie lilo.
W ten spos�b mamy zainstalowane dwa jądra,
przy czym po ponownym uruchomieniu użyta zostanie nowa
wersja.
Gdyby nowy kernel okazał się niestabilny, to
zawsze możemy powr�cić do starej wersji. Aby ułatwić taką
operację symlinki wskazujące na dotychczasowy
kernel (/boot/vmlinuz
) i initrd
(/boot/initrd
) automatycznie
będą teraz dostępne pod nazwami
/boot/vmlinuz.old
i /boot/initrd.old
.
Dzięki temu, możemy w konfiguracji bootloadera mieć "obraz"
konfiguracji dla starego kernela i użyć go w razie potrzeby.
Istnieje kilka pakiet�w, bardziej lub mniej zależnych od
konkretnej wersji kernela. Ścisłe zależności będą dotyczyły
pakiet�w z modułami np. kernel-vanilla-sound-alsa
oraz
pakiet�w ściśle wsp�łpracujących z kernelem np. moduł
kernel-video-nvidia
ze sterownikiem X.Org:
xorg-driver-video-nvidia
.
Nieco mniej oczywisty jest związek kernela z pakietami
iproute2
czy iptables
, w ich przypadku
mamy nieco swobody.
W wielu sytuacjach nie będziemy musieli się o to martwić, gdyż
ten problem załatwiają nam zależności.
Mimo to, że mamy tu dostępną automatykę, przy tego
rodzaju pakietach powinniśmy zachować zdwojoną
czujność. Dla ważnych maszyn produkcyjnych warto dodać kernel i
pakiety okołokernelowe do opcji hold
w
Poldku™, opcję tą om�wiliśmy w
„Poldek”. Więcej o zależnościach pomiędzy
pakietami w „Cechy pakiet�w w PLD”.
Czasami zdarza się, że załamuje się praca systemu sygnalizowana za pomocą komunikatu Kernel Panic, jądro informuje nas, że nie wie co ma dalej zrobić i przerywa pracę. Warto ustawić system tak, by po takim zdarzeniu automatycznie następował restart, konfigurację takiego zachowania opisaliśmy w „Podstawowe ustawienia”.
Mamy możliwość wpływania na pracę systemu, dzięki modyfikowaniu
specjalnych parametr�w jądra, parametry te można podzielić
na dwie grupy: podawane przed startem kernela oraz podawane
po wystartowaniu. Pierwszy rodzaj został opisany w
„Wstęp”, drugi to zestaw
specjalnych wpis�w do pseudo-systemu plik�w
/proc/sys
.
Czytać wartości możemy za pomocą programu cat np.:
# cat /proc/sys/net/ipv4/ip_forward
Parametry możemy wysłać za pomocą programu echo np.:
# echo "1" > /proc/sys/net/ipv4/ip_forward
Możemy do tego r�wnież użyć programu sysctl, kt�ry
za nazwę węzła
przyjmuje nazwy katalog�w rozdzielone kropkami, z pominięciem
"/proc/sys
". Poniżej umieszczono przykład
odczytania opcji:
# /sbin/sysctl net.ipv4.ip_forward
oraz przypisania:
# /sbin/sysctl net.ipv4.ip_forward=1
Wadą powyższego rozwiązania jest powr�t do poprzednich ustawień po
restarcie maszyny. Rozwiązaniem problemu jest korzystanie z pliku
/etc/sysctl.conf
, w nim przypisujemy wartości
odpowiednim zmiennym. W celu wprowadzenia ustawień wywołujemy polecenie:
# /sbin/sysctl -p
Niekt�re rc-skrypty wywołują automatycznie program
sysctl, przykładowo robi to skrypt podsystemu
sieci, gdyż plik /etc/sysctl.conf
zawiera
istotne opcje sieciowe.
Sterowniki mogą być wkompilowane do wnętrza jądra lub wydzielone jako osobne obiekty - moduły. Moduły jądra zostały stworzone po to by kernel zajmował mało pamięci operacyjnej i był zarazem uniwersalny. Ułatwiają one także prace ludziom zaangażowanym w rozw�j jądra i dodatkowych modułï¿½w (nie potrzeba kompilować całego kernela by sprawdzić zmiany, wystarczy tylko sam moduł) Wyobraź sobie sytuację, w kt�rej masz wkompilowane do niego wszystko, a tw�j system nie posiada urządzeń, kt�re kernel potrafi obsłużyć. Jest to duże marnotrawstwo, ponieważ w pamięci znajdą się nie potrzebne nam funkcje. Dodać należy fakt, ograniczenia wielkości jądra (można to zmienić odpowiednimi przer�bkami źr�deł via Red Hat). Dlatego lubimy moduły. Dają nam one możliwość wyboru między tym co niezbędne, a brakiem wsparcia dla urządzeń. Podsumowując. Nie potrzebujesz to nie używasz.
By m�c używać modułï¿½w potrzebujesz dw�ch rzeczy. Kernela z
wkompilowaną opcją Loadable module support
oraz sterownik�w skompilowanych jako moduły. Ponieważ
używasz PLD to nie masz co się głowić ponieważ wszystko
to masz u siebie w systemie.
Istnieją dwie metody załadowania modułï¿½w:
statyczna - metoda tradycyjna, polega na wskazaniu modułï¿½w do załadowania przez administratora
dynamiczna - automatyczne ładowanie modułï¿½w, kiedy urządzenie zostaje wykryte
Obydwie metody zostaną przedstawione w dalszych rozdziałach.
Plik /etc/modprobe.conf
jest przeznaczony do
ustawiania opcji dla ładowanych modułï¿½w. Warto dodać iż we wcześniejszych
wersjach kernela ( < 2.6.0) plik nazywał się
/etc/modules.conf
. W pliku mamy dostępnych wiele opcji,
my om�wimy tylko najczęściej używane: alias
,
option
i blacklist
.
Aliasy - są to dodatkowe nazwy dla modułï¿½w, pozwalają na wczytanie go odwołując się do aliasu. Z alias�w korzysta wiele program�w, kt�re nie mogą wiedzieć z jakiego modułu mają korzystać i używają ustalonych nazw (alias�w) np.:
alias eth0 8139too
Dzięki tej linijce wszelkie odwołania przy ładowaniu modułï¿½w
załadują automatycznie moduł 8139too
.
alias parport_lowlevel parport_pc
W tym fragmencie pliku /etc/modprobe.conf
widzimy już znany alias
z tym, że w trochę innej
formie. Ponieważ występuje tu nazwa_jednego_modułu i
nazwa_drugiego_modułu
. Oznacza to, że jak będzie potrzeby
moduł parport_lowlevel
, to zostanie też automatycznie
załadowany moduł parport_pc
.
Opcje - często używa się możliwości przesłania do modułu ustawień. Przedstawię to na przykładzie drukarki podpiętej do portu LPT:
options parport_pc io=0x378, irq=7
Linijka przesyła jako parametr do modułu parport_pc
argumenty we/wy i przerwania. Więcej informacji o dostępnych opcjach modułu
można uzyskać po wydaniu polecenia modinfo parport_pc.
Czarna lista - możemy zabronić ładowania
jakiegoś modułu za pomocą słowa kluczowego blacklist
np.:
blacklist rivafb
.
W zależności od naszych wymagań oraz zastosowania systemu operacyjnego, będzie się zmieniać liczba wymaganych sterownik�w, w większości wypadk�w będzie to wartość od kilku do kilkunastu modułï¿½w. Jeśli tych modułï¿½w jest mało to samodzielne ładowanie może być lepszym rozwiązaniem.
Aby wskazać odpowiedni moduł, musimy poznać dane urządzenia. Najbardziej interesującymi informacjami są: producent i model urządzenia lub użyty chipset. W większości wypadk�w te informacje znajdują się w dokumentacji urządzenia. Jeśli tak nie zdobędziemy szukanych informacji to możemy spr�bować użyć kt�rąś z poniższych metod:
Organoleptycznie - jeśli mamy dostęp do sprzętu to możemy obejrzeć urządzenie, opis może być umieszczony na płytce drukowanej lub na chipsecie (zwykle największy układ scalony).
lshw - zaawansowany program służący do wyświetlania szczeg�łowych danych o sprzęcie, jego zaletą jest duża ilość sprawdzanych podsystem�w i wyświetlanie nazw używanych modułï¿½w przez konkretne urządzenie.
lspci - program ten wyświetla listę wykrytych urządzeń PCI/AGP wraz z dodatkowymi informacjami. Warto użyć tu dodatkowo opcji "-v" - "-vv" w celu zwiększenia ilości danych. Program ten znajdziemy w pakiecie pciutils.
Komunikaty jądra - są to dosyć cenne informacje, możemy
je odczytać w dzienniku kernela: /var/log/kernel
lub przejrzeć to co zwraca program dmesg:
# dmesg | less
Kiedy uzyskaliśmy informacje o sprzęcie, pozostaje nam odnaleźć moduł:
pcidev - program z pakietu pci-database - stara się wykryć używany przez nas sprzęt oraz podaje nazwę sugerowanego modułu. Należy wywołać program z parametrem wskazującym o interesujące nas urządzenie np:
# pcidev agp 10de01e0 nvidia-agp nVidia Corporation|nForce2 AGP (different version?)
drugi zwr�cony łańcuch jest nazwą szukanego modułu. Aby otrzymać listę parametr�w jakie przyjmuje program należy uruchomić go bez parametru. Uwaga: w celu określenia modułu kontrolera dysku nie należy używać parametru 'ide', tylko 'sata', gdyż linia sterownik�w IDE jest przestarzała. Zamiast niej należy używać tych opartych na libata.
Internet - można założyć, że ktoś się już spotkał z podobnym problemem. Mamy do dyspozycji sporą skarbnicę wiedzy: WWW, listy i grupy dyskusyjne.
Po nazwie modułu: modprobe -l {$słowo_kluczowe} - tak możemy pr�bować odnaleźć moduł wg. szukanego klucza np:
# modprobe -l *snd* /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/pdaudiocf/snd-pdaudiocf.ko.gz /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vxp440.ko.gz /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vx-cs.ko.gz /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vxpocket.ko.gz /lib/modules/2.6.11.6-4/kernel/sound/drivers/snd-serial-u16550.ko.gz /lib/modules/2.6.11.6-4/kernel/sound/drivers/mpu401/snd-mpu401-uart.ko.gz /lib/modules/2.6.11.6-4/kernel/sound/drivers/mpu401/snd-mpu401.ko.gz
modinfo - program ten zwraca informacje o module, kt�rego nazwę podajemy jako parametr. Program jest pomocny jeśli zawęziliśmy listę pasujących modułï¿½w do kilku pozycji.
Kiedy sądzimy że odnaleźliśmy właściwy moduł możemy go bez obaw wczytać i przetestować nasze urządzenie, jeśli pr�ba zakończyła się sukcesem to możemy zapisać jego nazwę do odpowiedniego pliku aby został załadowany przy każdym starcie systemu. Opis tego znajduje się w dalszej części rozdziału.
Moduły są ze sobą powiązane i załadowanie danego modułu załaduje moduły od niego zależne (jeśli takie są), podobnie jest z ich usuwaniem z pamięci. Do zarządzania modułami zaleca się używanie programu modprobe z odpowiednimi parametrami zamiast program�w insmod i rmmod
Listę załadowanych modułï¿½w i zależności między nimi otrzymamy po wydaniu polecenia lsmod np:
# lsmod Module Size Used by lp 8644 0 parport 29896 1 lp ext3 119304 1 amd74xx 11676 0 [permanent] psmouse 34840 0 ide_core 109560 2 ide_disk,amd74xx ide_disk 14336 9
Wczytanie modułu do pamięci:
# modprobe ne2k-pci
Usuwanie modułu z pamięci (możliwe tylko jeśli nie jest używany):
# modprobe -r ne2k-pci
Wyświetlenie listy modułï¿½w zależnych od podanego:
# modprobe --show-depends ne2k-pci insmod /lib/modules/2.6.11.6-4/kernel/drivers/net/8390.ko.gz insmod /lib/modules/2.6.11.6-4/kernel/drivers/net/ne2k-pci.ko.gz
Wyświetlenie listy dostępnych modułï¿½w:
# modprobe -l
Po "ręcznym" załadowaniu modułu do pamięci będzie on
dostępny do czasu ponownego uruchomienia komputera, aby
moduł był automatycznie ładowany przy starcie systemu musimy
użyć opisanych dalej plik�w: /etc/modules
lub /etc/modprobe.conf
.
Plik ten zawiera listę modułï¿½w, kt�re zostaną załadowane podczas startu systemu (przez rc-skrypty). Znając nazwę modułu możemy dodać ją do tego pliku np:
echo "via82cxxx_audio" >> /etc/modules
W „Moduły jądra” powiedzieliśmy, że
plik /etc/modprobe.conf
służy do konfiguracji
modułï¿½w, jednak za pomocą pewnej sztuczki będziemy mogli wskazywać
moduły do załadowania. Polega ona na utworzeniu alias�w o ustalonych
nazwach i kt�re będą ładowane np. przez rc-skrypty. Przykładowo utworzenie
aliasu eth0
do odpowiedniego modułu karty sieciowej
spowoduje załadowanie danego modułu przy pr�bie podniesienia interfejsu
pierwszego interfejsu Ethernet. Przykładowy alias:
alias eth0 8139too
spowoduje załadowanie modułu 8139too. Nic nie stoi na przeszkodzie żeby
taki moduł został dopisany do /etc/modules
, jednak
metoda oparta na aliasach jest bardziej czytelna i elegancka (zwłaszcza
przy większej ilości kart sieciowych).
Poniżej została przedstawiona lista takich alias�w:
eth{$Nr}
- opisany powyżej
alias dla karty sieciowej typu Ethernet.
ide_hostadapter
,
scsi_hostadapter
- aliasy do
modułï¿½w kontroler�w pamięci masowych, używane są
m.in. przez skrypt geninitrd.
char-major-116
,
snd-card-{$Nr}
,
char-major-14
,
sound-*
- aliasy dla modułï¿½w
kart muzycznych (ALSA).
Przykładowa konfiguracja:
alias eth0 8139too alias scsi_hostadapter sata_sil alias char-major-116 snd alias snd-card-0 snd-intel8x0
Statyczne zarządzanie modułami kernela i urządzeniami w /dev
było skomplikowane, uciążliwe i wymagało praw administratora,
stąd narodziła się idea systemu, kt�ry zautomatyzuje te czynności.
Tak oto powstał udev™,
wsp�łczesne wersje udeva (następcy DevFS) mają wbudowaną obsługę
hotpluga™ i coldpluga™.
Dzięki temu mogą automatycznie ładować potrzebne moduły, ma to sens wyłącznie
w przypadku modularnego kernela, jaki jest dostępny w PLD.
Mimo włączenia hotpluga do udeva w PLD ciągle dostępne są pakiety
z hotplugiem, są przechowywane jedynie dla wstecznej zgodności i
nie będą nam już potrzebne.
Poza nielicznymi wypadkami nie będzie już konieczne dopisywanie
nazw modułï¿½w do pliku /etc/modules
, ani ich
ręczne ładowanie za pomocą programu modprobe.
Więcej o plikach urządzeń znajdziemy w „Urządzenia”.
W systemie domyślnie instalowany jest pakiet dev™, jeśli zechcemy przejść na udev to wystarczy, że zainstalujemy pakiet udev a następnie odinstalujemy dev np.:
# poldek -i udev # poldek -e dev
Osoby nie ufające do końca dynamicznemu tworzeniu urządzeń, nie usuwają z systemu statycznego deva tak jak to zrobiliśmy powyżej. Praktyka pokazuje jednak, że nie ma powod�w do obaw i poza wyjątkowo ważnymi instalacjami systemu nie ma takiej potrzeby.
Udev w większości wypadk�w nie wymaga żadnych operacji
konfiguracyjnych, czasami tylko konieczne jest poprawienie lub
dodanie regułki do katalogu /etc/udev/rules.d/
.
Zanim się tym zajmiemy powinniśmy zapoznać się z
dokumentacją.
W Ac™ do wyboru są dwa
tryby pracy: udevstart
(domyślny) i udevsynthesize
.
Ten drugi wykrywa większą liczbę urządzeń, stąd
warto się pokusić o wyb�r właśnie jego. Aby go używać
wystarczy, że ustawimy odpowiednią opcję
w pliku /etc/udev/udev.conf
:
UDEV_STARTER="udevsynthesize"
W Th™ powyższe opcje nie są już
dostępne, ich miejsce zajął mechanizm udevtrigger
.
Liczba załadowanych modułï¿½w przez udev może przywr�cić o zawr�t głowy, udev ładuje moduły znalezionych urządzeń bez względu czy w og�le z niego korzystamy. Jedyną wadą takiego działania jest większe zużycie pamięci przez nieużywane sterowniki. Nie powinno przekroczyć 2MiB pamięci, więc dla ogromnej większości wsp�łczesnych komputer�w nie będzie to stanowić żadnego problemu.
Mamy wpływ na listę ładowanych modułï¿½w, aby zablokować
ładowanie jakiegoś modułu wystarczy dodać do pliku
/etc/modprobe.conf
nazwę modułu
poprzedzoną słowem blacklist
np.:
blacklist rivafb blacklist nvidiafb
Powyższa metoda ma sens jedynie jeśli chcemy zablokować pojedyncze moduły, jeśli mamy komputer o bardzo małej ilości pamięci lepszym pomysłem będzie pozostanie przy statycznej metodzie ładowania modułï¿½w.
Jeśli mamy kilka kontroler�w urządzeń masowych
(IDE/SATA/SCSI) to mogą występować problemy z
wykrywaniem ich na czas, tak by były gotowe do
zamontowania system�w plik�w określonych w
/etc/fstab
.
Jedynym pewnym sposobem poradzenia sobie z tym
kłopotem jest dodanie modułï¿½w kontroler�w
do initrd.
Więcej o udev możemy poczytać w FAQ
Udev nie zajmuje się montowaniem przenośnych nośnik�w danych, musimy robić to ręcznie (co wymaga uprawnień administratora), lub użyć HAL-a, D-Busa oraz np. gnome-volume-manager w przypadku środowiska Gnome.
W PLD wszystkie możliwe sterowniki są dostępne w postaci tzw. modułï¿½w, przez co nie są one "widoczne" dla jądra w trakcie startu systemu. Aby system wystartował wymaganych jest kilka modułï¿½w i innych komponent�w koniecznych do zamontowania głï¿½wnego systemu plik�w (root filesystem):
moduły kontrolera urządzeń
masowych (IDE/SATA/SCSI) np.: sata_nv
,
sata_sil
, sd_mod
systemu plik�w na głï¿½wnej
partycji systemowej np.: xfs
,
reiserfs
elementy konieczne do złożenia wolumin�w opartych o LVM lub programowy RAID
Jedynym sposobem dostarczenia tych sterownik�w jest
umieszczenie ich w specjalnym "obrazie" zwanym
initrd
(initial ramdisk). Obraz ten jest
plikiem wczytywanym przez bootloader, tak więc dodatkowo
musimy właściwie skonfigurować bootloader - wskazać położenie obrazu.
Obraz przechowywany jest w katalogu /boot
i ma nazwę initrd-{$wersja_jądra}.gz
,
do niego zaś prowadzi łącze o nazwie initrd
.
Initrd jest tworzony przy każdej instalacji/aktualizacji kernela. Bywa jednak, że nasz obraz nie jest wygenerowany prawidłowo i jesteśmy zmuszeni do utworzenia go samodzielnie. Źle utworzony uniemożliwi uruchomienie systemu, ujrzymy wtedy następujący komunikat:
Kernel panic: VFS: Unable to mount root fs...
Jądro m�wi nam, że nie może zamontować głï¿½wnego systemu plik�w, gdyż brakuje mu jakiegoś komponentu. Może się to zdarzyć, że nasz sprzęt nie został prawidłowo wykryty lub pr�bujemy uruchomić PLD z naszego dysku na innym komputerze (o innym kontrolerze urządzeń masowych).
Systemu nie można uruchomić więc musimy skorzystać z operacji chroot-a, możemy w tym celu użyć dowolnej dystrybucji linuksa jednak chyba najwygodniejsze będzie użycie PLD-Live™ lub RescueCD™.
Poniżej przedstawiono trzy metody generowania initrd. W większości wypadk�w wystarczy nam pierwszy ze sposob�w, pozostałe są trudniejsze gdyż musimy znać nasz sprzęt i system plik�w partycji "/". Jeśli obraz nie jest tworzony prawidłowo przez pierwszą metodę musimy się zadowolić dwoma pozostałymi. Druga i trzecia metoda mają jedną zasadniczą przewagę nad pierwszą - mogą być przeprowadzane na dowolnej maszynie.
W dw�ch pierwszych metodach użyjemy skryptu
/sbin/geninitrd
z pakietu
geninitrd
. Jest to wygodny automat,
kt�ry stara się wykryć sprzęt, system plik�w i czy głï¿½wny
system plik�w jest stworzony na LVM/soft RAID. Skrypt geninitrd wymaga
prawidłowych wpis�w w /etc/fstab
i
podmontowanego /proc
. Tak więc jeśli
generujemy initrd w systemie typu chroot to wydajemy
polecenie (z chroota):
# mount /proc
Opis wykrywania sprzętu i dobierania właściwych modułï¿½w opisano w „Statyczne zarządzanie modułami”.
W razie potrzeby edytujemy plik /etc/sysconfig/geninitrd
i ustawiamy jaki rodzaj urządzenia (SCSI,
IDE, RAID) ma
być automatycznie wykrywany:
## Do install SCSI modules (if / is on SCSI partition)? PROBESCSI=yes ## Do install IDE modules (if / is on IDE partition)? PROBEIDE=yes ## Do install RAID modules (if RAID is used)? PROBERAID=yes
Teraz przyszedł czas na wygenerowanie obrazu wg schematu
geninitrd [opcje] {$initrd} {$wersja_jądra} np.:
# geninitrd -v -f /boot/initrd-2.6.16.35-1.gz 2.6.16.35-1
Parametr -v
odpowiada za "gadatliwość" programu,
zaś -f
wymusza nadpisanie istniejącego obrazu.
Metoda ta wymaga precyzyjnej znajomości używanego sprzętu i systemu plik�w, gdyż sami musimy wskazać odpowiednie moduły. Jest jednak konieczna, w przypadku problem�w z automatycznym wykryciem wymaganych sterownik�w lub jeśli chcemy operację wykonać na innej maszynie niż docelowa.
Możemy wpisać listę koniecznych modułï¿½w do odpowiedniej
sekcji w pliku /etc/sysconfig/geninitrd
:
## Basic modules to be loaded BASICMODULES="" ## Modules that should be loaded before anything (i.e. jbd for ext3) PREMODS=""
lub zmodyfikować wywołanie geninitrd poprzez użycie parametru --with:
geninitrd [opcje] --with={$nazwa_modułu} {$initrd} {$wersja_jądra}
Dużym ułatwieniem zadania jest automatyczne dołączanie modułï¿½w zależnych od wskazanego (o ile takie są). Poniżej zamieszczono przykładowe wywołanie geninitrd dla systemu plik�w ext3 i kontrolera IDE PDC20268 firmy Promise:
# geninitrd -v --with=ext3 --with=pdc202xx_new /boot/initrd-2.6.16.35-1.gz 2.6.16.35-1
Możemy zmodyfikować zawartość obrazu wygenerowanego przez geninitrd, aby to zrobić rozpoczynamy od skopiowania initrd w inne miejsce i rozpakowania go:
# gunzip initrd-2.6.16.35-1.gz
rozpakowany plik montujemy jako loop:
mkdir /tmp/initrd-src # mount -o loop initrd-2.6.16.35-1 /tmp/initrd-src
Tworzenie initrd rozpocznijmy od skopiowania zawartości katalogu w inne miejsce:
# cp -a /tmp/initrd-src initrd-moje cp: czytanie `initrd-src/bin/sh': Błąd wejścia/wyjścia
Pomimo tego błędu dobrze się skopiowało, warto jednak sprawdzić uprawnienia i atrybuty pliku (ewentualnie poprawić na takie jak w oryginale)
Aby dodać moduł, musimy go skopiować z naszego
systemu do odpowiedniego katalogu w
initrd-moje/lib/modules/*/
,
następnie do skryptu initrd-moje/linuxrc
dodać wpis "insmod {$moduł}" na wz�r już istniejących
({$moduł} musi zawierać pełną ścieżkę do pliku).
Przyszedł czas na wygenerowanie initrd:
# genromfs -d initrd-moje -f initrd-nowy
Kompresujemy nowy initrd:
# gzip -9 initrd-nowy
Teraz już pozostało tylko skopiowanie pliku
initrd-nowy.gz
do
/boot
i nadanie mu odpowiedniej
nazwy.
Musimy się upewnić czy łącze symboliczne
/boot/initrd
wskazuje na prawidłowy obraz.
Jeśli używamy LiLo™ wydajemy polecenie:
# lilo
W przypadku Grub-a™ nic nie musimy robić.
Na koniec restartujemy komputer i system powinien uruchomić się bez problemu. Konfigurację bootloader�w szerzej opisano w „Wstęp”.
Częste zmiany używanego obrazu initrd mogą być uciążliwe,
można to obejść łącząc do jednego obrazu większą ilość
modułï¿½w. Aby to zrobić możemy dopisać nazwy modułï¿½w do
przedstawionych poniżej opcji w pliku
/etc/sysconfig/geninitrd
:
## Basic modules to be loaded BASICMODULES="" ## Modules that should be loaded before anything (i.e. jbd for ext3) PREMODS=""
możemy też użyć opcji --with programu geninitrd. Warto pamiętać żeby nie przesadzać z ich ilością, może to spowodować wolniejszy start systemu i niepotrzebne zużycie pamięci operacyjnej przez nieużywane sterowniki.
Podobnie jak w innych systemach uniksowych obowiązuje
tutaj zasada "everything is a file", czyli wszystko jest plikiem.
Dzięki takiemu podejściu uproszczono spos�b komunikacji z
urządzeniami, poprzez odwoływanie się do specjalnych plik�w,
odpowiadających konkretnym urządzeniom. Pliki te są przechowywane w
katalogu /dev
, zwykły użytkownik nie musi się
martwić o jego zawartość, wystarczy że będzie znał powiązania
między fizycznymi urządzeniami a nazwami tych plik�w.
Z nazw urządzeń najczęściej korzysta się w przypadku operacji dyskowych, warto zatem znać zasadę ich określania, więcej szczeg�łï¿½w na ten temat podano w „Nazewnictwo urządzeń masowych”.
Nazwy urządzeń nadawane są tak, aby ułatwiać życie użytkownikom, dla jądra są właściwie obojętne. Jądro rozr�żnia urządzenia za pomocą pary liczb: major (głï¿½wnej) i minor (pobocznej). To jakie są wartości tych liczb odczytamy następująco:
ls -l /dev/hda2 brw-rw---- 1 root disk 3, 2 2005-11-11 15:08 /dev/hda2
Na powyższym przykładzie major jest r�wna 3, zaś minor jest r�wna 2. Pierwsza literka w łańcuchu opisującego uprawnienia określa rodzaj pliku, znak "b" (jak na powyższym przykładzie) oznacza urządzenie blokowe, zaś "c" urządzenie znakowe.
Jeśli potrzebujemy samodzielnie utworzyć plik urządzenia, to użyjemy do tego programu mknod np.:
# /bin/mknod /dev/zero c 1 5
Numery major i minor oraz inne informacje odnajdziemy w dokumentacji
kernela, jeśli zainstalujemy pakiet kernel-doc to
powinniśmy zapoznać się z zawartością pliku
/usr/src/linux/Documentation/devices.txt
Są dwa sposoby dostarczania plik�w urządzeń dla systemu: dev™ - statyczny i udev™ - dynamiczny. Każdy z nich ma wsparcie w PLD, jednak domyślnie instalowany jest pakiet udev. Jeśli chcemy użyć innego mechanizmu, wystarczy że odinstalujemy udev a zainstalujemy dev w jego miejsce, dla pewności tą operację lepiej przeprowadzać przy pomocy operacji chroot-a.
Najstarszym z rozwiązań jest pakiet
dev™, dzięki niemu w
katalogu /dev
zostanie utworzona spora
ilość węzłï¿½w (nawet jeśli nie mamy danego rodzaju urządzenia),
wystarczająca dla większości zastosowań. Jeśli jednak mamy
jakieś egzotyczne urządzenie to będziemy musieli samemu
utworzyć wymagane pliki. Pliki urządzeń tworzymy za
pomocą opisanego wcześniej programu mknod.
W odr�żnieniu od statycznej bazy plik�w urządzeń w ostatnim
czasie popularność zdobywają systemy automatycznego tworzenia
węzłï¿½w w katalogu /dev
. W chwili
podłączenia urządzenia lub startu systemu automatycznie
tworzone są wymagane pliki. Jest to ogromne ułatwienie
dla użytkownik�w, gdyż nie wymaga od nich wiedzy na ten temat.
Udev™ automatycznie tworzy pliki
urządzeń, jednak sam potrzebuje kilku z nich, aby m�gł
zacząć działać, są to: /dev/console
,
/dev/null
, /dev/zero
.
Pliki te są dostarczane razem z pakietem, a więc nie
musimy się to martwić.
System udev jest wart uwagi dlatego, że nie tylko tworzy wymagane węzły urządzeń lecz dodatkowo ładuje wymagane moduły jądra dla danego urządzenia. Więcej informacji o udev znajdziemy w „Udev - dynamiczna obsługa sprzętu”
Należy pamiętać o tym, że udev jest wywoływany z
rc-skrypt�w, i nie wystartuje przy użycia parametru jądra
init
lub przy pr�bie wykonania
operacji chroota z innego systemu.
Wtedy wymagane pliki nie zostaną utworzone, co może
spowodować nieoczekiwane problemy z działaniem program�w.
W przypadku wykonania operacji chroota problem ten
rozwiązujemy poprzez wcześniejsze podmontowanie katalogu
/dev
z systemu głï¿½wnego. W pozostałych
przypadkach uruchamiamy skrypt
/etc/rc.d/rc.sysinit
, w ostateczności
tworzymy wymagane urządzenia za pomocą programu
mknod lub skądś je kopiujemy.
Operacja chroota została szerzej opisana w
„Ratowanie systemu”.
Parametr jądra init
jak i wiele innych
szerzej opisano w „Wstęp”.
Na stacji roboczej bez zastanowienia można polecić udev, gdyż pozwoli na znaczne podniesienie komfortu pracy. W przypadku serwer�w będzie to głï¿½wnie zależało od preferencji administratora i wyb�r nie będzie miał tu większego znaczenia.
Zupełnie inaczej to wygląda w przypadku system�w zamkniętych typu chroot, zar�wno plikami urządzeń jak i modułami zajmuje się system gospodarz, ponadto udev może stać się poważnym wyłomem w bezpieczeństwie klatki. W takim wypadku powinniśmy użyć statycznych plik�w (dev), kt�rych lista powinna zostać poważnie ograniczona do kilku niezbędnych.
Spis treści
Ten rozdział prezentuje metody konfiguracji parametr�w systemu.
Plik /etc/sysconfig/system
przechowuje
zaawansowaną konfigurację systemu, w rozdziale tym opisano część
z zawartych w nim opcji.
Zmienna określa czy skrypty startowe mają używać kolor�w:
COLOR_INIT=yes
Numer kolumny wyświetlania wyniku działania skryptu startowego:
INIT_COL=75
Szybsze uruchomienie systemu z pominięciem niekt�rych skrypt�w, startowych - m.in. skryptu od obsługi język�w:
FASTRC=no
Zezwolenie na interaktywny start rc-skrypt�w (pytanie o uruchomienie każdego z podsystem�w) po wciśnięciu klawisza I:
RC_PROMPT=yes
"Gadatliwość" kernela dla komunikat�w wysyłanych na konsolę tekstową. Opcja jest jednoznaczna z wywołaniem polecenia dmesg -n {$nr} (domyślnie 1):
CONSOLE_LOGLEVEL=1
Czas w sekundach, po kt�rym nastąpi restart maszyny jeśli wystąpił krytyczny błąd jądra (kernel panic). Ważna opcja w przypadku komputer�w, do kt�rych nie mamy fizycznego dostępu:
PANIC_REBOOT_TIME=60
Uruchomienie programu sulogin™ (pytanie o hasło root-a) zamiast powłoki jeśli wystąpią problemy w trakcie uruchomienia:
RUN_SULOGIN_ON_ERR=yes
Wartość "yes" poniższej zmiennej pozwala na zalogowanie się użytkownik�w dopiero po zakończeniu procesu ładowania systemu. Dzięki unikniemy potencjalnych problem�w wynikających z przedwczesnym uzyskaniem dostępu, z drugiej jednak strony tracimy możliwość zalogowania się (np. przez SSH) jeśli pojawią się problemy przed końcem ładowania systemu. Może to być istotne dla system�w obsługiwanych na odległość.
DELAY_LOGIN=yes
Opcja określa czy w czasie startu ma być usuwana zawartość
katalogu /tmp
:
CLEAN_TMP=yes
Wskazuje czy ma być zamontowany podsystem devfs™:
MOUNT_DEVFS=no
Domyślny priorytet (liczba nice) dla usług, kt�rym
nie go zdefiniowano w zmiennej
SERVICE_RUN_NICE_LEVEL umieszczanej w pliku podstawowej
konfiguracji usługi
(/etc/sysconfig/{$usługa}
):
DEFAULT_SERVICE_RUN_NICE_LEVEL=0
Lista katalog�w przechowujących systemy typu
chroot, kt�re mają
być zarządzane przez skrypt
/etc/init.d/sys-chroots
:
SYSTEM_CHROOTS=/jakis_katalog
Dzięki plikowi /etc/sysconfig/console
możemy ustawić takie parametry jak czcionka konsoli,
mapa klawiatury, kodowanie font�w oraz zarządzanie energią.
Aby zmienić czcionkę, edytujemy parametr:
CONSOLEFONT=lat2u-16
Do wyboru mamy czcionki zamieszczone w katalogu /usr/share/consolefonts
.
Aby zmienić kodowanie znak�w, edytujemy parametr:
CONSOLEMAP=8859-2
Aby zmienić mapowanie klawiatury edytujemy parametr:
KEYTABLE=pl2
Aby ustawić numery konsol dla kt�rych aplikowane są parametry, zmieniamy:
SET_FONT_TERMINALS="1 2 3 4 5 6 7 8"
Przedstawiony parametr deklaruje zmianę ustawień dla konsol tty1-tty8.
Aby zmienić opcje zarządzania energią, edytujemy parametry:
POWER_SAVE=on BLANK_TIME=10 POWERDOWN_TIME=60
Parametr BLANK_TIME
określa liczbę minut nieaktywności do wygaszenia ekranu,
POWERDOWN_TIME
- do wyłączenia monitora.
Aby zmienić kolor czcionki lub tła, edytujemy parametr:
FOREGROUND_COLOUR=red BACKGROUND_COLOUR=green
Do wyboru posiadamy kolory black|red|green|yellow|blue|magenta|cyan|white|default.
Aby zmienić domyślny tryb NUM Locka, edytujemy parametr:
NUM_LOCK=on
Do wyboru posiadamy atrybut "on" lub "off".
Aby uaktywnić zmiany wykonujemy:
/sbin/service console start
Częstym problemem początkującego użytkownika Linuksa jest ustawienie wyświetlania znak�w diakrytycznych, walut oraz odpowiedniego języka. Ponieważ PLD jest dystrybucją dla zaawansowanych użytkownik�w, możemy w niej przystosować środowisko pracy do naszych indywidualnych potrzeb.
Zanim przystąpimy do instalowania poszczeg�lnych paczek,
musimy w pliku /etc/sysconfig/i18n
ustawić odpowiednie
zmiennie środowiskowe odpowiadające za język czcionkę
systemową oraz kodowanie. W naszym przypadku wpis ten
wygląda następująco:
SUPPORTED_LOCALES=pl_PL LANG=pl_PL LC_ALL=pl_PL LINGUAS=pl_PL SYSFONT=lat2u-16 UNIMAP=lat2u SYSFONTACM=iso02
Następnie instalujemy pakiety odpowiedzialne za ustawienia lokalne i klawiaturę:
# poldek -i localedb-src kbd
Locale generujemy poleceniem localedb-gen, kt�re domyślne ustawienia pobiera ze
zmiennej SUPPORTED_LOCALES
wiec jeśli chcielibyśmy mieć
obsługę r�wnież innego języka, to trzeba to zaznaczyć właśnie przy tej zmiennej.
Przykładowy zapis dla kilku język�w w pliku /etc/sysconfig/i18n
może
wyglądać tak:
LANG=pl_PL # list of supported locales SUPPORTED_LOCALES="pl_PL/ISO-8859-2 de_DE/ISO-8859-2 \ en_GB/ISO-8859-1 en_US/ISO-8859-1"
Można też zainstalować pakiet zawierający bazę danych locale dla wszystkich lokalizacji obsługiwanych przez glibc.
# poldek -i glibc-localedb-all
Aby sprawdzić czy wszystko przebiegło pomyślnie wydajemy polecenie:
$ locale LANG=pl_PL LC_CTYPE="pl_PL" LC_NUMERIC="pl_PL" LC_TIME="pl_PL" LC_COLLATE="pl_PL" LC_MONETARY="pl_PL" LC_MESSAGES="pl_PL" LC_PAPER="pl_PL" LC_NAME="pl_PL" LC_ADDRESS="pl_PL" LC_TELEPHONE="pl_PL" LC_MEASUREMENT="pl_PL" LC_IDENTIFICATION="pl_PL" LC_ALL=
Sprawdzamy czy wszystkie wpisy się zgadzają.
Jeśli chcemy aby ustawienia dopasowane były do naszych upodobań do dyspozycji mamy następujące zmienne LC_*:
Dostępne zmienne LC_*: * LC_CTYPE: Konwersja czcionki i wielkości liter. * LC_COLLATE: Porządek sortowania. * LC_TIME: Format wyświetlania daty i godziny. * LC_NUMERIC: Wyświetlanie liczb nie związanych z walutą * LC_MONETARY: Formaty walutowe. * LC_MESSAGES: Format wiadomości informacyjnych, diagnostycznych \ oraz określających interakcje programu. * LC_PAPER: Rozmiar papieru. * LC_NAME: Format nazw. * LC_ADDRESS: Format wyświetlania adresu i lokalizacji. * LC_TELEPHONE: Format wyświetlania numeru telefonu. * LC_MEASUREMENT: Jednostki miary (metryczna lub inna) * LC_IDENTIFICATION: Metadata o ustawieniach locale.
Przykładowo jako domyślnego języka, możemy używać angielskiego jednak
ze wsparciem dla polskich czcionek i polskich walut. Wszelkiego typu
zmiany dokonujemy poprzez dodanie do pliku ~/.bash_profile
odpowiednich wpis�w:
LANG=en_EN export LANG LC_CTYPE=pl_PL export LC_CTYPE
Niniejszy rozdział dotyczy uruchomienia obsługi myszy dla terminala znakowego, konfigurację myszy dla środowiska graficznego (X-Window™) opisano w „X-Server”. Proces konfiguracji rozpoczynamy od instalacji demona gpm™:
# poldek -i gpm
Dalsza część konfiguracji polega na załadowaniu właściwego
modułu jądra i ustawieniu przynajmniej dw�ch parametr�w w
pliku /etc/sysconfig/mouse
: nazwy
urządzenia (DEVICE) i typu myszy (MOUSETYPE).
Poniższy opis dotyczy kernela 2.6.x, w tej wersji
jako urządzenia dla myszy PS2 i USB stosuje się
/dev/input/mouse0
,
/dev/input/mouse1
, ... lub urządzenie
zbiorcze /dev/input/mice
. Jednak dla
wstecznej zgodności działa dalej
/dev/psaux
Obsługa portu szeregowego RS-232 jest
częścią jądra PLD, więc nie ładujemy żadnego modułu -
urządzenia działają od razu po podłączeniu. W zależności od
tego, na kt�rym porcie mamy podpiętą mysz, ustawiamy
odpowiednio parametr DEVICE, pamiętając,
że /dev/ttyS0
to COM1,
/dev/ttyS1
to COM2 ...
Typ myszy będzie zależał od modelu posiadanego urządzenia, w większości wypadk�w powinna zadziałać dla wartości "ms", "msc", lub "ms3". Szczeg�łowe informacje na ten temat znajdziemy w pomocy demona, kt�rą wyświetlimy w spos�b opisany na końcu rozdziału.
DEVICE=/dev/ttyS0 MOUSETYPE=ms3
W laptopach urządzenia wskazujące są zgodne z myszkami typu PS/2, stąd ich konfiguracja przebiega tak samo. Rozpoczynamy od załadowania modułu jądra:
# modprobe psmouse
Podajemy urządzenie myszy i jej typ, kt�ry dla większości urządzeń ustawimy na "ps2" lub "imps2":
DEVICE=/dev/input/mice MOUSETYPE=ps2
Ładowanie modułï¿½w dla tego rodzaju urządzeń może być wykonane automatycznie przez mechanizm udev™ lub ręcznie. W drugim wypadku wydajemy następujące polecenia (zakładam że są już załadowane moduły dla kontrolera USB):
# modprobe usbhid # modprobe usbmouse
Podajemy urządzenie myszy i jej typ, kt�ry dla większości
urządzeń ustawimy na ps2
lub imps2
:
DEVICE=/dev/input/mice MOUSETYPE=ps2
Teraz wystarczy tylko uruchomić usługę gpm™:
# /etc/init.d/gpm start
Wcześniej załadowane moduły można jeszcze wpisać do
/etc/modules
, aby ładowały się przy
starcie systemu.
Większość dostępnych na rynku myszek powinna zadziałać z przedstawioną powyżej konfiguracją. Możliwe jednak, że nasza mysz używa nietypowego protokołu i należy ustawić inny typ urządzenia (MOUSETYPE). W takim wypadku pomocna może się okazać lista urządzeń i odpowiadających im typ�w wyświetlana w wyniku poniższego polecenia:
# gpm -m /dev/input/mice -t help
Pożyteczną opcją jest BUTTON_COUNT, kt�ra definiuje liczbę przycisk�w myszy.
Zamiast wskazania pliku urządzenia,
możemy użyć łącza symbolicznego o nazwie
/dev/mouse
wskazującego
na właściwe urządzenie.
Strefy czasowe to specjalne ustawienia, pozwalające systemowi na łatwe przeliczanie czasu uniwersalnego (UTC) na lokalny i na odwr�t. Zaczynamy od instalacji koniecznego pakietu:
$ poldek -i tzdata
Aby wskazać strefę czasową modyfikujemy plik
/etc/sysconfig/timezone
,
jego ustawienia wskazują na odpowiednie pliki i katalogi
w /usr/share/zoneinfo
, kt�re z kolei odpowiadają
strefom czasowym. Nazwy plik�w odpowiadają pewnym punktom
geograficznym tak aby łatwiej było określić właściwą strefę.
W Ac™ ustawiamy zmienne ZONE_INFO_AREA i TIME_ZONE. Opcje wskazują na katalog i plik opisujący strefę, jak zapewne czytelnik zauważy, część z nich nie jest przechowywania w podkatalogach, wtedy tą zmienną należy ustawić pustą. Dla Polski wybieramy podajemy następujące wartości:
ZONE_INFO_AREA="Europe" TIME_ZONE="Warsaw"
W Th™ powyższe opcje zostały zastąpione przez TIMEZONE, tutaj wartości oddzielamy slashem:
TIMEZONE="Europe/Warsaw"
Aby zmiany odniosły skutek musimy zrestartować odpowiedni skrypt startowy:
# service timezone restart
Więcej informacji o strefach czasowych znajdziemy na witrynie www.timeanddate.com
Standardowo BIOS powinien używać czasu uniwersalnego (UTC),
zegar systemowy powinien wtedy działać zgodnie z czasem lokalnym,
określonym w pliku /etc/sysconfig/timezone
.
W ten spos�b zmiany czasu letni/zimowy będą następowały
automatycznie, bez modyfikowania ustawień zegara sprzętowego.
Wyjątkiem od tej reguły jest używanie na tym samym komputerze PLD i kt�regoś z produkt�w Microsoftu. Te ostatnie używają zgodnego czasu dla BIOS-u i systemu, co spowoduje r�żnice we wskazaniach zegar�w. Jedynym rozwiązaniem tego problemu jest zmuszenie naszego PLD, by używał czasu BIOS-u jako czasu lokalnego. W tym wypadku zmianą czasu letni/zimowy może zająć się system Microsoftu lub możemy wykonać to samodzielnie.
Aby skorzystać z pierwszego rozwiązania synchronizujemy zegar
sprzętowy z czasem uniwersalnym, a w pliku
/etc/sysconfig/clock
ustawiamy:
UTC="true"
W przeciwnym wypadku ustawiamy czas lokalny i wybieramy wartość
UTC="false"
Zmienne środowiskowe to prosty spos�b modyfikowania konfiguracji środowiska użytkownika. Listę zmiennych i przypisanych im wartości uzyskamy za pomocą polecenia powłoki set, na poniższym przykładzie przedstawiono fragment wyniku polecenia:
$ set BASH=/bin/bash BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="2" [4]="release" [5]="i686-pld-linux-gnu") BASH_VERSION='2.05b.0(2)-release' COLORTERM=gnome-terminal COLUMNS=125
Administrator może ustawić globalnie wszystkim użytkownikom
zmienne środowiskowe. Do tego wykorzystuje się mechanizm
env.d
. Jest to katalog umieszczony
w /etc
, zawierający pliki tekstowe
o nazwach takich samych jak nazwy zmiennych, wewnątrz
każdego z nich podana nazwa zmiennej i jej wartość.
Przykładowo zmienna EDITOR zostanie
zainicjowana jeśli utworzymy plik
/etc/env.d/EDITOR
, jego treść może
wyglądać następująco:
EDITOR=vim
Zmiany w /etc/env.d
są aktualizowane
po ponownym zalogowaniu danego użytkownika.
Każdy użytkownik może zar�wno tworzyć takie zmienne jak i nadpisywać te ustawione globalnie.
Zmienne możemy powoływać na czas sesji, dokonujemy tego przy pomocy powłoki (shell). W większości z nich (sh, zsh, bash, ksh) istnieje polecenie export kt�re pozwala ustawić dowolna zmienną np.:
# export EDITOR=mcedit
Tak ustawiona zmienna będzie funkcjonować do czasu wylogowania użytkownika
Aby ustawić na stałe zmienną użyjemy pliku
konfiguracyjnego powłoki. Musimy jedynie wstawić do
takiego pliku podane wyżej polecenie export.
Każda z powłok posiada swoje własne pliki
startowe, przykładowo powłoka BASH używa pliku
~/.bash_profile
i ~/.bashrc
,
zaś ZSH ~/.zshenv
. Więcej informacji
na ten temat zawarto w manualu każdej z powłok.
Jeśli chcemy ustawić zmienną środowiskową tylko dla jednego uruchamianego programu, to podajemy jej definicję przed nazwą programu np.:
$ http_proxy=62.87.244.34:8080 wget http://foobar.com/plik.foo
Pldconf jest narzędziem tworzonym z myślą o początkujących użytkownikach. Wiele opcji jest konfigurowanych automatycznie. Pldconf ma małe wymagania i jest niewielkim pakietem (ok. 150 kB) Jego instalacja sprowadza się do wydania polecenia:
# poldek -i pldconf
Program zadaje minimalną ilość pytań i w podstawowej wersji (dla PLD RA 1.0) konfiguruje:
Serwer X: karta (auto), rozdzielczość, kolory, itd;
Sieć: bramka, DNS, karty sieciowe (auto), otoczenie sieciowe, SDI, NEO (ethernet);
Desktop: menedżer okien, kolory, czcionki i więcej;
Menedżer startu: menu z linuksem i windows, dyskietka startowa i więcej;
Dostęp do partycji windows;
tyle z podstawowych możliwości - pldconf potrafi więcej.
Obecnie pldconf rozwijany jest dla nadchodzącego PLD 2.0 (AC/DC/NEST). W nowej wersji dodano między innymi:
Konfiguracje karty dźwiękowej (alsa);
Konfiguracje drukarki (cups);
Optymalizacje dysku twardego (hdparm);
Konfiguracje fetchmail;
Konfiguracje tunera telewizyjnego
Zarządzanie kontami użytkownik�w
Wersja pldconf dla PLD 2.0 nieznacznie r�żni się od wersji dla PLD 1.0. R�żnice dotyczą
przede wszystkim zmiany ścieżek (np.
/usr/X11R6/bin/mozilla
w PLD 2.0 zmieniono na
/usr/bin/mozilla
) głï¿½wnie w module do
konfiguracji desktopu. W praktyce blisko 100% pldconf w najnowszej wersji
(przeznaczonym dla PLD 2.0) działa poprawnie r�wnież w systemie PLD 1.0. W
szczeg�lności najnowszy pldconf potrafi przeprowadzić sieciową instalację PLD 2.0 -
moduł instalacji zadziała poprawnie w systemie PLD 1.0. Innymi słowy, aby
zainstalować PLD 2.0 spod uruchomionego PLD 1.0 należy zainstalować najnowszą wersję
pldconf.
Uwaga: W przypadku instalacji nowego pldconf w systemie PLD 1.0 wymagana jest r�wnież instalacja pakietu perl-modules.
Strona domowa projektu
W tym rozdziale przedstawione są informacje o kluczowych plikach systemu operacyjnego. Zostały tu opisane jedynie podstawowe dane na ich temat, więcej można znaleźć w podręczniku systemowym man, oraz info
Plik /etc/inittab
przechowuje
konfigurację programu init, uruchamianego
w trakcie startu systemu i działającego bez przerwy
do chwili jego zamknięcia. Głï¿½wnym zadaniem procesu
init jest kontrola zachowania systemu w
zależności od osiągniętego poziomu pracy
systemu oraz w wypadku wystąpienia specjalnych zdarzeń.
Poziomy pracy szczeg�łowo opisano w
„Zmiana poziomu pracy systemu”.
Oto najważniejsze opcje zawarte w pliku
/etc/inittab
:
Domyślny poziom uruchomienia - wskazuje programowi
init jaki poziom uruchomienia
ma być wybrany jeśli wywołano go bez parametr�w lub
w trakcie startu systemu. Wiersz określający tę opcję
wygląda następująco:
id:{$poziom}:initdefault:
($poziom to cyfra odpowiadająca poprawnemu poziomowi
uruchomienia), ustawienie domyślnie trzeciego poziomu
uruchomienia przedstawiono na poniższym przykładzie:
id:3:initdefault:
Instrukcje uruchomienia programu mingetty™
na pierwszym terminalu wirtualnym
(/dev/tty1
), wywołania dla
kolejnych będą bardzo podobne:
1:12345:respawn:/sbin/mingetty --noclear tty1
Poniższy wiersz uruchomi program
agetty™, łączący się z
portem szeregowym /dev/ttyS0
,
w celu podłączenia terminala szeregowego:
0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100
Jeśli nie używamy tego rodzaju urządzeń to powyższe wywołania są dla nas zbyteczne.
Wywołania skrypt�w startowych - opcje te bardzo rzadko wymagają ingerencji użytkownika:
si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0
Obsługa specjalnych zdarzeń np. wciśnięcia kombinacji klawiszy ctrl+alt+del:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Mamy sporą dowolność w zarządzaniu tym zdarzeniem, w powyższym przykładzie po naciśnięciu kombinacji ctrl+alt+del nastąpi przeładowanie systemu, aby nastąpiło zamkniecie powinniśmy użyć polecenia shutdown -h.
Plik ten przechowuje szczeg�łowe informacje o systemach plik�w, kt�re mają być montowane do odpowiednich katalog�w. Informacje w nim zawarte są odczytywane w trakcie startu systemu, dzięki temu automatycznie są montowane wszystkie woluminy (partycje) nie oznaczone opcją "noauto". Plik ten jest zazwyczaj tworzony przez instalator, jednak administrator ma możliwość, a nawet obowiązek dokonywać w nim zmian. Dla lepszego zrozumienia tematu przyjrzyjmy się przykładowemu plikowi i przeanalizujmy funkcje jakie spełniają poszczeg�lne wpisy.
#(fs_spec) (fs_file)(fs_vfstype) (fs_mntops) (fs_freq) (fs_passno) /dev/hda2 / ext3 defaults 0 0 /dev/hda3 swap swap defaults 0 0 proc /proc proc defaults 0 0 pts /dev/pts devpts gid=5,mode=600 0 0 /dev/fd0 /media/floppy vfat noauto 0 0 /dev/cdrom /media/cdrom iso9660 noauto,ro,user,unhide 0 0
Jak widzimy plik jest podzielony na wiersze, z kt�rych każdy odpowiada jednemu obsługiwanemu woluminowi. Poszczeg�lne pola oddzielone są od siebie spacją lub tabulatorem. Dane odpowiedniego rekordu wczytywane są przez skrypty startowe oraz programy takie jak: fsck, mount czy umount przez co muszą one być zapisane w uporządkowany spos�b.
Pole (fs_spec)
- określa urządzenie blokowe lub zas�b
sieciowy przeznaczony do zamontowania, na przykład partycję dysku,
CDROM czy udział NFS. Opis urządzeń masowych przedstawiono
w „Nazewnictwo urządzeń masowych”, montowanie udziałï¿½w NFS
przedstawiono w „NFS - Network File System”.
Pole (fs_file)
- wskazuje na miejsce, w kt�rym ma
być zamontowany dany system plik�w, na przykład dla partycji wymiany
(ang. "swap partition") to pole powinno zawierać wartość "none", a dla
CDROM-u "/media/cdrom
".
Pole (fs_vfstype)
- określa typ systemu plik�w jaki
znajduje się na danym urządzeniu. Najbardziej powszechne obecnie i
obsługiwane systemy plik�w to:
ext2 - podstawowy system plik�w w Linuksie
ext3 - j.w. tyle że z księgowaniem
reiserfs - zaawansowany system plik�w z księgowaniem
xfs - zaawansowany system plik�w z księgowaniem
vfat - używany w starszych systemach Microsoftu, znany r�wnież jako FAT32
ntfs - system plik�w wsp�łczesnych wersji system�w Microsoftu
iso9660 - używany na płytach CD-ROM
nfs - sieciowe udziały dyskowe NFS
swap - obszar wymiany
Pole (fs_mntops)
udostępnia szereg znacznik�w
systemowych, kt�re mogą mieć kluczowe znaczenie dla bezpieczeństwa i
wydajności naszego systemu. Przykładowo następujące znaczniki oznaczają:
defaults - domyślny zestaw opcji, użyteczny w większości wypadk�w.
nodev - zapobiega rozpoznawaniu przez jądro dowolnych plik�w urządzeń, znajdujących się w systemie plik�w
noexec - zapobiega wykonywaniu plik�w wykonywalnych w danym systemie plik�w
nosuid - zapobiega uwzględnianiu bit�w set-UID oraz set-GID w przypadku dowolnego pliku wykonywalnego
ro - powoduje zamontowanie systemu plik�w w trybie tylko do odczytu, powstrzymując wszelkie modyfikacje informacji dotyczących plik�w, włączając w to na przykład czas dostępu do pliku
Pole (fs_freq)
jest używane przez program
dump do wykrywania, kt�ry system plik�w ma mieć
wykonywaną kopię bezpieczeństwa. Jeżeli nie ma informacji o tym polu,
zwracana jest wartość 0 i dump przyjmuje, że dany
system plik�w nie musi być mieć robionych kopii danych. Jeśli nie
korzystamy z tego programu możemy wszędzie ustawić wartość 0.
Pole (fs_passno)
jest używane przez program
fsck aby zadecydować, jaka powinna być kolejność
sprawdzania system�w plik�w podczas ładowania systemu. Głï¿½wny
system plik�w powinien mieć (fs_passno)
r�wną 1,
zaś inne systemy plik�w powinny mieć (fs_passno)
r�wne 2. Jeżeli to pole nie posiada żadnej wartości lub jest ona r�wna 0
to wtedy dany system plik�w nie jest sprawdzany. Sprawdzania nie wymagają
właściwie systemy plik�w z księgowaniem, gdyż są bardzo odporne na
awarie.
Uwaga! Najważniejszym woluminem w systemie jest ten przypisywany do
korzenia drzewa katalog�w (katalog "/
"), dlatego
należy bardzo ostrożnie dokonywać zmian jego konfiguracji. Błąd może
spowodować problemy z uruchomieniem systemu operacyjnego.
Jeden z najważniejszych plik�w w systemie - przechowuje informacje o kontach wszystkich użytkownik�w. Jeden wiersz w tym pliku zawiera informacje o jednym użytkowniku. Każdy składa się z p�l rozdzielonych dwukropkiem:
login:haslo:UID:GID:komentarz:katalog_domowy:powłoka np.: marek:x:502:1000:Marek Kowalski:/home/users/marek:/bin/bash
Uwagi:
Znak "x" w miejscu hasła oznacza że jest przechowywane w osobnym pliku
(/etc/shadow
). UID to unikalny identyfikator
użytkownika, zaś GID to unikalny numer grupy głï¿½wnej użytkownika -
zdefiniowany w pliku /etc/group
. Powłoka (shell)
musi być zdefiniowana w pliku /etc/shells
.
Oznaczenie powłoki jako /bin/false
oznacza że
jest to konto użytkownika systemowego. Jest to specjalny
rodzaj kont na kt�re zwykli użytkownicy nie mogą się zalogować
Plik ten jak i opisany poniżej /etc/shadow
mają
kluczowe znaczenie dla systemu, dlatego nie należy ich
edytować ręcznie. Narzędzia, służce do tego, opisano w
„Konta użytkownik�w”.
Plik zawierający zakodowane hasła i dodatkowe informacje dla systemu uwierzytelniania użytkownik�w np.:
marek:$1$qb/waABk$F3Y6dKw/6ekZPfcoTpzks/:12575:0:99999:5:::
Plik zawierający nazwy utworzonych grup i przypisanych do nich użytkownik�w według schematu:
nazwa_grupy::GID:login1,login2,login3,... np.: audio::23:kasia,marek
Uwagi: Pierwsze pole to unikalna nazwa grupy, drugie nie ma we wsp�łczesnych systemach uniksowych już zastosowania, GID to niepowtarzalny identyfikator grupy, trzecie pole zawiera listę identyfikator�w użytkownik�w zapisanych do tej grupy.
Podobnie jak dwa powyższe, ten plik też powinien być modyfikowany przez przeznaczone do tego programy, ich opis zawarto w „Grupy”
Zawiera listę dostępnych dla użytkownik�w powłok np.:
/bin/ksh /bin/sh /bin/bash
Aby użytkownik miał możliwość korzystania z danej powłoki musi być ona zdefiniowana w tym pliku
Wiadomość dnia (ang. Message of the day) - Powitanie użytkownika: treść tego pliku wyświetlana po uwierzytelnieniu się w systemie.
Spis treści
Ten rozdział opisuje operacje dyskowe takie jak podział na partycje, tworzenie system�w plik�w i inne zaawansowane zagadnienia
Uwaga! Wszelkie operacje dyskowe narażają nas na nieodwracalną utratę danych, dlatego zaleca się stworzenie kopii zapasowej danych i zachowanie szczeg�lnej ostrożności.
W Linuksie mogą być obsłużone cztery partycje podstawowe lub trzy podstawowe i jedna rozszerzona. Takie partycje są numerowane od 1 do 4, zaś dyski logiczne kolejnymi numerami począwszy od 5. Podawanie numeru partycji ma sens wyłącznie w wypadku dysk�w twardych, nie podajemy ich dla urządzeń takich jak napędy optyczne (CD/DVD), dyskietki czy też woluminy logiczne. Nie podajemy go r�wnież w przypadku odwołania do urządzenia fizycznego np. używając programu fdisk™ lub hdparm™.
Aby zorientować się w układzie partycji urządzenia możemy użyć programu fdisk™ np.:
# fdisk -l /dev/hda
Urządzenia ATA nazywane są wg. schematu:
/dev/hd{$x}{$Nr}
np.
/dev/hda1
.
Parametr {$x} jest małą literą identyfikującą fizyczne urządzenie, zaś {$Nr} to om�wiony powyżej numer partycji dyskowej. W odr�żnieniu od urządzeń SATA i SCSI w interfejsie IDE litery te mają swoje specjalne znaczenie - wskazują spos�b podłączenia urządzenia:
"a" -dysk nadrzędny (primary) podłączony do pierwszego kanału IDE
"b" -dysk podrzędny (slave) podłączony do pierwszego kanału IDE
"c" -dysk nadrzędny (primary) podłączony do drugiego kanału IDE
"d" -dysk podrzędny (slave) podłączony do drugiego kanału IDE
Dyski twarde i pamięci flash mają oznaczenia
/dev/sd{$x}{$Nr}
np.
/dev/sda1
.
Symbol {$x} to oznaczenie fizycznego urządzenia, kt�rym
przypisywane są kolejne litery zaczynając od "a", zaś {$Nr}
to opisany na początku numer partycji.
Napędy optyczne (CD/DVD) są oznaczane jako
/dev/sr{$Nr}
np.:
/dev/sr0
.
Woluminy logiczne mają dowolne nazwy - nadawane przez
administratora w trakcie ich zakładania. Jeśli pliki
urządzeń nie są utworzone statycznie, to mogą być
wykrywane automatycznie
(przy starcie systemu) i wtedy nadawane są im nazwy
w konwencji /dev/mapper/$VG-$LV
np. /dev/mapper/sys-home
.
Urządzenia mają nazwy wg. schematu: /dev/md{$nr}
,
np. /dev/md0
, kt�re z kolei jest symlinkiem
do /dev/md/0
.
GRUB ze względu na swoja wieloplatformowość używa własnego
schematu nazewnictwa. Dyski fizyczne są widoczne jako
(hd{$NR})
, np. (hd1) zaś
partycje jako (hd{$NR1},{$NR2})
np. (hd1,2).
Urządzenia te nie są bezpośrednio powiązane z
plikami urządzeń w katalogu katalogu /dev
i
programy poza GRUB-em nie mogą z nich korzystać. Więcej w opisie bootloadera,
w „GRUB”.
Na dysku twardym możemy utworzyć do czterech partycji podstawowych (primary partition) lub do trzech partycji podstawowych i jednej rozszerzonej (extended partition). Partycję rozszerzoną możemy podzielić na liczne dyski logiczne (logical partitions).
Partycje szerzej opisano m.in.
w Wikipedii,
zaś spos�b ich oznaczania przedstawiono w
„Nazewnictwo urządzeń masowych”.
Opis systemu plik�w-urządzeń z katalogu /dev
odnajdziemy w „Urządzenia”.
Operacje na partycjach mogą skończyć się utratą danych, dlatego warto najpierw zrobić zrzut tablicy partycji do pliku:
# sfdisk -d /dev/hda > hda.out
Jeśli zechcemy powr�cić do poprzedniego układu partycji wystarczy, że wydamy polecenie:
# sfdisk /dev/hda < hda.out
Wymagania dyskowe w PLD (nie licząc danych, log�w i obszaru wymiany):
instalacja minimalna - poniżej 150MB
serwer - dużo zależy od zainstalowanych usług, należy założyć, że zajmie co najmniej 250MB; dla większej elastyczności i stabilności warto przeznaczyć większy zapas miejsca, niż w przypadku maszyn domowych.
stacja robocza z XWindow - należy przeznaczyć przynajmniej 1GB miejsca
Logi i dane mogą zajmować bardzo duże ilości miejsca, dlatego musimy podejść do tego indywidualnie.
Osobnym zagadnieniem jest wielkość obszaru wymiany, stara zasada m�wiąca, aby swap był dwukrotnie większy niż pamięć operacyjna, sprawdza się większości wypadk�w. Należy jednak podejść do tego elastycznie i dobrać objętość obszaru wymiany odpowiednio do charakterystyki pracy maszyny.
Dla stacji roboczych zazwyczaj wystarczy podział na
dwie partycje, kt�re będą użyte dla: "/
"
(głï¿½wnego drzewa) i obszaru wymiany (swap). W przypadku
serwer�w dużo będzie zależało od zastosowania maszyny i
preferencji administratora, lecz jako minimum należy
dodatkowo przydzielić partycję dla gałęzi
/var
.
W obu zastosowaniach dla wygody i bezpieczeństwa nierzadko
tworzy się dodatkową partycję dla katalogu
/home
, pozwala to na łatwiejsze
zarządzanie uprawnieniami i ułatwia wiele operacji. Partycję
na katalogi domowe należy traktować jako obowiązkową jeśli
na maszynie będą dostępne konta z dostępem do powłoki
(shella). Jej wielkość bezpośrednio zależy od planowanej
ilości przechowywanych danych.
Jeśli od maszyny wymagamy zwiększonej niezawodności można
utworzyć małą partycję dla katalogu
/boot
, w kt�rym są trzymane ważne
pliki systemowe. Dane w katalogu /boot
zaraz po zainstalowaniu nie powinny przekroczyć ok. 7MB,
aby więc mieć możliwość instalacji kilku kerneli, musimy
przeznaczyć na taką partycję co najmniej 25MB miejsca.
Dzięki temu zwiększymy szanse na uruchomienie systemu
z uszkodzonym głï¿½wnym systemem plik�w.
Jest to szczeg�lnie zalecane w przypadku
użycia bootloadera GRUB, ze względu na jego specyficzną
konstrukcję, więcej na temat GRUB-a znajdziemy
w „GRUB”.
fdisk™ - interaktywny program
do zarządzania partycjami, wydane polecenia zostaną wykonane
na samym końcu - po operacji zapisu zmian. Właśnie ten program
zostanie użyty w naszych przykładach, wywołujemy go z
parametrem określającym urządzenie z katalogu
/dev
.
cfdisk™ - wygodne narzędzie,
wyposażone w semigraficzny interfejs użytkownika.
Tw�rcy ułatwili życie początkującym, poprzez
ukrywanie partycji rozszerzonych, tworzeniem i ich usuwaniem
zajmuje się program bez naszego udziału. Podobnie jak
fdisk™ zapisuje zmiany do tablicy
partycji na samym końcu.
Wywołujemy go z parametrem określającym urządzenie
z katalogu /dev
.
parted™ - jest potężnym narzędziem, umożliwiającym wiele operacji niedostępnych dla obu poprzednich program�w. Opr�cz podstawowych operacji na partycjach umożliwia takie operacje jak zmianę wielkości partycji, tworzenie obraz�w partycji i inne. Istotną r�żnicą w działaniu w por�wnaniu dla powyższych narzędzi jest natychmiastowe wprowadzanie zmian, stąd zaleca się zachowanie dużej ostrożności przy korzystaniu z niego.
GParted™/QtParted™ - programy dla X-Window oparte o parted™. Mają interfejs wzorowany na programie Partion Magic z systemu MS Windows.
sfdisk™ - program obsługiwany za pomocą argument�w i danych przesyłanych na wejście standardowe. Jest dosyć trudny w obsłudze ale za to może być używany w skryptach.
Poniższe przykłady będą dotyczyć programu fdisk™, cfdisk™ jest bardzo prosty w obsłudze i nikt nie powinien mieć nim problem�w, zaś opis parted™ wykracza poza ramy tego rozdziału.
Aby sprawdzić czy na dysku /dev/sda
są jakieś partycje użyjemy następującego polecenia:
# fdisk -l /dev/sda
Założyłem, że na dysku nie ma innych partycji, jeśli w naszym wypadku takie są to musimy je najpierw usunąć. Kiedy dysk jest gotowy uruchamiamy program fdisk:
# fdisk /dev/sda Command (m for help):
wybieramy opcję n (nowa partycja)
Command action e extended p primary partition (1-4)
Program pyta o rodzaj rodzaj partycji, kt�rą ma utworzyć. Tu wyb�r zależy od nas ale jeśli dysk ma mieć nie więcej niż cztery partycje, to śmiało możemy zostać przy partycjach podstawowych - w naszym przykładzie wybieramy opcję p (podstawowa partycja). Dalej program zapyta nas o numer partycji, pierwszy i rozmiar partycji. Rozmiar możemy podać w cylindrach, KiB, MiB lub GiB.
Dla kolejnych partycji powtarzamy cały proces, aż uzyskamy to co zaplanowaliśmy. Opcją p) wyświetlamy planowany układ partycji. Po zakończeniu podziału przypisujemy typy partycji opcją t) podając kolejno: numer partycji, Jeśli wybrany podział nam odpowiada to zapisujemy zmiany na dysk (do tablicy partycji) przez wyb�r opcji w.
Jeśli żadna z partycji nie była używana w trakcie podziału na partycje (np. zamontowana) to tablica partycji jest ponownie odczytywana i od razu możemy wykonywać dalsze prace. W przeciwnym wypadku musimy jeszcze przeładować system. Po zakończeniu dzielenia dysku pozostało nam utworzenie system�w plik�w, kt�re zostało opisane w „Systemy plik�w”.
W tym rozdziale om�wimy tworzenie jednej z dw�ch możliwych struktur na partycji lub urządzeniu - systemu plik�w lub obszaru wymiany (swap).
Rodzaj użytego systemu plik�w zależy od planowanego
zastosowania. W Linuksie najbardziej uniwersalnym i
popularnym systemem plik�w jest ext2
.
Swoją pozycję uzyskał dzięki temu, że jest prostym i
stosunkowo wydajnym systemem plik�w. Ponadto jako
jeden z niewielu system�w plik�w nadaje się do użytku
na dyskietkach i bardzo małych partycjach.
W pozostałych zastosowaniach możemy śmiało użyć
system�w plik�w z tzw. księgowaniem (journaling) np.:
ext3
, ReiserFS
,
XFS
, JFS
ze
względu na duże bezpieczeństwo przechowywania danych.
Dla zastosowań wymagających wysokiej niezawodności
najlepszy będzie ext3, pozostałe z wymienionych
można polecić w systemach wymagających dużej
wydajności i wszędzie tam gdzie występują duże ilości
plik�w.
Aby z partycji mogły r�wnież korzystać systemy Microsoftu
musimy utworzyć na niej system plik�w vfat
.
Utracimy jednak wtedy wszystkie zalety uniksowych system�w
plik�w.
Programy do tworzenia konkretnych system�w plik�w r�żnią się nazwami, łatwo je rozpoznamy gdyż ich nazwy zaczynają się od "mkfs." np.:
/sbin/mkfs.ext2 /sbin/mkfs.ext3 /sbin/mkfs.reiserfs /sbin/mkfs.msdos /sbin/mkfs.vfat /sbin/mkfs.xfs
Aby utworzyć system plik�w wywołujemy odpowiedni
program z nazwą urządzenia jako parametrem, na
poniższym przykładzie przedstawiono tworzenie systemu plik�w
ext2
na drugiej partycji podstawowej:
# /sbin/mkfs.ext2 /dev/sda2
Więcej o nazewnictwie urządzeń masowych w „Nazewnictwo urządzeń masowych”.
Powyżej przedstawiono jedynie skr�coną listę wszystkich
dostępnych program�w, programy te są dostępne w
odpowiednich pakietach, przykładowo narzędzia dla systemu
plik�w xfs
odnajdziemy w pakiecie
xfsprogs
.
Do tworzenia obszaru wymiany używamy programu mkswap np.:
# mkswap /dev/hda5
Partycje i obszary wymiany są montowane/włączane przez
rc-skrypty w trakcie uruchamiania systemu wg. opcji zawartych
w pliku /etc/fstab
(o ile tam zostały
dodane). W pozostałych wypadkach systemy plik�w montujemy
poleceniem mount z odpowiednimi
opcjami np.:
# mount /dev/sda2 /katalog_docelowy
System plik�w zostanie automatycznie wykryty a opcje zostaną ustawione na wartość "defaults". Więcej na ten temat odnajdziemy w podręczniku systemowym.
Obszary wymiany aktywujemy następująco:
# /sbin/swapon /dev/hda5
Szczeg�łowy opis pliku /etc/fstab
oraz rc-skrypt�w przedstawiono w
„Kluczowe pliki”.
Aby dowiedzieć się jaki typ systemu plik�w jest na
danej partycji, użyjemy programu
file™ z opcją -s
:
# file -s /dev/hda2 /dev/hda1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
Listę urządzeń z utworzonymi do tej pory systemami plik�w uzyskamy za pomocą programu blkid:
# blkid /dev/md/0: UUID="4f6fc9cc-9a3a-42bd-9e47-50ecfbeb090b" TYPE="xfs" /dev/hda1: UUID="6d7abd95-9731-4406-b154-78ee66fc6c7f" TYPE="ext2" /dev/sda: UUID="4f6fc9cc-9a3a-42bd-9e47-50ecfbeb090b" TYPE="xfs" /dev/sdb: UUID="4f6fc9cc-9a3a-42bd-9e47-50ecfbeb090b" TYPE="xfs"
Aby zobaczyć systemy plik�w podmontowanych urządzeń możemy użyć programu mount:
/dev/hda1 on /boot type ext2 (rw,sync) /dev/md/0 on /vservers type xfs (rw,noatime,usrquota)
Obecnie nie formatuje się dysk�w twardych, można to robić jedynie z dyskietkami elastycznymi za pomocą narzędzia fdformat™. Robi się to wyłącznie dla uzyskania jakiejś nietypowej pojemności nośnika, w pozostałych wypadkach operacja ta jest zbędna, gdyż dyskietki podobnie jak dyski twarde są formatowane fabrycznie. Takie formatowanie nazywane jest także tzw. formatowaniem niskopoziomowym.
To co obecnie potocznie określa się jako "formatowanie" jest złożeniem dw�ch operacji: podziału na partycje a następnie utworzeniem system�w plik�w.
W systemie Linux istnieje możliwość tworzenia na dyskach programowych macierzy RAID poziom�w 0, 1, 4, 5, 6, 10, 01. Służy do tego celu usługa mdadm™. W przeciwieństwie do macierzy RAID sprzętowych kt�re wymagają specjalnego kontrolera dysk�w (dość drogiego), macierze RAID programowe zakłada się na dyskach podłączonych do zwykłego kontrolera IDE, SATA lub SCSI i całą obsługę przekazuje do odpowiedniego oprogramowania (np: mdadm™).
Macierze możemy zakładać zar�wno na całych dyskach, jak i na odpowiednio przygotowanych partycjach, przy czym zakładanie na partycjach daje więcej możliwości konfiguracji. Zar�wno korzystając z całych dysk�w jak i partycji należy pamiętać o tym że najmniejsza partycja lub dysk decyduje o wielkości zakładanej macierzy (miejsce ponad jest tracone), dlatego też należy raczej korzystać z takich samych rozmiar�w dysk�w lub partycji.
Poniżej zamieszczono listę i opis dostępnych rodzaj�w macierzy dla mdadm™, w nawiasach podano nazwy parametr�w programu:
RAID 0 (raid0
, 0
,
stripe
) - striping czyli
połączenie dw�ch dysk�w (partycji) z przeplotem
danych, zwiększa się wydajność w por�wnaniu z
pojedynczym dyskiem, obniża odporność na awarie
dysk�w - awaria jednego dysku to utrata
wszystkich danych.
RAID 1 (raid1
, 1
,
mirror
) - kopie lustrzane, dyski
są w dw�ch jednakowych kopiach, w przypadku awarii
jednego drugi przejmuje role pierwszego. Wydajność
tak jak pojedynczy dysk, duże bezpieczeństwo, wadą
jest duża strata pojemności (n/2 - n-liczba dysk�w w
macierzy)
RAID 4 (raid4
, 4
)
- dane są rozpraszane na kolejnych
dyskach a na ostatnim zapisywane są dane parzystości,
zwiększone bezpieczeństwo danych przy zachowaniu
dużej pojemności (n-1). Wymaga przynajmniej trzech
dysk�w, wydajność ograniczona przez dysk parzystości
RAID 5 (raid5
, 5
)
- rozpraszane są zar�wno dane jak i informacje o
parzystości na wszystkich dyskach, dzięki czemu
wydajność jest wyższa niż w RAID 4; pojemność n-1,
wymaga przynajmniej trzech dysk�w.
RAID 6 (raid6
, 6
)
- jest to rzadko stosowana, rozbudowana macierz
typu 5. Jedyną r�żnicą jest dwukrotne zapisanie sum
kontrolnych. Dzięki temu macierz może bez utraty
danych przetrwać awarię dw�ch dysk�w. Wymaga
minimum czterech dysk�w, jej pojemność to n-2.
Tryb liniowy (linear
) - czyli
połączenie dw�ch
dysk�w w jeden w ten spos�b że koniec pierwszego
jest początkiem drugiego, nie zapewnia absolutnie
żadnego bezpieczeństwa a wręcz obniża odporność na
awarie dysk�w.
Najczęściej stosuje się macierze RAID1 i RAID5, do specyficznych zastosowań używa się RAID0, pozostałe są rzadziej spotykane.
Instalujemy następujące pakiety:
# poldek -i mdadm
A jeśli zaplanowaliśmy umieszczenie głï¿½wnego systemu plik�w (/) na macierzy, musimy dodatkowo zainstalować pakiet mdadm-initrd:
# poldek -i mdadm-initrd
oraz możemy opcjonalnie dla dysk�w ATA przy korzystaniu z device-mapera zainstalować dodatkowo:
# poldek -i dmraid
Dosyć popularnym rozwiązaniem jest utworzenie identycznego zestawu partycji na każdym z dysk�w, a następnie spięcie odpowiednich partycji w macierze. Aby ułatwić sobie zadanie możemy najpierw podzielić jeden z dysk�w, a na następne urządzenia skopiować układ tablicy partycji np.:
# sfdisk -d /dev/sdc | sfdisk /dev/sdd
jak się łatwo domyśleć w powyższym przykładzie kopiujemy z dysku
/dev/sdc
na /dev/sdd
.
Garść porad:
Kernel może być ładowany wyłącznie z macierzy RAID 1, jeśli więc będziemy
chcieli używać np. RAID5 na głï¿½wnym systemie plik�w to musimy umieścić
gałąź /boot
na osobnej, niewielkiej macierzy RAID1.
Opis konfiguracji bootloadera do obsługi macierzy znajduje się w dalszej
części artykułu.
Należy oprzeć się pokusie umieszczenia obszaru wymiany (swap) na RAID0, gdyż awaria jednego z dysk�w może doprowadzić do załamania systemu.
Urządzenia, z kt�rych składamy macierz powinny być r�wnej wielkości, w przeciwnym razie wielkość macierzy będzie wyznaczana przez najmniejszą partycję.
Więcej informacji o podziale na partycje i planowaniu miejsca na dysku zdobędziemy w „Podział na partycje”.
Przystępujemy do zakładania macierzy na partycjach za pomocą polecenia mdadm:
mdadm -C {$dev_RAID} --level={$rodzaj} --raid-devices={$ilość_urzadzen} {$urzadzenia}
-C, --create
- utw�rz nową macierz.
-l, --level
- ustaw poziom RAID np: linear,
raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6,
6; Jak możemy zauważyć niekt�re opcje są synonimami.
Przy opcji Building pierwsze mogą być użyte: raid0, raid1, raid4, raid5.
-n, --raid-devices
- liczba aktywnych
urządzeń (dysk�w) w macierzy
-x, --spare-devices
- liczba zapasowych (eXtra)
urządzeń w tworzonej macierzy. Zapasowe dyski można dodawać i
usuwać także p�źniej.
-v --verbose
- tryb "gadatliwy"
--auto=yes
- automatyczne tworzenie urządzeń w
/dev/
przez mdadm (stosowane zwykle przy
użyciu UDEVa), więcej w Poradach na końcu rozdziału.
Przykłady tworzenia macierzy r�żnego typu:
RAID0 na dw�ch partycjach -
/dev/sda1
i
/dev/sdb1
jako
/dev/md0
# mdadm -C -v /dev/md0 --level=0 -n 2 /dev/sda1 /dev/sdb1
RAID1 na dw�ch partycjach - /dev/sdc1
i /dev/sdd1
jako /dev/md1
# mdadm -C -v /dev/md1 --level=1 -n 2 /dev/sdc1 /dev/sdd1
RAID5 na 4 partycjach w tym jedna jako zapasowa (hot spare), jeśli nie podasz ile ma być zapasowych partycji domyślnie 1 zostanie zarezerwowana na zapasową
# mdadm -C -v /dev/md2 --level=5 -n 4 --spare-devices=1 \ /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3
Po utworzeniu macierzy postępujemy z nią dalej jak z partycją,
czyli zakładamy system plik�w i odwołujemy się do niej np: jako
/dev/md0
np.:
# mkfs.xfs /dev/md0
Teraz możemy dokonać odpowiednich wpis�w w pliku
/etc/fstab
.
Aby macierz była automatycznie składana przy starcie systemu
musimy dodać odpowiednie wpisy do pliku
/etc/mdadm.conf
. Na początek dodajemy wiersz, w kt�rym
wymieniamy listę urządzeń z kt�rych budowane są macierze (można używać
wyrażeń regularnych):
DEVICE /dev/sd[abcd][123]
Następnie dodajemy definicje macierzy, możemy to zrobić automatem:
# mdadm --detail --scan >> /etc/mdadm.conf:
lub samodzielnie, poprzez dodanie następujących wierszy:
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1 ARRAY /dev/md1 devices=/dev/sdc1,/dev/sdd1 ARRAY /dev/md2 devices=/dev/sda3,/dev/sdb3,/dev/sdc3,/dev/sdd3
Macierze (inne niż rootfs) są składane przez
rc-skrypt /etc/rc.d/rc.sysinit
,
na podstawie powyższych wpis�w konfiguracyjnych, zatem po restarcie
maszyny będziemy już z nich korzystać.
Jeśli mamy macierz z głï¿½wnym systemem plik�w, to musimy
jeszcze przygotować initrd i bootloader (poniżej).
Przy ręcznym składaniu macierzy przydane może być polecenie skanujące urządzenia blokowe w poszukiwaniu istniejących macierzy:
# mdadm --examine --scan -v
Jeśli głï¿½wny system plik�w ma być na macierzy to musimy wygenerować obraz initrd z modułami, kt�re pozwolą na złożenie macierzy. Na początek musimy mieć zainstalowany pakiet mdadm-initrd. Generowanie takiego initrd przebiega dokładnie tak samo jak dla zwykłego urządzenia blokowego, musimy się tylko upewnić, że do obrazu trafiły dodatkowo moduły: md-mod, odpowiednio raid0, raid1... i ewentualnie xor. Generowanie obrazu initrd szczeg�łowo zostało opisane w „Initrd”.
Jeśli na raidzie ma się znaleźć głï¿½wny system plik�w (bez
/boot
), to konfiguracja jest identyczna
jak w przypadku klasycznych urządzeń blokowych.
Jeśli gałąź /boot
ma się znaleźć na macierzy (wyłącznie RAID1) to powinniśmy
zainstalować bootloader na każdym z dysk�w wchodzących w
skład macierzy, dzięki czemu będziemy mogli
uruchomić system mimo awarii jednego z dysk�w.
RAID0 i RAID2-5 nie są obsługiwane przez
LILO\GRUB™
W LILO™ w pliku /etc/lilo.conf
należy podać odpowiednie
urządzenie dla opcji root
i boot
:
boot=/dev/md0 raid-extra-boot=mbr-only image=/boot/vmlinuz label=pld root=/dev/md0 initrd=/boot/initrd
Opcja w opcji raid-extra-boot
wskazuje urządzenia
na kt�rych ma zostać zainstalowany bootloader (urządzenia wchodzące
w skład /dev/md0
). Po zmodyfikowaniu
konfiguracji musimy zaktualizować bootloader
poleceniem lilo.
Jeśli używamy Grub-a™ wywołujemy z powłoki:
# grub grub>
następnie szukamy gdzie znajdują sie pliki bootloadera,
grub>find /boot/grub/stage1
jeśli
/boot
jest oddzielną partycją to
/grub/stage1
i otrzymujemy wynik, np:
(hd0,0) (hd1,0) Now you want to make sure that grub gets installed into the master boot record of your additional raid drives so that if id0 is gone then the next drive has a mbr loaded with grub ready to go. Systems will automatically go in drive order for both ide and scsi and use the first mbr and active partitions it finds so you can have multiple drives that have mbr's as well as active partitions and it won't affect your system booting at all. So using what was shown with the find above and already knowing that hd0 already has grub in mbr, we then run: Grub>device (hd0)/dev/sda (/dev/hda for ide) Grub>root (hd0,0) Grub>setup (hd0)
i to samo dla dysku drugiego czyli:
Grub>device (hd1) /dev/sdb (/dev/hdb for ide) Grub>root (hd1,0) Grub>setup (hd1) Grub will then spit out all the commands it runs in the background of setup and will end with a successful embed command and then install command and end with .. succeeded on both of these commands and then Done returning to the grub> prompt. Notice that we made the second drive device 0. Why is that you ask? Because device 0 is going to be the one with mbr on the drive so passing these commands to grub temporarily puts the 2nd mirror drive as 0 and will put a bootable mbr on the drive and when you quit grub you still have the original mbr on sda and will still boot to it till it is missing from the system. You have then just succeeded in installing grub to the mbr of your other mirrored drive and marked the boot partition on it active as well. This will insure that if id0 fails that you can still boot to the os with id0 pulled and not have to have an emergency boot floppy.
Bootloadery szczeg�łowo opisaliśmy w „Wstęp”.
Skr�cone informacje o macierzy:
# mdadm --query /dev/md0
Poniżej podałem przykłady dw�ch poleceń, kt�re pozwalają odczytać dokładne dane macierzy i jej stan:
# mdadm --detail /dev/md0
# cat /proc/mdstat
Mając dwie macierze RAID1 np: /dev/md0
i
/dev/md1
, możemy utworzyć macierz RAID10 (strip dw�ch mirror�w)
jako /dev/md2
# mdadm -C -v /dev/md2 --level=1 -n 2 /dev/md0 /dev/md1
analogicznie RAID01 tworzymy mając dwie macierze RAID0.
Aby samemu złożyć macierz (z np: PLD Live CD™) wydajemy polecenie, kt�re może wyglądać następująco:
# mdadm -A /dev/md0 /dev/hda /dev/hdb
Jeśli macierz jest składana w trakcie startu systemu
to automatycznie tworzony jest plik urządzenia /dev/mdX
.
W trakcie tworzenia macierzy, lub gdy macierz nie startuje wraz z systemem,
możemy skorzystać z gotowych urządzeń w /dev
(pakiet dev)
lub samemu je utworzyć (pakiet udev).
Udev nie tworzy urządzeń /dev/md0
,
więc musimy w tym celu użyć parametru --auto=yes
w wywołaniach programu mdadm, lub utworzyć je poleceniem
mknod. Urządzeniu nadajemy
major
o wartości 9 i kolejny, niepowtarzalny
numer minor
.
Nie musimy się martwić o moduły, są on ładowane automatycznie przez mdadm lub
initrd. Więcej o UDEV w „Udev - dynamiczna obsługa sprzętu”.
Wraz z pakietem mdadm dostarczany jest rc-skrypt uruchamiający mdadm w trybie monitorowania (jako demona). Więcej szczeg�łï¿½w w dokumentacji programu mdadm.
LVM™ (Logical Volume Management) to system zaawansowanego zarządzania przestrzenią dyskową, kt�ry jest o wiele bardziej elastyczny, niż klasyczne partycje dyskowe. To wiąże się z bardziej złożoną konstrukcją, kt�ra składa się z następujących struktur:
PV
(physical volumes) - fizyczne woluminy: są bezpośrednio
związane z partycjami dyskowymi
(np. /dev/hda1
, /dev/sdb3
).
VG
(volume groups) - grupy wolumin�w: składają się z
co najmniej jednego PV, ich wielkość to suma objętości
wszystkich PV należących do danej grupy.
Uzyskane miejsce dyskowe może być dowolnie dysponowane
pomiędzy kolejne LV.
LV
(logical volumes) - woluminy logiczne: są
obszarami użytecznymi dla systemu (podobnie jak partycje dyskowe).
LV są obszarami wydzielonymi z VG, zatem suma wielkości wolumin�w
nie może zatem przekraczać objętości VG, do kt�rego należą.
Schemat LVM-u, kt�ry zostanie użyty jako przykład w tym rozdziale:
PV1 PV2 \ / VG / | \ LV1 LV2 LV3
Musimy wyznaczyć urządzenia blokowe kt�rych chcemy
użyć do stworzenia struktur PV.
Jeśli głï¿½wny system plik�w ma być umieszczony na
woluminie logicznym to musimy przeznaczyć małą partycję
dla gałęzi /boot
, gdyż bootloadery
lilo™ i grub™ nie
potrafią czytać danych z wolumin�w. Szczeg�łowy opis
dzielenia dysk�w na partycje zamieściliśmy w „Podział na partycje”.
Załï¿½żmy, że mamy dwa dyski twarde po 250GB (/dev/sda
i /dev/sdb
),
kt�rych powierzchnię chcemy połączyć i rozdysponować
pod system operacyjny. Jako, że rootfs także będzie na woluminie
to rozplanowanie miejsca może wyglądać następująco:
/dev/sda1
: mała partycja na /boot o pojemności 50MB
/dev/sda2
: druga partycja dla wolumin�w (reszta dysku)
/dev/sdb
: cały dysk dla wolumin�w
VG będzie miało rozmiar ~500GB miejsca, z czego 400GB przydzielimy do użytku, a resztę pozostawimy dla przyszłych, nieokreślonych na razie zastosowań. Miejsce na VG rozdysponujemy następująco:
swap: 5GB
/ (rootFS): 25GB
/home: 370GB
Omawiamy implementację LVM2™, zatem
instalujemy pakiet lvm2
, jeśli LVM ma być użyty
jako głï¿½wny system plik�w to potrzebujemy
jeszcze pakiet lvm2-initrd
do wygenerowania odpowiedniego obrazu initrd.
Ładujemy moduł device mappera:
# modprobe dm-mod
Dzielimy dysk /dev/sda na dwie opisane powyżej partycje, a następnie wskazujemy urządzenia Physical Volumes:
# pvcreate /dev/sda2 /dev/sdb
tworzymy Volume Group o nazwie "vgsys" z wskazanych powyżej PV:
# vgcreate vgsys /dev/sda2 /dev/sdb
W powstałej VG tworzymy woluminy o podanych pojemnościach (-L) i dowolnych nazwach (-n):
# lvcreate -L 5GB -n swap vgsys # lvcreate -L 25GB -n rootfs vgsys # lvcreate -L 370GB -n home vgsys
na naszym VG pozostaje 100GB wolnego miejsca, kt�re
możemy rozdysponować w przyszłości (przykład dalszej części
rozdziału). Rzucającą się w oczy cechą wolumin�w logicznych jest
możliwość swobodnego nadawania im nazw, co znacznie ułatwia
utrzymanie porządku. Do utworzonych
powyżej wolumin�w odwołujemy się za pomocą utworzonych
przed chwilą urządzeń:
/dev/vgsys/swap
,
/dev/vgsys/rootfs
i
/dev/vgsys/home
.
Woluminy są już gotowe do pracy, musimy jeszcze tylko
utworzyć na nich systemy plik�w, co robimy jak w przypadku
tradycyjnych partycji np.:
# mkswap /dev/vgsys/swap # mkfs.xfs /dev/vgsys/rootfs # mkfs.xfs /dev/vgsys/home
partycja dla gałęzi /boot:
# mkfs.ext2 /dev/sda1
Teraz montujemy woluminy w klasyczny spos�b i
jeśli wszystko przebiegło bez błęd�w
dokonujemy odpowiednich modyfikacji w
/etc/fstab
.
Woluminy są automatycznie aktywowane przez rc-skrypt
/etc/rc.d/rc.sysinit
lub
initrd
. Moduł device mappera
r�wnież jest ładowany automatycznie.
Jeśli chcemy umieścić głï¿½wny system plik�w na LV,
to musimy jeszcze wygenerować nowy obraz initrd, z
obsługą LVM. Zostało to szczeg�łowo przedstawione w
„Initrd”.
W konfiguracji bootloadera ustawiamy opcję 'root=' na
/dev/vgsys/rootfs
.
Teraz instalujemy system, instalujemy bootloader i
możemy zrestartować maszynę.
Gdy zajdzie potrzeba "ręcznego" aktywowania wolumin�w (np. spod RescueCD), to na początek musimy się upewnić, że jest załadowany moduł dm-mod. Kernel nie zgłasza komunikat�w o odnalezieniu wolumin�w, tak jak ma to miejsce z partycjami, należy je odszukać za pomocą odpowiednich narzędzi: lvmdiskscan i lvscan. Jeśli odnaleźliśmy żądane struktury, to możemy je aktywować:
# vgchange -a y
Skr�cone informacje o każdym z rodzaju komponent�w (PV/VG/LV) wyświetlimy za pomocą program�w pvs, vgs, lvs. Więcej informacji uzyskamy za pomocą program�w: pvdisplay, vgdisplay, lvdisplay.
Do niekt�rych operacji z woluminami będziemy musieli je odmontować i deaktywować. Aby deaktywować wszystkie woluminy użyjemy polecenia
# vgchange -a n
aby wszystkie aktywować wywołujemy:
# vgchange -a y
Teraz przedstawimy potęgę LVM-a: pokażemy jak powiększyć wolumin, gdy dochodzimy
do wniosku, że przeznaczonego miejsca jest za mało.
Załï¿½żmy, że mamy woluminy utworzone zgodnie z wcześniejszymi przykładami
i chcemy przeznaczyć całą dostępną wolną przestrzeń na naszym VG (100GB)
dla /dev/vgsys/homes
:
# lvextend -l 100%VG /dev/vgsys/home
Teraz, kiedy wolumin jest powiększony, musimy rozszerzyć system plik�w, w naszych przykładach jest to XFS, zatem musimy podmontować wolumin, a następnie:
# xfs_growfs /home
Operacja trwa kr�tko i nie powoduje utraty danych, jednak jak przypadku każdych operacji dyskowych, powinniśmy wcześniej wykonać kopię zapasową. Każdy system plik�w posiada własne narzędzia do zmiany rozmiaru systemu plik�w, szczeg�ły w ich dokumentacji.
Awarie dysk�w często są bolesne, a nierzadko dosyć kosztowne. Istnieje wiele narzędzi do odzyskiwania danych, jednak nigdy nie gwarantują sukcesu. Dlatego warto dokonywać regularnie kopie zapasowe danych.
Uszkodzenia fizyczne sprawdzamy programem badblocks z pakietu e2fsprogs, uruchamiamy go poleceniem:
# badblocks -s /dev/sda
Program wypisze listę uszkodzonych blok�w
Nazwy program�w, podobnie jak programy do tworzenia system�w plik�w, są ujednolicone (poza XFS). Zaczynają się od "fsck.":
fsck.ext2 fsck.reiserfs fsck.vfat fsck.jfs
do naprawy XFS-a użyjemy programu xfs_repair. Programy te r�żnią się nieco obsługą, dlatego przed użyciem każdego z nich należy zapoznać się z podręcznikiem systemowym (man/info), tak wygląda przykładowe wywołanie testu systemu plik�w XFS:
# xfs_repair /dev/sda2
Programy te nie pozwolą na sprawdzanie na systemie plik�w podmontowanym w trybie do odczytu i zapisu. Powinniśmy w og�le nie montować takiego systemu plik�w, a przynajmniej podmontować w trybie tylko do odczytu.
Nieco bardziej złożone jest sprawdzanie głï¿½wnego systemu
plik�w jeśli uruchomiliśmy system w trybie jednego
użytkownika. Problemem jest konieczność przemontowania
systemu plik�w w tryb
ro
. Niekt�re programy mogą sprawdzać
w pliku /etc/mtab
czy system plik�w
jest w trybie tylko do odczytu. Może to dać
nieprawidłowe wyniki, gdyż zazwyczaj gałąź
/etc
leży na głï¿½wnym systemie
plik�w i w pliku tym nie nastąpią żadne zmiany po
takim przemontowaniu. Można to obejść wcześniej
modyfikując wpis w /etc/mtab
,
kiedy już to zrobimy wykonujemy polecenie:
# mount / -o ro,remount
Naprawienie systemu plik�w nie gwarantuje, że nie zostały uszkodzone żadne pliki. Jeśli na naprawianym systemie plik�w były jakieś dane systemowe, to powinniśmy wykonać kontrolę ich integralności, opisaną dokładnie w „Zaawansowane operacje”.
Spis treści
W tym rozdziale znajdziesz informacje dotyczące administracji systemem PLD
W tym rozdziale pokażemy co można zrobić w wypadku, jeśli nastąpiła awaria systemu, uniemożliwiająca normalne uruchomienie. Musimy uzyskać dostęp do urządzeń lub plik�w na dysku twardym, możemy w tym celu spr�bować uruchomić system na niskim poziomie pracy, a jeśli to się nie powiedzie, to użyć operacji chroota z innego systemu np. dystrybucji typu live.
Możemy uruchomić system z pominięciem wielu czynności wykonywanych przez skrypty startowe. Operacja polega na przekazaniu do kernela odpowiednich parametr�w, kt�re wymuszą użycie przez proces init specjalnie przygotowanego zestawu rc-skrypt�w.
Interesuje nas poziom 1
lub
single
(tryb jednego użytkownika),
tak też nazywają się parametry, kt�re musimy przekazać
do kernela. Parametry przekazujemy do jądra za pośrednictwem
bootloadera, w trakcie uruchomienia systemu np.:
grub append> root=/dev/sda2 single
Szczeg�łowy opis bootloadera i przekazywanie parametr�w kernela opisano w „Wstęp”. Poziomy pracy zostały szerzej om�wione w „Zmiana poziomu pracy systemu”
Jako dystrybucję Live najlepiej wybrać RescueCD lub PLD Live. Oba projekty są dobrze przygotowane do pracy z naszą dystrybucją, gdyż zawierają program rpm™ i poldek™.
Na początek musimy zadbać o to, aby system m�gł się uruchomić z płyty CD, uzyskamy to modyfikując odpowiednią opcję BIOS-u komputera. Teraz uruchamiamy komputer z RescueCD umieszczonym w napędzie CD-ROM i czekamy aż system się uruchomi.
Aby dokonać napraw musi zostać załadowany moduł kontrolera masowego. Większość wsp�łczesnych dystrybucji typu live sama wykrywa sprzęt, jeśli jednak to się nie powiedzie lub używamy starej wersji RescueCD to musimy sami załadować moduł. Jeśli potrzebujemy obsłużyć kontroler typu IDE musimy załadować moduł ide-disk
# modprobe ide-disk
Jeżeli naprawiany system jest oparty na macierzach programowych to musimy je najpierw złożyć np.:
# mdadm -A --auto=yes /dev/md0 /dev/hda /dev/hdb
Więcej szczeg�łï¿½w dotyczących programowych macierzy znajdziemy w „RAID programowy”.
Teraz kiedy mamy załadowane odpowiednie moduły i dostęp do
plik�w urządzeń (w katalogu /dev
) możemy
wykonać liczne operacje diagnostyczne i naprawcze (opisane dalej).
Do naprawy systemu plik�w konieczny jest tylko dostęp
do plik�w urządzeń z katalogu /dev
.
Aby sprawdzić i naprawić system plik�w XFS wydajemy
polecenie:
# xfs_repair /dev/sda2
Naprawy system�w plik�w została szczeg�łowo om�wiona w „Naprawa”.
W przypadku podniesienia systemu w trybie single mamy swobodny dostęp do plik�w konfiguracji, w przeciwnym wypadku musimy najpierw podmontować odpowiednią partycję aby uzyskać dostęp do plik�w. W tym celu tworzymy nowy katalog, a następnie montujemy do niego właściwe urządzenie np.:
# mkdir -p /mnt/rootfs # mount /dev/hda3 /mnt/rootfs
Jeżeli masz więcej partycji, na kt�rych znajdują się
pliki systemowe (np. /boot
), także
je podmontuj w odpowiednich katalogach np.:
# mount /dev/hda1 /mnt/rootfs/boot
mamy teraz nieograniczony dostęp do plik�w uszkodzonego systemu.
Jeśli uruchomiliśmy system z RescueCD i mamy podmontowane systemy plik�w to wielu wypadkach wygodniejsze, a czasami nawet konieczne będzie wykonanie tzw. chroot-a.. Polega to na podmianie głï¿½wnego systemu plik�w używanego przez dany program na głï¿½wny system plik�w ratowanego systemu operacyjnego. Będzie to konieczne przy problemach z jądrem, bootloaderem czy initrd. Aby wykonać tą operację należy wykonać komendę:
# chroot /mnt/rootfs
To polecenie uruchomi powłokę
/bin/sh
w taki spos�b, że wszystkie
działania z jej poziomu będą odbywały się przeźroczyście
na podmontowanym systemie plik�w.
Zanim jednak zabierzemy się do pracy proszę o zapoznanie
się z uwagami na końcu rozdziału.
Jeśli używamy powłoki korzystającej z chroot-a, wystarczy
że zakończymy jej pracę wydając polecenie
exit lub skr�tem klawiszowym
ctrl+d. Na koniec odmontowujemy
systemy plik�w jeśli takie są i restartujemy komputer.
Niekt�re operacje w środowisku chroot wymagają (np. tworzenie initrd)
podmontowania pseudo systemu plik�w /proc
:
# mount /proc /mnt/rootfs/proc -o bind
Użytkownicy udeva powinni pamiętać, że wiele operacji w podmontowanym środowisku wymagają istnienia kompletu plik�w urządzeń:
# mount /dev /mnt/rootfs/dev -o bind
Udev dokładniej opisano w „Udev - dynamiczna obsługa sprzętu”.
Może się zdarzyć, że poldek się nie uruchamia w chroocie. Sposobem na obejście tego jest uruchomienie go z flagą -r , np:
# poldek -r /mnt/rootfs
Dużą zaletą RescueCD jest to, że automatycznie "podnosi" interfejs sieciowy z obsługą DHCP oraz serwer SSH. Pozwala to na zdalną naprawę, wystarczy, że ktoś umieści płytę z dystrybucją w napędzie i uruchomi komputer. My zalogujemy się na odpowiedni adres za pośrednictwem SSH; login: root, hasło: pld.
W systemie dostępne są specjalne skrypty, napisane w języku powłoki, zwane "skryptami startowymi" lub "rc-skryptami". W PLD™ zastosowano skrypty startowe typu System-V, dzięki temu praca administratora jest znacząco zautomatyzowana.
Za pomocą rc-skrypt�w pomocą możemy uruchamiać lub zatrzymywać podsystemy i usługi, kontrolować ich działanie oraz wiele innych. Można je podzielić na dwie zasadnicze grupy:
Skrypty podsystem�w - specjalnych zadań mających za zadanie dokonać konfiguracji systemu operacyjnego. Do tego typu zadań należą: konfigurowanie sieci, ładowanie modułï¿½w, prace porządkowe i wiele innych. Te skrypty są integralną częścią systemu (pakiet rc-scripts) i zapewne są już u nas zainstalowane.
Skrypty zarządzania usługami - zarządzają
programami działające w tle (demonami) np.:
serwerem WWW, serwerem NFS.
Skrypty te są instalowane automatycznie razem z
pakietami usług. Wyjątek stanowią usługi z
wydzielonymi w tym celu pakietami, rozpoznamy je
po nazwie *-init
i
*-standalone
. Więcej o
nazewnictwie pakiet�w przedstawiono w
„Cechy pakiet�w w PLD”.
Katalog /etc/rc.d
przechowuje
konfigurację uruchamiania usług i podsystem�w, poniżej
pokr�tce om�wiono składniki systemu rc-skrypt�w:
/etc/rc.d/init.d
- katalog z skryptami
startowymi usług
/etc/rc.d/rc{$NR}.d
- katalogi
tak oznaczone zawierają łącza symboliczne do skrypt�w
zawartych w katalogu init.d
.
Wartość {$NR} jest liczbą wskazującą poziom pracy
(run level), dla kt�rego uruchamiana jest zawartość
danego katalogu.
/etc/rc.d/rc
- skrypt
uruchamiający i zatrzymujący usługi
/etc/rc.d/rc.init
- skrypt
ustawiający opcje narodowe (język, waluta) pobiera
konfigurację z pliku /etc/sysconfig/i18n
/etc/rc.d/rc.local
- uruchamiany na
samym końcu wszystkich skrypt�w, użytkownicy mogą
dodawać tu swoje wpisy jeśli nie chcą używać
init.d
i
rc{$NR}.d
/etc/rc.d/rc.serial
- konfiguracja
port�w szeregowych
rc.sysinit
- głï¿½wny
skrypt startowy uruchamiany jednokrotnie (w trakcie
startu)
/etc/rc.d/rc.modules
- załadowanie
modułï¿½w z /etc/modules
/etc/rc.d/rc.shutdown
- głï¿½wny
skrypt uruchamiany przy zatrzymaniu systemu lub restarcie.
/etc/profile
- plik startowy przy
pomocy kt�rego są ustawiane głï¿½wnie zmienne systemowe
Usługami/podsystemami zarządzamy ręcznie, wykonujemy to za
pomocą uruchomienia odpowiedniego skryptu z katalogu
/etc/rc.d/init.d/
. Dodatkowo podajemy
odpowiednim parametr określający akcję, kt�rą skrypt ma
wykonać. Uruchomienie bez parametru podaje listę możliwych
dla niego akcji, dla przykładu wyświetlimy listę dostępnych
parametr�w podsystemu sieci:
# /etc/rc.d/init.d/network Usage: /etc/rc.d/init.d/network {start|stop|restart|status}
Poniżej przedstawiono wyłączenie obsługi sieci, oraz ponowne jej uruchomienie. W ten spos�b zmusza się usługę lub podsystem do ponownego odczytania swojej konfiguracji. W tym wypadku nastąpi skonfigurowanie na nowo interfejs�w, zaktualizowanie ustawień, tablic routingu itd...
# /etc/rc.d/init.d/network stop Shutting down interface eth0.......................................[ DONE ] Shutting down interface eth1.......................................[ DONE ] # /etc/rc.d/init.d/network start Setting network parameters.........................................[ DONE ] Bringing up interface eth0.........................................[ DONE ] Bringing up interface eth1.........................................[ DONE ]
Lista dostępnych parametr�w będzie się zmieniać w zależności od usługi, w poniższej tabeli przedstawiono znacznie tych najczęściej spotykanych:
Tabela 13.1. Popularne akcje skrypt�w startowych
Parametr | Akcja |
---|---|
start | Uruchamia podsystem/usługę |
stop | Zatrzymuje podsystem/usługę |
reload, force-reload | Przeładowanie usługi poprzez wysłanie sygnału (zwykle HUP) do demona, często oba podane parametry mają takie same działanie. Operacja używana do ponownego odczytania konfiguracji demona. |
restart |
Pełny restart usługi (zazwyczaj jest to
kolejne wywołanie skryptu z parametrem
start i
stop ). Operacja używana
do ponownego odczytania konfiguracji demona.
|
status | Wyświetla stan podsystemu/usługi, dzięki temu możemy łatwo określić czy czy jest uruchomiony. W niekt�rych wypadkach podawane są dodatkowe informacje. |
Niekt�re usługi posiadają inne, użyteczne tylko dla nich
parametry. Przykładem może być argument
init
, kt�ry zazwyczaj musi być użyty przed
pierwszym uruchomieniem usługi.
Nieco wygodniej zarządza się skryptami przy pomocy programu service. Aby wykonać za jego pomocą taki sam efekt jak powyżej musimy go wywołać z dwoma parametrami, pierwszy to nazwa skryptu, drugi zaś to wybrana akcja:
# service network stop # service network start
Domyślnie po zainstalowaniu nowego podsystemu lub usługi, dodawane są potrzebne skrypty startowe. Dzięki temu nowo zainstalowane oprogramowanie uruchamia się automatycznie w trakcie startu systemu lub przy zmianie poziomu pracy. Aby uruchomić dopiero co zainstalowany podsystem lub usługę musimy wykonać to "ręcznie".
Zarządzanie skryptami startowymi w trakcie instalacji/aktualizacji pakiet�w opisano w „Cechy pakiet�w w PLD”
Jeśli zechcemy utworzyć własny rc-skrypt to z
pomocą przyjdzie nam szablon z pliku
/usr/share/doc/rc-scripts{$wersja}/template.init.gz
Skrypt�w startowych typu System-V nie konfigurujemy
bezpośrednio, w PLD służy ku temu zestaw plik�w
konfiguracyjnych umieszczony w katalogu
/etc/sysconfig
. Znajdziemy w nim
zar�wno pliki konfiguracji systemu jak i konfiguracji
zainstalowanych usług.
Większość tych plik�w jest bezpośrednio załączana do
kodu rc-skrypt�w, zatem ich składnia musi odpowiadać
składni powłoki wskazanej w skrypcie (w PLD jest
to /bin/sh
). Dotyczy to
także plik�w konfiguracji interfejs�w sieciowych
w katalogu /etc/sysconfig/interfaces
.
W plikach tych występują jedynie konstrukcje
przypisania zamiennych oraz ewentualne komentarze.
Możemy co prawda umieszczać tam dowolne komendy
wiersza poleceń, jednak należy być przy tym
niezwykle ostrożnym i robić to tylko w uzasadnionych
przypadkach.
Jest jednak kilka plik�w konfiguracji, kt�re są
traktowane inaczej - mają własną składnię, przykładem
tego rozwiązania są np. pliki
/etc/sysconfig/static-*
, nimi
jednak nie będziemy się zajmować w tym rozdziale.
Opcje w plikach konfiguracji można podzielić na dwie grupy: og�lnego stosowania i specyficzne dla rc-skryptu. Pierwsza z nich to uniwersalne opcje, z kt�rymi możemy się zetknąć w wielu w innych plikach konfiguracji np.:
SERVICE_RUN_NICE_LEVEL
- priorytet proces�w usługi (liczba nice)
RPM_SKIP_AUTO_RESTART
-
m�wi programowi rpm czy
usługa ma być automatycznie restartowana po aktualizacji,
więcej o tej opcji w „Cechy pakiet�w w PLD”
Druga grupa to opcje występujące tylko w pliku konfiguracji konkretnego rc-skryptu - zwykle są związane z argumentami pliku wykonywalnego usługi, dlatego należy uważnie czytać komentarze plik�w konfiguracji i w razie potrzeby podręczniki systemowe usług.
Pomiędzy niekt�rymi demonami i podsystemami istnieją ścisłe powiązania, jako przykład można wymienić usługi sieciowe i podsystem sieci. Usługa jest zależna od działania sieci i pr�ba wyłączenia najpierw tej drugiej może niekiedy zaowocować problemami, gdyż PLD nie dba o to za nas. Musimy samemu się zatroszczyć o wyłączanie usług we właściwej kolejności.
Pewną wskaz�wką będą numery przy nazwach łączy symbolicznych
w katalogach /etc/rc.d/rc{$nr}.d
(przy literze S). Numery te określają kolejność ładowania
usług w trakcie startu systemu.
W PLD™ zastosowano klasyczny, oparty na rc-skryptach typu System-V system poziom�w pracy. Poziomami na kt�rych pracują usługi można zarządzać ręcznie, jest to jednak niezalecany spos�b, lepszym pomysłem jest użycie programu chkconfig. Aby wyświetlić listę usług uruchamianych przy w danych poziomach pracy wydajemy polecenie:
# chkconfig --list crond 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. cups 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. sshd 0:wył. 1:wył. 2:wył. 3:wł. 4:wł. 5:wł. 6:wył. gdm 0:wył. 1:wył. 2:wył. 3:wył. 4:wył. 5:wł. 6:wył. network 0:wył. 1:wył. 2:wł. 3:wł. 4:wł. 5:wł. 6:wył. sshd 0:nie 1:nie 2:nie 3:nie 4:tak 5:nie 6:nie
W PLD najczęściej korzysta się z tryb�w 3 i 5 rzadziej z: 1, 2 i 4, nigdy nie ustawiamy trybu 0 (restart) i 6 (wyłączenie). Na powyższym przykładzie podsystem network jest uruchamiana dla poziom�w: 2,3,4,5, zaś gdm tylko dla trybu 5. Aby włączyć/wyłączyć uruchamianie jakiejś usługi wywołujemy program następująco: chkconfig {$usługa} on/off. Wyłączenie usługi sshd™ (domyślnie jest włączona):
# chkconfig sshd off
Włączenie analogicznie:
# chkconfig sshd on
Poziomy dla kt�rych usługa ma być włączona/wyłączona jest wskazywane przez specjalny wpis w rc-skrypcie, możemy go odczytać następująco:
$ grep chkconfig /etc/init.d/sshd # chkconfig: 345 55 45
pierwszy ciąg cyfr w wierszu to lista poziom�w, kt�rych dotyczy operacja włączenia/wyłączenia rc-skryptu. W razie potrzeby możemy wymusić operację dla konkretnego numeru poziomu pracy np:
# chkconfig --level 5 sshd off
Dodawanie lub usuwanie usług w poziomach pracy nie powoduje ich uruchomienia lub zatrzymywania, aby to zrobić musimy wykonać to ręcznie lub zmienić tryb pracy. Poziomy pracy zostały szerzej om�wione w „Zmiana poziomu pracy systemu”.
PLD jest systemem uniksowym, a więc obsługuje tzw. poziomy pracy (ang. run levels). Poziom pracy jest to specjalna konfiguracja systemu, kt�ra pozwala zaistnieć tylko wytypowanym usługom bądź podsystemom. Mamy sporo swobody w wyborze usług pracujących bądź wyłączonych w danym poziomie pracy, opis jak nimi zarządzać znajdziemy w „Zarządzanie podsystemami i usługami”.
Tabela 13.2. Dostępne poziomy pracy
Poziom | Opis |
---|---|
1 | Konfiguracja z minimalną ilością uruchamianych podsystem�w. Nie ma obsługi sieci i nie zezwala na logowanie się innym użytkownikom. |
2 | Rzadko używany tryb wielu użytkownik�w. Uruchamiana jest obsługa sieci i większości usług opr�cz NFS. |
3 | Popularny tryb prac z dostępem wielu użytkownik�w i uruchomieniem wszystkich usług. Jest to typowy tryb dla maszyn obsługiwanych z konsoli tekstowej - np.: serwer�w. |
4 | Rzadko używany tryb wielu użytkownik�w. - praca w konsoli tekstowej |
5 | Typowy tryb z dostępem wielu użytkownik�w uruchamiający system X-Window™ (uruchamia demon GDM lub KDM). Poziom używany na stacjach roboczych z GUI. Więcej o sposobach uruchamiania X-Window w „X-Server”. |
single |
Tryb jednego użytkownika (ang. Single
user mode) - używany przez
administrator�w w sytuacjach awaryjnych.
Uruchamia mniej skrypt�w startowych niż
pierwszy poziom. Jego włączanie ma sens
tylko przez przekazanie do jądra parametru
single z poziomu
bootloadera.
|
Są jeszcze dwa tryby: tryb 0 i 6. Pierwszy jest używany w celu zatrzymania wszystkich usług i podsystem�w przed zamknięciem systemu, drugi zaś przed ponownym uruchomieniem systemu. Z pośr�d wymienionych poziom�w pracy najczęściej używa się poziomu 3 lub 5.
Poziomem pracy zarządza proces init. W celu określenia domyślnego poziomu
pracy, init odczytuje sw�j plik konfiguracji
(/etc/inittab
) podczas uruchomienia systemu. Po
uruchomieniu administrator może wymusić zmianę poziomu za pośrednictwem
programu telinit (link symboliczny do programu
init).
Należy pamiętać o tym, że telinit nie
dokonuje zmian w pliku /etc/inittab
, tak więc przy
ponownym uruchomieniu systemu wybrany zostanie ustawiony w nim poziom
pracy. Więcej informacji o pliku /etc/inittab
znajdziemy w „Kluczowe pliki”.
Za domyślny poziom pracy odpowiada opcja "initdefault
",
może ona przyjąć wartość od 1 do 5 np.:
id:3:initdefault:
Powyższy przykład włączy system na trzecim poziomie pracy, jest domyślna wartość w PLD.
W wyniku zmiany poziomu zostaną zatrzymane wszystkie wszystkie podsystemy wyłączone z pracy na tym poziomie, zaś te kt�re mają działać zostaną uruchomione. Przykładowo jeśli chcemy przejść do trybu 2 użyjemy polecenia:
# telinit 2
Jeśli system do tej pory pracował w trybie 3 to wyłączona zostanie usługa NFS.
Możemy r�wnież określić poziom uruchomienia przed startem systemu, dokonujemy tego za pomocą parametr�w przekazywanych za pośrednictwem bootloadera. Więcej szczeg�łï¿½w na ten temat znajdziemy w „Wstęp”.
W PLD zastosowano klasyczny dla system�w uniksowych system kont użytkownik�w, tak więc istnieje podział na dwa rodzaje kont: konta systemowe i konta użytkownik�w. Zarządzanie kontami systemowymi następuje automatycznie w trakcie instalowania bądż usuwania program�w, kt�re ich wymagają. Z tego powodu nie musimy się nimi zajmować, zajmiemy się więc tylko kontami zwykłych użytkownik�w.
W PLD domyślnie instalowanym pakietem do zarządzania kontami jest pakiet shadow. Możemy do jednak zastąpić zbiorem pwdutils, kt�ry zawiera narzędzia o większych możliwościach. Dzięki nim nie będzie już konieczności "ręcznego" edytowania plik�w systemowych, z tego względu opisane zostaną wyłączne narzędzia pwdutils.
Konto użytkownika dodajemy poleceniem useradd -m {$nazwa_użytkownika} np.:
# useradd -m jkowalski
Powyższe polecenie doda konto o identyfikatorze 'jkowalski' i
utworzy katalog domowy (parametr "-m"). Dodatkowo do stworzonego
katalogu skopiowana zostaje zawartość katalogu
/etc/skel
.
Domyślna konfiguracja konta jest tworzona na podstawie opcji z
plik�w: /etc/default/useradd
i
/etc/login.defs
.
Najważniejsze opcje pierwszego z nich to:
GROUP - identyfikator grupy głï¿½wnej - domyślnie: 1000 (users)
HOME - miejsce przechowywania katalog�w
domowych - domyślnie:
/home/users
SHELL - powłoka - domyślnie:
/bin/bash
Drugi określa bardziej zaawansowane opcje, najważniejsze z nich to:
PASS_MAX_DAYS - liczba dni do wygaśnięcia hasła -domyślnie: 99999
PASS_MIN_DAYS - minimalna liczba dni do między zmianami hasła -domyślnie: 0
PASS_WARN_AGE - ilość dni przez kt�re będzie pokazywane ostrzeżenie o wygaśnięciu hasła - domyślnie: 7
Wiele opcji kont zawartych w tych plikach można łatwo modyfikować, poprzez przekazanie odpowiednich parametr�w do programu useradd oraz passwd, więcej informacji na ten temat uzyskamy w podręczniku systemowym. Jeśli chcemy utworzyć większa ilość kont o zmodyfikowanych parametrach to wygodniejsze będzie ustawienie interesujących nas wartości w podanych powyżej plikach.
Jeśli użytkownik ma konto na wielu maszynach dobrym zwyczajem jest nadawanie takiego samego numeru użytkownika (UID) dla każdego z kont. W przypadku programu useradd należy użyć opcji "-u".
Na koniec administrator musi ustawić hasło dla danego użytkownika.
Aby usunąć konto użyjemy programu userdel:
# userdel jkowalski
Warto wspomnieć tu o opcjach "-r" i "-f", pierwsza usuwa katalog domowy, druga wymusza usunięcie r�wnież plik�w z katalogu domowego nawet jeśli do niego nie należą.
Ze względ�w bezpieczeństwa można polecić blokowanie kont użytkownik�w w miejsce ich usuwania, w ten spos�b możemy się ochronić przed sytuacją powrotu do użytku numeru UID usuniętego użytkownika.
Dane użytkownika modyfikujemy poleceniem usermod, dokładny opis tego programu znajdziemy w manualu.
Pierwsze hasło dla użytkownika jest nadawane przez administratora, każdą następną jego modyfikację użytkownik może wykonywać samodzielnie.
Ustawienie hasła przez administratora: passwd {$nazwa_użytkownika}
# passwd jkowalski Changing password for jkowalski. New UNIX password: Retype new UNIX password:
Zwykły użytkownik zmienia swoje hasło r�wnież poleceniem passwd, tyle że bez podawania parametru. Administrator może zmusić użytkownika do zmiany hasła tuż po zalogowaniu:
# passwd -e jkowalski
Hasło blokujemy poleceniem: passwd -l {$nazwa_użytkownika} np.:
# passwd -l jkowalski
Aby odblokować użyjemy parametru parametru "-u" np.:
# passwd -u jkowalski
Musimy pamiętać, że powyższe polecenia nie blokują dostępu
opartego o inną metodę autoryzacji niż hasło, np. o klucz SSH.
W takim wypadku dodatkowo powinniśmy zmienić powłokę użytkownikowi
na nie figurującą w /etc/shells
np.:
# usermod -s /bin/false jkowalski
W PLD zastosowano klasyczny dla system�w uniksowych system
grup, tak więc istnieje podział na dwa rodzaje
grup: grupy systemowe i grupy
użytkownik�w. Grupy te rozr�żniamy na podstawie
identyfikator�w grupowych (GID), dla grup użytkownik�w
przeznaczone są wartości 1000 i więcej. Ponadto grupy systemowe
często przyjmują nazwy podobne jak nazwy usług np:
ftp
, named
, itp.
Zarządzanie grupami systemowymi następuje automatycznie w trakcie instalowania bądź usuwania pakiet�w, z tego powodu nie należy w nie ingerować. W naszej dystrybucji zarządzanie grupami zazwyczaj sprowadza się do dodawania/usuwania własnych grup oraz zarządzania uczestnictwem w istniejących grupach.
W PLD domyślnie instalowanym pakietem do zarządzania grupami jest pakiet shadow. Możemy do jednak zastąpić zbiorem pwdutils, kt�ry zawiera narzędzia o większych możliwościach. Dzięki nim nie będzie już konieczności "ręcznego" edytowania plik�w systemowych, z tego względu opisane zostaną wyłączne narzędzia pwdutils.
Używamy polecenia groupadd {$nazwa_grupy} np.:
# groupadd kadry
Jeśli tworzymy takie same grupy na wielu maszynach, to dobrym zwyczajem jest nadawanie takiego samego numeru grupy (GID) dla każdej z grup. Dowolny GID narzucamy w trakcie tworzenia grupy programem groupadd z użyciem opcji "-g".
Dzięki poleceniu id {$nazwa_użytkownika} sprawdzimy do jakich grup zapisany jest użytkownik, jeśli nie podamy nazwy konta to zostanie wyświetlona informacja o aktualnie używanym koncie np.
$id jkowalski uid=500(jkowalski) gid=1000(users) grupy=1000(users),10(wheel),19(floppy),23(audio)
Program zwr�cił wartości: UID, GID i listę grup do kt�rych
zapisany jest użytkownik jkowalski: users
, wheel
,
floppy
, audio
Zapisanie do grupy następuje po wykonaniu polecenia groupmod -A {$konto_użytkownika} {$grupa} np.
groupmod -A jkowalski kadry
Aby wyrejestrować użytkownika z grupy musimy użyć parametru "-R" np.
groupmod -R jkowalski kadry
Po każdej modyfikacji uczestnictwa w grupach, użytkownik musi się ponownie zalogować, aby wprowadzone zmiany zaczęły obowiązywać.
Zapisanie użytkownika do grupy służy podniesieniu jego uprawnień, listę przywilej�w jakie uzyska zamieszczono w „Zarządzanie uprawnieniami”.
W PLD zastosowano restrykcyjny poziom bezpieczeństwa, zwykły użytkownik domyślnie ma minimalne możliwe uprawnienia. Aby je zwiększyć administrator musi zapisać użytkownika do odpowiednich grup, poniżej została przedstawiona skr�cona ich lista i odpowiadające im "przywileje" lub funkcje.
Tabela 13.3.
GID | Nazwa | Właściciel/Uprawnienia |
---|---|---|
0 | root | grupa administracyjna - wysokie uprawnienia w całym systemie |
3 | sys | odczyt niekt�rych plik�w systemowych np. konfiguracji i log�w systemu druku CUPS |
4 | adm | możliwość korzystania z narzędzi takich jak: tarcerouote, ping, arping, clockdiff |
6 | disk | bezpośredni dostęp do urządzeń masowych np. naprawy i tworzenie system�w plik�w, odtwarzanie i nagrywanie CD |
7 | lp | dostęp do portu drukarki: r�wnoległego, USB |
9 | kmem | odczyt z urządzeń /dev/mem, /dev/kmem |
10 | wheel | możliwość korzystania z programu su |
17 | proc | dostęp do pseudosystemu plik�w /proc (np. wgląd do proces�w innych użytkownik�w) |
19 | floppy | możliwość niskopoziomowego formatowania dyskietek i tworzenia na nich systemu plik�w |
22 | utmp | zapis do plik�w /var/run/utmpx, /var/log/wtmp, /var/log/lastlog |
23 | audio | dostęp do karty dźwiękowej |
27 | cdwrite | dostęp do narzędzi nagrywania płyt CD |
28 | fsctrl | grupa kt�rej można używać do nadawania praw dla plik�w na montowanych urządzeniach |
50 | ftp | grupa systemowa serwera FTP: odczyt plik�w konfiguracji |
51 | http | grupa systemowa serwera WWW |
117 | crontab | odczytywanie konfiguracji demona CRON |
123 | stats | grupa używana do potrzeb automatycznie generowanych statystyk (mrtg, calamaris, itd.) |
124 | logs | grupa odczytu niekt�rych log�w |
138 | fileshare | możliwość udostępniania zasob�w NFS i SMB (zapis do /etc/exports, /etc/samba/smb.conf) |
1000 | users | domyślna grupa głï¿½wna dla zwykłych użytkownik�w |
Dużo więcej informacji o grupach i użytkownikach znajdziemy w dokumencie uid_gid.db.txt trzymanym w CVS-ie. Zapisywanie do grup opisano w „Grupy”.
Bezpieczeństwo system�w i danych to rozległy temat dlatego głï¿½wnie skupimy się na aspektach dotyczących PLD.
PLD jako dystrybucja "robiona przez administrator�w dla administrator�w" ma duże zasoby program�w użytecznych w zakresie bezpieczeństwa, poczynając od NetCata™ (nc), a na wiresharku™ i nessusie™ kończąc.
Nasza polityka bezpieczeństwa wymaga, aby użytkownik należał do grupy wheel, jeśli chce zwiększyć swoje uprawnienia za pomocą su i sudo. W ten spos�b atakujący musi zgadnąć trzy parametry zamiast jednego (nazwa użytkownika, hasło i hasło administratora zamiast samego hasła administratora). Nie ma też możliwości zdalnego zalogowania się bezpośrednio na konto roota (z tych samych powod�w). Dodatkowo root nie może zdalnie używać innych usług (ftp, imap, pop3, smtp) m.in z powodu niedostatecznie silnego szyfrowania transmisji.
Domyślnie zwykli użytkownicy nie mają prawa wykonania
program�w z ustawionym bitem SUID. Aby takie prawo uzyskać
muszą być zapisani do odpowiedniej grupy. Przykładowo program
ping wymaga zapisania do grupy adm
. Poglądowe
zestawienie grup zamieściliśmy w „Zarządzanie uprawnieniami”.
Domyślnie użytkownicy nie widzą żadnych proces�w poza swoimi.
Jest to nie tylko krok w stronę bezpieczeństwa, ale i w
wygody, użytkownik nie głowi się nad długimi listami proces�w
generowanych przez program top czy
ps.
Podobnie jak z programami z bitem SUID jest to oparte o grupy,
aby użytkownik widział wszystkie procesy należy go zapisać do
grupy /proc
.
PLD oferuje system sys-chroot, wbudowany w rc-skrypty, służący do wygodnego zarządzania środowiskami typu chroot. Usługi, kt�re wspierają natywnie chrooty (np. Bind™) działają w izolowanym środowisku od razu po instalacji.
PLD wspiera także mechanizm Linux VServers, zwany potocznie "chrootem na sterydach". Wymaga on zainstalowania odpowiedniej wersji kernela i odpowiedniego zestawu narzędzi.
Najważniejszym narzędziem administracyjnym jest edytor tekstu,
dlatego nie powinniśmy pozostać bez takiego programu, co może
mieć miejsce np. przy uszkodzeniu systemu plik�w. Tu z pomocą
przychodzi nam statycznie zlinkowany VIM z pakietu vim-static.
Aby nie kolidował ze "zwykłym" vimem, plik wykonywalny jest
umieszczany w /bin/vim
.
Zagadnienia związane z bezpieczeństwem zostały om�wione w „Bezpieczeństwo”.
Spis treści
W tym rozdziale znajdziesz informacje dotyczące konfiguracji sieci
Pierwszą rzeczą jaką musimy zrobić to ustalić wszystkie konieczne parametry połączenia sieciowego. W razie wątpliwości należy skontaktować się z naszym dostawcą usług internetowych. Ten rozdział opisuje konfigurację interfejs�w sieciowych, testowanie połączenia oraz inne prace diagnostyczne przeprowadzimy za pomocą narzędzi opisanych w „Narzędzia sieciowe”.
Zarządzanie całym podsystemem sieci (włączanie, wyłączanie, restart)
dokonujemy za pomocą rc-skryptu network
, więcej
informacji o zarządzaniu rc-skryptami znajdziemy w
„Zarządzanie podsystemami i usługami”. Jest on integralną
częścią PLD i startuje automatycznie w trakcie uruchomienia systemu.
Aby skonfigurować sieć potrzebujemy jedynie ustawić podstawowe
parametry sieci (opisane w następnym rozdziale) oraz prawidłowo
skonfigurować interfejs(y).
Konfigurację proxy opisano szczeg�łowo w „Proxy”.
Jeśli mamy zamiar modyfikować konfigurację sieci na zdalnej maszynie (np. przez ssh), to zalecane jest użycie programu screen, aby mieć pewność, że cała procedura zakończy się poprawnie i nie utracimy kontaktu z hostem. Jeśli mamy program screen wystarczy że wydamy polecenie:
# screen service network restart
W większości wypadk�w konfiguracja sieci (opr�cz ustawień
interfejsu sieciowego) będzie się składała ze wskazania domyślnej
bramy i serwer�w DNS dla resolvera. Wiele zaawansowanych opcji
sieci (np. przekazywanie pakiet�w)
ustawianych jest w pliku konfiguracji jądra:
/etc/sysctl.conf
, parametry te
zostały om�wione w
„Parametry jądra”.
Jeśli nie korzystamy z serwera DHCP ustawiamy statyczną trasę
routingu do domyślnej bramy, w tym celu edytujemy plik
/etc/sysconfig/static-routes
- wpis może
wyglądać następująco:
eth0 default via 192.168.0.1
Wskazanie serwer�w DNS jest obowiązkową pozycją konfiguracji
resolvera nazw. Operacja ta następuje automatycznie, o
ile korzystamy z serwera DHCP, w przeciwnym wypadku musimy podać
ich adresy samodzielnie. Serwery nazw ustawiamy
edytując plik /etc/resolv.conf
.
Jeśli go nie ma, to możemy go utworzyć za pomocą
dowolnego edytora lub poleceniem
touch. Podajemy przynajmniej jeden (zazwyczaj nie więcej niż dwa)
serwer nazw za pomocą słowa kluczowego
nameserver np.:
nameserver 192.168.0.12
Możemy ustawić nazwę, za pomocą kt�rej nasza maszyna
będzie się przedstawiała zalogowanym użytkownikom, i niekt�rym programom.
W pliku /etc/sysconfig/network
ustawiamy:
HOSTNAME=pldmachine
Dla porządku warto by była zgodna z
adresem FQDN (o ile jest nadany).
Niekiedy podaną tu nazwę należy dopisać do pliku
/etc/hosts
opisanego w dalszej
części rozdziału.
Plik /etc/host.conf
zawiera podstawowe
opcje resolvera nazw, w większości wypadk�w wystarczy domyślna
konfiguracja:
order hosts,bind multi on
Pierwsza pozycja wskazuje kolejność używania metod szukania
adres�w host�w, w podanym przykładzie najpierw będzie przeszukiwany
plik /etc/hosts
, w drugiej kolejności będą odpytywane
serwery DNS.
Drugi wiersz zezwala na zwracanie więcej niż jednego adresu IP
z pliku /etc/hosts
(o ile przypisano
większą liczbę adres�w do nazwy).
W pliku /etc/hosts
można dodawać odwzorowania
host�w, kt�re są uzupełnieniem dla usługi DNS, jedyny wymagany wpis
to wskazanie adresu IP pętli zwrotnej dla nazwy localhost:
127.0.0.1 localhost
Opr�cz nielicznych wyjątk�w, inne wpisy nie są tu konieczne, Dla potrzeb niekt�rych program�w trzeba dopisać do powyższego wiersza nazwę hosta ustawionego za pomocą opisanej powyżej opcji HOSTNAME:
127.0.0.1 localhost styx
przykład wpisu dla programu wymagającego przypisania pełnej nazwy domenowej:
213.25.115.88 platinum.elsat.net.pl
Rozwiązanie to służy do szybszej identyfikacji komputer�w w sieci
lub prac diagnostycznych. Aby w og�le z tego skorzystać musimy ustawić
odpowiednią kolejność przeszukiwania w pliku
/etc/host.conf
Jeśli często odwołujemy się do maszyn w naszej domenie
to możemy ułatwić sobie życie i ustawić domenę
domyślną w pliku /etc/resolv.conf
.
Od tej pory podanie samej nazwy hosta (bez części domenowej),
będzie uważane za podanie pełnego adresu. Przykładowe
ustawienie domyślnej domeny (np. jakasdomena.cos) podano
poniżej:
domain jakasdomena.cos
Edytujemy plik
/etc/sysconfig/network
, domyślne
wartości opcji z tego pliku w zupełności wystarczają
do typowego korzystania z sieci i nie ma potrzeby nic
modyfikować w nim.
NETWORKING=yes
Ustawiamy na "yes" jeżeli w og�le chcemy komunikować się z siecią.
IPV4_NETWORKING=yes
Ustawiamy na "yes" jeżeli będziemy korzystać z protokołu IPv4 (wymagany do korzystania z Internetu).
NISDOMAIN=
Domena NIS, jeśli nie korzystasz z tej usługi sieciowej, lub nie jesteś pewien pozostaw to pole puste.
GATEWAY=192.168.0.254 GATEWAYDEV=eth0
Opcje za pomocą kt�rych możemy ustawić trasę routingu
do domyślnej bramy. Opcje te zostały uznane za
przestarzałe, obecnie należy korzystać z pliku
/etc/sysconfig/static-routes
.
Większość dostępnych na rynku kart sieciowych jest oparta na układach Realteka, 3Com bądź Intela, dzięki temu nie będzie problem�w z uruchomieniem urządzenia. Karty sieciowe są automatycznie wykrywane przez jądro i nadawane są im nazwy kolejno: eth0, eth1, eth2, itd. Jedyną rzeczą jaka pozostaje to załadowanie odpowiedniego modułu dla danego urządzenia, proces ten dokładnie opisano tutaj: „Moduły jądra”.
Pliki konfiguracyjne interfejs�w są przechowywane w katalogu
/etc/sysconfig/interfaces
, nazwy tych
plik�w będą miały kolejno nazwy ifcfg-eth0, ifcfg-eth1,
ifcfg-eth2, itd. W tym rozdziale założono, że
konfigurujemy pierwszy interfejs (eth0). Pliki te modyfikujemy
za pomocą dowolnego edytora tekstu np.
# vim /etc/sysconfig/interfaces/ifcfg-eth0
Zaczynamy od zmodyfikowania lub utworzenia pliku
/etc/sysconfig/interfaces/ifcfg-eth0
,
aby karta działała poprawnie powinieneś mieć tam
podobne ustawienia:
DEVICE="eth0"
Powyższa opcja ta określa nazwę urządzenia.
IPADDR="192.168.0.2/24"
Ta opcja określa adres karty sieciowej oraz maskę podsieci. Maskę podsieci podajemy w notacji CIDR - "/24" odpowiada masce 255.255.255.0.
ONBOOT="yes"
Ustaw na "yes" jeśli chcesz aby interfejs automatycznie podnosił się razem z podsystemem sieci.
BOOTPROTO="none"
Ta opcja pozwala dokonać wyboru, w jaki spos�b karta sieciowa ma otrzymywać konfigurację. Powyższy wpis sprawia, że system pobiera wszystkie ustawienia z posiadanych plik�w konfiguracyjnych.
Na końcu aktywujemy sieć.
Na początek wybieramy jeden z program�w klienckich: dhcpcd lub pump:
# poldek -i dhcpcd
Nasze zadanie ogranicza się do zmiany jednego
parametru w pliku
/etc/sysconfig/interfaces/ifcfg-eth0
.
Odszukujemy w nim opcję BOOTPROTO i wskazujemy klienta
DHCP, kt�ry ma być użyty:
BOOTPROTO="dhcp"
Na koniec dokonujemy aktywacji interfejsu.
Mała uwaga: przy użyciu DHCP statyczne opcje sieciowe
(adres IP, maska podsieci, brama) umieszczone w plikach
konfiguracyjnych będą ignorowane, zaś
zawartość pliku /etc/resolv.conf
będzie nadpisywana informacjami przyznanymi przez serwer DHCP.
W przypadku laptopa dobrym pomysłem jest użycie jakiejś aplikacji X-Window do konfiguracji WiFi, z możliwością łatwego przełączania pomiędzy sieciami oraz automatycznym wykrywanie podłączenia kabla do karty Ethernet. Takie możliwości zapewnia np. NetworkManager™ (korzysta z aplikacji wpa_supplicant™), przeznaczony dla środowiska Gnome. W przypadku stacjonarnych maszyn konfiguracja rc-skrypt�w powinna być wystarczająca w większości wypadk�w.
W naszych przykładach przedstawimy konfigurację dla sieci
bezprzewodowej działającej w trybie trybie infrastruktury
(managed), o określonym identyfikatorze SSID
i zabezpieczonej kluczem WEP
oraz
WPA2-PSK
(WPA2 Personal).
WEP zawiera zbyt dużo słabych punkt�w i jest
podatny na szybkie złamanie, dlatego o ile nie jesteśmy ograniczeni
sprzętem to należy używać właśnie WPA2.
Niekt�re karty sieciowe WiFi mają dedykowane sterowniki i ich konfiguracja nie sprawia większych kłopot�w, w pozostałych wypadkach posłużymy się sterownikami dla systemu Microsoft Windows, uruchomionymi dzięki aplikacji NdisWrapper™. Jest to możliwe dzięki temu, że większość sterownik�w jest napisana zgodnie ze standardem NDIS. Po załadowaniu modułï¿½w, dalsza konfiguracja interfejsu w obu przypadkach przebiega niemal identycznie.
Do kernela w wersji 2.6.24 trafiło wiele modułï¿½w
obsługujących sterowniki kart WLAN, sterowniki rozwijane niezależnie
są dostępne w osobnych pakietach kernel-net-*
Przykładowo zainstalujemy moduł dla kart Atheros:
$ poldek -i kernel-net-madwifi-ng
musimy załadować moduł:
# modprobe ath_pci
Jeśli nie UDEV ładuje nam moduł kernela, to musimy dodać jego nazwę
do pliku /etc/modules
lub
/etc/modprobe.conf
, co zostało szczeg�łowo opisano w
„Moduły jądra”.
Teraz możemy przejść do konfiguracji interfejsu.
Instalujemy pakiety
kernel-net-ndiswrapper
oraz
ndiswrapper
:
$ poldek -i ndiswrapper kernel-net-ndiswrapper
Potrzebne nam będą teraz sterowniki windowsowe naszej karty sieciowej.
Konkretnie chodzi o pliki z rozszerzeniami
*.inf
oraz
*.sys
. Możesz je skopiować
z dostarczonej przez producenta płytki ze sterownikami
# mkdir /lib/windrivers # cd /lib/windrivers # cp /media/cdrom/sciezka/do/sterownikow/sterownik.inf . # cp /media/cdrom/sciezka/do/sterownikow/sterownik.sys .
Musimy teraz zainstalować te sterowniki przy użyciu NdisWrappera.
# ndiswrapper -i /lib/windrivers/sterownik.inf
Jeśli chcemy aby stworzył się alias w pliku
/etc/modprobe.conf
wykonujemy polecenie:
# ndiswrapper -m
Domyślnie rc-skrypty do obsługi WLAN używają pakietu wireless-tools:
$ poldek -i wireless-tools
Kiedy poradziliśmy sobie ze sterownikiem, musimy utworzyć
odpowiedni plik konfiguracji, kt�ry umieścimy w
katalogu /etc/sysconfig/interfaces/
.
Nazwiemy go ifcfg-wlan0
, zaś w przypadku
kart z chipsetem Atheros użyjemy nazwy ifcfg-ath0
.
Przykładową treść takiego pliku zamieszczono poniżej:
DEVICE=wlan0 IPADDR=192.168.0.2/24 ONBOOT=yes BOOTPROTO=dhcp WLAN_ESSID=nasza_nazwa_sieci WLAN_KEY=A638FED41027EA086ECD6825B0
Opcje sieci bezprzewodowej rozpoczynają się się od
przedrostka WLAN_
, pozostałe parametry (w tym opcje
protokołu IP) są takie same jak dla zwykłej karty typu
Ethernet, kt�rej konfigurację szczeg�łowo
om�wiono w „Ethernet”.
Jako urządzenie w opcji DEVICE wskazujemy nadaną przez kernel nazwę. Kartom nadawane są zwykle nazwy wlan0, wlan1, itd. Wyjątkiem od tej reguły są niekt�re sterowniki, rozwijane niezależnie od kernela np. ath{$NR} dla kart z układami Atheros Communications, czy ra{$NR} dla Ralink Technology (w kernelach do 2.6.24). To jaka nazwa została przydzielona naszemu urządzeniu możemy odczytać z komunikat�w jądra.
Poniżej przedstawione zostaną parametry sieci WLAN:
WLAN_ESSID=moja_siec
Powyższa opcja to identyfikator ESSID naszej sieci
WLAN_KEY=A638FED41027EA086ECD6825B0
Przy pomocy kolejnej zmiennej podajemy klucz WEP, na przykładzie użyto klucza szesnastkowego, aby podać klucz w postaci ASCII musimy ma jego początku dodać: "s:"
Dodatkowo możemy ustawić szybkość interfejsu:
WLAN_BITRATE=auto
Tą opcję możemy ustawić r�wnież na sztywno, przez podanie obsługiwanej wartości np.: 11MB, 24MB, 54MB.
Opisane powyżej wireless-tools nie potrafią używać szyfrowania WPA/WPA2, dlatego konieczny nam będzie pakiet wpa_supplicant™:
$ poldek -i wpa_supplicant
Edytujemy plik /etc/wpa_supplicant.conf
, w kt�rym definiujemy
opcje sieci WLAN:
ap_scan=1 network={ ssid="nasza_nazwa_sieci" key_mgmt=WPA-PSK proto=RSN pairwise=CCMP TKIP group=CCMP TKIP WEP104 WEP40 psk=anejdlf7323e64ekjlkbdsxhjsldjf3fda }
Hasło do naszej sieci w linijce psk
może być jawne
lub kodowane za pomocą polecenia wpa_passphrase
Testujemy połączenie z WiFi:
# ifconfig wlan0 up # wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd
Opcja -dd
włącza tryb debugowania i
jeżeli nie otrzymamy jakichś błęd�w, to przerywamy
działanie wpa_supplicant™
skr�tem ctr-c
Pozostała nam jeszcze edycja
/etc/sysconfig/interfaces/ifcfg-wlan0
,
w celu wskazania, że chcemy korzystać z wpa_supplicant:
DEVICE=wlan0 IPADDR=192.168.0.2/24 ONBOOT=yes BOOTPROTO=dhcp WLAN_WPA=yes WLAN_WPA_DRIVER=wext
Restartujemy ponownie naszą sieć:
# /etc/init.d/network restart
i nasza sieć WiFi powinna już działać.
Na wszelki wypadek powinniśmy się upewnić, że nasza maszyna jest w zasięgu sieci radiowej:
# iwlist wlan0 scan
Jeśli sieć jest na liście, to pr�bujemy podnieść interfejs (oczywiście, jeżeli tego nie zrobiliśmy już wcześniej):
# /etc/rc.d/init.d/network start Ustawianie parametr�w sieci....................[ ZROBIONE ] Podnoszenie interfejsu wlan0...................[ ZROBIONE ]
Aby sprawdzić czy wszystko jest OK możemy użyć polecenia iwconfig, kt�re powinno wyświetlić coś w stylu:
# iwconfig lo no wireless extensions. eth0 no wireless extensions. wlan0 IEEE 802.11g ESSID:"nasza_nazwa_sieci" Nickname:"foo.com" Mode:Managed Frequency:2.412 GHz Access Point: 8A:1C:F0:6F:43:2D Bit Rate=300 Mb/s Sensitivity=-200 dBm RTS thr=2346 B Fragment thr=2346 B Encryption key:ABFA-155B-E90F-1D1C-FC34-66ED Security mode:restricted Power Management:off Link Quality:100/100 Signal level:-30 dBm Noise level:-96 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
w wyświetlonych danych interfejsu odszukujemy wartość jakości połączenia: Link Quality Niezerowa wartość oznacza, że konfiguracja zakończyła się sukcesem.
W przypadku użycia pakietu wpa_supplicant możemy użyć programu wpa_cli:
wpa_cli status Selected interface 'wlan0' bssid=00:1e:e5:6d:62:5e ssid=nasza_nazwa_sieci id=0 pairwise_cipher=CCMP group_cipher=TKIP key_mgmt=WPA2-PSK wpa_state=COMPLETED ip_address=192.168.0.2
Wartość COMPLETED parametru wpa_state oznacza prawidłowe połączenie z WiFi.
Jeżeli mamy kartę obsługującą tryb "n" może nam się przydać polecenie iwpriv z pakietu wireless-tools™. Możemy przełączyć wtedy kartę wifi w szybszy tryb, ponieważ często z automatu włączony jest wolniejszy np. "g". Uruchamiamy więc:
# iwpriv wlan0 network_type n
i powinniśmy wykorzystywać już naszą kartę maksymalnie - co możemy sprawdzić poleceniem:
# iwlist bitrate lo no bit-rate information. eth0 no bit-rate information. wlan0 8 available bit-rates : 6 Mb/s 9 Mb/s 12 Mb/s 18 Mb/s 24 Mb/s 36 Mb/s 48 Mb/s 54 Mb/s Current Bit Rate=270 Mb/s
Na samym początku musimy włączyć w biosie komputera port USB oraz zainstalować takie pakiety jak eagle™ oraz kernel-usb-eagle™. Dodatkowo musimy jeszcze zainstalować pakiet ppp™. Jeżeli zainstalowałeś system z płytki MINI-iso, powinieneś je tam znaleźć. W przypadku, kiedy instalowałeś system z dyskietki, znajdziesz je na jednej lub kilku dyskietek "addons" czyli dyskietek zawierających dodatkowe pakiety.
Przystępujemy do instalacji. Należy przejść do do lokalizacji w kt�rej znajdują się owe pakiety a następnie wydać następujące polecenie.
# rpm -Uvh kernel-usb-eagle* eagle-usb* ppp*
Kiedy już upewniliśmy się, że mamy włączony port USB w biosie, musimy
go zainicjować w systemie. Możemy to zrobić za pomocą pliku
/etc/modules.conf
w kt�rym umieszczamy przykładową linijkę
alias usb-controller usb-uhci
Jeżeli posiadasz zainstalowany kernel z serii 2.6.x powinieneś umieścić następujący wpis w
pliku /etc/modprobe.conf
alias usb-controller uhci-hcd
Po ponownym uruchomieniu komputera powinniśmy posiadać w systemie obecny moduł usb-uhci (uhci-hcd dla jądra 2.6.x). W przypadku, kiedy ten moduł po prostu nie zadziała spr�buj załadować usb-ohci (ohci-hcd dla jądra 2.6.x). Jeżeli podłączyłeś modem do portu USB 2.0 powinieneś użyć modułu usb-ehci (ehci-hcd dla jądra 2.6.x).
Możemy teraz podłączyć modem do komputera. Nasze urządzenie zostanie od razu wykryte i zainicjowane w systemie. Poprawna inicjalizacja powinna zakończyć się załadowaniem do pamięci modułu adiusbadsl. UWAGA! Jeżeli posiadasz kernel 2.6.x powinieneś załadować moduł eagle-usb.
Możemy zacząć od pliku /etc/resolv.conf
. Opis znajdziecie w
rozdziale poświęconym konfiguracji sieci. Przystępujemy teraz
do konfiguracji pliku /etc/eagle-usb/eagle-usb.conf
. Należy
w nim zmienić wartość opcji VPI na taką jaką widzicie poniżej.
VPI=00000000
Skonfigurujemy teraz demona PPP. Utworzonemu w wyniku instalacji plikowi /etc/ppp/options
zmieniamy nazwę na options.old
. Tworzymy nowy plik options z zawartością taką jaka została
przedstawiona na poniższym listingu. Najważniejszą rzeczą jest podanie w nim
nazwy użytkownika, kt�ra jest konieczna do ustanowienia połączenia.
Możemy r�wnież dopisać opcję debug, jeśli chcemy być informowani
o tym co się dzieje.
# cat /etc/ppp/options user "[email protected]" mru 1492 mtu 1492 noipdefault defaultroute usepeerdns noauth #ipcp-accept-remote #ipcp-accept-loacal nobsdcomp nodeflate nopcomp novj novjccomp #novaccomp -am noaccomp -am #włączam debug. debug
Musimy jeszcze wpisać hasło. Aby tego dokonać wyedytujmy plik
/etc/ppp/chap-secrets
. UWAGA! Jeżeli się pomylisz i wpiszesz hasło do
/etc/ppp/pap-secrets
, hasło nie zadziała.
# cat /etc/ppp/chap-secrets [email protected] * haslo *
Na tym zakończymy konfigurację połączenia z Neostradą. Jesteśmy już gotowi aby wszystko uruchomić.
Najbardziej wygodnym sposobem będzie wykorzystanie mechanizmu rc-scripts
do uruchamiania usługi. Do tego potrzebny będzie odpowiedni plik konfiguracji,
przykładowy taki plik umieszczono w katalogu
/usr/share/doc/rc-scipts/
oraz na poniższym wydruku:
DEVICE=ppp0 ONBOOT=yes PPPOA_EAGLE=yes AUTH=no MTU=1452 PERSIST=yes DEFROUTE=yes USEPEERDNS=yes [email protected] # put password in /etc/ppp/pap-secrets or install # ppp-plugin-ifcfg-password and uncommend following lines # PLUGIN_IFCFG_PASSWORD=yes # PASSWORD=YYYY
Plik zapisujemy jako /etc/sysconfig/interfaces/ifcfg-ppp0
i wydajemy polecenie:
# ifup ppp0
Dzięki opcji ONBOOT=yes
połączenie będzie nawiązywane wraz z
uruchamianiem systemu.
Możemy sprawdzić np. pingiem łączność z jakimś zewnętrznym serwerem, np. ping www.pld-linux.org. Jeżeli posiadasz jakąś sieć LAN, lub kilka komputer�w w mieszkaniu, powinieneś przeczytać rozdział poświęcony maskaradzie.
Oto kr�tka lista tego, co będzie nam potrzebne do uruchomienia modemu.
Port USB w komputerze
Jądro z serii 2.4 lub 2.6
Programy: modem_run™ oraz pppoa3™
Pakiet: ppp-plugin-pppoatm™
Firmware do modemu.
Firmware dla modemu można ściągnąć z stąd: http://speedtouch.sourceforge.net/files/firmware.bin.
Jeżeli już upewniłeś się, że masz wszystkie wymagane rzeczy, możemy przystąpić do instalacji.
W pierwszej kolejności musimy zainicjować w systemie USB, oraz kilka modułï¿½w do obsługi ppp. Możemy to zrobić wykonując następujące polecenie
# for i in usbcore uhci acm ppp_generic \ ppp_synctty;do modprobe $i;done
Komentarza wymaga tutaj obsługa USB. W przykładzie został podany moduł
uhci
. Jeżeli nie załaduje się poprawnie (zostaniesz o tym poinformowany) powinieneś wybrać jeden z następujących: usb-uhci
, usb-ohci
lub dla USB 2.0 usb-ehci
. Posiadacze jąder z serii 2.6 mają do wyboru następujący zestaw modułï¿½w: uhci-hcd
, ohci-hcd
lub ehci-hcd
. Ta r�żnorodność jest uwarunkowana sprzętowo, w zależności od rodzaju chipsetu obsługującego porty USB.
Ważną rolę tutaj odgrywa moduł acm,
gdyż bez niego nie będzie możliwe załadowanie firmware do modemu. W kernelach z serii
2.6.x odpowiednikiem acm
jest moduł cdc-acm
.
Posiadacze kernela z serii 2.6.x mogą użyć poniższej pętli kt�ra załaduje wszystkie potrzebne moduły. Oczywiście należy zwr�cić uwagę aby załadować odpowiedni dla Twojego sprzętu moduł obsługujący kontroler USB na płycie głï¿½wnej.
# for i in usbcore uhci-hcd cdc-acm ppp_generic ppp_synctty;do modprobe $i;done
Następnym krokiem jest podmontowanie systemu plik�w w proc.
# mount none /proc/bus/usb -t usbfs
W tym momencie możemy sprawdzić, czy SpeedTouch rzeczywiście jest widziany przez system. Aby tego dokonać wykonaj poniższe polecenie
# cat /proc/bus/usb/devices [...] S: Manufacturer=ALCATEL S: Product=Speed Touch 330 [...]
Musisz teraz zainstalować oprogramowanie do modemu. Robimy to wydając następujące polecenie:
# poldek -U speedtouch
Podłącz modem do komputera. Będzie on potrzebował do działania specjalnego pliku,
tak zwanego firmware. Program modem_run potrafi odczytywać
firmware w formatach przygotowanych dla Linuksa, Windowsa oraz MacOS.
Jakie są możliwości pobrania pliku firmware? Możemy pobrać go z adresu podanego
na początku rozdziału. Jest to firmware przygotowany dla systemu MacOS.
Linuksowy firmware możemy pobrać ze strony Alcatela:
www.speedtouchdsl.com/dvrreg_lx.htm.
Wymagana jest rejestracja. Możemy r�wnież go wziąć z płytki dostarczonej przez TPSA.
Powinien on znajdować się w archiwum Linux/ThomsonST330/pliki.tar.gz
.
Po jego rozpakowaniu powinniśmy mieć coś takiego jak: drivers/speedmgmt.tar.gz
.
Posiadając już plik speedmgmt.tar.gz
możemy sobie zbudować
pakiet rpm z firmwarem przy użyciu speedtouch-firmware.spec. Musimy tylko
skopiować archiwum do katalogu ~/rpm/SOURCES
. Dalsze
instrukcje dotyczące budowania pakiet�w znajdziesz w tej dokumentacji w rozdziale: Tworzenie PLD. Po zainstalowaniu zbudowanego pakietu z firmwarem, możemy
go załadować wydając poniższe polecenie:
# modem_run -v 1 -m -f /ścieżka/do/firmware
Ładowanie firmware do modemu może trochę potrwać. Jeżeli chcesz widzieć co się dzieje wpisz następujące polecenie
# tail -f /var/log/messages
W trakcie ładowania pliku firmware, zaczną migać diody urządzenia. Będzie to oznaczać synchronizację linii. Po kilkunastu sekundach modem się ustabilizuje. Diody powr�cą do zielonego koloru.
Jeżeli masz zainstalowany kernel z serii 2.6 lub 2.4.22+ wykonaj poniższe polecenia:
# modprobe speedtch # modem_run -k -m -v 1 -f /usr/share/speedtouch/mgmt.o # modprobe pppoatm
Moduł speedtch
jest potrzebny do użycia opcji -k (może być ładowany automatycznie przez hotplug. Z kolei pppoatm
będzie potrzebny do uruchomienia pppd.
Nie ładuje się on automatycznie, dlatego należy go dopisać np. do /etc/modules
.
W porządku. Po zakończonej operacji ładowania firmware jesteśmy gotowi
aby skonfigurować nasze ppp do neostrady. Zanim to zrobimy będziemy musieli zainstalować pakiet ppp-plugin-pppoatm
.
# poldek -U ppp-plugin-pppoatm
W zależności od wersji zainstalowanego kernela (2.6 lub 2.4) konfiguracja demona pppd będzie się r�żniła kilkoma szczeg�łami. Poniżej przedstawiam przykłady dla obu serii jąder.
Linux z serii 2.4
# cat /etc/ppp/peers/neostrada debug lock noipdefault defaultroute pty "/usr/sbin/pppoa3 -v 1 -e 1 -c -m 1 -vpi 0 -vci 35" asyncmap 0 lcp-echo-interval 2 lcp-echo-failure 7 sync user "[email protected]" noauth holdoff 3 persist maxfail 25 mru 1500 mtu 1500
Linux z serii 2.6 lub 2.4.22+
# cat /etc/ppp/peers/neostrada noauth usepeerdns noipdefault defaultroute pty "/usr/sbin/pppoa3 -e 1 -v 1 -m 1 -c -vpi 0 -vci 35" sync user nasz_login noaccomp nopcomp noccp holdoff 4 persist maxfail 25
Ważną rolę odgrywa tu parametr -e 1
, gdyż bez niego nie uzyskamy
połączenia.
Oczywiście musimy jeszcze odpowiednio skonfigurować
pap-secrets
oraz chap-secrets
# cat /etc/ppp/chap-secrets [email protected] * haslo *
W celu nawiązania połączenia, kt�re uprzednio skonfigurowaliśmy, wydajemy takie oto polecenie
pppd call neostrada
Jeżeli nie chcemy, bądź z jakichś powod�w nie możemy korzystać z programu hotplug™ nie musimy tego robić. Nie jest on tak naprawdę niezbędny. W takim przypadku za każdym razem będziemy musieli ładować firmware modemu programem modem_run™.
Coraz więcej dostawc�w usług internetowych oferuje dzierżawę linii xDSL z portem LAN typu Ethernet, takie usługi oferują np. Telekomunikacja Polska (Internet DSL) oraz Dialog (DIALNET DSL).
W celu uruchomienia usługi, wystarczy jedynie skonfigurować interfejs sieciowy Ethernet w naszym komputerze, zgodnie z informacjami uzyskanymi od dostawcy łącza (konfiguracja statyczna). Poniżej przedstawiono skr�cony opis konfiguracji tego typu interfejsu, szczeg�łowy opis znajdziemy tutaj: „Ethernet”
Podniesienie interfejsu eth0 możemy osiągnąć tworząc
lub edytując (jeśli istnieje) plik
/etc/sysconfig/interfaces/ifcfg-eth0
i wpisując dane otrzymane od dostawcy:
DEVICE="eth0" IPADDR="80.55.203.222/30" ONBOOT="yes" BOOTPROTO="none"
Istotną kwestią jest przypisanie odpowiedniego prefiksu (maski podsieci) przy podaniu adresu IP zarezerwowanego dla abonenta. Prefiks wykorzystywane w usłudze InternetDSL, to: /30 Internet DSL 512 oraz Internet DSL 1 (przydzielone 4 adresy IP, co odpowiada masce podsieci 255.255.255.252), /29 Internet DSL 2 (przydzielone 8 adres�w IP, co odpowiada masce podsieci 255.255.255.248). Należy pamiętać że 3 adresy IP są zarezerwowane do obsługi połączenia (adres sieci,brama,broadcast)
Ostatnią zmianą potrzebną do prawidłowego działania sieci
jest wyedytowanie pliku
/etc/sysconfig/network
. Należy tam
podać adres bramy (IP modemu DSL).
GATEWAY="80.55.203.221" GATEWAYDEV="eth0"
Na koniec pozostaje nam uruchomienie podsystemu sieci:
# service network start
HotPlug jest mechanizmem pozwalającym na automatyczne konfigurwanie systemu po podłączeniu określonego urządzenia. W przypadku urządzeń sieciowych PCMCIA i USB możliwe jest automatyczne aktywowanie interfejsu od razu po podłączeniu urządzenia.
Aby uruchomić ten mechanizm musimy najpierw zainstalować odpowiednie oprogramowanie:
# poldek -i hotplug*
Kolejnym krokiem będzie umieszczenie odpowiedniego wpisu w pliku konfiguracji interfejsu sieciowego. Dodajemy opcję:
HOTPLUG=yes
Narzędzia do zarządzania i diagnostyki interfejs�w sieciowych opisano w „Narzędzia sieciowe”.
Zaawansowane opcje sieciowe interfejs�w nie
są umieszczane w plikach generowanych w trakcie
instalacji systemu. Ich opis znajdziemy
w pliku
/usr/share/doc/rc-scripts/ifcfg-description.gz
.
Spis treści
W tym rozdziale znajdziesz informacje dotyczące konfiguracji sieci
Podstawowe trasy do podsieci są automatycznie tworzone przy
konfiguracji interfejs�w sieciowych na podstawie podanego adresu
IP i maski podsieci. Trasa domyślna jest konfigurowana na podstawie
ustawień w pliku /etc/sysconfig/network
.
Operacje te zostały opisane w poprzednim rozdziale,
w przypadku bardziej zaawansowanych zastosowań musimy samodzielnie
skonfigurować trasy pakiet�w.
Konfigurację routingu obowiązkowo rozpoczynamy od włączenia przekazywania pakiet�w między interfejsami sieciowymi, opcję tą możemy ustawić tymczasowo wykonując polecenie
# echo "1" > /proc/sys/net/ipv4/ip_forward
Możemy też w pliku /etc/sysctl.conf
ustawić następująca opcję:
net.ipv4.ip_forward = 1
Następnie restartujemy podsystem sieci
# service network restart
Więcej o parametrach jądra znajdziemy w „Parametry jądra”
Aby wyświetlić tablicę routingu posłużymy się poleceniem ip route:
# ip route 10.0.0.4/32 dev eth0 proto kernel scope link src 10.0.0.4 10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.1 default via 10.0.0.100 dev eth0 onlink
Zarządzenia routingiem na kilku przykładach:
Dodanie trasy do hosta
# ip route add 10.0.0.4/32 dev eth0
Dodanie trasy do podsieci
# ip route add 10.0.0.0/24 dev eth1
Wskazanie bramy domyślnej:
# ip route add 0/0 via 10.0.0.100 dev eth0
dodatkowe opcje:
src {$adres_IP} - adres źr�dłowy nowo tworzonych pakiet�w, opcja ma istotne znaczenie m.in. w przypadku przypisania kilku adres�w IP do tego samego interfejsu.
protocol {$nazwa/$numer} - opcja ważna w przypadku
łączenia trasowania statycznego z dynamicznym.
Najczęściej stykamy się z protokołami:
redirect, kernel, boot, ra. Ich pełną
listę wraz z odpowiadającym im numerom znajdziemy w pliku
/etc/iproute2/rt_protos
.
Dla samego statycznego routowania nie ma
potrzeby jej definiowania.
Usuwanie regułek jest bardzo podobne do dodawania, musimy użyć opcji "del" zamiast "add".
Dodane przez nas regułki możemy zapisac na stałe,
w ten spos�b zostaną automatycznie wczytanie po "podniesieniu"
podsystemu sieci. W tym celu modyfikujemy
plik /etc/sysconfig/static-routes
np.:
eth0 10.0.0.0/24 eth1 192.168.0.0/24 src 192.168.0.4
Jądro używa specjalnego cache do wydajniejszego trasowania pakiet�w, ma to jednak pewną wadę: zmiany w nim nie następują od razu po zmodyfikowaniu tablicy routingu. Aby wymusić natychmiastowe wyczyszczenie cache należy użyć poniższego polecenia:
# ip route flush cache
NAT (Network Address Translation) w Linuksie można zrobić na dwa sposoby:
wykorzystując infrastrukturę netfilter™ jądra 2.4 i 2.6.
korzystając z narzędzi do kontrolowania sieci z pakietu iproute2™.
Oryginalna dokumentacja Netfilter w języku angielskim
Najlepszym sposobem jest wykorzystanie możliwości
netfilter™, gdyż wykonuje
on nat przed (PREROUTING
) lub po
(POSTROUTING
) routingu, co daje nam możliwość
tak skonfigurowania firewalla, jak by nie było wykonywane NAT.
NAT w iptables™ tworzymy dodając regułki
do tabeli "nat". Żeby sprawdzić jakie są dostępne "Chains"
w tabeli nat, należy wykonać takie polecenie:
# iptables -t nat -L
W poniższych przykładach założyliśmy, że 1.2.3.4 jest adresem IP podniesionym na interfejsie zewnętrznym ($if_wan) zaś 192.168.1.0/16 to adresy na interfejsie sieci lokalnej ($if_lan).
W PREROUTING są regułki do wykonania DNAT (Destination NAT). Zamienia to adres hosta docelowego na nasz prywatny, w ten spos�b możemy przekierować ruch na dowolny host w sieci prywatnej:
# iptables -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to 192.168.1.2
Można określić na jakim interfejsie będzie wykonany NAT poprzez opcję -i $inteface. Opcja -o w PREROUTING nie jest dostępna.
Możemy też dokonać przekierowania ruchu kierowanego na konkretny port, zwanego potocznie przekierowaniem portu:
# iptables -t nat -A PREROUTING -i $if_wan -p TCP -d 1.2.3.4 --dport 8000 -j DNAT --to 192.168.1.11:80
SNAT (Source NAT) zmienia to adres nadawcy np. z puli adres�w prywatnych na adres z puli publicznej, co jest wykorzytywane zwykle do "dzielenia łącza".
# iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT --to 1.2.3.4
Jeśli podamy maskę podsieci, zostanie wykorzystana większa ilość adres�w.
MASQUERADE wykonuje to samo co SNAT z tym, że na adres interfejsu jakim wychodzi pakiet. Używać go należy tylko kiedy nasz adres publiczny zmienia się. (np. w połączeniach ze zmiennym IP publicznym)
Po ustawieniu DNAT na adres wewnętrzny zauważymy, że jest problem z dostępem do ip 1.2.3.4 z wewnątrz sieci. Dzieje się tak dlatego, że adres source zostaje bez zmian, dlatego też pakiet nie wraca do bramy. Musimy więc zmusić, aby host wysyłał odpowiedź do bramy. Możemy wykonać to w następujący spos�b:
# iptables -t nat -A POSTROUTING -o $if_lan -s 192.168.0.0/16 \ -d 1.2.3.4 -j SNAT --to 192.168.0.1
Gdzie $if_lan to interfejs lokalnej sieci, a 192.168.0.1 to adres na tym interfejsie.
Administratorzy sieci osiedlowych często natrafiają na problemy z programami p2p. Potrafią one skutecznie zapychać łącza. Jednym z możliwych rozwiązań jest zablokowanie takiego ruchu, a drugim opisanym w tym dokumencie, jest przekierowanie go na jedno z łącz - odciążając tym samym drugie.
Jednym z możliwych problem�w może być "zatykanie" modemu, więc należy się dowiedzieć ile modem może obsłużyć aktywnych połączeń i ograniczyć wyjście przez iptables do tej wartości.
Ograniczenie można wykonać w ten spos�b:
# iptables -t filter -A FORWARD -s 192.168.3.0/24 -o eth1 -p tcp -m mark \ --mark 0x0 -m connlimit --connlimit-above 300 --connlimit-mask 32 \ -j REJECT --reject-with tcp-reset
Co powoduje ograniczenie użytkownikom do 300 wychodzących połączeń TCP. Wyeliminuje to problem, kiedy pakiety nie są w stanie wyjść w świat gdyż za dużo jest aktywnych połączeń i modem się zawiesza.
Drugim sposobem jest ograniczenie pasma wychodzącego w taki spos�b, żeby router pilnował, aby na modemie nie było zbyt dużego ruchu sieciowego.
# tc qdisc del dev eth1 root # tc qdisc add dev eth1 root handle 1 cbq bandwidth 256Kbit \ avpkt 1000 cell 8 # tc class change dev eth1 root cbq weight 32bit allot 1514 # tc class add dev eth1 parent 1: classid 1:2 cbq bandwidth 256Kbit \ rate 216Kbit weight 27Kbit prio 1 allot 1514 cell 8 maxburst 20 \ avpkt 1000 bounded # tc qdisc add dev eth1 parent 1:2 handle 2 tbf rate 216Kbit \ buffer 10Kb/8 limit 15Kb mtu 1500 # tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 \ match ip src $ip_nat classid 1:2
Gdzie $ip_nat to adres ip serwera
Trzecim sposobem jest zakupienie drugiego, taniego łącza i puszczenie nim niechcianego ruchu np tak:
Cały niezidentyfikowany ruch przekierowywany jest na łącze dodatkowe, a zidentyfikowany na łącze drugie (szybsze).
Na początek ustawimy w tabeli mangle takie regułki, służąc do oznaczania odpowiednich pakiet�w:
// przywr�cenie wartości mark dla nawiązanych już połączeń # iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark // jeśli się okaże, że jakieś p2p działa na portach preferowanych to // zaznaczy je i wtedy nie przepuści # iptables -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p \ -j MARK --set-mark 0x1214 # iptables -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p-data \ -j MARK --set-mark 0x1214 // zachowanie dla potomności # iptables -t mangle -A PREROUTING -p tcp -m mark --mark 0x1214 \ -j CONNMARK --save-mark // jeśli jakiś pakiet jest już oznaczony to wychodzi // z tabeli mangle i sprawdza kolejne regułki iptables # iptables -t mangle -A PREROUTING -m mark ! --mark 0x0 -j RETURN // znakuje uprzywilejowane servisy # iptables -t mangle -A PREROUTING -p icmp -s 192.168.0.0/16 \ -j MARK --set-mark 0x1 # iptables -t mangle -A PREROUTING -p udp -s 192.168.0.0/16 \ -j MARK --set-mark 0x1 // porty 1:1024 # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 1:1024 -j MARK --set-mark 0x1 // mysql # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 3306 -j MARK --set-mark 0x1 // gg # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 8074 -j MARK --set-mark 0x1 // cache # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 8080 -j MARK --set-mark 0x1 // gra americans army # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 1716:1718 -j MARK --set-mark 0x1 // irc # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 --dport 6665:6667 -j MARK --set-mark 0x1 // gra enemy terrytory # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 27960 -j MARK --set-mark 0x1 // gra MU Online # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 55201 -j MARK --set-mark 0x1 # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ --dport 44405 -j MARK --set-mark 0x1 // wszystkie porty dobrze znanych serwer�w // www.wp.pl # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ -d 212.77.100.101 -j MARK --set-mark 0x1 // czat.wp.pl # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ -d 212.77.100.113 -j MARK --set-mark 0x1 // www.onet.pl # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ -d 213.180.130.200 -j MARK --set-mark 0x1 //strona z grami Online www.miniclip.com # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ -d 69.0.241.20 -j MARK --set-mark 0x1 // www.kurnik.pl # iptables -t mangle -A PREROUTING -p tcp -s 192.168.0.0/16 \ -d 217.17.45.25 -j MARK --set-mark 0x1 // no i jeszcze zachować dla potomności # iptables -t mangle -A PREROUTING -p tcp -m mark --mark 0x1 \ -j CONNMARK --save-mark
Jeśli już mamy oznaczone pakiety należy je odpowiednio przekierować. Możemy skorzystać z dobrodziejstwa iproute2™ i dodać następujące regułki:
# ip route add from 192.168.0.0/16 fwmark 0x1214 lookup TABLE_SMIECI # ip route add from 192.168.0.0/16 fwmark 0x1 lookup TABLE_PRIORYTET // ta regułka kieruje cały nieoznakowany ruch na łącze śmieci // potrzebne jeśli domyślne jest inne łącze # ip route add from 192.168.0.0/18 lookup TABLE_SMIECI
Oczywiście trzeba dodać do tabeli odpowiednie wpisy default i informacje o sieciach obsługiwanych przez ten router. Należy jeszcze wykonać te polecenia dla interfejsu z wyjściem w świat:
# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
Po takich zabiegach użytkownicy powinni odczuć znaczny wzrost wydajności łącza PRIORYTET
Niestety łącze SMIECI jest maksymalnie zapchane, więc należy przygotować się na narzekania użytkownik�w kt�rzy są przekierowani na to łącze.
Przy takim rozwiązaniu należy mieć stałą kontrolę nad usługami, kt�re mają działać na łączu PRIORYTET i stale uaktualniać tabelę mangle o odpowiednie wpisy.
Nie udało się niestety przekierować samego ruchu p2p gdyż podczas nawiązywania połączenia nie wiemy jeszcze czy jest to pakiet należący do p2p. Dzisiejsze programy p2p potrafią działać na portach poniżej 1024 np 80 (http) więc rozr�żnienie ich po portach nic nie da
Innym rozwiązaniem może być wydzielenie port�w dla program�w p2p i ogłoszenie ich użytkownikom sieci. Należy wtedy zablokować ruch p2p na wszystkie porty opr�cz tych wydzielonych i jeśli ktoś się nie dostosuje to nie będzie miał transferu. To rozwiązanie ma jednak wadę: będzie generowało dużo połączeń nawiązywanych (pakiety SYN) na obu łączach, gdyż iptables™ nie pozwoli na transfer dopiero po nawiązaniu połączenia i rozpoznaniu połączania jako należącego do p2p.
Zaletą tego rodzaju tunelu jest to, że jego działanie opiera się na jednych z bardziej popularnych protokołach PPP™ oraz SSH™. Komunikacja odbywa się na porcie 22. Dzięki temu nie zachodzi potrzeba otwierania dodatkowych port�w komunikacyjnych w konfiguracji zapory ogniowej. Interfejsy tunelu uruchamiane są przez demona pppd. Posłużą nam one do zestawienia trasy między dwoma hostami lub sieciami w zależności od potrzeb. Do naszych cel�w będzie potrzebny demon pppd będący implementacją protokołu ppp oraz klient i serwer ssh implementujący protok�ł ssh.
Zanim przystąpimy do konfiguracji musimy zdecydować kt�ry komputer będzie serwerem a kt�ry klientem. Klient będzie inicjował połączenie z serwerem uruchamiając demona pppd.
Zanim przystąpimy do konfiguracji należy sprawdzić czy system wyposażony jest w demona ppp oraz serwer ssh. Pakiety kt�re to udostępniają to odpowiednio ppp™ oraz openssh-server™. Przydatnym może się okazać pakiet openssh-clients™ zawierający jak sama nazwa wskazuje klienta ssh.
Po zainstalowaniu wyżej wymienionych pakiet�w przechodzimy do konfiguracji systemu. W pierwszej kolejności zakładamy konto użytkownika oraz przydzielamy mu grupę.
# groupadd vpn-users # useradd -m -s /usr/sbin/pppd -g vpn-users vpn # passwd vpn New UNIX password: Retype new UNIX password: passwd: password updated successfully
Efekt wykonanych poleceń możesz zobaczyć na listingu poniżej
# grep vpn /etc/passwd vpn:x:506:1005::/home/users/vpn:/usr/sbin/pppd #grep vpn-users /etc/group vpn-users:x:1005:
Wynik tych poleceń powinien odpowiadać temu co tutaj widać. GID grupy vpn-users
wynosi 1005
czyli odpowiada GID ustawionemu w pliku
/etc/passwd
. Poleceniem passwd ustawiamy hasło dla
tego konta, kt�re zostało wpisane do /etc/shadow
.
Istotnym dla konfiguracji elementem w katalogu użytkownika vpn
jest katalog
~/.ssh
. Możemy go stworzyć (o ile wcześniej zainstalowaliśmy)
przy pomocy klienta ssh. Robimy to w dw�ch krokach kt�re obrazuje poniższy przykład
# su - vpn -s /bin/bash $ ssh domena.pl Warning: Permanently added 'domena.pl,xxx.xxx.xx.x' \ (RSA) to the list of known hosts. Password: ^C
Można też ręcznie utworzyć z poziomu konta vpn
ten katalog poleceniem
mkdir. Aby umożliwić użytkownikowi prawo do wykonania po zalogowaniu polecenia
/usr/sbin/pppd należy nadać temu plikowi suida.
# chmod 4755 /usr/sbin/pppd
Konfigurację warstwy ssh mamy już za sobą. Możemy teraz przystąpić do konfiguracji demona pppd. Demon
nie będzie wymagał autoryzacji, więc w pliku /etc/ppp/options
wyszukujemy opcję
auth
i zmieniamy ją na noauth
. Musimy teraz skonfigurować wierzchołek
(tzw. peer) końca tunelu. Tworzymy więc plik /etc/ppp/peers/tunel
określający
wszystkie niezbędne parametry połączenia. Na listingu poniżej przykładowa konfiguracja
wierzchołka.
# cat /etc/ppp/peers/tunel 192.168.1.100:192.168.1.101 noauth lcp-echo-interval 5 lcp-echo-failure 3
W pierwszej linijce oddzielone są dwukropkiem adresy IP wierzchołk�w tunelu. Ten po lewej stronie zostanie ustawiony na interfejsie serwera, ten po prawej klienta. Przedstawioną konfigurację należy potraktować jako przykład i dostosować ją do rzeczywistej. Oczywiście, jeżeli spełnia ona Twoje wymagania możesz ją zastosować.
noauth
- wyłączamy autoryzację ppp
lcp-echo-interval
- wartość przy tej opcji określa interwał w sekundach
z jakim wysyłana będzie do peera ramka żądania o echo LCP. Demon sprawdza w ten spos�b
czy połączenie nadal jest aktywne.
lcp-echo-failure
- wartość podana przy tej opcji określa ile żądań o
echo LCP ma zostać wysłanych jeżeli peer nie dał odpowiedzi. Po tylu pr�bach demon
stwierdzi, że połączenie zostało utracone.
Konfiguracja po stronie klienta sprowadza się do wygenerowania kluczy rsa oraz odpowieniego ustawienia demona pppd. Klucze nam są potrzebne do autentykacji nie interaktywnej ssh. Inaczej nie uda nam się nawiązać połączenia z serwerem. Do zestawienia połączenia z serwerem po stronie klienta wymagana jest instalacja pakiet�w ppp™ oraz openssh-clients™. Jeżeli ich nie posiadasz musisz je niezwłocznie zainstalować.
Przystępujemy do dalszej konfiguracji usługi po stronie klienta. Zaczniemy od wspomnianego na wstępie generowania kluczy.
$ ssh-keygen -b 1024 -f ~/.ssh/klucz -t rsa -P "" Generating public/private rsa key pair. Your identification has been saved in /home/users/foo/.ssh/klucz. Your public key has been saved in /home/users/foo/.ssh/klucz.pub. The key fingerprint is: c9:d8:17:bd:ba:82:a0:f0:47:7c:32:c2:e8:7e:32:e8 foo@pldmachine
Do generowania kluczy służy znajdujące się w pakiecie openssh-clients™ polecenie ssh-keygen. Użyliśmy go z następującymi parametrami:
-b
- długość klucza w bitach. Wartość
podana na listingu jest minimalną długością klucza
kt�ra jest akceptowana przez demona
sshd™.
-f
- nazwa pliku (można podać ścieżkę
do niego) zawierającego klucz prywatny.
-t
- typ klucza. Na listingu jest to
RSA. RSA jest algorytmem służącym do generowania
kluczy.
-P
- hasło klucza. Na potrzeby tunelu
hasło musi pozostać puste. Inaczej tunel nie zadziała.
Demon sshd będzie czekał na potwierdzenie hasłem
klucza co nigdy nie nastąpi, gdyż sesja ssh będzie
inicjowana poprzez demona pppd uniemożliwiając nam w
spos�b interaktywny jej przejęcie.
Kolejnym krokiem jest skopiowanie zawartości pliku
klucz.pub
do pliku
~vpn/.ssh/authorized_keys
na serwerze. Możemy
tego dokonać w następujący spos�b.
$ scp ~/.ssh/klucz.pub [email protected]:~/.ssh/authorized_keys
Polecenie to zadziała tylko wtedy, kiedy na koncie
vpn
znajdującym się na serwerze zmienimy
tymczasowo powłokę z /usr/sbin/pppd
na
standardową /bin/bash
. Na tym etapie kończy się
cała konfiguracja dotycząca ssh po obu stronach. Możemy więc
przywr�cić na serwerze w pliku /etc/passwd
dla
użytkownika vpn
powłokę na
/usr/sbin/pppd
. Przystępujemy teraz do
skonfigurowania demona pppd, kt�ry będzie wywoływał podczas
ustanawiania połączenia klienta ssh.
Podobnie jak po stronie serwera w pliku
/etc/ppp/options
musimy opcję
auth
zmienić na noauth
. Kiedy już
to zrobimy, przystąpimy do konfiguracji wierzchołka (tzw. peera) dla
klienta, kt�ry będzie inicjował połączenie. Nazwa pliku może być taka
sama jak na serwerze. Poniżej na listingu znajduje się przykładowa
konfiguracja wierzchołka dla klienta.
# cat /etc/ppp/peers/tunel 192.168.1.101:192.168.1.100 debug noauth pty "ssh -i ~/.ssh/klucz [email protected]" connect-delay 5000
Pierwsza linijka w pliku to dwa adresy IP oddzielone znakiem dwukropka. Adres po lewej stronie
jest adresem tego końca tunelu, kt�ry właśnie konfigurujemy. Pamiętamy, że adres
192.168.1.100
został już przydzielony jako adres wierzchołka
serwera. Pozostałe opcje zostały objaśnione poniżej.
debug
- włączamy raportowanie szczeg�łï¿½w połączenia ppp.
noauth
- wyłączamy autoryzację.
pty
- dzięki tej opcji możemy wykorzystać zewnętrzny skrypt
jako ośrodek komunikacji zamiast konkretnego urządzenia terminalowego.
Wykorzystujemy tutaj ssh.
connect-delay
- określony w milisekundach czas oczekiwanie na
prawidłowy pakiet PPP od peera. Jeżeli taki w tym czasie nadejdzie pppd
rozpocznie negocjację wysyłając pierwszy pakiet LCP.
W przypadku problem�w z połączeniem możemy zwiększyć wartość connect-delay
nawet dziesięciokrotnie jeżeli łącza pomiędzy kt�rymi zestawiamy tunel będą sporo
obciążone. R�wnież po stronie klienta musimy nadać bit suid plikowi
/usr/sbin/pppd
.
# chmod 4755 /usr/sbin/pppd
Na tym kończymy konfigurację tunelu. Możemy przejść do fazy jego uruchomienia.
Skonfigurowane połączenie należy teraz zainicjować wykonując polecenie:
$ /usr/sbin/pppd call tunel
Udana pr�ba połączenia połączenia powinna zaowocować zapisami w logach takimi jak poniżej na listingu.
Sep 2 12:35:34 pldmachine pppd[6623]: pppd 2.4.2b3 started by foo, uid 501 Sep 2 12:35:34 pldmachine pppd[6623]: Using interface ppp0 Sep 2 12:35:34 pldmachine pppd[6623]: Connect: ppp0 <--> /dev/pts/0 Sep 2 12:35:37 pldmachine pppd[6623]: Deflate (15) compression enabled Sep 2 12:35:37 pldmachine pppd[6623]: Cannot determine ethernet \ address for proxy ARP Sep 2 12:35:37 pldmachine pppd[6623]: local IP address 192.168.1.101 Sep 2 12:35:37 pldmachine pppd[6623]: remote IP address 192.168.1.100
Wykonując po obu stronach polecenie ifconfig zauważysz, że utworzone zostały interfejsy ppp służące do komunikacji. Wykorzystamy je do zestawienia prostej trasy pomiędzy dwoma sieciami.
Zakładając, że jedna sieć po stronie serwera ma adresację 192.168.0.0/24 a po stronie klienta 192.168.2.0/24 routing będzie wyglądał w spos�b następujący.
Po stronie serwera:
# route add -net 192.168.2.0/24 gw 192.168.1.100
Po stronie klienta:
# route add -net 192.168.0.0/24 gw 192.168.1.101
W ten spos�b oba komputery będą przechowywały w swoich tablicach routingu informacje o sieciach połączonych dzięki interfejsom tunelu.
VTun umożliwia tworzenie tuneli poprzez sieci TCP/IP wraz z przydzielaniem pasma, kompresją, szyfrowaniem danych w tunelach. Wspierane typy tuneli to: PPP, IP, Ethernet i większość pozostałych protokołï¿½w szeregowych. VTun jest łatwy i elastyczny w konfiguracji. Może zostać wykorzystany do takich sieciowych zastosowań jak VPN, Mobil IP, łącza o określonym paśmie oraz innych. Działa w warstwie user space.
Opis procesu konfiguracji tunelu podzielony został na część klient oraz serwer. Adresacja użyta na listingach może zostać użyta o ile nie będzie się ona kłï¿½ciła z bieżącą konfiguracją Twojej sieci. Zaczynamy od instalacji pakietu vtun™ na obu maszynach będących końcami tunelu. Dodatkowo ładujemy moduł tun™ do pamięci.
# modprobe tun
Na tym kończy się wstępne przygotowanie systemu do konfiguracji tunelu.
Po zainstalowaniu pakietu, opcja VTUND_MODE
w pliku
/etc/sysconfig/vtun
powinna
być ustawiona tak jak na listingu poniżej
# grep VTUND_MODE /etc/sysconfig/vtun VTUND_MODE="server"
Plikiem konfiguracyjnym dla VTuna jest
/etc/vtund.conf
. Po instalacji pakietu jest on
wypełniony przykładami konfiguracji r�żnego rodzaju tuneli po obu
stronach (klient - serwer). Warto je sobie zostawić. W tym celu
wystarczy jedynie zmienić nazwę pliku.
# mv /etc/vtund.conf /etc/vtund.conf.orig
Przy użyciu ulubionego edytora stw�rzmy nowy plik
/etc/vtund.conf
. Możemy w nim wyodrębnić kilka
sekcji: options
, default
,
nazwa
, up
oraz
down
. Sekcje up oraz down są podsekcjami sekcji
nazwa.
options
- opcje dotyczące działania demona oraz
wykorzystywanych przez niego program�w.
options { port 5000; syslog daemon; ppp /usr/sbin/pppd; ifconfig /sbin/ifconfig; route /sbin/route; firewall /sbin/iptables; ip /sbin/ip; }
port
- port na kt�rym ma nasłuchiwać demon.
syslog
- spos�b logowania zdarzeń na interfejsie tunelu.
ppp ifconfig route firewall ip
- zmienne, kt�re zawierają
ścieżki do wykorzystywanych przez VTun program�w.
default
- domyślne ustawienia transmisji danych.
default { compress yes; speed 0; }
compress
- kompresja pakiet�w w trakcie transmisji.
speed
- prędkość transmisji. Wartość 0
oznacza brak ograniczeń.
vpn1
- wymieniona wcześniej nazwa
tunelu. W tym miejscu
znajduje się właściwa konfiguracja parametr�w połączenia.
vpn1 { passwd tajne.haslo; type tun; proto tcp; compress zlib:9; encrypt yes; keepalive yes; up { ... }; down { ... }; }
passwd
- hasło, kt�re posłuży do szyfrowania połączenia.
type
- typ tunelu (w przykładzie tunel IP)
proto
- protok�ł warstwy transmisyjnej tunelu.
compress
- metoda oraz stopień kompresji.
encrypt
- włączenie szyfrowania transmisji.
keepalive
- utrzymywanie połączenia
up, down
- co ma się wykonać po nawiązaniu połączenia oraz
jego zakończeniu. Szerzej o tym poniżej.
up
- akcje wykonywane po nawiązaniu połączenia.
up { ifconfig "%% 192.168.2.10 pointopoint 192.168.2.11 mtu 1450"; route "add -host 192.168.2.11 gw 192.168.2.10"; };
Po nawiązaniu połączenia należy uruchomić odpowiedni interfejs. Jego nazwa zostanie rozwiązana dzięki zmiennej %%. Określamy oczywiście typ interfejsu oraz jego MTU. Kolejną czynnością jest podanie trasy do drugiego końca tunelu. Adres IP po prawej stronie jest oczywiście adresem naszego (czyli serwera) końca i przez niego prowadzi droga na drugą stronę.
down
- czynności następujące po wyłączeniu tunelu.
down { ifconfig "%% down"; ifconfig "%% delete"; route "delete -host 192.168.2.11" };
Po zakończeniu działania połączenia powinniśmy wyłączyć oraz skasować interfejs kt�ry nam do
niego służył. Usuwamy r�wnież zbędną trasę do drugiego końca tunelu z tablicy routingu. Zwr�ć
uwagę na konstrukcję tych dw�ch podsekcji. polecenie "argument"
. Polecenie
zostało określone w sekcji options
, natomiast argumentami są odpowiednie
parametry danego polecenia.
Na tym kończy się konfiguracja serwera. Możemy przystąpić teraz do konfiguracji klienta.
Konfigurację klienta zaczniemy od edycji pliku
/etc/sysconfig/vtun
. Opcje w nim zawarte
powinieneś ustawić zgodnie z tym co jest przedstawione na
listingu.
VTUND_MODE="client" VTUND_SESSION="vpn1" VTUND_SERVER_ADDR="123.45.67.89" VTUND_SERVER_PORT="5000"
VTUND_MODE
- tryb pracy demona.
VTUND_SESSION
- nazwa sesji, kt�rą ustawimy w pliku
konfiguracyjnym
VTUND_SERVER_ADDR
- publiczny adres IP serwera.
VTUND_SERVER_PORT
- port na kt�rym nasłuchuje serwer.
R�wnież po stronie klienta musimy wyedytować plik /etc/vtund.conf
. Także
i tutaj możemy mu zmienić nazwę na vtund.conf.orig
, aby zachować
przykłady konfiguracji. Krok po kroku om�wię sekcje vtund.conf
po
stronie klienta.
options { type stand; port 5000; syslog daemon; timeout 60; ppp /usr/sbin/pppd; ifconfig /sbin/ifconfig; route /sbin/route; firewall /sbin/iptables; ip /sbin/ip; }
type
- tryb pracy VTuna. Na listingu ustawiony został
standalone
.
port
- port na kt�rym nasłuchuje VTun.
syslog
- logi VTuna zbierane będą przez syslog.
timeout
- timeout VTuna.
ppp, ifconfig, route, firewall, ip
- ścieżki do program�w
wykorzystywanych w czasie konfiguracji.
Przystępujemy teraz do konfiguracji połączenia o nazwie vpn1
. Jak pamiętasz
nazwa została już wstępnie określona w pliku /etc/sysconfig/vtun
.
vpn1 { passwd tajne.haslo; type tun; proto tcp; compress zlib:9; encrypt yes; keepalive yes; stat yes; persist yes; up { ... }; down { ... }; }
passwd
- hasło kt�re posłuży nam do szyfrowania
połączenia.
type
- typ tunelu, w przykładzie jest to tunel IP.
proto
- protok�ł warstwy transmisyjnej tunelu.
compress
- typ oraz stopień kompresji. Na listingu ustawiona
została kompresja przy użyciu zlib dziewiątego stopnia.
encrypt
- włączamy szyfrowanie połączenia.
keepalive
- utrzymywanie połączenia w przypadku braku
ruchu na interfejsie tunelu.
stat
- statystyki pracy tunelu, kt�re VTun będzie zapisywał
do sysloga co pięć minut.
persist
- opcja ustawiona tak jak na listingu sprawi, że w przypadku
zerwania połączenia z serwerem klient będzie nawiązywał połączenie.
up, down
- programy wykonywane po nawiązaniu połączenia i po jego
zerwaniu.
up { ifconfig "%% 192.168.2.11 pointopoint 192.168.2.10 mtu 1450"; route "add -host 192.168.2.10 gw 192.168.2.11"; };
Poleceniem ifconfig uruchamiamy interfejs naszego tunelu o parametrach
takich jakie zostały podane w przykładzie. Następnym krokiem jest wyznaczenie trasy do naszego
serwera, czyli drugiego końca tunelu. Jak doskonale widać, ta część konfiguracji jest
analogiczna do serwera. Należy tylko zwr�cić uwagę na adresację. Adres następujący po
parametrze gw
określa nasz (czyli klienta) koniec tunelu. Przez niego wiedzie
droga na drugi koniec.
down { ifconfig "%% down"; ifconfig "%% delete"; route "del -host 192.168.2.10"; };
Polecenia kt�re się wykonają po zamknięciu połączenia. Kolejno, wyłączamy oraz kasujemy interfejs tunelu. Następnie kasujemy z tablicy routingu trasę do serwera.
Na tym kończy się etap konfiguracji VTuna. Możemy przejść do jego uruchomienia.
Uruchomienie VTuna sprowadza się do wykonania jednego polecenia na serwerze oraz kliencie.
# /etc/rc.d/init.d/vtund start
Po jego wykonaniu na komputerach będących końcami tunelu za kilka chwil powinny
się utworzyć interfejsy tun0
. Numeracja zaczyna się od "0".
Nazwy kolejnych interfejs�w będą kończyć się następną w kolejności liczbą
naturalną.
W PLD głï¿½wnym pakietem narzędzi sieciowych jest iproute2™, oferuje on większe możliwości oraz bardziej ujednolicony interfejs obsługi w stosunku do narzędzi z pakietu net-tools™ (ifconfig, route, arp, ifup, ifdown). Sercem pakietu iproute2™ jest program ip zawierający funkcjonalność kilku starszych narzędzi w jednym. Z tego względu będzie naszym podstawowym narzędziem sieciowym.
Jako dodatek do niniejszego rozdziału, pragnę polecić lekturę opisu najprostszych narzędzi sieciowych (ping, traceroute), kt�ry można znaleźć w „Podstawowe narzędzia kontroli sieci TCP/IP” oraz opis zarządzania routingiem statycznym zamieszczony w „Routing statyczny”.
Aby wyświetlić konfigurację interfejs�w użyjemy polecenia ip addr.
# ip addr 1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:50:8d:e1:e8:83 brd ff:ff:ff:ff:ff:ff inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0 inet 10.0.0.22/24 brd 10.0.0.255 scope global secondary eth0 inet6 fe80::250:8dff:fee1:e883/64 scope link valid_lft forever preferred_lft forever 3: sit0: <NOARP> mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.0
Polecenie wyświetliło listę dostępnych interfejs�w, każdy z nich oznaczony jest numerem porządkowym. W większości wypadk�w najbardziej interesujące są dla nas interfejsy fizyczne (eth0 na powyższym przykładzie). Interfejsy lo oraz sit0, są "wirtualnymi" interfejsami, pierwszy z nich to interfejs pętli zwrotnej (loopback), drugi służy do tunelowania protokołu IPv6 wewnątrz IPv4.
Tryb pracy urządzenia jest wyświetlany wewnątrz tr�jkątnych nawias�w, oto kilka oznaczeń:
UP - urządzenie działa
LOOPBACK - interfejs pętli zwrotnej
BROADCAST - urządzenie ma możliwość wysyłania komunikat�w rozgłoszeniowych
MULTICAST - interfejs może być używany do transmisji typu multicast
PROMISC - tryb nasłuchiwania, używany przez monitory sieci i sniffery
NO-CARRIER - brak nośnej, komunikat spotykany zwykle w wypadku braku fizycznego połączenia z siecią
Poniżej omawianego wiersza wyświetlone zostały informacje o adresach związanych z urządzeniem (adresy IP i maski podsieci są przedstawione w notacji CIDR):
-link/ether - adres fizyczny karty sieciowej (MAC)
-inet - dane protokołu IPv4
-inet6 - dane protokołu IPv6
Do najczęstszych operacji tego typu należy włączanie i wyłączanie interfejs�w, w tym celu użyjemy następującego polecenia:
ip link set {$interfejs} {up/down}
# ip link set eth0 up # ip link set eth0 down
Dodawanie/usuwanie adres�w IP interfejsu:
ip addr {add/del} {$adresIP}/{$maska} dev {$interfejs}
# ip addr add 10.1.1.1/24 dev eth0 # ip addr del 10.1.1.1/24 dev eth0
Do odczytania adresu sprzętowego lokalnych kart sieciowych możemy użyć opisanego wcześniej polecenia ip addr. Aby odczytać MAC zdalnej maszyny użyjemy programu arping {$nazwa/$IP} np.:
# arping 10.0.0.100 ARPING 10.0.0.100 from 10.0.0.1 eth0 Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8] 4.250ms Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8] 0.976ms Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8] 0.929ms
Dowolny adres MAC karty sieciowej ustawimy poleceniem:
ip link set {$interfejs} address {$MAC-adres}
# ip link set eth0 address 01:01:01:01:01:01
Aby adres sprzętowy za każdym razem był ustawiany dla
interfejsu, powinniśmy dokonać odpowiedniego wpisu w pliku
konfiguracyjnym interfejsu. W przypadku urządzenia eth0
musimy zmodyfikować plik
/etc/sysconfig/interfaces/ifcfg-eth0
,
i dodać zmienną MACADDR np.:
MACADDR="01:01:01:01:01:01"
Aby wyświetlić tablicę ARP należy użyć polecenia ip neighbour:
# ip neighbour 10.0.0.140 ether 00:E0:7D:A1:8B:E2 C eth0 10.0.0.2 ether 4C:00:10:54:19:50 C eth0 10.0.0.100 ether 00:04:ED:07:25:F8 C eth0
Tablica ARP wypełnia się w miarę komunikowania się z innymi hostami, aby wymusić zbadanie działania protokołu ARP wystarczy zainicjować komunikację. Możemy użyć do tego programu ping.
Możemy stworzyć własną, statyczną tablicę ARP, posłuży nam do
tego plik /etc/sysconfig/static-arp
w
kt�rym umieszczamy wpisy zawierające kolejno: interfejs, adres MAC,
adres IP oraz status wpisu.
eth0 00:80:48:12:c2:3c 192.168.10.10 permanent eth0 00:c0:df:f9:4e:ac 10.0.0.7 permanent
Opcja permanent oznacza, że wpis nigdy nie wygasa.
Do odpytywania serwer�w DNS możemy użyć programu host z pakietu bind-utils™. Pozwala na szybkie sprawdzenie poprawności konfiguracji domeny (strefy).
host {$nazwa/$IP} {$dns_nazwa/$dns_IP}
Pierwszy parametr to nazwa domeny lub IP maszyny,
drugi parametr nie jest obowiązkowy - wskazuje na serwer nazw,
kt�ry chcemy odpytać. Jeśli nie podamy drugiego parametru
użyty zostanie serwer zdefiniowany w pliku /etc/resolv.conf
.
Odpytanie serwera DNS o domenę, wpisanego do pliku /etc/resolv.conf
$ host pld-linux.org pld-linux.org has address 217.149.246.8
Odpytanie o adres IP (odwzorowanie odwrotne)
$ host 217.149.246.8 8.246.149.217.in-addr.arpa domain name pointer webmachine.pld-linux.org.
Odpytanie dowolnego serwera DNS
$ host pld-linux.org ns4.pld-linux.org. Using domain server: Name: ns4.pld-linux.org. Address: 217.149.246.7#53 Aliases: pld-linux.org has address 217.149.246.8
Aby odczytać konkretny rekord domeny użyjemy parametru "-t". Dla przykładu spr�bujemy określić rekord MX dla domeny pld-linux.org:
$ host -t mx pld-linux.org pld-linux.org mail is handled by 0 a.mx.pld-linux.org.
W celu poznania szczeg�łï¿½w zarejestrowanej domeny (np. obsługujące ją serwery nazw) możemy posłużyć się programem whois:
$ whois pld-linux.org
Aby sprawdzić przepustowość sieci pomiędzy dwoma hostami możemy użyć programu iperf. Jest to program typu klient-serwer sprawdzający na kilka sposob�w przepustowość połączenia. Rozpoczynamy od instalacji programu na obu interesujących nas maszynach, następnie na jednej z maszyn uruchamiamy program w trybie serwera:
$ iperf -s
a na drugiej w trybie klienta - iperf -c {$adres_serwera} np.:
$ iperf -c 192.168.0.5
Po chwili odczytujemy wyniki testu.
Nawiązane połączenia i otwarte porty protokołu TCP/IP możemy kontrolować za pomocą programu netstat np.:
# netstat -tua Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:blackjack *:* LISTEN tcp 0 0 *:ircs *:* LISTEN tcp 0 0 *:netbios-ssn *:* LISTEN tcp 0 0 *:ipp *:* LISTEN tcp 0 0 *:microsoft-ds *:* LISTEN tcp 0 0 gargamel:ircs 192.168.1.3:rapidmq-reg ESTABLISHED tcp 0 0 gargamel:imaps 192.168.1.6:ttc-etap-ds ESTABLISHED tcp 0 0 gargamel:td-postman host-92.gadugadu.p:8074 ESTABLISHED tcp 0 0 gargamel:cma chrome.pl:5223 ESTABLISHED tcp 0 0 *:1024 *:* LISTEN udp 0 0 gargamel:netbios-ns *:* udp 0 0 *:netbios-ns *:* udp 0 0 *:ipp *:*
Na powyższym przykładzie zostały wyświetlone dane dotyczące protokołu TCP
(opcja: -t
) oraz UDP
(-u
). Dodatkowo zostały wyświetlone
gniazda nasłuchujące (-a
). Warte
uwagi są jeszcze dwa parametry: -n
i -p
, pierwszy wyświetla porty i
adresy w postaci liczb, drugi zaś wyświetla nazwy program�w
korzystających z danych gniazd.
Do analizowania wielkości ruchu sieciowego na interfejsie polecam program nload, jest to proste narzędzie rysujące wykresy pomocą znak�w ASCII. Podstawowe statystyki możemy przeglądać dzięki programowi ip np. ip -s link, dokładniejsze dane otrzymamy dzięki programowi iptraf™.
Wygodnym sposobem śledzenia wybranego ruchu sieciowego jest użycie regułek linuksowego filtra pakiet�w. Do śledzenia ruchu służy cel "-j LOG" np.:
# iptables -A INPUT -p TCP --dport 80 -s 10.0.0.3 -j LOG
Powyższy wpis doda do łańcucha INPUT regułkę rejestrującą
połączenia TCP z hosta 10.0.0.3 na port 80 danej maszyny.
Aby te regułki działały z wpisami odrzucającymi pakiety
(DROP/REJECT) muszą być analizowane wcześniej, w przeciwnym
wypadku pakiet nigdy nie dotrze do regułki rejestrującej.
W przypadku dopasowania pakietu do regułki następuje
odnotowanie tego zdarzenia, wpisy te można odczytywać
za pomocą programu dmesg, lub z plik�w syslog-a -
zwykle z /var/log/kernel
i
/var/log/messages
.
Dużo bardziej szczeg�łowe informacje o ruchu sieciowym otrzymamy dzięki programowi tcpdump, jest to rozbudowany sniffer i program do analizy pakiet�w.
W przypadku modyfikacji plik�w konfiguracji w większości wypadk�w trzeba dokonać restartu podsystemu sieci.
W tym rozdziale opisano niewielki fragment możliwości dostępnych narzędzi sieciowych. Poniższa lista przedstawia miejsca gdzie można znaleźć szerszy opis niekt�rych zagadnień.
NET-3-HOWTO z http://www.jtz.org.pl/
Zaawansowany routing: http://echelon.pl/pubs/NET4.pdf
Dokumentacja iproute2 http://www.policyrouting.org/iproute2-toc.html
Spis treści
W rozdziale tym przedstawimy opis instalacji i konfiguracji ważniejszych usług dostępnych w PLD
Usługi w PLD są przygotowane do natychmiastowego uruchomienia, wystarczy wyedytować pliki konfiguracji i można korzystać z programu. Zanim jednak zaczniemy pracować z usługami warto zapoznać się z opisem zarządzania usługami zawartym w „Zarządzanie podsystemami i usługami”.
Z wieloma demonami dostarczane są przykładowe pliki
konfiguracji, kt�rymi możemy się sugerować przy
konfigurowaniu aplikacji, przykłady te są umieszczane w
dokumentacji programu, w katalogu /usr/share/doc
.
Ponadto, zanim uruchomimy usługę, powinniśmy przyjrzeć się
konfiguracji startowej demona, kt�ra umieszczana jest w pliku
konfiguracji rc-skryptu - plik ten przychodzi wraz z pakietem
i umieszczany jest w katalogu
/etc/sysconfig
. Zwykle zamieszczone w nim
opcje odpowiadają argumentom programu demona, są też opcje
określające np. priorytet programu i inne właściwości.
W trakcie uruchamiania usługi zdarzają się trudne do odnalezienia
problemy. Pierwszą rzeczą jaką powinniśmy w takim wypadku zrobić
to przeczesać logi programu, w takich wypadkach niejednokrotnie
pomaga włączenie większej "gadatliwości" demona. Wygodnym sposobem
szukania błęd�w jest uruchomienie demona na pierwszym planie
(bez przejścia w tło), w takich wypadkach często demony wysyłają
komunikaty na standardowe wyjście. W trudniejszych przypadkach
będziemy zmuszeni użycia programu strace
w celu śledzenia wywołań systemowych aplikacji. W wypadku
demon�w powinniśmy użyć opcji -f
, aby śledzić
r�wnież procesy potomne lub uruchomić demona z wyłączonym
forkowaniem proces�w. Opisane tu
czynności są specyficzne dla każdego z demon�w, zatem musimy
skorzystać z dokumentacji właściwej aplikacji.
Aktualizacja niekt�rych demon�w wiąże się z pewnymi czynnościami przygotowawczymi i poprawkami, problem ten dotyczy szczeg�lnie silnik�w baz danych. Zanim bezmyślnie zaktualizujemy pakiet, należy dokładnie zapoznać się z dokumentacją produktu, aby uchronić się przed unieruchomieniem usługi na dobre.
W PLD usługi, podobnie jak inne oprogramowanie, kompilowane jest z najczęściej używanymi opcjami, jeśli program nie obsługuje jakichś funkcji, to powinniśmy sprawdzić czy uzyskamy je samodzielnie budując pakiet, więcej na ten temat odnajdziemy w „Budowanie pakiet�w”.
Obecnie w Linuksie do obsługi dźwięku stosuje się system ALSA™ (ang: Advanced Linux Sound Architecture), będący następcą systemu OSS™. ALSA to zestaw modułï¿½w jądra oraz kilku narzędzi pomocniczych, moduły możemy ładować za pomocą systemu UDEV™ lub statycznie, obydwie metody będą opisane w tym rozdziale. Druga z metod jest bardziej złożona, dlatego początkujących zachęcamy do korzystania z metody opartej o system UDEV.
Zaczynamy od pakietu zawierającego moduły kernela:
$ poldek -i kernel-sound-alsa
Potrzebujemy jeszcze kilku narzędzi, w tym programu do zarządzania mikserem:
$ poldek -i alsa-utils
W og�le nie należy instalować pakietu kernel-sound-oss, ALSA potrafi emulować OSS.
Niezaawansowanym zalecamy użycie udeva zamiast statycznej konfiguracji (opisanej dalej), ze względu na łatwiejszą konfigurację. Zakładam, że w systemie mamy działający UDEV, instalujemy pakiet z rc-skryptem, koniecznym do zapisywania stanu miksera (inicjacja miksera jest wykonywana bezpośrednio przez UDEV):
$ poldek -i alsa-udev
i uruchamiamy go
# /etc/init.d/alsa-udev start
Nie należy sie martwić, że nic się nie wyświetla po jego uruchomieniu,
parametr start
nic nie robi.
Najprawdopodobniej mamy już załadowane właściwe moduły i jedyne co pozostaje nam to
w mikserze ustawić głośność i wyłączyć wyciszenie, co zostało opisane
w dalszej części rozdziału. Więcej o systemie UDEV w „Udev - dynamiczna obsługa sprzętu”.
Konfiguracja statyczna jest alternatywną metodą w stosunku do powyższej. Zaczynamy od zainstalowania pakietu alsa-utils-init:
$ poldek -i alsa-utils-init
Teraz musimy postarać się o dodanie koniecznych alias�w do pliku
/etc/modprobe.conf
, kt�re posłużą do załadowania
koniecznych modułï¿½w, przez zainstalowany przed chwilą rc-skrypt.
Możemy wykonać to na dwa sposoby:
samodzielnie - za pomocą dowolnego edytora tekstu;
wpisy możemy skopiować z opisu Driver & Docs
,
urządzenia odnalezionego na liście obsługiwanego sprzętu
za pomocą programu alsaconf, kt�ry wykryje urządzenie i dokona koniecznych wpis�w
Pierwsza z metod jest tak oczywista, że zajmiemy się tylko drugą z wymienionych. Na początek musimy się upewnić, że mamy pakiet pciutils™ i uruchamiamy program:
# /usr/sbin/alsaconf
Po ukazaniu się ekranu z napisem "Searching sound cards" czekamy ok. 10 sekund i wciskamy ctrl-c (konfigurator szybko znajduje naszą właściwą kartę - a ponieważ szuka r�wnież kart starego typu oraz r�żnych egzotycznych, co zajmuje mu bardzo dużo czasu dlatego przerywamy wyszukiwanie). Następne okno pokazuje nam listę znalezionych kart muzycznych (zwykle jedną). Zatwierdzamy wyświetloną kartę i na pytanie:
Do you want to modify /etc/modprobe.conf?
Odpowiadamy twierdząco, spowoduje to dopisanie odpowiednich alias�w modułï¿½w do pliku konfigurującego. Kiedy progam zakończy działanie, uruchamiamy rc-skrypt:
# /etc/init.d/alsasound start
Teraz pozostaje nam ustawić głośność w mikserze oraz wyłączyć wyciszenie.
Domyślnie wszystkie "suwaki" miksera są ustawione na zero i dodatkowo włączone jest wyciszenie (mute), aby to zmienić musimy uruchomić program alsamixer lub amixer:
# /usr/bin/alsamixer
Wyłączmy mute (klawisz m) i przesuwamy "suwaki" (strzałkami)
kanału Master
i PCM
.
Teraz możemy przetestować ustawienia z poziomu root-a,
możemy to zrobić odsłuchując dowolny plik wav (np. z pakietu
gnome-audio):
# /usr/bin/aplay test.wav
lub plik mp3 (wymagany pakiet "alsaplayer" oraz "alsaplayer-input-mad"):
# /usr/bin/alsaplayer -o alsa test.mp3
To już praktycznie koniec instalacji. Pamiętać należy, że do niekt�rych program�w należy doczytać odpowiednie wtyczki, kt�re umożliwią prace z ALSA™-ą. Wtyczki te łatwo rozpoznać po dopisce "alsa" w nazwie pakietu.
Na koniec pozostaje nam nadać uprawnienia wybranym użytkownikom, do obsługi dźwięku. Musimy zapisać użytkownik�w do grupy audio np.:
# usermod -A jkowalski audio
Więcej o uprawnieniach w „Grupy”.
W wielu przypadkach okazuje się, że posiadamy kartę
muzyczną, kt�ra nie potrafi miksować dźwięku
sprzętowo - co powoduje m.in., że jednocześnie może z
karty korzystać jeden program lub proces. Zdarza się
także, że niekt�re programy na sztywno pr�bują
połączyć się np. z OSS w celu obsługi dźwięku (np.
Skype™). W takim przypadku możemy
skorzystać z wtyczki ALSA™-y
o nazwie dmix. Wbrew nazwie nie
musimy niczego dogrywać - wszystko odbywa się w
plikach tekstowych: /etc/asound
(gdy chcemy
ustawień globalnych) lub
~/.asoundrc
(czyli indywidualnych
ustawień dla każdego użytkownika). Przykładowy wpis
przedstawimy poniżej - po więcej szczeg�łï¿½w odsyłamy
na strony projektu ALSA (www.alsa-project.org):
# definiujemy urządzenie wirtualne nazwane przez nas demixer # do kt�rego p�źniej będziemy się odwoływać: pcm.demixer { type dmix # typ urządzenia, tutaj "dmix" ipc_key 1024 # numer musi być unikalny slave { pcm "hw:0,0" # you cannot use a "plug" device here, darn. period_time 0 buffer_time 0 period_size 1024 # must be power of 2 and much smoother # than 1024/8192! buffer_size 8196 # must be power of 2 and for Audiophile # card (ICE1712 chip) or a VIA VT82xx # (snd-via82xx) must be less 6652 #format "S32_LE" periods 128 rate 44100 # with rate 44100 Hz you *will* hear, # if demixer is used } # bindings are cool. This says, that only the first # two channels are to be used by dmix, which is enough for # (most) oss apps and also lets multichannel chios work # much faster: # # Wskazujemy że tylko dwa pierwsze kanały bedą używane # przez demixer (czyli tutaj dmix) bindings { 0 0 # from 0 => to 0 1 1 # from 1 => to 1 } } # koniec konfiguracji wirtualnego urządzenia demixer # następnie ustawiamy przekierowanie z wybranych # urządzeń do wirtualnego urządzenia demixer: # możemy przekierowywać z następujących urządzeń OSS: # /dev/audio # /dev/dsp # /dev/dspW # /dev/midi # /dev/mixer # /dev/music # /dev/sequencer (recording doesn't work yet) # /dev/sequencer2 # dla /dev/dsp0 pcm.dsp0 { type plug slave.pcm "demixer" } # dla /dev/dsp pcm.dsp { type plug slave.pcm "demixer" } # Software mixing for all aplications # uses ALSA "default" device # # Wszystkie aplikacje korzystające z urządzenia # default ALSA-y przekierowujemy do miksera # czyli wszystko przechodzi przez dmix pcm.!default { type plug slave.pcm "demixer" } # OSS device /dev/mixer0 use hardware # Urządzenie OSS /dev/mixer0 bez zmian # obsługuje pierwszą (0) kartę audio bezpośrednio ctl.mixer0 { type hw card 0 }
Jeśli chcemy jedynie przekierować dźwięk z program�w obsługujących tylko OSS™ do ALSA™, bez programowego miksowania (czyli bez używania dmix) wystarczy że wpiszemy tylko:
# from /dev/dsp0 to ALSA pcm.dsp0 { type plug slave.pcm "hw:0" } # lub: # pcm.dsp0 pcm.default # jeśli "default" nie było redefiniowane ctl.mixer0 { type hw card 0 }
Natomiast najprostsze przekierowanie z /dev/dsp0 do dmix wygląda tak:
pcm.dsp0 { type plug slave.pcm "dmix" }
Dla chipset�w nvidia nforce(2) (intel8x0) oraz C-media konfiguracja powinna wyglądać na przykład tak:
pcm.nforce-hw { type hw card 0 } pcm.!default { type plug slave.pcm "nforce" } pcm.nforce { type dmix ipc_key 1234 slave { pcm "hw:0,0" period_time 0 period_size 1024 buffer_size 4096 #rate 44100 rate 48000 } } ctl.nforce-hw { type hw card 0 }
Następnie możemy przetestować nasz "dmix" czyli urządzenie demixer
alsaplayer -o alsa -d demixer test.mp3
ponieważ wcześniej zdefiniowaliśmy urządzenie "default", ALSA™ kieruje wszystko na urządzenie "demixer" - co jest r�wnoważne:
alsaplayer -o alsa test.mp3
To tylko podstawowe przykłady działania jakie daje nam ALSA™, a dzięki olbrzymim możliwościom definiowania dowolnych urządzeń wirtualnych i przekierowywania dźwięku, możemy uzyskać ciekawe i r�żnorodne efekty. Więcej o konfiguracji urządzeń PCM znajdziemy tutaj: www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html.
Przy pracy z pluginem "dmix" nie należy zapomnieć o wyłączeniu demon�w ARTs i ESD gdyż w przeciwnym razie mogą pojawić się op�źnienie w odtwarzaniu dźwięk�w i zakłï¿½cenia w niekt�rych programach, gdyż wiele z nich pr�buje najpierw korzystać z w/w demon�w dźwięku.
Więcej o dźwięku pod Linuksem na stronie linux-muzyka.ixion.pl/.
Każdy, nawet początkujący użytkownik sieci internet zetknął się z apaczem świadomie lub nie. Apache jest oprogramowaniem, kt�re można powiedzieć zdominowało w pewnym stopniu rynek aplikacji serwerowych. Do działania wykorzystuje on protok�ł HTTP (RFC2616). Jak sama nazwa wskazuje Apache (a patche server) składa się z wielu modułï¿½w. Można to zauważyć już na pierwszy rzut oka. W tym rozdziale zostanie opisana autoryzacja, obsługa języka PHP, CGI, virtualhosts oraz og�lna jego konfiguracja. Przedstawiona poniżej oparta została o apache z serii 2.x.
Apache w PLD jest podzielony na wiele małych pakiet�w, możemy dzięki instalować
tylko potrzebne moduły. Jeśli nie możemy się połapać w tym gąszczu to możemy
posłużyć się metapakietem apache
, kt�ry za pośrednictwem
mechanizmu zależności zainstaluje najważniejsze pakiety.
# poldek -i apache
Kiedy będziemy mieli zainstalowane wymagane pakiety, będziemy mogli wstępnie przetestować serwer, zatem uruchomimy usługę:
# service httpd start
W katalogu /home/services/httpd
umieszczamy jakąś testową stronę WWW
kt�rą nazwiemy np. test.html i sprawdzamy za pomocą przeglądarki czy się prawidłowo wyświetla:
$ elinks localhost/test.html
Jeśli wszystko jest w porządku, to możemy przejść do właściwej konfiguracji serwera.
Tytułem wstępu pragnę powiedzieć, że niniejszy dokument nie może być traktowany jako dokumentacja do Apache. Ma on na celu ułatwienie użytkownikowi zapoznania się z usługą oraz kilkoma jej możliwościami. Po bardziej szczeg�łowe informacje odsyłam do stron podręcznika systemowego (man) oraz dokumentacji on-line
/etc/httpd/httpd.conf
-
w tym katalogu przechowywane są pliki konfiguracyjne demona.
Po instalacji poszczeg�lnych składnik�w Apache, właśnie
w tym miejscu należy szukać plik�w konfiguracyjnych od nich.
/home/services/httpd
- pliki domyślnej strony Apache,
katalog z komunikatami o błędach oraz katalog przeznaczony
dla skrypt�w cgi.
/usr/lib/apache
- moduły potrzebne do działania
Apache oraz poszczeg�lnych jego składnik�w. Warto o tym
pamiętać w przypadku problem�w z uruchomieniem usługi.
/usr/sbin
- jest to katalog należący stricte do Apache, jednak warto
o nim wspomnieć ze względu na to iż przechowywane są w nim
jego binaria. Aby się dowiedzieć kt�re należą do niego
wydaj następujące polecenie
# rpm -ql apache |grep ^\/usr\/sbin
Aby nasz serwer obsługiwał dodatkowe funkcje musimy zainstalować odpowiednie moduły, wraz z modułami dostarczane, są pliki konfiguracji z dyrektywami konfiguracyjnymi dla tego modułu.
Apache domyślnie działa z uprawnieniami zwykłego użytkownika (http), dlatego trzeba zadbać o to by demon miał prawo do odczytu plik�w ze stronami WWW.
Bardzo pożyteczną cechą Apache jest możliwość
tworzenia lokalnych plik�w konfiguracji, dzięki kt�rym
możemy modyfikować niekt�re opcje konfiguracji. Pliki te
mają nazwę .htaccess
i może ich używać
każdy, kto ma tylko dostęp do katalogu ze stroną WWW. Wygoda w
ich używaniu polega na tym, że nie ma potrzeby restartowania
demona po każdorazowej ich modyfikacji.
Głï¿½wnym plikiem konfiguracyjnym jest /etc/httpd/apache.conf
.
Spośr�d wielu opcji w tym pliku zajmiemy się dwiema podstawowymi:
ServerAdmin [email protected]
Powinieneś tutaj wpisać kontaktowy adres e-mail do siebie jako administratora tego serwera.
Poniżej znajduje się opcja ServerName
. Powinna ona
wyglądać tak jak w poniższym przykładzie.
ServerName example.net:80
Dosłownie jest to nazwa tego serwera. A dokładniej nazwa domenowa skonfigurowana na serwerze nazw opiekującym się Twoją domeną. Jeżeli nie posiadasz zarejestrowanej domeny, powinieneś wpisać tutaj adres IP.
Teraz zajmiemy się opcją DocumentRoot
, kt�rą odnajdziemy w
/etc/httpd/conf.d/10_common.conf
Określa ona domyślny
katalog w kt�rym będzie przechowywana strona internetowa. Wpisując
nazwę lub adres IP określony przez ServerName
właśnie
z tego katalogu zostaną pobrane i wczytane przez przeglądarkę pliki
strony.
DocumentRoot "/home/services/httpd/html"
Domyślnie wszystkie żądania są tutaj skierowane. Ta lokalizacja nie jest obligatoryjna, więc nie musisz się jej trzymać. Może zostać zmieniona przy użyciu dowiązań symbolicznych lub alias�w wskazujących w inne miejsca.
Zgodnie z obecnym standardem tworzenia stron internetowych, domyślnym
plikiem kt�ry jest automatycznie wczytywany po wpisaniu w
przeglądarce adresu jest index
, kt�ry w
zależności od konstrukcji strony może mieć r�żne rozszerzenia. A
więc skąd Apache wie, co ma zostać wczytane jako pierwsze? Do tego
właśnie służy pakiet apache-mod_dir
. Jego plikiem
konfiguracyjnym jest
/etc/httpd/httpd.conf/59_mod_dir.conf
Poprzez dyrektywę DirectoryIndex
określa się czego i w
jakiej kolejności ma szukać przeglądarka.
DirectoryIndex index.html index.html.var index.htm index.shtml \ index.cgi index.php
Oczywiście możemy podawać tutaj r�żne nazwy plik�w startowych stron w zależności od naszych potrzeb.
Swobodne publikowanie stron internetowych przez użytkownik�w
jest możliwe dzięki pakietowi apache-mod_userdir
.
Opcja UserDir
w pliku 16_mod_userdir.conf
definiuje nazwę katalogu przechowującego strony użytkownik�w wewnątrz
ich katalog�w domowych.
UserDir public_html
Przykład: Użytkownik Jan Kowalski posiada konto o nazwie: jan.
W /home/users/jan
jest jego katalog
domowy. Swoją stronę internetową umieszcza w katalogu
/home/users/jan/public_html
,
zaś dostęp do nie uzyskuje za pomocą adresu http://example.net/~jan
.
Aby
strona się wyświetliła należy ustawić odpowiednie prawa dostępu - tak by
Apache (domyślnie z prawami użytkownika http) miał prawo do odczytu. Katalog
domowy jan powinien mieć ustawione prawa
711
. Katalog przechowujący jego stronę czyli
public_html
powinien mieć 755
.
Każdy katalog zawierający elementy strony powinien mieć r�wnież uprawnienia
755
. Pliki strony natomiast
644
.
Mechanizm host�w wirtualnych pozwala obsługiwać strony o r�żnych adresach domenowych na jednej maszynie. Mechanizm ten jest realizowany na dwa sposoby: hosty oparte o adresy IP oraz oparte o nazwy, pierwsza z metod wymaga osobnego adresu IP dla każdego wirtualnego hosta, drugi zaś korzysta z jednego. Z oczywistych względ�w dużo bardziej popularna jest druga z metod i właśnie ją będziemy opisywać.
Obsługa host�w wirtualnych jest związana z odpowiednią konfiguracją
domen w systemie DNS - wymaga wpis�w typu IN A
wskazujących na nasz serwer WWW. Konfigurację serwera DNS
opisano w „BIND - Serwer Nazw” i będzie docelowo
konieczna, jednak dla potrzeb testowych wystarczą nam wpisy
w pliku /etc/hosts
, kt�ry z kolei
został opisany w „Podstawowa konfiguracja sieci”.
W naszym przykładzie dodamy obsługę domeny
moja-strona.com,
na początku należy stworzyć dodatkowy plik konfiguracji
(dla porządku) o nazwie np. vhosts.conf
, kt�ry
umieścimy w katalogu /etc/httpd/httpd.conf/
.
Zakładamy, że wszystkie vhosty będziemy trzymać w katalogu
/home/services/httpd/vhosts/
.
Plik będzie się zaczynał od następującego zestawu opcji:
NameVirtualHost * <Directory /home/services/httpd/vhosts> Order allow,deny Allow from all </Directory> <VirtualHost _default_> DocumentRoot /home/services/httpd/html/ </VirtualHost>
Opcja NameVirtualHost
wskazuje, kt�re adresy IP serwera mają
być używane do obsługi host�w witrualnych,
w tym wypadku wszystkie, co jest najczęściej spotykaną konfiguracją.
Sekcja Directory
zezwala na dostęp do
plik�w ze wskazanego katalogu. Pierwszy zdefiniowany virtualhost (_default_) ma
za zadanie wskazanie serwerowi domyślnej strony, wyświetlanej
w wypadku jeśli jakiś vhost nie jest skonfigurowany na naszym
serwerze, w przeciwnym razie wyświetli się strona pierwszego
w kolejności vhosta. Teraz możemy dodawać vhosty, wg. przykładu:
<VirtualHost *> ServerName moja-strona.com DocumentRoot /home/services/httpd/vhosts/moja_strona </VirtualHost>
Wewnątrz sekcji VirtualHost
znajduje
się opcja ServerName
, m�wiąca
o nazwie domenowej vhosta, a poniżej wskazanie są ścieżki
do katalogu z plikami strony.
Po uruchomieniu mechanizmu host�w wirtualnych całkowicie
bezużyteczne staną się globalne opcje ServerName
czy DocumentRoot
, od tej pory konfiguracja
w całości opiera się o vhosty.
W konfiguracji host�w wirtualnych możemy
umieszczać wiele opcji używanych w głï¿½wnym serwerze
(np.: ServerAdmin
, ErrorLog
),
tak zdefiniowane opcje przesłonią globalne wartości.
Istnieje możliwość masowego konfigurowania vhost�w,
bez konieczności tworzenia wpis�w dla każdego po
kolei, służy do tego moduł vhost-alias
dostarczany wraz z pakietem apache-mod_vhost_alias
.
Jego opis wykracza poza ramy tego rozdziału, więcej na
jego temat odnajdziemy w dokumentacji serwera.
Czasami chcemy ograniczyć możliwość przeglądania stron
dla konkretnych adres�w lub klas adresowych.
W tym celu użyjemy modułu apache-mod_authz_host
,
dzięki niemu będziemy mogli chronić przed dostępem
do wskazanych katalog�w. Jeżeli potrzebujesz chronić jedynie
jeden lub kilka plik�w, stw�rz w obrębie strony katalog
o dowolnej nazwie i umieść je w nim. Oczywiście musisz
pamiętać o przekonstruowaniu link�w na stronie.
Do konfiguracji Apache dodajemy podobną konstrukcję konstrukcję:
<Directory "/home/users/jan/public_html/intra"> Order allow,deny Allow from 123.45.0.0/255.255.0.0 Allow from 56.67.9.34 </Directory>
Dostęp do katalogu intra
mają wszystkie komputery z
określonej w przykładzie sieci oraz jeden komputer (bądź urządzenie
udostępniające NAT) o wymienionym adresie. Wszystkie połączenia nie pasujące
do tych kryteri�w traktowane są jako deny
, zgodnie z
porządkiem wyznaczonym przez dyrektywę Order
.
Apache udostępnia mechanizm autoryzacji, kt�ry używany jest do wyodrębnienia z serwisu pewnej części przeznaczonej dla upoważnionych użytkownik�w. Ograniczenie działa na poziomie katalog�w i podobnie jak w ograniczeniu dla adresu (opisanego powyżej) nie można w ten spos�b chronić poszczeg�lnych plik�w.
Apache wspiera wiele rodzaj�w źr�deł uwierzytelniających:
pliki tekstowe, konta systemowe, bazy LDAP i
inne. My będziemy zajmować się autoryzacją za pomocą
plik�w tekstowych, ze względu na popularność i prostotę
tego rozwiązania.
Istnieją dwa protokoły przesyłania hasła
Basic
i Digest
(w postaci skr�tu). Metoda Digest jest bezpieczniejsza
jednak praktycznie nie jest obsługiwana przez
przeglądarki WWW, tak więc pozostaje nam używanie
metody Basic.
Zaczynamy od instalacji metapakietu apache-mod_auth
oraz pakietu htpasswd-apache
.
Teraz dodajemy do kt�regoś z plik�w konfiguracji
regułkę chroniącą katalog :
<Directory "/home/users/jan/public_html/private"> AuthType Basic AuthBasicProvider file AuthName "Witaj Janie, zaloguj sie." AuthUserFile /home/services/httpd/.htpasswd Require valid-user </Directory>
Opcja AuthUserFile
wskazuje plik z
loginami i hasłami użytkownik�w, jak widać ścieżka ta
jest inna niż chroniony katalog ze względ�w bezpieczeństwa.
Opcja Require
określa jacy użytkownicy
są akceptowani - tutaj każdy autoryzowany.
Teraz tworzymy plik z hasłami, poprzez dodanie pierwszego konta:
# htpasswd -c /home/services/httpd/.htpasswd jan New password: Re-type new password: Adding password for user jan
Plikowi ustawiamy odpowiednie uprawnienia i własność,
aby dostęp do niego miał wyłącznie użytkownik http
:
# chmod 600 /home/services/httpd/.htpasswd # chown http.http /home/services/httpd/.htpasswd
Po restarcie każde odwołanie do katalogu będzie wymagało podania loginu jan i hasła. Istnieje także możliwość dodania obsługi grup - mechanizmu zbliżonego działaniem do uniksowych grup systemowych.
W wielu wypadkach będziemy chcieli dać możliwość
użytkownikom tworzenia plik�w z hasłami z wraz z
plikami .htaccess
w katalogu
określonym przez DocumentRoot
. Stanowi
to zagrożenie bezpieczeństwa, ze względu na możliwość
wyświetlenia zawartości tych plik�w. Możemy się
zabezpieczyć przed tym instalując pakiet
apache-mod_authz_host
,
dzięki kt�remu m.in. nie zostaną wysłane do przeglądarki
pliki .ht*
Ze względu na dużą funkcjonalność język PHP stał się już w zasadzie pewnym standardem w tworzeniu interaktywnych stron internetowych. Wsp�łczesne serwisy wykorzystują m. in. bazy danych, dlatego zostanie r�wnież opisane jak taką obsługę zapewnić. Przeglądając listę dostępnych do zainstalowania pakiet�w z PHP na pierwszy rzut oka widać nacisk tw�rc�w dystrybucji jaki został nałożony na modularność. Daje to niesamowitą wolność w wyborze tego co jest Ci dokładnie potrzebne.
Zaczynamy od instalacji pakietu apache-mod_php
, w ten spos�b
otrzymamy podstawową wersję PHP, dodatkowe pakiety
instalujemy wtedy gdy potrzebna nam jest jakaś funkcjonalność.
Najlepszą metodą sprawdzenia czy PHP działa jest użycie funkcji
phpinfo()
, aby z niej skorzystać stw�rz plik z
zawartością taką jak poniżej:
<? phpinfo(); ?>
następnie należy go umieść
w katalogu /home/services/httpd/html
,
pod nazwą np. info.php
.
Teraz wpisujemy w przeglądarce adres
http://example.net/info.php
, powinieneś uzyskać
informacje m. in. na temat wersji PHP, konfiguracji serwera
oraz obsługiwanych modułï¿½w.
Obsługa r�żnego typu system�w bazodanowych rozbita jest na osobne pakiety zawierające definicje funkcji PHP kt�re ją zapewniają. Poniżej w tabeli znajduje się lista kt�ra to odzwierciedla.
Tabela 16.1. Obsługa baz danych
Nazwa pakietu | Baza Danych |
---|---|
php-dba | Moduł dla PHP dodający obsługę dla baz danych opartych na plikach (DBA). |
php-dbase | Moduł PHP ze wsparciem dla DBase. |
php-filepro | Moduł PHP dodający możliwość dostępu (tylko do odczytu) do baz danych filePro. |
php-interbase | Moduł PHP umożliwiający dostęp do baz danych InterBase i Firebird. |
php-mssql | Moduł PHP dodający obsługę baz danych MS SQL poprzez bibliotekę FreeTDS. |
php-mysql | Moduł PHP umożliwiający dostęp do bazy danych MySQL. |
php-odbc | Moduł PHP ze wsparciem dla ODBC. |
php-pgsql | Moduł PHP umożliwiający dostęp do bazy danych PostgreSQL. |
php-sybase | Moduł PHP dodający obsługę baz danych Sybase oraz MS SQL poprzez bibliotekę SYBDB. |
php-sybase-ct | Moduł PHP dodający obsługę baz danych Sybase oraz MS SQL poprzez CT-lib. |
Aby skorzystać z kt�rego kolwiek modułu wystarczy go po prostu zainstalować. Przeprowadzając instalację w trybie wsadowym pamiętaj o zrestartowaniu usługi apache, o czym zostaniesz przez poldka poinformowany. Dystrybucja nie posiada niestety pakiet�w do obsługi bazy danych Oracle. Jeżeli jest Ci ona potrzebna musisz zbudować PHP włączając obsługę oracla z serwera CVS, instalując uprzednio Oracla kt�rego posiadasz.
Warto jeszcze wspomnieć o narzędziach wspomagających zarządzanie
bazami danych. Do obsługi bazy MySQL służy pakiet
phpMyAdmin
natomiast do PostgreSQL zainstaluj
phpPgAdmin
. Szerzej o tych aplikacjach w
dokumentacji do tych system�w.
Aby nasz Apache obsługiwał programy CGI wystarczy zainstalować
pakiet apache-mod_cgi
. Po przeładowaniu demona
programy CGI obsługiwane będa w katalogu
/home/services/httpd/cgi-bin
, zgodnie z ustawieniami
w pliku /etc/httpd/apache.conf
.
Żeby przetestować CGI wystarczy że utworzymy plik o następującej treści:
#!/bin/sh echo "Content-type: text/html\n\n" echo "Hello, World."
a następnie umieścimy go w odpowiednim katalogu z nazwą
np. cgi.sh
, nadamy mu prawo wykonywalności i
w przeglądarce podamy adres http://example.net/cgi-bin/cgi.sh.
Możemy do tego użyć r�wnież testowych skrypt�w przychodzących z
pakietem apache-cgi_test
.
Jeśli zechcemy wskazać więcej katalog�w w kt�rych pozwolimy uruchamiać
aplikacje CGI (np. dla host�w wirtualnych) wystarczy, że do kt�regoś
z plik�w konfiguracji dodamy odpowiednio skonfigurowaną opcję
ScriptAlias
np.:
ScriptAlias /cgi-bin/ "/home/users/jan/cgi-bin/"
Ze względ�w bezpieczeństwa autorzy Apache zalecają by taki katalog
leżał poza ścieżką wskazaną w opcji DocumentRoot
.
Mechanizm ten wykorzystuje się w serwisach wymagających od użytkownika autoryzacji. Najbardziej typowymi aplikacjami tego typu są r�żnego rodzaju klienci poczty. SSL zapewnia szyfrowany kanał dla informacji przepływającej od użytkownika do serwera. Dzięki temu niemożliwe jest podsłuchanie hasła. UWAGA! Jeden certyfikat SSL może zostać przypisany tylko dla jednego adresu IP.
Konfigurację zaczynamy od zainstalowania pakietu
apache-mod_ssl
. W wyniku instalacji utworzony
zostanie plik
/etc/httpd/httpd.conf/40_mod_ssl.conf
. Zanim
zaczniemy go konfigurować należy wygenerować certyfikaty. Służy do
tego polecenie openssl. Program ten znajduje się
w pakiecie openssl-tools
.
# openssl genrsa -out /etc/httpd/ssl/apache.key 1024
W wyniku tego polecenia zostanie utworzony plik
apache.key
kt�ry posłuży do tworzenia
certyfikatu. Robimy to w następujacy spos�b.
# openssl req -new -x509 -days 365 -key /etc/httpd/ssl/apache.key \ -out /etc/httpd/ssl/apache.crt
Proces tworzenia certyfikatu będzie wymagał podania kilku informacji. Zostaniesz o nie poproszony trakcie jego trwania.
Country Name (2 letter code) [AU]:PL State or Province Name (full name) [Some-State]:Wojew�dztwo Locality Name (eg, city) []:Miasto Organization Name (eg, company) [Internet Widgits Pty Ltd]: Firma Organizational Unit Name (eg, section) []:Web Server Common Name (eg, YOUR name) []:example.net Email Address []:[email protected]
Pola, kt�re widzisz w powyższym przykładzie należy wypełnić
zgodnie z tym jak zostało to przedstawione. W przypadku
kiedy serwer jest prywatną własnością i nie należy do żadnej
firmy, w polu Organization Name
możesz
wpisać imię i nazwisko. Para plik�w: klucz oraz
certyfikat powinny mieć takie uprawnienia, aby użytkownik
http
m�gł je odczytywać.
Możemy teraz wyedytować plik
/etc/httpd/httpd.conf/40_mod_ssl.conf
.
Pośr�d szeregu opcji interesuje nas w zasadzie tylko
konfiguracja katalogu, do kt�rego połączenie będzie
szyfrowane oraz ścieżki do plik�w z kluczem oraz
certyfikatem. Musimy odnaleźć początek sekcji o nazwie
VirtualHost
.
<VirtualHost _default_:443> DocumentRoot "/home/services/httpd/html/webmail" ServerName mail.example.net:443 ServerAdmin [email protected] ErrorLog /var/log/httpd/error_log TransferLog /var/log/httpd/access_log
Jak widać jej początek nie r�żni się niczym od konfiguracji VirtualHosts
.
Zwr�ć uwagę na opcję ServerName
. Powinna ona kończyć się ciągiem
:443 kt�ry oznacza port na kt�rym ma nasłuchiwać demon. Przechodzimy
dalej i zmieniamy takie opcje jak SSLCertificateFile
oraz
SSLCertificateKeyFile
.
SSLCertificateFile /etc/httpd/ssl/apache.crt SSLCertificateKeyFile /etc/httpd/ssl/apache.key
Podajemy tutaj ścieżki do plik�w kt�re wygenerowaliśmy w poprzednim etapie.
Po zapisaniu i zakończeniu edycji pliku restartujemy Apache, aby nasze zmiany odniosły
skutek. Aby nawiązać połączenie szyfrowane z webmailem należy w przeglądarce wpisać
adres https://example.net/webmail. Aby ustanowić połączenie szyfrowane
i za każdym razem nie wpisywać https://, powinieneś użyć mechanizmu
vhosts. Stw�rz katalog /home/services/httpd/html/mail
dla kt�rego zrobisz wpis w pliku 20_mod_vhost_alias.conf
. Czyli zgodnie
z tym czego już się dowiedziałeś, robisz wpis w pliku strefy domeny oraz konfigurujesz
apache. Natomiast w katalogu
/home/services/httpd/html/mail
tworzysz plik o nazwie
index.php
z zawartością taką jak w przykładzie.
<?php /** * index.php -- Displays the main frameset * * Copyright (c) 1999-2002 The SquirrelMail Project Team * Licensed under the GNU GPL. For full terms see the file COPYING. * * Redirects to the login page. * * $Id: index.php,v 1.13 2002/02/19 15:05:03 philippe_mingo Exp $ */ header("Location: https://poczta.example.net\n\n"); exit(); ?>
Oczywiście domena, kt�ra jest podana na listingu musi odnosić się do vhosta z opcją
DocumentRoot
ustawioną na
/home/services/httpd/html/mail
.
Jest to bardzo przydatna funkcja, pozwalająca w łatwy
spos�b udostępnić zawartość katalogu na serwerze. Aby
umożliwić indeksowanie musimy zainstalować moduł
apache-mod_autoindex
.
poldek -i apache-mod_autoindex
Aby uruchomić indeksy musimy włączyć opcję Indexes
.
W domyślnej konfiguracji, Apache ma włączone indeksy
dla wszystkich podkatalog�w wewnątrz /home/services/httpd/html
(w pliku 10_common.conf
). Jeśli
ustawiliśmy inaczej to musimy włączać tą opcję dla
każdego z katalog�w osobno np.:
<Directory /home/services/httpd/html/katalog> Options Indexes </Directory>
Opcja nie zadziała wtedy, kiedy zainstalowaliśmy moduł
apache-mod_dir
i w katalogu znajduje się plik
określony przez DirectoryIndex
.
Po każdej zmianie konfiguracji w katalogu
/etc/httpd/httpd.conf
konieczne
jest przeładowanie demona, aby na nowo odczytał swoje
pliki konfiguracji.
Możemy użyć w tym celu odpowiedniego wywołania rc-skryptu:
# service httpd restart
Jeśli będziemy modyfikować konfigurację działającego
serwera produkcyjnego, to dobrą praktyką jest wcześniejsze
użycie programu apachectl
z pakietu
apache-tools
do sprawdzenia poprawności
składni plik�w konfiguracji:
# apachectl configtest Syntax OK
Na szczeg�lną uwagę zasługują parametry rc-skryptu:
reload|force-reload|graceful
np.:
# service httpd reload
Użycie kt�regoś z nich wywołuje "łagodny" restart serwera
(graceful restart), kt�ry pozwala dokończyć wykonywane
prace przez procesy. Dzięki temu restart
nie jest odczuwalny przez klient�w. Parametry te mają
jeszcze jedną ważną zaletę, wywołanie ich powoduje sprawdzenie
konfiguracji serwera przed rozpoczęciem restartu, dzięki
czemu nie musimy do tego używać programu
apachectl
.
DNS jest systemem hierarchicznym. Na samym szczycie owej hierarchii stoją tzw. TLD (Top Level Domains), czyli domeny najwyższego rzędu. Zaliczają się do nich takie domeny jak .com (komercyjne), .pl (krajowe), .net (sieci) i inne. Są to domeny powstałe na podstawie odpowiednich postanowień, opisane w specjalnych dokumentach. Każda z wymienionych (lub też nie wymienionych) tutaj TLD's posiada swoje subdomeny, np. pld-linux.org. Z kolei każda powstała w wyniku rejestracji danej nazwy domena może mieć swoje poddomeny, np. www.pld-linux.org. W ten spos�b można tworzyć bardzo zagęszczone hierarchie w obrębie danej domeny. Niniejszy rozdział dotyczy implementacji Bind™ określanego czasem jako named™ - jednego z najpopularniejszych serwer�w DNS.
Każda domena (zwana r�wnież strefą) musi mieć co najmniej dwa serwery DNS, jest to wym�g registrar�w, czyli instytucji oferujących możliwość rejestracji domen. Jeden z serwer�w określa się jako podstawowy (r�wnież master lub primary) a drugi jako zapasowy (slave lub secondary).
Bind w PLD dziala w środowisku chroot, w katalogu
/var/lib/named
, musimy o
tym pamiętać, przy niekt�rych operacjach diagnostycznych.
Głï¿½wnym plikiem konfiguracyjnym
jest /etc/named.conf
, kt�ry jest symlinkiem
do /var/lib/named/etc/named.conf
.
Struktura katalogu /var/lib/named
wygląda następująco:
dev/ etc/ M/ S/ named.pid root.hint
Podobnie jak w normalnym środowisku, jest obecny tutaj katalog
/dev
, w kt�rym znajdują się
urządzenia konieczne do działania demona:
/dev/null
oraz
/dev/urandom
.
Katalog /etc
jak zapewne się
domyślasz, przechowuje pliki konfiguracyjne. U nas znajduje się w nim
jedynie named.conf
. Kolejne katalogi:
M
oraz
S
zostały przeznaczone do
przechowywania plik�w stref, odpowiednio master
i
slave
. Plik named.pid
przechowuje
numer procesu systemowego. Ostatni plik
na liście - root.hint
zawiera wpisy z adresami
tzw. root serwer�w, czyli głï¿½wnych serwer�w DNS. Jest on konieczny do
przeszukiwania serwer�w DNS w poszukiwaniu żądanych nazw, kt�rych
nie utrzymuje nasz serwer.
Dodawanie stref DNS polega na definiowaniu obsługiwanych domen w pliku
/etc/named.conf
, oraz tworzenia plik�w konfiguracji
stref.
Głï¿½wnym plikiem konfiguracyjnym serwera Bind jest
/etc/named.conf
. Znajdują się w nim podstawowe
opcje usługi oraz informacje na temat obsługiwanych stref. Poniżej
zamieszczono domyślne wpisy, kt�re znajdują się w tym pliku
options { directory "/"; pid-file "named.pid"; auth-nxdomain yes; datasize default; }; zone "localhost" IN { type master; file "M/localhost.zone"; allow-update { none; }; allow-transfer { any; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "M/127.0.0.zone"; allow-update { none; }; allow-transfer { any; }; }; zone "." IN { type hint; file "root.hint"; };
Na samym początku pliku konfiguracyjnego znajduje się sekcja options
.
Najbardziej istotną opcją jest tutaj directory
. Wskazuje ona na
głï¿½wny katalog przechowywania plik�w stref. Być może zdziwi Cię nieco parametr
powyższej opcji. Jak już wcześniej wspominałem Bind
w PLD posiada własne
chrootowane środowisko, dlatego można taki zapis zastosować.
Zanim przejdę do omawiania pozostałych wpis�w, należy się jeszcze słowo wyjaśnienia na temat konstrukcji samego pliku. Na pierwszy rzut oka poszczeg�lne wpisy są podzielone na sekcje. Te z kolei ograniczone są klamrami. Znak ; r�wnież pełni tutaj rolę ogranicznika dla poszczeg�lnych opcji jak i całych sekcji ujętych w klamry. Warto o tym wiedzieć ze względu na ewentualne szukanie błęd�w powstałych na skutek edycji tego pliku.
Poniżej mamy zdefiniowane trzy sekcje stref zaczynających się słowem kluczowym
zone
. W powyższym przykładzie przedstawione są wpisy określające
localhosta. Są one typu master. Plik strefy w każdej z nich wskazany jest opcją
file
. Strefa nie musi być aktualizowana, ani synchronizowana z
serwerem slave, więc dwie pozostałe opcje mają parametr none
oraz
any
. Ostatnia strefa służy do komunikacji naszego binda z Root serwerami
o kt�rych była mowa we wstępie. Bez tej strefy nie m�głby on wyszukiwać nazw w internecie.
M�wiąc w przenośni byłby ślepy.
Każdorazowe odpytywanie Root Servers może się okazać mało
wydajne, ze względu na duże czasy odpowiedzi. Dlatego, jeżeli chcemy przyspieszyć ten proces
powinniśmy sekcję option
zmodyfikować o wpis taki jak poniżej
options { forwarders { 194.204.159.1; 194.204.152.34; }; }
Oczywiście nie musimy posługiwać się takimi adresami jak w przykładzie. Możemy sobie wybrać takie serwery DNS, kt�re będą nam odpowiadały najszybciej np. serwery naszego ISP.
W PLD zaleca się, aby wszystkie pliki stref w zależności od typu
domeny były przechowywane w katalogach
/var/lib/named/M
oraz
/var/lib/named/S
. Tak
naprawdę o ścieżce do tych katalog�w decydują wpisy w named.conf
.
Struktura plik�w stref dla obu typ�w domen jest taka sama.
Zaczniemy od konfiguracji /etc/named.conf
,
budowa tego pliku była wyjaśniona w poprzedniej części tego
rozdziału. Poniżej został zamieszczony przykładowy wpis dla strefy
na serwerze podstawowym:
zone "example.net" { type master; file "M/example.net"; allow-transfer { 123.45.67.89; }; notify yes; };
Poszczeg�lne opcje tej sekcji zostały om�wione już na początku tego rozdziału. Podsumujmy więc dostępne informacje skupiając się na powyższym przykładzie:
zone "example.net"
- nazwa strefy
type master
- rodzaj serwera
file "M/example.net"
- nazwa pliku z konfiguracją strefy
allow-transfer { 123.45.67.89; }
- adres serwera,
kt�ry ma możliwość transferu całej strefy, Jeżeli posiadasz więcej
niż jeden taki DNS, możesz je wpisać pomiędzy klamry pamiętając o tym,
aby rozdzielić poszczeg�lne adresy IP, znakiem
';'.
notify yes
- opcja ta włącza powiadamianie zapasowego
serwera DNS o zmianach w naszej domenie.
Musimy teraz utworzyć plik strefy dla domeny example.net
wskazany przez opcję file
. Poniżej zamieszczam treść przykładowego pliku strefy:
$TTL 86400 $ORIGIN example.net. @ IN SOA ns1.example.net. root.example.net. ( 2004022300 ;; serial 1200 ;; refresh 1200 ;; retry 2419200 ;; expire 86400 ;; TTL ) @ IN NS ns1.example.net. @ IN NS ns2.example.net. @ IN MX 10 mail.example.net. @ IN A 123.45.67.8 ns1 IN A 123.45.67.8 ns2 IN A 90.12.34.237 mail IN A 123.45.67.8 www IN A 34.5.6.78 ftp IN CNAME www
Plik strefy można podzielić na trzy odrębne sekcje. Pierwsza określa nazwę domeny oraz okres ważności wpis�w. Druga, kto tą domeną zarządza. W trzeciej znajduje się cała jej zawartość. Bardziej szczeg�łowy opis znajduje się w poniższym wykazie. Kilka zdań o wyrażeniach stosowanych w plikach stref. Warto o nich pamiętać. Wszystkie wpisy poprzedzone ;; będą ignorowane i traktowane jak komentarz. Kolejnym ważnym znakiem jest znak kropki. Jego znaczenie om�wię poniżej w przykładzie.
@ IN NS ns1.example.net.
Jeżeli w powyższym wpisie pominęlibyśmy końcowy znak kropki, w�wczas Bind dokleiłby na końcu nazwę domeny. W�wczas z ns1.example.net zrobiłby się wpis ns1.example.net.example.net, co oczywiście nie jest pożądane. następnym znakiem specjalnym na kt�ry warto zwr�cić uwagę jest @. Ot�ż można go potraktować jako pewnego rodzaju zmienną, kt�ra przechowuje nazwę example.net. Jednym słowem, example.net i @ to to samo.
$TTL 86400
- czas ważności rekord�w
w domenie wyrażony w sekundach; 86400 s. to jedna doba
$ORIGIN example.net.
- domena jaką będzie opisywał
bieżący plik strefy.
@ IN SOA ns1.example.net. root.example.net.
-
Rekord typu SOA czyli Start Of Authority. Możemy się
z niego dowiedzieć, kto zarządza domeną
([email protected]), jaki jest adres serwera primary
DNS. Zwr�ć uwagę, że w adresie [email protected]
zamiast znaku @ użyta została
kropka. Rekord SOA posiada swoją własną strukturę o
kt�rej poniżej. Zawarta jest ona pomiędzy znakami
( ).
2004022300 ;; serial
- numer seryjny domeny. Powinien
on być zwiększany wraz z każdą
jej modyfikacją. W dobrym tonie jest utrzymywanie go w
formacie YYYYMMDDnn czyli rok, miesiąc,
dzień oraz numer modyfikacji w danym dniu.
1200 ;; refresh
-
To pole rekordu SOA definiuje jak często serwery
slave mają sprawdzać czy dane o domenie
nie zmieniły się na masterze. Według
RFC 1035
wartość ta powinna się zawierać pomiędzy 1200 a 43200 (czyli
od dwudziestu minut do dwunastu godzin). W praktyce najlepsza
wartość zawiera się między 3600 a 7200 sekund.
1200 ;; retry
-
Czas po jakim secondary ma ponowić pr�bę
kontaktu z masterem, gdy taka się nie
powiedzie. Zalecana wartość pomiędzy 120 a 7200 sekund.
2419200 ;; expire
-
Ta wartość określa czas po jakim dane domeny mają zostać uznane
za nieaktualne gdy serwer secondary
nie będzie m�gł się skontaktować z
primary. Zalecana wartość zawiera się
pomiędzy 1209600 a 2419200 sekund, czyli od dw�ch do czterech
tygodni.
86400 ;; TTL
-
Time To Live. Określa ile czasu informacja o danym rekordzie
ma być ważna. Jest to okres przez jaki informacja o naszej
domenie będzie przechowywana przez serwer DNS, kt�ry ją
pobrał. Zalecana wartość zawiera się między 86400 a 432000
sekund, czyli przez okres od jednego do pięciu dni.
Bezpośrednio pod rekordem SOA definiujemy, kt�re serwery DNS będą obsługiwały naszą domenę.
Jeszcze raz przypominam aby właściwie zamknąć ten rekord. Bez tego nasza domena nie będzie działać.
Do definiowania serwer�w DNS służą wpisy typu IN NS
.
@ IN NS ns1.example.net. @ IN NS ns2.example.net.
Powyższy wpis m�wi, że domenę example.net obsługuje serwer DNS ns1.example.net oraz ns2.example.net. Jeżeli obie nazwy dotyczą komputer�w, kt�re wcześniej nie pełniły roli serwer�w DNS, powienieś dodać wpisy takie jak poniżej.
ns1 IN A 123.45.67.8 ns2 IN A 90.12.34.237
ns1 oczywiście może wskazywać na adres serwera DNS kt�ry zapewne
konfigurujesz; ns2 powinien wskazywać na Twojego
secondary. Zrobiliśmy to posługując się wpisami typu
IN A
. Jak zapewne pamiętasz, brak końcowej kropki powoduje doklejenie
do wpisanej nazwy tego co znajduje się w zmiennej $ORIGIN
. Możemy więc
uznać to co widzisz w powyższym przykładzie za postać skr�coną poniższego wpisu.
ns1.example.net. IN A 123.45.67.8 ns2.example.net. IN A 90.12.34.237
Wpisy typu IN A
służą do określania, że właśnie ten adres IP ma przypisaną
taką a nie inną nazwę. Oczywiście do jednego adresu IP możesz stworzyć kilka takich wpis�w.
Jeżeli posiadasz serwer poczty, powinieneś zrobić wpis m�wiący o tym, że będzie on obsługiwał
pocztę dla domeny example.net.
@ IN MX 10 mail.example.net
Dokładnie tak jak wcześniej wspomniałem, poczta, dla domeny example.net
kierowana jest do serwera mail.example.net o priorytecie 10. Jest on
tzw. MX'em. Rekord typu IN MX
służy właśnie do definiowania w DNS serwera
poczty. Priorytet przydaje się wtedy, kiedy posiadasz kilka serwer�w poczty w swojej domenie.
Służy on do ustalenia porządku; do kt�rego serwera poczta ma trafić w pierwszej kolejności.
Mniejszy priorytet zapewnia pierwszeństwo.
Pozostałe wpisy dotyczą takich standardowych usług jak www czy ftp. Umieszczanie ich w pliku strefy nie jest obowiązkowe. Jednak domenę rejestruje się zazwyczaj na potrzeby www, ftp czy poczty, dlatego zostały one wymienione w przykładzie.
ftp IN CNAME www
Powyżej umieszczono przykład rekordu typu IN CNAME
, tworzy on dodatkową subdomenę
dla hosta przypisanego już do innej nazwy. Specjaliści radzą by tego rodzaju rekordy
wskazywały wyłącznie na rekordy typu IN A
.
Po zakończeniu konfiguracji musimy jeszcze uruchomić usługę.
# /etc/rc.d/init.d/named start
Konfiguracja serwera secondary sprowadza się do dokonania poniższego wpisu
w pliku /etc/named.conf
.
zone "example.net" IN { type slave; file "S/example.net"; masters { 123.45.67.8; }; };
Jak widać wpis wygląda podobnie jak w przypadku serwera primary. Opcja
type
tym razem ma wartość slave. Musimy też wskazać
serwer primary
. Robimy to używając opcji masters
, kt�rej
wartość zawiera adres serwera primary DNS.
Podobnie jak większość usług w dystrybucji BIND posiada wsparcie dla protokołu
IPv6 (IPng). Oczywiście wcześniej komputer musi być podłączony do tej sieci.
W tej części rozdziału zostanie om�wiona konfiguracja dla stref
IN A
oraz strefy odwrotnej. Narzędziem wspomagającym
konfigurację będzie ipv6calc znajdujący się w pakiecie
o tej samej nazwie. Jak sama nazwa wskazuje jest to kalkulator adres�w
IPv6.
IN AAAA
Odpowiednikiem w IPv6 strefy IN A
jest wpis
IN AAAA
. Każda z dotychczasowych stref stworzona do tej
pory dla protokołu IPv4 może mieć sw�j odpowiednik w sieci IPv6. Możemy
r�wnież stworzyć zupełnie nowe wpisy, kt�re będą widoczne jedynie w tej
sieci.
moja IN AAAA 3ffe:1a:2b:3c::1
Umieszczenie powyższego wpisu w pliku strefy
/var/lib/named/M/example.net
spowoduje przypisanie
nazwy moja.example.net adresowi
3ffe:1a:2b:3c::1. Aby wpis zaczął obowiązywać należy
zrestartować usługę.
IN PTR
Konfigurację strefy odwrotnej zaczniemy od stworzenia
odpowiedniego wpisu w pliku
/etc/named.conf
. Jak sama nazwa
wskazuje będzie on przypominał lustrzane odbicie
adresu w zwykłej postaci. Aby mieć pewność, że nasza
strefa będzie poprawnie zapisana posłużymy się
wspomnianym we wstępie narzędziem
ipv6calc.
$ ipv6calc -r 3ffe:1a:2b:3c::/64 No input type specified, try autodetection...found type: ipv6addr c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3.ip6.int.
Uzyskaliśmy w ten spos�b informacje, że dla sieci o adresie 3ffe:1a:2b:3c::/64, strefa odwrotna posiada postać taką jak na powyższym listingu. Wystarczy teraz to zapisać w pliku konfiguracyjnym BIND'a.
zone "c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3.ip6.int" IN { type master; file "M/ipv6"; allow-transfer { 90.12.34.237; }; };
Jak widać na pierwszy rzut oka, konfiguracja niczym się praktycznie nie r�żni od konfiguracji
strefy dla IPv4. Jako nazwę strefy podaliśmy to co nam zwr�cił ipv6calc.
Przyjrzyjmy się teraz jak powinien wyglądać plik dla tej strefy wskazany dyrektywą
file
.
$TTL 86400 $ORIGIN 0.1.0.0.e.2.0.0.c.0.0.4.e.f.f.3.ip6.int.
Pierwszy parametr to omawiany już wcześniej okres ważności rekord�w. Jak widać na listingu
wynosi on jeden dzień. Drugi z nich to de facto nazwa tej strefy. Sama opcja
$ORIGIN
to swojego rodzaju zmienna, kt�rej wartość jest podstawiana w
miejsce @ oraz doklejana do tych nazw kt�re nie posiadają na końcu
specjalnego znaku kropki.
@ IN SOA ns1.example.net. root.example.net. ( 2004050600 3H 15M 1W 1D )
Jak widać rekord IN SOA
nie r�żni się niczym od
tego dla domeny IPv4.
@ IN NS ns1.example.net. @ IN NS ns2.example.net.
Określamy kt�re serwery przechowują naszą domenę odwrotną. R�wnież tutaj wszystko wygląda identycznie jak dla protokołu IPv4. Możemy teraz przystąpić do konfigurowania strefy odwrotnej.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR moja.example.net.
Dlaczego tyle zer? Odpowiedź na to znajdziesz obliczając przy użyciu programu
ipv6calc adres odwrotny dla 3ffe:1a:2b:3c::1.
Robimy to w spos�b identyczny do poprzedniego przykładu jego użycia. W wyniku obliczeń
będzie on wyglądał tak:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3. Jak
łatwo zauważyć, po ostatnim zerze w listingu nie postawiliśmy kropki, a więc zostanie
doklejona po nim zawartość $ORIGIN
.
Narzędziem pomocnym w odpytywaniu serwer�w DNS, jest program host. Można nim r�wnież odpytywać o nazwy skonfigurowane dla protokołu IPv6. Jak by wyglądało zapytanie o nazwę moja.example.net?
$ host -n -i 3ffe:1a:2b:3c::1 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3.\ ip6.int domain name pointer moja.example.net
Przełącznik -n
oznacza, że będziemy odpytywali strefę odwrotną, natomiast
-i
, że jest to adres typu int. Domyślnie
host szuka nazw typu arpa.
Zanim zarejestrujemy domenę musimy mieć skonfigurowany podstawowy i zapasowy serwer nazw. Mamy możliwość zarejestrowania własnej domeny, bądź skorzystać z usług darmowego oddelegowania nam subdomeny zarejestrowanej już domeny. Ceny rejestracji domen spadły w ostatnich latach tak bardzo, że używanie "obcej" domeny stało się mało profesjonalne i warto zarejestrować własną.
Jeżeli nie posiadasz serwera secondary, możesz poszukać firmy lub organizacji, kt�ra za darmo utrzymuje zapasowe DNS-y. Możemy też um�wić się z administratorem innej firmy na wzajemne prowadzenie serwer�w secondary.
Jeśli chcemy przetestować poprawność składni pliku strefy, powinniśmy skorzystać z narzędzia named-checkzone. Program sprawdzi poprawność pliku strefy i poda w kt�rej linii wystąpił błąd np.:
# /usr/sbin/named-checkzone example.net /var/lib/named/M/example.net
Named™ generuje logi
typu daemon
, domyślnie syslogd umieszcza takie
wpisy w pliku /var/log/daemon
.
Jeśli jednak nastąpił problem z uruchomieniem demona, uniemożliwiający
mu pisanie do log�w, to możemy sprawdzić co się dzieje uruchamiając
go bez przejścia w tło i z wypisaniem
komunikat�w na standardowe wyjście:
/usr/sbin/named -g -t /var/lib/named
Aby ostatecznie sprawdzić poprawność konfiguracji możemy odpytać nasz serwer za pomocą protokołu DNS. Użyjemy do tego programu host™ z pakietu bind-utils np.:
# /usr/sbin/host -t mx example.net
Uwaga! Named™ nie powinien być resolwerem nazw dla maszyny na kt�rej pracuje, powinien nim być inny serwer DNS aby nie powstawały zapętlenia zapytań. Wyjątek stanowią usługi pracujące w osobnych środowiskach chroot/vserver. Więcej o konfiguracji resolwera nazw znajdziemy w „Podstawowa konfiguracja sieci”.
CRON™ jest ważnym demonem systemowym, kt�rego zadaniem jest uruchamianie program�w cyklicznie lub o określonej porze. Om�wiona zostanie instalacja vixie-cron™, kt�ry opr�cz standardowych usług posiada dodatkowe opcje konfiguracyjne i zwiększone bezpieczeństwo
Program instalujemy za pomocą poldka:
# poldek -i vixie-cron
Po zainstalowaniu program jest praktycznie gotowy do użycia. Można więc od razu uruchomić demona korzystając z polecenia:
# /etc/rc.d/init.d/crond start
Od tej pory demon może działać nieprzerwane - nie wymaga restart�w po rekonfiguracji.
W cronie istnieje podział na zadania systemowe i zadania
użytkownik�w. Pierwszych zwykle używa się do prac
administracyjnych, z drugich korzystają użytkownicy wedle
własnych potrzeb (o ile mają do tego prawo). Głï¿½wna
konfiguracja demona (systemowa) umieszczona
jest w pliku /etc/cron.d/crontab
, konfiguracje
lokalne użytkownik�w przechowywane są w plikach
/var/spool/cron/{$login}
. O ile
/etc/cron.d/crontab
może być swobodnie
modyfikowany za pomocą edytora tekstu, o tyle użytkownicy
powinni używać w tym celu odpowiedniego narzędzia (opisanego
w dalszej części).
Pliki konfiguracji crona nazywane są tabelami, zar�wno głï¿½wny plik konfiguracji jak i konfiguracje użytkownik�w mają bardzo podobną budowę. Są to pliki tekstowe o ściśle ustalonej składni, w kt�rych jeden wiersz odpowiada jednemu zadaniu. Wiersz tabeli systemowej ma następującą składnię:
{$data-czas} {$użytkownik} {$zadanie}
Nieco prostszą budowę mają tabele użytkownik�w:
{$data-czas} {$zadanie}
Pierwsze pole określa jak często wykonywane jest zadanie,
pole {$użytkownik} występuje jedynie
w konfiguracji globalnej (w
/etc/cron.d/crontab
) i wskazuje z
jakimi prawami uruchamiane ma być zadanie. Trzecie pole to
operacja kt�ra ma być wykonywana. W tabelach użytkownik�w
nie podaje się nazwy użytkownika, gdyż polecenia tam zawarte
są automatycznie wykonywane z prawami ich właściciela.
Przykładowe zadania w /etc/cron.d/crontab:
02 01 * * * root find /home -size +100M > /root/duze_pliki.txt
Przykładowa konfiguracja zwykłego użytkownika:
30 * * * * backup.sh
W tabelach opr�cz zadań możemy definiować zmienne środowiskowe np.:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=jakis_user NICE=15
Pierwsza zmienna wskazuje powłokę (zamiast domyślnej
/bin/sh
),
kt�ra ma być używana do wywoływania zadań, druga to ścieżka do
plik�w wykonywalnych. Trzecie pole to konto użytkownika do kt�rego
będą wysyłane powiadomienia pocztą elektroniczną lub pełny
adres e-mail, ostatnia zmienna to priorytet wykonywanych
zadań (liczba nice).
Sekcja {$użytkownik} i {$zadanie} nie wymagają komentarza więc opisane zostanie jedynie pole {$data-czas}. Pole to składa się z pięciu kolumn:
1-sza kolumna (zakres 0-59) oznacza minuty.
2-ga kolumna (zakres 0-23) oznacza godzinę.
3-cia kolumna (zakres 0-31) oznacza dzień miesiąca.
4-ta kolumna (zakres 0-12) oznacza miesiąc. (0 i 1 to styczeń)
5-ta kolumna (zakres 0-7) oznacza dzień tygodnia (0 i 7 to niedziela)
6-ta kolumna określa komendę jaka powinna zostać wykonana dla danego wiersza.
Gwiazdka "*" oznacza cały zakres z możliwego przedziału. Same zakresy w pierwszych pięciu kolumnach mogą być reprezentowane w r�żny spos�b. Więcej szczeg�łï¿½w na ten temat dowiemy się wywołując polecenie man 5 crontab
Program vixie-cron™ posiada także mało udokumentowany format wykonywania poleceń
Nazwa Działanie ------ ------- @reboot Uruchom jeden raz przy starcie systemu @yearly Uruchom jeden raz w roku, "0 0 1 1 *" @annually To samo co @yearly @monthly Uruchom jeden raz w miesiącu, "0 0 1 * *" @weekly Uruchom jeden raz w tygodniu, "0 0 * * 0" @daily Uruchom jeden raz dziennie, "0 0 * * *" @midnight To samo co @daily @hourly Uruchom raz na godzinę, "0 * * * *" Przykład: @reboot /usr/bin/rdate -s ntp.task.gda.pl
Głï¿½wną konfigurację systemu tworzymy za pomocą naszego ulubionego
edytora tekstu, poprzez modyfikację pliku /etc/cron.d/crontab
.
Jego zawartość będzie podobna do poniżej przedstawionego przykładu:
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin [email protected] NICE=15 # run-parts 01 * * * * root /bin/run-parts /etc/cron.hourly 02 1 * * * root /bin/run-parts /etc/cron.daily 02 2 * * 0 root /bin/run-parts /etc/cron.weekly 02 3 1 * * root /bin/run-parts /etc/cron.monthly 0-59/10 * * * * root /bin/run-parts /etc/cron.10min 15 18 * * 1-5 root /bin/run-parts /etc/cron.gielda
Poniżej napisu # run-parts
umieszczone są
konfiguracje zadań, pierwsze cztery linijki stanowią domyślną
konfigurację demona. Program run-parts
służy do uruchamiania o jednej porze wszystkich program�w
we wskazanym katalogu. Dzięki takim opcjom możemy dodawać
programy lub skrypty do odpowiednich katalog�w bez konieczności
pisania regułek cron-a. Poniżej umieszczono opisy powyższych
przykład�w:
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.hourly
codziennie, co godzinę -
zaczynając od pełnej pierwszej minuty (np. 02:01, 03:01 itd.):
01 * * * * /bin/run-parts /etc/cron.hourly
Wykonanie poleceń zawartch w pliku (plikach) katalogu
/etc/cron.daily
raz dzienie (o godz.
01:02):
02 1 * * * /bin/run-parts /etc/cron.daily
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.weekly
raz w tygodniu (w
niedziele o godz. 02:02):
02 2 * * 0 /bin/run-parts /etc/cron.weekly
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.monthly
raz na miesiąc
(w pierwszy dzień miesiąca o godz. 03:02):
02 3 1 * * /bin/run-parts /etc/cron.monthly
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.gielda
raz dziennie w dni
robocze (od poniedziałku do piątku o godz. 18:15):
15 18 * * 1-5 /bin/run-parts /etc/cron.gielda
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.10min
co 10 minut (każdego
dnia, zaczynając od pełnej godziny - czyli np. 01:00, 01:10,
01:20 itd.):
0-59/10 * * * * /bin/run-parts /etc/cron.10min
Domyślnie użytkownicy nie mogą tworzyć własnych zadań cron-a,
aby im na to zezwolić każdy nich musi zostać dopisany do pliku
/etc/cron/cron.allow
.
Użytkownicy powinni używać narzędzia crontab, program ten pozwala na bardzo łatwe zarządzanie tabelą użytkownika. Przyjmuje parametry określające rodzaj działania, kt�re ma być wykonane na tabeli. Polecenie crontab -l wyświetla listę zdefiniowanych zadań, wywołanie crontab -e otworzy plik konfiguracji do edycji, zaś crontab -r usunie całą zawartość konfiguracji użytkownika.
Wybranie opcji edycji tabeli spowoduje otworzenie edytora tekstu
określonego zmienną środowiskową EDITOR, po
skończonej edycji plik zostanie automatycznie poddany kontroli
poprawności i zapisany jako
/var/spool/cron/{$login}
.
Najczęściej popełniane błędy przez użytkownik�w to zły
format daty/czasu lub brak znaku nowej linii po ostatnim
wierszu.
Root ma dodatkowo do dyspozycji możliwość zarządzania zadaniami dowolnego użytkownika, w tym celu stosuje się opcję -u z podaną nazwą użytkownika.
Cron rejestruje wszystkie swoje prace do pliku
/var/log/cron
za pośrednictwem demona
syslogd™,
dodatkowo można wskazać adres e-mail, na kt�ry
mają docierać informacje o wystąpieniu błęd�w w wykonywaniu
zadań. Jeśli nie zdefiniuje zmiennej MAILTO
w tabeli to poczta zostanie wysłana na lokalne konto
właściciela tej tabeli.
Poczta elektroniczna jest jedyną formą informowania
zwykłych użytkownik�w o ewentualnych błędach zadań, gdyż
nie mają oni dostępu do log�w.
Wysyłanie poczty elektronicznej zar�wno do użytkownik�w lokalnych jak i zewnętrznych będzie wymagało instalacji lokalnego serwera poczty MTA. Może to być niemal dowolny demon pocztowy, np.: Exim (opis w „Exim - Transport poczty elektronicznej (MTA)”) lub Postfix (opis w „Postfix - Transport poczty elektronicznej (MTA)”).
Aby łatwiej było analizować problemy, do wiadomości wysyłanej
przez demon, dodawane są nagłï¿½wki X-Cron-Env
,
zawierające dane środowiska np.:
X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin> X-Cron-Env: <MAILTO=root> X-Cron-Env: <NICE=15> X-Cron-Env: <HOME=/root> X-Cron-Env: <LOGNAME=root> X-Cron-Env: <USER=root>
CUPS™ jest nowoczesnym i uniwersalnym systemem druku dla system�w uniksowych. Może być stosowany zar�wno do drukowania lokalnego jak i do drukowania w sieci - obsługuje domyślnie protok�ł IPP. Po poprawnym skonfigurowaniu urządzenia będziemy mogli drukować z niemal każdego programu, CUPS akceptuje wywołania poleceń drukowania w stylu klasycznego systemu LPD.
System CUPS może być zar�wno serwerem jak i klientem, o tym jaką funkcję będzie pełnić zainstalowane "urządzenie" decyduje wyb�r specjalnego sterownika interfejsu: backendu(poza IPP) i konfiguracji.
Podstawowa część CUPS:
$ poldek -i cups cups-clients
Następnie instalujemy jeden lub więcej kontroler�w interfejs�w drukarki (protok�ł IPP nie wymaga backendu):
cups-backend-parallel
- port r�wnoległy (parallel port)
cups-backend-serial
- port szeregowy RS-232 (serial port)
cups-backend-usb
- port szeregowy USB (usb printer)
cups-backend-smb
- drukowanie zdalne w sieci SMB
W przypadku drukarek nie obsługujących PostScriptu konieczne będą dodatkowe pakiety:
$ poldek -i cups-filter-pstoraster ghostscript-esp
Do zdalnej administracji (za pomocą HTTPS), konieczny będzie program openssl:
$ poldek -i openssl-tools
Czas uruchomić demona:
$ /etc/rc.d/init.d/cups start
Operacje takie jak dodawanie, czy konfigurowanie drukarek mogą być dokonywane na kilka sposob�w:
HTTP
Popularnym sposobem jest konfiguracja przy pomocy przeglądarki internetowej, CUPS posiada wbudowany niewielki serwer WWW, z kt�rym łączymy się dowolną przeglądarką na adres serwera i port 631 np.:
$ lynx localhost:631
Z poziomu tej strony mamy dostęp do wielu opcji administracyjnych: konfiguracji drukarek, zarządzania klasami, zadaniami druku i innymi. Ten spos�b zarządzania systemem CUPS w niniejszej publikacji jest traktowany jako domyślny.
lpadmin
lpadmin jest programem administracyjnym dostarczanym z CUPS-em, obsługiwany jest całkowicie z linii wiersza poleceń. Jest to narzędzie zaawansowane, przez co stosunkowo trudne w obsłudze, jego dokładny opis zawarto w dokumentacji.
Inne
Dla CUPS powstały wygodne programy zarządzające przeznaczone działające w środowiskach GNOME i KDE. Szczeg�lnie pozytywnie przedstawia się system-config-printer™ - wygodna aplikacja, kt�rej układ opcji przypomina konfigurację przez WWW.
W tym rozdziale przedstawiono og�lny opis instalacji urządzenia, szczeg�łowe informacje umieszczono w rozdziałach: Szczeg�ły dodawania drukarki lokalnej i Szczeg�ły dodawania drukarki zdalnej.
Możemy użyć programu system-config-printer™ lub narzędzia dostępnego przez stronę WWW:
$ lynx localhost:631
następnie przechodzimy do opcji Managle Printers -> Add Printer.
Określamy nazwę drukarki oraz opcjonalnie komentarz i lokalizację, następnie wybieramy jeden z dostępnych na liście kontroler�w interfejs�w drukarki (backend). Na koniec wybieramy producenta i model drukarki.
System CUPS jest
dostarczany z niewielką ilością sterownik�w
drukarek, jednak nie należy się jednak martwić
jeśli na liście nie odnajdziemy szukanego
urządzenia.
Coraz więcej producent�w dostarcza ze sprzętem
pliki PPD
(w CUPS są używane r�wnież dla
drukarek niepostcriptowych), możemy także
skorzystać z bazy Foomatic™ zawierającej ogromną
liczbę sterownik�w.
Sterowniki Foomatic możemy
zainstalować w postaci zbiorczego pakietu
sterownik�w danego producenta. Przykładowo jeśli
chcemy zainstalować sterowniki drukarek firmy
Samsung to instalujemy pakiet
cups-foomatic-db-Samsung
.
Możemy r�wnież pobrać pojedyncze pliki PPD z
z witryny
http://www.linuxprinting.org,
po wyszukaniu modelu drukarki (Driver Listings) należy
kliknąć link download PPD w celu pobrania sterownika.
Plik wskazujemy przy dodawaniu drukarki lub
kopiujemy go do katalogu
/usr/share/cups/model
i
uruchamiamy na nowo demona cupsd:
# /etc/rc.d/init.d/cups restart
Po tej operacji przeprowadzamy normalną instalację drukarki. Możemy ich wiele zainstalować, to do kt�rej będą trafiać dokumenty zależy od tego, kt�rą z nich ustawimy jako domyślną.
Dodanie drukarki lokalnej dotyczy drukarek podłączonych bezpośrednio podłączonych do komputera, na kt�rym zainstalowany jest CUPS, w tym wypadku interesują nas interfejsy: Parallel, Serial i USB. Zanim zaczniemy proces konfiguracji, musimy sie upewnić, że są załadowane odpowiednie moduły jądra (w przeciwnym wypadku dany backend może być nieaktywny).
Drukarka podłączona do portu r�wnoległego
będzie wymagała modułï¿½w lp
, parport
i
parport_pc
.
Moduł lp
dopisujemy do pliku /etc/modules
,
jeśli nie używamy udeva to pozostałe moduły także.
Drukarki podłączane pod port LPT są dostępne za pomocą urządzeń /dev/lp*
.
W przypadku drukarek USB konieczny będzie moduł usblp
oraz
rzecz jasna moduł kontrolera USB,
urządzenia te będą dostępne za pomocą /dev/usb/lp*
.
Więcej o modułach jądra i ich zarządzaniu odnajdziemy w
„Moduły jądra”.
CUPS od wersji 1.3 wymaga zdefiniowania opcji Group
w pliku /etc/cups/cupsd.conf
, kt�ra wskazuje jaki użytkownik
ma być używany dla uruchamiania zewnętrznych program�w - w tym backend�w.
Jako że urządzenia w katalogu /dev
mają grupę ustawioną na
lp
, taką też podamy jako wartość parametru:
Group lp
Dalszą instalację przeprowadzamy zgodnie z zaprezentowanym wcześniej opisem Dodanie drukarki.
IPP
Aby CUPS było klientem IPP musimy dodać drukarkę z backendem IPP oraz podać prawidłowy URI zasobu, jako producenta wybieramy Raw, zaś jako model Raw Queue. URI powinno mieć następującą postać:
ipp://{$serwer}/printers/{$drukarka}
($serwer to nazwa lub IP serwera druku, zaś $drukarka to nazwa drukarki). Adres taki może wyglądać następująco:
ipp://10.0.0.3/printers/laserowa
SMB
Jedyne co musimy zrobić to dodać drukarkę z użyciem odpowiedniego backendu - Windows Printer via SAMBA i podać prawidłowy URI, na koniec musimy wskazać sterownik danej drukarki. W przypadku system�w MS z serii 95/98/Me URI powinno mieć następującą postać:
smb://{$serwer}/{$drukarka}
($serwer to nazwa lub IP serwera druku, zaś $drukarka to nazwa drukarki). Adres taki może wyglądać następująco:
smb://wodzu/laserowa
W przypadku system�w z serii NT (NT4, 2000, XP Professional) może być konieczne podanie konta użytkownika i hasła:
smb://{$użytkownik}:{$hasło}@{$serwer}/{$drukarka}
np.:
smb://jasio:mojehasło@wodzu/laserowa
Aby udostępnić w sieci zainstalowaną drukarkę, musimy
odpowiednio skonfigurować demona
cupsd, jego
konfiguracja jest przechowywana w pliku
/etc/cups/cupsd.conf
.
Domyślnie CUPS pozwala jedynie na drukowanie
lokalne, aby uzyskać dostęp z sieci musimy
dokonać zmian w pliku konfiguracji.
Należy odszukać sekcję oznaczoną znacznikami
<Location /></Location>
.
Dostęp z innych maszyn konfigurujemy za pomocą
opcji Allow From {$klient}
($klient to nazwa lub adres IP lub klasa adres�w, kt�rym
udostępniamy drukarkę). Poniższy przykład przedstawia
udostępnienie drukarek dla lokalnego interfejsu i
maszyny o adresie 10.0.0.12.
<Location /> Order Deny,Allow Deny From All Allow From 127.0.0.1 Allow From 10.0.0.12 </Location>
Jeśli chcemy mieć możliwość zdalnej administracji za pośrednictwem HTTP/HTTPS
powinniśmy dodatkowo ustawić dostęp (zgodnie z powyższymi wskaz�wkami)
dla sekcji: /admin
, /admin/conf
.
IPP
Protok�ł IPP jest używany domyślnie przez CUPS i nie wymaga żadnych dodatkowych przygotowań.
SMB
W systemie musi być zainstalowany i działający pakiet
Samba™. Aby systemy Microsoftu mogły "widzieć" drukarki
CUPS należy dokonać
modyfikacji w głï¿½wnym pliku konfiguracji Samby -
/etc/samba/smb.conf
.
Należy usunąć z niego
wszystkie opcje dotyczące druku z sekcji [global],
zaś w ich miejsce wstawić poniższe linijki:
printing = cups printcap name = cups
Na koniec należy przygotować sekcję drukarek. Prosty przykład pliku konfiguracji pakietu Samba może wyglądać następująco:
[global] netbios name = shilka workgroup = pod_cisami security = share printing = cups printcap name = cups [printers] comment = Drukarki printable = yes path = /var/spool/samba
Jako, że Windows pre-formatuje dokumenty zanim wyśle je przez sieć do drukarki, musimy nauczyć CUPS'a odpowiednio takie pre-formatowane dokumenty obsługiwać. W tym celu musimy wyedytować plik /etc/cups/mime.convs i odkomentować w nim linijkę
application/octet-stream application/vnd.cups-raw 0 -
w pliku /etc/cups/mime.types zaś, należy odkomentować linijkę
application/octet-stream
Po tych operacjach wymagany jest oczywiście restart usługi CUPS.
# /etc/rc.d/init.d/cups restart
Przy tak skonfigurowanym serwerze drukarkę w MS Windows dodajemy standardowo, musimy jedynie samemu dostarczyć odpowiedni sterownik. Istnieje możliwość umieszczenia takiego sterownika na serwerze Samba™, wymaga to jednak dodatkowych operacji konfiguracyjnych. Więcej na ten temat odnajdziemy w dokumentacji Samby.
Zarządzanie wydrukami jest możliwe z
poziomu przeglądarki internetowej, program�w dla X-Window
oraz z poziomu linii wiersza poleceń. Z pośr�d tych
ostatnich mamy do dyspozycji:
lpstat, lpmove,
cancel, lpq oraz
lprm. Programy te znajdują się w pakiecie
cups-clients
.
Drukarka powinna działać od razu po zainstalowaniu,
można to przetestować z poziomu panelu konfiguracji
drukarki drukując stronę testową.
W razie problem�w pierwszą rzeczą jaką należy zrobić
to przejrzeć plik rejestrowania błęd�w (log):
/var/log/cups/error_log
.
Jeśli ciągle nie możemy odnaleźć źr�dła problemu
możemy spr�bować włączyć wysoki poziom raportowania
błęd�w. Dokonujemy to przez edycję w pliku
/etc/cups/cupsd.conf
i
przestawienie ustawienia opcji
"LogLevel
" z "info
" na "debug
" lub "
debug2
" np.:
LogLevel debug2
Kiedy rozwiążemy problem należy przywr�cić poprzedni poziom raportowania ze względu na szybki przyrost objętości log�w. Po każdej modyfikacji pliku konfiguracji należy przeładować demona:
# /etc/rc.d/init.d/cups restart
DHCP™ to protok�ł pozwalający urządzeniom pracującym w sieci LAN na pobieranie ich konfiguracji IP (adresu, maski podsieci, adresu rozgłoszeniowego itp.) z serwera. Ułatwia on administrację dużych i średnich sieci.
Aby uruchomić serwer DHCP musimy oczywiście zainstalować go. Instalacja w PLD jest prosta:
# poldek -i dhcp
Konfiguracja usługi przechowywana jest w pliku
/etc/dhcpd.conf
, z pakietem
dostarczona jest przykładowa konfiguracja,
pozwalająca uruchomić usługę po zmianie zaledwie kilku
wartości.
Przedstawiona poniżej sekcja zawiera parametry dla określonej
podsieci. Dla większej jasności w poniższym
przykładzie użyto skr�conej wersji konfiguracji.
ddns-update-style ad-hoc; # Sekcja konfiguracji host�w z podsieci o podanym adresie i masce subnet 192.168.0.0 netmask 255.255.255.0 { # domyślna brama sieciowa option routers 192.168.0.1; # maska option subnet-mask 255.255.255.0; # nazwa domeny (FQDN) option domain-name "domain.org"; # adres serwera DNS (kolejne dodajemy po przecinku) option domain-name-servers 192.168.1.1; # zakres dzierżawionych adres�w IP (z włączoną obsługą protokołu BOOTP) range dynamic-bootp 192.168.0.128 192.168.0.255; # domyślny czas dzierżawy (w sekundach) default-lease-time 21600; # maksymalny czas dzierżawy (w sekundach) max-lease-time 43200; }
Wewnątrz przedstawionej sekcji (ograniczonej nawiasami klamrowymi) umieszczane są opcje jakie zwykle podajemy przy statycznej konfiguracji interfejsu sieci. Powyższa konfiguracja będzie przydzielać komputerom dynamiczne adresy IP z zakresu 192.168.0.128 - 192.168.0.255 na okres 21600 sekund, jednak nie większy niż 43200 sekund.
I to już prawie koniec, teraz zostaje nam sprawdzenie pliku
/etc/sysconfig/dhcpd
.
Znajdujemy w nim linijki:
# The names of the network interfaces on which dhcpd should # listen for broadcasts (separated by space) DHCPD_INTERFACES=""
W cudzysłï¿½w wpisujemy nazwy interfejs�w na kt�rych będzie nasłuchiwał dhcpd (np. eth1). Po tej operacji wystarczy uruchomić lub zrestartować usługę.
Aby komputery mogły za każdym razem uzyskać taką samą konfigurację, musimy dla każdego z nich dodać odpowiednie wpisy w pliku konfiguracji. Konfiguracje host�w umieszczamy wewnątrz przedstawionej powyżej sekcji konfiguracji podsieci (uwaga na nawiasy klamrowe).
host nazwa_hosta { hardware ethernet 12:34:56:78:AB:CD; fixed-address 192.168.0.20; }
Poszczeg�lne komputery identyfikujemy za pomocą adres�w sprzętowych kart sieciowych (MAC). Powyższy przykład wymusza przydzielenie adresu IP 192.168.0.20 maszynie o MAC-u 12:34:56:78:AB:CD. Adresy MAC odczytamy za pomocą programu ip, lub iconfig, szczeg�ły na ten temat odnajdziemy w „Narzędzia sieciowe”.
Poniżej zamieszczono przykłady innych nieco rzadziej używanych opcji.
Domena NIS:
option nis-domain "domain.org";
Opcje protokołu NetBIOS:
#Adres serwera WINS option netbios-name-servers 192.168.1.1; #Rodzaj węzła NetBIOS option netbios-node-type 2;
Adres serwera czasu NTP:
option ntp-servers 192.168.1.1;
Szczeg�łowy opis konfiguracji klienta DHCP umieszczono w „Ethernet”. Jeśli zechcemy sprawdzić poprawność konfiguracji przydzielonej hostowi to wystarczy użyć programu ip, lub iconfig, szczeg�ły odnajdziemy w „Narzędzia sieciowe”.
W większości wypadk�w najlepszym wyborem będzie przypisywanie niezmiennych adres�w IP dla każdej z maszyn, pozwoli to zachować porządek i lepszą kontrolę nad siecią. Jest to absolutnie konieczne w wypadku serwer�w oraz router�w, jednak przy tego typu maszynach zaleca się zrezygnowanie z DHCP na korzyść statycznej konfiguracji.
Domyślnie logi demona są rejestrowane przez syslog-a z
ustawionym źr�dłem (facility) na "daemon". Tego rodzaju
komunikaty zwykle są zapisywane do pliku
/var/log/daemon
, dlatego tam właśnie
powinniśmy szukać informacji jeśli wystąpią jakieś problemy.
Usługa MTA (ang. message transfer agent) jest odpowiedzialna za przesył m.in. e-mail między serwerami. Najpopularniejszymi przedstawicielami tego typu usług są: Sendmail™, Postfix™ czy opisany przez nas Exim™. Oto zalety jakie przemawiają za wybraniem Exim™-a jako naszego MTA:
Ponieważ Sendmail™ nie posiada nawet połowy jego funkcji
Autoryzacja w Exim™-ie zaimplementowana jest domyślnie
Wsp�łpracuje z bazami MySQL™ i z Postgres™-em, a także ze zwykłymi plikami tekstowymi
Tom Kistner napisał do Exim™ użyteczna łatkę, rozbudowywującą Exim™ o obsługę program�w antywirusowych, demona SpamAssasin™ (skanera antyspamowego) oraz wykrywania błęd�w MIME - dzięki temu nie potrzebujemy wielkich i zasobożernych program�w w perlu
Za to Tomasz Kojm napisał bardzo dobry program antywirusowy: Clam AntiVirus™ - darmowy, w dodatku rewelacyjnie wsp�łpracujący z Exiscanem
Podsumowując - Exim™ jest rewelacyjnym MTA. Jego możliwości konfiguracji pozwoliły mi na zbudowanie dosyć rozbudowanego serwera poczty obsługującego zar�wno konta lokalne jak i konta zapisane w bazie danych MySQL™. Dodatkowe możliwości to np. przeszukiwanie plik�w konfiguracyjnych serwera cvs™ w poszukiwaniu adres�w docelowych dla alias�w w domenie cvs.rulez.pl. O rzeczach takich jak klasyfikowanie maili czy są spamem czy nie już nawet nie wspomnę. W dodatku Exim™ jest całkiem bezpiecznym MTA (wersja 4.x wg. securityfocus jak narazie dorobiła się jednego błędu - w końcu jakaś cena musi być za te wodotryski). Zresztą konstrukcja omawianego MTA na początku doprowadzała mnie do szału, gdyż Exim™ nie może sobie poradzić z smtp-auth via PAM™ z racji braku uruchamiania autoryzacji z własnego uid/gid zamiast root ;-)
Instalacja pakietu jest prosta. Uruchamiamy program: poldek i wykonujemy:
poldek -i exim
Oczywiście zanim wykonamy zalecenie startu demona powinniśmy dokonać konfiguracji, kt�rą opisuje następny rozdział.
Wszelkich zmian w konfiguracji dokonujemy w pliku
/etc/mail/exim.conf
.
Na początek wyjaśnimy jak zorganizowany
jest plik konfiguracyjny, wygląda to mniej
więcej tak:
# głï¿½wna sekcja ... opcje i dyrektywy sekcji głï¿½wnej begin sekcja1 opcje i dyrektywy sekcji1 begin sekcja3 ...
Tak więc plik ten jest zbudowany z sekcji, kt�re rozpoczynają się słowem begin nazwa, z wyjątkiem sekcji głï¿½wnej, kt�ra jest na samym początku pliku i nie posiada swojego begina. Sekcje r�wnież nie mają żadnych słï¿½w kluczowych, kt�re by je zamykały - po prostu początek begin nowej sekcji oznacza zakończenie poprzedniej. I tak, standardowo mamy następujące sekcje:
głï¿½wna - odpowiedzialna za podstawowe ustawienia Exim™
acl - listy kontroli dostępu, filtrowania, odrzucania i akceptowania poczty
routers - hm, najprościej jest to przetłumaczyć jako routery, czyli reguły kierowania wiadomości do odpowiednich transporter�w
transports - tutaj tworzymy sposoby doręczenia poczty
retry - ustawienia ponowień
rewrite - reguły do przepisywania nagłï¿½wk�w
authenticators - reguły do autoryzacji
Co to są te całe 'transportery' i 'routery'? Właściwie to serce Exima. Jeżeli Exim dostaje jakiegoś maila to najpierw puszcza go przez routery, kt�re można por�wnać do reguł ipchains/iptables - jeżeli mail załapie się na jakąś regułę (router) to jest przekazywany do transportu określonego przez ten router. Inaczej m�wiąc router w Eximie kieruje maila do odpowiedniego transportera. Transporter natomiast robi już z mailem co należy - doręcza go lokalnie, albo przekierowywuje gdzieś indziej albo odsyła do innego serwera. Wiem, że w tym momencie może wydawać się to skomplikowane, ale nie przejmujcie się, to tylko wiedza teoretyczna kt�ra na początku nie będzie wam potrzebna. Musiałem natomiast wam wytłumaczyć, że są sekcje i że musicie nauczyć się tego, iż jak napiszę 'dopisać w sekcji głï¿½wnej' to należy coś dopisać na początku pliku.
Zanim zaczniemy konfigurację demona SMTP, musimy koniecznie dodać rekord MX do każdej strefy DNS obsługiwanej przez nasz serwer. Informacje na ten temat zawarto w „BIND - Serwer Nazw”.
Domeny lokalne to takie, kt�re Exim™ ma traktować jako 'swoje' domeny. Mail zaadresowany @jakas.domena.lokalna kt�ry dotrze do Exim™ zostanie dostarczony lokalnie. Domeny takie definiuje w dyrektywie domainlist local_domains. Standardowo, przyjmowana jest poczta wysyłana do domeny identycznej jak hostname serwera:
domainlist local_domains = @
Znak @ oznacza właśnie 'moja nazwa'. Aby dopisać kolejne domeny wystarczy dodać je do tej listy rozdzielając je dwukropkami:
domainlist local_domains = @ : domena.pl : baseciq.org : \ /etc/mail/local_domains
Poza domena.pl, baseciq.org, Exim będzie teraz także
akceptował domeny wypisane w pliku
/etc/mail/local_domains
. Domeny tam należy wpisywać w
oddzielnych linijkach. Exim™ o tyle fajnie działa, że
po dopisaniu ścieżki do pliku, wystarczy go raz
zrestartować. Jakiekolwiek kombinacje w
/etc/mail/local_domains
nie będą wymagały restartu.
Tak więc najwygodniej będzie dopisać do pliku
konfiguracyjnego:
domainlist local_domains = @ : /etc/mail/local_domains
I po prostu powpisywać wszystkie domeny do
/etc/mail/local_domains
.
Domeny dla kt�rych mamy być zapasowym MX'em tworzy się bardzo łatwo. Linijkę pod domainlist local_domains jest domainlist relay_to_domain. Działa to w taki sam spos�b jak konfiguracja domen lokalnych, czyli, piszemy:
domainlist relay_to_domains = /etc/mail/relay_to_domains
Od teraz, Exim™ będzie akceptował każdą pocztę
zaadresowaną do domen zawartych w pliku
/etc/mail/relay_to_domains
. A co z nią zrobi? Jak
wiadomo, jeżeli domena ma kilka MX'�w, to Exim™ będzie
starał się ją dostarczyć do serwera o najniższym
priorytecie MX. Chyba że on ma najniższy, to
wygeneruje błąd.
Relaying, czyli określenie kto może przez nasz serwer wysyłać pocztę. I tutaj, listę adres�w i host�w buduje się w podobny spos�b do local_domains i relay_to_domains. Wystarczy stworzyć listę o nazwie relay_from_hosts:
hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/16
Uwaga! Już w tym momencie możemy sprawdzić działania serwera. Wystarczy że przeładujemy demona i wyślemy e-mail do istniejącego konta użytkownika. Przy takiej konfiguracji poczta będzie docierała do skrzynek typu mbox.
Exim potrafi umieszczać pocztę zar�wno w skrzynkach typu mbox
(pliki tekstowe w /var/mail/
)
jak i coraz popularniejszych skrzynkach typu Maildir (pliki
przechowywanie w katalogu umieszczonym w katalogu domowym użytkownika).
Ze względu na wsteczną zgodność Exim domyślnie używa tych pierwszych,
aby używać Maildir-a wykonujemy następujące czynności:
W sekcji konfiguracji transporter�w odszukujemy opcję "local_delivery", tam wstawiamy znak komentarza przed opcją "file =" i dodajemy linijki:
maildir_format = true directory=${home}/Mail/Maildir
Jak się łatwo domyślić druga z opcji wskazuje miejsce przechowywanie skrzynek. Po modyfikacji omawiana sekcja może wyglądać następująco:
local_delivery: driver = appendfile # file = /var/mail/$local_part delivery_date_add envelope_to_add return_path_add group = mail mode = 0660 maildir_format = true directory=${home}/Mail/Maildir
Exim samodzielnie tworzy skrzynki pocztowe (oba rodzaje), wystarczy jedynie wysłać e-mail na konto użytkownika.
Możemy przekazać dostarczanie poczty do skrzynek
programowi Procmail™. Wystarczy, że
w sekcji router�w usuniemy znaki komentarza z kolejnych
wierszy zaczynających się od "procmail:", podobnie
postępujemy w sekcji transporter�w w miejscu zaczynającym się
od wiersza "procmail_pipe:". Na koniec
musimy jeszcze tylko umieścić plik konfiguracji Procmaila:
.procmailrc
w katalogu domowym
użytkownika.
Czasami (czytaj: gdy mamy sieczkę w
/etc/hosts
) Exim™
zgłasza się nie jako
serwer.domena.pl a jako sam
'serwer'. Jeżeli zmiana wpis�w w
/etc/hosts
nie
pomaga, albo gdy chcemy aby nasze MTA przedstawiało
się inaczej niż hostname maszyny na kt�rym stoi
wystarczy ustawić (bądź dodać gdy jej nie ma) opcję
primary_hostname w głï¿½wnej sekcji:
primary_hostname = serwer.domena.pl
W czasach zabawy z Sendmail™-em podawałem także spos�b
na ograniczenie bannera, kt�ry się pojawiał po telnecie
na port 25. W Exim™-ie nie jest to skomplikowane i służy
do tego opcja smtp_banner
w sekcji głï¿½wnej:
smtp_banner = $primary_hostname ESMTP $tod_full
Spowoduje to wyświetlanie następującego tekstu jako bannera:
220 serwer.domena.pl ESMTP Wed, 23 Jul 2003 15:18:04 +0200
Chyba nie muszę tłumaczyć, że aby usunąć datę należy
wywalić $tod_full
?
Teraz zajmiemy się aliasami. Plik z aliasami powinien
znajdować się w /etc/mail/aliases
.
Jest to czysty plik tekstowy, wprowadzone w nim zmiany
wymagają wydania polecenia
newaliases. Restart demona nie jest
konieczny. Jeżeli jednak nie macie pewności czy
tam powinien być plik z aliasami, w sekcji routers
odszukajcie ciąg system_aliases: - jest to definicja
routera odpowiedzialnego za rozwiązywanie alias�w. Tam
też, w linijce data widać ścieżkę do pliku z aliasami:
system_aliases: driver = redirect allow_fail allow_defer data = ${lookup{$local_part}lsearch{/etc/mail/aliases}} file_transport = address_file pipe_transport = address_pipe
Jeżeli z naszego SMTP korzystają użytkownicy spoza sieci lokalnej przyda nam się autoryzacja. Sprawa w Exim™-ie jest dosyć zawiła. Ot�ż Exim™ zbyt wcześnie zrzuca uprawnienia root, tak że opisywany na wielu stronach opis zrobienia autoryzacji via PAM najczęściej nie działa. Z pomocą przyjdzie nam pakiet cyrus-sasl™, a dokładniej pwcheck daemon™ (w PLD cyrus-sasl-saslauthd™). W sekcji AUTHENTICATORS wpisujemy następujące linijki (lub kasujemy komentarze #)
plain: driver = plaintext public_name = PLAIN server_prompts = : server_condition = ${if saslauthd{{$1}{$3}}{1}{0}} # powyższy wpis zadziała przy saslauthd -a shadow, jeżeli # uruchomicie saslauthd -a pam (np. PLD) wpiszcie wtedy: # server_condition = ${if saslauthd{{$1}{$3}{smtp}}{1}{0}} server_set_id = $2 login: driver = plaintext public_name = LOGIN server_prompts = "Username:: : Password::" server_condition = ${if saslauthd{{$1}{$2}}{1}{0}} # powyższy wpis zadziała przy saslauthd -a shadow, jeżeli # uruchomicie saslauthd -a pam (np. PLD) wpiszcie wtedy: # server_condition = ${if saslauthd{{$1}{$2}{smtp}}{1}{0}} server_set_id = $1
Ostatnią rzeczą przy saslauthd™ (uruchomionym z opcją -a
pam) jaką trzeba
stworzyć (lub sprawdzić czy jest) to plik
/etc/pam.d/smtp
:
#%PAM-1.0 # # example PAM file for saslauthd - place it as /etc/pam.d/ # (e.g. /etc/pam.d/smtp if you want to use saslauthd for SMTP # AUTH) # auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/security/blacklist onerr=succeed auth required /lib/security/pam_unix.so auth required /lib/security/pam_tally.so file=/var/log/faillog onerr=succeed no_magic_root auth required /lib/security/pam_nologin.so account required /lib/security/pam_tally.so deny=0 file=/var/log/faillog onerr=succeed no_magic_root account required /lib/security/pam_unix.so session required /lib/security/pam_unix.so
Pozostaje mi tylko wam przypomnieć, że przed sprawdzaniem autoryzacji należy także uruchomić pwcheck saslauthd™
# echo 'pwcheck_method:saslauthd' > /etc/sasl/smtpd.conf
Exim™ sobie bardzo dobrze radzi z połączeniami szyfrowanymi przy użyciu protokołu SSL (wspiera metodę STARTTLS). Wystarczy wygenerować odpowiednie certyfikaty:
$ openssl genrsa -out /etc/mail/exim.key 1024 Generating RSA private key, 1024 bit long modulus .......++++++ ..............................++++++ e is 65537 (0x10001) $ openssl req -new -x509 -days 365 -key /etc/mail/exim.key -out \ /etc/mail/exim.crt Using configuration from /var/lib/openssl/openssl.cnf You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:PL State or Province Name (full name) [Some-State]:Mazowsze Locality Name (eg, city) []:Warsaw Organization Name (eg, company) [Internet Widgits Pty Ltd]:Baseciq Ltd. Organizational Unit Name (eg, section) []:Baseciq's Mail Server Common Name (eg, YOUR name) []:viper.baseciq.org Email Address []:[email protected]
Oczywiście na pytania odpowiadajcie podając swoje dane... Po takim zabiegu do sekcji głï¿½wnej Exim™ należy dopisać:
tls_certificate = /etc/mail/exim.crt tls_privatekey = /etc/mail/exim.key tls_advertise_hosts = *
Po tym zabiegu i restarcie Exim™ powinien bez problemu komunikować się po SSL, co zresztą widać w logach:
2003-09-07 01:48:36 19vmnC-0006EG-27 <= [email protected] H=plug.atn.pl [217.8.186.28] U=exim P=esmtp X=TLSv1:DES-CBC3-SHA:168 S=2909 id=ebb601c374e2$80dace00$cab00a12@fv
Dawniej Exim™ m�gł nasłuchiwać porcie 465 jedynie przy użyciu inetd, w nowszych wersjach wystraczy że ustawimy odpowiednie opcje:
daemon_smtp_ports = 25 : 465 tls_on_connect_ports = 465
Warto by było, żeby także pop3d™ obsługiwał SSL natywnie ssl (bez jakichś stunneli i innych wynalazk�w). Ja osobiście polecam demonik tpop3d™, kt�rego konfiguracja jest bardzo prosta. Instalujemy tpop3d:
# poldek -i tpop3d
a następnie wystarczy że standardowe
listen-address w pliku /etc/tpop3d.conf
zmienimy na
takie:
listen-address: 0.0.0.0;tls=stls,/etc/mail/exim.crt,/etc/mail/exim.key \ 0.0.0.0;tls=immediate,/etc/mail/exim.crt,/etc/mail/exim.key
Od teraz tpop3d™ na porcie 110 będzie obsługiwał SSL po wykonaniu komendy STLS (np. TheBat™ potrafi tak zacząć sesję SSL) a na porcie 995 będzie od razu używał SSL (TheBat™, Outlook Express™).
Generalnie nie ma sensu męczyć kernela i filesystemu żeby pilnował quoty na pocztę. Szczeg�lnie gdy MTA samo sobie może z tym poradzić. Służy do tego parametr quota w konfiguracji transport�w. I tak, w najprostszy spos�b można lokalną quotę per user ustawić w konfiguracji transportu local_delivery (odpowiedzialnego za lokalne dostarczanie poczty):
local_delivery: driver = appendfile file = /var/mail/$local_part delivery_date_add envelope_to_add return_path_add # A tutaj dodajemy quotę w wysokości 20MB: quota = 20M
Proste, prawda? Tak naprawdę ma to zastosowanie w systemach poczty wirtualnej gdzie możemy w bazie danych przechowywać quotę użytkownika i można skonstruować zapytanie SQL do odpytania ile miejsca ma dany użytkownik. Ale jeżeli nie możecie sobie poradzić z quotą systemową, możecie zamiast quota = 20M dopisać coś takiego:
quota = ${lookup{$local_part}lsearch{/etc/mail/quota.conf}{$value}{0M}}
Od tego momentu w pliku
/etc/mail/quota.conf
możesz
trzymać wielkości skrzynek dla poszczeg�lnych
użytkownik�w. Jeżeli ktoś nie zostanie tam wymieniony,
to nie będzie miał żadnych limit�w na swoją skrzynkę
pocztową. Plik taki powinien wyglądać mniej więcej
tak:
lukasz: 100M kflis: 5M ania: 20M
I tak oto ja mam 100mb na pocztę, kubuś tylko 5, a siostra 20 MB ;) Podobnym parametrem każdego transportera jest message_size_limit. Wystarczy wpisać:
message_size_limit = 10M
Podobnie jak powyżej, można zrobić to na bazie pliku -
wystarczy zamiast
/etc/mail/quota.conf
użyć np.
/etc/mail/size_limits.conf
;-) BTW. na końcu linijki z
quotą, gdzie mamy '0M' możemy wstawić np. '20M'.
Wtedy, osoby nie dopisane do
/etc/mail/quota.conf
będą
miały 20MB limitu (limit domyślny).
Oczywiście jak na Exim™ przystało, od quoty jest więcej bajerk�w. Chyba najbardziej pożądanym będzie opcja quota_warn_message. Jest to nic innego jak mail ostrzegający usera o tym, że skrzynka jest zapchana po same brzegi. Zanim jednak polecisz to wdrażać, zainteresuj się jak to działa. Ot�ż po dostarczeniu każdego maila Exim™ będzie sprawdzał czy został przekroczony konkretny pr�g (podany w megabajtach lub w procentowo). Jeżeli tak, wygeneruje on odpowiednią wiadomość. I tak, dodajemy do molestowanego przez nas local_delivery następujące opcje:
quota_warn_message = "\ Content-Type: text/plain; charset=ISO-8859-2\n\ To: $local_part@$domain\n\ Reply-to: Administratorzy sieci <[email protected]>\n\ Subject: Informacja o Twoim koncie pocztowym\n\ \n\ *** Ta wiadomość została wygenerowana automatycznie ***\n\ \n\ Uprzejmie informujemy, iż skrzynka pocztowa została zapełniona w 90%\n\ swojej pojemności. W przypadku 100% nie będą dostarczane\n\ do Ciebie nowe wiadomości. Opr�żnij skrzynkę pocztową ze starych\n\ wiadomości.\n" quota_warn_threshold = 90%
Aby Exim™ wsp�łpracował z jakimś antywirusem należy najpierw wybrać i zainstalować program antywirusowy. Doświadczenie uczy, że najlepszy jest program Clamav™.
Instalujemy więc Clamav™
# poldek -i clamav clamav-database
Po zainstalowaniu Clamav™ musimy zmodyfikować plik
konfiguracyjny /etc/mail/exim.conf
w sekcji głï¿½wnej ustawiamy typ antywirusa:
av_scanner = clamd:/var/lib/clamav/clamd.socket
Po dwukropku ustawiamy ścieżkę do socketu antywirusa (w
przypadku clamav™ - zajrzyj do pliku
/etc/clamav.conf
).
W miejscu gdzie wpisaliśmy clamd, możemy wpisać także i inny
typ skanera. Niestety, żaden z innych obsługiwanych (sophie™,
kavdaemon™, drweb™) skaner�w nie jest darmowy. Jeżeli natomiast wolicie
mks™, to możecie użyć takiej opcji:
av_scanner = mksd
Kolejnym etapem, jest stworzenie reguł do filtrowania maili z wirusami. W tym celu, dopisujemy do sekcji głï¿½wnej pliku konfiguracyjnego Exim™:
acl_smtp_data = exiscan
Teraz zaczynamy grzebanie w sekcji acl, gdzie dopisujemy (najlepiej na samym początku):
exiscan: deny message = Znaleziono wirusa. \n\ Virus or other harmful content found: $malware_name delay = 1s malware = * warn message = X-MIME-Warning: Serious MIME defect detected ($demime_reason) demime = * condition = ${if >{$demime_errorlevel}{2}{1}{0}} warn message = Message-ID: <E$message_id@$primary_hostname> condition = ${if !def:h_Message-ID: {1}} accept
Pierwszy wpis odpowiednio skanuje cały e-mail i jeśli zostanie znaleziony wirus lub inna zawartość uznana za szkodliwą przez skaner antywirusowy to taki mail jest odrzucany oraz informacja o znalezionym wirusie zostaje wyświetlona z jednosekudnowym op�źnieniem. Te op�źnienie ma na celu unikniecia ewentualnego zapchania serwera poczty poprzez uciążliwego użytkownika co chwila pr�bujacego wysłać pocztę uznaną za szkodliwą. Kolejny warunek spowoduje iż maile z uszkodzonymi nagłï¿½wkami MIME zostaną odpowiednio oznaczone (czyli, także, duże maile podzielone na części, o czym niestety autor exiscana (aut. łatki dla Exim™-a) nie wspomina, dlatego ich nie odrzucamy). Ostatni warunek ma na celu wyeliminowanie sytuacji gdy jakaś wiadomość, kt�ra dotarła do naszego serwera poczty nie posiada unikalnego identyfikatora. W takim przypadku generujemy i dopisujemy własny Message-ID.
Aby skaner av m�gł sprawdzać pocztę Exima musi zostać
dodany do grupy exim. Dokonujemy
tego poleceniem groupadd albo
edytując po prostu plik /etc/group
:
[...] exim:x:79:clamav,mail [...]
Kolejny feature jaki daje exiscan to odrzucanie plik�w z załącznikiem o określonym rozszerzeniu. W tym celu dopisujemy zaraz po exiscan: następujące linijki:
deny message = Niedozwolone zalaczniki. \n\ Blacklisted file extension ($found_extension) detected. condition = ${if match \ {${lc:$mime_filename}} \ {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.vbs)$\N} \ {1}{0}} delay = 1s log_message = Blacklisted file extension ($found_extension) detected.
Powyższa reg�łka ma na celu zablokowanie możliwości wysyłanie wiadomości, kt�rych załącznikami są pliki: *.exe, *.pif, *.bat, *.scr, *.lnk oraz *.vbs. Teraz, jeżeli nie chcemy aby skanowane były maile pochodzące od danych adres�w ip dopisujemy (jeżeli chcemy aby Ci ludzie też nie mogli wysyłać plik�w *.com, to po poprzedniej regułce, jeżeli oni będą mogli, to przed):
accept hosts = /etc/mail/dontscan
Teraz, w pliku /etc/mail/dontscan
umieszczamy adresy
IP bądź klasy adresowe z kt�rych poczta ma nie być
skanowana.
Jeżeli natomiast chcecie, by poczta przeskanowana u was w przypadku gdy wr�ci w jakiś spos�b z powrotem do naszego serwera (np. poprzez alias na innym serwerze) nie była ponownie skanowana, możecie zacząć oznaczać pocztę odpowiednimi znacznikami oraz przyjąć że poczta z tym znacznikiem nie była ponownie skanowana. Tak więc, przed końcowym accept dodajemy:
warn message = X-Scan-Signature: ${hmac{md5}{atutajwpiszhaslo} \ {$body_linecount}}
Exim™ spowoduje dodanie zaszyfrowanego ciągu znak�w składającego się z hasła i wielkości maila. Dzięki temu ktoś kto nie pozna waszego hasła nie będzie m�gł sfałszować informacji o tym że mail został już zeskanowany. Teraz, aby taka poczta przechodziła bez skanowania, na samym początku po exiscan: dopisujemy:
accept condition = ${if eq {${hmac{md5}{atutajwpiszhaslo} \ {$body_linecount}}}{$h_X-Scan-Signature:} {1}{0}}
Ustawienie takich regułek z tym samym hasłem na kilku serwerach spowoduje że gdy mail będzie przechodził przez kilka z nich, tylko jeden będzie musiał go przeskanować.
Zjawisko spamu jest niezwykle uciążliwe. W niekt�rych Stanach w USA
traktowane jest w kategoriach kryminalnych. Zapewne znasz jego
definicję lub przynajmniej wiesz jak spam wygląda. W skr�cie jest to
wiadomość e-mail, kt�rej nie chciałeś otrzymać. Exim posiada wbudowaną obsługę
filtra antyspamowego opartego na technice dnsbl, może wykorzystwać zar�wno
czarne listy
jak i białe listy
nadawc�w oraz adres�w serwer�w.
Kolejnym bardzo prostym ale niezwykle skutecznym w walce ze spamem jest maksymalne op�źnianie procesu komunikacji pomiedzy klientem wysyłającym poczte a serwerem MTA. Nie tylko odcina to część robot�w spamerskich ale także zmiejsza ryzyko przeciążenia serwera.
Przejdźmy do konfiguracji. Wszystkie te wpisy powinny znaleść się w sekcji
ACL CONFIGURATION
w obrębie acl_check_rcpt:
.
Wymuszamy helo/ehlo
deny message = Wymagane RFC HELO/EHLO zanim wyslesz wiadomosc. \n\ RFCs mandate HELO/EHLO before mail can be sent. condition = ${if or{{!def:sender_helo_name}{eq{$sender_helo_name}{}}}{yes}{no}} delay = 5s log_message = No HELO/EHLO.
Definujemy własne białe listy
.
Jeśli nasz zestaw reg�ł okazałby się zbyt restrycyjny możemy oznaczyć aby pewne domeny
były traktowane "ulgowo".
accept domain = +local_domains condition = /etc/mail/whitelist
Sprawdzamy czy serwer nadawcy figuruje na listach RBL
deny message = Serwer nadawcy figuruje na liscie RBL \n\ Server $sender_host_address is at RBL: \ $dnslist_domain\n$dnslist_text delay = 5s dnslists = blackholes.mail-abuse.org : \ dialup.mail-abuse.org : \ dnsbl.njabl.org : \ sbl.spamhaus.org : \ list.dsbl.org : \ cbl.abuseat.org : \ relays.ordb.org : \ bl.spamcop.net hosts = ! +relay_from_hosts log_message = Listed at RBL list: $dnslist_domain\n$dnslist_text. deny message = Serwer nadawcy figuruje na liscie RBL \n\ Server $sender_host_address is at RBL: $dnslist_domain. hosts = ! +relay_from_hosts dnslists = bogusmx.frc-ignorant.org/$sender_host_name : \ dns.rfc-ignorant.org/$sender_host_name delay = 5s log_message = Listed at RFC-Ignorant.
Teraz dokonujemy weryfikacji podanego HELO
HELO
nie może być postaci localhost.localhomain
deny message = Niepoprawne HELO. \n\ $sender_helo_name is a stupid HELO. hosts = !+relay_from_hosts condition = ${if match {$sender_helo_name}{\N^(127\.0\.0\.1|localhost(\.localdomain)?)$\N}{yes}{no}} delay = 5s log_message = Stupid localhost HELO.
HELO
musi być nazwą domenową (hostname
)
deny message = HELO musi byc nazwa domenowa. \n\ HELO must be hostname. hosts = !+relay_from_hosts condition = ${if !match {$sender_helo_name}\ {\N.*[A-Za-z].*\N}{yes}{no}} delay = 5s log_message = Helo must be hostname.
Według RFC821
HELO
musi być pełną nazwą domenową
(Fully Qualifield Domain Name
).
deny message = HELO nie wyglada poprawnie. Zobacz RFC 821. \n\ HELO must contain a Fully Qualifield Domain Name. See RFC821. hosts = !+relay_from_hosts condition = ${if !match{$sender_helo_name} \ {\N.*[A-Za-z].*\..*[A-Za-z].*\N}{yes}{no}} delay = 5s log_message = HELO is not a FQDN.
Eliminujemy sytuację gdy nadawca jako HELO
podaje
serwer z naszej domeny np. domena.pl
deny message = Wykryto zafalszowane RFC HELO. \n\ Fake HELO detected: $sender_helo_name. condition = ${if eq{$sender_helo_name}\ {\N^(.*\.)?domena\.pl$\N}{yes}{no}} hosts = !+relay_from_hosts delay = 5s log_message = Fake HELO from host $sender_helo_name.
Kolejne dwa warunki są bardzo restrycyjnymi testami. Formalnie przez RFC
nie jest wymagane aby domena miała zdefiniowany rekord MX. Lecz każdy szanujący się
administrator poważnej domeny zawsze zadba aby odpowiednie serwery figurowaly jako MX.
RFC zaleca aby jeśli już jest zdefiniowany rekord MX dla domeny, to aby był on postaci FQDN
deny message = Brak zdefiniowanego rekordu MX dla domeny. \n\ No MX envelope sender domain $sender_address_domain. hosts = ! : !+relay_from_hosts senders = ! : condition = ${if eq{${lookup dnsdb{mx=$sender_address_domain}{$value}fail}}{fail}{yes}{no}} delay = 5s log_message = No MX record in DNS. deny message = Rekord MX w DNS musi byc postaci FQDN. \n\ MX for transport sender domain $sender_address_domain must be FQDN. hosts = ! : !+relay_from_hosts senders = ! : condition = ${if !match {${lookup dnsdb{mx=$sender_address_domain}{$value}fail}}\ {\N.*[A-Za-z].*\..*[A-Za-z].*\N}{yes}{no}} delay = 5s log_message = MX record is not a FQDN.
Kr�tkie wyjaśnienie wykorzystanych opcji
deny message
Określamy jaka informacja zwrotna pojawi się u nadawcy.
delay
Op�źnienie po jakim komunikat określnony jako message
zostanie
zwr�cony nadawcy.
dnslist
Lista system�w z bazami blokującymi serwery open relay
.
Wymienione tutaj powinny skutecznie powstrzymać spam. Jeżeli
nadal dostajesz niechciane maile, wykonaj następujące
czynności. Sprawdź w nagłï¿½wku wiadomości adres IP serwera,
kt�ry przekazał Twojemu MTA pocztę. Wejdź na stronę:
www.ordb.org/lookup/
i wpisz adres IP do sprawdzenia. Jeżeli wyszukiwanie w bazie
ordb.org nie przyniesie rezultat�w, wejdź tutaj:
http://www.ordb.org/lookup/rbls/?host=w.x.y.z, gdzie zamiast symbolicznego zapisu podajemy adres IP.
Skonstruowane w ten spos�b zapytanie dokona sprawdzenia, czy dany adres IP figuruje na
innych czarnych listach. Pozytywny rezultat testu powinien zwr�cić w odpowiedzi
listę system�w RBL (Relay Black List). Można ją wykorzystać
dopisując do naszej regułki. Uważaj na system
block.blars.org
figuruje w nim smtp.wp.pl.
hosts
Podana lista serwer�w. W powyższym przykładzie jest to !+relay_from_hosts
co oznacza, że cała reg�łka dotyczy połączeń z wszystkich serwer�w za wyjątkiem tych
zdefiniowanych jako relay_from_hosts
.
log_message
Informacja jaka zostanie zapisana w dzienniku systemowym exima
czyli /var/log/exim/main.log
Teraz należałoby włączyć wszystkie usługi jakie zainstalowaliśmy
# /etc/rc.d/init.d/exim start # /etc/rc.d/init.d/saslauthd start # /etc/rc.d/init.d/clamd start # /etc/rc.d/init.d/tpop3d start # /etc/rc.d/init.d/rc-inetd restart
Na koniec przykładowy zapis z dziennika systemowego Exima
2004-03-04 21:05:24 H=(sina.com) [218.79.119.92] F=< [email protected] > \ rejected RCPT < [email protected] >: \ Serwer 218.79.119.92 figuruje na czarnej liście dnsbl.sorbs.net
Jeżeli czytasz tą część opisu konfiguracji exima stanąłeś przed problemem
obsługi przez niego więcej niż jednej domeny. Exim jest jak najbardziej
do tego przystosowany. Poniżej zamieszczam listing z pliku
/etc/mail/exim.conf
virtusertable_alias: driver = redirect allow_fail allow_defer data = ${lookup{$local_part@$domain}lsearch{/etc/mail/virtusertable}} file_transport = address_file pipe_transport = address_pipe virtusertable_defaultalias: driver = redirect allow_fail allow_defer data = ${lookup{@$domain}lsearch{/etc/mail/virtusertable}} file_transport = address_file pipe_transport = address_pipe
Powyższy przykład umieść umieść na początku sekcji routers
. Dla przypomnienia
dodam, że początek sekcji oznacza się słowem kluczowym begin
.
Jak słusznie zauważyłeś, wpisy z virtusertable
do złudzenia przypominają
te z system_aliases
. Działa to właściwie w ten sam spos�b. Podczas
odbierania przesyłki exim czyta linijkę data
. Ma w niej zdefiniowane, że
ma szukać na podstawie local_part
czyli to co jest przed znakiem
@ oraz domain
czyli części domenowej adresu. Wartości
kt�re zostaną podstawione zamiast tych zmiennych zostaną por�wnane z plikiem
/etc/mail/virtusertable
. Jeżeli wynik por�wnania wypadnie pomyślnie
poczta zostanie dostarczona do odpowiedniego użytkownika, jeżeli zaś nie, odpytane zostaną
aliasy systemowe. Jeżeli i tam użytkownik nie zostanie odnaleziony, zostanie wysłana
wiadomość z odpowiednią informacją do nadawcy z komunikatem błędu. Część
defaultalias
jest prawie identyczna. R�żnica tkwi jedynie w opcji
data
. Sprawdzana jest jedynie część domenowa. Poniżej zamieszczam listing
z pliku /etc/mail/virtusertable
[email protected] user [email protected] user2 @jakasdomena.pl user3
Jak widać budowa pliku jest prosta i czytelna. User3 będzie otrzymywał całą pocztę z domeny jakasdomena.pl. Po tych zabiegach exim powinien być już przygotowany do obsługi wielu domen. Musisz pamiętać aby go zrestartować po dokonaniu modyfikacji jego pliku konfiguracyjnego.
# /etc/rc.d/init.d/exim restart
W przypadku, gdy masz zamiar gdzieś wyjechać na dłużej i nie będziesz miał dostępu do poczty, dobrym pomysłem jest ustawienie automagicznej odpowiedzi dla ludzi, kt�rzy do Ciebie piszą. Tu z pomocą przychodzi nam opcja w Eximie™.
Na początku edytujemy plik /etc/mail/exim.conf
i w sekcji routers
przed localuser router
dodajemy następujące linijki:
user_vacation: driver = accept check_local_user # nie odpisujemy na błędy bądź listy dyskusyjne condition = "${if or {{match {$h_precedence:} {(?i)junk|bulk|list}} {eq {$sender_address} {}}} {no} {yes}}" no_expn require_files = /var/mail/vacation/${local_part}/vacation.msg # nie odpisujemy na maile od list dyskusyjnych oraz na powiadomienia o błędach senders = " ! ^.*-request@.*:\ ! ^.*@list*.*:\ ! ^owner-.*@.*:\ ! ^postmaster@.*:\ ! ^listmaster@.*:\ ! ^mailer-daemon@.*\ ! ^root@.*" transport = vacation_reply unseen user = ${local_part} no_verify
Następnie tworzymy katalog /var/mail/vacation
, w kt�rym będą się znajdować katalogi
zawierające nazwę użytkownika oraz pliki z informacjami o powodzie jego nieobecności. Pow�d taki
wpisujemy do pliku vacation.msg
znajdującego się w
/var/mail/vacation/NAZWA_UŻYTKOWNIKA/
. Gdy już mamy te ustawienia za sobą w sekcji
transport
dodajemy następujące linijki:
vacation_reply: driver = autoreply file = /var/mail/vacation/$local_part/vacation.msg file_expand from = System Automatycznej Odpowiedzi <$original_local_part@$original_domain> log = /var/mail/vacation/$local_part/vacation.log once = /var/mail/vacation/$local_part/vacation.db once_repeat = 7d subject = ${if def:h_Subject: {Re: ${quote:${escape:${length_50:$h_Subject:}}} (autoreply)} {Informacja} } text = "\ Witaj $h_from\n\n\ Ta wiadomość została wygenerowana automatycznie\n\ Tekst poniżej zawiera informację od użytkownika:\n\ ====================================================\n\n\ " to = "$sender_address"
Ważną częścią tutaj jest opcja once_repeat
, kt�ra sprawdza jak często nadawcy będą otrzymywać
odpowiedzi. W tej konfiguracji jest to co 7dni.
To wszystko, teraz musimy jeszcze zrestartować Exima™ i możemy jechać na urlop.
# /etc/rc.d/init.d/exim restart
Heimdal jest implementacją nowoczesnego sieciowego protokołu uwierzytelniania użytkownik�w Kerberos. Użytkownik po standardowym zalogowaniu za pomocą hasła na czas trwania sesji otrzymuje specjalny unikalny klucz (w terminologii kerberos'a nazywany biletem (ang. ticket)) za pomocą kt�rego może uzyskać dostęp do innych usług w sieci już bez konieczności dodatkowego podawania hasła.
Każda sieć posiada wydzielony serwer Kerberos, zwany KDC (Key Distibution Center) kt�rego zadaniem jest zarządzanie centralną bazą kluczy (m.in. wydawanie nowych kluczy oraz odpowiadanie na pytania dotyczące ich autentyczności).
Uwaga:Kerberos nie zapewnia dystrybucji bazy użytkownik�w w sieci - do tego celu najlepiej użyć usługi NIS.
Za pomocą poldka instalujemy serwer i narzędzia heimdal'a:
# poldek -i heimdal heimdal-server
Edytujemy plik konfiguracyjny /etc/heimdal/krb5.conf
. Plik ten używany jest przez biblioteki heimdal'a i powinien być obecny
na wszystkich maszynach, na kt�rych będziemy używali kerberos'a (na serwerze i klientach)
[libdefaults] default_realm = FOO.PL clockskew = 300 v4_instance_resolve = false [realms] FOO.PL = { kdc = kdc.foo.pl kpasswd_server = kdc.foo.pl admin_server = kdc.foo.pl } [domain_realm] .foo.pl = FOO.PL foo.pl = FOO.PL
default_realm
określa domyślną domenę kerberos'a.
Zamiast FOO.PL wpisujemy wybraną nazwę domeny, typowo jest to
pisana wielkimi literami nazwa naszej domeny dns.
kdc.foo.pl zastępujemy adresem serwera, na kt�rym uruchomiony jest
serwer KDC heimdal'a.
clockskew
określa maksymalną r�żnicę czasu (w sekundach) pomiędzy
serwerem a klientami (jeżeli r�żnica czasu będzie większa niż podana,
kerberos odm�wi wsp�łpracy) dlatego dobrze w sieci uruchomić także usługę
synchronizacji czasu ntp.
Sekcja [realms]
definiuje domeny kerberosa. Można tu wymienić kilka
niezależnych domen, określając dla nich lokalizację serwer�w kerberosa.
kdc.foo.pl zastępujemy oczywiście nazwą hosta na kt�rym będzie uruchomiona
usługa kdc.
Ostatnia sekcja [domain_realm]
określa mapowanie nazw dns na domeny
kerberosa. Na tej podstawie heimdal wie na podstawie nazwy dns hosta w jakiej
domenie kerberos'a się znajduje. Nazwa dns zaczynająca się od kropki pasuje do
dowolnej poddomeny podanej domeny.
uruchamiamy usługę dystrybucji kluczy KDC:
# service heimdal start
Do zarządzania domeną kerberos'a używamy narzędzia kadmin. Inicjalizujemy domenę i dodajemy użytkownika, w tym przypadku mrk (zostawiając domyślnie proponowane wartości):
# kadmin -l kadmin>init FOO.PL kadmin>add mrk
Opcja -l uruchamia kadmin w trybie lokalnym,
program musi być uruchomiony z konta root. Możemy także dopisać do pliku
/etc/heimdal/krb5.acl
:
[email protected] all
dając użytkownikowi [email protected] prawo do administracji kerberosem - w tym przypadku
kadmin wołamy z parametrem -p użytkownik
Logujemy się w systemie na koncie zwykłego użytkownika (w naszym przykładzie mrk) i pr�bujemy się zalogować do domeny kerberosa:
$ kinit
kinit domyślnie pr�buje uzyskać bilet dla zalogowanego użytkownika, można to zmienić podając użytkownika jako parametr.
Sprawdzamy, czy kerberos wystawił nam bilet (ticket):
$ klist Credentials cache: FILE:/tmp/krb5cc_1000_pSN1Vv Principal: [email protected] Issued Expires Principal Apr 13 11:02:40 Apr 13 21:02:40 krbtgt/[email protected]
Instalujemy moduł pam-pam_krb5.
# poldek -i pam-pam_krb5
Zmieniamy wybrane pliki /etc/pam.d/*, dodając dodatkowo sprawdzanie hasła za pomocą nowego modułu:
Przykładowo /etc/pam.d/login
wykorzystywany przez program
login poprawiamy tak:
#zmieniamy linijkę
auth required pam_unix.so
na:
auth sufficient pam_unix.so auth required pam_krb5.so use_first_pass
i dodajemy:
session optional pam_krb5.so
W ten spos�b możemy się zalogować przy użyciu standardowej metody sprawdzania haseł
w /etc/shadow
(pam_unix.so) lub w domenie kerberos'a (pam_krb5.so)
Analogicznie poprawiamy inne pliki, np. /etc/pam.d/gdm
,
/etc/pam.d/xscreensaver
Po tych poprawkach powinniśmy m�c zalogować się już podając hasło kerberos'a. Po zalogowaniu możemy jeszcze za pomocą polecenia klist sprawdzić czy kerberos wystawił nam bilet:
$ klist
Kolejnym etapem jest "skerberyzowanie" poszczeg�lnych usług w naszej sieci tak,
by uwierzytelniały użytkownika na podstawie wystawionego biletu kerberos'a.
Zaprezentujemy to na przykładzie sshd, cyrus-imap'a oraz apache'a - opis postępowania
w przypadku innych usług obsługujących uwierzytelnianie kerberos jest podobny,
Każda skerberyzowana usługa musi mieć utworzone własne konto w domenie Kerberos'a
(tzw. service account). Z kontem tym związany jest klucz, kt�ry musi być
znany zar�wno kdc i usłudze. Konto usługi przeważnie jest w postaci:
nazwa_usługi/hostname
, przy czym hostname musi być
pełną nazwą hosta wraz z domeną, czyli tym, co zwraca hostname:
$ hostname --fqdn
Ponadto należy zadbać o poprawne odwzorowanie tej nazwy w DNS - opis jak właściwie ustawić hostname znajduje się podstawach konfiguracji sieci
Tworzymy konto dla daemona sshd. Konto musi miec nazwę w postaci:
host/hostname
# kadmin -l kadmin> add -r host/host.foo.pl
Parametr -r
powoduje, że do konta zostanie przypisany
losowy klucz (hasło). Klucz ten jest zapisany jako jeden z atrybut�w
użytkownika w bazie użytkownik�w domeny Kerberos'a
(dokładnie w /var/lib/heimdal/heimdal.db
).
By sshd miał także dostęp do tego klucza robimy:
kadmin> ext_keytab host/host.foo.pl
Powyższe polecenie zapisuje klucz związany z kontem usługi do tzw.
tablicy kluczy (keytab), z kt�rej to tablicy sshd może go pobrać. Klucz
zostaje zapisany w domyślnej tablicy kluczy znajdującej się w pliku
/etc/heimdal/krb5.keytab
. Z tej tablicy kluczy
domyślnie korzystają usługi używające kerberos'a.
By sshd uwierzytelniał użytkownik�w za pomocą kerberos'a
do pliku /etc/ssh/sshd_config
dodajemy jeszcze linijki:
GSSAPIAuthentication yes
do pliku konfiguracyjnego klienta /etc/ssh/ssh_config
dopisujemy:
GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
Opcja GSSAPIDelegateCredentials
określa, czy bilet kerberosa
ma być przekazany na maszynę, na kt�rą się logujemy.
Po restarcie sshd, jeżeli mamy wystawiony bilet kerberosa powinniśmy m�c zalogować się przez ssh na nasz serwer bez pytania o hasło.
Powyższy opis dotyczy sytuacji, gdy serwer sshd znajduje się na tej samej maszynie co kdc. Jeżeli sshd jest na innej maszynie w sieci, musimy wyeksportować klucz do innej tablicy kluczy:
kadmin> ext_keytab host/host.foo.pl sshd.keytab
a następnie przenieść plik sshd.keytab na maszynę na kt�rej mamy uruchomione sshd. Trzeba jeszcze poinformować sshd, że ma szukać klucza w innej lokalizacji niż standardowe krb5.keytab. W pliku /etc/sysconfig/sshd dopisujemy:
export KRB5_KTNAME=/etc/heimdal/sshd.keytab
Doinstalowujemy plugin gssapi do sasl'a
# poldek -i cyrus-sasl-gssapi
Tworzymy konto dla cyrrus'a. Konto ma mieć nazwę w postaci
imap/hostname
:
kadmin> add -r imap/host.foo.pl
exportujemy klucz do tablicy kluczy:
kadmin> ext_keytab /etc/heimdal/cyrus.keytab
Wybieramy inną niż domyślna tablicę kluczy, ponieważ cyrus imap pracuje
z uprawnieniami użytkownika 'cyrus' i jako taki nie ma prawa czytania domyślnej
tablicy /etc/heimdal/krb5.keytab
.
Dajemy dostęp do tablicy kluczy użytkownikowi cyrus:
chown cyrus.root /etc/heimdal/cyrus.keytab chmod 660 /etc/heimdal/cyrus.keytab
Na koniec musimy jeszcze poinformować cyrus'a gdzie ma szukać klucza.
W pliku /etc/sysconfig/cyrus-imapd
dodajemy:
export KRB5_KTNAME=/etc/heimdal/cyrus.keytab
Przykładowe programy klienckie, kt�re potrafią użyć protokołu kerberos do uwierzytelnienia użytkownika to evolution i mutt
Doinstalowujemy moduł apache'a obsługujący uwierzytelnianie za pomocą kerberos'a:
# poldek -i apache-mod_auth_kerb
Dodajemy konto usługi w domenie kerberos'a:
kadmin> add -r HTTP/hostname
hostname zastępując nazwą hosta na kt�rym uruchomiony jest apache.
Exportujemy klucz, zmieniamy uprawnienia:
kadmin> ext HTTP/hostname /etc/heimdal/httpd.keytab # chown http.root /etc/heimdal/httpd.keytab # chmod 660 /etc/heimdal/httpd.keytab
lokalizację tablicy kluczy możemy tak jak wcześniej podać apache'owi globalnie przez zmienną środowiskową, dopisując do /etc/sysconfig/apache:
export KRB5_KTNAME=/etc/heimdal/httpd.keytab
Można to także zrobić za pomocą dyrektywy Krb5Keytab w pliku konfiguracyjnym apache'a
Przykładowa konfiguracja dostępu może wyglądać następująco:
<Directory "/home/users/mrk/public_html/kerberos"> AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate on KrbMethodK5Passwd on KrbAuthRealms FOO.PL Krb5Keytab /etc/heimdal/httpd.keytab require user [email protected] </Directory>
Pr�ba dostępu z prawdopodobnie zakończy się pytaniem o hasło. Naszym celem jest jednak dostęp do serwisu www'a za pomocą biletu kerberos'a, bez zbędnego podawania hasła. W firefox'ie wpisujemy url: about:config, i szukamy pozycji:
network.negotiate-auth.delegation-uris network.negotiate-auth.trusted-uris
Określają one url'e, dla kt�rych przeglądarka ma zastosować rozszerzenie negotiate. Wpisujemy tam nazwy dns naszego serwisu www oddzielone przecinkami. Teraz, jeśli mamy aktualny bilet (sprawdzamy przez klist), powinniśmy zostać wpuszczeni bez pytania o hasło. Rozszerzenie negotiate opr�cz firefox'a powinny obsługiwać także mozilla i epiphany - o innych mi nie wiadomo.
Protok�ł jabber służy głï¿½wnie do przesyłania wiadomości typu Instant Messaging (czyli działa podobnie jak inne znane komunikatory np. icq, tlen, gadu-gadu itp.). Zaletą jabbera jest to, że jest otwarty, zapewnia darmową i pełną infrastrukturę (serwery, a także klienty) dla os�b prywatnych i użytkownik�w komercyjnych. Charakteryzuje się także dużym bezpieczeństwem - rozmowy, a także komunikacja między serwerami może być szyfrowana.
W PLD jest kilka serwer�w obsługujących komunikację protokołu XMPP, kt�ry jest fundamentem Jabbera - zatwierdzonym przez IETF w formie RFC (RFC od 3920 do 3923). Używany przez wielu ISP jabberd™ w wersji 1.4, zdobywający popularność ejaberd™ czy opisywany poniżej jabberd™ w wersji 2.0.
Opisana zostanie podstawowa konfiguracja, umożliwiająca połączenia szyfrowane, a do składowania danych przez jabberd2™ wykorzystamy silnik SQL Postgresql™.
Pakiet jabberd2™ instalujemy za pomocą poldka:
poldek> install jabber-common jabberd
Oczywiście, jeżeli do tej pory nie mamy zainstalowanego Postgresql™ należy zainstalować go także. Należy pamiętać, że jabberd2™ może wsp�łpracować także z MySQL™, sqlite3™, a także znacznie prostrzą wersją bazy db™.
Zanim zaczniemy, musimy stworzyć domenę, kt�ra jednoznacznie będzie wskazywała na maszynę Jabbera. Dodamy także rekordy SRV, kt�re służą do zapytań domenowych przez demony Jabbera.
Przykład konfiguracji zostanie przedstawiony dla
serwera nazw Bind™. Zmian
dokonujemy w odpowiednim pliku stref w katalogu
/var/lib/named/M
.
; Jabber jabber IN A 10.1.1.1 ;Tu wpisujemy IP naszej domeny _jabber._tcp.jabber IN SRV 20 0 5269 domena.org. _xmpp-server._tcp.jabber IN SRV 20 0 5269 domena.org. _xmpp-client._tcp.jabber IN SRV 20 0 5222 domena.org.
Oczywiście nie możemy zapomnieć o zmianie rekordu
serial w strefie domeny i restarcie demona
named
W przypadku wykorzystwania zap�r ogniowych w systemie powinniśmy otworzyć porty tcp dla następujących port�w:
5222 - Dla komunikacji klienckiej (połączenie nieszyfrowane)
5223 - Dla komunikacji klienckiej (połączenie szyfrowane SSL)
5269 - Dla komunikacji między serwerami Jabbera
5347 - Dla komunikacji między serwerami Jabbera, wykorzystany przez dodatkowe transporty (np. transport GG)
Pamiętać należy, że powyższe porty są ustalone umownie i w plikach konfiguracyjnych demona Jabber, a także rekordach SRV możemy je zmienić (np. dla portu klienckiego ustalić port 80) - jednak zaleca się pozostawić proponowane wyżej porty.
Oczywiście, jeżeli nie chcemy aby nasz serwer był widoczny na zewnątrz naszej sieci (np. jest przeznaczony tylko dla wewnętrzej sieci intranetowej) nie otwieramy portu przeznaczonego do komunikacji między serwerami (u nas to porty 5269 i 5347).
Możemy wreszcie skonfigurować wstępnie usługę
jabberd2™. Wszystkie pliki
konfiguracyjne znajdują się w katalogu
/etc/jabber
.
W pliku /etc/jabber/c2s.xml
w
okolicy tagu "local" dodajemy naszą domenę:
<!-- Local network configuration --> <local> <!-- Who we identify ourselves as. This should correspond to the ID (host) that the session manager thinks it is. You can specify more than one to support virtual hosts, as long as you have additional session manager instances on the network to handle those hosts. The realm attribute specifies the auth/reg or SASL authentication realm for the host. If the attribute is not specified, the realm will be selected by the SASL mechanism, or will be the same as the ID itself. Be aware that users are assigned to a realm, not a host, so two hosts in the same realm will have the same users. If no realm is specified, it will be set to be the same as the ID. --> <id>jabber.domena.org</id>
W pliku /etc/jabber/sm.xml
w pierwszych
linijkach także dodajemy naszą domenę:
<sm> <!-- Our ID on the network. Users will have this as the domain part of their JID. If you want your server to be accessible from other Jabber servers, this ID must be resolvable by DNS.s (default: localhost) --> <id>jabber.domena.org</id>
Jeżeli chcemy, aby nasz serwer komunikował się z innymi
serwerami w pliku /etc/jabber/jabberd.cfg
kasujemy "#" w linijce z "s2s":
# After sm and c2s are configured to use a fully qualified domain name # and proper SRV records are set in DNS uncoment this to enable # communication # with other Jabber servers s2s /etc/jabber/s2s.xml
Podstawowa konfiguracja jest już zrobiona. Domyślne ustawienie tzw. "storage" czyli sposobu trzymania przez jabbera informacji o użytkownikach jest zrobione w PLD w db™. Przy małej ilości użytkownik�w jest to wystarczający spos�b. Jednak przy większej ich ilości, bardziej praktyczne jest trzymanie tych danych w bazie SQL.
Przy poprawnie działającym postgresie, z uprawnionego dla niego użytkownika tworzymy bazę jabberd2
$ createdb -U postgres jabberd2
Następnie przypisujemy do tej bazy użytkownika jabberd2 i ustalamy dla niego hasło i opcje dostępu do bazy:
$ createuser -P -U postgres jabberd2 Enter password for user "jabberd2": Enter it again: Shall the new user be allowed to create databases? (y/n) n Shall the new user be allowed to create more new users? (y/n) n CREATE USER
Teraz musimy wypełnić nowoutworzoną bazę odpowiednimi tabelami
i polami. Z katalogu
/usr/share/doc/jabberd-2*
należy
rozpakować (najlepiej do katalogu użytkownika, kt�ry może
działać na bazie postgresa) plik
db-setup.pgsql.gz
. Po rozpakowaniu
przechodzimy do katalogu, gdzie został rozpakowany plik
db-setup.pgsql
i wykonujemy:
$ psql -U jabberd2 jabberd2 jabberd2=>\i db-setup.pgsql
Baza postgresa jest gotowa. Połączenie z bazą będzie odbywać się po localhost, tak więc musimy zadbać o to, żeby postgres umożliwiał takie połączenie
Została nam jeszcze konfiguracja w plikach jabbera.
W pliku /etc/jabber/sm.xml
szukamy sekcji "storage" i zmieniamy na:
<!-- Storage database configuration --> <storage> <!-- By default, we use the MySQL driver for all storage --> <driver>pgsql</driver>
Dla porządku dodamy, że zamiast pgsql, możemy także wykorzytać: mysql, ldap, sqlite (w zależności od mechanizmu jaki wybraliśmy).
W tym samym pliku szukamy następnie sekcji "pgsql" aby w odpowiednim miejscu wpisać hasło dostępu do bazy jabberd2. Możemy tam także zmienić spos�b dostępu:
<!-- PostgreSQL driver configuration --> <pgsql> <!-- Database server host and port --> <host>localhost</host> <port>5432</port> <!-- Database name --> <dbname>jabberd2</dbname> <!-- Database username and password --> <user>jabberd2</user> <pass>tu_wpisujemy_hasło_do_bazy</pass>
Podobne zmiany wykonujemy w pliku
/etc/jabber/c2s.xml
. Umożliwiają one
autentykacje użytkownik�w jabbera:
<!-- Authentication/registration database configuration --> <authreg> <!-- Backend module to use --> <module>pgsql</module>
I dalej w tym samym pliku (sekcja "pgsql")
<!-- PostgreSQL module configuration --> <pgsql> <!-- Database server host and port --> <host>localhost</host> <port>5432</port> <!-- Database name --> <dbname>jabberd2</dbname> <!-- Database username and password --> <user>jabberd2</user> <pass>tu_wpisujemy_hasło_do_bazy</pass> </pgsql>
Po zrestartowaniu demona jabberd możemy się już cieszyć bardziej zaawansowaną funkcjonalnością naszego komunikatora.
Przed konfiguracją samego jabbera, musimy sprawdzić czy mamy pakiet openssl™ i wygenerować klucz:
# openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem
sam parametr -days 3650 możemy ustawić na kr�tszy lub dłuższy (oznacza on długość ważności certyfikatu - w naszym przypadku 10 lat).
Po wykonaniu powyższego polecenia i wpisaniu odpowiedzi na zadane pytania (zwr�ćmy tylko uwagę, abyśmy w polu Common Name wpisali naszą domenę, obsługiwaną przez serwer jabbera) usuniemy hasło z klucza prywatnego:
# openssl rsa -in privkey.pem -out privkey.pem
Następnie połączymy oba klucze w jeden plik i skasujemy klucz prywatny:
# cat privkey.pem >> server.pem # rm privkey.pem
Zmieniamy nazwę naszego certyfikatu (dla porządku), przenosimy w odpowiednie miejsce i nadajemy prawa:
# mv server.pem /var/lib/openssl/certs/jabber.pem # chown root:jabber /var/lib/openssl/certs/jabber.pem # chmod 640 /var/lib/openssl/certs/jabber.pem
Została nam jeszcze konfiguracja Jabbera. W pliku
/etc/jabber/c2s.xml
znajdujemy
tag "ssl-port" i odkomentujemy go:
<!-- Older versions of jabberd support encrypted client connections via an additional listening socket on port 5223. If you want this (required to allow pre-STARTTLS clients to do SSL), uncomment this --> <ssl-port>5223</ssl-port> </local>
Zdejmujemy komentarz także z tagu "require-starttls" (kilka linijek wyżej):
<!-- Require STARTTLS. If this is enabled, clients must do STARTTLS before they can authenticate. Until the stream is encrypted, all packets will be dropped. --> <require-starttls/>
Teraz w każdym z pięciu plik�w konfiguracyjnych
znajdujących się w /etc/jabber
tj. router.xml, sm.xml, resolver.xml, s2s.xml, c2s.xml
znajdujemy zakomentowany ciąg wskazujący na nasz
certyfikat:
<!-- <pemfile>/etc/jabber/server.pem</pemfile> -->
Kasujemy komentarze (czyli <!-- i -->) i wpisujemy odpowiednią scieżkę do naszego certyfikatu:
<pemfile>/var/lib/openssl/certs/jabber.pem</pemfile>
Kolejny restart demona jabber i możemy cieszyć się połączeniami szyfrowanymi.
Opisane powyżej sposoby konfiguracji nie wyczerpują oczywiście wszystkich aspekt�w. Zachęcamy do odwiedzenia strony z oryginalną dokumentacją jabbera. Mimo, że niekt�rym może sprawić problem język angielski, to podane przykłady w jasny spos�b omawiają także zaawansowane zagadnienia.
MySQL™ jest Systemem Zarządzania Relacyjnymi Bazami Danych. Znany i ceniony jest przede wszystkim ze względu na swoją niebywałą wydajność i szybkość działania. Świetnie nadaje się do obsługi projekt�w internetowych, ale nie tylko - z powodzeniem używany jest r�wnież w wielkich projektach informatycznych organizacji, takich jak chociażby NASA. Przeciwnicy MySQL'a często m�wią, jak to bardzo brakuje mu wielu ficzer�w, kt�re posiadają prawdziwe, duże systemy baz danych. Ze swojego doświadczenia wiem, że część z tych ludzi nawet nie rozr�żnia wersji systemu, kt�re oferuje nam firma MySQL AB (producent MySQL).
Napisany w C i C++ (wydajność!).
API dla wielu język�w programowania: C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, Tcl.
Pełna wielowątkowość, korzystająca z wątk�w kernela. Oznacza to, że MySQL będzie pracował na maszynie wieloprocesorowej, jeśli tylko taką posiadasz.
Opcjonalna obsługa transakcji.
B-drzewa z kompresowanymi indeksami. To wam się przyda, jakbyście mieli wieeeelkie bazy ;) Wystarczy powiedzieć, że znacząco wpływa na czas wyszukiwania i pobierania danych (wierszy) z bazy.
Istnieje możliwość "osadzenia" (ang. embed) serwera MySQL w aplikacji, kt�rą piszemy. Jeśli ktoś potrzebuje funkcjonalności systemu baz danych, a niekoniecznie chce się bawić w klient-serwer, to czemu nie?
Duża liczba typ�w danych w kolumnach. Liczby, ciągi znakowe, obiekty binarne (BLOB), data & czas, typy wyliczeniowe, zestawy. Na uwagę zasługuje fakt, że w MySQL możemy daną kolumnę dostosować do pewnej wielkości danych, kt�re zamierzamy w niej przechowywać (np. TINYINT, a nie INT), tym samym uzyskujemy większą wydajność i mniejsze zużycie pamięci (r�wnież dyskowej). Istnieje możliwość definiowania niekt�rych typ�w danych jako narodowych (r�żne standardy kodowania chociażby).
Obsługa klauzul agregujących i grupujących SQL.
Złączenia zewnętrzne (LEFT & RIGHT).
Komenda SHOW pozwalająca przeglądać informacje na temat baz, tabel i indeks�w. Komenda EXPLAIN opisująca pracę optymalizatora zapytań.
Bardzo prosty (z punktu widzenia administratora) system zabezpieczeń. Wszystkie hasła są szyfrowane.
Połączenia z serwerem przez: TCP/IP, ODBC, JDBC.
Lokalizacja (w sensie językowym) serwera. Komunikaty m.in. po polsku.
Instalację oprogramowania przeprowadzimy oczywiście z
pomocą naszego poldka. Logujemy się jako
root
, bądź używamy polecenia
sudo
, jeżeli mieliśmy je
skonfigurowane do tego celu. Pierwszą rzeczą, kt�rą
będziemy musieli zrobić, jest ściągnięcie i
zainstalowanie odpowiednich pakiet�w z repozytorium
PLD. Można zrobić to używając zar�wno trybu wsadowego,
jak i interaktywnego. Podam oba sposoby, wybierz sobie
ten, kt�ry bardziej Ci odpowiada :) (osobiście wolę
tryb interaktywny, ze względu na tab-completion).
Najpierw uruchamiamy poldka. Można podać mu flagę
-n
, kt�ra oznacza źr�dło, z kt�rego
zamierzamy ściągać pakiety. Jeśli nie podamy tej
flagi, w�wczas poldek skorzysta z pierwszego źr�dła
wpisanego do pliku
/etc/poldek.conf
. Ja korzystam ze
słowackiego serwera firmy Bentel Ltd., ale to nie ma
znaczenia.
W trybie wsadowym poldka, instalacja wygląda następująco:
# poldek -n bentel -i mysql mysql-client mysql-libs
W trybie interaktywnym poldka, instalacja wygląda tak:
# poldek -n bentel Wczytywanie ftp://spirit.bentel.sk/mirrors/PLD/[...]/packages.dir.gz... Przeczytano 5116 pakiet�w Wczytywanie /root/.poldek-cache/packages.dir.dbcache.var.lib.rpm.gz... Przeczytano 450 pakiet�w Witaj w poldkowym trybie interaktywnym. Wpisz "help" aby otrzymać pomoc. poldek>
Teraz przystępujemy do instalacji pakiet�w MySQL:
poldek> install mysql mysql-client mysql-libs
poldek sam zadba o spełnienie wymaganych zależności.
Żeby m�c sprawnie (i bezpiecznie) używać naszego świeżo zainstalowanego serwera, musimy go odpowiedno skonfigurować.
Otworzymy naszym ulubionym edytorem tekstu plik konfiguracyjny demona MySQL. W przypadku użycia edytora Vim wydajemy następującą komendę:
# vim /etc/mysql/clusters.conf
Jeżeli nie zamierzamy zmieniać lokacji, w kt�rej będzie u nas pracował MySQL,
to po prostu odkomentujmy linijkę z MYSQL_DB_CLUSTERS
,
a jeżeli zamierzamy umieścić serwer MySQL w innym miejscu,
to należy tą linijkę odkomentować, ale dodatkowo zmienić ścieżkę.
# standard setting MYSQL_DB_CLUSTERS="/var/lib/mysql"
Upewniamy się, że jesteśmy zalogowani na konsoli jako root
i wydajemy polecenie:
# /etc/rc.d/init.d/mysql init
Polecenie to będzie nam potrzebne tylko przy pierwszym uruchomieniu serwera - służy ono zainicjalizowaniu klastra baz danych. Powiedzmy, że nasz katalog jest "formatowany", ok? ;) Jeżeli pojawiłby wam się błąd, m�wiący o duplikacie wpisu localhost-mysql dla klucza 1 - możecie go zignorować.j
Teraz możemy przystąpić już do edycji właściwiego pliku konfiguracyjnego RDBMS. Używając naszego ulubionego edytora otwieramy plik /var/lib/mysql/mysqld.conf
# vim /var/lib/mysql/mysqld.conf
Teraz możemy przystąpić do jego edycji. Pierwszą grupą opcji, na jaką trafiamy jest:
# This section must be the first! [mysqld] datadir = /var/lib/mysql/mysqldb/db pid-file = /var/lib/mysql/mysqldb/mysql.pid port = 3306 socket = /var/lib/mysql/mysqldb/mysql.sock user = mysql
datadir
to oczywiście katalog, w kt�rym składowane będą nasze bazy. Można zostawić tak jak jest.
user
to użytkownik "pod kt�rym"
będzie działał nasz serwer, w sensie - uruchomienie
serwera wygląda tak, jakby to ten użytkownik,
reprezentowany przez zmienną user go uruchomił (proces
należy do niego). Można zmienić, chociaż nie polecam.
Nie zalecane jest wykorzystanie do tego użytkownika
root
!
To co nas natomiast bardzo interesuje, z dw�ch względ�w, to opcja port
.
Chodzi o dwa przypadki:
Chcemy umożliwić dostęp do
naszego serwera baz danych z
zewnątrz, a admin naszej sieci
"łaskawie" przekierował nam
jakiś port z bramki na nasz
komputer, ale niestety nie
jest to port 3306, z kt�rego
standardowo korzysta MySQL.
Edytujemy sobie opcje
port
w ten
spos�b, żeby wskazywała na
ten, kt�ry mamy dostępny.
Mamy maszynę z zewnętrznym IP
(taką, do kt�rej można się
podłączyć z Internetu), nie
blokowaliśmy jednak dostępu do
MySQL, ale chcielibyśmy
podnieść choć troszeczkę
poziom bezpieczeństwa i
udostępnić serwer MySQL na
innym porcie. Wybieramy i
jakiś i wpisujemy go jako
wartość opcji
port
.
# Don't allow connections over the network by default skip-networking
Jeżeli chcemy zablokować dostęp do serwera MySQL z
zewnątrz (z sieci), to... nie robimy nic. A jeśli
chcemy umożliwić innym komputerom łączenie się z
naszym serwerem, to należy wykomentować (dodać #)
linijkę z skip-networking
.
Gdyby nam się kiedyś coś popsuło (zapomnieliśmy hasła, nie możemy dostać się do bazy), to przyda się odkomentowanie tej opcji:
# Emergency option. Use only if you really need this. #skip-grant-tables
Przydatną rzeczą (ale w sumie tylko, jeśli zamierzamy udostępniać bazy na zewnątrz), będzie włączenie logowania połączeń i zapytań (zwalnia pracę serwera). Dodam, że można oczywiście zmienić standardową ścieżkę, do kt�rej zapisywane są logi.
# Log connections and queries. It slows down MySQL so # it's disabled by default # log = /var/log/mysql/log
Opcje z grupy set-variable
wpływają bezpośrednio na pracę i
wydajność serwera, nie będę się więc w nie zagłębiał. To trochę trudniejszy temat.
Jak ktoś chce bardzo zoptymalizować pracę swojego
serwera, to polecam lekturę dokumentacji MySQL.
Przydatna jest r�wnież znajomość zagadnień relacyjnych baz danych i SQL'a.
Przykładowo zerkniemy na jedną zmienną:
#set-variable = max_connections=100
Odkomentowanie tej linijki pozwoli nam na ustawienie maksymalnej liczby połączeń, kt�re nasz MySQL będzie m�gł przyjąć i obsłużyć w danej chwili. Wszystko zależy od tego, w jakim celu używamy naszego RDBMS - należy postawić sobie pytanie - "ile os�b może chcieć podłączyć się do mojego serwera w jednej chwili i ile takich połączeń przypada średnio na jedną osobę?". Odpowiedź wpisujemy w zmienną max_connections. Innym pytaniem mogłoby być "czy skrypty obsługujące moje strony www korzystają ze stałych (persistent) połączeń?"
Ponieważ "Polacy nie gęsi i sw�j język mają" odkomentujemy jeszcze jedną linijkę w pliku konfiguracyjnym, aby włączyć polskie komunikaty:
# Language language = polish
W tej chwili nasz serwer powinien być już skonfigurowany do pracy.
Upewniamy się, że jesteśmy zalogowani na konsoli jako root
i wydajemy polecenie:
# /etc/rc.d/init.d/mysql start
Wywołanie tego skryptu startowego spowoduje uruchomienie demona MySQL w systemie. Upewnijmy się jeszcze, że nasz serwer baz danych rzeczywiście "wstał":
# /etc/rc.d/init.d/mysql status MySQL cluster /var/lib/mysql: running
Jak widać na załączonym obrazku serwer działa.
Ponieważ w tej chwili jest zainstalowany w spos�b domyślny
i dlatego mało bezpieczny, należy ustawić jakieś hasło dla
użytkownika mysql
:
# mysqladmin -u mysql -S /var/lib/mysql/mysqldb/mysql.sock password 'naszehaslo'
Po opcji -S
podajemy scieżkę do pliku mysql.sock
,
kt�ry powinien znajdować się w katalogu, w kt�rym umieściliśmy MySQL.
Demon MySQL standardowo startuje wraz z systemem,
ale przydaje się znać dwie komendy.
Aby włączyć lub wyłączyć serwer, będąc zalogowanym
jako root
, bądź używając
komendy sudo, wydajemy polecenie:
# /etc/rc.d/init.d/mysql start | stop
wstawiając oczywiście opcje start
lub stop
,
w zależności od tego, co chcemy zrobić.
mysqladmin jest narzędziem, za pomocą kt�rego
możemy tworzyć i usuwać bazy oraz przeładowywać konfigurację.
Nie będziemy go używać do wyłączania serwera,
bo od tego jest skrypt om�wiony powyżej.
Narzędzie wywołuje się poleceniem mysqladmin,
a flagi i argumenty (opcje) polecenia służą do wykonywania określonych zadań.
Ponieważ wcześniej zmieniliśmy hasło dla użytkownika
mysql
, winniśmy przy każdym poleceniu dodać
-u mysql
i -p
na końcu
(aby klient zapytał nas o hasło), np tak dla komendy status:
# mysqladmin -u mysql status -p Enter password: Uptime: 6720 Threads: 1 Questions: 1 Slow queries: 0 Opens: 6 \ Flush tables: 1 Open tables: 0 Queries per second avg: 0.000
Kilka przydatnych komend:
create nazwabazy
- tworzy nową bazę danych o nazwie
nazwabazy
.
drop nazwabazy -
usuwa bazę danych o nazwie nazwabazy
flush-privileges albo reload - obie opcje robią to samo - przeładowują tablice uprawnień. Powinniśmy wykonać przeładowanie zawsze, gdy dodamy np nowego użytkownika do jakiejś bazy, ponieważ do czasu przeładowania takie konto jest nieaktywne.
mysqldump to program, służący do "zrzucania" danych - czyli do robienia kopii zapasowych. Polecenie to jest przydatne w przypadku wykonywania kopii zapasowych podczas aktualizacji MySQL czy też przenoszenia danych na inny serwer.
Kilka przydatnych opcji:
--databases baza1 baza2...
- zrzuca dane z baz, kt�rych nazwy podaliśmy
w liście oddzielonymi spacjami.
--all-databases
- to samo
co wyżej ale dla wszystkich bazy.
--add-drop-table
-
dodaje DROP TABLE
do skrypt�w tworzących tabele z backup-u
(jak będziemy przywracać dane).
Przydatne, kiedy np chcemy przywr�cić już istniejącą tabelę.
Spowoduje to najpierw jej usunięcie, a następnie
utworzenie od nowa z danych, kt�re mieliśmy
w kopii zapasowej. Og�lnie, żeby uniknąć
ewentualnych problem�w z duplikatami wierszy, itp.
warto tą opcję włączyć.
--no-create-info
- w kopii nie
zostanie zawarta informacja o tworzeniu tabel
(nazwy tabel, typy p�l, indeksy itp.).
Przydatne, jeżeli chcemy zrobić kopię tylko danych,
a nie całej struktury bazy.
--no-data
- Ta opcja pozwala zapisać
samą informację o strukturze bazy i tabel,
nie zapisuje natomiast danych.
--opt nazwabazy
- tworzy kopię bazy
nazwabazy
wraz z rozszerzonymi
informacjami MySQL, blokowaniem tabel, itd.
Chyba najczęściej stosowana opcja przy robieniu kopii zapasowych.
Należy pamiętać, że wynik polecenia mysqldump
należy przekierować (>) do jakiegoś pliku.
Podam może kilka przykład�w użycia tego programu.
Zrzucenie zawartości bazy baza1
do pliku baza1_bkp.sql
:
# mysqldump -u mysql --databases baza1 > baza1_bkp.sql -p
Stworzenie kopii zapasowej struktury bazy (bez danych)
baza2
i zapisanie jej w pliku baza2_str.sql
:
# mysqldump -u mysql --databases --no-data baza2 > baza2_str.sql -p
Niezwykle przydatną opcją jest --opt
om�wiona wcześniej.
Polecam jej stosowanie do wykonywania kopii całej bazy,
włącznie ze strukturą tabel i samymi danymi.
Aby stworzyć pełną kopię zapasową bazy baza1
i zapisać ją w pliku baza1_kopia.sql
:
# mysqldump -u mysql --opt baza1 > baza1_kopia.sql -p
Przywracanie baz wykonanych poleceniem mysqldump wygląda tak:
# mysql -u mysql baza1 < baza1_kopia.sql -p
Inna metoda (w sumie r�żniąca się zapisem):
# mysql -u mysql -e 'source /sciezka_do_pliku/baza1_kopia.sql' baza1 -p
NFS™ jest to usługa pozwalająca udostępniać zasoby dyskowe komputerom w sieci. Serwer udostępnia katalog(i) klientom, kt�rzy mogą je podmontować i działać jak na lokalnym systemie plik�w. Ponadto można z niego uruchamiać stacje bezdyskowe lub tworzyć rozproszone systemy plik�w.
Najpierw instalujemy demona portmap (o ile nie jest już zainstalowany) oraz demona NFS poleceniem:
# poldek -i portmap nfs-utils
Serwer NFS jest gotowy do pracy od razu po zainstalowaniu,
wystarczy jedynie uruchomić usługę portmap
,
a następnie nfs
(dokładnie w tej
kolejności). Teraz możemy przejść do konfiguracji udziałï¿½w
sieciowych. Do podstawowej pracy serwera nie ma potrzeby
konfigurowania czegokolwiek, w pozostałych wypadkach należy
przyjrzeć się plikowi /etc/sysconfig/nfsd
,
kt�ry może wyglądać następująco:
SERVICE_RUN_NICE_LEVEL="+0" #RPCMOUNTOPTIONS="--no-nfs-version 3" RPCNFSDCOUNT=8 NFSDTYPE=K
SERVICE_RUN_NICE_LEVEL
- ustala priorytet serwera
#RPCMOUNTOPTIONS="--no-nfs-version 3"
- opcja dla jąder z serii 2.2, dla wsp�łczesnych
kerneli powinna być zakomentowana
RPCNFSDCOUNT
-
podaje liczbę instancji serwera, czyli ilu klient�w
może obsłużyć jednocześnie
NFSDTYPE
- podaje czy serwer ma
pracować jako oddzielny demon (U), czy w trybie jądra (K).
Zalecane jest to drugie z rozwiązań, gdyż zapewnia
większą wydajność.
Modyfikacja pliku konfiguracji wymaga restartu uslugi.
Uruchomiliśmy serwer, teraz przyszedł czas na udostępnienie
zasob�w. W pliku /etc/exports
definiuje
się udostępniane katalogi, ich listę podajemy w postaci
wierszy, kt�re mają następującą składnię:
$katalog $klient1($opcja1,$opcja2,...) $klient2($opcja1,$opcja2,...)
$katalog - udostępniony katalog. Warto tutaj wspomnieć, że jeżeli udostępniamy dany katalog to nie możemy udostępnić w nowej regułce katalogu będącego jego ojcem jak i synem, jeżeli leżą na tym samym systemie plik�w. Udostępnianie partycji FAT, itp. też nie jest dobrym rozwiązaniem.
$klient - IP lub nazwa komputera, kt�remu udostępniamy katalog. Można podać także całą sieć, wtedy zezwolimy wszystkim komputerom w sieci na przeglądanie i/lub zapisywanie do katalogu.
$opcje - tutaj możemy ustalić m.in. czy zas�b ma być udostępniony tylko do odczytu, czy także do zapisu, oraz nałożyć inne ograniczenia. Wszystkie opcje opisane są w manualu (man exports).
Oto przykładowe wpisy do /etc/exports
:
/srv/pub 192.168.0.1(ro) 192.168.0.2(rw) /home 192.168.0.0/255.255.255.0(rw)
Pomijając sensowność wpis�w, pierwszy wiersz daje prawo
odczytu katalogu /srv/pub
komputerowi
192.168.0.1 i prawo odczytu i zapisu komputerowi 192.168.0.2.
Drugi z kolei daje prawo zapisu do katalogu
/home
komputerom z podsieci
192.168.0.0/24.
Jeżeli modyfikujemy /etc/exports
w trakcie
pracy serwera to musimy poinformować demona, żeby ponownie odczytał
plik konfiguracji. Przed tym możemy sprawdzić czy nasze
wpisy są poprawne:
# exportfs -v
Polecenie to wyświetli listę katalog�w gotowych do wyeksportowania, jeśli kt�ryś z udziałï¿½w nie jest wyświetlony, to prawdopodobnie popełniliśmy jakiś błąd w składni. Gdy jesteśmy pewni, że chcemy udostępnić udziały NFS, to wydajemy polecenie:
# exportfs -rv
W PLD stworzono grupę systemową fileshare
,
kt�ra ma prawo do modyfikowania konfiguracji udziałï¿½w
sieciowych (NFS i SMB), bez konieczności posiadania praw
root-a. Aby nadać użytkownikowi takie prawo wystarczy zapisać
go do tej grupy, opis zarządzania grupami użytkownik�w
opisano w „Grupy”.
Konfigurację klienta rozpoczynamy od zainstalowania i uruchomienia
usługi portmap. Jeśli chcemy, aby zasoby NFS były montowane w
trakcie startu systemu, instalujemy pakiet
nfs-utils-clients, dostarczający wymagany
rc-skrypt: /etc/rc.d/init.d/nfsfs
.
Teraz przyszedł czas na połączenie się z zasobem NFS, w tym celu musimy go zamontować np.:
# mount serwer.net:/srv/pub /mnt/net -t nfs
serwer.net
to IP bądź nazwa naszego serwera,
/srv/pub
jest przykładowym udostępnionym katalogiem
na serwerze (wpisaliśmy go wcześniej do
/etc/exports
). Katalog
/mnt/net
to przykładowe miejsce podmontowania
zasobu.
Można użyć dodatkowo flagi -o a po niej
podać potrzebne nam opcje montowania. Pełną listę opcji
znajdziemy w podręczniku systemowym:
man 5 nfs.
Jeśli nic nie stoi na przeszkodzie abyśmy podłączali zas�b przy
starcie systemu, to dodajemy wpis do
/etc/fstab
:
192.168.0.1:/srv/pub /mnt/net nfs rw,hard,intr 0 0
Wpis wygląda znajomo, ale uwagę zwracają opcje
hard
i intr
. Ot�ż
hard
oznacza, że programy korzystające
z zasob�w NFS w momencie awarii serwera zostaną zawieszone
w oczekiwaniu na dostęp do danych i nie będzie możliwości
ich odwieszenia w postaci polecenia kill,
chyba, że dodamy opcję intr
dzięki czemu
będziemy mogli zabić dany proces. Zamiast
hard
możemy użyć opcji soft
,
jednak w przypadku awarii serwera NFS sygnalizuje błąd
programom korzystającym z zasob�w. Wadą tego rozwiązania
jest to, że nie wszystkie programy potrafią poradzić sobie
z takim komunikatem i może dojść do utraty danych.
Musimy zadbać o bezpieczeństwo naszego serwera, podstawowym
sposobem zabezpieczania zasobu jest ograniczenie dostępu.
Możemy go ograniczać za pomocą ustawień w pliku
/etc/exports
, za pomocą filtra
pakiet�w lub plik�w /etc/tcpd/hosts.allow
i /etc/tcpd/hosts.deny
, co zostało
przedstawione poniżej.
Najpierw blokujemy wszystkim dostęp do naszych usług wpisując
do pliku pliku /etc/tcpd/hosts.deny
:
portmap:ALL lockd:ALL mountd:ALL rquotad:ALL statd:ALL
Następnie w /etc/tcpd/hosts.allow
wpisujemy komputery, kt�rym zezwalamy na korzystanie z
wymienionych usług. Możemy zar�wno wpisać adresy IP
komputer�w jak i całą podsieć.
portmap: 192.168.0.0/255.255.255.0 lockd: 192.168.0.0/255.255.255.0 rquotad: 192.168.0.0/255.255.255.0 mountd: 192.168.0.0/255.255.255.0 statd: 192.168.0.0/255.255.255.0
NFS nie obsługuje autoryzacji na poziomie użytkownika, a jedynie na poziomie hosta. Z tego względu nie bardzo nadaje się do udostępniania w Internecie, jeśli to tylko możliwe lepiej użyć protokołu FTP lub WebDAV.
Wolne działanie protokołu NFS wskazuje przeważnie na brak odpowiedniego dostrojenia połączenia, wystarczy ustawić kilka opcji by uzyskać zaskakująco duży wzrost wydajności. Podane poniżej zalecenia dotyczą konfiguracji klienta.
Na początek zajmiemy się opcjami rsize
i wsize
. Dzięki nim możemy zwiększyć
szybkość odczytu i zapisu plik�w na serwer. Manual systemowy
radzi by ustawić im na wartości: rsize=8192
i
wsize=8192
. Linijka w pliku
/etc/fstab
będzie wyglądać teraz następująco:
192.168.0.1:/usr/local /usr/local nfs rw,hard,intr,rsize=8192,wsize=8192 0 0
Domyślnie NFS działa w oparciu o protok�ł UDP, doświadczenie
pokazuje jednak, że przełączenie w tryb TCP może w niekt�rych
wypadkach zwiększyć szybkość przesyłu danych. Niestety nie każdy
serwer NFS obsługuje połączenia TCP, więc nie wszędzie możemy
użyć tej opcji. Na szczęście PLD zawiera demona pozwalającego na
używanie TCP. Aby włączyć tą opcję do linijki w pliku
/etc/fstab
dodajemy wpis
tcp
np.:
192.168.0.1:/usr/local /usr/local nfs rw,hard,intr,tcp 0 0
W przypadku protokołu NFS należy trochę eksperymentować z ustawieniami, na początek dobrym pomysłem może być użycie obu powyższych wskaz�wek. Więcej o dostrajaniu NFS-a można odnaleźć w podręczniku systemowym.
Power DNS zwany w dalszej części tego dokumentu jako PDNS™ jest zaawansowanym i bardzo efektywnym serwerem nazw. Jego możliwości wsp�łpracy z LDAP lub bazami SQL (Mysql i Postgresql) dają szerokie możliwości tworzenia skrypt�w lub interface zarządzających. Sam PDNS jest uważany za zdecydowanie bezpieczniejszy niż Bind™, a także od niego szybszy - zwłaszcza przy większej ilości obsługiwanych domen.
W tym rozdziale zostanie om�wiona podstawowa instalacja, konfiguracja z bazą Postgresql™, a także wstępna konfiguracja przykładowej domeny. Oczywiście więcej szczeg�łï¿½w możemy znaleźć w oryginalnej dokumentacji.
Instalacja przebiega standardowo za pomocą poldka.
poldek> install pdns
Do poprawnego działania naszej bazy potrzebujemy także postgresql™ (możemy także wykorzystać mysql lub ldap, a nawet pliki konfiguracyjne Bind-a). Tak więc jeżeli nie mamy Postgresql to instalujemy go i poprawnie konfigurujemy.
Następnym krokiem będzie stworzenie bazy obsługiwanej przez PDNS w Postgresql. W tym celu możemy wykorzystać klienta dostarczanego razem z Postgresql - psql™. Możemy także do tego celu użyć innych wygodnych narzędzi np. phpPgAdmin™
Najpierw z konta użytkownika uprawnionego do operacji na bazie tworzymy bazę:
$ createdb -U postgres powerdns
Tworzymy także użytkownika dla w/w bazy:
$ createuser -P -U postgres pdns Enter password for user "pdns": Enter it again: Shall the new user be allowed to create databases? (y/n) n Shall the new user be allowed to create more new users? (y/n) n CREATE USER
Teraz za pomocą swojego ulubionego klienta Postgresql wykonujemy poniższe polecenia SQL w celu stworzenia szkieletu bazy:
create table domains ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, master VARCHAR(20) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT DEFAULT NULL, account VARCHAR(40) DEFAULT NULL ); CREATE UNIQUE INDEX name_index ON domains(name); CREATE TABLE records ( id SERIAL PRIMARY KEY, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(6) DEFAULT NULL, content VARCHAR(255) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, CONSTRAINT domain_exists FOREIGN KEY(domain_id) REFERENCES domains(id) ON DELETE CASCADE ); CREATE INDEX rec_name_index ON records(name); CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); create table supermasters ( ip VARCHAR(25) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) DEFAULT NULL ); GRANT SELECT ON supermasters TO pdns; GRANT ALL ON domains TO pdns; GRANT ALL ON domains_id_seq TO pdns; GRANT ALL ON records TO pdns; GRANT ALL ON records_id_seq TO pdns;
W /etc/pdns/pdns.conf
konfigurujemy działanie programu PDNS. Przykładowa
konfiguracja PDNSa wsp�łpracującego z bazą Postgresql
może wyglądać następująco:
#chroot=/some/where # If set, chroot to this directory for more security config-dir=/etc/pdns/ # Location of configuration directory (pdns.conf) launch=gpgsql # Launch this backend #gpgsql-socket=/var/lib/pgsql/postmaster.pid gpgsql-dbname=powerdns # Nazwa bazy danych w psql gpgsql-user=pdns # Użytkownik bazy w psql gpgsql-password=hasło_do_bazy_pdns module-dir=/usr/lib/pdns # Default directory for modules #load-modules= # Load this module - supply absolute or relative path #local-address=0.0.0.0 # Local IPv4 address to which we bind #local-ipv6=:: # Local IPv6 address to which we bind #use-logfile=no # Use a log file or syslog #logfile=var/log/pdns.log # Logfile to use allow-recursion=IP_ZEWN_DNS/maska,IP_ZEWN_DNS/maska # Tu podajemy adresy zewn. serwer�w DNS np. # allow-recursion=194.204.152.34/24,194.204.159.1/24 # nameserver setgid=djbdns # If set, change group id to this gid for more security setuid=pdns # If set, change user id to this uid for more security #slave=no # Act as a slave (Ustawiamy na YES w przypadku # pracy serwera PDNS jako SLAVE) socket-dir=/var/run # Where the controlsocket will live webserver=yes # Włączenie usługi monitorowania pracy PDNS przez WWW webserver-address=10.1.1.1 # Adres IP strony monitorującej pracę PDNS webserver-password=hasło_do_strony_monitorującej webserver-port=8088 # port strony monitorującej
Krzyżyk "#" na początku oznacza komentarz bądź wyłączenie danej opcji. Oryginalne teksty komentarzy są na tyle czytelne, że tylko niekt�re opcje skomentowalismy po polsku.
Praktycznie PDNS jest gotowy do pracy. Musimy jeszcze wypełnić treścią bazę - czyli dodać domenę (domeny). Przykładową domenę zaprezentujemy w formie tzw. "dump-a" bazy. Jest to na tyle czytelne, że skomentowane zostaną tylko niekt�re aspekty.
-- -- PostgreSQL database dump -- SET client_encoding = 'UNICODE'; SET check_function_bodies = false; SET client_min_messages = warning; SET search_path = public, pg_catalog; -- -- Name: domains_id_seq; Type: SEQUENCE SET; Schema: public; Owner: pdns -- SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('domains', 'id'), 1, true); -- -- Name: records_id_seq; Type: SEQUENCE SET; Schema: public; Owner: pdns -- SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('records', 'id'), 16, true); -- -- Data for Name: domains; Type: TABLE DATA; Schema: public; Owner: pdns -- INSERT INTO domains VALUES (1, 'foo.com', NULL, NULL, 'NATIVE', NULL, NULL); INSERT INTO domains VALUES (2, '1.1.10.in-addr.arpa', NULL, NULL, 'NATIVE', NULL, NULL); -- W pierwszym ID podajemy domenę 'foo.com' -- W drugim ID definiujemy domenę odwrotną dla danego IP -- -- Data for Name: records; Type: TABLE DATA; Schema: public; Owner: pdns -- -- Poniżej zgodnie z określonymi ID definiowane są kolejno strefy INSERT INTO records VALUES (2, 1, 'localhost.foo.com', 'A', '127.0.0.1', 120, NULL, NULL); INSERT INTO records VALUES (3, 1, 'www.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (5, 1, 'dns.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (6, 1, 'ftp.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (7, 1, 'poczta.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (8, 1, 'pop3.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (9, 1, 'smtp.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (10, 1, 'ssh.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (11, 1, 'jabber.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (1, 1, 'foo.com', 'SOA', 'localhost user.foo.com 1', 86400, NULL, NULL); INSERT INTO records VALUES (16, 1, 'foo.com', 'TXT', 'Serwer PDNS', 300, NULL, NULL); INSERT INTO records VALUES (17, 1, 'foo.com', 'NS', 'ns.foo.com', 300, NULL, NULL); INSERT INTO records VALUES (4, 1, 'mail.foo.com', 'A', '10.1.1.1', 120, NULL, NULL); INSERT INTO records VALUES (18, 1, 'foo.com', 'MX', 'mail.foo.com', 300, 5, NULL); INSERT INTO records VALUES (19, 1, 'foo.com', 'A', '10.1.1.1', 300, 0, NULL); -- Poniżej definiujemy rekordy SRV dla serwera Jabber INSERT INTO records VALUES (12, 1, '_jabber._tcp.jabber.foo.com', 'SRV', '0 5269 foo.com', 300, 10, NULL); INSERT INTO records VALUES (13, 1, '_xmpp-server._tcp.jabber.foo.com', 'SRV', '0 5269 foo.com', 300, 10, NULL); INSERT INTO records VALUES (14, 1, '_xmpp-client._tcp.jabber.foo.com', 'SRV', '0 5222 foo.com', 300, 10, NULL); -- Domena odwrotna INSERT INTO records VALUES (15, 2, '1.1.1.10.in-addr.arpa', 'PTR', 'foo.com', 86400, NULL, NULL); INSERT INTO records VALUES (20, 2, '1.1.10.in-addr.arpa', 'SOA', 'localhost root.localhost', 86400, NULL, NULL); INSERT INTO records VALUES (21, 2, '1.1.10.in-addr.arpa', 'NS', 'nc.foo.com', 86400, NULL, NULL); -- -- Data for Name: supermasters; Type: TABLE DATA; Schema: public; Owner: pdns -- -- -- PostgreSQL database dump complete --
Wszelkie zmiany lub dodawanie nowych domen możemy wykonywać na bazie danych lub wykorzystując do tego odpowiednie skrypty. Teraz możemy uruchomić demona PDNS wykorzystując skrypt:
# /etc/init.d/pdns start
Należy pamiętać, że jeżeli wcześniej używalismy BINDa bądź innnego demona do obsługi nazw domenowych, należy go przed uruchomieniem PDNS wyłączyć.
Po uruchomieniu serwisu możemy za pomocą przeglądarki http
wejść na stronę monitorującą pracę PDNS (odpowiednie opcje
dotyczące tej usługi znajdziemy w
/etc/pdns/pdns.conf
). Wywołanie
zgodne z przykładowym wpisem w
pdns.conf
to
http://10.1.1.1:8088.
Na stronie tej możemy odnaleźć wiele cennych informacji
dotyczących pracy naszego serwera nazw.
Postfix™ jest MTU czyli w wielkim skr�cie demonem poczty elektronicznej. No tak, w sumie powiecie ściągamy poldkiem instalujemy i działa... działa ale chcemy coś więcej... chcemy by nasz smtpd był ładnie skonfigurowany.
Ściągamy to co nam będzie potrzebne. Wiadomo... postfix i dodatki, kt�re mu są potrzebne:
poldek -i postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-saslauthd \ cyrus-sasl-login
A tutaj coś co będzie nam potrzebne do tworzenia certyfikat�w.
poldek -i openssl-tools
A tutaj coś żebyśmy mogli pobrać pocztę z serwera.
poldek -i tpop3d inetd rc-inetd
Przyszedł czas na konfigurację postfix™-a.
# echo 'pwcheck_method:saslauthd' > /etc/sasl/smtpd.conf
Należy jeszcze sprawdzić czy w /etc/pam.d/
znajduje się plik smtp
,
jeżeli nie to należy przegrać na to miejsce przykładowy konfig z
/usr/share/doc/cyrus-sasl-saslauthd-*/cyrus.pam.gz
, rozpakować i nazwać plik smtp
.
Uruchom saslauthd™:
# /etc/rc.d/init.d/saslauthd start
Uruchom postfix™-a:
# /etc/rc.d/init.d/postfix start
Teraz chcemy, żeby postfix™ wymagał autentykacji:
# postconf -e smtpd_sasl_auth_enable=yes # postconf -e smtpd_recipient_restrictions=permit_mynetworks, \ reject_sender_login_mismatch,permit_sasl_authenticated, \ reject_unauth_destination
Teraz linijka dla popsutych Outlook™-�w.
# postconf -e broken_sasl_auth_clients=yes # postconf -e mynetworks=127.0.0.0/8,192.168.1.1/32
Restart postfix™-a:
# /etc/rc.d/init.d/postfix restart
No i to wszystko razem powinno wyglądać tak:
# postconf -n alias_database = hash:/etc/mail/aliases alias_maps = hash:/etc/mail/aliases biff = no broken_sasl_auth_clients = yes command_directory = /usr/sbin config_directory = /etc/mail daemon_directory = /usr/lib/postfix debug_peer_level = 2 default_privs = nobody mail_owner = postfix mail_spool_directory = /var/mail myhostname = networking.ee mynetworks = 127.0.0.0/8, 192.168.1.1/32, 192.168.1.1/32 myorigin = $myhostname queue_directory = /var/spool/postfix setgid_group = maildrop smtpd_recipient_restrictions = permit_mynetworks, \ reject_sender_login_mismatch,permit_sasl_authenticated, \ reject_unauth_destination smtpd_sasl_auth_enable = yes
Włączamy teraz szyfrowanie wysyłania poczty oraz transmisji między MX-ami dla r�żnych domen
Następnie generujemy certyfikat SSL. Podczas generowania certyfikatu będziesz musiał odpowiedzieć na kilka prostych pytań.
Robimy to w spos�b następujący:
# openssl genrsa -out key.pem 1024 # openssl req -new -x509 -key key.pem -out cert.pem # cat cert.pem >> key.pem; mv -f key.pem cert.pem # cp cert.pem /var/lib/openssl/certs/nasza.domena.pl.pem
Do pliku /etc/mail/main.cf
należy dodać 4 linijki, takie jak poniżej:
smtpd_tls_cert_file = /var/lib/openssl/certs/nasza.domena.pl.pem smtpd_tls_key_file = $smtpd_tls_cert_file smtpd_use_tls = yes smtp_use_tls = yes
W pliku /etc/mail/master.cf
należy zastąpić aktualną linijkę czyli tą z domyślnej instalacji:
#smtps inet n - n - - smtpd na naszą aktualną: smtps inet n - y - - smtpd -o smtpd_tls_wrappermode=yes \ -o smtpd_sasl_auth_enable=yes
Jeżeli posiadamy więcej niż jedną domenę na serwerze to w /etc/mail/main.cf
dopisujemy:
mydestination = $myhostname, jakas.domena.pl, \ costam.gdziestam.pl, PLD.biz.pl
Jeżeli chcemy aby nasz postfix obsługiwał wirtualne domeny (przyznawał się do nich) dopisujemy w /etc/mail/main.cf
takie trzy linijki:
relay_domains = hash:/etc/mail/domains virtual_maps = hash:/etc/mail/virtual smtpd_sender_login_maps = hash:/etc/mail/virtual
Tworzymy /etc/mail/domains
i robimy nastepujące wpisy:
# plik domains, w nim wpisane domeny dla kt�rych nasz serwer #pocztę będzie przyjmował. pld-linux.org relay 81.0.225.27 relay
Do /etc/mail/virtual
dopisujemy na przykład coś takiego:
# plik virtual, w nim wpisane są konta w domenach kt�re obsługujemy # schemat wpisu # [email protected] konto_w_systemie [email protected] grifter [email protected] grifter [email protected] grifter [email protected] grifter [email protected] grifter # to ostatnie będzie nam p�źniej do amavisa potrzebne :)
Teraz musimy wklepać
# postmap /etc/mail/domains # postmap /etc/mail/virtual
No i restart postfixa™
# /etc/rc.d/init.d/postfix restart
Dodatkowe wpisy kt�re poprawią pracę naszego postfix™-a
Edytujemy /etc/mail/main.cf
i dodajemy następujące wpisy:
disable_vrfy_command = yes # liczba odbiorc�w max 100 dla jednego maila smtpd_recipient_limit = 100 smtpd_error_sleep_time = 5 smtpd_hard_error_limit = 10 smtpd_helo_required = yes # ogranicz do 2 mega [2000000] wielkość przesyłki, właściwie mając \ # dobre łącze można # wpisać 10 mega [10000000] message_size_limit = 2000000 # spam fight! :> header_checks = regexp:/etc/mail/header_checks mail_name = PLD - $myhostname smtpd_banner = $myhostname ESMTP $mail_name. We block/report all spam. smtpd_soft_error_limit = 60 default_process_limit = 3 maps_rbl_domains = relays.ordb.org smtpd_client_restrictions = reject_maps_rbl
Tworzymy /etc/mail/header_checks
i dopisujemy:
/^To: .*friend@public/ REJECT Header-To address revoked \ due to too much spam. /^Subject: ADV\W/ REJECT Header-Subject beginning with \ "spam" ADV tag rejected.
# postconf -n alias_database = hash:/etc/mail/aliases alias_maps = hash:/etc/mail/aliases biff = no broken_sasl_auth_clients = yes command_directory = /usr/sbin config_directory = /etc/mail daemon_directory = /usr/lib/postfix debug_peer_level = 2 default_privs = nobody default_process_limit = 3 disable_vrfy_command = yes header_checks = regexp:/etc/mail/header_checks mail_name = PLD - $myhostname mail_owner = postfix mail_spool_directory = /var/mail maps_rbl_domains = relays.ordb.org message_size_limit = 2000000 myhostname = networking.ee mynetworks = 127.0.0.0/8,192.168.1.1/32 myorigin = $myhostname queue_directory = /var/spool/postfix relay_domains = hash:/etc/mail/domains setgid_group = maildrop smtp_use_tls = yes smtpd_banner = $myhostname ESMTP $mail_name. We block/report all spam. smtpd_client_restrictions = reject_maps_rbl smtpd_error_sleep_time = 5 smtpd_hard_error_limit = 10 smtpd_helo_required = yes smtpd_recipient_limit = 100 smtpd_recipient_restrictions = permit_mynetworks, \ reject_sender_login_mismatch,permit_sasl_authenticated, \ reject_unauth_destination smtpd_sasl_auth_enable = yes smtpd_soft_error_limit = 60 smtpd_tls_cert_file = /var/lib/openssl/certs/nasza.domena.pl.pem smtpd_tls_key_file = $smtpd_tls_cert_file smtpd_use_tls = yes virtual_maps = hash:/etc/mail/virtual smtpd_sender_login_maps = hash:/etc/mail/virtual
Zawartość master.cf
# grep -v ^# /etc/mail/master.cf smtp inet n - n - - smtpd smtps inet n - y - - smtpd -o smtpd_tls_wrappermode=yes \ -o smtpd_sasl_auth_enable=yes pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce flush unix n - n 1000? 0 flush smtp unix - - n - - smtp showq unix n - n - - showq error unix - - n - - error local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp cyrus unix - n n - - pipe flags=R user=cyrus \ argv=/usr/lib/cyrus/deliver -e -m ${extension} ${user} uucp unix - n n - - pipe flags=Fqhu user=uucp \ argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) ifmail unix - n n - - pipe flags=F user=ftn \ argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix - n n - - pipe flags=Fq. user=foo \ argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
tpop3d™, czyli coś dzięki czemu będziemy mogli pobrać pocztę z serwera.
No i włączamy tpop3d™-a
# /etc/rc.d/init.d/tpop3d start
Przystępujemy do instalacji i konfiguracji amavisa™ + mks™ :)
Instalujemy poldkiem mks™, serwer mksd™, bazy, oraz skrypt aktualizujący bazy
poldek -i mks mksd mks-bases mks-updater mksd-clients
Teraz ściągamy jakiegoś wirusa i sprawdzamy czy mks32 działa...
# wget http://www.eicar.org/download/eicar.com # mks32 eicar.com mks_vir: init... 1.9.0 for Linux i386, 2003.07.02 mks_vir: database version 2003 7 11 13 23 mks_vir: init OK, scan mode mks_vir: check file(s) mks_vir: file: eicar.com mks_vir: --heuristic for virus Eicar.Test mks_vir: --heuristic for virus Eicar.Test mks_vir: status: virus found: eicar.com mks_vir: exit code: 0x01
Jeśli dostaliście coś takiego, tzn. że wszystko jest ok ;)
Teraz przetestujemy czy mksd działa poprawnie.
# /etc/rc.d/init.d/mksd start # mkschk /root/skaner/eicar.com VIR Eicar.Test /root/skaner/eicar.com
Jeśli dostałeś coś takiego, tzn. że wszystko jest okej. mksd przyśpiesza znacznie pracę na słabych maszynach... wtedy znacznie odczujesz.
Instalujemy teraz amavisa
poldek -i amavisd-new
No i teraz najgorsze ;)
Edytujemy /etc/amavisd.conf
Odkomentuj linię:
@bypass_spam_checks_maps = (1); # uncomment to DISABLE anti-spam code
Pozmieniaj odpowiednie linie
$mydomain = 'twoja.domena.pl'; # (no useful default) $daemon_user = 'amavis'; # (no default; customary: vscan or amavis) $daemon_group = 'amavis'; # (no default; customary: vscan or amavis)
Możemy tutaj ustawić użytkownika amavis
. Dodatkowo należy dopisać mksd
do grupy amavis
, dzięki czemu będzie on m�gł korzystać z katalog�w z częściami maili
amavisa.
# grep amavis /etc/group amavis:x:116:mksd
Zakomentuj linię:
#$unix_socketname = "$MYHOME/amavisd.sock"; # amavis helper protocol socket
Jeśli nie chcesz żeby amavis używał pewnych paker�w to zakomentuj odpowiednie linie, np.
#$unrar = 'unrar';
Usuń wszystkie wpisy na temat antywirus�w (@av_scanners = ) i zastąp to wpisem z pliku README z archiwum mksd:
['MkS_Vir daemon', 'mksscan', '-s -Q {}', [0], [1..7], qr/^... (\S+)/ ],
Usuń wpisy z @av_scanners_backup =
W swoim systemie pocztowym (postfix) utw�rz użytkownika (lub alias) "virusalert" lub pozmieniaj wpisy:
$mailfrom_notify_admin $mailfrom_notify_recip $virus_admin
My zrobiliśmy wcześniej aliasa dla virusalert ;)
Ja sobie jeszcze dopisałem:
$hdrfrom_notify_sender = $mailfrom_notify_admin;
Jeśli nie chcesz aby nadawcy list�w oraz admini dostawali informacje o wirusach w domyślnym języku (English) to odkomentuj linie i zr�b własne wpisy w /var/amavis/*.txt
# $notify_sender_templ = read_text('/var/amavis/notify_sender.txt'); # $notify_virus_sender_templ=read_text('/var/amavis/notify_virus_sender.txt'); # $notify_virus_admin_templ = read_text('/var/amavis/notify_virus_admin.txt'); # $notify_virus_recips_templ=read_text('/var/amavis/notify_virus_recips.txt'); i zmień #$bdy_encoding = 'iso-8859-1'; # (default: 'iso-8859-1') na $bdy_encoding = 'iso-8859-2'; # (default: 'iso-8859-1')
Według licencji powinieneś umieścić w notify_sender.txt
reklamę http://www.mks.com.pl
gdyż jest do warunek licencji na używanie mks™. Na końcu pliku /usr/sbin/amavisd
znajdują się przykładowe szablony.
W pliku /etc/mail/master.cf
dopisujemy nową linię:
localhost:10025 inet n - n - - smtpd
No i restart postfix™-a, amavisd™-a i mks™
# /etc/rc.d/init.d/postfix restart # /etc/rc.d/init.d/mksd restart # /etc/rc.d/init.d/amavisd restart
Teraz testujemy amavis™-a:
# telnet 127.0.0.1 10024 Trying 127.0.0.1.10024... Connected to localhost. Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready MAIL FROM: <root> 250 2.1.0 Sender root OK RCPT TO: <root> 250 2.1.5 Recipient root OK DATA 354 End data with <CR><LF>.<CR><LF> Subject: test bez wirusa test . 250 2.6.0 Ok, id=29569-01, from MTA: 250 Ok: queued as A1017FD1E
Dostałeś 250? To znaczy, ze amavisd™ sprawdził przesyłkę :) nie wierzysz? tail -n 100 -f /var/log/maillog
A teraz sprawdzimy jak reaguje na przesyłkę z wirusem:
# telnet 127.0.0.1 10024 Trying 127.0.0.1.10024... Connected to localhost. Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready MAIL FROM: <root> 250 2.1.0 Sender root OK RCPT TO: <root> 250 2.1.5 Recipient root OK DATA 354 End data with <CR><LF>.<CR><LF> Subject: test z wirusem X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* . 250 2.5.0 Ok, but 1 BOUNCE
No i znalazł wirusa :) w logach mamy:
Jul 14 04:17:43 networking amavis[29569]: (29569-02) INFECTED (Eicar.Test), <root> -> <root>, quarantine virus-20030714-041716-29569-02, \ Message-ID: , Hits: -
Teraz jeszcze mała obr�bka plik�w cf od postfix™-a ;)
Edytujemy /etc/mail/master.cf
Linijkę: smtp inet n - n - - smtpd zamieniamy na: smtp inet n - n - - smtpd -o \ content_filter=smtp-amavis:[127.0.0.1]:10024
oraz dodajemy jeszcze:
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=yes
Restart postfix™-a:
# /etc/rc.d/init.d/postfix restart
i powinno wszystko nam pięknie latać:)
Wyślij sobie eicar.com
w załączniku a zobaczysz, że smtp odrzuci i dostaniesz maila z alertem :]
PostgreSQL: Najbardziej zaawansowany system zarządzania bazą danych na świecie typu OpenSource - w taki oto spos�b grupa rozwijająca SZBD PostgreSQL reklamuje sw�j produkt. SZBD PostgreSQL jest implementacją języka SQL, kt�ra zawiera w sobie bardzo wiele jego element�w, a na dodatek wprowadza wiele własnych rozszerzeń. Por�wnywany z mySQL oddaje mu pola przy małych instalacjach, kt�re w prosty, a szybki spos�b mają obsługiwać bazę danych - typu małe portale internetowe, proste bazy, i tym podobne. Jednakże SZBD PostgreSQL dostaje skrzydeł w większych projektach, jest często por�wnywany do bardzo rozbudowanego SZBD Oracle. Cechy SZBD PostgreSQL to między innymi:
osadzane języki proceduralne wykonywane przez bazę danych (plperl, pl/perlu, plpgsql, plpython, pltcl, pl/tcl)
możliwość tworzenia funkcji w PostgreSQLu w języku C, kompilowanych do bibliotek dynamicznych
sterowniki dostępu do bazy z język�w C, C++, python, perl, czy Java (poprzez JDBC), ODBC
wysoce zaawansowana implementacja standardu SQL, obejmująca SQL/92
obsługa BLOB (Binary Large OBjects) -- dużych obiekt�w binarnych, takich jak pliki graficzne, itp.
obsługa p�l typu AUTOINCREMENT jako SERIAL lub SEQUENCE
licencję BSD, kt�ra umożliwia zamykanie kodu SZBD PostgreSQL przy dokonywaniu modyfikacji, co jest istotne w rozwiązaniach biznesowych
Uruchamiamy program poldek™:
# poldek
Wykonujemy:
poldek>ls -l postgresql-*
Przykładowy wynik to:
poldek> ls -l postgresql-* package build date size postgresql-7.4-0.8 2003/12/16 20:45 8.8 MB postgresql-backend-devel-7.4-0.8 2003/12/16 20:45 1.4 MB postgresql-clients-7.4-0.8 2003/12/16 20:45 1.5 MB postgresql-devel-7.4-0.8 2003/12/16 20:45 93.0 KB postgresql-doc-7.4-0.8 2003/12/16 20:45 5.3 MB postgresql-ecpg-7.4-0.8 2003/12/16 20:45 479.0 KB postgresql-ecpg-devel-7.4-0.8 2003/12/16 20:45 17.0 KB postgresql-libs-7.4-0.8 2003/12/16 20:45 252.0 KB postgresql-module-pgcrypto-7.4-0.8 2003/12/16 20:45 91.0 KB postgresql-module-plperl-7.4-0.8 2003/12/16 20:45 30.0 KB postgresql-module-plpgsql-7.4-0.8 2003/12/16 20:45 100.0 KB postgresql-module-plpython-7.4-0.8 2003/12/16 20:45 35.0 KB postgresql-module-pltcl-7.4-0.8 2003/12/16 20:45 44.0 KB postgresql-static-7.4-0.8 2003/12/16 20:45 303.0 KB postgresql-tcl-7.4-0.8 2003/12/16 20:45 38.0 KB postgresql-tcl-devel-7.4-0.8 2003/12/16 20:45 0.0 KB postgresql-tcl-static-7.4-0.8 2003/12/16 20:45 36.0 KB 17 packages, 18.6 MB poldek>
Do poprawnego działania SZBD PostgreSQL konieczne są następujące pakiety:
postgresql™
postgresql-clients™
postgresql-libs™
Zatem można przystąpić do ich instalacji, wpisując następujące polecenie:
# poldek -i postgresql postgresql-clients postgresql-libs
Aby SZBD PostgreSQL skorzystał z wewnętrznych język�w plpgsql czy też plphpython należy doinstalować pakiety postgresql-module-plpgsql™
# poldek -i postgresql-module-plpgsql
oraz
root# poldek -i postgresql-module-plpython
Edytujemy plik /etc/sysconfig/postgresql
:
# vim /etc/sysconfig/postgresql
I wybieramy odopowiednie podejście do bazy danych. Polecam standard setting. Po edycji wykonanie komendy
# grep PG_DB_CLUSTERS /etc/sysconfig/postgresql | egrep -v ^#
powinno dać wynik:
PG_DB_CLUSTERS="/var/lib/pgsql"
Wykonujemy polecenie:
# service postgresql init
Podczas inicjalizacji SZBD PostgreSQL stworzy pliki potrzebne mu do przechowywania tabel, tabele systemowe jak i bazy danych template0 i template1 konieczne do jego dalszego działania. Inicjalizacja PostgreSQLa nie jest r�wnoznaczna z jego uruchomieniem, o czym dalej.
W punkcie (3) (<- TODO, shufla docbook lame) został zainicjalizowany cluster, w kt�rym to można dodawać bazy danych. Trzeba teraz odpowiednio skonfigurować tenże cluster. Przyda się edycja plik�w ${PG_DB_CLUSTERS}/{postgresql.conf,pg_hba.conf}:
# vim /var/lib/pgsql/{postgresql.conf,pg_hba.conf}
Przydatna opcja to tcpip_socket = true
w pliku /var/lib/pgsql/postgresql.conf
.
# su - postgres -c 'psql template1' template1=# CREATE USER uzytkownik WITH ENCRYPTED PASSWORD 'hasło' \ CREATEUSER CREATEDB; CREATE USER
Użytkownik `uzytkownik' będzie miał możliwość tworzenia baz danych (za pomocą createdb lub CREATE DATABASE z poziomu psql) jak i dodawania użytkownik�w (createuser lub CREATE USER z poziomu psql).
$ psql -h 127.0.0.1 template1 template-1=# SELECT count(*) FROM pg_database; count ------- 2 (1 row)
Warto włączyć obsługę PostgreSQLa w PHP™, instalując pakiet php-pgsql™, r�wnież w perl™-u perl-DBD-Pg™ lub perl-Pg™, oraz w python™-ie python-postgresql™. Pakiet postgresql-devel™ jest przydatny przy pisaniu aplikacji w C/C++™ korzystających z PostgreSQLa. Dokumentacja do PostgreSQLa znajduje się, a jakże, w pakiecie postgresql-doc™.
# poldek -i php-pgsql # poldek -i perl-DBD-Pg # poldek -i perl-Pg # poldek -i python-postgresql # poldek -i postgresql-devel # poldek -i postgresql-doc
/usr/share/doc/postgresql-*/FAQ_polish.gz
- Lokalna wersja FAQ, instalowana z
pakietem postgresql (może być także w oddzielnej paczce z dokumentacją).
Dużą zaletą ProFTPD™ jest jego prostota. Plik konfiguracyjny demona do złudzenia przypomina ten od Apache™. Jego zrozumienie nie powinno sprawiać trudności.
Zanim przystąpisz do instalacji powinieneś zdecydować w jakim trybie ma pracować usługa.
Jako demon, czy ma być uruchamiana poprzez superserwer inetd™. Tryb inetd polega na tym, że proces
proftpd zostanie uruchomiony dopiero po odebraniu przez inetd żądania o tę
usługę. Natomiast w trybie daemon ProFTPD jest uruchomiony cały czas i pracuje
niezależnie od inetd. Tak więc, jeżeli Tw�j komputer, kt�ry przeznaczysz na serwer
nie jest zbyt szybki, powinieneś wybrać ProFTPD uruchamianego poprzez inetd.
Dystrybucja udostępnia obie te możliwości. Pakiet proftpd-inetd
zapewnia uruchamianie poprzez inetd, natomiast po zainstalowaniu usługi z pakietu
proftpd-standalone
uruchamiana ona będzie w trybie daemon.
W opisie posłużymy się wersją daemon
. Instalujemy pakiet
proftpd-standalone
Jak już wspomniałem we wstępie, ProFTPD
jest jednym z prostszych w konfiguracji program�w serwerowych. Wszystkie pliki
potrzebne do jego skonfigurowania znajdują się w katalogu
/etc/ftpd
.
# ls -1 /etc/ftpd ftpusers proftpd.conf
W pliku ftpusers
znajduje się lista użytkownik�w, kt�rym odebrana została
możliwość logowania się do serwera ftp. Poszczeg�lne pozycje z tej listy zakończone są
znakiem nowej linii, tak więc każda pozycja jest rozmieszczona jedna pod drugą. Natomiast
plik proftpd.conf
zawiera właściwą konfigurację usługi.
ServerName "ProFTPD" ServerIdent off ServerType standalone DeferWelcome off DefaultServer on DefaultRoot ~
ServerName
określa nazwę serwera wyświetlaną łączącym się z nim użytkownikom.
ServerIdent
pozwala na wyświetlenie wiadomości powitalnej
podczas połączenia, np. zawartości pliku .message
.
Domyślnie wyłączona.
ServerType
ustawia tryb pracy demona ProFTPD
DeferWelcome
Nie pokazuje wiadomości powitalnej dop�ki
użytkownik się nie zautoryzuje.
DefaultServer
Określamy konfigurację jako domyślną
DefaultRoot
Wyznaczamy nadrzędny dla każdego użytkownika katalog spoza
kt�rego nie będzie m�gł wyjść. W listingu powyżej będzie to katalog domowy.
Poniżej znajduje się szereg zakomentowanych opcji pozwalających na konfigurację połączeń bezpieczną metodą przy użyciu SSL. Jeżeli jesteś zainteresowany ich użyciem powinieneś zapoznać się z dokumentacją on line serwera ProFTPD. Przechodzimy teraz do dalszej konfiguracji.
Port 21 Umask 022 User ftp Group ftp AuthPAMAuthoritative on
Port
Definiujemy tutaj port na kt�rym serwer będzie oczekiwał
nadchodzących połączeń
Umask
Tryb umask 022 jest typowym standardem dla ogolnie dostępnych
plik�w i katalog�w
User
Konto użytkownika na kt�rego uprawnieniach pracuje usługa
Group
Grupa do kt�rej należy konto użytkownika usługi
AuthPAMAuthoritative
Dajemy możliwość autoryzacji użytkownik�w poprzez
moduł PAM jeśli jest to możliwe.
Przedstawione tutaj wartości poszczeg�lnych opcji są domyślnie ustawiane w pliku konfiguracyjnym w trakcie instalacji pakietu. Jak najbardziej możesz z nich korzystać. Na pewno nie powinieneś zmieniać takich ustawień jak użytkownik czy grupa, port oraz spos�b autoryzacji.
<Directory /> AllowOverwrite on </Directory>
Zezwalamy na nadpisywanie plik�w w obrębie katalogu do kt�rego użytkownik się zaloguje. Poniżej
w pliku znajduje się przykładowa konfiguracja dla użytkownika anonimowego. Sekcja mieści się
wewnątrz znacznika <Anonymous ~ftp></Anonymous>
.
Poniższy wykaz omawia najczęściej wykorzystywane dyrektywy w tej sekcji.
User ftp Group ftp AnonRequirePassword off RequireValidShell off
User
- konto użytkownika kt�rego prawa będzie uzyskiwała osoba
logująca się do serwera
Group
- grupa do kt�rej należy powyższe konto.
AnonRequirePassword
- w powyższym przykładzie wyłączona.
Umożliwia użytkownikom anonimowym logowanie się bez hasła.
RequireValidShell
- opcja ta powoduje, że ProFTPD nie sprawdza
czy dany użytkownik, kt�ry się loguje posiada przypisaną w
/etc/shells
powłokę.
UserAlias anonymous ftp MaxClients 10 DisplayLogin welcome.msg DisplayFirstChdir .message AllowStoreRestart on
UserAlias
- przyporządkowuje nazwę użytkownika do systemowego
konta. W przykładzie anonymous został przypisany kontu ftp.
MaxClients
- ilość jednoczesnych połączeń anonimowych kt�re
będą realizowane przez serwer.
DisplayLogin
- określamy plik kt�rego zawartość będzie
wyświetlana po starcie.
DisplayFirstChdir
- plik kt�rego zawartość będzie wyświetlana
po pierwszym wejściu do katalogu.
AllowStoreRestart
- pozwala klientom wznawiać upload.
<Limit WRITE> DenyAll </Limit>
Zabraniamy klientom pisania do katalogu
/home/services/ftp/pub
.
<Directory /home/services/ftp/pub/Incoming> <Limit READ> DenyAll </Limit> <Limit WRITE> AllowAll </Limit> <Limit STOR> AllowAll </Limit> </Directory>
Katalogowi Incoming
zostały precyzyjnie określone prawa dostępu. W
powyższym przykładzie każdy ma dostęp do zapisu w tym katalogu natomiast nikt nie posiada
prawa do jego odczytywania.
Dostęp do serwera ftp możemy ograniczać na kilka sposob�w. Można limitować ilość jednoczesnych połączeń, stworzyć listę adres�w IP, kt�re będą miały prawo do zapisu czy odczytu określonych katalog�w.
Na tym zakończymy podstawową konfigurację serwera ProFTPD. Więcej informacji na jego temat znajdziesz na stronach z jego dokumentacją.
W tym rozdziale przedstawiona zostanie konfiguracja samby w roli serwera domeny Microsoft Windows NT4 (PDC).
Do realizacji tego zadania potrzebne będą pakiety: samba™ i samba-clients™. Znaczenie poszczeg�lnych pakiet�w:
samba™ - pakiet ten zawiera serwer samby
samba-clients™ - zestaw narzędzi przydatnych w poruszaniu się w środowisku Microsoft Networks.
Proces instalacji pakiet�w przedstawiony został w dziale Zarządzanie pakietami.
Przy użyciu dowolnego edytora otwieramy plik /etc/samba/smb.conf
. Całą konfigurację należy wykonać w sekcji [global]
. Przyjęta w nim została następująca konwencja: <opcja> = <wartość>. Jeżeli dana opcja ma kilka wartości,
oddziela się je znakiem spacji. Poszczeg�lne opcje umieszczane są w osobnych liniach. Komentarze w pliku rozpoczynają się znakiem "#" lub ";". Poniżej znajduje się wykaz najważniejszych opcji kt�re należy ustawić podczas realizacji zadania.
workgroup = DOM server string = File Server announce as = NT Server
Ustawiamy nazwę domeny kt�rej członkiem będzie nasz serwer oraz opcjonalnie komentarz (opis) komputera i typ serwera (opcjonalnie).
domain logons = yes domain master = yes preferred master = yes local master = yes wins support = yes os level = 255
Ustawiamy logowanie do domeny oraz bycie kontrolerem domeny Windows NT4 i głï¿½wną przegladarką komputer�w w sieci.
security = user
Określamy poziom bezpieczeństwa. Nasza konfiguracja wymaga ustawień zabezpieczeń na poziomie użytkownika.
nt acl support = yes nt pipe support = yes
Ustawiamy
time server = yes
Ustawiamy bycie serwerem czasu (opcjonalnie).
Następnie restartujemy SAMBĘ i przystępujemy do dalszej konfiguracji. W bazie użytkownik�w Samby musi znaleźć się konto administratora. Będzie ono wymagane przy dołączaniu stacji klienckich do domeny.
# smbpasswd -a root New SMB password: Retype new SMB password: Added user root.
Hasło roota Samby nie powinno być identyczne z hasłem administratora systemu! następnie tworzymy konta użytkownik�w - podobnie jak przy zwykłym serwowaniu plik�w, tak i tutaj potrzebujemy nie tylko wpisu w bazie Samby, ale i konta uniksowego.
# useradd -g users jurek
Pamiętajmy też o utworzeniu wpisu w bazie użytkownik�w Samby:
# smbpasswd -a jurek
następnie ustawiamy mapowanie grup w linux na odpowiednie grupy windows-a, poleceniem net groupmap. Domyślne ustawienia Samby (mapowanie na uniksową grupę -1) wymaga zmiany, kt�rą wprowadzi polecenie net groupmap add:
# net groupmap add ntgroup="Domain Admins" unixgroup=domadmin type=d Updated mapping entry for Domain Admins
Podobnie modyfikujemy wpisy dla grup Domain Users - decydując się na wyb�r grupy users oraz Domain Guests - nobody: net groupmap.
# net groupmap add ntgroup="Domain Users" unixgroup=users type=d Updated mapping entry for Domain Users # net groupmap add ntgroup="Domain Guests" unixgroup=nobody type=d Updated mapping entry for Domain Guests # net groupmap add ntgroup="Users" unixgroup=users type=d Add mapping entry for Users
Sprawdźmy, czy zmiany będą widoczne:
# net groupmap list ... Domain Admins (S-1-5-21-353545269-2518139598-3611003224-512) -> domadmin Domain Users (S-1-5-21-353545269-2518139598-3611003224-513) -> users Domain Admins (S-1-5-21-353545269-2518139598-3611003224-514) -> nobody Users (S-1-5-21-353545269-2518139598-3611003224-3001) -> users ..
Praca komputera w domenie wymaga założenia mu konta - tzw. Machine Trust Account. Jest to specyficzne konto, gdyż jego hasło ustalane jest przy podłączaniu komputera do domeny i znane tylko parze klient-serwer. Dzięki temu istnieje możliwość sprawdzenia tożsamości pr�bującego się logować komputera - nawet gdy ktoś dołączy maszynę o tej samej nazwie, to nie powinien uzyskać możliwości dostępu do domeny. Nazwy kont odpowiadają nazwom NetBIOS komputer�w, ale z dołączonym na końcu symbolem dolara. Dla stacji biuro będzie to więc biuro$. Konto to powinno być zablokowane, by niemożliwe było uzyskanie dostępu poprzez ssh, czy też inne usługi systemu operacyjnego. Nie jest także konieczny katalog domowy, w zamian za to zdecydujemy się na umieszczenie kont w grupie machines - pozwoli to w jakimś stopniu ogarnąć szybko zwiększającą się liczbę użytkownik�w systemu serwera.
# groupadd machines # useradd -c "Komputer biurowy" -g machines -d /dev/null -s /bin/false biuro$ # passwd -S biuro$ Password locked.
Wydaje się, że powinniśmy teraz utworzyć odpowiedni wpis w bazie haseł Samby - nie jest to jednak konieczne. Przy pr�bie podłączenia komputera do domeny czynność ta zostanie wykonana automatycznie. Gdy jednak zajdzie potrzeba ręcznego utworzenia wpisu, do wywołania smbpasswd dodać musimy parametr -m (machine):
# smbpasswd -a -m ksiegowosc
W tym przypadku nie podajemy symbolu $.
Oczywiście cały proces dodawania kont maszyn można zautomatyzować w tym celu należy dodać do /etc/samba/smb.conf
:
add machine script = /usr/sbin/useradd -d /var/lib/nobody -g machines -c 'Konto Maszyny %I' -s /bin/false %u passwd chat debug = no passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully* passwd program = /usr/bin/smbpasswd -L -a %u
i oczywiście utworzyć katalog /var/lib/nobody
# mkdir /var/lib/nobody
należy sie też upewnić czy nie mamy w smb.conf wpisu
# kto nie moze sie logowac do samby invalid users = root
Aby dodać Windows XP Profesional lub Microsoft Windows NT Server 4.0 Standard Edition (wersja Home nie obsługuje modelu domenowego w żaden spos�b) należy w rejestrze zmienić:
REGEDIT4
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netlogon\parameters
"RequireSignOrSeal"=dword:00000000
lub z poziomu Local Group Policy wyłączając (Disabled) Security Options | Domain Member | Digitally encrypt or sign secure channel data (always)
wiecej:
/usr/share/doc/samba-doc/Registry/WinXP_SignOrSeal.reg
Brian Getsinger (Apple Corp). Mac OS X Server Samba Primary Domain Controller Configuration http://www.afp548.com/Articles/system/sambapdc.html Sherlock Error logging a Win XP machine into a domain running Samba.
W tym rozdziale przedstawiona zostanie konfiguracja samby w roli serwera członkowskiego domeny Microsoft Windows NT4. Zaletą takiej konfiguracji jest możliwość budowania polityki praw dostępu do zasob�w zgromadzonych na serwerze w oparciu o konta użytkownik�w lokalnego serwera PDC.
Do realizacji tego zadania potrzebne będą trzy pakiety: samba™, samba-clients™ oraz samba-winbindd™. Znaczenie poszczeg�lnych pakiet�w:
samba™ - pakiet ten zawiera serwer samby
samba-clients™ - zestaw narzędzi przydatnych w poruszaniu się w środowisku Microsoft Networks.
samba-winbindd™ - demon pozwalający na pobieranie uprawnień z serwera PDC.
Proces instalacji pakiet�w przedstawiony został w dziale Zarządzanie pakietami.
Przy użyciu dowolnego edytora otwieramy plik /etc/samba/smb.conf
. Całą konfigurację z kt�rej będzie
r�wnież korzystał demon winbindd™ należy wykonać w sekcji [global]
. Przyjęta w nim została następująca konwencja: <opcja> = <wartość>. Jeżeli dana opcja ma kilka wartości,
oddziela się je znakiem spacji. Poszczeg�lne opcje umieszczane są w osobnych liniach. Komentarze w pliku rozpoczynają się
znakiem "#" lub ";". Poniżej znajduje się wykaz najważniejszych opcji kt�re należy
ustawić podczas realizacji zadania. Wykraczają one nieco poza czystą konfigurację winbindd™ ale są
konieczne do jego prawidłowego działania.
workgroup = DOM server string = File Server
Ustawiamy nazwę domeny kt�rej członkiem będzie nasz serwer oraz opcjonalnie komentarz (opis) komputera.
security = domain
Określamy poziom bezpieczeństwa. Nasza konfiguracja wymaga ustawień zabezpieczeń typu domenowego.
password server = PDC
Nazwa netbiosowa serwera PDC. To z tego właśnie serwera demon winbind będzie pobierał uprawnienia.
To tyle, jeżeli chodzi o og�lną konfigurację samby. Teraz czas na dodanie kilku opcji potrzebnych winbindowi.
winbind separator = + idmap uid = 10000-20000 idmap gid = 10000-20000 winbind enum users = yes winbind enum groups = yes client signing = yes
winbind separator
- znak, kt�rym oddzielana będzie nazwa użytkownika bądź grupy od nazwy domeny. Np. "DOM+jan"
idmap uid
- zakres uid�w w systemie zarezerwowanych na użytkownik�w domenowych
idmap gid
- zakres gid�w w systemie przeznaczonych na grupy domenowe
Na tym możemy zakończyć edycję pliku konfiguracyjnego samby. Aby nasza konfiguracja stała się aktywna musimy przerestartować usługę.
/etc/rc.d/init.d/smb restart
W ślad za usługą smb™ zostaną przerestartowane także nmbd™ oraz interesujący nas winbindd™. Czynnością kt�rą musimy bezwzględnie wykonać jest podłączenie naszego serwera do domeny. Aby to uczynić wykonujemy poniższe polecenie:
# net rpc join -S PDC -U Administrator%hasło Joined the domain DOM
Jeżeli w tym momencie miałbyś problemy ze skomunikowaniem się z serwerem domeny możesz dodać do polecenia opcję -I
a po niej adres
IP serwera PDC. Po pomyślnej operacji podłączenia możemy sprawdzić działanie winbinda.
# wbinfo -g DOM+Administrator DOM+Basia DOM+Darek ... # wbinfo -g DOM+Domain Admins DOM+Domain Users ...
Opcja -u
pokazuje listę użytkownik�w, natomiast -g
listę grup.
Jeżeli wynik obu poleceń wygląda podobnie jak na listingu oznacza to, że winbind pracuje poprawnie.
Jakie korzyści płyną z takiej konfiguracji samby? Ot�ż sprawdza się ona w środowisku sieciowym w kt�rym zasoby udostępniają zar�wno serwery pracujące pod kontrolą Windows jak i linuksa. Pozwala to na budowanie sp�jnej polityki bezpieczeństwa w oparciu o uwierzytelnianie użytkownika na poziomie domeny. Drugą z zalet jest prostota w implementacji. Dzięki winbindd™ dostęp do grup oraz użytkownik�w domenowych odbywa się w taki sam spos�b jak do ich odpowiednik�w lokalnych.
# chown DOM+Administrator.DOM+Domain\ Users plik.txt
Snort to bardzo silny sieciowy system wykrywania atak�w (ang. Network Intrusion Detection System, NIDS), kt�ry daje szeroki zakres mechanizm�w detekcji, mogących w czasie rzeczywistym dokonywać analizy ruchu i rejestrowania pakiet�w w sieciach opartych na protokołach IP/TCP/UDP/ICMP. Potrafi przeprowadzać analizę strumieni pakiet�w, wyszukiwać i dopasowywać podejrzane treści, a także wykrywać wiele atak�w i anomalii, takich jak przepełnienia bufora, skanowanie port�w typu stealth, ataki na usługi WWW, SMB, pr�by wykrywania systemu operacyjnego i wiele innych.
Przed instalacją Snorta warto zaopatrzyć się w bazę danych (w opisie wykorzystano MySQL™) i serwer Apache™ z obsługą PHP™. W bazie będą składowane logi, a za wygodny interfejs do przeglądania alarm�w posłuży ACID™ (ang. Analysis Console for Intrusion Databases).
Gdy mamy już bazę danych i serwer WWW z PHP, instalujemy następujące pakiety.
# poldek -i snort acid
Przed konfiguracja środowiska NIDS zakładamy dwie bazy, dla Snorta i dla archiwum alarm�w.
# mysql -u mysql -p Enter password: mysql> create database snort_log; Query OK, 1 row affected (0.01 sec) mysql> create database snort_archive; Query OK, 1 row affected (0.01 sec) mysql> quit
Dodajemy tabele w taki sam spos�b dla obu baz.
# gzip -d /usr/share/doc/snort-{wersja}/create_mysql.gz # mysql -D snort_log -u mysql -p < \ /usr/share/doc/snort-{wersja}/create_mysql # gzip -d /usr/share/doc/acid-{wersja}/create_acid_tbls_mysql.sql.gz # mysql -D snort_log -u mysql -p < \ /usr/share/doc/acid-{wersja}/create_acid_tbls_mysql.sql # mysql -D snort_archive -u mysql -p < \ /usr/share/doc/snort-{wersja}/create_mysql # mysql -D snort_archive -u mysql -p < \ /usr/share/doc/acid-{wersja}/create_acid_tbls_mysql.sql
Następnie (najprościej przy użyciu popularnego narzędzia phpMyAdmin™) tworzymy użytkownika i nadajemy mu prawa dla stworzonych baz.
Przechodzimy do edycji pliku
/etc/acid_conf.php
, w kt�rym
dodajemy parametry dla połączenia się z bazami.
[...] /* Alert DB connection parameters */ [...] $alert_dbname = "snort_log"; $alert_host = "localhost"; $alert_port = "3306"; $alert_user = "login"; $alert_password = "haslo"; /* Archive DB connection parameters */ $archive_dbname = "snort_archive"; $archive_host = "localhost"; $archive_port = "3306"; $archive_user = "login.; $archive_password = "haslo"; [...]
Teraz strona z interfejsem jest dostępna pod adresem http://twoje_ip/acid. Oczywiście dla bezpieczeństwa zalecane jest zastosowanie protokołu SSL do komunikacji z zasobem i autoryzacji poprzez pakiet apache-mod_auth.
Snort zależnie od środowiska w jakim działa może generować dużą ilość zbędnych alert�w, te bardziej istotne można przenosić do drugiej bazy za pomocą ACID, dla przejrzystości og�łu.
Do działania jako sieciowy system wykrywania włamań, Snort
potrzebuję sprecyzowania zasad funkcjonowania całości w
głï¿½wnym pliku konfiguracyjnym snort.conf
. W starszych wersjach
systemu, wszystkie opcje, łącznie z regułami atak�w znajdowały
się w jednym pliku. Ciągła rozbudowa Snorta, rosnąca liczba
sygnatur i og�lna funkcjonalność, wymusiła rozdzielenie
niekt�rych części konfiguracyjnych, w tym reguł atak�w.
Przejrzystość i sp�jność snort.conf została przywr�cona przy
użyciu polecenia include, kt�rym dołącza się odpowiednie
zestawy sygnatur i inne części konfiguracyjne, np.:
include: ścieżka_do_pliku/nazwa
Bazy reguł charakteryzują się nazwą pliku z końc�wką
.rules
,
pierwszy człon nazwy zawiera rodzaj usługi lub typ ataku,
kt�rego dotyczy dany zestaw.
Pozostałymi plikami konfiguracyjnymi są:
classification.config
- zawierający
klasyfikatory rodzaj�w atak�w z
nadanym priorytetem zagrożenia, tak
jak poniżej:
config classification: web-application-attack,Web Application Attack,1
reference.config
- posiadający skr�ty
adres�w do stron organizacji z bazą
opis�w atak�w, np.:
config reference: bugtraq http://www.securityfocus.com/bid/
threshold.conf
- metody łagodzenia
licznych, fałszywych alarm�w,
unicode.map
- zestaw kodowanych znak�w
unicode, na potrzeby preprocesora http_inspect.
Głï¿½wny plik konfiguracyjny można podzielić na cztery sekcje. Pierwsza, odpowiedzialna jest za ustalanie zmiennych var, wykorzystywanych w składni reguł atak�w.
Przyjmijmy że docelowo Snort ma monitorować dwie podsieci o
adresach 192.168.1.0/24 i 192.168.2.0/24, jego pliki
konfiguracyjne znajdują się bezpośrednio w katalogu
/etc/snort
, a regułki w
/etc/snort/rules
.
# Adres sieci lokalnej var HOME_NET [192.168.1.0/24,192.168.2.0/24] # Adres sieci zewnetrznej var EXTERNAL_NET !$HOME_NET # Lista adresow serwerow znajdujacych sie w strefie chronionej var DNS_SERVERS $HOME_NET var SMTP_SERVERS $HOME_NET var HTTP_SERVERS $HOME_NET var SQL_SERVERS $HOME_NET var TELNET_SERVERS $HOME_NET var SNMP_SERVERS $HOME_NET # Lista portow var HTTP_PORTS 80 var SHELLCODE_PORTS !80 var ORACLE_PORTS 1521 # Lista serwerow czat, komunikatorow var AIM_SERVERS [64.12.24.0/24,64.12.25.0/24,64.12.26.14/24,64.12.28.0/24,] # Scieżka do katalogu z regulami atakow var RULE_PATH /etc/snort/rules
W tej samej sekcji znajduje się zestaw parametr�w
uruchomieniowych, zaczynających się od wyrażenia
config
(pełna
ich lista znajduję się w dokumentacji):
# wybor interfejsu do nasłuchu (jeden demon Snorta moze # obslugiwac tylko jeden interfejs sieciowy) config interface: eth0
Druga część głï¿½wnego pliku konfiguracyjnego, zawiera ustawienia preprocesor�w. Parametry domyślne nie będą przedstawione w poniższym opisie. Kompletną listę opcji, można znaleźć w dokumentacji Snorta. Oto przykłady ustawień preprocesor�w:
Frag2:
# detect_state_problems . zwraca alarm przy pokrywaniu sie fragmentow. preprocessor frag2: detect_state_problems
Stream4, Stream4_reassemble:
# disable_evasion_alerts - brak alarmow przy nakladaniu sie #pakietow TCP, detect_scans - detektor prob cichego skanowania, # detect_state_problems - detektor nienaturalnego zachowania # pakietow. preprocessor stream4: disable_evasion_alerts \ detect_scans detect_state_problems # both - skladanie sesji TCP w obu kierunkach pomiedzy # klientem i serwerem, # ports - lista portow, na ktorych ma dzialac reasemblacja. preprocessor stream4_reassemble: both ports [ 21 25 80 143 110 ]
Http_inspect:
# iis_unicode_map - wskazuje plik z kodowaniem unicode i wybiera standardowe. preprocessor http_inspect: global is_unicode_map unicode.map 1252 # profile - wybor profilu ustawien dla serwerow typu iis, apacze i all. preprocessor http_inspect_server: server adres_IP_serwera_MS_IIS \ profile iis \ ports { 80 } preprocessor http_inspect_server: server adres_IP_serwera_Apache \ profile apache \ ports { 80 }
Powyższy przykład przedstawia możliwość profilowania ustawień dla poszczeg�lnych serwer�w, kt�re podlegają ochronie. Serwery IIS i Apache, pracują w odmienny spos�b, a zarazem posiadają inne słabe punkty wykorzystywane podczas atak�w. Operacja dostosowania ustawień skupia mechanizmy ochronne na odpowiednich metodach atak�w dla danego typu serwera bądź ich grupy w danej sieci objętej ochroną.
RPC_decode, Back Orfice, Telnet_decode, Arpspoof, Performance Monito:
# alert_fragments . wlacza alarm, przy fragmentowaniu pakietow RPC, # Domyślne porty: 111 i 32771. preprocessor rpc_decode: 111 32771 alert_fragments preprocessor bo preprocessor telnet_decode preprocessor arpspoof preprocessor arpspoof_detect_host: adresy_IP \ przypisane_do_nich_adresy_MAC # console . wyswietlanie statystyk na ekranie, # flow i events . statystyki badanego ruchu i ilosci dopasowanych # regul, # time . aktualizacja danych co 10s. preprocessor perfmonitor: console flow events time 10
Flow i Flow-portscan:
# stats_interval . zapisywanie statystyk, 0 - wylaczone, # hash . wybor metody mieszania. preprocessor flow: stats_interval 0 hash 2 # server-watchnet . adresy IP, na ktorych flow bedzie # prowadzic badania, # server-learning-time . czas utrzymania punktow dla danego adresu IP, # server-scanner-limit . ilosc zapytan decydujacych o przyznaniu # statusu # skanowania z danego adresu, # src-ignore-net, dst-ignore-net . lista ignorowanych adresow docelowych # i zrodlowych. preprocessor flow-portscan: \ server-watchnet [xxx.xxx.xxx.xxx/xx] \ server-learning-time 14400 \ server-scanner-limit 10 \ src-ignore-net [xxx.xxx.xxx.xxx/xx, xxx.xxx.xxx.xxx/xx] \ dst-ignore-net [xxx.xxx.xxx.xxx/xx]
Trzecia sekcja snort.conf
, zawiera metody konfiguracji modułï¿½w
wyjściowych, czyli r�żnych sposob�w logowania wynik�w i tzw.
akcji reguł. Na potrzeby tego opisu wymieniony będzie tylko
przykład logowania do bazy MySQL.
output database: alert, mysql, user=login password=haslo \ dbname=snort_log host=127.0.0.1
Za pomocą reguł akcji można tworzyć własne rodzaje reakcji na wykryte zdarzenie, np.:
ruletype czerwony_alarm { type log # zapis do demona syslogd, lokalnie output alert_syslog: LOG_ALER } # Przykladowa regula: czerwony_alarm $HOME_NET any -> $HOME_NET 6667 (msg:"Internal \ IRC Server";)
Czwarta, ostatnia część, głï¿½wnego pliku konfiguracyjnego,
zawiera odniesienia do zestaw�w reguł i wcześniej już
opisanych plik�w, classification.config, reference.config,
threshold.conf
(przykład poniżej).
include classification.config include reference.config include $RULE_PATH/bad-traffic.rules include $RULE_PATH/exploit.rules include $RULE_PATH/telnet.rules include $RULE_PATH/rpc.rules include $RULE_PATH/dos.rules (...) # dodatkowy zestaw regul Bleeding Snort - # http://www.bleedingsnort.com include $RULE_PATH/bleeding.rules include threshold.conf
Dostosowanie Snorta do swoich potrzeb obejmuje, obok konfiguracji preprocesor�w przede wszystkim decyzje, jakie zbiory reguł mają być brane pod uwagę (czyli jakie pliki z regułami mają być dołączane za pomocą polecenia include). W środowisku, w kt�rym wszystkie serwery WWW to Apache, reguły chroniące serwer IIS będą generowały zupełnie niepotrzebne alarmy. Jeśli nie udostępniamy FTP, reguły opisujące ataki na tę usługę będą tylko spowalniały pracę całego systemu. To sprawy oczywiste, jednak właściwe dostosowanie NIDS do swoich potrzeb wymaga wiele pracy. Dobranie odpowiednich dla danego środowiska reguł jest kluczowe dla działania całego systemu, duża ilość fałszywych alarm�w nie tylko zużywa zasoby (każda z reguł musi być przecież przeanalizowana), ale może r�wnież bardzo skutecznie "zaciemnić" obraz, sprawiając, że prawdziwy atak może przejść niezauważony w zalewie informacji mało istotnych. Obecna baza sygnatur liczy sobie około 2500 reguł i jest praktycznie każdego dnia wzbogacana o nowe opisy atak�w. Dla przybliżenia występujących w bazie kategorii sygnatur, opiszę jakiego rodzaju ataki wykrywają:
attack-responses - odpowiedzi usług na pr�bę ataku;
backdoor - działalność tzw. tylnych drzwi, trojan�w, rootkit�w;
bad-traffic - nieprawidłowy ruch, np. na port 0;
chat - aktywność r�żnego rodzaju komunikator�w;
ddod, dos - zmasowane ataki Distributed Denial of Service (rozproszony atak typu - blokada usługi);
deleted - reguły przestarzałe, wykasowane;
dns - ataki na usługę Domain Name System;
experimental - zestaw eksperymentalnych reguł;
exploit - programy mające na celu wykorzystywanie błęd�w w oprogramowaniu;
icmp-info, icmp - komunikaty ICMP z r�żnych program�w, testujących ruch;
imap, pop2, pop3, smtp - ataki na systemy pocztowe;
info - pr�by logowania na usługi Telnet, Ftp;
local - zestaw własnych reguł;
misc - r�żne, dotyczące usług CVS, MS Terminal, BOOT, UPnP itd.;
multimedia - strumienie audio, wideo;
mysql, sql, oracle - ataki na znane serwer baz danych;
netbios - anomalia związane z protokołem Netbios/SMB;
nntp - ataki na serwer grup dyskusyjnych;
other-ids - działalność innych system�w IDS;
p2p - aktywność program�w Peer to Peer;
policy - pr�by atak�w na usługi policy ftp itp.
porn - aktywność stron pornograficznych;
rpc - ataki na usługi Remote Procedure Call;
finger, rservices, telnet - ataki na dość słabo zabezpieczone usługi uniksowe: finger, rlogin, rsh, rexec, telnet;
scan - r�żnego rodzaju techniki skanowania port�w;
shellcode - wykorzystanie nieprawidłowego kodu do pr�b przepełnienia bufora;
snmp - ataki na usługi SNMP;
tftp, ftp - zdarzenia związane z przesyłaniem plik�w poprzez serwer ftp;
virus - transfer poczty z podejrzanym załącznikiem;
web-attacks, web-misc, web-client, web-cgi, web-php, web-coldfusion, web-frontpage, web-iis - ataki na r�żnego typu serwery WWW, przeważnie z wykorzystaniem błęd�w w skryptach cgi, php;
x11 - aktywności sesji serwera XFree86.
Do aktualizacji sygnatur posłuży nam perlowy skrypt Oinkmaster. Ma on duże możliwości kt�re pozwalają w prosty spos�b zarządzać regułami Snorta. Wymagane pakiety do uruchomienia to: perl, perl-base, perl-modules i vixie-cron albo hc-cron .
Ściągamy archiwum tar, rozpakowujemy, skrypt wgrywamy do
katalogu /usr/local/bin
, a konfig do
/etc
:
# wget --passive-ftp \ ftp://ftp.it.su.se/pub/users/andreas/oinkmaster/oinkmaster-1.0.tar.gz # tar -zxvpf oinkmaster-1.0.tar.gz # cp oinkmaster-1.0/oinkmaster.pl /usr/local/bin/ # cp oinkmaster-1.0/oinkmaster.conf /etc/
Operacja aktualizacji odbywa się po następującej sekwencji komend:
# /usr/local/bin/oinkmaster.pl -o /etc/snort/rules/
Dodanie innego źr�dła reguł:
# /usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ -q -u \ http://www.bleedingsnort.com/bleeding.rules.tar.gz
Aby aktualizacja odbywała się automatycznie, w katalogu
/etc/cron.daily
tworzymy plik
uprules
.
# touch /etc/cron.daily/uprules # chmod 700 /etc/cron.daily/uprules
I dodajemy do niego następującą zawartość, podając adres e-mail na kt�ry ma zostać wysłany raport z codziennej aktualizacji jeśli pojawia się coś nowego:
TMP=`mktemp /tmp/oinkmaster.XXXXXXXX` && (/usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ \ -q > $TMP 2>&1; if [ -s $TMP ]; then mail -s "Update Snort Rules" root@twoja_domena < $TMP; fi; rm $TMP) # dodatkowy zestaw regul Bleeding Snort - http://www.bleedingsnort.com TMP=`mktemp /tmp/oinkmaster.XXXXXXXX` && (/usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ -q -u \ http://www.bleedingsnort.com/bleeding.rules.tar.gz > $TMP 2>&1; if [ -s $TMP ]; then mail -s "Update Bleeding Rules" \ root@twoja_domena < $TMP; fi; rm $TMP) /etc/rc.d/init.d/snort restart
Warto przyjżeć się bliżej ciekawym funkcjonalnościom oinkmastera. W pliku konfiguracyjnym mamy możliwość wyłączania poszczeg�lnych regułek po nr sid, dodawania do nich własnych modyfikacji itp. Wtedy jest pewność że po aktualizacji, nasze zmiany w plikach reguł nie będą nadpisywane.
Snort jest logicznie podzielony na kilka komponent�w, kt�re wsp�łpracują ze sobą by wykrywać ataki i generować wyniki w odpowiednim formacie. Głï¿½wnymi składnikami systemu są: dekoder pakiet�w (sniffer), preprocesory, silnik detekcji i moduł wyjściowy.
W swej najprostszej formie Snort może działać jako sniffer. Przechwytuje pakiety z warstwy łącza danych za pomocą biblioteki pcap. Rozpoznaje r�żne protokoły modelu OSI - Ethernet, 802.11, Token Ring oraz wiele protokołï¿½w działających w wyższych warstwach jak: IP, TCP, UDP i ICMP. Surowe pakiety z warstwy łącza danych (np. ramki Ethernetowe) po zdekodowaniu wądrują do preprocesor�w (warstwa transportowa), gdzie są testowane i w razie konieczności obrabiane na potrzeby silnika detekcji (warstwa sesji). Tam dokonywana jest analiza pakiet�w pod kątem zbioru zadanych reguł. Następnie po wykryciu pr�by ataku bądź anomalii sieciowych, system przekazuje odpowiednie dane do modułu wyjściowego, kt�ry to decyduje o zapisaniu wyniku wykrycia w logach lub wszczęciu alarmu.
Snort umożliwia dużą swobodę konfiguracji, za pomocą wielu parametr�w, kt�re pozwalają kontrolować trzy podstawowe tryby pracy programu: sniffer, packet logger i network intrusion detection.
Sniffer Mode - wychwytuje wszystkie pakiety w
danym segmencie sieci i przedstawia ich
zawartość na ekranie. Najprostszym sposobem
użycia tego trybu jest uruchomienie programu z
parametrem -v
w wyniku, czego Snort będzie
wyświetlać informacje o nagłï¿½wkach IP,
TCP/UDP/ICMP. Do uzyskania bardziej
szczeg�łowych danych o wychwyconych pakietach,
służą parametry -d
(aby monitorować ładunek
pakiet�w) i -e
(dodatkowe nagłï¿½wki warstwy
łącza danych). Parametry można łączyć razem,
bez znaczenia jest ich kolejność (np.
snort -ved). Aby zakończyć pracę w tym trybie należy
użyć sekwencji klawiszy CTRL+C.
Packet Logger Mode - logowanie pakiet�w
poprzez zapis na dysku. Czynność ta odbywa się
po użyciu opcji -l
, kt�rą wskazujemy katalog,
gdzie Snort będzie zapisywać w odpowiednio
nazwanych podkatalogach i plikach, zawartość
zebranych pakiet�w. Program potrafi także
zapisywać dane w formie binarnej tak jak robi
to znany sniffer
tcpdump™. Służy do tego opcja
-b
, po jej użyciu nie trzeba stosować
dodatkowych kombinacji parametr�w
-ved
,
ponieważ format tcpdump, określa to, co ma być
logowane (np. snort -b -l ./log). Uzyskane w
ten spos�b informacje, można wykorzystać do
p�źniejszej analizy za pomocą program�w
rozpoznających format binarny tcpdump (np.
Ethereal™). Oczywiście można tą samą czynność
wykonać z wykorzystaniem Snorta, używając
opcji -r
, po czym przetworzyć sczytane pakiety
dostępnymi trybami.
Snort czytając swoje dzienniki (tak samo
działając w trybie sniffera) przyjmuje
parametry w formacie BPF (Berkeley Packet
Filter), dzięki kt�rym możemy sprecyzować (na
podstawie nagłï¿½wk�w), jakie konkretnie pakiety
chcemy obserwować (np. określić adres hosta,
protok�ł, port). Jeśli np. interesuje nas
tylko ruch na porcie 80 można uruchomić Snorta
poleceniem: snort -r /var/log/snort/snort.log
port www, jeśli chcemy wyświetlić tylko
odpowiedzi serwera www:
snort -vde src port www.
Aby ignorować cały ruch z sieci np.
192.168.1.0 na port 80:
snort -vde not ( src net 192.168.1 and dst port 80).
Połączenie Snorta z filtrami BPF znacznie
zwiększa wydajność całego systemu, gdyż
filtrowanie BPF odbywa się w warstwie łącza
danych (a więc na poziomie biblioteki pcap).
Określając w ten spos�b, jakie pakiety nas
interesują (lub jakie chcemy zignorować) można
dość dokładnie "zawęzić" obszar poszukiwań.
Filtry BPF można r�wnież zapisać w oddzielnym
pliku i załadować w trakcie uruchamiania
Snorta parametrem -F
:
snort -r snort.log -F plik_z_bdf.
Więcej na temat możliwości
oferowanych przez BPF można poczytać na
stronach podręcznika zar�wno Snorta, jak i
Tcpdump.
Network Intrusion Detection Mode
- sieciowy system wykrywania włamań. Jest najbardziej
skomplikowanym trybem działania programu. Za
pomocą parametru -c
, wskazujemy plik
konfiguracyjny, w kt�rym określane są zasady
badania przechwyconego ruchu sieciowego,
ustawienia preprocesor�w, a także zestaw
sygnatur atak�w. Aby program działał w tle
jako demon, należy użyć opcji
-D
(np.
snort -d -D -c snort.conf).
Reszta operator�w i ich
opisy, jakie można wykorzystać przy starcie
programu, przedstawia parametr
-h
.
Preprocesory zostały wprowadzone do Snorta w wersji 1.5. Pozwalają użytkownikom i programistom w prosty spos�b na rozbudowę funkcjonalności całego systemu poprzez pisanie dodatkowych modułï¿½w (ang. plugins).
Preprocesory analizują pakiety przed wykorzystaniem ich przez silnik detekcji. W ten spos�b zwiększają możliwości całego procesu wykrywania atak�w sieciowych, wzbogacając go o zdolność składania (reasemblacji) pakiet�w, wykonywania specyficznych dla poszczeg�lnych protokołï¿½w operacji (np. konwersja na ASCII znak�w z URI zakodowanych szesnastkowo, usuwanie ciąg�w binarnych z sesji FTP czy Telnet, normalizacja żądań RPC), jak i wykrywania niezgodności z tymi protokołami.
Poniżej pokr�tce opiszemy standardowy zestaw preprocesor�w wchodzących w skład darmowej dystrybucji Snorta w wersji 2.1.3.
Frag2 - defragmentuje i normalizuje dane przychodzące w postaci fragment�w, co utrudnia ukrywanie atak�w prowadzonych za pomocą nieprawidłowo sfragmentowanych pakiet�w IP. W tym celu wykorzystuje ustalony przez użytkownika bufor pamięci, w kt�rej przez określony czas przetrzymuje do badania pakiety z tablicy stan�w połączeń. Im większa liczba sfragmentowanych pakiet�w tym wymagany jest większy bufor. Defragmentacja, układając datagramy IP w jedną całość, ułatwia dalszą analizę danych poprzez pozostałe preprocesory i silnik detekcji. Frag2 umożliwia wychwytywanie znanych atak�w wykorzystujących zniekształcenia fragment�w pakiet�w np. teardrop, fragroute.
Stream4 - rozwija model detekcji oparty na testowaniu pojedynczych pakiet�w umożliwiając śledzenie sesji (stanu połączenia) TCP i składanie (reasemblacji) strumieni TCP, co nie byłoby możliwe w mechanizmie opartym na wyszukiwaniu wzorc�w. Na tym poziomie działa także wykrywanie niekt�rych pr�b skanowania port�w, gdzie wymagane jest notowanie pr�b łączenia się z poszczeg�lnymi usługami w określonych odstępach czasu oraz wykrywanie pr�b oszukania Snorta za pomocą narzędzi takich, jak np. Stick lub Snot, kt�re generują pojedyncze (niewchodzące w skład poprawnych sesji TCP) pakiety mające za zadanie zalać mechanizm detekcji masą fałszywych alarm�w (są to pakiety budowane na losowo wybranych sygnaturach). Snort broni się przed takimi technikami wykorzystując stream4 preprocesor - losowe pakiety są dość łatwo identyfikowane (i ignorowane), ponieważ nie należą do prawidłowej sesji TCP. Stream4 wychwytuje pr�by skanowania technikami: stealth, null, xmas, fin; wykrywanie systemu operacyjnego - fingerprint i inne anomalia związane z protokołem TCP.
Flow i Flow-Portscan - posiada mechanizm śledzenia połączeń, zapisując całość do tablicy stan�w w celu dalszego przetwarzania. Na tej podstawie flow-portscan wykrywa pr�by skanowania w bardziej wyrafinowany spos�b niż preprocesory stream4 i portscan. Celem wykrywania, są skany z jednego hosta do wielu i z jednego hosta na wiele port�w. Flow-portscan prowadzi statystyki na podstawie punktacji r�żnych rodzaj�w połączeń, np. jeśli jakaś usługa jest popularna i na jej port przychodzi dużo zapytań, jednocześnie dostaje najmniej punkt�w w og�lnej skali. Preprocesor posiada bardzo wiele opcji za pomocą, kt�rych reguluje się skale punktacji, rozmiary tablicy wynik�w, tolerancję niepowtarzalności zdarzeń itp.
HTTP Inspect - jest og�lnym dekoderem protokołu HTTP na poziomie warstwy aplikacyjnej. Za pomocą ustalonego bufora wynajduje odpowiednią składnie HTTP i ją normalizuje. HTTP Inspekt działa w obydwu trybach jednocześnie: client requests (pol. zapytania klienta) i server responses (pol. odpowiedzi serwera). Mnoga liczba dostępnych opcji w konfiguracji preprocesora, umożliwia dostosowanie ustawień do konkretnego typu serwera WWW. Głï¿½wnymi zadaniami http_inspect jest przetwarzanie adres�w URI, konwertując na ASCII znaki zakodowane w postaci szesnastkowej. Utrudnia to ukrycie ataku przed modułem wykrywającym sygnatury atak�w przez zakodowanie typowych sekwencji. Dekoduje także znaki zakodowane jako Unicode, oraz wykrywa nielegalne kodowania, wykorzystywane m.in. w ostatnich dziurach MS IIS.
Portscan Detector - wykrywa pr�by skanowania port�w, polegające na przekroczeniu pewnej progowej liczby pr�b połączeń z r�żnymi portami w określonym przedziale czasu. Ze względu na brak możliwości uniknięcia fałszywych alarm�w w typowych przypadkach (np. obciążony serwer DNS), istnieje możliwość wyłączenia alarm�w wzbudzanych przez określone adresy IP używając dodatkowego procesora portscan-ignorehosts. Pozwala także, zapisać wyniki w oddzielnym pliku dziennika.
Telnet Decode - usuwa z sesji TELNET i FTP binarne ciągi mogące utrudnić wyszukiwanie z udziałem sygnatur atak�w.
RPC Decode - normalizuje żądania po protokole RPC, utrudniając ukrywanie podejrzanych pakiet�w za pomocą mniejszych operacji.
Back Orifice detektor - wyszukuje w pakietach UDP pr�by połączeń konia trojańskiego Back Orifice i pr�buje złamać zabezpieczające je słabe kodowanie.
Arpspoof - wykrywa podejrzane pakiety ARP, mogące sygnalizować pr�by ARP spoofingu.
Performance Monitor - udostępnia wszelkiego rodzaju statystyki liczbowe, odnośnie ilości przeanalizowanych pakiet�w, zużycia procesora itp. Całość wyświetlana jest na ekranie konsoli lub zapisywana do pliku, wg ustalonych wcześniej wartości.
Zar�wno preprocesory, jak i mechanizm detekcji mogą zareagować w określony spos�b. Po wychwyceniu pakiet�w, spełniających warunki nadane konfiguracją preprocesor�w lub regułami, podejmowane jest odpowiednie działanie (np. zapisanie pakiet�w bądź alarm).
Głï¿½wny mechanizm systemu detekcji zagrożeń polega na dopasowaniu przetworzonych pakiet�w i ich zrekonstruowanych strumieni z bazą sygnatur. System detekcji por�wnuje cechy pakietu ze zbiorem reguł. Po dopasowaniu, zostaje podjęta odpowiednia akcja. Do por�wnywalnych cech należą atrybuty głï¿½wne - adresy, porty źr�dłowe i docelowe oraz opcje pomocnicze: flagi TCP identyfikujące np. żądania związane z WWW, r�żne typy pakiet�w ICMP, opcje IP czy wreszcie sama treść pakietu. Na razie w głï¿½wnej części reguł możliwe jest śledzenie protokołï¿½w IP, ICMP, TCP i UDP. Autorzy przewidują rozszerzenie Snorta o następne protokoły sieciowe, m.in. IPX, GRE, czy protokoły wymiany informacji między routerami - RIP, OSPF oraz IGRP.
Reguły identyfikowania ataku pozwalają na podjęcie pięciu rodzaj�w akcji: przepuszczenia pakietu (pass), zapisania informacji do dziennika (log), ogłoszenia alarmu (alert), alarmowania i podjęcia do działania innej dynamicznej reguły (activate) i pozostanie w spoczynku do czasu aktywowania przez regułę activate, po czym działanie jako reguła log (dynamic).
Sygnatury Snorta zazwyczaj składają się z dw�ch głï¿½wnych sekcji - nagłï¿½wka i ciała (treści). Nagłï¿½wek określa m.in., jaką akcję należy podjąć po przypasowaniu reguły, informacje o wykorzystanym protokole, adresy bądź porty źr�dłowe i docelowe. Ciało reguły pozwala rozwinąć informacje zawarte w nagłï¿½wku, tu także podaje sią treść wzbudzanych alarm�w i r�żnego rodzaju informacje dodatkowe (np. odniesienia do bazy z opisami danego naruszenia, tzw. referencje - Bugtraq, CERT czy CVE).
Najprostsze sygnatury obejmują wskazanie akcji, protokołu, kierunku, adres�w i port�w będących przedmiotem obserwacji, jak np. poniższa reguła, stanowiąca reakcję na pr�bę skorzystania z usługi pop3 (port 110):
log tcp any any -> 192.168.1.0/24 110
W sygnaturach można umieszczać zmienne zdefiniowane jako
adresy sieci (wg CIDR) lub porty zapisane w pliku
konfiguracyjnym snort.conf
:
log tcp $EXTERNAL_NET -> $HOME_NET 110
W podanych powyżej regułach wykorzystany był jednokierunkowy operator "->". Język sygnatur umożliwia zadeklarowanie reguły, kt�ry dopasuje pakiety poruszające się w obu stronach operatorem dwukierunkowym "<>", np.:
alert tcp any any <> $HOME_NET 23
Do zasadniczej części reguły można dodać ograniczone okrągłymi nawiasami pole opcjonalne (tzw. ciało), zawierające definicję bardziej złożonych i wyrafinowanych działań związanych z przejęciem danego pakietu. Użytkownik może także sformułować własny komunikat, np.:
log tcp $EXTERNAL_NET -> $HOME_NET 110 \ ("msg: Proba polaczenia z pop3";)
Podjęte działania nie muszą być ograniczone do pojedynczej czynności. Średnik separuje deklaracje poszczeg�lnych działań, jak w poniższym przykładzie, w kt�rym opcją content testowana jest treść przesyłanego strumienia TCP, a w razie odnotowania podejrzanego ciągu znak�w generowany jest odpowiedni komunikat:
alert tcp any any -> 192.168.1.0/24 80 (content: "/cgi-bin/phf"; \ msg: "PHF probe!";)
Opcji content
można użyć nawet kilka razy w jednej regule.
Pozwala to na wyszukiwanie wielu r�żnych ciąg�w znak�w w
obrębie przesyłanych treści.
Warto nadmienić, iż do przeszukania treści pakiet�w i reasemblowanych strumieni używany jest obecnie najbardziej efektywny algorytm - Boyera-Moore'a, kt�rego wydajność rośnie wraz z długością poszukiwanych ciąg�w. Możliwość rekonstrukcji całych strumieni transmisji TCP, wglądu w warstwę aplikacyjną i efektywne wyszukiwanie treści pozwala na walkę przy użyciu Snorta r�wnież z zainfekowanymi załącznikami elektronicznych list�w. Opr�cz przeszukiwania treści pakiet�w możemy badać pod r�żnymi kątami ich nagłï¿½wki, m.in. pola i kody ICMP, pole TTL, rozmiary fragmentacji czy numery sekwencji.
Bardzo silną konstrukcją w regułach Snorta jest możliwość aktywowania kolejnych reguł po pierwszym dopasowaniu. Konstrukcja ta nosi nazwę activate/dynamic rules i wygląda w następujący spos�b:
activate tcp any any -> $HOME_NET 143 (flags: PA; content: \ "|E8C0FFFFFF|bin|;activates: 1; msg: "IMAP buffer overflow!";) dynamic tcp any any -> $HOME_NET 143 (activated_by: 1; count: 50;)
Opcje activates
i
activated_by
wiążą reguły
activate
i
dynamic
. W powyższym przykładzie wykrycie ataku typu buffer
overflow na serwer IMAP powoduje uruchomienie kolejnej,
dynamicznej reguły, kt�ra zbiera treść następnych 50 pakiet�w
(opcja count) w celu p�źniejszej analizy. Druga opcja w reguły
dynamicznej jest obligatoryjna - reguła zawierająca wyłącznie
opcję dowiązania do innej, macierzystej konstrukcji jest
bezużyteczna.
Następne godne uwagi parametry, to
resp
i react
wspierają
mechanizm elastycznego reagowania na atak. Opcja
resp
może
doprowadzić do zerwania połączenia, np. poprzez wysłanie do
atakującego komunikatu ICMP o niedostępności trasy do
zaatakowanego komputera, natomiast react
służy do blokowania
dostępu do usług związanych z WWW.
Nessus - sieciowy tester bezpieczeństwa, przydatny do określania skuteczności skonfigurowanego przez nas Snorta.
SnortALog - skrypt Perlowy pozwalający na generowanie r�żnego rodzaju raport�w, graf�w i statystyk. Korzystając z log�w Snorta, format wygenerowanych raport�w może stanowić plik tekstowy, HTML, a nawet PDF.
Snort Inline - poprawka dla Snorta, umożliwiająca wsp�łprace z regułami firewalla IPtables, stosowanego w systemach opartych na jądrze Linux. Specjalnie sformułowane sygnatury Snorta, reagują na atak i blokują bądź przekierowują za pomocą ściany ogniowej drogę pakiet�w pochodzących od intruza.
SnortSam - jest to zestaw plugin�w do Snorta pełniących podobną funkcje jak Snort Inline, ale wspomagająca większą liczbę r�żnego rodzaju zap�r ogniowych (m.in. Checkpoint Firewall-1, Cisco PIX, Cisco Routers z ACL, Netscreen, IP Filter dla *BSD, Linux IPchains, Linux IPtables, WatchGuard Firebox).
FLoP - projekt ma na celu, przyspieszenie logowania w procesie wykrywania włamań. Do tego wykorzystuje odpowiednie bufory i możliwość szybkiego zapisu przez gniazdo unixowe do baz danych MySQL i PostgreSQL. Bardzo przydatne narzędzie przy pracy w sieciach o dużej przepustowości.
W PLD™ domyślnie instalowanym systemem magazynowania zdarzeń systemowych (log�w) jest syslog-ng™ (syslog - new generation), zajął on miejsce klasycznego tandemu syslogd™ i kalogd™. Jest to program o bogatych opcjach konfiguracji, zapewniający większą pewność działania, a co za tym idzie większe bezpieczeństwo log�w.
Większe bezpieczeństwo zapewnia możliwość użycia protokołu TCP w komunikacji z tzw. loghostem, aby jednak korzystać z dobrodziejstw tego protokołu na obu maszynach musi być użyty demon "nowej generacji". Możliwa jest także komunikacja z klasycznym syslogiem, w tym wypadku musimy użyć protokołu UDP i portu 514 (wartość domyślna dla syslog-ng™).
Syslog-ng jest dostarczany z rozbudowanym plikiem konfiguracji, znajdziemy w nim wiele gotowych do wykorzystania przykład�w.
Konfiguracja demona polega na zdefiniowaniu pewnych obiekt�w,
a na następnie połączenie ich ze sobą w reguły. Mamy trzy
rodzaje obiekt�w: źr�dła,
filtry i cele.
Źr�dła wskazują miejsca pochodzenia komunikat�w, filtry pozwalają
selekcjonować dane, cele zaś wskazują spos�b i miejsce magazynowania
log�w (zwyczajowo jako pliki tekstowe w katalogu
/var/log
). Całą konfigurację umieszczamy
w jednym pliku:
/etc/syslog-ng/syslog-ng.conf
.
Źr�dła - definiujemy je następująco:
source $nazwa { $źr�dło($opcje); };
najpopularniejsze źr�dła komunikat�w to:
internal - komunikaty demona syslog-ng
tcp - komunikaty od innych komputer�w w sieci (TCP)
udp - komunikaty od innych komputer�w w sieci (UDP)
pipe - nazwane potoki
unix-stream - gniazda uniksowe
przykłady:
source src { internal(); }; source udp { udp(); }; source tcp { tcp(ip(192.168.1.5) port(1999) max-connections(20)); };
Pierwszy z przykład�w jest źr�dłem komunikat�w syslog-a. Drugi tworzy źr�dło komunikat�w wysyłanych z dowolnej maszyny w sieci - nasłuch na domyślnym porcie (514 UDP). Trzeci oczekuje komunikat�w od komputera 192.168.1.5 na porcie 1999 z ograniczeniem do 20 połączeń.
Filtry:
filter $nazwa { $rodzaj($wartość); };
rodzaje:
facility - pochodzenie zdarzenia: cron, daemon, mail, ... - szczeg�ły w dodatku
level - priorytet: emerg, alert, crit, ... - szczeg�ły w dodatku
host - filtrowane po nazwie hosta z użyciem wyrażeń regularnych
program - filtrowane po nazwie programu z użyciem wyrażeń regularnych
przykłady:
filter f_emergency { level(emerg); }; filter f_daemon { facility(daemon); }; filter f_foo { host("foo"); }; filter f_su_sudo { program("^su|sudo$"); };
Pierwszy przykładowy filtr przepuszcza jedynie powiadomienia o najpoważniejszych błędach. Drugi zdarzenia pochodzące od demon�w, trzeci wybiera zdarzenia pochodzące od komputera mającego w nazwie ciąg "foo". Ostatni odfiltrowuje zdarzenia wywoływane w skutek działania program�w su i sudo - użycie wyrażeń regularnych.
W filtrach możemy używać operator�w logicznych (and, or, not):
filter f_syslog { not facility(authpriv, cron, lpr, mail, news); }; filter f_ppp { facility(daemon) and program(pppd) or program(chat); };
Cele - og�lna definicja:
destination $nazwa { $cel($miejsce); };
najpopularniejsze cele:
file - plik tekstowy / urządzenie znakowe (/dev/)
usertty - ekran terminala wskazanego użytkownika
tcp - komunikaty do loghosta (TCP)
udp - komunikaty do loghosta (UDP)
przykłady:
destination kernel { file("/var/log/kernel"); }; destination console_all { file("/dev/tty12"); }; destination root { usertty("root"); }; destination loghost { udp("10.0.0.1"); };
W pierwszym przykładnie komunikaty są kierowane
do pliku /var/log/kernel
, w
drugim będą wyświetlane na dwunastym
wirtualnym terminalu. Trzeci cel spowoduje
wyświetlanie komunikatu na ekranie terminala
użytkownika root. Czwarty obiekt pozwoli na
wysyłanie komunikat�w do loghosta o adresie
IP 10.0.0.1 (uwaga na zgodność protokołï¿½w
TCP/UDP u nadawcy i odbiorcy).
Regułki - budujemy je na samym końcu, kiedy mamy już zdefiniowane źr�dła, filtry i cele:
log { source($źr�dło); destination($cel); };
log { source($źr�dło); filter($filtr1); filter($filtr2); destination($cel); };
np.:
log { source(src); destination(console_all); }; log { source(src); filter(f_emergency); destination(loghost); };
Aby zmiany weszły w życie oraz utworzone zostały nowe pliki dziennik�w, należy ponownie uruchomić demona:
# service syslog-ng reload
Najlepszą metodą sprawdzenia konfiguracji sysloga jest wysłanie własnych komunik�w systemowych. Posłużymy się w tym celu programem logger, pozwalającym wysyłać dowolne komunikaty z wiersza poleceń. Dla naszych potrzeb wywołujemy program następująco:
logger -p {$źr�dło}.{$poziom} {$komunikat} np.:
# logger -p mail.warning Test ostrzeżenia
Podobnie jak poprzednik nie kontroluje objętości log�w, tak więc nie można zapomnieć o programie rotującym np. logrotate™.
Domyślnie demon nie nasłuchuje komunikat�w z sieci, definicja źr�dła za to odpowiedzialna jest wykomentowana.
W ramach ochrony przed atakami DoS syslog-ng obsługuje domyślnie do 10 połączeń sieciowych, aby to zmienić należy użyć parametru "max-connections" w opcjach źr�dła (patrz przykłady).
System operacyjny posiada wewnętrzny, niezależny od demona log�w, schemat klasyfikowania zdarzeń, dzielą się one na dwie grupy:
Pochodzenie komunikat�w (facility):
Tabela 16.2.
Nazwa | Opis |
---|---|
user | r�żnorodne programy zwykłych użytkownik�w |
komunikaty podsystemu poczty elektronicznej | |
daemon | r�żne demony systemowe |
auth, authpriv | bezpieczeństwo (autoryzacja użytkownik�w) |
syslog | syslog |
lpr | drukarka |
news | system grup dyskusyjnych (Usenet) |
uucp | podsystem UUCP |
cron | demony zegarowe: AT, CRON |
ftp | serwer FTP |
local0 - local7 | uniwersalne źr�dła lokalne, możliwe do dowolnego zastosowania przez administratora |
Priorytety (level):
Tabela 16.3.
Nazwa | Opis |
---|---|
emerg | system już nie nadaje się do użytku |
alert | poważna awaria - należy podjąć natychmiastową akcję |
crit | zdarzenie krytyczne |
err | błędy |
warning | ostrzeżenia |
notice | ważne zdarzenia |
info | informacje |
debug | dodatkowe informacje - przydatne przy odpluskwianiu |
Spis treści
Rozdział opisuje konfigurację środowiska graficznego.
W rozdziale tym postaramy pom�c w stworzeniu systemu "biurkowego", czyli systemu z X-Window. Będziemy tu opisywać implementację X.Org™, więcej na jej temat można znaleźć na witrynie projektu http://www.x.org/wiki/. Sam proces tworzenia desktopu możemy podzielić na dwa etapy:
Instalacja i konfiguracja serwera protokołu X11
Instalacja i konfiguracja menedżera okienek dla X.org (przedstawimy tutaj KDE™ i GNOME™)
Od razu należy przestrzec, że środowisko graficzne jest obsługiwane przez skończoną liczbę urządzeń (dotyczy to zwłaszcza kart graficznych) i może się niestety zdarzyć, że posiadamy kartę graficzną, kt�ra nie jest obsługiwana. Dotyczy to głï¿½wnie najnowszego sprzętu, starsze modele mają dosyć dobre wsparcie.
W przypadku kart firm firm ATI i NVIDIA, mamy dostępne zar�wno sterowniki będące częścią X.Org jak i sterowniki zamknięte, tworzone przez samych producent�w. Nielicznymi zaletami tych drugich jest bardzo dobra wydajność i pełne wsparcie dla akceleracji grafiki tr�jwymiarowej.
Na początku, korzystając z programu poldek™ instalujemy konieczne pakiety. W przypadku Ac™ będą to:
$ poldek -i X11 X11-modules X11-fonts-100dpi-ISO8859-2 X11-setup \ X11-imake X11-libs X11-Xserver X11-OpenGL-libs X11-fonts \ X11-common X11-fonts-base X11-xauth X11-fonts \ X11-fonts-75dpi-ISO8859-2 X11-OpenGL-core X11-fonts-100dpi \ X11-fonts-ISO8859-2 X11-sessreg
W Th™ zmieniły się nazwy pakiet�w i są o wiele bardziej rozdrobnione, zaczynamy od instalacji rdzenia X-Serwera i podstawowych sterownik�w:
$ poldek -i xorg-xserver-server \ xorg-driver-input-keyboard \ xorg-driver-input-mouse
Teraz powinniśmy zainstalować sterownik karty graficznej, możemy
zainstalować wszystkie dostępne (jeśli nie mamy pewności) lub ten właściwy.
W ustaleniu, kt�ry sterownik będzie najbardziej odpowiedni pomoże nam zestawienie
w dokumentacji X.Org.
Nazwy pakiet�w ze sterownikami zaczynają sie od X11-driver-
(w Ac™) i od xorg-driver-video-
(W Th™). W przypadku kart firmy
nVidia instalujemy otwarty sterownik:
$ poldek -i xorg-driver-video-nv
Jeśli mamy kartę ATI to wybieramy pakiet:
$ poldek -i xorg-driver-video-ati
Sterownikami z pełną obsługą 3D będziemy mogli się zająć p�źniej. Jeśli ciągle nie wiemy jaki wybrać, to możemy zainstalować uniwersalny sterownik dla kart zgodnych z VESA:
$ poldek -i xorg-driver-video-vesa
W Ac ten sterownik znajduje się w pakiecie X11-modules
Użytkownicy myszek PS/2 lub USB, kt�rzy nie korzystają z dobrodziejstw udeva™ muszą załadować opr�cz modułu huba USB moduły:
# modprobe psmouse # modprobe usbhid
Aby moduły ładowały się za każdym razem, gdy
uruchamiamy system, należy dodać ich nazwy do
pliku /etc/modules
. Więcej o zarządzaniu modułami
w „Statyczne zarządzanie modułami”.
X.Org™ nie wymaga pliku konfiguracji do podstawowego działania, po uruchomieniu automatycznie pr�buje wykryć dołączony sprzęt. X-Serwer uruchamiamy następująco:
# X
Jeśli naszym oczom ukaże się drobna, szara kratka z kursorem myszy w kształcie krzyżyka (kt�rym możemy poruszać), to oznacza, że aplikacja działa: wykryła sprzęt i załadowała prawidłowe sterowniki. Oznacza to też, że zainstalowaliśmy wszystkie potrzebne komponenty do działania serwera. Aby wyjść z tego dosyć surowego środowiska korzystamy ze skr�tu Ctrl+Alt+Backspace
Teraz możemy przejść do konfiguracji X-Servera lub do uruchomienia środowiska graficznego. Warto przeprowadzić przynajmniej podstawową konfigurację, by uzyskać większą ergonomię pracy, ustawić układ klawiatury dla danego języka, czy obsłużyć dodatkowe możliwości sprzętu.
Generujemy wstępną konfigurację serwera X11:
# X -configure
W wyniku działania w/w polecenia w katalogu domowym
użytkownika (w tym wypadku /root/
)
powstanie plik xorg.conf.new
.
X-Server stara się rozpoznać używany przez nas sprzęt
i ustawia właściwe parametry w pliku konfiguracji.
Przenosimy plik we właściwe miejsce:
# mv ~/xorg.conf.new /etc/X11/xorg.conf
Teraz możemy spr�bować, czy serwer nam się uruchamia:
# X
dokładnie jak to wcześniej opisaliśmy.
W ten oto spos�b mamy wstępnie skonfigurowany X-Server i możemy rozpocząć pracę w środowisku graficznym. Wskaz�wki bardziej wyrafinowanej konfiguracji odnajdziemy w „Zaawansowane”. Część z nich będziemy mogli dokonać za pomocą poniżej opisanych program�w (np. xorgcfg -textmode), bardziej zaawansowane opcje ustawimy wyłącznie edytując plik konfiguracji.
Z aplikacją dostarczane są dodatkowo dwa programy do konfiguracji, obydwie można użyć do generowania pliku konfiguracji zamiast operacji X -configure, pozwalają na precyzyjnie ustawianie parametr�w X-Servera X -configure, jednak wymagają też więcej wiedzy i pracy.
xorgcfg
-
program kt�ry może działać w dw�ch trybach: graficznym i
tekstowym (z użyciem parametru -textmode
). Program
ma tą zaletę, że może modyfikować istniejący plik konfiguracji.
O ile wygodę trybu graficznego można uznać za dyskusyjną, o tyle
tryb tekstowy nie powinien sprawiać nikomu problem�w.
xorgconfig
-
jest to konsolowe narzędzie, kt�re prowadzi krok po
kroku przez kolejne etapy konfiguracji. W zasadzie to przydaje się do
generowania pliku konfiguracji po raz pierwszy (zamiast
X -configure), jeśli chce się
dokonać jakiejkolwiek zmiany trzeba przechodzić przez wszystkie
kroki na nowo. Program ten dodatkowo
dodaje do pliku liczne komentarze, co nie wszystkim odpowiada.
Jeżeli pojawi się jakiś problem musimy przeanalizować
komunikaty wypisywane na ekran i do pliku
/var/log/Xorg.0.log
.
Błędy są oznaczane dwoma literkami EE
np.:
(EE) Failed to load module "ati" (module does not exist, 0)
Powyższy komunikat informuje o brakującym sterowniku do karty graficznej, najprawdopodobniej nie jest zainstalowany konieczny pakiet.
Do wyboru mamy dwa potężne, zintegrowane środowiska: KDE™ i Gnome™, nieco mniejsze XFCE4™, czy całkiem proste np. : blackbox™, fluxbox™ będące jedynie zarządcami okien i pulpitu. środowiska opisaliśmy w dalszych rozdziałach. Opr�cz środowiska musimy wybrać spos�b jego uruchamiania. Możemy uruchamiać je z wiersza poleceń za pomocą skryptu startx lub demon�w GDM™/KDM™. Zagadnienia te szczeg�łowo om�wiliśmy w „Uruchamianie środowiska graficznego”.
W tym miejscu zajmiemy się bardziej zaawansowaną konfiguracją
X-Servera. Zakładam, że istnieje wstępnie
skonfigurowany plik /etc/X11/xorg.conf
,
za pomocą polecenia X -configure.
Wiele opisanych tu czynności konfiguracyjnych dla konkretnych podsystem�w,
wykonujemy za pomocą programu xorgcfg, uruchamiamy go
w trybie tekstowym :
# xorgcfg -textmode
Po uruchomieniu zobaczymy listę
dostępnych kategorii, odpowiadają one dalszym opisom. Przykładowo, aby
skonfigurować myszkę, wybieramy z listy opcję: Configure mouse
a następnie Edit Mouse0
itd. Po ustawieniu wszystkich
interesujących nas opcji, wybieramy Write xorg.conf and quit
Bardziej zaawansowane będą wymagały ingerencji za pomocą
edytora tekstu, przypominam, że "obrabiamy" plik
# /etc/X11/xorg.conf
.
Zakładam, że w programie wybraliśmy sekcję konfiguracji myszki.
Dla wsp�łczesnych myszek, w konfiguracji protokołu wybieramy
Auto
, dla myszek szeregowych wybierzemy
Microsoft
. Następnie konfigurator spyta o to,
czy dla myszek dwuprzyciskowych włączyć emulację trzeciego klawisza,
w przypadku myszek o większej ilości przycisk�w odpowiadamy
negatywnie. Jako urządzenie
wybieramy /dev/input/mice
.
Po zapisaniu wybranej konfiguracji, otrzymamy w sekcji
ustawień myszy w pliku /etc/X11/xorg.conf
fragment o zbliżonej konstrukcji:
Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "Auto" Option "Device" "/dev/input/mice" Option "ZAxisMapping" "4 5 6 7" EndSection
Jeśli posiadamy myszkę z wieloma klawiszami i rolkami,
a standardowy sterownik nie radzi sobie z obsługą wszystkich zdarzeń,
to możemy wybrać bardziej nowoczesny i elegancki spos�b na uruchomienie
naszego sprzętu - evdev. Przykładowa instalacja
i konfiguracja zostanie przedstawiona dla popularnej myszki Logitech MX500.
Pierwszym krokiem jest załadowanie modułu jądra modprobe evdev
oraz instalacja pakietu xorg-driver-input-evdev
(X11-driver-evdev dla Ac).
Następnie odszukujemy w /proc/bus/input/devices
numer
urządzenia eventX naszej myszki i wpisujemy do konfiga
X.Org™ poniższą sekcję:
Section "InputDevice" Identifier "Mouse1" Driver "evdev" Option "Device" "/dev/input/event1" Option "Buttons" "10" EndSection
Nowo wygenerowany plik konfiguracji nie zawiera opcji lokalnych,
aby je ustawić, z menu programu wybieramy Configure keyboard
,
Jako model (Keyboard model
)
wybieramy np. Generic 104-key PC
,
a w Keyboard layout
ustawiamy Poland
.
Powyższa operacja wygeneruje następującą konfigurację klawiatury:
Section "InputDevice" Identifier "Keyboard0" Driver "kbd" Option "XkbModel" "pc104" Option "XkbLayout" "pl" EndSection
W przypadku starszych wersji X.Org (w Ac™)
X -configure ustawiany jest zły sterownik klawiatury,
należy go zmienić na kbd
, jak na powyższym fragmencie.
Możemy to wykonać za pomocą dowolnego edytora tekstu.
Jeśli posiadamy klawiaturę multimedialną i chcemy wykorzystywać jej dodatkowe klawisze, to musimy wybrać odpowiedni model klawiatury. Nasz wyb�r będzie dotyczył wartości parametru XkbModel, następnie musimy sprawdzić za pomocą programu xev czy wszystkie zdarzenia z klawiszy multimedialnych są prawidłowo obsługiwane przez X-serwer.
Właściciele monitor�w LCD/Plasma są na uprzywilejowanej
pozycji, jeśli sterownik karty graficznej potrafi "porozumieć się"
z monitorem (za pomocą DDC), to nie są wymagane żadne czynności konfiguracyjne.
Aby detekcja następowała automatycznie musimy w pliku konfiguracji
postawić znak komentarza ("#") przed opcjami HorizSync
,
VertRefresh
.
W pozostałych przypadkach musimy określić
parametry monitora. Wybierając opcje programu Configure monitor
,
będziemy będziemy mogli wybrać jakiś monitor z listy lub podać
parametru własnego urządzenia:
Enter your own horizontal sync range
. Tu podajemy wartości
HorizSync
(w kHz) i VertRefresh
w (Hz) zgodne ze specyfikacją naszego urządzenia. Po zapisaniu pliku
konfiguracji otrzymamy:
Section "Monitor" Identifier "Monitor0" HorizSync 31.5 - 96.0 VertRefresh 50 - 100 Option "DPMS" EndSection
O ile HorizSync jest opcją
ściśle zależną od możliwości monitora i pod żadnym pozorem
nie powinniśmy jej dowolnie zmieniać, o tyle
VertRefresh daje więcej swobody.
Za jej pomocą ustawiamy odświeżanie obrazu, Nie możemy
oczywiście przekroczyć parametr�w monitora, ale możemy
ustawić minimalne odświeżanie, np. 85 - 85
wymusi częstotliwość 85Hz. (oczywiście pod warunkiem,
że nasz monitor, przy danej rozdzielczości pozwala na
wyświetlanie z taką wartością).
Wstępnie plik konfiguracji nie zawiera żadnych definicji rozdzielczości i będzie ona ustalana automatycznie, co jest wskazane przy monitorach LCD/Plasma. W przypadku monitor�w CRT, zapewne będziemy chcieli użyć najbardziej ergonomicznej. Mamy tu dwa wyjścia, możemy nic nie ustawiać w X.Org, ale za to ustawić ją w aplikacjach konfiguracyjnych środowisk Gnome/KDE, lub ustawić ją na stałe w konfiguracji X-serwera. Możliwości ustawień konfigurator�w w środowiskach graficznych są dosyć skromne, dlatego niekt�rzy pokuszą się zapewne o ustawienie odpowiednich wartości na stałe.
Po wybraniu Configure screen
w programie, zostaniemy zapytani o
ilość dostępnych kolor�w, dla wsp�łczesnego sprzętu bez
zastanowienia możemy wybrać 24bity na piksel a następnie wybieramy
listę rozdzielczości, kt�re mają być dostępne. W większości wypadk�w
wystarczy nam jedna rozdzielczość. Oczywiście
musi być obsługiwana przez monitor. Zapisana konfiguracja może
wyglądać następująco:
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection EndSection
X.Org pozwala na wskazanie DPI (dots per inch), w celu lepszego dopasowania
wielkości wyświetlanych czcionek ekranowych.
W przypadku wsp�łczesnych monitor�w, za pomocą DDC odczytywany jest
rozmiar obszaru wyświetlania, by automatycznie określić DPI. Dla monitor�w,
kt�re nie posiadają takiej możliwości lub podają ją nieprawidłowo, będziemy
mogli sami ten parametr ustawić.
Wartość DPI można też ustawić bezpośrednio w konfiguracji środowiska (np. w Gnome)
my jednak pokażemy jak zrobić do w X-serwerze. W sekcji Monitor
pliku konfiguracji należy dodać opcję:
DisplaySize $x $y
gdzie parametry $x i $y są wymiarami w milimetrach, odczytanymi z dokumentacji urządzenia lub po prostu zmierzonymi linijką. Sekcja konfiguracji monitora może wyglądać następująco:
Section "Monitor" Identifier "Monitor0" HorizSync 31.5 - 96.0 VertRefresh 50 - 100 DisplaySize 269 201 EndSection
Zaczynamy od instalacji serwera XFS(Th):
xorg-app-xfs
, w przypadku Ac jest to pakiet
X11-xfs
.
Dla wygody założymy także, że będziemy korzystać z
serwera czcionek X11-xfs™,
kt�ry uruchamiamy poleceniem /etc/init.d/xfs start
.
Dlatego też sekcja dotycząca czcionek w pliku
xorg.conf.new
powinna wyglądać
podobnie do podanego niżej przykładu:
Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" # FontPath "/usr/X11R6/lib/X11/fonts/local/" # FontPath "/usr/X11R6/lib/X11/fonts/misc/" # FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" # FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" # FontPath "/usr/X11R6/lib/X11/fonts/Type1/" # FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" # FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" # FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" FontPath "unix/:7100" # ModulePath "/usr/X11R6/lib/modules" EndSection
Czyli komentujemy wszystkie wywołania bezpośrednie do czcionek i przekazujemy obsługę zarządzania czcionkami serwerowi xfs™.
GNOME™ jest rozbudowanym środowiskiem, dodatkowo filozofia mikropakiet�w w PLD nie ułatwia jego instalacji początkującym. Aby temu zaradzić stworzone zostały metapakiety, kt�re oszczędzą nam sporej ilości pracy, oto ich zestawienie:
metapackage-gnome™ - głï¿½wna część środowiska
metapackage-gnome-extras™ - dodatki
metapackage-gnome-extras-accessibility™ - narzędzie ułatwień dostępu
metapackage-gnome-office™ - pakiet aplikacji biurowych
Na początku powinien nam wystarczyć podstawowy metapakiet:
poldek> install metapackage-gnome
Teraz wystarczy uzbroić się w cierpliwość, po instalacji wymagań metapakietu, możemy już samodzielnie doinstalować te kilka pakiet�w, albo od razu uruchomić środowisko. Filozofię metapakiet�w om�wiliśmy w „Cechy pakiet�w w PLD”.
Jeśli jednak jesteśmy zwolennikami instalacji tylko tego co jest potrzebne, musimy instalować każdy pakiet z osobna:
poldek> install gnome-desktop gnome-session nautilus xscreensaver-gnome2 gnome-themes \ gnome-icon-theme gnome-panel gnome-splash-gnome metacity \ gnome-applets
Lista komponent�w i aplikacji dla GNOME jest w PLD imponująca, aby łatwiej było się odnaleźć w tym gąszczu, zachęcamy do zapoznania się z zestawieniem aplikacji w dalszej części rozdziału.
Aby GNOME i GDM obsługiwały język inny niż angielski, należy ustawić tzw. Locale, co zostało opisane
w „Internacjonalizacja”, a następnie wybrać preferowany język:
Language
z menu GDM-a.
Zakładam, że już została skonfigurowana już ALSA, zgodnie ze wskaz�wkami opisanymi w „ALSA - Dźwięk w Linuksie”. Od GNOME 2.26 dźwięk jest obsługiwany przez aplikację pulseaudio, zapewniającą programowe miksowanie dźwięku z wielu źr�deł, czy też przesyłanie strumienia za pośrednictwem sieci. Instalujemy:
$ poldek -i pulseaudio pulseaudio-gconf pulseaudio-alsa gstreamer gstreamer-audiosink-esd
instalujemy pakiety z pluginami dekodującymi formaty wav,au oraz mp3:
$ poldek -i gstreamer-audio-formats gstreamer-mad
instalujemy gnome-media, aplet do sterowania głośnością, odtwarzacz Totem™ i opcjonalnie pakiet dźwięk�w zdarzeń:
$ poldek -i gnome-media gnome-applets-mixer totem gnome-audio
Zanim uruchomimy środowisko, musimy się upewnić, czy nazwa hosta (opcja
HOSTNAME
z pliku
/etc/sysconfig/network
) jest przypisana do
adresu IP. Aby to ustawić, należy dodać odpowiedni wpis do pliku
/etc/hosts
, zgodnie ze wskaz�wkami zawartymi w
„Podstawowa konfiguracja sieci”, np.:
127.0.0.1 pldmachine
Szczeg�ły uruchamiania środowiska opisaliśmy w „Uruchamianie środowiska graficznego”.
GST™ to zestaw wygodnych narzędzi administracyjnych, obsługujących PolicyKit. Pozwala na zarządzanie m.in. usługami, użytkownikami oraz siecią. Instalacja:
$ poldek -i gnome-system-tools system-tools-backends
Uruchamiamy demona system-tools-backends:
# /etc/init.d/system-tools-backends start
Dodajemy użytkownika do grupy adm:
# groupmod -A jkowalski adm
Aplikacje administracyjne będziemy mogli używać po ponownym zalogowaniu.
O wygodzie pracy w środowisku czasami decydują drobiazgi, oto lista takich niewielkich narzędzi, przydatnych w codziennej pracy:
gnome-volume-manager™ - narzędzie do zarządzania woluminami wymiennymi: montowaniem nośnikow, odtwarzaniem muzyki i innymi
gnome-utils-screenshot™ - program do szybkiego wykonywania zrzut�w ekranu.
nautilus-cd-burner™ - rozszerzenie do nautilusa służące do nagrywania płyt CD/DVD
gnome-system-monitor™ - monitor zasob�w i proces�w
gnome-utils-search-tool™ - wyszukiwarka plik�w
Opr�cz tego mamy dostęp do wielu applet�w, temat�w graficznych i innych.
Zaletą złożonych środowisk takich jak GNOME czy KDE jest duża liczba program�w, kt�re dobrze integrują się ze środowiskiem, poniżej została zamieszczona lista użytecznych program�w.
gnome-terminal™ - rozbudowany emulator terminala z obsługą zakładek
gcalctool™ - wielofunkcyjny kalkulator
totem™ - odtwarzacz audio i video.
Exaile™, Quod Libet™ i Rhythmbox™ - wygodne odtwarzacze audio z dobrą obsługą dużych bibliotek muzyki, wszystkie obsługują gstreamera.
eog™ - Eye of GNOME - narzędzie do przeglądania obrazk�w
evince™ - program służący do przeglądania dokument�w w formatach pdf, postscript i wielu innych.
gedit2™ - edytor tekstu z obsługą kolorowania składni język�w programowania i wtyczek.
epiphany™ - przeglądarka WWW z silnikiem renderującym Gecko
evolution™ - rozbudowany klient poczty i narzędzie do planowania zadań
gajim™ - klient Jabbera
file-roller™ - zarządca archiw�w - jest graficznym interfejsem dla własciwych narzędzi archiwizacji danych
Brasero™ (dawniej Bonfire) - komfortowe narzędzie do nagrywania płyt CD/DVD.
Więcej na stronie www.gnome.org/projects/, warto też odwiedzić stronę www.gnomefiles.org, będącej bogatym zestawieniem aplikacji bardziej lub mniej związanych ze środowiskiem.
GNOME jest dostarczane z pokaźną dokumentacją - niestety brak jest polskiego tłumaczenia. Jest dostępna dla aktywnego okna po wciśnięciu przycisku F1 lub po wywołaniu programu yelp™ - przeglądarki dokumentacji. Musimy tylko doinstalować konieczne pakiety:
$ poldek -i gnome-user-docs yelp
Jeśli natkniemy się na jakieś problemy z działaniem aplikacji, na początek powinniśmy zajrzeć do specjalnego dziennika błęd�w:
$ cat ~/.xsession-errors
Możemy też spr�bować uruchomić daną aplikację w wirtualnym terminalu (np.
w programie gnome-terminal
), w celu odczytania
komunikat�w programu.
Poniżej przedstawiamy listę zalecanych pakiet�w dla KDE™:
kdeaddons-ark kdeadmin-kpackage kdebase-desktop kdebase-kate \ kdebase-konsole kdebase-kwrite kdegraphics-kfile \ kdegraphics-kghostview kdegraphics-kpdf kdemultimedia-akode \ kdemultimedia-juk kdemultimedia-kaboodle kdemultimedia-kfile \ kdemultimedia-kmid kdemultimedia-kmix kdemultimedia-kscd \ kdemultimedia-mpeglib kdenetwork-kget kdesdk-kfile \ kdeutils-ark kdeutils-kcalc kdeutils-kedit kdeutils-kfloppy \ kdeutils-kwalletmanager konqueror
Aby m�c uruchomić KDE™ dla danego użytkownika, w jego katalogu domowym wykonujemy polecenie:
$ echo "kde" >.desktop
Od tej chwili, domyślnym środowiskiem graficznym dla tego użytkownika jest KDE™, kt�re możemy uruchomić za pomocą polecenia startx.
Blackbox™ jest lekkim menedżerem okien dla XFree86™. Jest napisany w C++, a jego projekt zakładał wydajność, niskie użycie pamięci oraz brak zależności od zewnętrznych bibliotek. Blackbox™ zabiera bardzo niewiele miejsca na ekranie na dekoracje okien. Mimo swojego minimalizmu, jest bardzo wygodny i funkcjonalny. Zawiera wszystko, czego oczekuje się od menedżera okien - obsługę wirtualnych pulpit�w, okna typu sticky, zwijanie okien, okna pozbawione dekoracji. Posiada też pasek dokowania, zwany slitem, na kt�rym mogą umieszczać się aplety w stylu NEXTstep™ (np. Window Maker, AfterStep) oraz okna w trybie withdrawn (np. gkrellm). Te cechy sprawiły, że Blackbox™ stał się całkiem popularny wśr�d os�b nie lubiących przeładowania towarzyszącego środowiskom KDE™ i GNOME™
Dzięki swoim zaletom Blackbox stał się na tyle znany, że wypączkowało z niego kilka odmian z nowymi cechami. Należą do nich Fluxbox™, Openbox™ i Kahakai™. Blackbox™ i jego pochodne są doskonałym wyborem, jeśli pożądane jest oszczędzanie pamięci i niskie wykorzystanie procesora. Są też dobre dla tych, kt�rzy wolą elegancję ponad nadmiar element�w, jaki występuje w popularnych środowiskach. My w tym opisie zajmiemy się instalacją Blackbox™.
Czas zainstalować potrzebne nam pakiety.
# poldek -i blackbox vfmg xinitrc
Instalacja zajmuje bardzo mało czasu, ponieważ jak już wspomniane zostało wcześniej Blackbox™ jest bardzo mało wymagający jeżeli chodzi o zasoby.
Teraz aby Blackbox™ był naszym domyślnym
menadżerem okien należy ustawić go w pliku /etc/sysconfig/desktop
# cat /etc/sysconfig/desktop # PREFERRED can be GNOME, KDE or empty # when left empty $DEFAULTWM will be started PREFERRED=blackbox DEFAULTWM= # Default window manager to use. Should be basename of file from # /etc/sysconfig/wmstyle/ WMSTYLE=
W tym momencie mamy już skonfigurowanego Blackbox™ i w zasadzie można by go już uruchomić ale my skonfigurujemy sobie menu, aby było zgodne z zainstalowanymi przez nas programami
W tym celu z pomocą przyjdzie nam program vfmg™, kt�ry już wcześniej zainstalowaliśmy. Komendy kt�re są poniżej należy wykonywać w katalogu domowym ~/
# mkdir ~/.blackbox # vfmg blackbox > .blackbox/menu
Mamy już gotowe menu, ale nie ma w nim opcji "Wyjście", kt�ra jest niewątpliwie przydatną opcją.
W ~/.blackbox/menu
należy pod sam koniec dopisać "Wyjście" tak, aby 3 ostatnie linijki wyglądały następująco:
# tail -3 ~/.blackbox/menu [end] [exit] (Wyjście) [end]
Dodatkowo należy edytować plik ~/.blackboxrc
i zmienić w nim linijkę session.menuFile na:
# grep menu .blackboxrc session.menuFile: .blackbox/menu
Mając już menu Blackbox możemy go wreszcie uruchomić:
# startx
Aby wszystko poprawnie funkcjonowało należy zapoznać się z działem "Konfiguracja środowiska graficznego", kt�ry znajduje się w dokumentacji PLD.
Młodszym bratem BlackBoxa™ jest Fluxbox™, bazujący na kodzie Blackboxa™. Fluxbox™ wygląda tak samo jak Blackbox™, kt�ry korzysta z tych samych styli, kolor�w, położenia okien i generalnie jest zachowana pełna kompatybilność z Blackboxem™.
Jakie są więc r�żnice? Odpowiedź brzmi: DUŻE. Np:
Konfigurowalne taby okien
Pasek ikon (do zminimalizowanych okien)
Scroll myszki używany do zmiany obszar�w roboczych.
Wsparcie dla KDE i GNOME, a także rozszerzone wsparcie dla WindowMakera.
i jeszcze wiele innych udogodnień.
Czas zainstalować potrzebne nam pakiety.
# poldek -i fluxbox fluxconf
Właściwie do pracy potrzebny nam jest tylko fluxbox, ale fluxconf trochę ułatwia konfiguracje.
Aby fluxbox™ był naszym domyślnym menadżerem okien w .Xclients
dajemy wpis.
exec fluxbox
wygląd menu można zmieniać edytując plik ~/.fluxbox/menu
Przykładowy wpis:
[begin] (Fluxbox) [exec] (aterm) {aterm -tr} [exec] (Run) {fbrun } [submenu] (Net) [exec] (PSI) {psi} [end] [end]
Możemy także automatycznie wygenerować menu korzystając z programu vfmg™. Instalujemy go poleceniem:
# poldek -i vfmg
Następnie wydajemy polecenia:
# mkdir ~/.fluxbox # vfmg blackbox > ~/.fluxbox/menu
Mamy już gotowe menu, ale nie ma w nim opcji "Wyjście", kt�ra jest niewątpliwie przydatną opcją.
W ~/.fluxbox/menu
należy pod sam koniec dopisać "Wyjście" tak, aby 3 ostatnie linijki wyglądały następująco:
# tail -3 ~/.blackbox/menu [end] [exit] (Wyjście) [end]
Chcąc dodać tło pulpitu możemy się posłużyć np. programem dispalay z pakietu ImageMagik™. Instalujemy go:
# poldek -i ImageMagick
dodatkowo konieczne jest doinstalowanie modułï¿½w kodera dla plik�w np. jpeg, png i tiff
# poldek -i ImageMagick-coder-jpeg-5.5.7.12-2 ImageMagick-coder-png-5.5.7.12-2 ImageMagick-coder-tiff-5.5.7.12-2
następnie w pliki ~/.fluxbox/init
odszukujemy wpis:
session.screen0.rootCommand: i dodajemy: display -size ROZDZIELCOZŚĆ -window root NAZWA_PLIKU_Z_GRAFIKA
u mnie wpis ten wygląda następująco:
session.screen0.rootCommand: display -size 1024x768 \ -window root ~/DREAMVISIONS.jpg
I to by było właściwie już tyle, można już uruchomić naszego menagera okien poleceniem
# startx
Istnieją dwie metody uruchamiania środowiska, pierwszą jest uruchamianie systemu na trzecim poziomie pracy (domyślnie) i autoryzowaniu się w terminalu tekstowym. Po zalogowaniu uruchamiamy program startx. Drugą możliwością jest instalacja jednego ze specjalnych demon�w: gdm™ (dla Gnome™) kdm™ (dla KDE™) lub xdm i dokonywanie autoryzacji za ich pośrednictwem. Demony te działają na piątym poziomie pracy, dlatego musimy skonfigurować system by domyślnie startował na tym poziomie. Estetyka i wygoda to nie jedyne zalety demon�w, są one silnie zintegrowane ze swoimi środowiskami, dzięki czemu zapewniają wiele dodatkowych funkcji.
W tej metodzie po zalogowaniu się w terminalu, użytkownik wydaje polecenie
startx.
Na podstawie wpisu w pliku .xinitrc
(w katalogu
użytkownika) uruchamiane jest wskazane tam środowisko. Aby używać tej metody,
musimy doinstalować potrzebne pakiety, w przypadku Ac™
wykonujemy polecenie:
$ poldek -i xinitrc-ng
W Th™:
$ poldek -i xinitrc-ng xorg-app-xinit
Konfiguracja polega na umieszczeniu nazwy programu startowego
środowiska w pliku .xinitrc
. Plik ten jest
pełnoprawnym skryptem powłoki i obowiązuje w nim jej składnia,
wpis w nim można wykonać następująco:
$ echo "gnome-session" >~/.xinitrc
lub
$ echo "exec gnome-session" >~/.xinitrc
Aby uruchomić środowisko wykonujemy polecenie:
$ startx
Poniżej przedstawilimy listę program�w startowych dla wybranych środowisk:
Gnome: gnome-session
KDE: startkde
XFCE: startxfce4
fluxbox: fluxbox
icewm: icewm
Jedynie w wyjątkowych sytuacjach powinniśmy używać tej metody do uruchamiania środowisk takich Gnome czy KDE, dla nich najlepiej korzytstać z opisanych poniżej GDM lub KDM.
Zaczynamy od instalacji demona GDM:
poldek> install gdm gdm-init
i już możemy go uruchomić:
# service gdm start
Powinniśmy m�c się teraz zalogować i uruchomić środowisko, jeśli wszystko działa prawidłowo to możemy ustawić by system uruchamiał się ma piątem poziomie pracy, zgodnie ze wskaz�wkami pod koniec rozdziału.
Instalujemy KDM
# poldek -i kdm
Dla lokalnej pracy nie trzeba nic specjalnie konfigurować, więc od razu możemy uruchomić demona poleceniem:
# /etc/init.d/kdm start
Pozostało nam jeszcze poinformować nasz system, że chcemy, aby nasz zarządca uruchamiał się po starcie systemu (na piątym poziomie).
W przypadku demon�w GDM/KDM powinniśmy jeszcze skonfigurować
system tak, by domyślnie uruchamiał się na piątym poziomie.
pracy. Owe usługi uruchamiają się tylko na tym poziomie,
poza tym jest to domyślny poziom dla aplikacji X-Window.
Powinniśmy zmodyfikować plik
/etc/inittab
, zgodnie ze wskaz�wkami
przedstawionymi w „Zmiana poziomu pracy systemu”.
Wiersz z opcją initdefault
powinien wyglądać następująco:
id:5:initdefault:
Aby sprawdzić poprawność operacji, możemy zrestartować system.
Do zainstalowania kart graficznych firmy NVIDIA zalecamy wykorzystać firmowe sterowniki nvidia™. Z serwerem X11™ dostarczany jest sterownik nv jednak w stosunku do firmowych sterownik�w jest zdecydowanie wolniejszy, chociaż w przypadku wykorzystania rivafb™ jesteśmy zmuszeni do użycia otwartych sterownik�w nv™.
Aby wczytać sterowniki firmowe, należy za pomocą programu poldek™ zainstalować pakiety:
# X11-driver-nvidia kernel-video-nvidia
Następnie w wygenerowanym pliku konfiguracyjnym serwera X11 dokonujemy zmian w sekcji Device Card0:
Identifier "Card0" Driver "nvidia" VendorName "nVidia Corporation" BoardName "NV5M64 [RIVA TNT2 Model 64/Model 64 Pro]" BusID "PCI:1:0:0" Option "HWCursor" "on" Option "CursorShadow" "on" Option "DPMS" "on" Option "noDCC" "on" Option "NoLogo" "on"
Czyli praktycznie zamieniamy ciąg znak�w w linijce
Driver z nv
na
nvidia
.
Teraz wracamy do serwera X11 i jego testowego uruchomienia. W przypadku problem�w standardowo zaglądamy w logi.
Do zainstalowania kart graficznych firmy ATI zalecamy wykorzystać firmowe sterowniki firegl™. Z serwerem X11™ dostarczane są także otwarte sterowniki X11-driver-ati™ - jednak nie wykorzystują one wszystkich możliwości jakie dają sterowniki firegl™ i dopiero przy dużych problemach z nimi możemy jako awaryjne skonfigurować serwer X11 z otwartymi sterownikami ATI.
Aby wczytać firegl™, należy za pomocą programu poldek™ zainstalować pakiety:
# X11-driver-firegl kernel-video-firegl
Następnie za pomocą programu fglrxconfig™ generujemy plik konfiguracyjny dla serwera X11. Opr�cz pytań związanych z serwerem odpowiemy na szereg pytań dotyczących karty graficznej i monitora (możemy np. zdecydować o tym czy chcemy pracować w systemie jedno-monitorowym, czy też z monitorem i odbiornikiem TV).
Wygenerowany plik, tak jak przedstawiono to w rozdziale
dotyczącym instalacji X11 należy z katalogu domowego
użytkownika root do katalogu
/etc/X11/
i dokonać ewentualnych korekt
dotyczących myszy i obsługi czcionek
Aby karta graficzna została poprawnie zainicjowana musimy wczytać odpowiednie moduły kernela. Na początku musi to być moduł, kt�ry umożliwi nam prace karty z AGP - moduł ten jest zależny od posiadanej płyty głï¿½wnej. Przykładowo dla płyt z chipsetem nforce2™ jest to moduł:
# modprobe nvidia-agp
Następnie wczytujemy moduł kernela obsługujący karty ATI:
# modprobe fglrx
Aby zmiany były trwałe, dopiszmy oba moduły do pliku
/etc/modules
i wykonajmy polecenie
depmod -a
Na koniec musimy się upewnić, że mamy zamontowany pseudo-system
plik�w shm używany do obsługi dzielonej
pamięci POSIX. Wymagany wpis w /etc/fstab
wygląda następująco:
none /dev/shm tmpfs defaults 0 0
Teraz możemy wr�cić do konfigurowania serwera X11 i jego testowego uruchomienia. Kiedy uruchomimy X-Window możemy sprawdzić poprawność konfiguracji pomocą program�w glxinfo™ oraz glxgears™ uruchamianych z emulatora terminala (np. xterm-a). Pierwszy z nich wyświetla dokładne informacje o naszej karcie i sterowniku, zaś drugi to program do testowania wydajności. Dobrze skonfigurowana karta graficzna pozwala osiągnąć wydajność kilku tysięcy klatek na sekundę. W przypadku problem�w standardowo zaglądamy w logi.
Spis treści
Każdego użytkownika Linuxa pracującego na swojej maszynie nachodziła refleksja na tematy filozoficzne - kto to wymyślił? kto to zrobił? i jak to zrobił? Pytania ciekawe - Prezentując spos�b pracy przy PLD możemy częściowo zrozumieć mechanizmy tworzenia takich projekt�w.
Naszym miejscem pracy będzie samo PLD i dodatki, kt�re poniżej spr�buje opisać. W chwili pisania tego tekstu była to wersja 1.0 ''Ra''. P�źniej jest już z g�rki - instalujemy parę pakiet�w - sam proces instalacji w praktycznie zostanie pominięty, gdyż użytkownicy już powinni wiedzieć co to jest poldek i jak się go używa.
# rpm -qa |grep rpm rpm-4.0.2-106 rpm-build-tools-4.0.2-106 rpm-utils-4.0.2-106 rpm-perlprov-4.0.2-106 rpm-build-4.0.2-106 rpm-devel-4.0.2-106 rpm-pythonprov-4.0.2-106 # rpm -qa |grep cvs cvs-1.11.5-2 # rpm -qa |grep mc mc-4.5.55-10
Zwr�cę uwagę tylko na CVS. Spos�b instalacji środowiska bardzo dobrze opisuje Baseciq - ten krok należy wykonać ze szczeg�lną starannością
Innym ważnym pakietem jest rpm plus dodatki. Głï¿½wnym zajęciem szeregowego developera jest tworzenie lub modyfikacja plik�w .spec, kt�re są głï¿½wnym czynnikiem budowania pakiet�w RPM. Są jeszcze potrzebne r�żne inne pakiety i źr�dła� - ale to już w zależności od tego co będziemy budować.
Największą skarbnicą wiedzy o RPMie i budowaniu pakiet�w możemy znaleźć w publikacji Maximum RPM - opis jest w języku angielskim i nie jest mi znane tłumaczenie na nasz język. Na szczęście są jeszcze inne źr�dełka, a także i niniejszy opis - więc powinno nam być lżej przyswajać wiedzę. Szczeg�lnie polecam stronę Grzegorza Niewęgłowskiego (lub lokalną kopię) gdzie dużo teorii i praktycznych rad może nam rozjaśnić w naszych głowach czym jest praca ze "specami".
Jest dostępny także opis stworzony przez Developera PLD lecz z tego co się dowiedziałem jest już trochę leciwy i niekt�re dane mogą być nieścisłe.
Po tej bombie teorii jaką niestety musimy przejść, czeka nas przestudiowanie jeszcze jednego dokumentu, kt�rego najnowszą wersję możemy ściągnąć z CVS PLD. Będzie to nasze pierwsze ćwiczenie.
Uruchamiamy terminal (czy to zwykły, czy też np. przez SSH) i wykonujemy kroki:
$ cd rpm $ cvs get PLD-doc/devel-hints-pl.txt U PLD-doc/devel-hints-pl.txt $
Jak widać kroki wykonujemy jako zwykły użytkownik (nie root) i tej zasady będziemy się konsekwentnie trzymali.
Do katalogu ~/rpm/PLD-doc/ ściągneliśmy z repozytorium PLD dokument tekstowy devel-hints-pl.txt. W tym dokumencie zawarte są zalecenia i ustalenia jakich powinniśmy się trzymać aby tworzyć właściwe dla PLD pakiety RPM.
Teraz spr�bujemy ściągnąć jakiś .spec z CVS PLD i zbudujemy sobie jakąś paczkę - np. pakiet tar (przykład budowania 'ekg' mogliśmy obejrzeć także podczas instalacji CVS na stronie Baseciq):
$ cd rpm $ cvs get SPECS/tar.spec U SPECS/tar.spec $ cd SPECS/ $ rpmbuild -ba tar.spec błąd: File /home/users/marekc/rpm/SOURCES/tar-1.13.25.tar.gz: \ Nie ma takiego pliku ani katalogu $ ./getsrc tar.spec Trying to download sources for tar-1.13.25-7 Searching for file: tar-1.13.25.tar.gz Trying CVS... OK Searching for file: tar-non-english-man-pages.tar.bz2 Trying CVS... OK Searching for file: tar-man_from_debian_tar_1.13.25-2.patch Trying CVS... OK Searching for file: tar-info.patch Trying CVS... OK Searching for file: tar-pipe.patch Trying CVS... OK Searching for file: tar-namecache.patch Trying CVS... OK Searching for file: tar-error.patch Trying CVS... OK Searching for file: tar-sock.patch Trying CVS... OK Searching for file: tar-nolibrt.patch Trying CVS... OK Searching for file: tar-man.patch Trying CVS... OK Searching for file: tar-ac25x.patch Trying CVS... OK Searching for file: tar-dots.patch Trying CVS... OK Searching for file: tar-pl.po-fix.patch Trying CVS... OK Download opreation completed: all files retrieved successfully
W przykładzie, za szybko chcieliśmy zbudować pakiet - zaraz po ściągnięciu ''tar.spec''.
Sam .spec bez źr�deł jest jak karabin bez amunicji... Można wykorzystać skrypt 'builder' (i p�źniej nawet zalecam go używać) w katalogu SPECS, kt�ry to sam przeanalizuje potrzeby i ściągnie odpowiedniego .speca (oczywiście jeżeli tylko zawiera go repozytorium CVS), źr�dła i wykona paczki rpm i srpms - ale my nie będziemy tutaj sobie za bardzo ułatwiać pracy :-)
Po ściągnięciu plik�w dobrze jest obejrzeć danego .speca aby zobaczyć, co jest jeszcze potrzebne do zbudowania - można to zrobić zwykłym edytorem tekstowym lub wykonać:
$ cat tar.spec |grep BuildReq BuildRequires: autoconf BuildRequires: automake BuildRequires: bison BuildRequires: gettext-devel
Wiemy już co nam jest potrzebne - Teraz sprawdzimy czy mamy te pakiety w naszym PLD:
$ rpm -q autoconf autoconf-2.53a-1 $ rpm -q automake automake-1.6.3-1 $ rpm -q bison pakiet bison nie jest zainstalowany $ rpm -q gettext-devel pakiet gettext-devel nie jest zainstalowany $
Czyli dw�ch, potrzebnych pakiet�w brak. A więc 'poldek' rusza do boju (tutaj już lepiej użyć konta 'root' - chyba że mamy poldka skonfigurowanego do pracy 'sudo'):
# poldek Wczytywanie ftp://ftp.pld-linux.org/dists/[...]/RPMS/packages.dir.gz... Wczytywanie ftp://ftp.pld-linux.org/dists/ra/[...]/packages.dir.gz... Wczytywanie ftp://ftp.pld-linux.org/dists/ra/[...]/packages.dir.gz... Wczytywanie ftp://ep09.kernel.pl/pub/People/[...]/packages.dir.gz... Wczytywanie ftp://ftp.pld-linux.org/dists/[...]/packages.dir.gz... Wczytywanie http://pld.mysza.eu.org/Ra/i686/packages.dir.gz... Przeczytano 6814 pakiet�w Usunięto 16 zdublowanych pakiet�w z listy dostępnych Wczytywanie /root/.poldek-cache/packages.dir.dbcache.var.lib.rpm.gz... Przeczytano 559 pakiet�w Witaj w poldekowym trybie interaktywnym. Wpisz "help" aby otrzymać pomoc. poldek> install bison gettext-devel Przetwarzanie zależności... Zaznaczono 1 pakiet do instalacji: I bison-1.35-5 Pobieranie ftp://ftp.pld-linux.org/dists/[...]/bison-1.35-5.i686.rpm... .................................................. 100.0% [196.5K] Uruchamianie rpm --upgrade -vh --root / --noorder... Preparing... ########################################### [100%] 1:bison ########################################### [100%] Installing set #2 Przetwarzanie zależności... Zaznaczono 1 pakiet do instalacji: I gettext-devel-0.10.40-4 Pobieranie ftp://[...]/gettext-devel-0.10.40-4.i686.rpm... .................................................. 100.0% [295.6K] Uruchamianie rpm --upgrade -vh --root / --noorder... Preparing... ########################################### [100%] 1:gettext-devel ########################################### [100%] poldek>
I jak tu nie kochać Poldka? :-)
Mamy już teoretycznie wszystko aby zbudować pakiet 'tar'. Wracamy więc do naszego zwykłego konta i:
$ rpmbuild -ba tar.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.22007 Patch #0 (tar-man_from_debian_tar_1.13.25-2.patch): Patch #1 (tar-info.patch): Patch #2 (tar-pipe.patch): Patch #3 (tar-namecache.patch): Patch #4 (tar-error.patch): Patch #5 (tar-sock.patch): Patch #6 (tar-nolibrt.patch): Patch #7 (tar-man.patch): Patch #8 (tar-ac25x.patch): Patch #9 (tar-dots.patch): Patch #10 (tar-pl.po-fix.patch): Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.97619 [...] Zapisano: /home/users/marekc/rpm/SRPMS/tar-1.13.25-7.src.rpm Zapisano: /home/users/marekc/rpm/RPMS/tar-1.13.25-7.i686.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.54009 + umask 022 + cd /home/users/marekc/rpm/BUILD + _autoreqprov=n + [ n = y ] + cd tar-1.13.25 + rm -rf /home/users/marekc/tmp/tar-1.13.25-root-marekc + exit 0 $
[...] oznacza, wycięte przeze mnie komunikaty jakie generuje kompilowany 'tar'.
Polecenie 'rpmbuild -ba ' każe nam zbudować ze speca kompletny pakiet - ale to już wiemy z teoretycznych szkoleń ;-)
Wszelkie komunikaty w razie jakiegoś błędu podczas budowania możemy odnaleźć w pliku: '/var/tmp/rpm-tmp.22007'
Widzimy, że gotowe pakiety mamy w określonych katalogach i możemy je spokojnie zainstalować. A komunikat 'exit 0' oznacza brak błęd�w podczas budowania.
Nasz pierwszy pakiet został zbudowany.
Pozostaje jednak niedosyt - ciągle czujemy, że jak na razie korzystamy z czyjeś pracy, a w końcu pragniemy także coś zrobić dla potomności i sami chcemy stworzyć plik .spec
No to zaczynamy. Naszym pierwszym (a właściwie moim) wykonanym specem będzie Mantis czyli system kontroli błęd�w oparty o stronę WWW (PHP) i bazę SQL Mysql.
Tutaj mała dygresja - większość pakiet�w powstaje dlatego, że danemu Developerowi był on akurat potrzebny; oznacza to że nie ma sensu pisanie na listę dyskusyjną z prośbą o stworzenie określonego pakietu bo można otrzymać parę przykrych komentarzy (w najlepszym razie).
Pierwszą czynnością jest zainstalowanie pakietu ze źr�deł. Potem notujemy sobie co należy zrobić aby dany pakiet zaczął działać - wszystko po to aby przewidzieć co dany .spec powinien zrobić aby pakiet pracował w miarę bezproblemowo po instalacji RPMa - Można to zanotować np. na kartce papieru - ale od czego mamy komputery?
Moje notatki wyglądały tak:
// MANTIS // Mysql init # cd /etc/rc.d/init.d # ./mysql init # /usr/bin/mysqladmin -u mysql password 'password' // Tworzenie bazy w mysql # mysqladmin -umysql -p create bugtracker # cd /mantis/sql # mysql -umysql -p bugtracker < db_generate.sql // Plik config_inc.php // Sprawdzenie i poprawka http:/mantis/admin/check.php // Pierwsze logowanie u: administrator p: root Dodać nowe i skasować stare :-) // co potrzebne do uruchomienia - mysql - mysql-client - php - php-common - php-pcre - php-mysql - apache // do rpma (zmiany w związku z językiem) plik: config_defaults_inc.php $g_default_language = 'english'; $g_default_language = 'polish'; // Zamiana łańcucha w config_defaults_inc.php sed -e s/$g_default_language = 'english';/$g_default_language = 'polish';/g config_defaults_inc.php // Zamiana usera z root na mysql w config_inc.php
Do każdego pakietu należy podchodzić indywidualnie - dlatego parę słï¿½w o samym mantisie. System jest oparty o gotowe pliki składające się na stronę WWW, dokumentacje i plik potrzebny do stworzenia odpowiedniej bazy Mysql. Nie będziemy dokonywali żadnych kompilacji - więc uprości to nasz proces budowania i testowania pakietu.
Łącząc informacje zawarte w dostarczonej dokumentacji i własnych notatek wiemy już że głï¿½wnym zadaniem naszego RPMa będzie takie zaprojektowanie go, aby odpowiednie pliki PHP zostały przekopiowane w odpowiednie miejsce, dokonać niezbędnych poprawek w plikach konfiguracyjnych lub innych poprawek, kt�re naszym zdaniem mogą ułatwić pracę przyszłym użytkownikom. Pamiętajmy jednak żeby nie przedobrzyć.
Niestety nie wszystko uda nam się zautomatyzować - dlatego stworzymy dwa pliki tekstowe (w dw�ch wersjach językowych PL i EN) z kr�tkim opisem, co należy wykonać aby system zadziałał.
Wydaje mi się także, że dobrym zwyczajem jest po zainstalowaniu źr�deł przewidzieć właściwe zależności, aby nasz pakiet działał bez problemu na innym komputerze. Na przykład w instrukcji do instalacji mantisa w wymaganiach jest wymieniony m.in. pakiet PHP - W PLD po instalacji samego PHP, mantis będzie wyświetlał błędy. Okazuje się że pakiety w PLD są maksymalnie ''rozdrobnione'' i do działania potrzebny jest jeszcze pakiet 'php-pcre' - a do tego, żeby strony PHP odpowiednio komunikowały się z bazą 'mysql' jest potrzeba zainstalowania 'php-mysql'. Zależności może być wiele i moim skromnym zdaniem lepiej żebyśmy umieścili jakiś nadmiarowy pakiet w zależnościach niż żeby jakiegoś brakowało.
W naszym przypadku po zainstalowaniu i uruchomieniu pakietu Mantis ze źr�deł, wystarczy wykonać np. 'rpm -qa |grep php' aby wybrać odpowiednie pliki. To samo robimy z 'mysql' i 'apache'.
Zaczynamy od stworzenia pliku (możemy użyć polecenia 'touch') lub korzystamy z innego pliku .spec w celu modyfikacji do naszych potrzeb (np. 'cvs get SPECS/template.spec' spowoduje ściągnięcie szkieletu z CVS PLD). Otwieramy go w naszym ulubionym edytorze tekstowym (vim, emacs, pico, mcedit itp.)
Summary: The Mantis Bug Tracker Summary(pl): Mantis - System Kontroli Błęd�w Name: mantis Version: 0.18.0a4 # define _alpha a4 Release: 1 License: GPL Group: Development/Tools [...]
Zaczynamy wypełniać tzw. preambułę, czyli wstęp w kt�rym opisujemy nasz pakiet - myślę, że wyjaśnianie powyższego nie jest specjalnie potrzebne. Zwr�cę tylko uwagę na linię 'Version' i 'Ralease' - zgodnie z devel-hints-pl.txt powinno ono raczej wyglądać tak (ponieważ ta wersja mantis'a jest określona jako alpha):
Version: 0.18.0 %define alpha a4 Release: 0.%{_alpha}.1
ale u mnie powodowało to błąd przy budowaniu, gdyż jak dalej zobaczymy nazwa źr�deł korzysta z pola 'Version' i każda manipulacja na nim powoduje potrzebę przebudowania .speca lub zmianę nazwy archiwum w kt�rym są źr�dła (co jest bardzo złym nawykiem i karygodnym błędem!). Tak więc w końcu zostawiłem tak jak jest i nikt specjalnie nie zwr�cił mi na to uwagi :-) (przyp. autora: jednak p�źniejsza praktyka pokaże nam, że zmiany takie są jednak chlebem powszednim więc nie b�jmy się ich dokonywać)
[...] Source0: http://dl.sourceforge.net/mantisbt/%{name}-%{version}.tar.gz # Source0-md5: 4c730c1ecf7a2449ef915387d85c1952 Source1: %{name}-doc-PLD.tar.gz URL: http://mantisbt.sourceforge.net/ [...]
Dalej mamy opis źr�dełek - w PLD podaje się go najczęściej w formie linku plus fraza %{name}-%{version}.tar.gz i tak naprawdę ta fraza jest najważniejsza do zbudowania pakietu, ponieważ URL (w naszym przypadku http://dl.sourceforge.net/mantisbt/) jest ignorowany. Tak więc z makra %name i %version budowana jest nazwa pakietu i taka nazwa jest wyszukiwana w ~/rpm/SOURCES/
Źr�deł programu może być kilka. U nas występuje jeszcze Source1 - jest to dodatkowa dokumentacja składająca się z dw�ch plik�w tekstowych zawierająca dodatkowe wskaz�wki po instalacyjne. Pierwotnie pr�bowałem zrobić to korzystając z mechanizmu Patch i polecenia:
diff -urN katalog_z_oryginałem katalog_z_poprawionym_oryginałem > źr�dła-pow�d.patch
opisanego w devel-manual (rozdział 1.2.2), ale mechanizm ten nie pozwala tworzyć nowych plik�w więc pozostało tylko wykonać dodatkowe źr�dła.
Pamiętajmy także aby w żadnym przypadku nie modyfikować ręcznie źr�deł programu. Prawidłowy .spec powinien wykorzystywać natywne źr�dła, a wszelkie zmiany dokonujemy w %build, %install lub za pomocą patch'�w.
Sygnatura md5 po # jest wynikiem wykorzystania tzw. distfiles i na razie to musi nam wystarczyć. Distfiles om�wimy gdy będziemy zapisywać do CVS PLD - czyli nieprędko ;-)
[...] Requires: apache >= 1.3.27-4 Requires: apache-mod_dir >= 1.3.27-4 Requires: php >= 4.0.3 Requires: php-mysql >= 4.0.3 Requires: php-pcre >= 4.3.1-4 Requires: php-common >= 4.3.1-4 Requires: mysql >= 3.23.2 Requires: mysql-client >= 3.23.56-1 Requires: sed BuildArch: noarch BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) [...]
W 'Requires' podajemy zależności, czyli co musi być zainstalowane aby dany pakiet działał lub żeby wykonały się poprawnie polecenia wykonywane przez .spec (np. sekcja %post)
W 'BuildArch' architekturę pod kt�ry przeznaczony jest RPM - u nas jest to 'noarch' czyli bez żadnej konkretnej architektury - z moich obserwacji wynika że developerzy PLD omijają to pole - chyba że jest to właśnie 'noarch'.
'BuildRoot' jest bardzo ważnym tagiem - na szczęście występuje zawsze w takiej postaci jak u nas - a oznacza katalog w kt�rym rpm będzie budował pakiet z sekcji %install naszego .speca.
[...] %define _mantisdir /home/services/httpd/mantis # define _mantisdir /home/httpd/html/mantis %description Mantis is a web-based bugtracking system. %description -l pl Mantis jest systemem kontroli błęd�w opartym na interfejsie \ WWW i MySQL. [...]
W tej części wykorzystujemy przydatną właściwość RPMa czyli definiowanie stałych. W naszym przykładzie '_mantisdir' jest katalogiem w kt�rym będą zainstalowane pliki dla serwera WEB. Tutaj mała uwaga dotycząca komentarza '#' - Gdy definiujemy makro wtedy komentarz nie działa, dlatego usunęliśmy '%' przed słowem 'define' (możemy także użyć frazy '%%') czyli gdybyśmy napisali:
%define _mantisdir /home/services/httpd/mantis
# %define _mantisdir /home/httpd/html/mantis
To wtedy stała '_mantisdir' miała by wartość /home/httpd/html/mantis, mimo że nie taka jest nasz intencja - Nie muszę chyba wyjaśniać jakie to może spowodować problemy?
W '%description' opisujemy kr�tko charakterystykę pakietu, a niżej widzimy jak to zrobić dla opisu w języku polskim - p�źniej RPM wykorzystując zmienne locale wyświetla odpowiednią wersję językową 'description' gdy sobie tego od RPMa życzymy.
[...] %prep %setup -q -a1 [...]
Od tego momentu skończyliśmy wypełniać dane preambuły. Sekcja %prep może wykonać skrypt potrzebny przed instalacją plik�w. My akurat nic przed instalacją robić nie musimy dlatego sekcja ta jest pusta.
Dalej jest '%setup -q -a1' - czyli rozpakowanie źr�deł do katalogu zdefiniowanego wcześniej przez 'BuildRoot'. Dodatkowe parametry tego tagu wyłączają komunikaty przy rozpakowaniu '-q', a parametr '-a1' określa kt�re źr�dła należy rozpakować. Po '%setup' możemy także korzystać z makra '%patch' kt�ry nakłada łatki na źr�dła. Umożliwia to taką modyfikację źr�deł jakie tylko chcemy bez potrzeby zmian w samych źr�dłach (o czym pisaliśmy wcześniej).
[...] %install rm -rf $RPM_BUILD_ROOT install -d $RPM_BUILD_ROOT%{_mantisdir} cp -af *.php admin core css graphs images lang sql \ $RPM_BUILD_ROOT%{_mantisdir} sed -e 's/root/mysql/g' config_inc.php.sample > \ $RPM_BUILD_ROOT%{_mantisdir}/config_inc.php [...]
Tak naprawdę w większości pakiet�w przed '%install' wykonywane jest makro '%build', kt�re kompiluje nam źr�dła, a w najprostszej postaci wygląda tak:
%build %configure make
U nas nie ma potrzeby wykonywania żadnych kompilacji więc od razu wykonywana jest sekcja '%install'. Na początku czyścimy sobie katalog w kt�rym będziemy instalowali nasz program (czyli 'fake root') - mimo że prawdopodobnie jest pusty - ale lepiej dmuchać na zimne. Potem dokonujemy instalacji pakietu przekazując mu w parametrze '-d' że docelowo ma być zainstalowany w 'fake root', ale same pliki pojawią się w naszym katalogu tymczasowym (TMPDIR), dlatego p�źniej za pomocą polecenia 'cp' kopiujemy pliki, jakie są potrzebne, do właściwego 'fake root' - zauważmy że pominęliśmy np. katalog 'doc'.
Następnie jeszcze za pomocą komendy 'SED' dokonujemy drobnej poprawki w pliku konfiguracyjnym mantisa - zamieniając domyślnego użytkownika MYSQL z 'root' na 'mysql'. Taką poprawkę mogliśmy wykonać wcześniej w sekcji '%prep' i tagu '%patch' ale przy tak małych poprawkach bardziej efektywniej jest to zrobić tutaj.
[...] %clean rm -rf $RPM_BUILD_ROOT [...]
Tag '%clean' jest w .specach tworzonych dla PLD obowiązkowy i określa co należy zrobić gdy cały pakiet zostanie zbudowany. Tutaj mała uwaga - ten tag w tym miejscu nie oznacza że jest w tej chwili wykonany - jeżeli by tak było, to występujący p�źniej tag '%files' miałby niejakie problemy z nieistniejącymi już plikami. Czyli po poprawnym zbudowaniu pakietu, wykonywane jest makro '%clean', a w przypadku jakiegokolwiek błędu, nie jest - czyli rozpakowane i zainstalowane źr�dła pozostają. Umożliwia nam to np. diagnostykę w przypadku błęd�w podczas budowania pakietu.
[...] %post if [ "$LANG" = "pl_PL" ]; then #sed -e "s/= 'english';/= 'polish';/g" \ %{_mantisdir}/config_defaults_inc.php > \ #%{_mantisdir}/config_defaults_inc_PLD.php #mv -f %{_mantisdir}/config_defaults_inc_PLD.php \ %{_mantisdir}/config_defaults_inc.php echo echo "Mantis zapisany..." echo "Więcej: /usr/share/doc/mantis-%{version}/PLD_Install_PL.txt.gz" echo else echo echo "Mantis loaded..." echo "More: /usr/share/doc/mantis-%{version}/PLD_Install_EN.txt.gz" echo fi [...]
Tutaj mamy przykład co możemy zrobić z plikami, kt�re będą instalowane po zbudowaniu pakietu. Makro '%post' wykonywane jest przez RPM podczas instalacji pakietu. Zakomentowane polecenia umożliwiają zmianę w zainstalowanym pliku 'config_defaults_inc.php' zgodnie z zawartością zmiennej locale 'LANG'. P�źniej w zależności od tej zmiennej wyświetlany jest komunikat w języku PL lub EN.
Zadacie pytanie dlaczego część tych poleceń jest ''wyłączona" - ot�ż, p�źniej gdy dany .spec chcemy już udostępnić og�łowi zostanie on sprawdzony pod względem ''czystości rasowej'' :-) - W tym przypadku okazało się, że taka zmiana w plikach konfiguracyjnych, może spowodować kłopoty podczas np. zmiany użytkownika. Programy korzystające z 'locale' powinny odpowiednio reagować na zmiany 'locale' - np. po modyfikacji LANG na 'EN_en' zacząć pracować po angielsku - W naszym przypadku strona PHP nie zacznie pracować po angielsku, dlatego dodany został w/w komentarz, a w pliku 'PLD_Install_PL.txt.gz', kt�ry jest dodatkową instrukcją, co należy zrobić po instalacji pakietu RPM aby 'mantis' po uruchomieniu rozmawiał z nami po polsku.
[...] %files %defattr(644,root,root,755) %doc doc/* PLD_Install_PL.txt PLD_Install_EN.txt config_inc.php.sample %dir %{_mantisdir} %{_mantisdir}/admin/ %{_mantisdir}/core/ %{_mantisdir}/css/ %{_mantisdir}/graphs/ %{_mantisdir}/images/ %{_mantisdir}/lang/ %{_mantisdir}/sql/ %{_mantisdir}/account* %{_mantisdir}/bug* %{_mantisdir}/core.* %{_mantisdir}/csv* %{_mantisdir}/docum* %{_mantisdir}/file* %{_mantisdir}/history* %{_mantisdir}/index* %{_mantisdir}/jump* %{_mantisdir}/log* %{_mantisdir}/ma* %{_mantisdir}/me* %{_mantisdir}/news* %{_mantisdir}/print* %{_mantisdir}/proj* %{_mantisdir}/set* %{_mantisdir}/sig* %{_mantisdir}/sum* %{_mantisdir}/view* %config(noreplace) %{_mantisdir}/config_inc.php %config(noreplace) %{_mantisdir}/config_defaults_inc.php %exclude %{_mantisdir}/core/.cvsignore [...]
Dochodzimy powoli do finału :-). W sekcji tej określamy co, gdzie i jak ma zostać zainstalowane u użytkownika instalującego naszego RPMa. Tag %files jest bardzo ważny gdyż błędy spowodowane tutaj mogą uniemożliwić działanie pakietu u końcowego użytkownika. W 'podtagu':
%defattr(644,root,root,755)
określamy domyślne atrybuty instalowanych plik�w - możemy oczywiście określać atrybuty dla każdego pliku osobno.
Następnie w:
%doc doc/* PLD_Install_PL.txt PLD_Install_EN.txt config_inc.php.sample
określamy nasze pliki, kt�re znajdą się w dokumentacji. Czyli katalog 'doc/' z katalogu 'TMPDIR' i pliki z 'SOURCE1' oraz 'config_inc.php.sample' zostaną spakowane i przy instalacji pakietu RPM umieszczone w domyślnym katalogu dokumentacji - w PLD jest to /usr/share/doc/...
I wreszcie w:
%dir %{_mantisdir}
nakazujemy podczas instalacji RPM'a stworzenie katalogu zgodnie ze stałą '%{_mantisdir}' i kopiujemy pliki jakie są poniżej tego tagu. Na początku nie wypisywałem wszystkich tych katalog�w i plik�w indywidualnie, a po prostu użyłem frazy:
%{_mantisdir}
Jednak przy takiej konstrukcji i wykorzystaniu makra %config(noreplace), pojawi się błąd podczas budowania pakietu:
[...] RPM build errors: File listed twice: /home/services/httpd/mantis/config_defaults_inc.php File listed twice: /home/services/httpd/mantis/config_inc.php
Czyli dwa pliki miały podw�jne znaczenie - występowały na liście do skopiowania i jako pliki konfiguracyjne. Dlatego trzeba niestety zrobić listę plik�w jak to my zrobiliśmy minus pliki, kt�re znajdą się w makro '%config'. Samo makro '%config' pozwala szczeg�lnie traktować pliki konfiguracyjnie podczas kasowania RPMa lub jego aktualizacji.
Ostatnie makro:
'%exclude %{_mantisdir}/core/.cvsignore'
nakazuje wyłączenie pliku z pakietu RPM - w tym przypadku jest to pozostałość po CVS mantisa.
I to już koniec naszej pracy. Po wykonaniu polecenia 'rpmbuild -ba mantis.spec' powinien nam zbudować się pakiet rpm i srpm. Zostaje jeszcze przetestowanie czy wszystkie pliki są tam gdzie chcieliśmy, czy mają odpowiednie prawa i czy pakiet działa tak jak powinien. Jeszcze ewentualne poprawki i musimy przepuścić naszą pracę przez zestaw adaptujący 'adapter.awk'.
Ściągamy go z CVSu:
$ cvs get SPECS/adapter.awk U SPECS/adapter.awk $
następnie zmieniamy nazwę pliku .speca dodając na końcu np. org i wykonujemy:
$ ./adapter.awk mantis.spec.org > mantis.spec $
W wyniku tej operacji otrzymamy 'mantis.spec' kt�ry zostaje przystosowany do wymagań PLD. Zainteresowanych zmianami, zapraszam do przestudiowania 'nowego' .speca.
Teraz możemy szukać kogoś, kto umieści naszego .speca i źr�dła w repozytorium CVS PLD. Mamy do dyspozycji listę developer�w: w mailu umieszczając załącznik z naszym .specem (oczywiście bez źr�deł - lub jeżeli mamy jakieś własne źr�dła to umieszczamy je na jakieś stronie WWW lub innym ftp. i podajemy linka - źr�dła natywne powinny dać się ściągnąć z lokacji jaką umieściliśmy w naszym .specu.). Załącznik powinien być typu plain-text.
Można także spr�bować na grupie IRC #PLD znaleźć ofiarę, kt�ra umieści naszą pracę w repozytorium.
Dobrze też w czasie nauki robienia .spec�w podglądać jak to robią inni - W repozytorium CVS jest naprawdę z czego wybierać. A my nabywając umiejętność czytania plik�w .spec możemy skupić się już tylko na odpowiednim ich napisaniu.
W końcu otrzymamy możliwość zapisu do CVS i wtedy czytamy następną część poradnika ''W krainie CVS''
Spis treści
Umiemy już w miarę klecić nowe spece, naprawiać stare - chcemy dołączyć do drużyny PLD... Musimy mieć więc możliwość pogrania na boisku, a nie tylko zasiadać na trybunach jako widz. Naszym boiskiem będzie CVS a możliwość czytania i pisania do niego (Read-Write) naszym sposobem na grę :)
Jak to życiu, aby coś dostać musimy najpierw się postarać i wykonać parę czynności.
Żeby otrzymać własne konto CVS należy uzyskać poparcie już aktywnych deweloper�w. Zwykle osoby wykazujące się aktywnością na listach dyskusyjnych (podsyłające patche, itp.) prędzej czy p�źniej są wręcz proszone o zgłoszenie się po konto. W typowym przypadku wystarczy, że trzech deweloper�w wyrazi poparcie kandydata na dewelopera (trzeci z nich powinien wskazać mu dokąd powinien się zgłosić po konto). Osoba popierająca kandydata jednocześnie staje się jego opiekunem i nadzoruje jego działania w początkowej fazie. W przypadku gdyby, mimo poparcia przez niekt�rych, osoba kandydata wywoływała kontrowersje, decyzja o jego przyjęciu (lub nie) będzie podjęta zgodnie z obowiązującą procedurą rozwiązywania konflikt�w.
Kiedy już zostaniemy przyjęci, musimy wymyśleć sobie ksywkę i hasło. Potem z linii poleceń wykonujemy jednolinijkowe polecenie - wstawiając za login i haslo odpowiednie dane:
perl -e 'print "login:" . crypt("haslo", join "", (".", "/", 0..9, "A".."Z", "a".."z")[rand 64, rand 64]) . "\n"'
w wyniku kt�rego otrzymamy ciąg znak�w podobny do:
login:/APGG.cfeqPpk
Ciąg ten kopiujemy do listu e-mail z prośbą o możliwość RW na CVS PLD i wysyłamy na adres [email protected]
To na razie wszystko co możemy zrobić - trzeba czekać na odpowiedź od władzy CVS. Po kilku, kilkunastu lub kilkudziesięciu dniach przyjdzie mail z odpowiedzią. U mnie była to wiadomość podobna do:
Quoting Marek Ciesielski <[email protected]>: > Prosze o dostep RW do CVS PLD. > dane do <login>:/APGG.cfeqPpk // oczywiście tej linii // w mailu nie ma - dodałem ją dla przykładu :) Witam, twoje konto zostało założone, proszę dopisz się do CVSROOT/users -- Admin CVS <imię i nazwisko> :)
Czyli pierwsze formalności mamy za sobą. Możemy już działać na CVS. Jednak proponuję znowu trochę teorii - tym razem zdecydowana większość dokumentacji jest w języku angielskim. Mamy więc bardzo dobry, oficjalny podręcznik CVS (uwaga ponad 800KB), książkę kucharską CVS (uwaga ponad 600KB) - jest także opis po polsku - stworzony przez developer�w PLD, a także książka z cyklu leksykon kieszonkowy "CVS" Gregor N. Purdy (koszt ok. 10PLN) - tak więc jest w czym wybierać.
Jeszcze raz zwr�ćmy uwagę na maila kt�rego otrzymaliśmy. Jest tam coś o dopisaniu "users". Musimy wykonać zalecenie. Aby to zrobić musimy znowu przygotować sobie środowisko CVS - albo modyfikując istniejące, dotychczasowe konto "anonymous" albo tworząc od początku środowsko w nowym katalogu. Ja wybrałem pierwszy spos�b (trochę wbrew zaleceniom z dokumentacji - ale za to szybszy), polega on na modyfikacji każdego pliku "Root" w podkatalogach "CVS" - należy tam wpisać frazę:
:pserver:<nasz_login>@cvs.pld-linux.org:/cvsroot
Czyli w naszym przypadku wchodzimy do katalogu ./rpm i wchodzimy do każdego podkatalogu "CVS" i zmieniamy ręcznie plik "Root" - nie ma w tej chwili tych katalog�w wiele, więc nie powinno to sprawić kłopotu.
Proponuję także poustawiać sobie zmienne CVS np. CVSEDITOR itp. (szczeg�ły - oczywiście dokumentacja).
Następnie możemy już spr�bować zalogować się do CVS PLD:
$ cvs login Logging in to :pserver:<nasz_login>@cvs.pld-linux.org:2401/cvsroot CVS password: $
Wpisujemy hasło kt�re wymyśleliśmy i jesteśmy zalogowani. Każdy komunikat błędu oznacza że coś wcześniej źle wykonaliśmy, albo że np. nie działa sieć. Login wykonujemy praktycznie raz i dop�ki nie wykonamy polecenia "cvs logout" jesteśmy ciągle gotowi do pracy.
Czas już zabrać się za plik "users"
$ cvs get CVSROOT/users U CVSROOT/users $
Do naszego lokalnego repozytorium, do katalogu CVSROOT ściągneliśmy plik users, kt�ry służy w PLD do wpisania aliasu pocztowego - przy okazji możemy zobaczyć w jakim towarzystwie przyjdzie nam pracować :)
nasz_login:użytkownik_mail@domena_naszego_email:Imię i Nazwisko:[email protected]
Ostatnie pole jest opcjonalne - wypełniamy je tylko jeśli posiadamy sw�j własny JID (o ile go posiadamy). Jeśli z r�żnych przyczyn nie korzystamy z Jabbera - omijamy tę część i zatrzymujemy się na imieniu i nazwisku. Dla zainteresowanych - istnieje oficjalny serwer Jabbera projektu PLD Linux - konta na nim zakłada Mariusz Mazur.
Edytujemy odpowiednio więc plik users (pamiętajmy, żeby zachować alfabetyczną kolejność wpis�w) - wystarczy tylko drobna znajomość alfabetu i robimy nasz pierwszy commit - czyli potwierdzamy zmiany.
$ cvs ci CVSROOT/users // po tym poleceniu edytujemy log Checking in CVSROOT/users; /cvsroot/CVSROOT/users,v <-- users new revision: 1.40; previous revision: 1.39 done cvs server: Rebuilding administrative file database Mailing the commit message $
Po wydaniu polecenia cvs ci CVSROOT/users otworzy się nasz ulubiony edytor i pojawi się coś podobnego do:
- added nasz_login // tu wpisujemy komentarz z kreseczką i po angielsku!!! CVS: --------------------------------------------------------------------- CVS: Enter Log. Lines beginning with `CVS:` are removed automatically CVS: CVS: Committing in . CVS: CVS: Updated Files: CVS: CVSROOT/users CVS: ---------------------------------------------------------------------
Właśnie dokonaliśmy pierwszej zmiany w repozytorium PLD. Od tej chwili każdy mail adresowany na <nasz_login>@pld-linux.org trafi na naszą skrzynkę pocztową.
Dalsza część naszych rozważań będzie już w formie konkretnych przykład�w, ponieważ to co chcemy zrobić w repozytorium CVS PLD zależy od konkretnych potrzeb. Od tej chwili nikt już nas za rączkę nie będzie prowadził, a czekają nas pot, krew, łzy i pierwsze "recenzje" naszych poczynań - np. na grupie PLD-devel czy kanale #PLD - a jedynymi nagrodami będzie brak tych recenzji, zdobyta wiedza, satysfakcja i działające paczki, kt�rych przez chwilę nikt na świecie nie będzie miał :)
Każdy nowy plik, kt�ry chcemy umieścić w repozytorium należy dodać za pomocą polecenia "cvs add"
$ cvs add nasz_nowy_pakiet.spec cvs server: scheduling file `nasz_nowy_pakiet.spec' for addition cvs server: use 'cvs commit' to add this file permanently $
Jak widać z komentarza, aby zakończyć dodanie pliku należy zatwierdzić zmianę za pomocą polecenia "cvs ci" (polecenia podaję w formie skr�conej) - Samo zatwierdzanie (commit) robiliśmy już wcześniej przy okazji pliku "users".
Pliki możemy zaktualizować względem CVS - jeżeli nasz plik jest nowszy nie zostanie dokonana żadna zmiana na naszym lokalnym repozytorium. Aktualizacją nie dokonujemy zmian na zdalnym repozytorium.
Jeżeli w danym katalogu mamy już zdefiniowaną kartotekę (czyli mamy już odpowiedni podkatalog CVS) to aktualizacją możemy ściągnąć nowy plik.
$ cvs up python.spec P python.spec $
W powyższym przykładzie dokonaliśmy aktualizacji pliku "python.spec". Literka "P" określa stan aktualizacji. Poniżej przedstawię możlwe kody:
"A" - Plik dodany. Oznacza że na pliku dokonano operacji "ADD" (czyli dodanie do repozytorium) ale nie wykonano commitu (zatwierdzenia)
"C" - Plik aktualizowany jest w konflikcie ze zdalnym repozytorium. Czyli np. dokonaliśmy zmian na lokalnym repozytorium i nasz plik jest "nowszy" względem zdalnego repozytorium.
"M" - Plik został zmodyfikowany w zdalnym repozytorium ale nie było żadnych konflikt�w.
"P" - Plik był "łatany" przez serwer (kod podobny do "U")
"R" - Plik usunięty ale nie zatwierdzony. Czyli dokonano operacji "cvs remove" ale nie zatwierdzono zmian (poleceniem "cvs ci")
"U" - Plik został zaktualizowany
"?" - Plik jest w naszym repozytorium lokalnym ale nie ma go w zdalnym repozytorium CVS
Sam przykład zatwierdzania zmian mogliśmy poznać wcześniej. Jest to najczęściej wykonywana operacja na CVS.
Jednak chciałbym zwr�cić uwagę na inny spos�b składowania źr�deł natywnych. W pewnym momencie okazuje się, że składowanie wszystkich plik�w w repozytorium CVS jest mało efektywne i powoduje zbyt duże obciążenia serwer�w. Dlatego też w PLD zastosowano mechanizm Distfiles kt�rego kr�tki opis możemy odszukać tu. W wielkim skr�cie oznacza to że preparując odpowiednio spec (pamiętacie tajemnicze md5?) i korzystając z odpowiednich opcji programu ./builder możemy sterować ściąganiem plik�w do distfiles. Tak naprawdę najczęściej wykorzystane są dwie opcje ./builder - "5" i "U". Jest to także pow�d używania programu ./builder (a nie frazy "rpmbuild -ba"), kt�rego kopię najlepiej ściągnąć z CVS. Pamiętajmy także o tym, że w systemie istnieje inny builder, kt�ry jest dostarczany z narzędziami rpm ale oczywiście nie ma on możliwości pracy z distfiles. I jeszcze jedna uwaga: Distfiles jest przeznaczony tylko dla źr�deł natywnych - wszelkie patche i nasze pliki dodajemy normalnie do CVS (najczęściej do katalogu SOURCES).
Oto przykłady użycia ./builder z odpowiednimi opcjami:
$ ./builder -5 mantis.spec # $Revision: 12145 $, $Date: 2004-09-26 17:31:14 +0200 (nie, 26 wrz 2004) $ --20:32:59-- http://dl.sourceforge.net/mantisbt/mantis-0.18.0a4.tar.gz => `mantis-0.18.0a4.tar.gz' Translacja dl.sourceforge.net... zrobiono. Łączenie się z dl.sourceforge.net[193.1.219.87]:80... połączono się. Żądanie HTTP wysłano, oczekiwanie na odpowiedź... 200 OK Długość: 485,797 [application/x-tar] 100%[====================================>] 485,797 17.99K/s ETA 00:00 20:33:25 (17.99 KB/s) - zapisano `mantis-0.18.0a4.tar.gz' [485797/485797] Updating source-0 md5. $
Opcje "5" i "U" są podobne, z tym że "5" pr�buje poprawić md5 korzystając z istniejącego sources w lokalnym repozytorium. Natomiast "U" pr�buje zawsze ściągnąć źr�dła z podanego przez spec URL. Taka jest teoria. Ja praktycznie używam opcji "U" kasując wcześniej źr�dła z lokalnego repozytorium, ponieważ w innym przypadku wyskakują dziwne błędy o konflikcie z parametrem -nd
$ ./builder -U mantis.spec # $Revision: 12145 $, $Date: 2004-09-26 17:31:14 +0200 (nie, 26 wrz 2004) $ --20:44:39-- http://dl.sourceforge.net/mantisbt/mantis-0.18.0a4.tar.gz => `mantis-0.18.0a4.tar.gz' Translacja dl.sourceforge.net... zrobiono. Łączenie się z dl.sourceforge.net[193.190.198.97]:80... połączono się. Żądanie HTTP wysłano, oczekiwanie na odpowiedź... 200 OK Długość: 485,797 [application/x-gzip] 100%[====================================>] 485,797 18.80K/s ETA 00:00 20:45:04 (18.80 KB/s) - zapisano `mantis-0.18.0a4.tar.gz' [485797/485797] Updating source-0 md5. $
W każdym większym CVSie, projekty głï¿½wne rozgałęziają się tworząc tzw. branche - W przypadku PLD np. istnieje stabilny, lecz już troche leciwy branch "RA-branch", kt�ry wywodzi się z brancha głï¿½wnego HEAD. W pewnym momencie RA-branch został "zamrożony" i dokonywane są na nim tylko zmiany zawierające poprawki poważnych błęd�w lub aktualizacje związane z bezpieczeństwem. Branch HEAD "żyje" dalej i są w nim dokonywane zmiany i powstają nowe pakiety. Odgałęzień może być (i jest) wiele, co na początku troche gmatwa spojrzenie na CVS ale p�źniej doceniamy zalety tego rozwiązania. Dane odnogi mają przydzielone odpowiednie etykiety "lepkie" (ang. sticky tag) - czyli etykieta jest przekazywana każdej następnej wersji w danej odnodze. Zwykłe etykiety (ang. tag) możemy użyć np. do okreslenia indywidualnego stanu danego pliku - określając np. tag STABLE, UNSTABLE lub DEVELOP.
Jeżeli chodzi o etykietowanie to trzeba zachować rozwagę. Musimy być pewni że wiemy co chcemy osiągnąć, bo możemy popsuć pracę komuś innemu (dotyczy to także zmian w cudzych specach).
Praktycznie najczęściej wykorzystywane są następujące opcje związane z odnogami i etykietami:
$ cvs status -v mldonkey.spec // Statystyka odn�g i etykiet =================================================================== File: mldonkey.spec Status: Up-to-date Working revision: 1.14.2.8 // Rewizja (wersja) robocza na lokalnym CVS Repository revision: 1.14.2.8 /cvsroot/SPECS/mldonkey.spec,v // Rewizja na zdalnym CVS Sticky Tag: RA-branch (branch: 1.14.2) // Dane dotyczące lepkiej etykiety - związanej z branchem (odnogą) Sticky Date: (none) Sticky Options: (none) Existing Tags: // Istniejące etykiety zwykłe mldonkey-2_5_3-2 (revision: 1.14.2.7) STABLE (revision: 1.14.2.7) mldonkey-2_5-1 (revision: 1.14.2.2) RA-branch (branch: 1.14.2) $
Sam spos�b robienia odn�g pozostawiam innym - lepiej poczytać np. opis CVS PLD bo sam tego jeszcze nie robiłem :). Etykietowanie możemy wykonać np.: mając plik w naszym lokalnym repozytorium wydajemy polecenie:
cvs tag UNSTABLE plik.spec
czyli plik.spec otrzymał etykietę UNSTABLE.
Ostatnim przykładem będzie przenoszenie zmian między odnogami (branchami). Robiąc jakiś spec w głï¿½wnej odnodze HEAD doszliśmy do wniosku, że zmiany można ogłosić w odnodze RA-branch. Można spr�bować wykonać polecenie:
cvs update -r RA-branch -j HEAD mldonkey.init
ale najczęściej r�żnice między wersjami w odnogach są tak duże, że otrzymamy komunikat o braku automatycznej możliwości przeniesienia zmian. Wtedy można rozwiązać ten problem innym sposobem. Tworzymy np. w podkatalogu "SPECS" katalog "RA-branch" (nazwa katalogu jest nieistotna, ale pomocna). W podkatalogu "RA-branch" wykonujemy:
$ cvs get -A SPECS/plik.spec // parametr "A" usuwa tag $ cd SPECS $ cvs tag -b RA-branch plik.spec // nowy tag dla odnogi RA-branch $ cp z_HEAD_plik.spec // podmieniamy plik na właściwy z HEAD $ cvs commit -r RA-branch plik.spec // zatwierdzamy zmiany jako RA-branch $
Myślę że komentarze są czytelne. Gdy zrobimy co najmniej jedną taką operację, to istniejący katalog RA-branch może nam służyć do p�źniejszych operacji kopiowania zmian między odnogami (np. korzystając z opcji "cvs up".
Zdarza się często, że chcemy dać sygnał iż dany pakiet powinien zostać przebudowany przez buildery PLD (czyli takie zdalne komputery-muły robocze, kt�re przygotowują pakiety) - wtedy podczas wpisywania komentarza po wydaniu polecenia "cvs ci" należy napisać np.
- updated to version 2.5.3. Release 1 STBR for RA update general
STBR jest skr�tem od "Send To Builder Request"
Zbliżamy się do końca naszego praktycznego poradnika. Nie zostało poruszonych wiele kwestii, kt�re wyjdą w codziennej pracy. Dlatego mamy do pomocy dokumentację, listy dyskusyjne, IRC, zasoby CVS i przeglądarkę GOOGLE ;). Praca ta miała na celu wprowadzić w świat pracy developerskiej i pokazać praktyczne rozwiązania niekt�rych problem�w - reszta zależy od naszej wiedzy i pracowitości - i pamiętajmy, że najważniejsze to rozwijać swoje zdolności, bo od tego zależy nasza przyszłość i przyszłość projektu dla kt�rego pracujemy :)
Spis treści
Spis treści
W tworzeniu tej pracy pośrednio lub bezpośrednio udział wzieli (w kolejności alfabetycznej):
Abramowicz Michał (abram)
Boguszewski Paweł (pawelb) <pawelb.at.pld-linux.org>
Buziak Tomasz (uho) <uho.at.xhost.one.pl>
Chomicki Arkadiusz (ChomAr) <chomar.at.wla.pl>
Ciesielski Marek (ciesiel) <ciesiel.at.pld-linux.org>
Doliński Marcin <averne.at.pld-linux.org>
Drozd Rafał (Grifter)
Gandecki Łukasz (gozda) <gozda.at.pld-linux.org>
Gołębiowski Adam (adamg) <adamg.at.pld-linux.org>
Krakowiak Paweł
Kr�likowski Krzysztof <krolik.at.pld-linux.org>
Kwiatkowski Paweł (qwiat) <qwiat.at.o2.pl>
Mozer Łukasz Jarosław (Baseciq)
Nowak Łukasz (Shufla) <Lukasz.at.Nowak.eu.org>
Panasiewicz Michał (wolvverine) <wolvverine.at.pld-linux.org>
Paszkiewicz Sławomir (PaSzCzUs) <paszczus.at.pld-linux.org>
Pawłowicz Sergiusz (Ser)
Poślad Marcin (Lop)
Rudnicki Daniel Dominik (sardzent)<sardzent.at.pld-linux.org>
Sikora Paweł <pluto.at.pld-linux.org>
Szafko Bartłomiej
Wojtaszek Marek (speedo) <speedo.at.linux.pl>
Spis treści
Niniejsza dokumentacja jest wydawana na licencji GNU Wolnej Dokumentacji. Oryginalny tekst licencji wersji 1.2 w języku angielskim możemy odnaleźć na stronie GNU Free Documentation License. Tłumaczenie starszej wersji 1.1 zostanie tutaj przytoczone i znajduje się na stronie GNU.org.pl. R�żnice między wersją 1.1 a 1.2 niniejszej licencji w wersji angielskiej możemy przeczytać korzystając z tego odnośnika
Copyright (c) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Zezwala się na kopiowanie i rozpowszechnianie wiernych kopii niniejszego dokumentu licencyjnego, jednak bez prawa wprowadzania zmian.
Celem niniejszej licencji jest zagwarantowanie wolnego dostępu do podręcznika, treści książki i wszelkiej dokumentacji w formie pisanej oraz zapewnienie każdemu użytkownikowi swobody kopiowania i rozpowszechniania wyżej wymienionych, z dokonywaniem modyfikacji lub bez, zar�wno w celach komercyjnych, jak i nie komercyjnych. Ponad to Licencja ta pozwala przyznać zasługi autorowi i wydawcy przy jednoczesnym ich zwolnieniu z odpowiedzialności za modyfikacje dokonywane przez innych.
Niniejsza Licencja zastrzega też, że wszelkie prace powstałe na podstawie tego dokumentu muszą nosić cechę wolnego dostępu w tym samym sensie co produkt oryginalny. Licencja stanowi uzupełnienie Powszechnej Licencji Publicznej GNU (GNU General Public License), kt�ra jest licencją dotyczącą wolnego oprogramowania.
Niniejsza Licencja została opracowana z zamiarem zastosowania jej do podręcznik�w do wolnego oprogramowania, ponieważ wolne oprogramowanie wymaga wolnej dokumentacji: wolny program powinien być rozpowszechniany z podręcznikami, kt�rych dotyczą te same prawa, kt�re wiążą się z oprogramowaniem. Licencja ta nie ogranicza się jednak do podręcznik�w oprogramowania. Można ją stosować do r�żnych dokument�w tekstowych, bez względu na ich przedmiot oraz niezależnie od tego, czy zostały opublikowane w postaci książki drukowanej. Stosowanie tej Licencji zalecane jest głï¿½wnie w przypadku prac, kt�rych celem jest instruktaż lub pomoc podręczna.
Niniejsza Licencja stosuje się do podręcznik�w i innych prac, na kt�rych umieszczona jest pochodząca od właściciela praw autorskich informacja, że dana praca może być rozpowszechniana wyłącznie na warunkach niniejszej Licencji. Używane poniżej słowo "Dokument" odnosić się będzie do wszelkich tego typu publikacji. Ich odbiorcy nazywani będą licencjobiorcami.
"Zmodyfikowana wersja" Dokumentu oznacza wszelkie prace zawierające Dokument lub jego część w postaci dosłownej bądź zmodyfikowanej i/lub przełożonej na inny język.
"Sekcją drugorzędną" nazywa się dodatek opatrzony odrębnym tytułem lub sekcję początkową Dokumentu, kt�ra dotyczy wyłącznie związku wydawc�w lub autor�w Dokumentu z og�lną tematyką Dokumentu (lub zagadnieniami z nią związanymi) i nie zawiera żadnych treści bezpośrednio związanych z og�lną tematyką (na przykład, jeżeli Dokument stanowi w części podręcznik matematyki, Sekcja drugorzędna nie może wyjaśniać zagadnień matematycznych). Wyżej wyjaśniany związek może się natomiast wyrażać w aspektach historycznym, prawnym, komercyjnym, filozoficznym, etycznym lub politycznym.
"Sekcje niezmienne" to takie Sekcje drugorzędne, kt�rych tytuły są ustalone jako tytuły Sekcji niezmiennych w nocie informującej, że Dokument został opublikowany na warunkach Licencji.
"Treść okładki" to pewne kr�tkie fragmenty tekstu, kt�re w nocie informującej, że Dokument został opublikowany na warunkach Licencji, są opisywane jako "do umieszczenia na przedniej okładce" lub "do umieszczenia na tylnej okładce".
"Jawna" kopia Dokumentu oznacza kopię czytelną dla komputera, zapisaną w formacie, kt�rego specyfikacja jest publicznie dostępna. Zawartość tej kopii może być oglądana i edytowana bezpośrednio za pomocą typowego edytora tekstu lub (w przypadku obraz�w złożonych z pikseli) za pomocą typowego programu graficznego lub (w przypadku rysunk�w) za pomocą og�lnie dostępnego edytora rysunk�w. Ponadto kopia ta stanowi odpowiednie dane wejściowe dla program�w formatujących tekst lub dla program�w konwertujących do r�żnych format�w odpowiednich dla program�w formatujących tekst. Kopia spełniająca powyższe warunki, w kt�rej jednak zostały wstawione znaczniki mające na celu utrudnienie dalszych modyfikacji przez czytelnik�w, nie jest Jawna. Kopię, kt�ra nie jest "Jawna", nazywa się "Niejawną".
Przykładowe formaty kopii Jawnych to: czysty tekst ASCII bez znacznik�w, format wejściowy Texinfo, format wejściowy LaTeX, SGML lub XML wykorzystujące publicznie dostępne DTD, standardowy prosty HTML przeznaczony do ręcznej modyfikacji. Formaty niejawne to na przykład PostScript, PDF, formaty własne, kt�re mogą być odczytywane i edytowane jedynie przez własne edytory tekstu, SGML lub XML, dla kt�rych DTD i/lub narzędzia przetwarzające nie są og�lnie dostępne, oraz HTML wygenerowany maszynowo przez niekt�re procesory tekstu jedynie w celu uzyskania danych wynikowych.
"Strona tytułowa" oznacza, w przypadku książki drukowanej, samą stronę tytułową oraz kolejne strony zawierające informacje, kt�re zgodnie z tą Licencją muszą pojawić się na stronie tytułowej. W przypadku prac w formatach nieposiadających strony tytułowej "Strona tytułowa" oznacza tekst pojawiający się najbliżej tytułu pracy, poprzedzający początek tekstu głï¿½wnego.
Licencjobiorca może kopiować i rozprowadzać Dokument komercyjnie lub niekomercyjnie, w dowolnej postaci, pod warunkiem zamieszczenia na każdej kopii Dokumentu treści Licencji, informacji o prawie autorskim oraz noty m�wiącej, że do Dokumentu ma zastosowanie niniejsza Licencja, a także pod warunkiem nie umieszczania żadnych dodatkowych ograniczeń, kt�re nie wynikają z Licencji. Licencjobiorca nie ma prawa używać żadnych technicznych metod pomiarowych utrudniających lub kontrolujących czytanie lub dalsze kopiowanie utworzonych i rozpowszechnianych przez siebie kopii. Może jednak pobierać opłaty za udostępnianie kopii. W przypadku dystrybucji dużej liczby kopii Licencjobiorca jest zobowiązany przestrzegać warunk�w wymienionych w punkcie 3.
Licencjobiorca może także wypożyczać kopie na warunkach opisanych powyżej, a także wystawiać je publicznie.
Jeżeli Licencjobiorca publikuje drukowane kopie Dokumentu w liczbie większej niż 100, a licencja Dokumentu wymaga umieszczenia Treści okładki, należy dołączyć kopie okładek, kt�re zawierają całą wyraźną i czytelną Treść okładki: treść przedniej okładki, na przedniej okładce, a treść tylnej okładki, na tylnej okładce. Obie okładki muszą też jasno i czytelnie informować o Licencjobiorcy jako wydawcy tych kopii. Okładka przednia musi przedstawiać pełny tytuł; wszystkie słowa muszą być r�wnie dobrze widoczne i czytelne. Licencjobiorca może na okładkach umieszczać także inne informacje dodatkowe. Kopiowanie ze zmianami ograniczonymi do okładek, dop�ki nie narusza tytułu Dokumentu i spełnia opisane warunki, może być traktowane pod innymi względami jako kopiowanie dosłowne.
Jeżeli napisy wymagane na kt�rejś z okładek są zbyt obszerne, by mogły pozostać czytelne po ich umieszczeniu, Licencjobiorca powinien umieścić ich początek(taką ilość, jaka wydaje się rozsądna) na rzeczywistej okładce, a pozostałą część na sąsiednich stronach.
W przypadku publikowania lub rozpowszechniania Niejawnych kopii Dokumentu w liczbie większej niż 100, Licencjobiorca zobowiązany jest albo dołączyć do każdej z nich Jawną kopię czytelną dla komputera, albo wymienić w lub przy każdej kopii Niejawnej publicznie dostępną w sieci komputerowej lokalizację pełnej kopii Jawnej Dokumentu, bez żadnych informacji dodanych -- lokalizację, do kt�rej każdy użytkownik sieci miałby bezpłatny anonimowy dostęp za pomocą standardowych publicznych protokołï¿½w sieciowych. W przypadku drugim Licencjobiorca musi podjąć odpowiednie środki ostrożności, by wymieniona kopia Jawna pozostała dostępna we wskazanej lokalizacji przynajmniej przez rok od momentu rozpowszechnienia ostatniej kopii Niejawnej (bezpośredniego lub przez agent�w albo sprzedawc�w) danego wydania.
Zaleca się, choć nie wymaga, aby przed rozpoczęciem rozpowszechniania dużej liczby kopii Dokumentu, Licencjobiorca skontaktował się z jego autorami celem uzyskania uaktualnionej wersji Dokumentu.
Licencjobiorca może kopiować i rozpowszechniać Zmodyfikowaną wersję Dokumentu na zasadach wymienionych powyżej w punkcie 2 i 3 pod warunkiem ścisłego przestrzegania niniejszej Licencji. Zmodyfikowana wersja pełni wtedy rolę Dokumentu, a więc Licencja dotycząca modyfikacji i rozpowszechniania Zmodyfikowanej wersji przenoszona jest na każdego, kto posiada jej kopię. Ponadto Licencjobiorca musi w stosunku do Zmodyfikowanej wersji spełnić następujące wymogi:
A. Użyć na Stronie tytułowej (i na okładkach, o ile istnieją) tytułu innego niż tytuł Dokumentu i innego niż tytuły poprzednich wersji (kt�re, o ile istniały, powinny zostać wymienione w Dokumencie, w sekcji Historia). Tytułu jednej z ostatnich wersji Licencjobiorca może użyć, jeżeli jej wydawca wyrazi na to zgodę.
B. Wymienić na Stronie tytułowej, jako autor�w, jedną lub kilka os�b albo jednostek odpowiedzialnych za autorstwo modyfikacji Zmodyfikowanej wersji, a także przynajmniej pięciu spośr�d pierwotnych autor�w Dokumentu (wszystkich, jeśli było ich mniej niż pięciu).
C. Umieścić na Stronie tytułowej nazwę wydawcy Zmodyfikowanej wersji.
D. Zachować wszelkie noty o prawach autorskich zawarte w Dokumencie.
E. Dodać odpowiednią notę o prawach autorskich dotyczących modyfikacji obok innych not o prawach autorskich.
F. Bezpośrednio po notach o prawach autorskich, zamieścić notę licencyjną zezwalającą na publiczne użytkowanie Zmodyfikowanej wersji na zasadach niniejszej Licencji w postaci podanej w Załączniku poniżej.
G. Zachować w nocie licencyjnej pełną listę Sekcji niezmiennych i wymaganych Treści okładki podanych w nocie licencyjnej Dokumentu.
H. Dołączyć niezmienioną kopię niniejszej Licencji.
I. Zachować sekcję zatytułowaną "Historia" oraz jej tytuł i dodać do niej informację dotyczącą przynajmniej tytułu, roku publikacji, nowych autor�w i wydawcy Zmodyfikowanej wersji zgodnie z danymi zamieszczonymi na Stronie tytułowej. Jeżeli w Dokumencie nie istnieje sekcja pod tytułem "Historia", należy ją utworzyć, podając tytuł, rok, autor�w i wydawcę Dokumentu zgodnie z danymi zamieszczonymi na stronie tytułowej, a następnie dodając informację dotyczącą Zmodyfikowanej wersji, jak opisano w poprzednim zdaniu.
J. Zachować wymienioną w Dokumencie (jeśli taka istniała) informację o lokalizacji sieciowej, publicznie dostępnej Jawnej kopii Dokumentu, a także o podanych w Dokumencie lokalizacjach sieciowych poprzednich wersji, na kt�rych został on oparty. Informacje te mogą się znajdować w sekcji "Historia". Zezwala się na pominięcie lokalizacji sieciowej prac, kt�re zostały wydane przynajmniej cztery lata przed samym Dokumentem, a także tych, kt�rych pierwotny wydawca wyraża na to zgodę.
K. W każdej sekcji zatytułowanej "Podziękowania" lub "Dedykacje" zachować tytuł i treść, oddając r�wnież ton każdego z podziękowań i dedykacji.
L. Zachować wszelkie Sekcje niezmienne Dokumentu w niezmienionej postaci (dotyczy zar�wno treści, jak i tytułu). Numery sekcji i r�wnoważne im oznaczenia nie są traktowane jako należące do tytułï¿½w sekcji.
M. Usunąć wszelkie sekcje zatytułowane "Adnotacje". Nie muszą one być załączane w Zmodyfikowanej wersji.
N. Nie nadawać żadnej z istniejących sekcji tytułu "Adnotacje" ani tytułu pokrywającego się z jakąkolwiek Sekcją niezmienną.
Jeżeli Zmodyfikowana wersja zawiera nowe sekcje początkowe lub dodatki stanowiące Sekcje drugorzędne i nie zawierające materiału skopiowanego z Dokumentu, Licencjobiorca może je lub ich część oznaczyć jako sekcje niezmienne. W tym celu musi on dodać ich tytuły do listy Sekcji niezmiennych zawartej w nocie licencyjnej Zmodyfikowanej wersji. Tytuły te muszą być r�żne od tytułï¿½w pozostałych sekcji.
Licencjobiorca może dodać sekcję "Adnotacje", pod warunkiem, że nie zawiera ona żadnych treści innych niż adnotacje dotyczące Zmodyfikowanej wersji -- mogą to być na przykład stwierdzenia o recenzji koleżeńskiej albo o akceptacji tekstu przez organizację jako autorytatywnej definicji standardu.
Na końcu listy Treści okładki w Zmodyfikowanej wersji, Licencjobiorca może dodać fragment "do umieszczenia na przedniej okładce" o długości nie przekraczającej pięciu słï¿½w, a także fragment o długości do 25 słï¿½w "do umieszczenia na tylnej okładce". Przez każdą jednostkę (lub na mocy ustaleń przez nią poczynionych) może zostać dodany tylko jeden fragment z przeznaczeniem na przednią okładkę i jeden z przeznaczeniem na tylną. Jeżeli Dokument zawiera już treść okładki dla danej okładki, dodaną uprzednio przez Licencjobiorcę lub w ramach ustaleń z jednostką, w imieniu kt�rej działa Licencjobiorca, nowa treść okładki nie może zostać dodana. Dopuszcza się jednak zastąpienie poprzedniej treści okładki nową pod warunkiem wyraźnej zgody poprzedniego wydawcy, od kt�rego stara treść pochodzi.
Niniejsza Licencja nie oznacza, iż autor (autorzy) i wydawca (wydawcy) wyrażają zgodę na publiczne używanie ich nazwisk w celu zapewnienia autorytetu jakiejkolwiek Zmodyfikowanej wersji.
Licencjobiorca może łączyć Dokument z innymi dokumentami wydanymi na warunkach niniejszej Licencji, na warunkach podanych dla wersji zmodyfikowanych w części 4 powyżej, jednak tylko wtedy, gdy w połączeniu zostaną zawarte wszystkie Sekcje niezmienne wszystkich oryginalnych dokument�w w postaci niezmodyfikowanej i gdy będą one wymienione jako Sekcje niezmienne połączenia w jego nocie licencyjnej.
Połączenie wymaga tylko jednej kopii niniejszej Licencji, a kilka identycznych Sekcji niezmiennych może zostać zastąpionych jedną. Jeżeli istnieje kilka Sekcji niezmiennych o tym samym tytule, ale r�żnej zawartości, Licencjobiorca jest zobowiązany uczynić tytuł każdej z nich unikalnym poprzez dodanie na jego końcu, w nawiasach, nazwy oryginalnego autora lub wydawcy danej sekcji, o ile jest znany, lub unikalnego numeru. Podobne poprawki wymagane są w tytułach sekcji na liście Sekcji niezmiennych w nocie licencyjnej połączenia.
W połączeniu Licencjobiorca musi zawrzeć wszystkie sekcje zatytułowane "Historia" z dokument�w oryginalnych, tworząc jedną sekcję "Historia". Podobnie ma postąpić z sekcjami "Podziękowania" i "Dedykacje". Wszystkie sekcje zatytułowane "Adnotacje" należy usunąć.
Licencjobiorca może utworzyć zbi�r składający się z Dokumentu i innych dokument�w wydanych zgodnie z niniejszą Licencją i zastąpić poszczeg�lne kopie Licencji pochodzące z tych dokument�w jedną kopią dołączoną do zbioru, pod warunkiem zachowania zasad Licencji dotyczących kopii dosłownych we wszelkich innych aspektach każdego z dokument�w.
Z takiego zbioru Licencjobiorca może wyodrębnić pojedynczy dokument i rozpowszechniać go niezależnie na zasadach niniejszej Licencji, pod warunkiem zamieszczenia w wyodrębnionym dokumencie kopii niniejszej Licencji oraz zachowania zasad Licencji we wszystkich aspektach dotyczących dosłownej kopii tego dokumentu.
Kompilacja Dokumentu lub jego pochodnych z innymi oddzielnymi i niezależnymi dokumentami lub pracami nie jest uznawana za Zmodyfikowaną wersję Dokumentu, chyba że odnoszą się do niej jako do całości prawa autorskie. Taka kompilacja jest nazywana zestawieniem, a niniejsza Licencja nie dotyczy samodzielnych prac skompilowanych z Dokumentem, jeśli nie są to pochodne Dokumentu.
Jeżeli do kopii Dokumentu odnoszą się wymagania dotyczące Treści okładki wymienione w części 3 i jeżeli Dokument stanowi mniej niż jedną czwartą całości zestawienia, Treść okładki Dokumentu może być umieszczona na okładkach zamykających Dokument w obrębie zestawienia. W przeciwnym razie Treść okładki musi się pojawić na okładkach całego zestawienia.
Tłumaczenie jest uznawane za rodzaj modyfikacji, a więc Licencjobiorca może rozpowszechniać tłumaczenia Dokumentu na zasadach wymienionych w punkcie 4. Zastąpienie Sekcji niezmiennych ich tłumaczeniem wymaga specjalnej zgody właścicieli prawa autorskiego. Dopuszcza się jednak zamieszczanie tłumaczeń wybranych lub wszystkich Sekcji niezmiennych obok ich wersji oryginalnych. Podanie tłumaczenia niniejszej Licencji możliwe jest pod warunkiem zamieszczenia także jej oryginalnej wersji angielskiej. W przypadku niezgodności pomiędzy zamieszczonym tłumaczeniem a oryginalną wersją angielską niniejszej Licencji moc prawną ma oryginalna wersja angielska.
Poza przypadkami jednoznacznie dopuszczonymi na warunkach niniejszej Licencji nie zezwala się Licencjobiorcy na kopiowanie, modyfikowanie, czy rozpowszechnianie Dokumentu ani też na cedowanie praw licencyjnych. We wszystkich pozostałych wypadkach każda pr�ba kopiowania, modyfikowania lub rozpowszechniania Dokumentu albo cedowania praw licencyjnych jest nieważna i powoduje automatyczne wygaśnięcie praw, kt�re licencjobiorca nabył z tytułu Licencji. Niemniej jednak w odniesieniu do stron, kt�re już otrzymały od Licencjobiorcy kopie albo prawa w ramach niniejszej Licencji, licencje nie zostaną anulowane, dop�ki strony te w pełni się do nich stosują.
W miarę potrzeby Free Software Foundation może publikować nowe poprawione wersje GNU Free Documenation License. Wersje te muszą pozostawać w duchu podobnym do wersji obecnej, choć mogą się r�żnić w szczeg�łach dotyczących nowych problem�w czy zagadnień. Patrz http://www.gnu.org/copyleft/. Każdej wersji niniejszej Licencji nadaje się wyr�żniający ją numer. Jeżeli w Dokumencie podaje się numer wersji Licencji, oznaczający, iż odnosi się do niego podana "lub jakakolwiek p�źniejsza" wersja licencji, Licencjobiorca ma do wyboru stosować się do postanowień i warunk�w albo tej wersji, albo kt�rejkolwiek wersji p�źniejszej opublikowanej oficjalnie (nie jako propozycja) przez Free Software Foundation. Jeśli Dokument nie podaje numeru wersji niniejszej Licencji, Licencjobiorca może wybrać dowolną wersję kiedykolwiek opublikowaną (nie jako propozycja) przez Free Software Foundation.
Załącznik: Jak zastosować tę Licencję dla swojego dokumentu.
Aby zastosować tę Licencję w stosunku do dokumentu swojego autorstwa, dołącz kopię Licencji do dokumentu i zamieść następującą informację o prawach autorskich i uwagi o licencji bezpośrednio po stronie tytułowej.
Copyright (c) ROK TWOJE IMIE I NAZWISKO Udziela się zezwolenia do kopiowania rozpowszechniania i/lub modyfikację tego dokumentu zgodnie z zasadami Licencji GNU Wolnej Dokumentacji w wersji 1.1 lub dowolnej p�źniejszej opublikowanej przez Free Software Foundation; wraz z zawartymi Sekcjami Niezmiennymi LISTA TYTUŁï¿½W SEKCJI, wraz z Tekstem na Przedniej Okładce LISTA i z Tekstem na Tylnej Okładce LISTA. Kopia licencji załączona jest w sekcji zatytułowanej "GNU Free Documentation License"
Jeśli nie zamieszczasz Sekcji Niezmiennych, napisz "nie zawiera Sekcji Niezmiennych" zamiast spisu sekcji niezmiennych. Jeśli nie umieszczasz Teksu na Przedniej Okładce wpisz "bez Tekstu na Okładce" w miejsce "wraz z Tekstem na Przedniej Okładce LISTA", analogicznie postąp z "Tekstem na Tylnej Okładce"
Jeśli w twoim dokumencie zawarte są nieszablonowe przykłady kodu programu, zalecamy abyś także uwolnił te przykłady wybierając licencję wolnego oprogramowania, taką jak Powszechna Licencja Publiczna GNU, w celu zapewnienia możliwości ich użycia w wolnym oprogramowaniu.