PLD Linux Distribution

Transkrypt

PLD Linux Distribution
PLD Linux Distribution
Podrecznik
˛
użytkownika, administratora i twórcy
PLD Linux Distribution: Podrecznik
˛
użytkownika, administratora i twórcy
Podr˛ecznik użytkownika, administratora systemu i twórcy PLD Linux Distribution Wydanie
Historia zmian
Zmiana $Rev: 9157 $
prawie beta
Spis treści
I. Informacje podstawowe...................................................................................................1
1. Wprowadzenie..........................................................................................................1
Streszczenie .........................................................................................................1
Konwencje użyte w tej ksia˛żce .........................................................................1
O tym podr˛eczniku.............................................................................................1
Krótka historia PLD............................................................................................2
Informacje o PLD ................................................................................................2
Oficjalne wersje PLD ..........................................................................................5
Model rozwoju PLD Linux Distribution .........................................................5
Projekty zwiazane
˛
z PLD...................................................................................7
2. Zasoby sieciowe PLD...............................................................................................9
Ważne adresy ......................................................................................................9
Źródła obrazów ISO ...........................................................................................9
Serwery z pakietami...........................................................................................9
3. Historia powstania naszego logo.........................................................................13
Wst˛ep..................................................................................................................13
Loga duże ..........................................................................................................13
Ikony do umieszczania na stronach WWW..................................................15
Ikony stworzone przez użytkowników ........................................................16
Galeria rysunków Karola Kreńskiego ...........................................................17
II. Instalacja..........................................................................................................................19
4. Instalacja systemu ..................................................................................................19
Wymagania........................................................................................................19
Przygotowanie ..................................................................................................19
Instalacja.............................................................................................................20
Po instalacji ........................................................................................................32
5. Instalacja przy użyciu chroota..............................................................................35
Wst˛ep..................................................................................................................35
Przygotowanie ..................................................................................................35
Instalacja.............................................................................................................37
Konta użytkowników ......................................................................................39
Operacje końcowe ............................................................................................40
6. Aktualizacje.............................................................................................................41
Aktualizacja z Ra do Ac...................................................................................41
III. Podr˛ecznik użytkownika............................................................................................43
7. Podstawy .................................................................................................................43
Wst˛ep..................................................................................................................43
Właczanie
˛
i wyłaczanie
˛
systemu ....................................................................43
Podstawowe operacje na plikach i katalogach.............................................43
Poruszanie si˛e w drzewie katalogów ............................................................44
Data i czas ..........................................................................................................45
Edycja plików konfiguracyjnych....................................................................46
Podstawowe narz˛edzia kontroli sieci TCP/IP .............................................46
Proxy...................................................................................................................48
8. Zasoby systemu ......................................................................................................49
Ilość miejsca na dysku......................................................................................49
Procesy i zasoby ................................................................................................49
Jak sprawdzić kto jest zalogowany oprócz nas? ..........................................51
IV. Podr˛ecznik administratora .........................................................................................53
9. Zarzadzanie
˛
pakietami..........................................................................................53
Informacje podstawowe ..................................................................................53
Cechy pakietów w PLD ...................................................................................54
Architektury pakietów.....................................................................................58
Źródła pakietów................................................................................................60
Budowanie pakietów .......................................................................................61
Poldek.................................................................................................................62
iii
RPM ....................................................................................................................66
Bezpieczeństwo.................................................................................................68
Zaawansowane operacje..................................................................................69
10. Bootloader .............................................................................................................73
Wst˛ep..................................................................................................................73
LILO....................................................................................................................75
GRUB..................................................................................................................77
rc-boot.................................................................................................................80
11. Kernel i urzadzenia..............................................................................................83
˛
Jadro
˛
systemu....................................................................................................83
Parametry jadra.................................................................................................85
˛
Moduły jadra
˛
.....................................................................................................85
Statyczne zarzadzanie
˛
modułami ..................................................................87
Udev - dynamiczna obsługa sprz˛etu .............................................................89
Initrd ...................................................................................................................91
Urzadzenia.........................................................................................................94
˛
12. Konfiguracja systemu ..........................................................................................97
Podstawowe ustawienia ..................................................................................97
Ustawienia konsoli ...........................................................................................98
Internacjonalizacja ............................................................................................99
Myszka pod konsola˛ ......................................................................................100
Strefa czasowa .................................................................................................102
Zegar.................................................................................................................103
Zmienne środowiskowe ................................................................................103
PLDconf - Narz˛edzie do konfiguracji systemu ..........................................104
Kluczowe pliki ................................................................................................105
13. Pami˛eci masowe .................................................................................................109
Wst˛ep................................................................................................................109
Nazewnictwo urzadze
˛
ń masowych.............................................................109
Podział na partycje .........................................................................................110
Systemy plików...............................................................................................112
Formatowanie .................................................................................................114
RAID programowy.........................................................................................114
LVM ..................................................................................................................120
Naprawa ..........................................................................................................122
14. Administracja......................................................................................................125
Ratowanie systemu ........................................................................................125
Zarzadzanie
˛
podsystemami i usługami ......................................................127
Zmiana poziomu pracy systemu..................................................................131
Konta użytkowników ....................................................................................132
Grupy ...............................................................................................................134
Zarzadzanie
˛
uprawnieniami.........................................................................135
Bezpieczeństwo...............................................................................................137
15. Interfejsy sieciowe ..............................................................................................139
Wst˛ep................................................................................................................139
Podstawowa konfiguracja sieci ....................................................................139
Ethernet ............................................................................................................141
WiFi...................................................................................................................142
Neostrada+ z modemem USB firmy Sagem ...............................................146
Neostrada+ z modemem USB firmy Alcatel - Thompson........................148
xDSL z interfejsem Ethernet..........................................................................151
Zaawansowane opcje interfejsów ................................................................152
16. Zastosowania sieciowe ......................................................................................155
Routing statyczny ...........................................................................................155
NAT...................................................................................................................156
Podział łacza
˛
w zależności od serwisów.....................................................157
PPP over SSH - Tunel IPv4 ............................................................................160
VTun - Tunel IPv4 ...........................................................................................163
Narz˛edzia sieciowe.........................................................................................167
17. Usługi dost˛epne w PLD ....................................................................................173
iv
Usługi - wst˛ep .................................................................................................173
ALSA - Dźwi˛ek w Linuksie...........................................................................173
Apache - Serwer stron internetowych .........................................................178
BIND - Serwer Nazw .....................................................................................186
CRON - Cykliczne wykonywanie zadań ....................................................193
CUPS - Popularny system druku dla Uniksa .............................................196
DHCPD - Dynamic Host Configuration Protocol Daemon......................201
Exim - Transport poczty elektronicznej (MTA) ..........................................203
Heimdal - Implementacja protokołu Kerberos...........................................216
Jabber 2 - Serwer typu Instant Messaging ..................................................221
MySQL - System Zarzadzania
˛
Relacyjnymi Bazami Danych (ang.
RDBMS) ..................................................................................................225
NFS - Network File System ...........................................................................230
PDNS (Power DNS) - Serwer Nazw ............................................................233
Postfix - Transport poczty elektronicznej (MTA) .......................................237
PostgreSQL - Baza danych SQL....................................................................244
ProFTPD - serwer FTP ...................................................................................247
Samba - współpraca z Windows ..................................................................250
Snort - Sieciowy System Wykrywania Włamań.........................................255
Syslog-ng..........................................................................................................265
18. X-Window ...........................................................................................................271
Wst˛ep................................................................................................................271
X-Server............................................................................................................271
Zaawansowane ...............................................................................................273
Środowisko GNOME .....................................................................................277
Środowisko KDE.............................................................................................279
Blackbox - Szybki i lekki zarzadca
˛
okien ....................................................280
Fluxbox - Nast˛epca BlackBoxa......................................................................281
Uruchamianie środowiska graficznego.......................................................282
Karty firmy nVidia..........................................................................................284
Karty firmy ATI...............................................................................................285
V. Tworzenie PLD - Praktyczny poradnik ...................................................................287
19. Możliwa droga do zostania szeregowym developerem PLD......................287
Co jest potrzebne ............................................................................................287
Źródła wiedzy .................................................................................................287
Przykład budowania ......................................................................................288
Pierwszy spec ..................................................................................................290
20. W krainie CVS - czyli wielki kocioł .................................................................299
Wst˛ep................................................................................................................299
Dodawanie plików do CVS PLD..................................................................301
Aktualizacja plików........................................................................................301
Zatwierdzanie zmian i Distfiles....................................................................301
Odnogi (Branche) i Etykiety (Tag)................................................................302
Zlecenia dla builderów ..................................................................................304
Zakończenie.....................................................................................................304
VI. O podr˛eczniku ..............................................................................................................??
21. O podr˛eczniku ....................................................................................................305
Autorzy dokumentacji PLD ..........................................................................305
22. Licencja i prawa autorskie ................................................................................307
Tłumaczenie Licencji GNU Wolnej Dokumentacji ....................................307
v
vi
Rozdział 1. Wprowadzenie
Streszczenie
Dzi˛ekujemy za zainteresowanie si˛e PLD Linux Distribution!
W tym rozdziale przedstawione zostana˛ różne aspekty dotyczace
˛ projektu PLD, takie
jak jego historia, cele, model rozwoju, itp.
Konwencje użyte w tej ksiażce
˛
Aby jak najlepiej zrozumieć i przyswoić informacje zawarte w tym podr˛eczniku, warto zapoznać si˛e wpierw z użytymi konwencjami.
$ komenda
W ten sposób opisywane sa˛ komendy, które wykonać możemy z uprawnieniami
użytkownika.
# komenda
Tutaj natomiast przedstawiona została komenda, która˛ należy wykonać z poziomu
użytkownika root, czyli administratora.
Zbyt długie linie zrzutów ekranowych, które nie mieszcza˛ si˛e w jednej linii, podzielone sa˛ przy pomocy znaku \. Czyli:
# komenda z_bardzo_\
długim_parametrem
należy zinterpretować jako:
# komenda z_bardzo_długim_parametrem
W dokumentacji dosyć cz˛esto korzysta si˛e z nast˛epujacej
˛ konstrukcji:
{$zmienna}
Tak oznaczane sa˛ miejsca, w których użytkownik może lub musi samodzielnie dokonać wyboru i wstawić w miejsce ciagu
˛ znaków {$zmienna} odpowiednia˛ wartość.
Niejdnokrotnie w nazwach plików pojawia si˛e znak "gwiazdki", który należy odczytywać podobnie jak robi to powłoka (shell), a wi˛ec zast˛epuje dowolny ciag
˛ znaków,
przykładowo:
/katalog/plik.*
oznacza wszytskie pliki zaczynjace
˛ si˛e od plik. w katalogu /katalog.
O tym podreczniku
˛
Celem tego podr˛ecznika jest pomoc w zainstalowaniu PLD Linux Distribution na
Twojej maszynie. Nie jest to i nigdy nie b˛edzie zamiennik dokumentacji systemowej.
1
Rozdział 1. Wprowadzenie
Jeśli b˛edzie to Twoja pierwsza instalacja Linuksa, goraco
˛ zach˛ecamy Ci˛e do przeczytania wpierw tego podr˛ecznika. Nawet jeśli jesteś doświadczonym użytkownikiem,
warto przestudiować instrukcje dotyczace
˛ instalacji, aby upewnić si˛e, że wszystko
pójdzie gładko.
Oprócz niniejszej dokumentacji możemy szukać pomocy w wielu innych miejscach.
Pr˛eżnie działaja˛ listy dyskusyjne oraz oficjalne kanały IRC (#PLD i #PLDhelp). Na
cz˛esto zadawane pytania (FAQ) odpowiedzi można znaleźć na głównej stronie
WWW.
Jeśli uważasz, że dokumentacja jest niepełna, znalazłeś bł˛edy, lub chciałbyś
do nas dołaczyć
˛
prosimy o wysłanie informacji na list˛e dyskusyjna˛
<[email protected]> lub o kontakt z jednym z autorów dokumentacji,
których list˛e zamieszczono w sekcja Autorzy dokumentacji PLD w Rozdział 21
Krótka historia 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ż takowa˛ robia.˛ Nic jednak z tego nie wynikało. Wreszcie, w lipcu 1998,
zawiazał
˛
si˛e projekt majacy
˛ na celu stworzenie polskiej dystrybucji Linuxa. Projekt
PLD, czyli Polish(ed) Linux Distribution, był na tyle dobrze zorganizowany, by przetrwać trudne poczatki.
˛
Nie obeszło si˛e oczywiście bez burzliwych dyskusji na temat
kształtu dystrybucji, doboru oprogramowania jak również wersji jadra,
˛
na której projekt ma być rozwijany. W efekcie zdecydowano si˛e prowadzić równolegle dwa projekty. Pierwszy został nazwany PLD-devel i był forpoczta˛ 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˛e Wojtek Ślusarczyk, Andrzej Nakonieczny oraz Marcin Korzonek. Tomasz
Kłoczko postanowił kontynuować prace nad PLD, gromadzac
˛ wokół siebie coraz to
wi˛eksza˛ liczb˛e developerów. Pojawiła si˛e domena pld.org.pl, a wraz z nia˛ liczne adresy "funkcjonalne", takie jak ftp.pld.org.pl, www.pld.org.pl czy cvs.pld.org.pl. Ruch
na listach mailingowych stawał si˛e coraz wi˛ekszy, 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˛eły si˛e prace
nad kolejna˛ wersja.˛
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˛e 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˛ecie nazwa "PLD" stała si˛e 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 nieustajacych
˛
aktualizacji oprogramowania. Taki model
rozwoju dystrybucji okazał si˛e na tyle wygodny, że postanowiono by kolejne wydanie miały być rozwijane bez końca. Oznacza to, że na razie nie sa˛ planowane żadne
kolejne wydania, a do stabilnej gał˛ezi pakietów nieprzerwanie trafiaja˛ aktualizacje.
2
Rozdział 1. Wprowadzenie
Informacje o PLD
Podstawowe informacje
PLD-Linux jest dystrybucja˛ rozwijana˛ głównie w Polsce. Jest to produkt grupy entuzjastów Linuksa chcacej
˛ stworzyć system operacyjny dopasowany do własnych
potrzeb. Aktualnie rozwojem dystrybucji interesuje si˛e 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˛eki temu powstała jedna z najwi˛ekszych dystrybucji Linuksa, w trakcie prac nad druga˛
wersja˛ systemu (Ac) ilość dost˛epnych pakietów zbliżyła si˛e do trzynastu tysi˛ecy.
Założenia PLD
Jedna˛ z najwi˛ekszych bolaczek
˛
administratorów jest chroniczny brak czasu, dlatego
bardzo istotne jest zminimalizowanie nakładu pracy przy codziennych zaj˛eciach administracyjnych. Majac
˛ to na uwadze, stworzono dystrybucj˛e, 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 zarzadzaniu
˛
system
produkcyjny. Założono, że administrator nie może tracić czasu na kompilacj˛e jadra,
˛
programów czy też pisania rc-skryptów.
PLD jest uniwersalna˛ i elastyczna˛ dystrybucja,˛ dzi˛eki czemu sprawdzi si˛e w różnorodnych zastosowaniach. Przy jej tworzeniu, główny nacisk jest jednak kładziony na
niezawodne działanie usług. Utarło si˛e nawet powiedzenie, że PLD jest dystrybucja˛
tworzona˛ przez administratorów dla administratorów, mamy wi˛ec do czynienia z systemem dobrze przygotowanym do pracy w roli serwera.
Nie oznacza to bynajmniej, że PLD nie nadaje si˛e na system dla stacji roboczej, doskonale sprawdza si˛e również w tym zastosowaniu. Zwykły użytkownik nie znajdzie tu
wielu ułatwiajacych
˛
życie poczatkuj
˛
acym
˛
narz˛edzi, aby używać PLD konieczna jest
solidna porcja wiedzy. Mamy nadziej˛e, że niniejszy podr˛ecznik b˛edzie pomocny w
jej zdobyciu.
Poniżej przedstawiono zestawienie najciekawszych cech systemu.
System
•
w systemie dost˛epne sa˛ silnie zmodularyzowane jadra,
˛
dzi˛eki czemu w ogromnej wi˛ekszoś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.
•
podobna˛ koncepcja˛ do rc-inetd kierowano si˛e w tworzeniu pakietu rc-boot, pozwala on na łatwe zarzadzania
˛
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 zwiazany
˛
z termcapem)
•
uporzadkowane
˛
rozmieszczenia plików w gał˛ezi /usr - żaden pakiet dystrybucyjny nie umieszcza plików w katalogach wewnatrz
˛ /usr/local
3
Rozdział 1. Wprowadzenie
Bezpieczeństwo
•
domyślne jadro
˛
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ża˛ rol˛e 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˛e różnych serwisów na wersje skerberyzowane czy też wykorzystujace
˛ inne mechanizmy jak np. socks5 (tutaj jeszcze jest mało
zrobione, ale furtka jest szeroko i jednoznacznie otwarta)
•
mechanizm sys-chroot ułatwiajacy
˛ zarzadzanie
˛
środowiskami typu chroot oraz
dobre wsparcie dla środowisk Linux VServer
Sieć
•
PLD posiada najlepsza˛ obsług˛e przyszłościowego protokołu IPv6 z pośród innych
dystrybucji Linuksa.
•
używanie iproute2 jako podstawowego narz˛edzia do operowania na interfejsach
sieciowych, dzi˛eki czemu np. skrypty startowe z PLD sa˛ prostsze i krótsze mimo
wi˛ekszej funkcjonalności w stosunku do swoich odpowiedników z RH; inna˛ zaleta˛ jest wsteczna kompatybilność z opisem interfejsów sieciowych z tym, co jest
stosowane w initscripts z RH; kolejna˛ cecha˛ skryptów startowych jest to, że -- w
zależności od preferencji użytkownika -- moga˛ one wyświetlać wszystkie komunikaty po polsku
•
PLD zawiera rc-inetd - interfejs do zarzadzania
˛
usługami typu inetd. Pozwala zarzadzać
˛
takimi usługami (np.: telnetd, cvs-pserver) bez znaczenia jakiego typu demon inetd jest używany
Pakiety
4
•
PLD zawiera ogromne ilości gotowych, binarnych pakietów; pozwala to uniknać
˛
instalacji oprogramowania spoza dystrybucji
•
w dystrybucji używane sa˛ pakiety typu RPM, do zarzadzania
˛
nimi stworzono program o swojsko brzmiacej
˛ nazwie Poldek, można też używać klasycznego programu RPM
•
możliwość samodzielnego budowania pakietów RPM pozwoli na łatwe skompilowanie pakietu z nietypowa˛ funkcjonalnościa˛
•
znaczna liczba programów podzielona jest na mniejsze pakiety, pozwalajace
˛ instalować tylko te elementy systemu, które sa˛ akurat potrzebne
•
pakiety cz˛esto sa˛ wst˛epnie skonfigurowane i gotowe do działania, ponadto nakładane sa˛ na nie istotne łaty
•
w PLD nie sa˛ faworyzowane żadne z usług czy programów. To czego używamy
zależy tylko od nas
Rozdział 1. Wprowadzenie
•
pełne przygotowanie pakietów do automatycznego uaktualnienia. Pakiety z RH
kompletnie nie sa˛ na to przygotowane. Przygotowanie to wia˛że si˛e z restartowaniem serwisów przy ich uaktualnieniu, odpowiednim przygotowywaniem procedur uaktualnienia w taki sposób, by umożliwić automatyczna˛ aktualizacj˛e 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świadczaja˛
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˛ezykach. W dużej cz˛eści robi si˛e to niejako przy okazji. Użytkownik może sobie skonfigurować i zainstalować wybrane oprogramowanie ze wsparciem dla preferowanego zestawu
j˛ezyków, np.: angielski i niemiecki czy też angielski i polski (zasoby dla innych j˛ezyków zostana˛ pomini˛ete). Tak unikalna˛ możliwość konfiguracji osiagamy
˛
dzi˛eki
konsekwentnemu oznaczaniu zasobów narodowych makrem %lang() w poszczególnych pakietach
Cechy użytkowe
•
PLD jest systemem przyjaznym dla programisty. Dost˛epne sa˛ narz˛edzia do tworzenia aplikacji w wielu j˛ezykach programowania. Dotyczy wielu "standardowych"
j˛ezyków programowania takich jak C, C++, Perl czy Python. Dost˛epne sa˛ też kompilatory do nieco mniej znanych j˛ezyków takich jak SML, Prolog, OCaml jak też
eksperymentalne kompilatory: Cyclone, Ksi. Dodatkowo mamy wybór wielu narz˛edzi programistycznych i bibliotek.
•
maksymalna automatyzacja różnych powtarzalnych czynności (dotyczy to zarówno metodologii bieżacej
˛ pracy jak i zawartości pakietów)
•
dystrybucja jest przystosowana do obsługi wielu j˛ezyków narodowych, a w tym
j˛ezyka 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 moga˛ być w
dystrybucji. W praktyce oznacza to, że użytkownik ma do dyspozycji wszystko,
co udało si˛e nam zebrać, Jeżeli coś zostanie opracowane i przystosowane do tego,
żeby mogło współgrać z reszta˛ pakietów, to znaczy, że komuś było potrzebne, wi˛ec
może komuś przydać si˛e w przyszłości
Oficjalne wersje PLD
W PLD wersjom dystrybucji1 nadawane numery oraz dwuliterowe oznaczenia kodowe, które pochodza˛ od skrótowych oznaczeń pierwiastków. Pierwszej wersji PLD
nadano oznaczenie Ra (Rad), zaś kolejne odpowiadaja˛ nazwom pierwiastków poukładanych zgodnie z kolejnościa˛ określona˛ przez ich liczb˛e atomowa.˛ Aktualnie
mmy trzy oficjalne wydania: Ra, Ac, Th, jest też nieoficjalny fork Titanium2 prowadzony przez jednego z deweloperów.
5
Rozdział 1. Wprowadzenie
Model rozwoju PLD Linux Distribution
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 posiadajacych
˛
prawo zapisu do repozytorium CVS (o którym poniżej), ale także użytkowników zgłaszaja˛
cych informacje o bł˛edach lub nadsyłajacych
˛
poprawki lub propozycje zmian. Z ch˛ecia˛ przyjmiemy nowych developerów, a osoby chcace
˛ być bardziej zwiazane
˛
z projektem powinny zapisać si˛e na list˛e dyskusyjna˛ developerów [email protected].
Informacje o PLD i sposobie jego rozwoju:
•
Repozytorium CVS
Źródła PLD Linux Distribution trzymane sa˛ w repozytorium CVS (Concurrent Versions System, http://www.cyclic.com/CVS/index.html), wolnodost˛epnym systemie kontroli wersji dostarczanym wraz z nasza˛ dystrybucja.˛ Serwer CVS PLD Linux Distribution (http://cvs.pld-linux.org/) jest dost˛epny 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ń commitujacym
˛
(określenie commit pochodzi
z podr˛ecznika systemowego cvs).
•
Serwer DistFiles
W zamierzchłych czasach wszystkie pliki (a wi˛ec 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 posiadajace
˛ stosunkowo wolne łacze
˛
zacz˛eła wrzucać kilkudziesi˛ecio megabajtowy plik, skutecznie blokujac
˛
możliwość pracy innym developerom na kilka godzin. Ucia˛żliwe były też pozostajace
˛ tzw. ’locki’, czyli blokady na modułach repozytorium (przede wszystkim
SOURCES/). Rozwiazaniem
˛
tych problemów było wprowadzenie w maju 2003 roku serwera DistFiles, do którego przeniesiono wi˛ekszość plików binarnych z CVS.
•
Core Developers Group
Gdyby PLD Linux Distribution było firma,˛ Core Developers Group najtrafniej
można by określić jako Rad˛e Nadzorcza.˛ Jej celem jest podejmowanie w sposób
demokratyczny krytycznych dla dystrybucji decyzji oraz rozwiazywanie
˛
konfliktów, których nie dało si˛e zażegnać w inny sposób. W skład Grupy
wchodza˛ developerzy aktywnie udzielajacy
˛ si˛e w projekcie.
•
Lista dyskusyjna [email protected]
Na liście tej prowadzone sa˛ dyskusje na temat bieżacych
˛
prac nad dystrybucja,˛
jak również ustalane sa˛ plany na przyszłość. Jeśli nie posiadasz prawa zapisu do
repozytorium, a chciałbyś podzielić si˛e efektami swych prac z innymi, lista ta jest
najlepszym miejscem na poinformowanie o tym fakcie.
•
Buildery
Mianem builderów określane sa˛ specjalnie przygotowane środowiska (cz˛esto na
dedykowanych maszynach), na których budowane sa˛ pakiety, które później zostana˛ umieszczone na serwerach FTP projektu. Każda z linii dystrybucji ma swoje
oddzielne buildery, stworzone z pakietów dla niej przeznaczonych.
6
Rozdział 1. Wprowadzenie
Nie wszyscy developerzy maja˛ prawo do puszczania zleceń na buildery, czyli rozkazów zbudowania poszczególnych pakietów - przywiliej ten ma ledwie garstka
osób, zaznajomionych z automatyka˛ oraz znajacych
˛
potrzeby danej dystrybucji.
Rzadko kiedy zachodzi potrzeba bezpośredniego grzebania w strukturze danego
środowiska - codzienna praca opiera si˛e na wysyłaniu odpowiednio przygotowanych maili, podpisanych kluczem PGP osoby uprawnionej.
Projekty zwiazane
˛
z PLD
•
Rescue CD
Jest to niewielka dystrybucja startujaca
˛ z płyty CD, bez konieczności instalacji
na twardym dysku. Zawiera zestaw wyspecjalizowanych narz˛edzi pomocnych w
przypadku usuwania awarii systemu. Rescue CD oparto o jadro
˛
PLD i wyposażono w zestaw najbardziej niezb˛ednych programów, dzi˛eki czemu udało si˛e uzyskać
niewielkie rozmiary dystrybucji. Pozwala to załadowanie całości do pami˛eci operacyjnej, a nast˛epnie a wyj˛ecie płyty CD z czytnika. Lista dost˛epnych programów
jest umieszczona na domowej stronie WWW projektu.
•
PLD Live CD http://livecd.pl/3
Pierwszy, oparty o PLD Ac projekt, majacy
˛ na celu stworzenie kompletnej dystrybucji Linuksa startujacej
˛ z płyty CD, zawiera znaczna˛ ilość narz˛edzi i programów
użytkowych. PLD Live jest przygotowane dla zwykłych użytkowników chcacych
˛
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
Przypisy
1. http://pld-linux.org/About
2. http://pld-linux.org/Titanium
3. http://livecd.pl
4. http://livecd.pld-linux.org
5. http://kde4.livecd.pld-linux.org/index.php
7
Rozdział 1. Wprowadzenie
8
Rozdział 2. Zasoby sieciowe PLD
Ważne adresy
•
Strona główna - http://pld-linux.org1
•
Dokumentacja - http://pl.docs.pld-linux.org
•
Listy dyskusyjne - http://lists.pld-linux.org3
•
Cz˛eściowe archiwa list dyskusyjnych - mail-archive.com4, Gmane5
•
Serwer IRC (freenode) http://irc.freenode.net
Serwer IRC (IRCnet) http://ircnet.org
Serwer PLDNet: irc.pld-linux.org
Istniejace
˛ 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 sa˛ połaczone
˛
za pomoca˛ specjalnego bota. Przydatny w takich przypadkach może być skrypt do programu irssi znajdujacy
˛ si˛e
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˛edzy sieciami.
•
System zgłaszania bł˛edów - http://bugs.pld-linux.org9
•
Rescue CD - http://rescuecd.pld-linux.org10
•
PLD Live CD - http://livecd.pld-linux.org11
Źródła obrazów ISO
Obrazy ISO sa˛ katalogowane wg. schematu {$serwer}/{$wersja}/{$arch} np.:
ftp.iso.pld-linux.org/2.0/i586. Wersje systemu szerzej opisano w sekcja Oficjalne wersje PLD w Rozdział 1, zaś architektury w sekcja Architektury pakietów w Rozdział 9.
Dla każdego z obrazów ISO dost˛epna jest suma MD5, umieszczona w pliku o rozszerzeniu md5. Dzi˛eki niej b˛edziemy 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˛e programem md5sum, zaś w systemach Microsoftu użyjemy dost˛epnego na serwerze programu md5sum.exe.
Serwery FTP z obrazami ISO:
•
TASK, Gdańsk, Polska - ftp://ftp.iso.pld-linux.org
9
Rozdział 2. Zasoby sieciowe PLD
Serwery z pakietami
Pakiety sa˛ 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 sekcja Oficjalne wersje PLD w Rozdział 1, źródła w sekcja Źródła pakietów w
Rozdział 9, zaś architektury w sekcja Architektury pakietów w Rozdział 9.
PLD możemy zainstalować z sieci za pomoca˛ protokołu FTP, HTTP lub RSYNC. Pakiety możemy pobierać z głównego serwera PLD lub z jednego z wielu lustrzanych.
FTP - serwer podstawowy
•
FUH KERNEL, VNET.sk, Bratysława, Słowacja - ftp://ftp.pld-linux.org/ ,
ftp://ftp.sk.pld-linux.org/ ,
FTP - serwery lustrzane
•
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/17
•
ATM
S.A.,
Warszawa,
ftp://ftp.atm.pld-linux.org/
•
Uniwersytet Warszawski, Wydział Prawa i Administracji, Polska - ftp://ftp5.pldlinux.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
Polska
-
ftp://ftp4.pld-linux.org/
,
HTTP - serwer podstawowy
•
FUH KERNEL, VNET.sk, Bratysława, Słowacja - http://ftp.pld-linux.org/
HTTP - serwery lustrzane
•
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/
RSYNC
Osoby zainteresowane udost˛epnianiem serwera lustrzanego przy pomocy protokołu
RSYNC proszone sa˛ o kontakt z nami w celu uzyskania szczegółowych informacji:
<[email protected]>
10
Rozdział 2. Zasoby sieciowe PLD
Przypisy
1. http://pld-linux.org/
2. http://pl.docs.pld-linux.org
3. http://lists.pld-linux.org/
4. http://www.mail-archive.com/?hunt=pld
5. http://dir.gmane.org/search.php?match=pld
6. http://irc.freenode.net
7. http://ircnet.org
8. http://vorlon.icpnet.pl/~agaran/forwardfix.pl
9. http://bugs.pld-linux.org/
10. http://rescuecd.pld-linux.org/
11. http://livecd.pld-linux.org/
12. ftp://ftp.iso.pld-linux.org
13. ftp://ftp.pld-linux.org/
14. ftp://ftp.sk.pld-linux.org/
15. ftp://ftp2.pld-linux.org/
16. ftp://ftp3.pld-linux.org/
17. ftp://ftp.csi.pld-linux.org/
18. ftp://ftp4.pld-linux.org/
19. ftp://ftp.atm.pld-linux.org/
20. ftp://ftp5.pld-linux.org/
21. ftp://ftp.wpia.pld-linux.org/
22. ftp://ftp6.pld-linux.org/
23. ftp://ftp.task.pld-linux.org/
24. ftp://ftp.pwr.wroc.pl/pld/
25. ftp://ftp.icm.edu.pl/pub/linux/distributions/pld-linux/
26. ftp://spirit.bentel.sk/mirrors/PLD
27. http://ftp.pld-linux.org/
28. http://ftp2.pld-linux.org/
29. http://ftp4.pld-linux.org/
30. http://ftp.task.pld-linux.org/
31. http://spirit.bentel.sk/PLD/
11
Rozdział 2. Zasoby sieciowe PLD
12
Rozdział 3. Historia powstania naszego logo
Wstep
˛
Pomysł na nasze logo zrodził si˛e w głowie Agnieszki Sloty. Projekt graficzny został
stworzony przez Marcina Mierzejewskiego (Kevin) i Maćka Zielińskiego.
Loga duże
• Może być używane tylko wtedy, gdy:
—produkt z logiem jest używany zgodnie z udokumentowanymi na www.pldlinux.org1 zasadami (na przykład oficjalne płyty CD)
—uzyskaja˛ aprobat˛e PLD Linuksa do używania loga w określonych celach
• Cz˛eść całkowitego produktu uznana jest oficjalnie za należac
˛ a˛ 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 sa˛ one wykonywane przez developerów PLD i nie sa˛ sprzedawane dla zysku.
Wyjaśnienie: Licencja "zapożyczona" z Debiana.
13
Rozdział 3. Historia powstania naszego logo
Rysunek 3-1. Logo główne
14
Rozdział 3. Historia powstania naszego logo
Rysunek 3-2. Logo główne z cieniowaniem
Ikony do umieszczania na stronach WWW
Powered by PLD Linux
To logo i jego zmodyfikowane wersje moga˛ być zamieszczane dla podkreślenia poparcia dla projektu, lecz nie oznacza ono, że dany produkt jest cz˛eścia˛ projektu.
Przypomnienie: docenimy jeśli dodasz do obrazka link wskazujacy
˛ na www.pldlinux.org2 i umieścisz go na swojej stronie.
Rysunek 3-3. Ikona na www 1
Rysunek 3-4. Ikona na www 2
15
Rozdział 3. Historia powstania naszego logo
Rysunek 3-5. Ikona na www 3
Rysunek 3-6. Ikona na www 4
Rysunek 3-7. Ikona na www 5
Rysunek 3-8. Ikona na www 6
Ikony stworzone przez użytkowników
To logo i jego zmodyfikowane wersje moga˛ być zamieszczane dla podkreślenia poparcia dla projektu, lecz nie oznacza ono, że dany produkt jest cz˛eścia˛ projektu.
Przypomnienie: docenimy jeśli dodasz do obrazka
www.pld-linux.org3 i umieścisz go na swojej stronie.
Rysunek 3-9. Ikona stworzona przez "muche"
16
link
wskazujacy
˛
na
Rozdział 3. Historia powstania naszego logo
Rysunek 3-10. Ikona stworzona przez Łukasza "Baseciq" Mozera
Galeria rysunków Karola Kreńskiego
Pod tym adresem http://www.inf.sgsp.edu.pl/pub/MALUNKI/PLD/4 Karol
Kreński "Mimooh" umieścił spora˛ galeri˛e obrazków zwiazanych
˛
z PLD Linux
Distribution
Przypisy
1. http://www.pld-linux.org
2. http://www.pld-linux.org
3. http://www.pld-linux.org
4. http://www.inf.sgsp.edu.pl/pub/MALUNKI/PLD/
17
Rozdział 3. Historia powstania naszego logo
18
Rozdział 4. Instalacja systemu
Ten rozdział prezentuje instalacj˛e systemu.
Wymagania
Minimalne wymagania w przypadku architektury x86:
•
procesor minimum klasy 386
•
16 MB pami˛eci RAM (ze swapem przynajmniej 32MB)
•
50MB wolnego miejsca na dysku twardym
•
nap˛ed CD-ROM lub stacja dyskietek 3,5 cala
Przygotowanie
Instalator
Nośniki na których umieszczany jest instalator:
•
Główna płyta CD (base iso)
Jest to pierwsza z pełnych płyt CD, wystarcza do zainstalowania najważniejszych
pakietów, aby zainstalować całość dystrybucji musisz zaopatrzyć si˛e w pozostałe płyty. Lista serwerów z których pobierzemy obrazy ISO znajduje si˛e w sekcja
Źródła obrazów ISO w Rozdział 2.
•
Płyta MINI-ISO
Miniaturowa wersja dystrybucji przystosowana do nagrania płyty typu MINI-CD
(płyty o średnicy 8cm). Zawiera najbardziej podstawowe pakiety. Lista serwerów
z których pobierzemy obraz MINI-ISO znajduje si˛e w sekcja Źródła obrazów ISO w
Rozdział 2.
•
Dyskietki
Mamy do dyspozycji kilka dyskietek zawierajacych
˛
instalator lub dodatkowe moduły jadra.
˛
Oprócz nich konieczne b˛edzie jeszcze jakieś źródło pakietów (sieć/CDROM/dysk twardy).
Główne
obrazy
dyskietek
(bootdisk_cd.img,
bootdisk_net.img,
bootdisk_pcmcia.img) obsługuja˛ jedynie najpowszechniej używany sprz˛et, jeśli
nasz nie jest obsługiwany, to instalator poprosi o jedna˛ z dodatkowych dyskietek
z modułami jadra.
˛
Z tego wzgl˛edu na wszelki wypadek można pobrać pliki o
nazwie addons{$numer}.img
Obraz dyskietki i reszt˛e pakietów możemy pobrać z głównego serwera
lub jednego z serwerów lustrzanych, list˛e adresów znajdziemy w
sekcja Serwery z pakietami w Rozdział 2. Przykładowo użyjemy adresu:
ftp.pld-linux.org/dists/{$wersja_PLD}/PLD/{$arch}/PLD/images/ ({$wersja_PLD} to
interesujaca
˛ nas wersja PLD zaś {$arch} oznacza architektur˛e procesora). Dost˛epne
sa˛ obrazy dyskietek dla nast˛epujacych
˛
architektur: i386, i586, i686 oraz athlon.
19
Rozdział 4. Instalacja systemu
Instalacja z sieci
Jeżeli masz wystarczajaco
˛ szybkie łacze
˛
możesz zainstalować system z sieci. W tym
procesie mamy do wyboru instalacj˛e pakietów przy pomocy protokołów: FTP, HTTP
lub NFS.
Możemy użyć MINI-ISO, pierwszej płyty instalacyjnej lub dyskietki. W przypadku dyskietki musimy użyć obrazu bootdisk_net.img lub bootdisk_pcmcia.img
(urzadzenia
˛
sieciowe PCMCIA).
Możemy też zainstalować rdzeń systemu z MINI-ISO lub pierwszej płyty instalacyjnej, a nast˛epnie kontynuować proces instalacji za pośrednictwem sieci z działajacego
˛
już systemu.
Instalacja z płyty CD-ROM
Używamy w tym celu pierwszej z pełnych płyt CD (base) lub wszystkich dost˛epnych
obrazów.
Jeśli BIOS naszej maszyny nie potrafi uruchamiać systemu operacyjnego z płyty CD,
musimy wspomóc si˛e dyskietka˛ i obrazem bootdisk_cd.img. Po uruchomieniu instalatora z dyskietki jako źródło pakietów wybieramy CD-ROM.
Instalacja z dysku twardego
Istnieje możliwość instalacji z lokalnego dysku twardego, użyjemy do tego obrazu
dyskietki bootdisk_cd.img. Musimy jeszcze przegrać zawartość obrazu płyty CD
do katalogu na jednej z partycji dyskowych.
Dodatkowe informacje
Pobrane z internetu obrazy dyskietki nagrywamy poleceniem
# dd if=bootdisk.img of=/dev/fd0
lub
przy
pomocy
programu
rawrite.exe
pod
systemem
Windows/DOS.
Program
rawrite.exe
możemy
pobrac
przykładowo
z
ftp.pld-linux.org/dists/{$wersja_PLD}/PLD/{$arch}/PLD/dosutils/.
PLD jest przygotowane dla wielu architektur sprz˛etowych, zanim wi˛ec przystapisz
˛
do instalacji upewnij si˛e że wybierzesz właściwa˛ wersj˛e. Wi˛ecej na ten temat można
znaleźć w sekcja Architektury pakietów w Rozdział 9
Instalacja
Wstep
˛
Jeżeli pierwszy raz instalujesz Linuksa, lub jesteś bardzo poczatkuj
˛
acym
˛
użytkownikiem warto abyś wiedział kilka rzeczy. Na poczatek
˛
zapoznaj si˛e ze sposobem
oznaczania dysków i partycji opisanych dokładniej w sekcja Nazewnictwo urzadze
˛ ń
masowych w Rozdział 13
Kiedy już zaopatrzymy si˛e we właściwy nośnik, uruchamiamy komputer i czekamy
na pojawienie si˛e ekranu instalatora. Zaczniemy od poznania sposobu poruszania si˛e
po instalatorze, do przesuwania/przewijania tekstu badź
˛ opcji używasz "strzałek" na
klawiaturze, wybór akceptujesz klawiszem ENTER. Klawiszem TAB poruszasz si˛e
pomi˛edzy opcjami instalatora.
20
Rozdział 4. Instalacja systemu
Zaczynamy
Widzac
˛ standardowy ekran zgłoszeniowy naciskamy ENTER i czekamy aż uruchomi si˛e instalator. Wybieramy j˛ezyk - w naszym przypadku polski. Przeczytawszy
krótkie wprowadzenie jesteśmy w instalatorze.
Rysunek 4-1. Jesteśmy w instalatorze
Teraz pojawiło nam si˛e menu, w którym mamy do wyboru sposoby instalacji. Jeżeli
posiadasz wi˛eksza˛ niż podstawowa˛ wiedz˛e nt. linuksa możesz wybrać "Standartowe
UI", gdzie wi˛ekszość opcji umieszczona jest na jednym przejrzystym ekranie. Także kolejne opcje pozwola˛ ustawić partycje, wybrać pakiety, prekonfigurować system
oraz ustawić bootmanagera. Do edycji partycji mamy do wyboru program fdisk lub
parted.
My wybieramy jednak opcj˛e "Automagiczny Instalator", który sam przeprowadzi
nas gładko przez proces instalacji.
Źródło
Instalacja z sieci
Doszliśmy do momentu gdzie musimy ustawić parametry źródła, skad
˛ b˛edzie instalował si˛e system. Jeżeli korzystamy z bootkietek musimy dobrać odpowiednia˛ w
stosunku do źródła z którego b˛edziemy pobierali pakiety.
21
Rozdział 4. Instalacja systemu
Rysunek 4-2. Wybór źródła
Powyżej widzimy ekran wyboru źródła ,ja wybrałem instalacj˛e z sieci, jednak instalacja z płyty cd, dysku twardego czy nfs-u nie b˛edzie znaczaco
˛ si˛e różniła.
Rysunek 4-3. Instalujemy z ftp
Nast˛epnie wybieram serwer ftp/http z którego chc˛e instalować system, oraz ścieżk˛e
do źródeł. Jeżeli masz w pobliżu jakiś mirror pld możesz skorzystać z niego, zamiast
oficjalnego serwera.
Kolejne dwa ekrany to konfiguracja karty oraz połaczenia
˛
sieciowego. Wybrane parametry zależa˛ od posiadanego sprz˛etu i topologii sieci, wiec nie ma co nad tym si˛e
rozwodzić.
Instalacja z cdromu
Jeżeli instalujesz system z płytek musisz zaopatrzyć si˛e albo w miniiso, albo przynajmniej w pierwsza˛ (base) płytk˛e.
22
Rozdział 4. Instalacja systemu
Rysunek 4-4. Źródło - cdrom
W menu wyboru źródła wybieramy cdrom. Nie jest ważne czy instalujemy cały system z płytek, czy tylko miniiso.
Rysunek 4-5. Wybór urzadzenia
˛
Teraz możemy wybrać urzadzenie,
˛
które służy w naszym systemie jako cdrom. System powinien znaleźć i zaznaczyć istniejacy
˛ w systemie nap˛ed, jednak jeżeli mamy
wi˛ecej niż jeden to tutaj należy zaznaczyć w którym znajduje si˛e płytka instalacyjna.
Możesz także ustawić katalog w którym znajduja˛ si˛e pakiety, jednak jeżeli używasz
oficjalnych płytek nie należy nic tutaj zmieniać.
Możesz teraz przejść do kolejnego kroku, czyli ustawień partycji.
Partycje
Nadszedł czas na konfigurowanie partycji. Możemy wybrać proponowane przez instalator ustawienia albo skorzystać z bardzo przyjemnego narz˛edzia o nazwie par23
Rozdział 4. Instalacja systemu
ted. Jako, że na dysku możemy mieć inny system (Windows) lepiej dla bezpieczeństwa ustawić partycje r˛ecznie.
Rysunek 4-6. Ustawianie partycji
Wybierajac
˛ opcj˛e "ustaw partycje r˛ecznie" przechodzimy do parted
Rysunek 4-7. Parted - interfejs
Interfejs jak widać jest bardzo prosty i intuicyjny. Jeżeli mamy jakieś wolne miejsce
możemy utworzyć nowa˛ partycje, stworzyć macierz RAID, albo przeedytować istniejac
˛ a˛ już partycj˛e. UWAGA! Jeżeli posiadasz nowy sprz˛et, możesz mieć problemy
z instalacja˛ systemu na raidzie. Problem ten wynika z tego, iż system, który właśnie
instalujesz może nie obsługiwać Twojego raida.
Wchodzac
˛ w menu "Akcje" przechodzimy do menu edycji partycji.
24
Rozdział 4. Instalacja systemu
Rysunek 4-8. Parted - tworzenie partycji
Możemy zmienić punkt montowania, system plików, rozmiar albo usunać
˛ partycj˛e.
Po dokonaniu edycji tablicy partycji, oraz ustawieniu punktów montowań możemy
opuścić parted i przejść do dalszej cz˛eści instalacji.
Wybór pakietów
Przechodzimy teraz do kolejnej cz˛eści instalacji, czyli wyboru pakietów.
Rysunek 4-9. Wybór pakietów
Mamy do wyboru nast˛epujace
˛ gotowe zestawy pakietów. Przy każdym zestawie jest
jego krótka charakterystyka, wi˛ec nie ma sensu si˛e rozpisywać. Wybieramy taki zestaw jaki nam najbardziej pasuje, jednak nie warto przesadzać z pakietami, np stacja
robocza z gnome nie b˛edzie bardzo nadawała si˛e na router. Po zainstalowaniu systemu b˛edziesz zmuszony usunać
˛ mas˛e niepotrzebnych pakietów, przez co stracisz
mnóstwo czasu.
25
Rozdział 4. Instalacja systemu
Dalej mamy możliwość szczegółowej selekcji pakietów, jeżeli ufamy instalatorowi
możemy pominać
˛ ten krok, jeżeli natomiast znamy si˛e troch˛e na linuksie wybieramy
powyższa˛ opcj˛e i wchodzimy do menu.
Rysunek 4-10. Grupy pakietów
Na ekranie widzimy zaznaczone grupy pakietów, możemy zaznaczać dodatkowe,
albo zrezygnować z dotychczas wybranych. Możemy także rezygnować z pojedynczych pakietów z grup wchodzac
˛ w opcj˛e standartowe pakiety. Pod linkiem "Wybierz opcjonalne pakiety" widzimy menu dzi˛eki któremu mamy możliwość bardziej
spersonalizowanego wyboru interesujacych
˛
nas pakietów.
Kolejnym krokiem jest pytanie czy chcemy zainstalować dokumentacj˛e, na które lepiej odpowiedzieć twierdzaco.
˛
Mamy także możliwość wyboru wersji j˛ezykowych
dokumentacji. Jeżeli nie jesteśmy pewni, możemy zostawić domyślne ustawienia,
czyli "ALL", jednak gdy chcemy mieć dokumentacj˛e tylko po polsku i angielsku wpisujemy "pl:pl_PL:en:en_US". Należy pami˛etać, że może zdarzyć si˛e sytuacja iż pakiet
nie ma jeszcze polskiej dokumentacji, wi˛ec zawsze warto zaznaczyć j˛ezyk angielski.
Nast˛epne kroki to prekonfiguracja instalowanego systemu.
Prekonfiguracja systemu
Dotarliśmy do punktu gdzie musimy ustawić podstawowe parametry instalowanego systemu.
26
Rozdział 4. Instalacja systemu
Rysunek 4-11. Partametry sieci
Pierwszym krokiem b˛edzie ustawienie parametrów sieci (jeżeli mamy do niej dost˛ep). Jeżeli wcześniej wybraliśmy instalacj˛e przez sieć, możemy zastosować te same
preferencje także w naszym systemie, jeżeli jednak instalujemy z jakiegoś nośnika
(cdrom, dysk) należy r˛ecznie wpisać ustawienia, lub pobrać je z serwera dhcp.
Rysunek 4-12. Hasło administratora
Kolejny krok to ustawienie hasła użytkownika root. Ten punkt chyba nie wymaga
komentarza. Należy ustawić w miar˛e bezpieczne hasło, bo jak wiadomo serwer jest
tak bezpieczny jak jego najsłabsze ogniwo :) Możemy również zlecić wygenerowanie
hasła instalatorowi.
Nast˛epna˛ czynnościa˛ jest ustawienie kont(a) użytkowników, możemy zrobić to teraz,
albo po instalacji używajac
˛ polecenia useradd.
27
Rozdział 4. Instalacja systemu
Rysunek 4-13. Strefa czasowa
Pozostał jeszcze wybór strefy czasowej i synchronizacja (lub nie) zegara systemowego z UTC, i na tym kończymy prekonfiguracj˛e systemu.
Bootmanager
Przyszła kolej na ustawienie bootmanagera. Jeżeli pld to nasz jedyny system na dysku możemy pominać
˛ ten krok, w przeciwnym przypadku musimy dodać wpisy innych systemów, aby była możliwość uruchomienia ich przy starcie komputera. Oczywiście jeżeli nie chcemy teraz konfigurować bootmanagera można zawsze to zrobić
po ukończeniu instalacji, edytujac
˛ plik /etc/lilo.conf.
Rysunek 4-14. Możliwość wyboru konfiguracji bootloadera
Wybieramy wi˛ec opcj˛e "konfiguruj bootloader", która uruchamia skrypt konfigurujacy.
˛
28
Rozdział 4. Instalacja systemu
Rysunek 4-15. Bootloader - wpisy
Jak widać nie mamy jeszcze żadnych wpisów, wybieramy "Stwórz nowa˛ pozycj˛e"
aby dodać jakiś system operacyjny. Należy tutaj pami˛etać iż wpisujemy istniejace
˛
systemy na lokalnych dyskach, oprócz tego, który właśnie instalujemy.
Rysunek 4-16. Wybór systemu
Pierwszym krokiem jest wybór systemu który chcemy ładować. Wybieramy
np. DOS, nast˛epnie podajemy lokalizacje partycji na jakiej znajduje si˛e system i
przechodzimy do konfiguracji wpisu.
29
Rozdział 4. Instalacja systemu
Rysunek 4-17. Konfiguracja wpisu
Jak widać na powyższym przykładzie, musimy wpisać etykiet˛e - czyli nazw˛e jaka
b˛edzie nam si˛e wyświetlała przy starcie komputera. Nazwa jest dowolna, jednak nie
należy przesadzać z długościa˛ i lepiej nie używać polskich znaków. Dwa kolejne pola, czyli "system" i "katalog /" mamy już wypełnione automatycznie. Jeżeli dodajemy
innego linuksa należy podać lokalizacj˛e jadra
˛
systemu (kernela) oraz initrd jeśli mamy. W systemie DOS/Windows te pola sa˛ zb˛edne.
Rysunek 4-18. Gotowy wpis
Po ustawieniu etykiety i zatwierdzeniu zmian możemy obejrzeć nasz(e) wpis(y). Jeżeli mamy wi˛ecej systemów dodajemy je po kolei, po skończeniu opuszczamy konfigurator przechodzac
˛ do kolejnej opcji.
30
Rozdział 4. Instalacja systemu
Rysunek 4-19. Lokalizacja bootloadera
Ostatnia˛ rzecza˛ jaka˛ musimy zrobić aby zakończyć proces konfiguracji bootloadera
to wybór urzadzenia
˛
na jakim ma być on zainstalowany. Najlepszym rozwiazaniem
˛
jest instalacja go w MBR (Master Boot Record) dysku z którego jest ładowany system.
Jeżeli jednak nie jesteśmy pewni co do tego (lub nie wiemy co to jest MBR) najlepiej
zostawić opcj˛e auto, dzi˛eki której instalator sam wybierze najlepsze urzadzenie.
˛
Kończenie instalacji
Pozostała nam ostatnia rzecz, czyli instalacja pakietów. W tej cz˛eści nie b˛edziemy
musieli nic robić, oprócz czekania. Wi˛ec jeżeli wybraliśmy instalacj˛e z sieci i jakiś
wi˛ekszy zestaw pakietów możemy zaopatrzyć si˛e w jakaś
˛ ksia˛żk˛e i poczytać, bo proces instalacji troch˛e potrwa :)
Słowo komentarza na temat tego, co si˛e dzieje na ekranie:
Rysunek 4-20. Instalator tworzy partycje
31
Rozdział 4. Instalacja systemu
Tutaj widzimy jak system tworzy partycje, oraz system plików na nich. W zależności
od wielkości partycji i szybkości dysku może to troch˛e potrwać.
Rysunek 4-21. Instalacja pakietów
Dalej po pobraniu indeksów system przechodzi do instalacji pakietów (wi˛ecej o tym
co to sa˛ indeksy w rozdziale poświ˛econym poldkowi). To jest najdłuższa cz˛eść instalacji.
Rysunek 4-22. Instalacja zakończona :)
Jeżeli nie wystapiły
˛
żadne bł˛edy zobaczysz taki ekran. Teraz wystarczy tylko zrestartować system, wyciagn
˛ ać
˛ płytk˛e/dyskietk˛e z nap˛edu, badź
˛ ustawić bootowanie
z dysku na którym zainstalował si˛e bootmanager (najcz˛eściej /dev/hda) i mamy gotowy system :)
32
Rozdział 4. Instalacja systemu
Po instalacji
Po instalacji system uruchamiany jest w trzecim "poziomie pracy". Jeśli dana maszyna b˛edzie korzystała z X-Window to zapewne zechcemy aby korzystała z piatego
˛
poziomu, o zarzadzaniu
˛
poziomami pracy przeczytamy w sekcja Zmiana poziomu pracy
systemu w Rozdział 14.
Instalator pozostawił w systemie pliki zawierajace
˛ szczegóły instalacji, oto ich lista:
• /var/log/installer
- szczegółowy dziennik instalacji
• /etc/installer.conf
- lista ustawień instalatora
• /etc/installer.pkgs
- lista wybranych pakietów
• /etc/installer.sysconf
- wst˛epna konfiguracja systemu
Ostatni z wymienionych plików zawiera hasła administratora i dodanych użytkowników. Sa˛ one zapisane czytelnym tekstem, wi˛ec jeśli upewnimy si˛e, że nie sa˛ już
nam potrzebne to powinniśmy te dane usunać.
˛ Dost˛ep do tych plików ma tylko administrator, jednak w sprawach bezpieczeństwa należy kierować si˛e dalece posuni˛eta˛
ostrożnościa.˛
Jeśli wybraliśmy jedna˛ z minimalnych wersji systemu, to teraz powinna nastapić
˛
właściwa cz˛eść instalacji pakietów. W tym celu należy użyć programu Poldek, jego
opis odnajdziemy w sekcja Poldek w Rozdział 9
33
Rozdział 4. Instalacja systemu
34
Rozdział 5. Instalacja przy użyciu chroota
Instalacja systemu przy użyciu chroot
Wstep
˛
Mamy możliwość zainstalowania PLD przy pomocy innego systemu operacyjnego,
sposób ten ma t˛e zalet˛e, że daje nam okazj˛e dobrego poznania PLD już na etapie instalacji, a ponadto umożliwia wykonanie bardziej wyrafinowanych operacji, które sa˛
niedost˛epne z poziomu instalatora. Ta metoda instalacji pozwala zainstalować bardzo mała˛ wersj˛e systemu, (ok. 120MB), która wystarcza do uruchomienia systemu,
skonfigurowania sieci, Poldka i pobrania kolejnych pakietów.
Do instalacji możemy użyć działajacej
˛ dystrybucji, jednak najwygodniejsze b˛edzie
użycie dystrybucji typu live: RescueCD lub PLD-Live. Użycie systemu z płyty CD ma
ta˛ zalet˛e, ż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˛e pojawia),
˛ zaś do instalacji Ac - jednej ze starszych wersji
np. 2.01.
Osoby ciekawe jak wyglada
˛ przebieg instalacji "na żywo", moga˛ obejrzeć nagranie
przykładowej instalacji1.
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.
Przygotowanie
Uruchomienie
W przypadku instalacji z działajacego
˛
systemu musimy podłaczyć
˛
dysk twardy do
komputera i uruchomić go. W przypadku płyty CD typu live - w BIOS-ie maszyny
docelowej właczamy
˛
opcj˛e startu systemu z płyty, a nast˛epnie umieszczamy nośnik
w nap˛edzie i czekamy na start systemu.
Współczesne dystrybucje typu live same wykrywaja˛ sprz˛et i ładuja˛ odpowiednie
moduły kernela, jeśli jednak to si˛e nie powiedzie to musimy wtedy wykonać t˛e operacj˛e samodzielnie, wi˛ecej na ten temat w sekcja Statyczne zarzadzanie
˛
modułami w
Rozdział 11. Interesuja˛ nas jedynie moduły kontrolera ATA/SATA/SCSI oraz interfejsu sieciowego.
Partycje/woluminy
System możemy zainstalować na klasycznych partycjach dyskowych, woluminach
LVM lub programowych macierzach, instalacja z chroot-a daje w tej kwestii duża˛
swobod˛e. Opis tworzenia woluminów LVM przedstawiliśmy w sekcja LVM w Rozdział 13 zaś macierzy w sekcja RAID programowy w Rozdział 13. Dla ułatwienia jednak dalsze przykłady b˛eda˛ 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 porzadku
˛
utworzymy go już na tym etapie. Przykłady b˛eda˛ dotyczyły dysku /dev/hda.
Nazewnictwo urzadze
˛
ń masowych wyczerpujaco
˛ przedstawiono w sekcja Nazewnictwo urzadze
˛ ń masowych w Rozdział 13.
Na uprzywilejowanej pozycja˛ b˛eda˛ tym razem użytkownicy kompletnych systemów,
które umożliwiaja˛ użycie programu GParted lub QTParted, w przeciwnym wypadku
użyjemy programu fdisk lub cfdisk np.:
35
Rozdział 5. Instalacja przy użyciu chroota
# cfdisk /dev/hda
Podział dysku na partycje szerzej opisano w sekcja Podział na partycje w Rozdział 13.
Zakładamy, że na pierwszej partycji dysku IDE umieścimy obszar wymiany, zaś na
drugiej główny system plików.
Systemy plików
Inicjujemy obszar wymiany:
# mkswap /dev/hda1
Tworzymy system plików (np. ext2):
# mkfs.ext2 /dev/hda2
Powyższe operacje omówiliśmy dokładnie w sekcja Systemy plików w Rozdział 13.
Zapami˛etujemy układ partycji i systemów plików, gdyż b˛edzie 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/hda2 /pldroot
Jeśli system ma używać wi˛ekszej ilości partycji (np. dla /boot) to montujemy je
wszystkie.
Konfiguracja sieci
Założyliśmy, że b˛edziemy instalować pakiety z sieci, dlatego musimy skonfigurować
połaczenie.
˛
W opisach przyj˛eliśmy, że maszyna jest podłaczona
˛
do sieci Ethernet.
W przypadku RescueCD system domyślnie próbuje pobrać konfiguracj˛e z DHCP,
dlatego od razu po uruchomieniu powinniśmy mieć działajac
˛ a˛ sieć. Jeśli w sieci nie
ma takiego serwera to musimy statycznie przydzielić parametry połaczenia.
˛
Zakładajac,
˛ że chcemy ustawić adres 192.168.0.2 z maska˛ /24 parametry pliku konfiguracji
interfejsu (np.: /etc/sysconfig/interfaces/ifcfg-eth0) powinny mieć nast˛epujace
˛ wartości:
DEVICE=eth0
IPADDR=192.168.0.2/24
ONBOOT=yes
BOOTPROTO=none
W pliku /etc/sysconfig/static-routes dodajemy tras˛e 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˛e sieci szerzej opisano w sekcja Wst˛ep w Rozdział 15.
36
Rozdział 5. Instalacja przy użyciu chroota
Proxy
Jeśli potrzebujemy skorzystać z proxy ustawiamy odpowiednia˛ zmienna˛ środowiskowa˛ np.:
# export ftp_proxy=w3cache.dialog.net.pl:8080
Szczegóły konfiguracji proxy odnajdziemy w sekcja Proxy w Rozdział 7.
Konfiguracja Poldka
Zaczynamy od ustawienia najlepiej dopasowanej architektury instalowanych pakietów, za pomoca˛ opcji _pld_arch w pliku /etc/poldek/pld-source.conf. Wi˛ecej
o architekturach pakietów w sekcja Architektury pakietów w Rozdział 9. Dobrym pomysłem jest ustawienie opcji, umożliwiajacej
˛ 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˛epnie w konfiguracji Poldka musimy wskazać ten katalog, odszukujemy w pliku
/etc/poldek/poldek.conf opcj˛e cachedir, w której definiujemy ścieżk˛e do katalogu:
cachedir = /pldroot/var/cache/poldek-cache
Instalacja
Instalacja pakietów
Zanim zaczniemy instalować pakiety musimy mieć świadomość, że zachodzi mi˛edzy
nimi wiele zależności. Zostana˛ zainstalowane wszystkie wymagane dodatkowo pakiety, jednak nie mamy wpływu na kolejność instalacji. Zdarza si˛e, że pakiet wymaga
pliku lub programu, którego jeszcze nie ma w instalowanym systemie, przez co nie
moga˛ być wykonane pewne operacje poinstalacyjne. Pojawia˛ si˛e nam wtedy na ekranie komunikaty bł˛edów, nie należy si˛e tym martwić, gdyż naprawimy ten problem
reinstalujac
˛ pakiet. Musimy jedynie wywołać instalacj˛e z opcja˛ --reinstall
Instalacj˛e rozpoczynamy od inicjacji bazy danych pakietów:
# rpm --root /pldroot --initdb
W tej cz˛eści instalacji zainstalujemy kolejno pakiety: setup, FHS, dev, pwdutils,
chkconfig, dhcpcd, poldek, vim (lub inny edytor), geninitrd, modutils, cpio,
bootloader lilo lub grub. Możemy dodatkowo zainstalować wiele innych
pakietów, jednak możemy spokojnie to wykonać z działajacego
˛
już systemu.
Mamy możliwość użycia trybu interaktywnego Poldka:
# poldek --root /pldroot
37
Rozdział 5. Instalacja przy użyciu chroota
poldek> install setup FHS dev pwdutils chkconfig dhcpcd poldek vim geninitrd \
modutils cpio lilo mount login mingetty
lub wsadowego
# poldek --root /pldroot -i setup FHS dev pwdutils chkconfig \
dhcpcd poldek vim geninitrd modutils cpio lilo 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.
Przygotowanie do instalacji kernela
Przed instalacja˛ jadra
˛
musimy wykonać operacje konieczne do prawidłowego wygenerowania initrd:
•
Montujemy pseudo-system plików /proc:
# mount /proc /pldroot/proc -o bind
•
Konfigurujemy plik /etc/fstab, tak by wpisy odpowiadały wybranemu przez
nas układowi partycji i systemów plików. Dla przykładów z poczatku
˛
rozdziału
wpisy b˛eda˛ wygladały
˛
nast˛epujaco.:
˛
/dev/hda1 swap swap defaults 0 0
/dev/hda2 /
ext2 defaults 0 0
Wi˛ecej w sekcja Kluczowe pliki w Rozdział 12.
•
Dokonać odpowiednich koniecznych operacji konfiguracyjnych w przypadku
korzystania z macierzy RAID (plik /etc/mdadm.conf) lub woluminów LVM
(/etc/lvm/lvm.conf).
Instalacja kernela
Musimy wybrać, który kernel zainstalujemy, na poczatek
˛
powinniśmy si˛e zainteresować pakietami: kernel, kernel-grsecurity i ew. ich odmiany z SMP. W wyborze
może pomóc nam opis kerneli w sekcja Jadro
˛
systemu w Rozdział 11. Kiedy już wybraliśmy, instalujemy wybrany pakiet:
# poldek --root /pldroot -i kernel
Jeśli nie pomin˛eliśmy żadnego kroku, to powinien nam si˛e wygenerować prawidłowy obraz initrd, w przeciwnym wypadku musimy to wykonać samodzielnie wg.
opisu zamieszczonego w sekcja Initrd w Rozdział 11.
Bootloader
Jeśli wybraliśmy LILO jako bootloader to powinniśmy odpowiednio zmodyfikować
plik konfiguracji (/etc/lilo.conf), w przypadku użytej w przykładach konfiguracji
b˛edzie wygladał
˛
nast˛epujaco:
˛
boot=/dev/hda
read-only
lba32
38
Rozdział 5. Instalacja przy użyciu chroota
prompt
timeout=100
image=/boot/vmlinuz
label=pld
root=/dev/hda2
initrd=/boot/initrd
Kiedy konfiguracja jest skończona wydajemy polecenie:
# chroot /pldroot /sbin/lilo
W przypadku GRUB-a plik konfiguracji (/boot/grub/menu.lst) powinien tak wygladać:
˛
timeout 10
title pld
root (hd0,1)
kernel /boot/vmlinuz boot=/dev/hda
initrd /boot/initrd
Teraz instalujemy bootloader:
# chroot /pldroot /sbin/grub
Kiedy zgłosi si˛e nam powłoka GRUB-a kolejno wydamy nast˛epujace
˛ polecenia:
grub> root (hd0,1)
grub> setup (hd0)
grub> quit
Konfiguracj˛e bootloadera wyczerpujaco
˛ przedstawiono w sekcja Wst˛ep w Rozdział
10. Jeśli gałaź
˛ /boot ma być na macierzy to powinniśmy umieścić bootloader na
wszystkich wchodzacych
˛
w skład tej macierzy dyskach, szczegóły tej operacji przedstawiliśmy w sekcja RAID programowy w Rozdział 13.
UDEV
Jeśli chcemy używać systemu urzadze
˛
ń udev, to jest doskonała okazja żeby go zainstalować. Podstawowe pakiety wymagaja˛ urzadze
˛
ń z pakietu dev, dlatego możemy
go zainstalować dopiero teraz:
# poldek --root /pldroot -i udev
# poldek --root /pldroot -e dev
˛
w Rozdział 11.
Urzadzenia,
˛
dev oraz udev zostały opisane w sekcja Urzadzenia
Konta użytkowników
Aby móc si˛e zalogować do nowego systemu musimy nadać hasło dla root-a:
# chroot /pldroot /usr/bin/passwd
39
Rozdział 5. Instalacja przy użyciu chroota
Nic nie stoi na przeszkodzie, żeby utworzyć konta użytkowników i skonfigurować
uprawnienia. W tym celu posłużymy si˛e narz˛edziami z pakietu shadow lub pwdutils, zanim to jednak zrobimy musimy ustalić z jakiej powłoki b˛eda˛ korzystać użytkownicy. Domyślnie oba pakiety ustawiaja˛ użytkownikom powłok˛e /bin/bash, dlatego przy tworzeniu kont musimy ustawić ja˛ na /bin/sh, lub zainstalować Basha.
Zakładajac,
˛ że mamy zainstalowanego Basha dodajemy konto użytkownika nast˛epujaco:
˛
# chroot /pldroot /usr/sbin/useradd -m jkowalski
# chroot /pldroot /usr/bin/passwd jkowalski
Szczegółowy opis narz˛edzi z pakietu pwdutils znajdziemy w sekcja Konta użytkowników w Rozdział 14.
Operacje końcowe
Przed restartem musimy odmontować systemy plików:
# umount /pldroot/proc
# umount /pldroot
Na koniec wpisujemy polecenie reboot, wyjmujemy płyt˛e z nap˛edu i czekamy aż
uruchomi si˛e nowy system.
Przypisy
1. http://dlugosz.eu/2009/03/05/pld-th-i686-base-video-install/
40
Rozdział 6. Aktualizacje
Aktualizacja systemu PLD z RA do AC
Aktualizacja 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˛e skryptem ra2ac. Pakiety
z tego skryptu standardowo pobierane sa˛ z ftp. Czynnościa˛ która˛ musimy wykonać
zanim posłużymy si˛e 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˛e do uruchomienia skryptu i r˛ecznej rekonfiguracji nowych wersji usług.
Należy pami˛etać, że AC jest na kernelu 2.6, lub 2.4 do wyboru, w tych kernelach
nie ma ipchains-ów, zamiast tego jest narz˛edzie nazywajace
˛ si˛e iptables. Pomimo
iż służy do tego samego, regułki maja˛ inna˛ składnie. W kernelach 2.4 i 2.6 niektóre
moduły urzadze
˛
ń inaczej si˛e nazywaja,˛ wi˛ec na to też należy być przygotowanym.
Skrypt jest przeznaczony dla ludzi, którzy wiedza˛ co robia˛ i maja˛ ogólne poj˛ecie o
linuksie, jeżeli jesteś poczatkuj
˛
acym
˛
użytkownikiem PLD, to lepsza˛ decyzja˛ b˛edzie
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 usunać
˛ (łacznie
˛
z katalogami i plikami zaczynajacymi
˛
si˛e od .kde i .gnome w katalogach domowych użytkowników) - gdyż zmiany sa˛ bardzo duże i praca ze starymi ustawieniami powoduje
cz˛esto wadliwa˛ prace. Generalnie ważne jest aby aktualizować jak najmniejsza˛ liczb˛e
pakietów, wtedy wszystko powinno pójść w miar˛e gładko. Reszt˛e pakietów można
później r˛ecznie 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 www3
Nast˛epnie uruchamiamy ra2ac:
# sh raac-converter/ra2ac
Czekamy aż skończy si˛e instalowanie pakietów, na przewijajace
˛ si˛e niespełnione zależności i bł˛edy nie zważamy :)
I na samym końcu najbardziej nieprzyjemna cz˛eść aktualizacji - konfiguracja. Należy
teraz wi˛ekszość usług jeszcze raz przekonfigurować, cz˛eść usług b˛edzie potrzebowała tylko przekopiowania konfigu z Ra, jednak inne (np. exim, postfix) wymagaja˛
od administratora edycji nowych plików konfiguracyjnych. Ważne jest żeby poczytać w dokumentacji o zmianach w plikach konfiguracyjnych mi˛edzy wersjami które
mieliśmy w RA, a wersjami wyst˛epujacymi
˛
teraz po skończeniu działania skryptu.
41
Rozdział 6. Aktualizacje
Przypisy
1. ftp://ftp.pld-linux.org/dists/ra/updates/2.4/
2. ftp://atos.wmid.amu.edu.pl/pub/pld/ra-24/
3. http://cvs.pld-linux.org/cgi-bin/cvsweb/raac-converter/ra2ac
42
Rozdział 7. Podstawy
W tym rozdziale znajdziesz podstawowe komendy i czynności, które powinieneś
znać.
Wstep
˛
Dokument, który aktualnie czytasz zawiera minimalny zestaw instrukcji i porad koniecnych do instalacji i zarzadzania
˛
dystrybucja˛ PLD Linux. Wi˛ekszość opisywanych
mechanizmów i narz˛edzi ma o wiele wi˛eksze możliwości, aby je poznać powinniśmy
używać podr˛eczników systemowych info i man (przestarzały). Aby z nich korzystać
musisz je zainstalować (o ile nie sa˛ już zainstalowane) poleceniami:
poldek -U man
poldek -U info
W skrócie z podr˛ecznika korzystamy nast˛epujaco:
˛
info {$hasło}
{$hasło} może być nazwa˛ programu, biblioteki, pliku konfiguracyjnego. Dodatkowa˛ dokumentacj˛e odnajdziemy w katalogu /usr/share/doc, tam też możemy odna-
leźć przykładowe pliki konfiguracji, histori˛e zmian programu, licencje i wiele innych
informacji.
Jeśli szukasz prostego narz˛edzia o konkretnych możliwościach możemy przejrzeć
dokumentacj˛e systemowa˛ zestawu coreutils:
info coreutils
Możesz również szukać pomocy na listach dyskusyjnych, IRC-u, czy forum. List˛e
tych jak i wielu innych użytecznych adresów odnajdziesz w sekcja Ważne adresy w
Rozdział 2.
Właczanie
˛
i wyłaczanie
˛
systemu
Tradycyjna˛ metoda˛ wyłaczania
˛
komputera jest komenda shutdown, np.:
# shutdown -h now
Lub poweroff dajaca
˛ 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łaczać
˛
si˛e pomi˛edzy trybami pracy. Służy do
tego polecenie init {$nr} ({$nr} to liczba oznaczajaca
˛ tryb pracy) np.
# init 5
Zmian˛e poziomu pracy szerzej opisano tutaj: sekcja Zmiana poziomu pracy systemu w
Rozdział 14
43
Rozdział 7. Podstawy
Podstawowe operacje na plikach i katalogach
Zawartość plików wyświetlamy poleceniem cat.
$ cat archiwum
Jeśli chcemy przyjrzeć si˛e plikowi, który nie mieści si˛e na ekranie po wykonania cat
możemy uzyskać poleceniem less. Możemy wtedy przegladać
˛
plik używajac
˛ "strzałek", a kiedy skończymy - naciskamy q.
$ less plik
Komenda˛ touch możemy modyfikować znaczniki czasu pliku, cz˛eściej jednak używa
si˛e jej do tworzenia pustych plików.
$ touch pusty_plik
Polecenie mkdir tworzy katalog.
$ mkdir archiwum
Za pomoca˛ polecenia rmdir usuwamy puste katalogi.
$ rmdir archiwum
Plik możemy przenieść, albo zmienić jego nazw˛e, za pomoca˛ 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
rm
rm
rm
rm
rm
plik
*
* -i
* -f
-r
-rf /home/
//
//
//
//
//
//
Kasuje
Kasuje
Kasuje
Kasuje
Kasuje
Kasuje
plik.
wszystkie
wszystkie
wszystkie
wszystkie
wszystkie
pliki w danym katalogu.
pliki w danym katalogu z potwierdzeniem.
pliki w danym katalogu bez pytania.
pliki, także te w podkatalogach
pliki i katalogi w katalogu /home/
Poruszanie sie˛ w drzewie katalogów
Do poruszania si˛e w drzewie katalogów w trybie tekstowym można używać programu Midnight Commander uruchamianego poleceniem mc, jednak nie każdy go
instaluje, wi˛ec warto zapoznać si˛e z kilkoma poleceniami przedstawionymi w tym
rozdziale.
Do poruszania si˛e w drzewie katalogów używamy polecenia cd ścieżka np.:
$ cd /home/users/zenek/
Ten sam efekt uzyskamy poleceniem
$ cd users/zenek/
44
Rozdział 7. Podstawy
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˛esto po lewej stronie ścieżki podaje si˛e korzeń aby wskazać położenie katalogu lub
pliku bez wzgl˛edu 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˛e katalogu, który chcemy zobaczyć, w przeciwnym wypadku wyświetlona zostanie zawartość katalogu bieżacego.
˛
$ls /
bin
dev home
boot etc initrd
$cd /home
$ls
services users
lib
media
mnt
opt
proc
root
sbin
selinux
srv
sys
tmp
usr
var
Parametr -a powoduje, że funkcja pokazuje również pliki ukryte (zaczynajace
˛ si˛e od
kropki). -R powoduje wylistowanie również podfolderów.
Polecenie pwd powoduje wyświetlenie ścieżki bieżacego
˛
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˛edzie oznaczał
jego własny katalog domowy np.:
$ ls ~/dokumenty
Kolejnym takim katalogiem jest katalog nadrz˛edny oznaczany za pomoca˛ dwóch
kropek. B˛edac
˛ w katalogu: /home/users/zenek możemy przejść o jeden poziom do
góry używajac
˛ polecenia
cd ..
Dzi˛eki temu znajdziemy si˛e w katalogu /home/users.
Data i czas
By wyświetlić aktualny czas i dat˛e systemowa˛ posługujemy si˛e komenda˛ 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˛eczniku man.
Czas działania komputera sprawdzamy komenda˛ uptime.
$ uptime
45
Rozdział 7. Podstawy
5:27pm
up
6:51,
4 users,
load average: 0.32, 0.08, 0.02
W sytuacji gdy chcemy z zmierzyć czas potrzeby
operacji/czynności/procesu to posługujemy si˛e komenda˛ time.
na
wykonanie
$ 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.
Edycja plików konfiguracyjnych
W systemach z rodziny UNIXa konfiguracja systemu jest przechowywana w plikach
tekstowych. Zaleta˛ tego rozwiazania
˛
jest możliwość konfigurowania systemu przy
pomocy bardzo prostych narz˛edzi, wada˛ zaś to że można łatwo popełnić bład.
˛ Dlatego jeśli chcemy tylko przegladać
˛
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˛e zapasowa˛ pliku (pliki kopii zapasowej kończy si˛e tylda).
˛
# cp /etc/poldek/poldek.conf /etc/poldek/poldek.conf~
Teraz możemy zaczać
˛ modyfikować plik, domyślnie instalowanym edytorem plików
jest vim, dlatego dobrze jest umieć si˛e nim posługiwać choćby w podstawowym zakresie. Bardzo użyteczna˛ cecha˛ Vima jest kolorowanie składni podstawowych plików
konfiguracji (o ile nasz terminal jest kolorowy), dzi˛eki czemu łatwo możemy zauważyć ewentualne bł˛edy.
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.
Poczatkuj
˛
acym
˛
można zaproponować edytor mcedit b˛edacy
˛ cz˛eścia˛ programu mc
(Midnight Commander), inne nieco mniej popularne edytory to: emacs, pico, joe
Należy pami˛etać 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 musza˛ kończyć si˛e znakiem nowej linii, dlatego przed zapisem należy pami˛etać o sprawdzeniu czy jest wstawiony. Po raz kolejny
swoja˛ przewag˛e nad innymi edytorami pokazuje Vim, który automatycznie wstawia
znak nowej linii.
Podstawowe narzedzia
˛
kontroli sieci TCP/IP
Aby używać przedstawionych tu programów, należy mieć uprawnienia superużytkownika lub być zapisanym do odpowiedniej grupy. List˛e grup i odpowiadajacych
˛
im uprawnień zamieszczono w sekcja Zarzadzanie
˛
uprawnieniami w Rozdział 14. Bar46
Rozdział 7. Podstawy
dziej zaawansowane narz˛edzia sieciowe opisano w sekcja Narz˛edzia sieciowe w Rozdział 16.
Ping
Najcz˛eściej używanym narz˛edziem diagnostycznym jest program ping - pozwala on
zbadać istnienie połaczenia
˛
mi˛edzy dwoma komputerami, drog˛e pomi˛edzy 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˛etowych, testowania, mierzenia i zarzadzania
˛
siecia,˛ 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˛e 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 sa˛ parametry trasy pomi˛edzy komputerami. Najistotniejszym parametrem jest czas odpowiedzi (time). W przypadku problemów z siecia˛ cz˛eść pakietów może zostać zagubiona,
b˛edzie wskazywane przez specjalny licznik (icmp_seq) oraz przez końcowe statystyki. Brak jakiejkolwiek odpowiedzi można interpretować jako brak połaczenia
˛
sieciowego z interesujacym
˛
nas komputerem, blokad˛e tego typu pakietów na komputerze
zdalnym lub zwyczajne wyłaczenie
˛
maszyny. Na końcu wyświetlane sa˛ dodatkowo
szczegółowe statystyki. Przy prawidłowym połaczeniu
˛
czas odpowiedzi dla sieci lokalnej zazwyczaj nie przekracza 1 ms zaś w internecie może si˛egnać
˛ 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.
Traceroute
Nieco bardziej zaawansowanym programem jest traceroute. Pokazuje on tras˛e jaka˛ przechodza˛ pakiety mi˛edzy naszym komputerem, a sprawdzanym przez nas hostem. Wskazuje on czasy przesłania pakietów pomi˛edzy sasiaduj
˛
acymi
˛
ze soba˛ routerami (tzw. czasy przeskoków), znajdujacymi
˛
si˛e na trasie połaczenia
˛
dwóch maszyn.
47
Rozdział 7. Podstawy
Pozwala śledzić tras˛e pakietów oraz wykrywać różnego rodzaje problemy w sieciach
np.: bładzenie
˛
pakietów w sieci, "waskie
˛
gardła" sieci, oraz awarie połacze
˛ ń.
$ 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 zawierajace
˛ TTL, adres bramki oraz czas przebycia każdej z próbek z różnych gatewayów. Jeśli nie było odpowiedzi w ciagu
˛ trzech
sekund to dla próbki drukowane jest ’*’
MTR
Godnym uwagi programem jest MTR, jest narz˛edziem łacz
˛ acym
˛
funkcje opisanych
wcześniej programów. Program ten śledzi tras˛e połaczenia
˛
mi˛edzy dwoma punktami
podobnie jak traceroute i odświeża wyniki w regularnych odst˛epach czasu.
$ mtr pld-linux.org
Proxy
Zdarza si˛e, że chcemy lub musimy korzystać z serwera pośredniczacego
˛
(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 korzystaja˛ głównie programy działajace
˛ w trybie znakowym np.: lynx, wget, poldek. Definiujemy je nast˛epujaco:
˛ {$protokół}_proxy
np. serwer proxy dla FTP wskazujemy za pomoca˛ zmiennej ftp_proxy zaś dla
HTTP za pomoca˛ http_proxy np.:
export ftp_proxy=w3cache.dialog.net.pl:8080
Sa˛ programy, które akceptuja˛ nazwy tych zmiennych napisanych wyłacznie
˛
wielkimi literami, tak wi˛ec dla wygody i pewności możemy zdefiniować obie wersje.
Wi˛ecej o zmiennych środowiskowych znajdziemy w sekcja Zmienne środowiskowe
w Rozdział 12.
48
•
opcje programu - wiele bardziej rozbudowanych aplikacji używa własnej konfiguracji proxy. Sa˛ to przeważnie programy dla środowiska X-Window np.: gFTP, Firefox,
Opera.
•
konfiguracja środowiska - programy ściśle zwiazane
˛
ze środowiskami graficznymi
Gnome lub KDE używaja˛ ustawień tychże środowisk. Do tego typu programów
należa˛ np.: Epiphany, Konqueror.
Rozdział 8. Zasoby systemu
Tutaj opisano sposób badania zasobów systemu operacyjnego.
Ilość miejsca na dysku
Wiele poleceń zwracajacych
˛
wielkości zajmowanej pami˛eci obsługuje parametr -h
przedstawiajacy
˛ 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
/dev/hdc1
rozm. użyte dost. %uż. zamont. na
36G 5.6G
29G 16% /
Natomiast komenda˛ du można sprawdzać obj˛etość plików oraz całych katalogów.
Uruchomienie du -h wyświetli list˛e plików, katalogów i ich obj˛etości (z bieżacego
˛
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 pomoca˛ opcji -s uzyskamy sum˛e obj˛etości wszystkich plików
$ du -sh /bin
3,4M
/bin
Procesy i zasoby
List˛e wszystkich uruchomionych procesów oraz dotyczace
˛ ich dane otrzymamy
dzi˛eki poleceniu ps
$ ps aux
USER
root
zenek
root
PID %CPU %MEM
VSZ RSS
1350 0.0 0.1 1788 868
2252 0.0 1.2 11316 6668
2301 0.0 0.3 2748 1556
TTY
?
?
tty2
STAT
Ss
Ss
Ss
START
May27
May27
May27
TIME
0:00
0:01
0:00
COMMAND
syslog-ng
xfce4-session
-bash
Oraz w formie drzewa procesów rodziców i procesów potomnych
$ ps xf
PID
2459
2460
2461
2465
2816
TTY
?
?
?
?
?
STAT
S
S
S
S
S
TIME COMMAND
0:32 xmms
0:00 \_ xmms
0:00
\_ xmms
0:00
\_ xmms
0:00
\_ xmms
49
Rozdział 8. Zasoby systemu
W przypadku potrzeby ciagłego
˛
śledzenia zmian w systemie możemy użyć programu top. Program ten pokazuje najbardziej zasobożerne procesy. Dodatkowo na bieżaco
˛ wyświetla całkowite zużycie procesora (CPU), pami˛eci operacyjnej(Mem) oraz
zaj˛etość 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
2240
2892
2695
1
USER
root
zenek
zenek
root
PR
15
16
16
16
NI VIRT RES SHR
0 62644 24m 45m
0 1880 928 1672
0 6532 3824 5056
0 1532 584 1372
S %CPU %MEM
S 1.6 4.9
R 0.6 0.2
R 0.3 0.7
S 0.0 0.1
TIME+
7:37.40
0:00.05
0:01.63
0:00.82
COMMAND
X
top
xterm
init
Informacje o samej pami˛eci i przestrzeni wymiany uzyskamy dzi˛eki komendzie free
$ free
total
Mem:
516244
-/+ buffers/cache:
Swap:
1076312
used
445536
100928
0
free
70708
415316
1076312
shared
0
buffers
11880
cached
332728
Całkowita ilość zużytej pami˛eci (razem z buforami dyskowymi) mieści si˛e w pierwszym wierszu w kolumnie USED. Zaś ilość pami˛eci zużytej jedynie przez programy
mieści si˛e w drugim wierszu w tej samej kolumnie.
Do śledzenia zmian zużycia zasobów systemu w funkcji czasu warto polecić program vmstat z liczba˛ sekund w parametrze. Podany czas jest odst˛epem pomi˛edzy
pomiarami, program pokazuje zmiany w wykorzystaniu pami˛eci, obszaru wymiany,
czasu procesora, przerwań czy wielkości transferu do i z urzadze
˛
ń 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˛eczniku 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˛e 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 maja˛ podana˛ nazw˛e 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
50
Rozdział 8. Zasoby systemu
W systemach uniksowych można ustawiać priorytety uruchamianym programom
badź
˛ też modyfikować bieżacy
˛ priorytet działajacego
˛
procesu. Priorytet jest nazywany jest "liczba˛ 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 oznaczaja˛ wyższy priorytet, zaś dodatnie niższy. Ujemna˛
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łajacym
˛
procesom można zmieniać priorytet. Aby to zrobić używamy polecenia
renice:
$ renice +5 mc
Jak sprawdzić kto jest zalogowany oprócz nas?
Pierwsza˛ komenda˛ jest who. Podaje ona nam nazw˛e użytkownika, terminal na którym jest zalogowany oraz czas rozpocz˛ecia pracy.
$ who
gozda
gozda
gozda
gozda
gozda
gozda
gozda
tty1
pts/1
pts/4
pts/6
pts/8
pts/9
pts/10
Apr
Apr
Apr
Apr
Apr
Apr
Apr
18
18
18
18
18
18
18
10:52
16:21
11:06
14:46
16:25
18:25
18:29
Kolejna komenda w pokazuje nam kto jest zalogowany i co robi na poszczególnych
sesjach.
$ w
6:56pm
USER
gozda
gozda
gozda
gozda
gozda
gozda
up 8:05,
TTY
tty1
pts/1
pts/4
pts/6
pts/9
pts/10
7 users, load average: 1.94, 1.75, 1.61
FROM LOGIN@
IDLE
JCPU
PCPU WHAT
10:52am 8:03m 16.67s 0.02s sh /usr/X11R6/bin/startx
4:21pm 6:45
5.37s 5.32s irssi
11:06am 37:46
3.22s 3.17s ekg
2:46pm 10:17 12.66s 1.08s mp3blaster
6:25pm 0.00s 0.12s 0.03s w
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˛e, jak nazywa si˛e użytkownik, na którym pracujemy.
$ whoami
gozda
51
Rozdział 8. Zasoby systemu
52
Rozdział 9. Zarzadzanie
˛
pakietami
Ten rozdział opisuje metody zarzadzania
˛
pakietami w systemie PLD.
Informacje podstawowe
Wstep
˛
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 zarzadzania
˛
systemem.
W świecie Otwartego Oprogramowania pomi˛edzy programami istnieja˛ liczne powiazania,
˛
które w efekcie wymuszaja˛ konieczność instalacji dodatkowych programów i/lub bibliotek. Pomini˛ecie 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˛ekszość administratorów. Na szcz˛eście istnieja˛ mechanizmy i narz˛edzia,
które pomagaja˛ znacznie zautomatyzować ten proces.
Pakiety w PLD
Elementy systemu operacyjnego dost˛epne sa˛ 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 dotyczacych
˛
danego pakietu. Wymagane dodatkowe pakiety należy wtedy zainstalować samodzielnie.
Menadżery pakietów
Do zarzadzania
˛
pakietami (instalacja, deinstalacja, uzyskiwanie informacji) używa
si˛e specjalnych programów zwanych menadżerami pakietów:
•
Poldek
Poldek to domyślny menadżer pakietów dla PLD. Jest nakładka˛ na RPM-a
o ogromnych możliwościach, pozwalajacym
˛
na znaczna˛ automatyzacj˛e
procesu zarzadzania
˛
dużymi ilościami pakietów. Jest "wołem roboczym"
odcia˛żajacym
˛
administratora w jego żmudnym zaj˛eciu. Konfiguracj˛e i opis Poldka
przedstawiono w sekcja Poldek.
•
PackageKit
Prosty zarzadca
˛
pakietów, dla środowiska X-Window. Został stworzony pierwotnie dla Gnome, ma także wersj˛e dla Qt. Jest to wygodne narz˛edzie, dobrze sprawujace
˛ si˛e przy zrzadzaniu
˛
niewielkimi ilościami pakietów. PackageKit wyświetla
na tacce systemowej dost˛epność 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˛e tym programem zamieszczono w sekcja
RPM.
53
Rozdział 9. Zarzadzanie
˛
pakietami
Pobieranie pakietów
Jedna˛ z najcz˛eś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 sa˛ wst˛epnie skonfigurowane, Aby jednak instalować niestandardowe pakiety lub użyć innego źródła, musimy podać odpowiednie parametry.
Konfiguracja w tym zakresie jest opisana w sekcja Serwery z pakietami w Rozdział 2.
Cechy pakietów w PLD
Zależności miedzy
˛
pakietami
Istotna˛ cecha˛ pakietów RPM jest mechanizm tzw. zależności, dzi˛eki nim w trakcie
instalacji pakietu instalowane sa˛ automatycznie dodatkowe wymagane pakiety. Niekiedy w ramach zależności wymagana jest funkcjonalność dostarczana przez wi˛ecej
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łniajacego
˛
ta˛ sama˛ rol˛e.
Istnieja˛ zależności wymagajace
˛ wzajemnego wykluczania si˛e pakietów, tak aby w
systemie była zainstalowany był tylko jeden program z pośród kilku dost˛epnych.
Jako przykład można wskazać serwery usług tego samego rodzaju lub pakiety zawierajace
˛ 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˛e niepowodzeniem, zaś przy instalacji nowszego
nastapi
˛ jego aktualizacja.
Menadżery pakietów pozwalaja˛ na ignorowanie powyższych zależności, jest to jednak operacja nie zalecana, gdyż powoduje później trudny do ogarni˛ecia bałagan. Wyjatki
˛ od tej zasady powinny być robione jedynie w razie uzasadnionej konieczności,
takim przypadkiem jest np. aktualizacja kernela, operacja ta została opisana w sekcja
Jadro
˛ systemu w Rozdział 11.
Dawniej zależności były budowane na podstawie nazw pakietów, w tej chwili stopniowo wprowadzane sa˛ 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˛ekszych różnic i nie musimy si˛e tym martwić.
Wymagania (requires) i własności (provides)
Ważnymi elementami mechanizmu zależności sa˛ tzw. wymagania i własności. Pierwsza z cech wskazuje list˛e wymaganych dodatkowo elementów (pakietów, plików) do
działania instalowanej aplikacji, druga zaś informuje, które z elementów sa˛ dostarczane wraz z pakietem. Aby poznać wymagania pakietu posłużymy si˛e 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
54
Rozdział 9. Zarzadzanie
˛
pakietami
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˛e w przypadku własności, ponieważ w PLD nierzadko
mamy dost˛epnych wiele pakietów spełniajacych
˛
podobne wymagania. Aby sprawdzić dostarczana˛ 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)
Analizujac
˛ powyższe przykłady można dopatrzyć si˛e 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˛eksza˛ 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˛e na yes (zalecane) to instalacja programu może
wygladać
˛
nast˛epujaco:
˛
poldek:/all-avail> install logrotate
Przetwarzanie zależności...
Wi˛
ecej niż jeden pakiet udost˛
epnia 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˛e pakietów mogacych
˛
pełnić funkcj˛e demona zegarowego (crondaemon), dodatkowo podana jest domyślna wartość wyboru,
nie zawsze jest to najlepszy wybór dla konkretnej instalacji, dlatego powinniśmy si˛e
upewnić, że wybieramy najwłaściwszy pakiet. Wi˛ecej informacji o obsłudze i konfiguracji Poldka odnajdziemy w sekcja Poldek.
Zawartość pakietów
Pakiety moga˛ 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˛eściej stosowane jest
to drugie rozwiazanie:
˛
osobno przechowywane sa˛ pliki uruchomieniowe, osobno biblioteki, a jeszcze osobno moduły, wtyczki i dodatki. Ponadto jeśli tylko można to sa˛
umieszczane w pojedynczych pakietach, dzi˛eki 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˛edzać miejsce na dysku.
Nierzadko do osobnych pakietów trafiaja˛ elementy aplikacji, które zostały przewidziane przez jej twórców jako kompletna instalacja. Nie należy si˛e tego obawiać,
gdyż mechanizm zależności wymusi instalacj˛e wszystkich wymaganych dodatkowo
pakietów.
Tak silne rozdrobnienie powoduje czasami, że do przy instalacji mechanizm zależności zaznacza spora˛ ilość dodatkowych pakietów. Potrafi to wprowadzić w konsternacj˛e, jednak nie należy si˛e tego obawiać, gdyż sa˛ to zazwyczaj małe pakiety i po
zainstalowaniu zajmuja˛ tyle samo lub mniej niż domyślna instalacja.
55
Rozdział 9. Zarzadzanie
˛
pakietami
Aby ułatwić poruszanie si˛e w tym gaszczu,
˛
możemy posłużyć si˛e 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, że znamy nazw˛e pliku, ale nie wiemy w jakim pakiecie si˛e znajduje. Do
odnalezienia pakietu posłużymy si˛e poleceniem:
poldek:/all-avail> search -f */sendmail
Dodatkowo możemy korzystać z zamieszczonej dalej tabeli.
Konwencja nazw pakietów w PLD
Nazwy pakietów maja˛ nast˛epujac
˛ a˛ budow˛e: {$nazwa}-{$wersja}.{$arch}.rpm
np.: 0verkill-0.16-3.i686.rpm. Tak wygladaj
˛ a˛ nazwy pakietów w systemie
plików lub na serwerze FTP. W menedżerach pakietów posługujemy si˛e jedynie
nazwa˛ lub nazwa˛ i wersja˛ (nie liczac
˛ instalacji za pomoca˛ rpm-a).
Tabela 9-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˛e, 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, sa˛ niekiedy
wymagane przez inne programy
program-tools, program-utils,
dodatkowe narz˛edzia, zwykle nie sa˛
program-progs
konieczne do podstawowej pracy
programu
program-extras
dodatkowe, rzadziej używane elementy
program-mod, program-plugin, różnej maści moduły, "wtyczki", applety
program-applets, program-addon
i dodatki przeważnie nie sa˛ konieczne
do podstawowej pracy programu
56
program-skin(s), program-theme(s)
"skórki" i "tematy" modyfikujace
˛ wyglad
˛
programu
program-driver
sterowniki
program-backend
specjalne interfejsy służace
˛ do
rozszerzania możliwości programu,
łaczenia
˛
z innymi programami,
sprz˛etem itp.
program-i18n
dodatkowe wersje j˛ezykowe
program-doc
dokumentacja programu
Rozdział 9. Zarzadzanie
˛
pakietami
Nazwa pakietu
Zawartość
program-devel
pakiety potrzebne dla programistów i
osób które zajmuja˛ si˛e własnor˛eczna˛
kompilacja˛ programów, badź
˛
budowaniem pakietów.
program-static
program skompilowany statycznie - nie
wymaga bibliotek
program-debuginfo
informacje dla debuggera - pliki
użyteczne tylko dla osób badajacych
˛
problemy z działaniem programu
lib_nazwa_biblioteki
zestaw uniwersalnych bibliotek, nie
zwiazanych
˛
z żadnym konkretnym
programem.
usługa-inetd, usługa-standalone
alternatywne pakiety służace
˛ 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˛e wykluczaja˛ 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 urzadze
˛
ń
kernel
pakiety okołokernelowe, zostały
omówione w sekcja Jadro
˛ systemu w
Rozdział 11
Metapakiety
Wada˛ silnego rozdrobnienia pakietów jest pracochłonne zarzadzanie,
˛
aby temu zaradzić stworzono tzw. metapakiety, zwane również pakietami wirtualnymi. Sa˛ to pakiety zawierajacy
˛ jedynie wymagania (requires), nie zawieraja˛ żadnych plików, ani
własności (provides). Ich zadaniem jest zautomatyzowana instalacja wi˛ekszych grup
pakietów oraz utrzymanie wstecznej zgodności w nazwach.
Cz˛eść metapakietów łatwo odnajdziemy dzi˛eki nazwie, która zawiera słowo
metapackage, np. metapackage-gnome. Aby poznać list˛e wymagań takiego pakietu,
użyjemy opisanego nieco wcześniej polecenia desc -r trybu interaktywnego
Poldka.
Komunikaty
Prace przy zarzadzaniu
˛
pakietami niekiedy kończa˛ si˛e komunikatami skierowanymi
do administratora, sa˛ to dość ważne informacje, dlatego powinniśmy je uważnie czytać. Zazwyczaj dotycza˛ plików konfiguracji, zarzadzania
˛
użytkownikami/grupami,
modyfikacji systemu rc-skryptów oraz zalecenia dalszego post˛epowania 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.
57
Rozdział 9. Zarzadzanie
˛
pakietami
Wpływ pakietów na prace˛ systemu
Pakiety, oprócz plików programu, zawieraja˛ dokumentacj˛e, przykładowe pliki konfiguracji, strony podr˛ecznika systemowego (man, info) oraz automatyk˛e. Owa automatyka jest uruchamiana w trakcie instalowania badź
˛ odinstalowania pakietu i
wykonuje konieczne prace w systemie, dzi˛eki czemu zmniejsza si˛e 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 jakaś
˛ usług˛e to zostanie zapisana odpowiednia informacja do skryptów startowych i nowe oprogramowanie uruchomi si˛e przy najbliższej
zmianie trybu pracy lub restarcie systemu. Jeżeli jakaś usługa jest wyłaczona
˛
z działania i nastapi
˛ jej aktualizacja, to w dalszym ciagu
˛ nie b˛edzie uruchamiana.
Jeśli działa usługa, a my ja˛ zaktualizujemy lub doinstalujemy dodatkowy moduł, to
zostanie ona automatycznie zrestartowana lub taka operacja zostanie zasugerowana przez pakiet. B˛edzie 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˛e rc-skryptów dokładniej omówiono w sekcja Zarzadzanie
˛
podsystemami i usługami w Rozdział 14.
Wpływ pakietów na pliki konfiguracji
Po aktualizacji pakietu nie sa˛ naruszanie istniejace
˛ pliki konfiguracji, nowe wersje
tych plików sa˛ zapisywane z rozszerzeniem ".rpmnew". Przykładowo po zaktualizowaniu pakietu sudo obok pliku /etc/sudoers pojawi si˛e nowy plik o nazwie
/etc/sudoers.rpmnew, tak wi˛ec zaktualizowany program b˛edzie używał starego
pliku konfiguracji. W wi˛ekszości wypadków nie b˛edzie to stanowić problemu, jednak dla pewności należy skonfigurować plik dostarczony z nowszym pakietem na
wzór poprzedniej konfiguracji i zmienić mu nazw˛e poprzez usuni˛ecie omawianego
rozszerzenia. Jest to pierwsza rzecz, która˛ 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˛e jego
zawartość w stosunku do obecnie używanego pliku konfiguracji. Posłużymy si˛e 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 sa˛
jego pliki konfiguracji, posiadaja˛ one rozszerzenie ".rpmsave", możemy je zachować
lub skasować jeśli uznamy że sa˛ nam zb˛edne.
Osoby chcace
˛ trzymać porzadek
˛
w systemie powinny zajmować si˛e plikami .rpmnew
i .rpmsave od razu po pracy z menadżerem pakietów. Pliki łatwo odnajdziemy, gdyż
wyst˛epuja˛ zwykle w katalogu /etc, odszukamy je nast˛epujaco:
˛
$ find /etc -name "*rpmnew"
$ find /etc -name "*rpmsave"
Architektury pakietów
W PLD programy sa˛ kompilowane dla wielu architektur sprz˛etowych, pozwala to
na używanie systemu na bardziej różnorodnym sprz˛ecie oraz na lepsze dopasowanie do używanego procesora. Architektur˛e pakietu rozpoznamy po nazwie, jest to
58
Rozdział 9. Zarzadzanie
˛
pakietami
kilkuznakowe oznaczenie znajdujace
˛ si˛e tuż przed rozszerzeniem pliku. W przypadku pakietu 0verkill-0.16-3.i686.rpm jego architektura to i686.
Aby sprawdzić architektur˛e komputera, używamy polecenia arch lub uname -m.
Wybór architektury
Pakiety zbudowane dla poszczególnych architektur sa˛ umieszczane w odpowiednich katalogach na serwerze. Ścieżka katalogów na serwerze wyglada
˛ nast˛epujaco:
˛
/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 wybrana˛ architektura˛ "i686". Poldek instaluje pakiety z tej architektury,
do której należał pakiet z Poldkiem, co w zasadzie jest jednoznaczne z architektura,˛
która została wybrana przy instalacji. Konfiguracja źródeł pakietów w Poldku została opisana w sekcja Poldek.
Procesory
Tabela 9-2. Lista nazw kodowych architektur i odpowiadajacych
˛
im rodzin procesorów:
Nazwa architektury
Obsługiwana platforma
Dostepna
˛
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˛etać by instalować pakiety wyłacznie
˛
przeznaczone dla używanej architektury. Wyjatkiem
˛
sa˛ pakiety z oznaczeniem noarch oraz pakiety przeznaczone dla
procesorów Intel x86 i zgodnych: i386, i486, itd.
Architektury z rodziny x86 sa˛ bardziej lub mniej wyspecjalizowanymi grupami, najbardziej ogólna jest 386, zaś każda nast˛epna w kolejności jest bardziej wyspecjalizo59
Rozdział 9. Zarzadzanie
˛
pakietami
wana. Im w˛eż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˛edzie działać. Jeśli mamy nowszy procesor, to b˛edziemy mogli użyć bardziej wyspecjalizowanej architektury, a co
za tym idzie lepiej wykorzystać jego potencjał.
Źródła pakietów
W PLD jest kilka grup pakietów (źródeł) w ramach tej samej wersji dystrybucji, różnia˛ si˛e one wersjami pakietów i zastosowaniem. Ich list˛e uzyskamy za pomoca˛ Poldka:
$ poldek -l
W wi˛ekszości wypadków, b˛edziemy 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 sa˛ oznaczane za pomoca˛ etykiet:
•
main (np. th): główne źródło pakietów (domyślne), zawiera stabilne wersje, od
chwili wydania danej wersji dystrybucji, nie sa˛ tu dokonywane żadne zmiany
•
obsolete (np. th-obsolete): stare pakiety, usuni˛ete z main w wyniku aktualizacji.
Dzi˛eki 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): trafiaja˛ tu pakiety prostu z builderów, bez sprawdzenia czy w
ogóle działaja˛ i czy sa˛ spełnione zależności. Używanie pakietów z tego źródła jest
dosyć ryzykownym krokiem, dlatego należy go wykonywać wyłacznie
˛
w ostateczności
•
ready (np. th-ready): nast˛epny krok w życiu pakietu, jeśli pakiety działaja˛ bez
zarzutu, to sa˛ przenoszone razem z zależnościami do main. Pakiety te sa˛ już wst˛epnie przetestowane, nadal jednak powinniśmy zachować ostrożność instalujac
˛ pakiety z tego katalogu
•
debuginfo (np. th-debuginfo, th-ready-debuginfo): pakiety zawierajace
˛
wyłacznie
˛
symbole potrzebne przy debugowaniu. Pakiety te sa˛ 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˛ecznie 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 sa˛ przygotowane dla i686.
Źródła używane w starszych wersjach PLD:
•
updates (np. ac-updates) - aktualizacje, zaleca si˛e regularne sprawdzanie
czy nie pojawiaja˛ si˛e tu nowe pakiety, źródło stało si˛e zb˛edne w Th i nie jest
używane. W Th w roli updates używa si˛e ź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 nastapiło
˛
ich połaczenie
˛
i od tej pory źródło
nazywa si˛e {$wersja}-updates.
•
supported (np. ac-updates) - nietypowe pakiety, które nie powinny być trzymane
w głównym źródle. Sa˛ tu umieszczane pakiety rzadko używane lub starsze wersje,
podobnie jak updates przestało mieć racj˛e bytu w Th.
Aby wybrać źródło inne niż domyślne należy użyć parametru -n np.:
60
Rozdział 9. Zarzadzanie
˛
pakietami
$ poldek -n th -n th-ready
Należy pami˛etać, że użycie każdego źródła b˛edzie możliwe dopiero po pobraniu
aktualnych indeksów:
$ poldek -n debuginfo --up
Ścieżki do podstawowych źródeł w konfiguracji Poldka
Poldek
jest
dostarczany
sa˛
one
zdefiniowane
z
właściwie
skonfigurowanymi
etykietami,
w
plikach
/etc/poldek/source.conf
i
/etc/poldek/repos.d/pld.conf. Adresy oficjalnych serwerów i mirrorów
znajdziemy w sekcja Serwery z pakietami w Rozdział 2. Etykieta źródła rozpoczyna
si˛e od przedrostka określajacego
˛
wersj˛e dystrybucji, zapisana˛ małymi literami,
poniżej przedstawiono ja˛ jako ciag
˛ {$wersja}, który może mieć wartość np. ra, ac
lub th. Ciag
˛ {$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
Cykl życia pakietu
Zbudowany pakiet trafia do test gdzie oczekuje na zbudowanie zależności, nast˛epnie jest przenoszony przez RM-a do ready. kiedy wszytko jest w porzadku
˛
trafia w
końcu do main/updates. W przypadku bardziej krytycznych pakietów kiedy pojawia
si˛e aktualizacja to starsza wersja trafia do obsolete. Proces ten został szerzej opisany
w podr˛eczniku dewelopera1.
Budowanie pakietów
Wstep
˛
W wi˛ekszości wypadków b˛edziemy korzystali z gotowych pakietów, zdarza si˛e jednak, że nie ma dost˛epnego jakiegoś pakietu lub nie odpowiadaja˛ nam opcje z jakimi
został skompilowany. Co wi˛ecej może si˛e zdarzyć, że b˛edziemy potrzebować starszej, niedost˛epnej już wersji programu.
W takim wypadku nie powinniśmy pod żadnym pozorem kompilować samodzielnie
programów, jeśli nie upewnimy si˛e, że nie można go zbudować.
Budowanie
Budowanie jest operacja˛ tworzenia pakietów na podstawie plików spec, do tego nie
potrzeba umiej˛etności tworzenia speców ani wiedzy dewelopera. Wystarczy odpowiednio przygotować środowisko, zainstalować kilka pakietów i użyć odpowiedniego narz˛edzia. Tak utworzymy nasz własny, prywatny builder, który może nam
wielokrotnie służyć.
61
Rozdział 9. Zarzadzanie
˛
pakietami
Opis budowania pakietów odnajdziemy w przewodniku dla deweloperów
PLD,
wszystkie
potrzebne
informacje
odnajdziemy
pod
adresem
pld-linux.org/DevelopingPLD2 oraz w sekcja Co jest potrzebne w Rozdział 19.
Zarzadzanie
˛
Jeśli utworzymy środowisko wg. podanych wskazówek pakiety b˛eda˛ umieszczane
w katalogu ~/rpm/RPMS. Ułatwi to ich instalacj˛e, gdyż Poldek ma ustawione lokalne
źródło dla tego katalogu. Zbudowany pakiet b˛edziemy mogli instalować dowolna˛
ilość razy, warto wi˛ec przechowywać je uznamy że moga˛ nam si˛e jeszcze przydać.
Jeśli wymagamy od programu nietypowej funkcjonalności i budujemy pakiet z niestandardowymi opcjami to może si˛e zdarzyć, że przy aktualizacji zastapimy
˛
nasza˛
wersj˛e programu ta˛ z pakietu dystrybucyjnego. Dlatego musimy być czujni przy operacji aktualizacji lub dopisać nazw˛e tego pakietu do opcji hold w pliku konfiguracji
Poldka.
Poldek
Wstep
˛
Poldek jest nakładka˛ na program rpm, zapewniajac
˛ a˛ wygodny interfejs obsługi oraz
kilka dodatkowych funkcji. Poldek jest pośrednikiem w pobieraniu pakietów, indeksuje ich listy oraz ułatwia zarzadzanie
˛
wieloma źródłami, może pobierać pakiety lokalnie (dyski twarde, nap˛edy 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 zastapić
˛
programu rpm.
Poldek do wielu operacji (pobieranie pakietów i indeksów, wyszukiwanie informacji
itp.) nie wymaga praw administratora, wymagane sa˛ jednak do operacji zapisu w
systemie, np. instalowanie, odinstalowanie, itp. Poldek w tym celu automatycznie
używa programu sudo, z tego wzgl˛edu 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˛eło by
zbyt wiele miejsca, dlatego zajmiemy si˛e jedynie najcz˛eściej używanymi opcjami. Nie
powinniśmy si˛e jednak tym przejmować, program jest gotowy do działania od razu
po zainstalowaniu i w wi˛ekszości wypadków nie ma potrzeby nic modyfikować.
Musimy jednak si˛e upewnić, że mamy dobrze skonfigurowane adresy serwerów i
architektur˛e pakietów, co zostało omówione w dalszej cz˛eści rozdziału.
Wi˛ecej informacji o poldku i jego konfiguracji odnajdziemy w podr˛eczniku systemowym (man,info) oraz na witrynie projektu pod adresem http://poldek.pld-linux.org.
Pliki konfiguracji
Konfiguracja Poldka jest przechowywana w kilku plikach wewnatrz
˛
katalogu
/etc/poldek, to czy dany plik konfiguracji jest używany określa opcja %include,
umieszczona w głównym pliku konfiguracji.
- główny plik konfiguracji, jeśli nie zostało zaznaczone inaczej to
właśnie ten plik ma na myśli autor
• poldek.conf
• aliases.conf
62
- zawiera zdefiniowane aliasy poleceń dla trybu interaktywnego
Rozdział 9. Zarzadzanie
˛
pakietami
- zawiera konfiguracj˛e alternatywnych programów do pobierania pakietów, domyślnie konfiguracja z tego pliku nie jest wczytywana.
• fetch.conf
• repos.d/pld.conf
• source.conf
• .poldekrc
- ustawienia źródeł pakietów dla PLD
- plik przeznaczony dla lokalnych źródeł pakietów
- plik konfiguracji użytkownika, który umieszczamy w katalogu do-
mowym.
Konfiguracja pobierania pakietów
W pliku repos.d/pld.conf mamy dwie ważne opcje wskazujace
˛ skad
˛ maja˛ być pobierane pakiety. Opcja _pld_arch wskazuje architektur˛e sprz˛etowa˛ pakietów, zaś
_pld_prefix mówi skad
˛ maja˛ być pobierane pakiety i dla jakiej wersji dystrybucji.
Wi˛ecej o architekturach pakietów znajdziemy w sekcja Architektury pakietów, adresy
serwerów i oficjalnych mirrorów zawarto w sekcja Serwery z pakietami w Rozdział 2.
Poldek zacznie korzystać z proxy po ustawieniu właściwych zmiennych środowiskowych - zarówno w przypadku wbudowanego klienta jak i klientów zewn˛etrznych
(np. wget). Możemy też użyć opcji proxy. Konfiguracj˛e proxy dla Linuksa szerzej
opisano w sekcja Proxy w Rozdział 7.
Inne opcje
Poldek przechowuje indeksy pakietów w katalogu zdefiniowanym w opcji
cachedir, domyślnie jest to $HOME/.poldek-cache. Jest to dobre rozwiazanie
˛
jeśli z
Poldka korzysta jeden użytkownik, jeśli ma używać go wi˛ecej 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˛e pakietów które znalazły si˛e na jej liście.
ignore - opcja ukrywajaca
˛ podane pakiety na liście dost˛epnych.
choose equivalents manually - pozwala wybierać użytkownikowi jeden z kilku
pakietów oferujacych
˛
ta˛ sama˛ funkcjonalność, domyślnie wyłaczona
˛
przez co wybór
nast˛epuje automatycznie. Pozwala bardzo precyzyjnie wybierać pakiety do zainstalowania.
Tryby pracy
Kolejna˛ ważna˛ jego cecha˛ 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ń korzystaja˛ niemal
zawsze z niego. Stad
˛ jeśli nie zostało to inaczej napisane to właśnie ten tryb autor ma
na myśli.
Tryb interaktywny
Praca w trybie interaktywnym przypomina do złudzenia używanie powłoki systemowej (shella). Dost˛epne sa:˛ historia poleceń, pomoc, dopełnianie komend i nazw
pakietów, aliasy, potoki itp. Na potrzeby tego rozdziału w przykładach taki tryb b˛edziemy sygnalizować nast˛epujacym
˛
znakiem zach˛ety:
poldek>
63
Rozdział 9. Zarzadzanie
˛
pakietami
Jedna˛ z najwi˛ekszych zalet trybu interaktywnego jest dopełnianie nazw pakietów i
poleceń za pomoca˛ tabulatora. Przykładowo naciśni˛ecie klawisza tab po poleceniu:
poldek> upgrade
spowoduje wyświetlenie listy pakietów, dla których sa˛ dost˛epne aktualizacje.
W przypadku nazw pakietów możemy używać "gwiazdki" jako znaku zast˛epczego
(wildcard), który zast˛epuje dowolny ciag
˛ znaków. Przedstawiono to na poniższym
przykładzie, który spowoduje zainstalowanie wszystkich pakietów o nazwach zaczynajacych
˛
si˛e od "gnome-theme"
poldek> install gnome-theme*
Zazwyczaj nie ma potrzeby podawania wersji programu, jednak w pewnych przypadkach możemy mieć dost˛epnych kilka wersji tego samego pakietu (np. przy używaniu wielu źródeł na raz). Wtedy musimy podać jednoznacznie wersj˛e pakietu.
Mamy do dyspozycji potoki:
poldek> ls perl* | grep curses
Możemy również wywoływać polecenia zewn˛etrzne:
poldek> ls perl* | !wc -l
W obsłudze źródeł i pakietów wyst˛epuje wiele podobieństw do systemu plików. Źródła sa˛ traktowane jak katalogi zaś pakiety jak pliki, do poruszania si˛e w tym środowisku używamy poleceń takich jak pwd, ls oraz cd.
Tryb wsadowy
Opis wszystkich parametrów trybu wsadowego uzyskamy dzi˛eki poleceniu
$ poldek --help
Jest tam całe bogactwo opcji, dzi˛eki którym b˛edziemy mogli ułatwić sobie prac˛e. Na
szczególna˛ uwag˛e zasługuje parametr --shcmd pozwalajacy
˛ 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
Pierwsze kroki z Poldkiem
Poldek uruchomiony po raz pierwszy (bez podawania parametrów) sprawdza czy
istnieja˛ indeksy dla źródeł, które ma automatycznie obsługiwać. Jeśli ich nie ma, to
zostana˛ automatycznie pobrane i zapisane w miejscu wskazanym przez omówiona˛
powyżej opcj˛e cachedir. Po tej operacji zostanie uruchomiony Poldek trybie interaktywnym i b˛edzie gotowy do pracy. Przed każda˛ kolejna˛ praca˛ z programem musimy
64
Rozdział 9. Zarzadzanie
˛
pakietami
uaktualnić indeksy pakietów, na wypadek gdyby w źródłach nastapiły
˛
zmiany, w
przeciwnym razie możemy otrzymywać komunikaty o braku pakietów. Aby uaktualnić indeksy domyślnych źródeł wywołujemy nast˛epujaco
˛ 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˛e po parametrze -n, źródła pakietów zostały
omówione w dalszej cz˛eści rozdziału.
Po uruchomieniu programu mamy od razu możliwość zarzadzania
˛
pakietami, aby
zobaczyć list˛e dost˛epnych poleceń wpisujemy help i naciskamy klawisz Enter. Wi˛ekszość poleceń ma składni˛e:
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
Zarzadzanie
˛
pakietami
Mamy dost˛epne nast˛epujace
˛ polecenia zarzadzania
˛
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˛epnych (ls), wyświetlenia informacji
(desc) oraz przeszukiwania bazy (search). W wielu przypadkach pomocna b˛edzie
opcja -t, która przeprowadzi symulacj˛e całej operacji, dzi˛eki której dowiemy si˛e jak
duże i jak istotne zmiany zostana˛ dokonane w systemie po operacji. Najcz˛eściej jest
używana przy aktualizacji i usuwaniu pakietów.
Poniżej zamieszczono kilka przykładów zarzadzania
˛
pakietami, na poczatek
˛
przykład wyświetlenia listy pakietów (wszystkich zaczynajacych
˛
si˛e 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˛ecej informacji znajdziemy w pomocy Poldka.
65
Rozdział 9. Zarzadzanie
˛
pakietami
Źródła
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˛e
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
ac-updates-security ftp://ftp.ac.pld-linux.org/dists/ac/updates/security/athlon/ (type
home
/home/users/qwiat/rpm/RPMS/ (noauto,noautoup,type=dir)
Nie wszystkie źródła sa˛ obsługiwane automatycznie, zależy to od ustawienia opcji
noauto w konfiguracji danego źródła (zauważymy ja˛ też na powyższym zrzucie
ekranu). Aby tymczasowo użyć innego zestawu źródeł przy uruchomieniu musimy
podać ich list˛e poprzedzonych parametrem -n np.:
$ poldek -n ac -n ac-ready
Teraz lista dost˛epnych pakietów b˛edzie si˛e 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˛edzie zmodyfikować ustawienie opcji noauto. Oficjalne źródła PLD
zostały wyczerpujaco
˛ omówione w sekcja Źródła pakietów.
Istnieje możliwość instalacji pakietów Poldkiem z lokalnych źródeł, zamiast posługiwania si˛e 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 pomoca˛ opcji -s:
poldek -s /jakis/katalog
Poldek po uruchomieniu tworzy dla wygody dodatkowe źródła wirtualne:
all-avail i installed. Pierwsze zawiera sum˛e 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ł˛edy o nieistniejacych
˛
pakietach.
Porady
Przy pracy z wieloma pakietami możemy utracić możliwość przewini˛ecia ekranu w
celu odczytania najstarszych komunikatów. Aby temu zaradzić użyjemy opcji --log,
dzi˛eki której, wskażemy plik do którego trafia˛ wszystkie komunikaty.
66
Rozdział 9. Zarzadzanie
˛
pakietami
RPM
Instalowanie pakietów
Używajac
˛ programu rpm posługujemy si˛e nast˛epujacym
˛
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 jedyna˛ rzecza˛ jaka˛ musimy
wykonać jest wydanie polecenia rpm z opcja˛ -i. Używajac
˛ kombinacji -ivh dla
procesu instalacji, -Uvh uzyskamy pasek post˛epu instalacji dla poszczególnych
instalowanych pakietów.
# rpm -i docbook-dtd31-sgml-1.0-12.noarch.rpm
Brak ostrzeżeń lub bł˛edów oznacza prawidłowa˛ instalacj˛e, teraz nieco skomplikujemy sytuacj˛e:
# 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˛e nie powiodła, ponieważ pakiet libghttp-devel wymaga
zainstalowanego pakietu libghttp. Aby instalacja pakietu si˛e powiodła wykonujemy nast˛epujace
˛ polecenie:
# rpm -i libghttp-devel-1.0.9-4.i686.rpm libghttp-1.0.9-4.i686.rpm
Teraz wszystko jest w porzadku,
˛
oba pakiety sa˛ zainstalowane. Możliwe jest instalowanie pakietu z opcja˛ ignorowania zależności: --nodeps, opcj˛e ta˛ stosujemy jednak
w ostateczności.
Aktualizowanie pakietów
Aktualizacja przebiega podobnie jak instalacja, tyle że używamy przełacznika
˛
-U np.:
# rpm -U docbook-dtd31-sgml-1.0-13.noarch.rpm
Należy pami˛etać o tym, że aktualizacja nastapi
˛ 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
Odinstalowywanie pakietów
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˛e stało? Podano nieprawidłowa˛ nazw˛e pakietu, należy pami˛etać o tym, że
przy odinstalowaniu pakietu nie podaje si˛e rozszerzenia pakietu. Poprawne polecenie przedstawiono poniżej:
67
Rozdział 9. Zarzadzanie
˛
pakietami
# 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˛e w przypadku zainstalowania jednej wersji pakietu, drugi zaś używa si˛e w przypadku kilku różnych (np. dwie różne wersje jadra).
˛
Uwagi
Program rpm posiada o wiele bogatsze opcje, przedstawiono tu zaledwie kilka najważniejszych, wi˛ecej można znaleźć w podr˛eczniku systemowym (man/info).
Bezpieczeństwo
Uruchamianie Poldka
Dobrym zwyczajem jest używanie Poldka z poziomu zwykłego użytkownika z wła˛
czona˛ obsługa˛ sudo:
use sudo = yes
Jest to domyślne zachowanie Poldka, dzi˛eki temu dla operacji wymagajacych
˛
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.
Podpisy pakietów
W PLD mamy możliwość kontrolowania podpisów pakietów, dzi˛eki czemu zyskujemy pewność, że instalujemy pakiety z zaufanego źródła. Importujac
˛ klucz klucz
publiczny GPG unikamy również zasypywania nast˛epujacymi
˛
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˛e 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˛edzie wygladało
˛
nast˛epujaco:
˛
[source]
type = %{_ac_idxtype}
name = ac
path = %{_pld_prefix}/PLD/%{_pld_arch}/PLD/RPMS/
signed = yes
68
Rozdział 9. Zarzadzanie
˛
pakietami
Teraz Poldek b˛edzie ostrzegał przy instalacji niepodpisanego pakietu:
uwaga: rhythmbox-0.9.8-2.athlon.rpm: gpg/pgp nie znaleziono podpisu
bład:
˛
rhythmbox-0.9.8-2: signature verification failed
Wystapiły
˛
bł˛
edy weryfikacji podpisu. Kontynuować? [y/N]
Wi˛ecej informacji w dokumentacji programu rpm i Poldka.
Zaawansowane operacje
Lista ostatnio instalowanych pakietów
Jeśli chcemy utworzyć list˛e zainstalowanych pakietów w kolejności wg. daty instalacji to posłużymy si˛e poleceniem
# rpm -qa --last
Odinstalowanie "opornych" pakietów
Bywa, że pakiet w wyniku bł˛edów w skryptach nie pozwala si˛e odinstalować,
możemy go jednak łatwo usunać
˛ wydajac
˛ polecenie deinstalacji z parametrem
--noscripts np.:
# rpm -e lockdev-1.0.2-1 --noscripts
Repackage - bezpieczna aktualizacja
Jeśli obawiamy si˛e aktualizacji jakichś pakietów, możemy posłużyć si˛e operacja˛
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łaczyć
˛
repakietacj˛e wystarczy, że ustawimy niezerowa˛ wartość
dla makra %_repackage_all_erasures w pliku /etc/rpm/macros:
%_repackage_all_erasures
1
Od tej pory każda aktualizacja rozpocznie si˛e 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 trafiaja˛ 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.
69
Rozdział 9. Zarzadzanie
˛
pakietami
Aby cofnać
˛ wersj˛e pakietu wykonujemy nast˛epujac
˛ a˛ operacj˛e:
rpm -U --oldpackage /var/spool/repackage/1189984560/geninitrd-10000.18-6.noarch
Kontrola integralności systemu
Zdarza si˛e, że potrzebujemy sprawdzić czy nie nastapiły
˛
w systemie uszkodzenia
jakichś plików lub ich modyfikacje. Takie zdarzenia moga˛ si˛e pojawić w wypadku
uszkodzenia systemu plików, bł˛edu człowieka lub ataku crackera. W obu przypadkach możemy posłużyć si˛e weryfikacja˛ 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˛e 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˛etać, że wiele plików konfiguracyjnych (oznaczanych literka˛ "c") jest modyfikowanych
po instalacji programu, dlatego ich obecność na liście jest naturalna.
Załóżmy, że poznaliśmy list˛e zmodyfikowanych plików i chcemy na jej podstawie
stworzyć list˛e pakietów do reinstalacji. Zaczynamy od odfiltrowania wszystkiego
prócz nazw plików:
# rpm --verify --all | sed ’s/.*\ //’ > pliki.txt
Taka˛ list˛e możemy teraz sobie obejrzeć i ewentualnie zmodyfikować, kiedy lista już
nam odpowiada sprawdzamy z jakich pakietów pochodza˛ pliki:
# cat pliki.txt | xargs rpm -qf --qf ’%{NAME}\n’ | sort -u
> pakiety.txt
Powyższy ciag
˛ poleceń stworzy list˛e składajac
˛ a˛ si˛e wyłacznie
˛
z nazw pakietów, by
uniknać
˛ problemów w przypadku różnic w wersjach pakietów: tych zainstalowanych z dost˛epnymi do instalacji. Majac
˛ list˛e unikalnych nazw pakietów, możemy
wywołać polecenie ich reinstalacji:
# poldek --reinstall --pset pakiety.txt
Naprawa bazy RPM
System pakietów RPM opiera si˛e 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ł˛edami w jej strukturze. Na poczatek
˛
należy si˛e upewnić, że żaden z procesów nie operuje na bazie:
# lsof | grep /var/lib/rpm
jeśli nie wyświetla˛ nam si˛e żadne informacje to możemy usunać
˛ pliki blokad, łatwo
je rozpoznamy, gdyż zaczynaja˛ si˛e od __db
# rm -f /var/lib/rpm/__db*
70
Rozdział 9. Zarzadzanie
˛
pakietami
Teraz możemy spróbować czy sytuacja si˛e poprawiła, jeśli nie to musimy spróbować
przebudować baz˛e. Zaczynamy od wykonania kopii bezpieczeństwa:
# tar -czf rpm.tar.gz /var/lib/rpm/
nast˛epnie wydajemy polecenia przebudowania:
# rpm --rebuilddb
W wi˛ekszości wypadków ta operacja pomoże nam odzyskać baz˛e, może si˛e jednak
zdarzyć, że odtworzy nam si˛e tylko jej cz˛eść. Do oszacowania strat konieczne b˛edzie
utworzenie listy pakietów w bazie:
# rpm -qa
Kiedy ustalimy list˛e brakujacych
˛
pozycji, najłatwiejszym sposobem dodania brakuja˛
cych wpisów b˛edzie instalacja pakietów z opcja˛ --justdb, powodujac
˛ a˛ jedynie modyfikowanie bazy RPM.
Reinstalacja wszystkich pakietów - zmiana architektury
Zdarza si˛e, ż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
Przypisy
1. http://pld-linux.org/pl/DevelopingPLD
2. http://pld-linux.org/pl/DevelopingPLD
3. http://poldek.pld-linux.org
71
Rozdział 9. Zarzadzanie
˛
pakietami
72
Rozdział 10. Bootloader
Ten rozdział zawiera dost˛epnych w PLD bootloaderów
Wstep
˛
Podczas startu naszego komputera z naszego dysku uruchamiany jest bootloader. To
właśnie on odpowiada za załadowanie prawidłowego jadra
˛
systemu, czy też przekazywanie do jadra
˛
specjalnych parametrów. Dla architektur x86 mamy do wyboru
jeden z dwóch bootloaderów: LILO oraz Grub (brak wersji 64 bit).
Parametry jadra
Oba bootloadery pozwalaja˛ na przekazywanie do jadra
˛
specjalnych parametrów,
dzi˛eki którym możemy wpływać na start lub prac˛e systemu jeszcze przed jego załadowaniem. Parametry przekazane przed startem systemu b˛eda˛ przesłaniać te użyte
w konfiguracji bootloadera. W poniższej tabeli przedstawiono najcz˛eściej używane
opcje.
Przekazywanie parametrów jadra
˛
wyglada
˛ podobnie w obu wypadkach, po włacze˛
niu specjalnego trybu w bootloaderze otrzymujemy wiersz, na końcu którego dopisujemy potrzebne nam parametry lub modyfikować istniejace.
˛ 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˛ecie
klawisza e, w przypadku LILO wpisujemy etykiet˛e obrazu, jeśli to jest graficzne LILO to użyjemy klawisza tab.
Tabela 10-1. Parametry jadra
˛
Parametr
Znaczenie
Przykład
{$nr}/single
Cyfra (1-5) wskazujaca
˛
który poziom
uruchomieniowy (run
level), opcja single to tryb
jednego użytkownika.
Dzi˛eki nim opcjom
można przesłonić
ustawienie opcji
initdefault z pliku
/etc/inittab.
Wi˛ecej o poziomach pracy w sekcja Zmiana poziomu pracy systemu w
Rozdział 14, zaś o pliku
/etc/inittab przeczytamy w sekcja Kluczowe pliki
w Rozdział 12.
single lub 1
73
Rozdział 10. Bootloader
Parametr
root={$urzadzenie}
˛
Znaczenie
Przykład
Wskazanie urzadzenia
˛
root=/dev/hda1 lub
(partycji) na którym
root=0x301
znajduje si˛e główny
system plików. Wartościa˛
parametru może być
ścieżka do urzadzenia
˛
w
katalogu /dev (np.
/dev/hda1) lub wartość
liczbowa powstała z
połaczenia
˛
szesnastkowej
wartości liczb major i
minor urzadzenia.
˛
Major
podajemy w postaci
jednej cyfry, natomiast
minor powinien być już
rozwini˛ety do dwóch.
Przykładowo urzadzenie
˛
o wartościach major 3 i
minor 1 b˛edzie
przedstawiane jako 301,
0301 lub 0x301 (wartości
3 i 1 sa˛ takie same w
systemie dziesi˛etnym i
szesnastkowym).
Urzadzenia
˛
oraz liczby
major i minor szerzej opisano w sekcja Urzadzenia
˛
w Rozdział 11
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˛ecej o buforze
ramki w nast˛epnym
rozdziale.
vga=0x303
Opis
wybranych
parametrów
jadra
˛
zamieszczono
na
stronie
http://www.jtz.org.pl/Html/BootPrompt-HOWTO.pl.html,
zaś pełna˛ ich list˛e odnajdziemy w dokumentacji jadra,
˛
w pliku
/usr/src/linux/Documentation/filesystems/devfs/boot-options
Sa˛ również specjalne parametry, które przekazuje si˛e do jadra
˛
w trakcie pracy systemu, opisaliśmy je w sekcja Parametry jadra
˛ w Rozdział 11.
MBR czy bootsector?
Oba bootloadery maja˛ 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 bootsec74
Rozdział 10. Bootloader
torze w wypadku niektórych systemów plików (np. XFS) jest niemożliwa, gdyż ich
superblok jest umieszczany na samym poczatku
˛
partycji - w miejscu które powinno
być zarezerwowane dla bootloadera.
Frame buffer (bufor ramki)
Frame Buffer (bufor ramki) to m.in. mechanizm pozwalajacy
˛ na prac˛e konsoli w wyższych rozdzielczościach. Aby go właczyć
˛
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 dotyczacych
˛
ich rozdziałach.
Wartość opcji vga to numer trybu graficznego dla danej rozdzielczości i gł˛ebi koloru, list˛e dost˛epnych trybów przedstawiono w poniższej tabeli. Kodowe oznaczenia
trybów bufora ramki możemy podawać zarówno szesnastkowo jak i dziesi˛etnie, dlatego też w tabeli, obok wartości szesnastkowych umieszczono wartości w systemie
dziesi˛etnym (w nawiasach).
Tabela 10-2. Tryby bufora ramki
Głebia
˛
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˛eki
temu jadro
˛
pozwoli wyświetlić list˛e trybów i wybrać jeden z nich. Wi˛ecej o buforze
ramki dowiemy si˛e z dokumentacji kernela, jeśli zainstalowaliśmy pakiet z dokumentacja˛ jadra
˛
to znajdziemy ja˛ w katalogu /usr/src/linux/Documentation/fb.
LILO
LILO (LInux LOader) jest najbardziej popularnym linuksowym bootloaderem. Jego
instalacja polega na utworzeniu pliku konfiguracyjnego (/etc/lilo.conf) a nast˛epnie na wydaniu polecenia lilo w celu instalacji w MBR lub bootsektorze. Każda modyfikacja pliku konfiguracji, wygenerowanie nowego obrazu initrd lub instalacja
nowego jadra
˛
pociaga
˛ za soba˛ konieczność ponownej instalacji obrazu.
O initrd poczytamy w sekcja Initrd w Rozdział 11.
Konfiguracja podstawowa
Poniżej, dla przykładu przedstawiony został bardzo prosty plik konfiguracji, ma on
za zadanie umieścić lilo w MBR dysku twardego, umożliwiajac
˛ w ten sposób uruchomienie naszej dystrybucji.
boot=/dev/hda
read-only
lba32
image=/boot/vmlinuz
label=pld
75
Rozdział 10. Bootloader
root=/dev/hda1
initrd=/boot/initrd
Plik konfiguracji lilo dzieli si˛e na dwie zasadnicze cz˛eści: blok opcji głównych oraz
opcje obrazu. W powyższym przykładzie opcje główne umieszczone sa˛ na samym
poczatku
˛
(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łacza
˛
wykorzystanie 32-bitowego adresowania (jest rozwiazaniem
˛
limitu cylindra 1024).
Nast˛epna 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ć taka˛ sekcj˛e. Opcja image rozpoczyna sekcj˛e i jednocześnie wskazuje
ściek˛e do jadra,
˛
label to wyświetlana etykieta obrazu, root wskazuje urzadzenie
˛
z
głównym systemem plików, initrd to ścieżka do obrazu initrd (initial ramdisk).
Opcj˛e root szerzej opisano w sekcja Wst˛ep. Z nazewnictwem urzadze
˛
ń masowych
zapoznamy si˛e w sekcja Nazewnictwo urzadze
˛ ń masowych w Rozdział 13.
Dzi˛eki powyższej konfiguracji bootloader bezzwłocznie uruchomi nasze PLD zainstalowane na pierwszej partycji dysku hda bez zadawania jakichkolwiek pytań. W
wielu przypadkach b˛edziemy chcieli przekazać do kernela specjalne parametry lub
mieć możliwość wyboru innego systemu operacyjnego (o ile dodaliśmy do lilo taka˛
możliwość). Wtedy konieczne b˛edzie zdefiniowanie dwóch dodatkowych opcji:
prompt
timeout=100
Pierwsza włacza
˛
tryb interaktywny, druga zaś ustawia czas oczekiwania na nasza˛
reakcj˛e, podawany w dziesiatych
˛
cz˛eściach sekundy. W tej chwili możemy wygenerować lilo i zrestartować maszyn˛e aby sprawdzić czy dokonaliśmy prawidłowej
konfiguracji.
Inne systemy operacyjne
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 pozwalajaca
˛ 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 pomoca˛ opcji
default wskazujacej
˛ etykiet˛e domyślnego obrazu, np.:
default=pld
Opcj˛e default umieszczamy w głównej cz˛eści konfiguracji.
Frame Buffer
Frame Buffer (bufor ramki) to m.in. mechanizm pozwalajacy
˛ na prac˛e konsoli w wyższych rozdzielczościach. Aby go właczyć,
˛
do konfiguracji linuksowego obrazu lub do
sekcji głównej dodajemy parametr jadra
˛
vga np.:
vga=0x303
76
Rozdział 10. Bootloader
Przykładowa konfiguracja obrazu b˛edzie wygladała
˛
nast˛epujaco:
˛
image=/boot/vmlinuz
label=pld
root=/dev/hda1
initrd=/boot/initrd
vga=0x303
List˛e dost˛epnych trybów zamieszczono w sekcja Wst˛ep.
Graficzne menu
Jeśli zdecydowaliśmy si˛e na wyświetlanie menu poczatkowego
˛
(za pomoca˛ opcji
prompt) to możemy si˛e pokusić o ustawienie graficznego menu. Z pakietem lilo dostajemy odpowiednio przygotowane bitmapy, musimy tylko dodać kilka opcji do
głównej sekcji pliku konfiguracji.
Wskazujemy interesujacy
˛ 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˛etać że powyższe dane sa˛ dobrane dla konkretnego obrazka i dla innego moga˛ nie być dobre.
Zakończenie
Kiedy już skonfigurujemy nasz bootloader wydajemy polecenie lilo:
# lilo
Added pld *
nast˛epnie restartujemy system.
GRUB
GRUB (GRand Unified Bootloader) jest bootloaderem zdobywajacym
˛
spora˛ popularność, ze wzgl˛edu na swoja˛ elastyczność i duże możliwości. Jest tak rozbudowany, że
musi trzymać cz˛eść swoich danych na dysku twardym, z tego też wzgl˛edu obsługuje
kilka systemów plików i może wykonywać proste operacje dyskowe. GRUB normalnie "widzi" pliki na dysku, a wi˛ec widzi własny plik konfiguracji, kernel i obraz
initrd. Dzi˛eki 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 wbudowana˛ pomoca˛ oraz dopełnianiem nazw plików,
urzadze
˛
ń i partycji.
Do najwi˛ekszych zalet GRUB-a można zaliczyć możliwość zmiany konfiguracji startowej z poziomu działajacego
˛
bootloadera. Kiedy uruchomiony zostanie bootloader
wybieramy obraz a nast˛epnie wciskamy klawisz e. Wyświetla˛ nam si˛e wiersze konfiguracji, możemy je modyfikować za pomoca˛ wbudowanego prostego edytora tek77
Rozdział 10. Bootloader
stów. Po skończonej edycji wciskamy klawisz b, aby uruchomić system z wprowadzonymi zmianami.
Kolejna˛ ważna˛ jego cecha˛ jest możliwość używania klawiatury USB, w przeciwieństwie do LILO, jedyna˛ rzecza˛ jaka˛ musimy zrobić w tym wypadku to właczyć
˛
obsług˛e klawiatury USB w BIOS-ie.
O initrd poczytamy w sekcja Initrd w Rozdział 11.
Nazewnictwo urzadze
˛
ń
Nie używamy nazw dysków opierajacych
˛
si˛e na urzadzeniach
˛
widniejacych
˛
w /dev
(np. /dev/hda). GRUB przy pomocy BIOS-u sprawdza istniejace
˛ dyski i numeruje
je poczawszy
˛
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 wyglada
˛ podobnie, również numerowane sa˛ od zera, natomiast pierwsza
partycja logiczna b˛edzie oznaczona numerem 4.
Obszar MBR oznaczany jako /dev/hda b˛edzie widziany jako (hd0), partycja
b˛edzie rozpoznawana jako (hd0,0). Podane nawiasy nie sa˛
przypadkowe, jest to cecha składni poleceń GRUB-a.
/dev/hda1
Urzadzenia
˛
masowe opisano szerzej w sekcja Nazewnictwo urzadze
˛ ń masowych w Rozdział 13.
Konfiguracja podstawowa
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ża˛ na tej
samej partycji pierwszego dysku twardego. W przykładowej konfiguracji b˛edzie to
/dev/hda1. Poniżej przedstawiono przykładowa˛ konfiguracj˛e:
timeout 15
title pld
root (hd0,0)
kernel /boot/vmlinuz root=/dev/hda1
initrd /boot/initrd
Konfiguracja GRUB-a podzielona jest na sekcj˛e główna˛ i sekcje obrazów, sekcja główna sa˛ to ustawienia globalne, zaś konfiguracja obrazów to opcje dla każdego z obsługiwanych systemów operacyjnych. Powyżej mamy sekcj˛e główna˛ oraz sekcj˛e obrazu
oddzielona˛ pustym wierszem.
Opcja timeout w sekcji głównej to czas w sekundach oczekiwania na reakcj˛e użytkownika.
Opcja title w sekcji obrazu to jego etykieta, root(hd0,0) to partycja na której
GRUB b˛edzie 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˛eda˛ szukane na urzadzeniu
˛
(hd0,0) gdyż podane do
nich ścieżki sa˛ wzgl˛edne. Parametr root= jest parametrem jadra
˛
wskazujacym
˛
położenie głównego systemu plików, opisanym szerzej w sekcja Wst˛ep. Może mieć
zarówno postać liczbowa˛ jak i postać nazwy urzadzenia
˛
z katalogu /dev np.
/dev/hda1.
Kiedy plik konfiguracji jest gotowy możemy przejść do instalacji GRUB-a.
78
Rozdział 10. Bootloader
Instalacja
Przejdźmy teraz do instalacji GRUB-a w MBR, rozpoczynamy od uruchomienia programu grub, mamy teraz do dyspozycji interaktywna˛ powłok˛e, oferujac
˛ a˛ liczne polecenia, dopełnianie oraz pomoc. Rozpoczynamy od polecenia root z parametrem
wskazujacym
˛
miejsce gdzie znajduja˛ si˛e pliki GRUB-a, konieczne do jego instalacji.
grub> root (hd0,0)
Filesystem type is xfs, partition type 0x83
Teraz uruchamiamy instalacj˛e 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 wskazuja˛ poprawność operacji, wi˛ec pozostaje nam tylko wyjście z powłoki programu.
grub> quit
W ten oto sposób staliśmy si˛e posiadaczami GRUB-a w naszym systemie, możemy
teraz zrestartować maszyn˛e.
Inne systemy operacyjne
Zakładam, że chcemy dodać system Microsoftu zainstalowany na partycji
/dev/hda2, oto sekcja jaka˛ 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 pomoca˛
opcji default wskazujacej
˛ numer obrazu. Obrazy sa˛ numerowane wg. kolejności
poczawszy
˛
od 0 np.:
default 2
Omawiana˛ opcj˛e wstawiamy do sekcji głównej pliku konfiguracji.
Frame Buffer
Frame Buffer (bufor ramki) to mechanizm pozwalajacy
˛ m.in. na prac˛e konsoli w wyższych rozdzielczościach. Aby go właczyć,
˛
do parametrów jadra
˛
w konfiguracji linuksowego obrazu dodajemy parametr vga np. vga=0x303. Przykładowa konfiguracja
obrazu b˛edzie wygladała
˛
nast˛epujaco:
˛
title pld
root (hd0,0)
kernel /boot/vmlinuz root=0301 vga=0x303
initrd /boot/initrd
79
Rozdział 10. Bootloader
List˛e dost˛epnych trybów zamieszczono w sekcja Wst˛ep.
Graficzne menu
W pakiecie z GRUB-em dost˛epne sa˛ grafiki, co sugeruje możliwość wyświetlenia ich
w menu, jednak GRUB w PLD domyślnie ich nie obsługuje. Aby właczyć
˛
taka˛ możliwość musimy samemu zbudować pakiet z opcja˛ --with splashimage.
Instalujemy zbudowany pakiet, a nast˛epnie do pliku konfiguracji, do sekcji głównej
dodajemy opcj˛e wskazujac
˛ a˛ bitmap˛e, 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 pomoca˛ opcji
foreground i background np.:
foreground
background
= ffffff
= 000000
Pierwsza z opcji wskazuje główny kolor liter, druga zaś określa kolor ich cienia,
oba parametry przyjmuja˛ 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.
Bezpieczeństwo bootloadera
Jak już zostało wspomniane, GRUB trzyma cz˛eść swoich danych w systemie plików,
co przy poważnym uszkodzeniu systemu plików może uniemożliwić start systemu.
Rozwiazaniem
˛
tego problemu, może być umieszczenie gał˛ezi /boot na osobnej partycji, tak jak to było dawniej robione dla omini˛ecia ograniczeń starych wersji LILO.
Wi˛ecej o podziale na partycje odnajdziemy w sekcja Podział na partycje w Rozdział 13.
Dla wi˛ekszego bezpieczeństwa partycj˛e taka˛ można montować w trybie tylko do odczytu, musimy jednak wtedy pami˛etać o konieczności przemontowania jej do trybu
rw, przed każda˛ aktualizacja˛ jadra,
˛
lub bootloadera.
Uwagi
80
•
W
przypadku
nietypowych
konfiguracji
b˛edziemy
zmuszeni
do
podawania ścieżek bezwzgl˛ednych do plików. Podajemy je nast˛epujaco:
˛
(hdX,Y)/katalog/plik np.: (hd0,0)/boot/vmlinuz
•
GRUB wymaga kompletnej listy urzadze
˛
ń w katalogu /dev, stad
˛ moga˛ pojawić
si˛e problemy przy próbie instalacji go z chroota opartego o udev. Należy w tym
wypadku podmontować z głównego system katalog /dev z opcja˛ -bind. Pliki
urzadze
˛
ń zostały dokładniej opisane w sekcja Urzadzenia
˛
w Rozdział 11.
Rozdział 10. Bootloader
rc-boot
Wstep
˛
Osoby nie przepadajace
˛ za konfiguracja˛ powyższych bootloaderów, moga˛ skorzystać
z narz˛edzia o nazwie rc-boot. Jest to proste i wygodne w użyciu narz˛edzie, stworzone dla potrzeb PLD, które zapewnia uniwersalny interfejs do zarzadzania
˛
bootloaderem. Został stworzony w celu automatycznego aktualizowania bootloadera po
zaktualizowaniu jadra,
˛
jednak nie zdobył szerszej popularności wśród użytkowników. Dzi˛eki rc-boot możemy używać dowolnego bootloadera (np. LiLo, Grub), nie
znajac
˛ zasad ich działania czy składni plików konfiguracji.
W gruncie rzeczy korzystanie z rc-boot ma sens wyłacznie
˛
przy używaniu LiLo. Bootloader GRUB nie wymaga przeładowania po aktualizacji jadra,
˛
dlatego użytkownicy używaja˛ właśnie jego zamiast rc-boot.
Aby utworzyć bootloader omawianym narz˛edziem należy si˛e posłużyć poleceniem
rc-boot, to jaki bootloader zostanie użyty i jakie opcje b˛eda˛ ustawione, definiujemy w
jednym uniwersalnym pliku konfiguracji: /etc/sysconfig/rc-boot/config. Dodatkowo wymagane sa˛ specjalne pliki "obrazów" odpowiadajace
˛ każdemu systemowi operacyjnemu, który chcemy obsługiwać z poziomu bootloadera. Sa˛ to proste pliki konfiguracyjne umieszczane w katalogu /etc/sysconfig/rc-boot/images. Po
zainstalowaniu systemu powinien tam być przynajmniej jeden taki plik.
Podstawowa konfiguracja
Po zainstalowaniu pakietu rc-boot wymagane sa˛ poprawki w konfiguracji pliku
/etc/sysconfig/rc-boot/config. Na poczatek
˛
odblokujemy działanie rc-boot:
DOIT=yes
Kolejno wybieramy bootloader jaki chcemy używać, mamy do wyboru lilo oraz grub:
LOADER=grub
Nast˛epnie ustalamy gdzie ma być zainstalowany bootloader np.: /dev/hda,
/dev/hdb2 lub mbr. Wartość mbr oznacza że rc-boot stara si˛e automatycznie wykryć
gdzie jest twój MBR (Master Boot Record).
BOOT=mbr
Jeśli posiadamy wi˛ecej 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
Tworzenie "obrazów"
Teraz możemy przejść do utworzenia plików obrazów. Maja˛ one bardzo prosta˛ budow˛e - sa˛ to pliki tekstowe składajace
˛ si˛e z kilku wierszy. Poniższa treść pliku jest
wystarczajac
˛ a˛ konfiguracja˛ do uruchomienia Linuksa, plikowi temu nadamy nazw˛e
"pld".
TYPE=Linux
ROOT=/dev/hda3
KERNEL=/boot/vmlinuz
INITRD=/boot/initrd
81
Rozdział 10. Bootloader
Opcja TYPE określa rodzaj systemu operacyjnego dla danego obrazu, mamy do wyboru nast˛epujace
˛ pozycje: Linux, DOS (DOS/Windows), BSD. Opcja ROOT wskazuje
partycj˛e na której znajduje si˛e system, wartość podana powyżej jest tylko przykładem. Wartości KERNEL i INITRD sa˛ wskazaniami do pliku kernela i pliku initrd - musza˛ odnosić si˛e 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ładowa˛ konfiguracj˛e:
TYPE=dos
ROOT=/dev/hda1
Na koniec generujemy bootloader używajac
˛ polecenia rc-boot.
# rc-boot
pld taken as defult image
image: pld * is linux on /dev/hda3
image: windows is dos on /dev/hda1
Uwagi
Program rc-boot nadpisze plik konfiguracji wybranego bootloadera, zanim wi˛ec użyjemy tego narz˛edzia powinniśmy na wszelki wypadek zrobić kopi˛e bezpieczeństwa
właściwego pliku.
Wi˛ecej szczegółów można uzyskać z podr˛ecznika systemowego.
Przypisy
1. http://www.jtz.org.pl/Html/BootPrompt-HOWTO.pl.html
82
Rozdział 11. Kernel i urzadzenia
˛
Jadro
˛
systemu
Jak zapewne wi˛ekszości z was wiadomo jadro
˛
(kernel) jest najważniejszym elementem każdego systemu. W uproszczeniu można powiedzieć, że zajmuje si˛e ono nadzorowaniem komunikacji wszystkich elementów systemu.
Koncepcja jadra
˛
w PLD
Jedna˛ z silniejszych stron PLD sa˛ dobrze przygotowane jadra
˛
systemu, pozwala
to szybko uruchomić system produkcyjny bez zb˛ednych przygotowań. Poniżej
zamieszczono list˛e najistotniejszych cech jader
˛
PLD:
•
funkcjonalność - nakładanych jest wiele łat rozszerzajacych
˛
możliwości domyślnego
kernela.
•
modularność - jadro
˛
jest tak małe, jak to tylko możliwe; jeśli czegoś potrzebujemy
to wystarczy załadować odpowiedni moduł. Konsekwencja˛ takiego rozwiazania
˛
jest konieczność używania obrazu initrd, co zostało drobiazgowo omówione w
sekcja Initrd.
•
elastyczność - mamy wybór kilku jader,
˛
przygotowanych w postaci binarnych pakietów dla kilku najcz˛estszych zastosowań; dzi˛eki temu unikamy czasochłonnej
kompilacji. Dost˛epne jadra
˛
zostały opisane w dalszej cz˛eści rozdziału.
•
bezpieczeństwo - domyślny kernel ma nakładana˛ łat˛e grsecurity
(www.grsecurity.net1), ponadto możemy mieć jadro
˛
z obsługa˛ Linux VServers
(linux-vserver.org2).
Podsumowujac
˛ można stwierdzić, że dla wi˛ekszości zastosowań jadra
˛
dystrybucyjne
spełnia˛ wszystkie stawiane przed nimi wymagania, bez konieczności rekompilacji.
Informacje o używanym jadrze
˛
Używana˛ wersj˛e jadra
˛
sprawdzimy za pomoca˛ programu uname:
# uname -r
2.6.14.7-5
Jeśli interesuje nas konfiguracja danego jadra,
˛
to możemy ja˛ odczytać z pliku
/proc/config.gz (w Th plik jest dost˛epny 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
83
Rozdział 11. Kernel i urzadzenia
˛
Rodzaje jader
˛
systemowych
Z PLD dostarczanych jest kilka kerneli, przygotowanych do różnych zastosowań,
jedyna˛ rzecza˛ jaka nam pozostaje to wybór właściwego jadra
˛
dla naszej maszyny.
W poniższej tabeli zamieszczono przykładowe zestawienie dost˛epnych kerneli. Nie
wszystkie z wymienionych poniżej pakietów bezpośrednio dost˛epne na liście pakietów, jeśli
tak nie jest to trzeba je zbudować samodzielnie ze speca.
Tabela 11-1. Kernele
Powyższe zestawienie należy traktować orientacyjnie, gdyż kernel ciagle
˛ si˛e zmienia.
Aby poznać szczegóły, najlepiej jest sprawdzić plik spec3 dla konkretnego kernela.
Ułatwieniem w poszukiwaniu właściwej rewizji, moga˛ być tagi zaczynajace
˛ si˛e od
auto-, np.: auto-th-kernel-2_6_27_12-1. Tagi te sa˛ nadawane dla każdej wersji
pakietu trafiajacego
˛
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ługa˛ wielu
procesorów miały w nazwie pakietu przyrostek -smp. W Th i pakietach z ac-updates
zaniechano takiego podziału i wszystkie jadra
˛
obsługuja˛ wiele procesorów i jednocześnie zrezygnowano z przyrostka -smp.
Należy zwrócić uwag˛e, na inne przyrostki po słowie kernel w nazwach pakietów,
nie mówia˛ one o rodzaju kernela ale o pakiecie z dodatkowymi modułami:
kernel-net, kernel-sound, kernel-video, dokumentacja:
˛ kernel-doc i inna˛
zawartościa.˛
Aktualizacja
Kernel jest kluczowa˛ cz˛eścia˛ systemu, dlatego zaleca si˛e 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
musza˛ dodatkowo wydać polecenie lilo. W ten sposób mamy zainstalowane dwa
jadra,
˛
przy czym po ponownym uruchomieniu użyta zostanie nowa wersja.
Gdyby nowy kernel okazał si˛e niestabilny, to zawsze możemy powrócić do starej
wersji. Aby ułatwić taka˛ operacj˛e symlinki wskazujace
˛ na dotychczasowy kernel
(/boot/vmlinuz) i initrd (/boot/initrd) automatycznie b˛eda˛ teraz dost˛epne pod
nazwami /boot/vmlinuz.old i /boot/initrd.old. Dzi˛eki temu, możemy w konfiguracji bootloadera mieć "obraz" konfiguracji dla starego kernela i użyć go w razie
potrzeby.
Zależności
Istnieje kilka pakietów, bardziej lub mniej zależnych od konkretnej wersji
kernela. Ścisłe zależności b˛eda˛ dotyczyły pakietów z modułami np.
kernel-vanilla-sound-alsa
oraz
pakietów
ściśle
współpracujacych
˛
z kernelem np. moduł kernel-video-nvidia ze sterownikiem X.Org:
xorg-driver-video-nvidia. Nieco mniej oczywisty jest zwiazek
˛
kernela z
pakietami iproute2 czy iptables, w ich przypadku mamy nieco swobody.
W wielu sytuacjach nie b˛edziemy musieli si˛e o to martwić, gdyż ten problem załatwiaja˛ nam zależności. Mimo to, że mamy tu dost˛epna˛ automatyk˛e, przy tego rodzaju
pakietach powinniśmy zachować zdwojona˛ czujność. Dla ważnych maszyn produkcyjnych warto dodać kernel i pakiety okołokernelowe do opcji hold w Poldku, opcj˛e
84
Rozdział 11. Kernel i urzadzenia
˛
ta˛ omówiliśmy w sekcja Poldek w Rozdział 9. Wi˛ecej o zależnościach pomi˛edzy pakietami w sekcja Cechy pakietów w PLD w Rozdział 9.
Uwagi
Czasami zdarza si˛e, że załamuje si˛e praca systemu sygnalizowana za pomoca˛ komunikatu Kernel Panic, jadro
˛
informuje nas, że nie wie co ma dalej zrobić i przerywa
prac˛e. Warto ustawić system tak, by po takim zdarzeniu automatycznie nast˛epował
restart, konfiguracj˛e takiego zachowania opisaliśmy w sekcja Podstawowe ustawienia
w Rozdział 12.
Parametry jadra
˛
Mamy możliwość wpływania na prac˛e systemu, dzi˛eki modyfikowaniu specjalnych
parametrów jadra,
˛
parametry te można podzielić na dwie grupy: podawane przed
startem kernela oraz podawane po wystartowaniu. Pierwszy rodzaj został opisany w
sekcja Wst˛ep w Rozdział 10, drugi to zestaw specjalnych wpisów do pseudo-systemu
plików /proc/sys.
Czytać wartości możemy za pomoca˛ programu cat np.:
# cat /proc/sys/net/ipv4/ip_forward
Parametry możemy wysłać za pomoca˛ 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˛e w˛ezła przyjmuje nazwy katalogów rozdzielone kropkami, z pomini˛eciem "/proc/sys". Poniżej umieszczono przykład odczytania opcji:
# /sbin/sysctl net.ipv4.ip_forward
oraz przypisania:
# /sbin/sysctl net.ipv4.ip_forward=1
Wada˛ powyższego rozwiazania
˛
jest powrót do poprzednich ustawień po restarcie
maszyny. Rozwiazaniem
˛
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łuja˛ automatycznie program sysctl, przykładowo robi to
skrypt podsystemu sieci, gdyż plik /etc/sysctl.conf zawiera istotne opcje sieciowe.
Moduły jadra
˛
Czym sa?
˛
Sterowniki moga˛ być wkompilowane do wn˛etrza jadra
˛
lub wydzielone jako osobne
obiekty - moduły. Moduły jadra
˛
zostały stworzone po to by kernel zajmował mało
pami˛eci operacyjnej i był zarazem uniwersalny. Ułatwiaja˛ one także prace ludziom
85
Rozdział 11. Kernel i urzadzenia
˛
zaangażowanym w rozwój jadra
˛
i dodatkowych modułów (nie potrzeba kompilować
całego kernela by sprawdzić zmiany, wystarczy tylko sam moduł) Wyobraź sobie sytuacj˛e, w której masz wkompilowane do niego wszystko, a twój system nie posiada
urzadze
˛
ń, które kernel potrafi obsłużyć. Jest to duże marnotrawstwo, ponieważ w
pami˛eci znajda˛ si˛e nie potrzebne nam funkcje. Dodać należy fakt, ograniczenia wielkości jadra
˛
(można to zmienić odpowiednimi przeróbkami źródeł via Red Hat). Dlatego lubimy moduły. Daja˛ nam one możliwość wyboru mi˛edzy tym co niezb˛edne, a
brakiem wsparcia dla urzadze
˛
ń. Podsumowujac.
˛ Nie potrzebujesz to nie używasz.
By móc używać modułów potrzebujesz dwóch rzeczy. Kernela z wkompilowana˛
opcja˛ Loadable module support oraz sterowników skompilowanych jako moduły. Ponieważ używasz PLD to nie masz co si˛e głowić ponieważ wszystko to masz u
siebie w systemie.
Załadowanie właściwego modułu dla urzadzenia
˛
Istnieja˛ 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 urzadzenie
˛
zostaje wykryte
Obydwie metody zostana˛ przedstawione w dalszych rozdziałach.
Konfiguracja modułów
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˛e /etc/modules.conf. W pliku mamy dost˛epnych wiele opcji, my omówimy tylko
najcz˛eściej używane: alias, option i blacklist.
Aliasy - sa˛ to dodatkowe nazwy dla modułów, pozwalaja˛ na wczytanie go odwołujac
˛
si˛e do aliasu. Z aliasów korzysta wiele programów, które nie moga˛ wiedzieć z jakiego
modułu maja˛ korzystać i używaja˛ ustalonych nazw (aliasów) np.:
alias eth0 8139too
Dzi˛eki tej linijce wszelkie odwołania przy ładowaniu modułów załaduja˛ automatycznie moduł 8139too.
alias parport_lowlevel parport_pc
W tym fragmencie pliku /etc/modprobe.conf widzimy już znany alias z
tym, że w troch˛e innej formie. Ponieważ wyst˛epuje tu nazwa_jednego_modułu
i nazwa_drugiego_modułu. Oznacza to, że jak b˛edzie potrzeby moduł
parport_lowlevel, to zostanie też automatycznie załadowany moduł parport_pc.
Opcje - cz˛esto używa si˛e możliwości przesłania do modułu ustawień. Przedstawi˛e to
na przykładzie drukarki podpi˛etej 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˛ecej informacji o dost˛epnych opcjach modułu można uzyskać po wydaniu
polecenia modinfo parport_pc.
Czarna lista - możemy zabronić ładowania jakiegoś modułu za pomoca˛ słowa kluczowego blacklist np.:
86
Rozdział 11. Kernel i urzadzenia
˛
blacklist rivafb
.
Statyczne zarzadzanie
˛
modułami
Określenie modułu dla urzadzenia
˛
W zależności od naszych wymagań oraz zastosowania systemu operacyjnego, b˛edzie si˛e zmieniać liczba wymaganych sterowników, w wi˛ekszości wypadków b˛edzie
to wartość od kilku do kilkunastu modułów. Jeśli tych modułów jest mało to samodzielne ładowanie może być lepszym rozwiazaniem.
˛
Aby wskazać odpowiedni moduł, musimy poznać dane urzadzenia.
˛
Najbardziej interesujacymi
˛
informacjami sa:˛ producent i model urzadzenia
˛
lub użyty chipset. W
wi˛ekszości wypadków te informacje znajduja˛ si˛e w dokumentacji urzadzenia.
˛
Jeśli
tak nie zdob˛edziemy szukanych informacji to możemy spróbować użyć któraś
˛ z poniższych metod:
•
Organoleptycznie - jeśli mamy dost˛ep do sprz˛etu to możemy obejrzeć urzadze˛
nie, opis może być umieszczony na płytce drukowanej lub na chipsecie (zwykle
najwi˛ekszy układ scalony).
•
lshw - zaawansowany program służacy
˛ do wyświetlania szczegółowych danych
o sprz˛ecie, jego zaleta˛ jest duża ilość sprawdzanych podsystemów i wyświetlanie
nazw używanych modułów przez konkretne urzadzenie.
˛
•
lspci - program ten wyświetla list˛e wykrytych urzadze
˛
ń PCI/AGP wraz z dodatkowymi informacjami. Warto użyć tu dodatkowo opcji "-v" - "-vv" w celu zwi˛ekszenia ilości danych. Program ten znajdziemy w pakiecie pciutils.
•
Komunikaty jadra
˛
- sa˛ 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˛ecie, pozostaje nam odnaleźć moduł:
•
pcidev - program z pakietu pci-database - stara si˛e wykryć używany przez nas
sprz˛et oraz podaje nazw˛e sugerowanego modułu. Należy wywołać program z parametrem wskazujacym
˛
o interesujace
˛ nas urzadzenie
˛
np:
# pcidev agp
10de01e0 nvidia-agp nVidia Corporation|nForce2 AGP (different version?)
drugi zwrócony łańcuch jest nazwa˛ szukanego modułu. Aby otrzymać list˛e 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˛e już spotkał z podobnym problemem. Mamy
do dyspozycji spora˛ skarbnic˛e 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
87
Rozdział 11. Kernel i urzadzenia
˛
/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˛e podajemy
jako parametr. Program jest pomocny jeśli zaw˛eziliśmy list˛e pasujacych
˛
modułów
do kilku pozycji.
Kiedy sadzimy
˛
że odnaleźliśmy właściwy moduł możemy go bez obaw wczytać i
przetestować nasze urzadzenie,
˛
jeśli próba zakończyła si˛e sukcesem to możemy zapisać jego nazw˛e do odpowiedniego pliku aby został załadowany przy każdym starcie
systemu. Opis tego znajduje si˛e w dalszej cz˛eści rozdziału.
Zarzadzanie
˛
modułami
Moduły sa˛ ze soba˛ powiazane
˛
i załadowanie danego modułu załaduje moduły od
niego zależne (jeśli takie sa),
˛ podobnie jest z ich usuwaniem z pami˛eci. Do zarzadza˛
nia modułami zaleca si˛e używanie programu modprobe z odpowiednimi parametrami zamiast programów insmod i rmmod
List˛e załadowanych modułów i zależności mi˛edzy nimi otrzymamy po wydaniu polecenia lsmod np:
# lsmod
Module
lp
parport
ext3
amd74xx
psmouse
ide_core
ide_disk
Size
8644
29896
119304
11676
34840
109560
14336
Used by
0
1 lp
1
0 [permanent]
0
2 ide_disk,amd74xx
9
Wczytanie modułu do pami˛eci:
# modprobe ne2k-pci
Usuwanie modułu z pami˛eci (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˛epnych modułów:
# modprobe -l
Po "r˛ecznym" załadowaniu modułu do pami˛eci b˛edzie on dost˛epny 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.
88
Rozdział 11. Kernel i urzadzenia
˛
/etc/modules
Plik ten zawiera list˛e modułów, które zostana˛ załadowane podczas startu systemu
(przez rc-skrypty). Znajac
˛ nazw˛e modułu możemy dodać ja˛ do tego pliku np:
echo "via82cxxx_audio" >> /etc/modules
/etc/modprobe.conf
˛
powiedzieliśmy, że plik /etc/modprobe.conf służy do konW sekcja Moduły jadra
figuracji modułów, jednak za pomoca˛ pewnej sztuczki b˛edziemy mogli wskazywać
moduły do załadowania. Polega ona na utworzeniu aliasów o ustalonych nazwach
i które b˛eda˛ ł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˛ekszej 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˛eci
masowych, używane sa˛ 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
alias
alias
alias
eth0 8139too
scsi_hostadapter sata_sil
char-major-116 snd
snd-card-0 snd-intel8x0
Udev - dynamiczna obsługa sprzetu
˛
Statyczne zarzadzanie
˛
modułami kernela i urzadzeniami
˛
w /dev było skomplikowane, ucia˛żliwe i wymagało praw administratora, stad
˛ narodziła si˛e idea systemu,
który zautomatyzuje te czynności. Tak oto powstał udev, współczesne wersje udeva
(nast˛epcy DevFS) maja˛ wbudowana˛ obsług˛e hotpluga i coldpluga. Dzi˛eki temu moga˛ automatycznie ładować potrzebne moduły, ma to sens wyłacznie
˛
w przypadku
modularnego kernela, jaki jest dost˛epny w PLD. Mimo właczenia
˛
hotpluga do udeva w PLD ciagle
˛
dost˛epne sa˛ pakiety z hotplugiem, sa˛ przechowywane jedynie dla
wstecznej zgodności i nie b˛eda˛ nam już potrzebne.
Poza nielicznymi wypadkami nie b˛edzie już konieczne dopisywanie nazw modułów
do pliku /etc/modules, ani ich r˛eczne ładowanie za pomoca˛ programu modprobe.
Wi˛ecej o plikach urzadze
˛
ń znajdziemy w sekcja Urzadzenia.
˛
89
Rozdział 11. Kernel i urzadzenia
˛
Instalacja
W systemie domyślnie instalowany jest pakiet dev, jeśli zechcemy przejść na udev to
wystarczy, że zainstalujemy pakiet udev a nast˛epnie odinstalujemy dev np.:
# poldek -i udev
# poldek -e dev
Osoby nie ufajace
˛ do końca dynamicznemu tworzeniu urzadze
˛
ń, nie usuwaja˛ z systemu statycznego deva tak jak to zrobiliśmy powyżej. Praktyka pokazuje jednak, że
nie ma powodów do obaw i poza wyjatkowo
˛
ważnymi instalacjami systemu nie ma
takiej potrzeby.
Konfiguracja
Udev w wi˛ekszoś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˛e tym zajmiemy powinniśmy zapoznać si˛e z
dokumentacja˛4.
W Ac do wyboru sa˛ dwa tryby pracy: udevstart (domyślny) i udevsynthesize.
Ten drugi wykrywa wi˛eksza˛ liczb˛e urzadze
˛
ń, stad
˛ warto si˛e pokusić o wybór
właśnie jego. Aby go używać wystarczy, że ustawimy odpowiednia˛ opcj˛e w pliku
/etc/udev/udev.conf:
UDEV_STARTER="udevsynthesize"
W Th powyższe opcje nie sa˛ już dost˛epne, ich miejsce zajał
˛ mechanizm udevtrigger.
Udev w praktyce
Liczba załadowanych modułów przez udev może przywrócić o zawrót głowy, udev
ładuje moduły znalezionych urzadze
˛
ń bez wzgl˛edu czy w ogóle z niego korzystamy. Jedyna˛ wada˛ takiego działania jest wi˛eksze zużycie pami˛eci przez nieużywane
sterowniki. Nie powinno przekroczyć 2MiB pami˛eci, wi˛ec dla ogromnej wi˛ekszości
współczesnych komputerów nie b˛edzie to stanowić żadnego problemu.
Mamy wpływ na list˛e ładowanych modułów, aby zablokować ładowanie jakiegoś
modułu wystarczy dodać do pliku /etc/modprobe.conf nazw˛e modułu poprzedzona˛ 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˛eci lepszym pomysłem b˛edzie pozostanie
przy statycznej metodzie ładowania modułów.
Uwagi
Jeśli mamy kilka kontrolerów urzadze
˛
ń masowych (IDE/SATA/SCSI) to moga˛ wyst˛epować 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˛ecej o udev możemy poczytać w FAQ5
90
Rozdział 11. Kernel i urzadzenia
˛
Udev nie zajmuje si˛e montowaniem przenośnych nośników danych, musimy robić
to r˛ecznie (co wymaga uprawnień administratora), lub użyć HAL-a, D-Busa oraz np.
gnome-volume-manager w przypadku środowiska Gnome.
Initrd
Wstep
˛
W PLD wszystkie możliwe sterowniki sa˛ dost˛epne w postaci tzw. modułów, przez co
nie sa˛ one "widoczne" dla jadra
˛
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 urzadze
˛
ń 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˛ec dodatkowo musimy właściwie skonfigurować bootloader - wskazać położenie obrazu. Obraz przechowywany jest w katalogu /boot
i ma nazw˛e initrd-{$wersja_jadra}.gz
˛
, do niego zaś prowadzi łacze
˛
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˛epujacy
˛ komunikat:
Kernel panic: VFS: Unable to mount root fs...
Jadro
˛
mówi nam, że nie może zamontować głównego systemu plików, gdyż brakuje
mu jakiegoś komponentu. Może si˛e to zdarzyć, że nasz sprz˛et nie został prawidłowo
wykryty lub próbujemy uruchomić PLD z naszego dysku na innym komputerze (o
innym kontrolerze urzadze
˛
ń masowych).
Systemu nie można uruchomić wi˛ec musimy skorzystać z operacji chroot-a, możemy
w tym celu użyć dowolnej dystrybucji linuksa jednak chyba najwygodniejsze b˛edzie
użycie PLD-Live lub RescueCD.
Przygotowanie
Poniżej przedstawiono trzy metody generowania initrd. W wi˛ekszości wypadków
wystarczy nam pierwszy ze sposobów, pozostałe sa˛ trudniejsze gdyż musimy znać
nasz sprz˛et i system plików partycji "/". Jeśli obraz nie jest tworzony prawidłowo
przez pierwsza˛ metod˛e musimy si˛e zadowolić dwoma pozostałymi. Druga i trzecia
metoda maja˛ jedna˛ zasadnicza˛ przewag˛e nad pierwsza˛ - moga˛ 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˛e wykryć sprz˛et, system plików i
czy główny system plików jest stworzony na LVM/soft RAID. Skrypt geninitrd
91
Rozdział 11. Kernel i urzadzenia
˛
wymaga prawidłowych wpisów w /etc/fstab i podmontowanego /proc. Tak wi˛ec
jeśli generujemy initrd w systemie typu chroot to wydajemy polecenie (z chroota):
# mount /proc
Opis wykrywania sprz˛etu i dobierania właściwych modułów opisano w sekcja Statyczne zarzadzanie
˛
modułami.
Automatyczne generowanie initrd
W razie potrzeby edytujemy plik /etc/sysconfig/geninitrd i ustawiamy jaki rodzaj urzadzenia
˛
(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_jadra}
˛
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
istniejacego
˛
obrazu.
Reczne
˛
generowanie initrd
Metoda ta wymaga precyzyjnej znajomości używanego sprz˛etu 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˛e wykonać na innej maszynie niż docelowa.
Możemy wpisać list˛e 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_jadra}
˛
Dużym ułatwieniem zadania jest automatyczne dołaczanie
˛
modułów zależnych od
wskazanego (o ile takie sa).
˛ 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
92
/boot/initrd-2.6.16.35-1.gz 2.6.16.35-1
Rozdział 11. Kernel i urzadzenia
˛
Gdy zawiedzie geninitrd
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ład
˛ wejścia/wyjścia
Pomimo tego bł˛edu dobrze si˛e 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˛epnie
do
skryptu
initrd-moje/linuxrc dodać wpis "insmod {$moduł}" na wzór już istniejacych
˛
({$moduł} musi zawierać pełna˛ ścieżk˛e 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.
Bootloader
Musimy si˛e upewnić czy łacze
˛
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˛e bez problemu.
Konfiguracj˛e bootloaderów szerzej opisano w sekcja Wst˛ep w Rozdział 10.
Uwagi
Cz˛este zmiany używanego obrazu initrd moga˛ być ucia˛żliwe, można to obejść łacz
˛ ac
˛
do jednego obrazu wi˛eksza˛ 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=""
93
Rozdział 11. Kernel i urzadzenia
˛
możemy też użyć opcji --with programu geninitrd. Warto pami˛etać żeby nie przesadzać z ich ilościa,˛ może to spowodować wolniejszy start systemu i niepotrzebne
zużycie pami˛eci operacyjnej przez nieużywane sterowniki.
Urzadzenia
˛
Podobnie jak w innych systemach uniksowych obowiazuje
˛
tutaj zasada "everything
is a file", czyli wszystko jest plikiem. Dzi˛eki takiemu podejściu uproszczono sposób
komunikacji z urzadzeniami,
˛
poprzez odwoływanie si˛e do specjalnych plików, odpowiadajacych
˛
konkretnym urzadzeniom.
˛
Pliki te sa˛ przechowywane w katalogu /dev,
zwykły użytkownik nie musi si˛e martwić o jego zawartość, wystarczy że b˛edzie znał
powiazania
˛
mi˛edzy fizycznymi urzadzeniami
˛
a nazwami tych plików.
Z nazw urzadze
˛
ń najcz˛eściej korzysta si˛e w przypadku operacji dyskowych, warto
zatem znać zasad˛e ich określania, wi˛ecej szczegółów na ten temat podano w sekcja
Nazewnictwo urzadze
˛ ń masowych w Rozdział 13.
Podstawowe informacje o urzadzeniu
˛
Nazwy urzadze
˛
ń nadawane sa˛ tak, aby ułatwiać życie użytkownikom, dla jadra
˛
sa˛
właściwie oboj˛etne. Jadro
˛
rozróżnia urzadzenia
˛
za pomoca˛ pary liczb: major (głównej) i minor (pobocznej). To jakie sa˛ wartości tych liczb odczytamy nast˛epujaco:
˛
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 opisujacego
˛
uprawnienia określa rodzaj pliku, znak "b" (jak na
powyższym przykładzie) oznacza urzadzenie
˛
blokowe, zaś "c" urzadzenie
˛
znakowe.
Jeśli potrzebujemy samodzielnie utworzyć plik urzadzenia,
˛
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˛e z zawartościa˛ pliku
/usr/src/linux/Documentation/devices.txt
Systemy plików-urzadze
˛
ń
Sa˛ dwa sposoby dostarczania plików urzadze
˛
ń 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 ta˛ operacj˛e lepiej przeprowadzać przy pomocy operacji chroot-a.
Najstarszym z rozwiaza
˛ ń jest pakiet dev, dzi˛eki niemu w katalogu /dev zostanie
utworzona spora ilość w˛ezłów (nawet jeśli nie mamy danego rodzaju urzadzenia),
˛
wystarczajaca
˛ dla wi˛ekszości zastosowań. Jeśli jednak mamy jakieś egzotyczne urza˛
dzenie to b˛edziemy musieli samemu utworzyć wymagane pliki. Pliki urzadze
˛
ń tworzymy za pomoca˛ opisanego wcześniej programu mknod.
W odróżnieniu od statycznej bazy plików urzadze
˛
ń w ostatnim czasie popularność
zdobywaja˛ systemy automatycznego tworzenia w˛ezłów w katalogu /dev. W chwili
podłaczenia
˛
urzadzenia
˛
lub startu systemu automatycznie tworzone sa˛ wymagane
pliki. Jest to ogromne ułatwienie dla użytkowników, gdyż nie wymaga od nich wiedzy na ten temat.
94
Rozdział 11. Kernel i urzadzenia
˛
UDEV
Udev automatycznie tworzy pliki urzadze
˛
ń, jednak sam potrzebuje kilku z nich, aby
mógł zaczać
˛ działać, sa˛ to: /dev/console, /dev/null, /dev/zero. Pliki te sa˛ dostarczane razem z pakietem, a wi˛ec nie musimy si˛e to martwić.
System udev jest wart uwagi dlatego, że nie tylko tworzy wymagane w˛ezły urzadze
˛
ń
lecz dodatkowo ładuje wymagane moduły jadra
˛
dla danego urzadzenia.
˛
Wi˛ecej informacji o udev znajdziemy w sekcja Udev - dynamiczna obsługa sprz˛etu
Należy pami˛etać o tym, że udev jest wywoływany z rc-skryptów, i nie wystartuje
przy użycia parametru jadra
˛
init lub przy próbie wykonania operacji chroota z innego systemu. Wtedy wymagane pliki nie zostana˛ utworzone, co może spowodować
nieoczekiwane problemy z działaniem programów. W przypadku wykonania operacji chroota problem ten rozwiazujemy
˛
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 urzadzenia
˛
za pomoca˛ programu mknod lub skadś
˛ je kopiujemy. Operacja chroota została szerzej
opisana w sekcja Ratowanie systemu w Rozdział 14. Parametr jadra
˛
init jak i wiele
innych szerzej opisano w sekcja Wst˛ep w Rozdział 10.
Jaki system wybrać?
Na stacji roboczej bez zastanowienia można polecić udev, gdyż pozwoli na znaczne
podniesienie komfortu pracy. W przypadku serwerów b˛edzie to głównie zależało od
preferencji administratora i wybór nie b˛edzie miał tu wi˛ekszego znaczenia.
Zupełnie inaczej to wyglada
˛ w przypadku systemów zamkni˛etych typu chroot, zarówno plikami urzadze
˛
ń jak i modułami zajmuje si˛e system gospodarz, ponadto
udev może stać si˛e 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˛ednych.
Przypisy
1. http://www.grsecurity.net
2. http://linux-vserver.org
3. http://cvs.pld-linux.org/cgi-bin/cvsweb/SPECS/
4. http://www.reactivated.net/writing_udev_rules.html
5. http://pld-linux.org/pl/UdevFAQ
95
Rozdział 11. Kernel i urzadzenia
˛
96
Rozdział 12. Konfiguracja systemu
Ten rozdział prezentuje metody konfiguracji parametrów systemu.
Podstawowe ustawienia
Plik /etc/sysconfig/system przechowuje zaawansowana˛ konfiguracj˛e systemu, w
rozdziale tym opisano cz˛eść z zawartych w nim opcji.
Konfiguracja skryptów startowych
Zmienna określa czy skrypty startowe maja˛ używać kolorów:
COLOR_INIT=yes
Numer kolumny wyświetlania wyniku działania skryptu startowego:
INIT_COL=75
Szybsze uruchomienie systemu z pomini˛eciem niektórych skryptów, startowych m.in. skryptu od obsługi j˛ezyków:
FASTRC=no
Zezwolenie na interaktywny start rc-skryptów (pytanie o uruchomienie każdego z
podsystemów) po wciśni˛eciu klawisza I:
RC_PROMPT=yes
Opcje zwiazane
˛
z jadrem
˛
"Gadatliwość" kernela dla komunikatów wysyłanych na konsol˛e tekstowa.˛ Opcja jest
jednoznaczna z wywołaniem polecenia dmesg -n {$nr} (domyślnie 1):
CONSOLE_LOGLEVEL=1
Czas w sekundach, po którym nastapi
˛ restart maszyny jeśli wystapił
˛ krytyczny bład
˛
jadra
˛
(kernel panic). Ważna opcja w przypadku komputerów, do których nie mamy
fizycznego dost˛epu:
PANIC_REBOOT_TIME=60
Opcje uruchamiania systemu
Uruchomienie programu sulogin (pytanie o hasło root-a) zamiast powłoki jeśli wystapi
˛ a˛ problemy w trakcie uruchomienia:
RUN_SULOGIN_ON_ERR=yes
97
Rozdział 12. Konfiguracja systemu
Wartość "yes" poniższej zmiennej pozwala na zalogowanie si˛e użytkowników dopiero po zakończeniu procesu ładowania systemu. Dzi˛eki unikniemy potencjalnych
problemów wynikajacych
˛
z przedwczesnym uzyskaniem dost˛epu, z drugiej jednak
strony tracimy możliwość zalogowania si˛e (np. przez SSH) jeśli pojawia˛ si˛e 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
Usługi
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 przechowujacych
˛
systemy typu chroot, które maja˛ być zarzadzane
˛
przez skrypt /etc/init.d/sys-chroots:
SYSTEM_CHROOTS=/jakis_katalog
Ustawienia konsoli
Dzi˛eki plikowi /etc/sysconfig/console możemy ustawić takie parametry jak
czcionka konsoli, mapa klawiatury, kodowanie fontów oraz zarzadzanie
˛
energia.˛
Aby zmienić czcionk˛e, 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 sa˛ parametry, zmieniamy:
98
Rozdział 12. Konfiguracja systemu
SET_FONT_TERMINALS="1 2 3 4 5 6 7 8"
Przedstawiony parametr deklaruje zmian˛e ustawień dla konsol tty1-tty8.
Aby zmienić opcje zarzadzania
˛
energia,˛ edytujemy parametry:
POWER_SAVE=on
BLANK_TIME=10
POWERDOWN_TIME=60
Parametr BLANK_TIME określa liczb˛e minut nieaktywności do wygaszenia ekranu,
POWERDOWN_TIME - do wyłaczenia
˛
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
Internacjonalizacja
Wstep
˛
Cz˛estym problemem poczatkuj
˛
acego
˛
użytkownika Linuksa jest ustawienie wyświetlania znaków diakrytycznych, walut oraz odpowiedniego j˛ezyka. Ponieważ PLD
jest dystrybucja˛ dla zaawansowanych użytkowników, możemy w niej przystosować
środowisko pracy do naszych indywidualnych potrzeb.
Internacjonalizacja konsoli i programów
Zanim przystapimy
˛
do instalowania poszczególnych paczek, musimy w
pliku /etc/sysconfig/i18n ustawić odpowiednie zmiennie środowiskowe
odpowiadajace
˛
za j˛ezyk czcionk˛e systemowa˛ oraz kodowanie. W naszym
przypadku wpis ten wyglada
˛ nast˛epujaco:
˛
SUPPORTED_LOCALES=pl_PL
LANG=pl_PL
LC_ALL=pl_PL
LINGUAS=pl_PL
SYSFONT=lat2u-16
UNIMAP=lat2u
SYSFONTACM=iso02
Nast˛epnie instalujemy pakiety odpowiedzialne za ustawienia lokalne i klawiatur˛e:
# 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˛e również innego
j˛ezyka, to trzeba to zaznaczyć właśnie przy tej zmiennej.
99
Rozdział 12. Konfiguracja systemu
Przykładowy zapis dla kilku j˛ezyków w pliku /etc/sysconfig/i18n może wygla˛
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 zawierajacy
˛ baz˛e 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˛e zgadzaja.˛
Jeśli chcemy aby ustawienia dopasowane były do naszych upodobań do dyspozycji
mamy nast˛epujace
˛ zmienne LC_*:
Dost˛
epne zmienne LC_*:
* LC_CTYPE: Konwersja czcionki i wielkości liter.
˛
sortowania.
* LC_COLLATE: Porzadek
* LC_TIME: Format wyświetlania daty i godziny.
˛
z waluta˛
* LC_NUMERIC: Wyświetlanie liczb nie zwiazanych
* LC_MONETARY: Formaty walutowe.
* LC_MESSAGES: Format wiadomości informacyjnych, diagnostycznych \
oraz określajacych
˛
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˛ezyka, 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
100
Rozdział 12. Konfiguracja systemu
Myszka pod konsola˛
Wstep
˛
Niniejszy rozdział dotyczy uruchomienia obsługi myszy dla terminala znakowego,
konfiguracj˛e myszy dla środowiska graficznego (X-Window) opisano w sekcja XServer w Rozdział 18. Proces konfiguracji rozpoczynamy od instalacji demona gpm:
# poldek -i gpm
Dalsza cz˛eść konfiguracji polega na załadowaniu właściwego modułu jadra
˛
i ustawieniu przynajmniej dwóch parametrów w pliku /etc/sysconfig/mouse: nazwy
urzadzenia
˛
(DEVICE) i typu myszy (MOUSETYPE).
Poniższy opis dotyczy kernela 2.6.x, w tej wersji jako urzadzenia
˛
dla myszy PS2 i
USB stosuje si˛e /dev/input/mouse0, /dev/input/mouse1, ... lub urzadzenie
˛
zbiorcze /dev/input/mice. Jednak dla wstecznej zgodności działa dalej /dev/psaux
Szeregowa
Obsługa portu szeregowego RS-232 jest cz˛eścia˛ jadra
˛
PLD, wi˛ec nie ładujemy żadnego modułu - urzadzenia
˛
działaja˛ od razu po podłaczeniu.
˛
W zależności od tego,
na którym porcie mamy podpi˛eta˛ mysz, ustawiamy odpowiednio parametr DEVICE, pami˛etajac,
˛ że /dev/ttyS0 to COM1, /dev/ttyS1 to COM2 ...
Typ myszy b˛edzie zależał od modelu posiadanego urzadzenia,
˛
w wi˛ekszości wypadków powinna zadziałać dla wartości "ms", "msc", lub "ms3". Szczegółowe informacje
na ten temat znajdziemy w pomocy demona, która˛ wyświetlimy w sposób opisany
na końcu rozdziału.
DEVICE=/dev/ttyS0
MOUSETYPE=ms3
PS/2, TouchPad, TrackPoint
W laptopach urzadzenia
˛
wskazujace
˛ sa˛ zgodne z myszkami typu PS/2, stad
˛ ich konfiguracja przebiega tak samo. Rozpoczynamy od załadowania modułu jadra:
˛
# modprobe psmouse
Podajemy urzadzenie
˛
myszy i jej typ, który dla wi˛ekszości urzadze
˛
ń ustawimy na
"ps2" lub "imps2":
DEVICE=/dev/input/mice
MOUSETYPE=ps2
USB
Ładowanie modułów dla tego rodzaju urzadze
˛
ń może być wykonane automatycznie przez mechanizm udev lub r˛ecznie. W drugim wypadku wydajemy nast˛epujace
˛
polecenia (zakładam że sa˛ już załadowane moduły dla kontrolera USB):
# modprobe usbhid
# modprobe usbmouse
101
Rozdział 12. Konfiguracja systemu
Podajemy urzadzenie
˛
myszy i jej typ, który dla wi˛ekszości urzadze
˛
ń ustawimy na
ps2 lub imps2:
DEVICE=/dev/input/mice
MOUSETYPE=ps2
Zakończenie
Teraz wystarczy tylko uruchomić usług˛e gpm:
# /etc/init.d/gpm start
Wcześniej załadowane moduły można jeszcze wpisać do /etc/modules, aby ładowały si˛e przy starcie systemu.
Porady
•
Wi˛ekszość dost˛epnych na rynku myszek powinna zadziałać z przedstawiona˛
powyżej konfiguracja.˛ Możliwe jednak, że nasza mysz używa nietypowego
protokołu i należy ustawić inny typ urzadzenia
˛
(MOUSETYPE). W takim
wypadku pomocna może si˛e okazać lista urzadze
˛
ń i odpowiadajacych
˛
im typów
wyświetlana w wyniku poniższego polecenia:
# gpm -m /dev/input/mice -t help
•
Pożyteczna˛ opcja˛ jest BUTTON_COUNT, która definiuje liczb˛e przycisków myszy.
•
Zamiast wskazania pliku urzadzenia,
˛
możemy użyć łacza
˛
symbolicznego o nazwie
/dev/mouse wskazujacego
˛
na właściwe urzadzenie.
˛
Strefa czasowa
Strefy czasowe to specjalne ustawienia, pozwalajace
˛ systemowi na łatwe przeliczanie
czasu uniwersalnego (UTC) na lokalny i na odwrót. Zaczynamy od instalacji koniecznego pakietu:
$ poldek -i tzdata
Aby wskazać stref˛e czasowa˛ modyfikujemy plik /etc/sysconfig/timezone, jego
ustawienia wskazuja˛ na odpowiednie pliki i katalogi w /usr/share/zoneinfo, które z kolei odpowiadaja˛ strefom czasowym. Nazwy plików odpowiadaja˛ pewnym
punktom geograficznym tak aby łatwiej było określić właściwa˛ stref˛e.
W Ac ustawiamy zmienne ZONE_INFO_AREA i TIME_ZONE. Opcje wskazuja˛ na
katalog i plik opisujacy
˛ stref˛e, jak zapewne czytelnik zauważy, cz˛eść z nich nie jest
przechowywania w podkatalogach, wtedy ta˛ zmienna˛ należy ustawić pusta.˛ Dla Polski wybieramy podajemy nast˛epujace
˛ wartości:
ZONE_INFO_AREA="Europe"
TIME_ZONE="Warsaw"
˛
przez TIMEZONE, tutaj wartości oddzielaW Th powyższe opcje zostały zastapione
my slashem:
TIMEZONE="Europe/Warsaw"
102
Rozdział 12. Konfiguracja systemu
Aby zmiany odniosły skutek musimy zrestartować odpowiedni skrypt startowy:
# service timezone restart
Wi˛ecej
informacji
o
www.timeanddate.com1
strefach
czasowych
znajdziemy
na
witrynie
Zegar
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˛eda˛
nast˛epowały automatycznie, bez modyfikowania ustawień zegara sprz˛etowego.
Wyjatkiem
˛
od tej reguły jest używanie na tym samym komputerze PLD i któregoś z
produktów Microsoftu. Te ostatnie używaja˛ zgodnego czasu dla BIOS-u i systemu, co
spowoduje różnice we wskazaniach zegarów. Jedynym rozwiazaniem
˛
tego problemu
jest zmuszenie naszego PLD, by używał czasu BIOS-u jako czasu lokalnego. W tym
wypadku zmiana˛ czasu letni/zimowy może zajać
˛ si˛e system Microsoftu lub możemy
wykonać to samodzielnie.
Aby skorzystać z pierwszego rozwiazania
˛
synchronizujemy zegar sprz˛etowy 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
Przegladanie
˛
Zmienne środowiskowe to prosty sposób modyfikowania konfiguracji środowiska
użytkownika. List˛e zmiennych i przypisanych im wartości uzyskamy za pomoca˛
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
Konfiguracja globalna
Administrator może ustawić globalnie wszystkim użytkownikom zmienne środowiskowe. Do tego wykorzystuje si˛e mechanizm env.d. Jest to katalog umieszczony
w /etc, zawierajacy
˛ pliki tekstowe o nazwach takich samych jak nazwy zmiennych,
wewnatrz
˛ 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 wygladać
˛
nast˛epujaco:
˛
103
Rozdział 12. Konfiguracja systemu
EDITOR=vim
Zmiany w /etc/env.d sa˛ aktualizowane po ponownym zalogowaniu danego użytkownika.
Konfiguracja lokalna
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˛ekszości z nich (sh, zsh, bash, ksh) istnieje polecenie export które
pozwala ustawić dowolna zmienna˛ np.:
# export EDITOR=mcedit
Tak ustawiona zmienna b˛edzie funkcjonować do czasu wylogowania użytkownika
Aby ustawić na stałe zmienna˛ 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˛ecej informacji na ten temat
zawarto w manualu każdej z powłok.
Jeśli chcemy ustawić zmienna˛ środowiskowa˛ tylko dla jednego uruchamianego programu, to podajemy jej definicj˛e przed nazwa˛ programu np.:
$ http_proxy=62.87.244.34:8080 wget http://foobar.com/plik.foo
PLDconf - Narzedzie
˛
do konfiguracji systemu
Pldconf jest narz˛edziem tworzonym z myśla˛ o poczatkuj
˛
acych
˛
użytkownikach. Wiele opcji jest konfigurowanych automatycznie. Pldconf ma małe wymagania i jest niewielkim pakietem (ok. 150 kB) Jego instalacja sprowadza si˛e do wydania polecenia:
# poldek -i pldconf
Program zadaje minimalna˛ ilość pytań i w podstawowej wersji (dla PLD RA 1.0)
konfiguruje:
1. Serwer X: karta (auto), rozdzielczość, kolory, itd;
2. Sieć: bramka, DNS, karty sieciowe (auto), otoczenie sieciowe, SDI, NEO (ethernet);
3. Desktop: menedżer okien, kolory, czcionki i wi˛ecej;
4. Menedżer startu: menu z linuksem i windows, dyskietka startowa i wi˛ecej;
5. Dost˛ep do partycji windows;
tyle z podstawowych możliwości - pldconf potrafi wi˛ecej.
Obecnie pldconf rozwijany jest dla nadchodzacego
˛
PLD 2.0 (AC/DC/NEST). W nowej wersji dodano mi˛edzy innymi:
1. Konfiguracje karty dźwi˛ekowej (alsa);
2. Konfiguracje drukarki (cups);
3. Optymalizacje dysku twardego (hdparm);
104
Rozdział 12. Konfiguracja systemu
4. Konfiguracje fetchmail;
5. Konfiguracje tunera telewizyjnego
6. Zarzadzanie
˛
kontami użytkowników
Wersja pldconf dla PLD 2.0 nieznacznie różni si˛e od wersji dla PLD 1.0. Różnice
dotycza˛ 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ć sieciowa˛ instalacj˛e 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ć najnowsza˛ wersj˛e pldconf.
Uwaga: W przypadku instalacji nowego pldconf w systemie PLD 1.0 wymagana jest
również instalacja pakietu perl-modules.
Strona domowa projektu
• http://www.inf.sgsp.edu.pl/pub/PROGRAMY/PLD/
Kluczowe pliki
W tym rozdziale przedstawione sa˛ informacje o kluczowych plikach systemu operacyjnego. Zostały tu opisane jedynie podstawowe dane na ich temat, wi˛ecej można
znaleźć w podr˛eczniku systemowym man, oraz info
/etc/inittab
Plik /etc/inittab przechowuje konfiguracj˛e programu init, uruchamianego w trakcie startu systemu i działajacego
˛
bez przerwy do chwili jego zamkni˛ecia. Głównym
zadaniem procesu init jest kontrola zachowania systemu w zależności od osiagni˛
˛ etego poziomu pracy systemu oraz w wypadku wystapienia
˛
specjalnych zdarzeń. Poziomy pracy szczegółowo opisano w sekcja Zmiana poziomu pracy systemu w Rozdział
14.
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ślajacy
˛
t˛e opcj˛e wyglada
˛
nast˛epujaco:
˛
id:{$poziom}:initdefault: ($poziom to cyfra odpowiadajaca
˛ 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˛eda˛ bardzo podobne:
1:12345:respawn:/sbin/mingetty --noclear tty1
•
Poniższy wiersz uruchomi program agetty, łacz
˛ acy
˛ si˛e z portem szeregowym
/dev/ttyS0, w celu podłaczenia
˛
terminala szeregowego:
0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100
Jeśli nie używamy tego rodzaju urzadze
˛
ń to powyższe wywołania sa˛ dla nas
zbyteczne.
•
Wywołania skryptów startowych - opcje te bardzo rzadko wymagaja˛ ingerencji
użytkownika:
105
Rozdział 12. Konfiguracja systemu
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
•
Obsługa specjalnych zdarzeń np. wciśni˛ecia kombinacji klawiszy ctrl+alt+del:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Mamy spora˛ dowolność w zarzadzaniu
˛
tym zdarzeniem, w powyższym przykładzie po naciśni˛eciu kombinacji ctrl+alt+del nastapi
˛ przeładowanie systemu, aby
nastapiło
˛
zamkniecie powinniśmy użyć polecenia shutdown -h.
/etc/fstab
Plik ten przechowuje szczegółowe informacje o systemach plików, które maja˛ być
montowane do odpowiednich katalogów. Informacje w nim zawarte sa˛ odczytywane w trakcie startu systemu, dzi˛eki temu automatycznie sa˛ montowane wszystkie
woluminy (partycje) nie oznaczone opcja˛ "noauto". Plik ten jest zazwyczaj tworzony
przez instalator, jednak administrator ma możliwość, a nawet obowiazek
˛
dokonywać
w nim zmian. Dla lepszego zrozumienia tematu przyjrzyjmy si˛e przykładowemu plikowi i przeanalizujmy funkcje jakie spełniaja˛ 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 sa˛ od siebie spacja˛ lub
tabulatorem. Dane odpowiedniego rekordu wczytywane sa˛ przez skrypty startowe
oraz programy takie jak: fsck, mount czy umount przez co musza˛ one być zapisane
w uporzadkowany
˛
sposób.
Pole (fs_spec) - określa urzadzenie
˛
blokowe lub zasób sieciowy przeznaczony do
zamontowania, na przykład partycj˛e dysku, CDROM czy udział NFS. Opis urza˛
dzeń masowych przedstawiono w sekcja Nazewnictwo urzadze
˛ ń masowych w Rozdział
13, montowanie udziałów NFS przedstawiono w sekcja NFS - Network File System w
Rozdział 17.
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˛e na danym urza˛
dzeniu. Najbardziej powszechne obecnie i obsługiwane systemy plików to:
106
•
ext2 - podstawowy system plików w Linuksie
•
ext3 - j.w. tyle że z ksi˛egowaniem
•
reiserfs - zaawansowany system plików z ksi˛egowaniem
•
xfs - zaawansowany system plików z ksi˛egowaniem
•
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
Rozdział 12. Konfiguracja systemu
•
swap - obszar wymiany
Pole (fs_mntops) udost˛epnia szereg znaczników systemowych, które moga˛ mieć
kluczowe znaczenie dla bezpieczeństwa i wydajności naszego systemu. Przykładowo nast˛epujace
˛ znaczniki oznaczaja:˛
•
defaults - domyślny zestaw opcji, użyteczny w wi˛ekszości wypadków.
•
nodev - zapobiega rozpoznawaniu przez jadro
˛
dowolnych plików urzadze
˛
ń, znajdujacych
˛
si˛e w systemie plików
•
noexec - zapobiega wykonywaniu plików wykonywalnych w danym systemie plików
•
nosuid - zapobiega uwzgl˛ednianiu bitów set-UID oraz set-GID w przypadku dowolnego pliku wykonywalnego
•
ro - powoduje zamontowanie systemu plików w trybie tylko do odczytu,
powstrzymujac
˛ wszelkie modyfikacje informacji dotyczacych
˛
plików, właczaj
˛
ac
˛ w
to na przykład czas dost˛epu do pliku
Pole (fs_freq) jest używane przez program dump do wykrywania, który system
plików ma mieć wykonywana˛ kopi˛e 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˛edzie 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ówna˛ 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
wymagaja˛ właściwie systemy plików z ksi˛egowaniem, gdyż sa˛ 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ład
˛ może spowodować problemy z uruchomieniem systemu operacyjnego.
/etc/passwd
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˛e 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 moga˛ si˛e zalogować
Plik ten jak i opisany poniżej /etc/shadow maja˛ kluczowe znaczenie dla systemu,
dlatego nie należy ich edytować r˛ecznie. Narz˛edzia, służce do tego, opisano w sekcja
Konta użytkowników w Rozdział 14.
107
Rozdział 12. Konfiguracja systemu
/etc/shadow
Plik zawierajacy
˛ zakodowane hasła i dodatkowe informacje dla systemu uwierzytelniania użytkowników np.:
marek:$1$qb/waABk$F3Y6dKw/6ekZPfcoTpzks/:12575:0:99999:5:::
/etc/group
Plik zawierajacy
˛ 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˛e 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 sekcja Grupy w Rozdział 14
/etc/shells
Zawiera list˛e dost˛epnych 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
/etc/motd
Wiadomość dnia (ang. Message of the day) - Powitanie użytkownika: treść tego pliku
wyświetlana po uwierzytelnieniu si˛e w systemie.
/etc/nologin
Plik tworzony przez administratora - blokuje możliwość logowania si˛e użytkowników do systemu. Przy próbie logowania wyświetlana jest jego treść.
Przypisy
1. http://www.timeanddate.com/
2. http://www.inf.sgsp.edu.pl/pub/PROGRAMY/PLD/
108
Rozdział 13. Pamieci
˛ masowe
Ten rozdział opisuje operacje dyskowe takie jak podział na partycje, tworzenie systemów plików i inne zaawansowane zagadnienia
Wstep
˛
Uwaga! Wszelkie operacje dyskowe narażaja˛ nas na nieodwracalna˛ utrat˛e danych,
dlatego zaleca si˛e stworzenie kopii zapasowej danych i zachowanie szczególnej
ostrożności.
Nazewnictwo urzadze
˛
ń masowych
Numerowanie partycji
W Linuksie moga˛ być obsłużone cztery partycje podstawowe lub trzy podstawowe
i jedna rozszerzona. Takie partycje sa˛ numerowane od 1 do 4, zaś dyski logiczne
kolejnymi numerami poczawszy
˛
od 5. Podawanie numeru partycji ma sens wyłacz˛
nie w wypadku dysków twardych, nie podajemy ich dla urzadze
˛
ń takich jak nap˛edy optyczne (CD/DVD), dyskietki czy też woluminy logiczne. Nie podajemy go
również w przypadku odwołania do urzadzenia
˛
fizycznego np. używajac
˛ programu
fdisk lub hdparm.
Aby zorientować si˛e w układzie partycji urzadzenia
˛
możemy użyć programu fdisk
np.:
# fdisk -l /dev/hda
Urzadenia
˛
ATA (IDE)
Urzadzenia
˛
ATA nazywane sa˛ wg. schematu: /dev/hd{$x}{$Nr} np. /dev/hda1.
Parametr {$x} jest mała˛ litera˛ identyfikujac
˛ a˛ fizyczne urzadzenie,
˛
zaś {$Nr} to omówiony powyżej numer partycji dyskowej. W odróżnieniu od urzadze
˛
ń SATA i SCSI
w interfejsie IDE litery te maja˛ swoje specjalne znaczenie - wskazuja˛ sposób podła˛
czenia urzadzenia:
˛
•
"a" -dysk nadrz˛edny (primary) podłaczony
˛
do pierwszego kanału IDE
•
"b" -dysk podrz˛edny (slave) podłaczony
˛
do pierwszego kanału IDE
•
"c" -dysk nadrz˛edny (primary) podłaczony
˛
do drugiego kanału IDE
•
"d" -dysk podrz˛edny (slave) podłaczony
˛
do drugiego kanału IDE
Urzadenia
˛
SCSI/SATA/USB Storage
Dyski twarde i pami˛eci flash maja˛ oznaczenia /dev/sd{$x}{$Nr} np. /dev/sda1.
Symbol {$x} to oznaczenie fizycznego urzadzenia,
˛
którym przypisywane sa˛ kolejne
litery zaczynajac
˛ od "a", zaś {$Nr} to opisany na poczatku
˛
numer partycji. Nap˛edy
optyczne (CD/DVD) sa˛ oznaczane jako /dev/sr{$Nr} np.: /dev/sr0.
109
Rozdział 13. Pami˛eci masowe
Dyskietki elastyczne
Do stacji dyskietek odwołujemy si˛e za pomoca˛ urzadzenia
˛
/dev/fd0 lub /dev/fd1.
LVM
Woluminy logiczne maja˛ dowolne nazwy - nadawane przez administratora w trakcie ich zakładania. Jeśli pliki urzadze
˛
ń nie sa˛ utworzone statycznie, to moga˛ być wykrywane automatycznie (przy starcie systemu) i wtedy nadawane sa˛ im nazwy w
konwencji /dev/mapper/$VG-$LV np. /dev/mapper/sys-home.
RAID programowy
Urzadzenia
˛
maja˛ nazwy wg. schematu: /dev/md{$nr}, np. /dev/md0, które z kolei
jest symlinkiem do /dev/md/0.
Urzadzenia
˛
w GRUB-ie
GRUB ze wzgl˛edu na swoja wieloplatformowość używa własnego schematu nazewnictwa. Dyski fizyczne sa˛ widoczne jako (hd{$NR}), np. (hd1) zaś partycje jako (hd{$NR1},{$NR2}) np. (hd1,2). Urzadzenia
˛
te nie sa˛ bezpośrednio powiazane
˛
z
plikami urzadze
˛
ń w katalogu katalogu /dev i programy poza GRUB-em nie moga˛ z
nich korzystać. Wi˛ecej w opisie bootloadera, w sekcja GRUB w Rozdział 10.
Podział na partycje
Partycje
Na dysku twardym możemy utworzyć do czterech partycji podstawowych (primary partition) lub do trzech partycji podstawowych i jednej rozszerzonej (extended
partition). Partycj˛e rozszerzona˛ możemy podzielić na liczne dyski logiczne (logical
partitions).
Partycje szerzej opisano m.in. w Wikipedii1, zaś sposób ich oznaczania przedstawiono w sekcja Nazewnictwo urzadze
˛ ń masowych. Opis systemu plików-urzadze
˛
ń z katalogu /dev odnajdziemy w sekcja Urzadzenia
˛
w Rozdział 11.
Zanim zaczniemy
Operacje na partycjach moga˛ skończyć si˛e utrata˛ 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
110
Rozdział 13. Pami˛eci masowe
Wymagane miejsce na system
Wymagania dyskowe w PLD (nie liczac
˛ 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˛ekszej elastyczności i stabilności warto przeznaczyć wi˛ekszy
zapas miejsca, niż w przypadku maszyn domowych.
•
stacja robocza z XWindow - należy przeznaczyć przynajmniej 1GB miejsca
Logi i dane moga˛ zajmować bardzo duże ilości miejsca, dlatego musimy podejść do
tego indywidualnie.
Osobnym zagadnieniem jest wielkość obszaru wymiany, stara zasada mówiaca,
˛ aby
swap był dwukrotnie wi˛ekszy niż pami˛eć operacyjna, sprawdza si˛e wi˛ekszości wypadków. Należy jednak podejść do tego elastycznie i dobrać obj˛etość obszaru wymiany odpowiednio do charakterystyki pracy maszyny.
Plan podziału dysku
Dla stacji roboczych zazwyczaj wystarczy podział na dwie partycje, które b˛eda˛ użyte
dla: "/" (głównego drzewa) i obszaru wymiany (swap). W przypadku serwerów dużo b˛edzie zależało od zastosowania maszyny i preferencji administratora, lecz jako
minimum należy dodatkowo przydzielić partycj˛e dla gał˛ezi /var.
W obu zastosowaniach dla wygody i bezpieczeństwa nierzadko tworzy si˛e dodatkowa˛ partycj˛e dla katalogu /home, pozwala to na łatwiejsze zarzadzanie
˛
uprawnieniami i ułatwia wiele operacji. Partycj˛e na katalogi domowe należy traktować jako obowiazkow
˛
a˛ jeśli na maszynie b˛eda˛ dost˛epne konta z dost˛epem do powłoki (shella). Jej
wielkość bezpośrednio zależy od planowanej ilości przechowywanych danych.
Jeśli od maszyny wymagamy zwi˛ekszonej niezawodności można utworzyć mała˛
partycj˛e dla katalogu /boot, w którym sa˛ trzymane ważne pliki systemowe. Dane
w katalogu /boot zaraz po zainstalowaniu nie powinny przekroczyć ok. 7MB, aby
wi˛ec mieć możliwość instalacji kilku kerneli, musimy przeznaczyć na taka˛ partycj˛e co
najmniej 25MB miejsca. Dzi˛eki temu zwi˛ekszymy szanse na uruchomienie systemu z
uszkodzonym głównym systemem plików. Jest to szczególnie zalecane w przypadku użycia bootloadera GRUB, ze wzgl˛edu na jego specyficzna˛ konstrukcj˛e, wi˛ecej na
temat GRUB-a znajdziemy w sekcja GRUB w Rozdział 10.
Programy do zarzadzania
˛
partycjami
fdisk - interaktywny program do zarzadzania
˛
partycjami, wydane polecenia zostana˛
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ślajacym
˛
urzadzenie
˛
z katalogu /dev.
cfdisk - wygodne narz˛edzie, wyposażone w semigraficzny interfejs użytkownika.
Twórcy ułatwili życie poczatkuj
˛
acym,
˛
poprzez ukrywanie partycji rozszerzonych,
tworzeniem i ich usuwaniem zajmuje si˛e program bez naszego udziału. Podobnie
jak fdisk zapisuje zmiany do tablicy partycji na samym końcu. Wywołujemy go z
parametrem określajacym
˛
urzadzenie
˛
z katalogu /dev.
parted - jest pot˛eżnym narz˛edziem, umożliwiajacym
˛
wiele operacji niedost˛epnych
dla obu poprzednich programów. Oprócz podstawowych operacji na partycjach
umożliwia takie operacje jak zmian˛e wielkości partycji, tworzenie obrazów partycji
i inne. Istotna˛ różnica˛ w działaniu w porównaniu dla powyższych narz˛edzi
jest natychmiastowe wprowadzanie zmian, stad
˛ zaleca si˛e zachowanie dużej
ostrożności przy korzystaniu z niego.
111
Rozdział 13. Pami˛eci masowe
GParted/QtParted - programy dla X-Window oparte o parted. Maja˛ interfejs wzorowany na programie Partion Magic z systemu MS Windows.
sfdisk - program obsługiwany za pomoca˛ 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.
Podział
Poniższe przykłady b˛eda˛ 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 sa˛ jakieś partycje użyjemy nast˛epujacego
˛
polecenia:
# fdisk -l /dev/sda
Założyłem, że na dysku nie ma innych partycji, jeśli w naszym wypadku takie sa˛ to
musimy je najpierw usunać.
˛ Kiedy dysk jest gotowy uruchamiamy program fdisk:
# fdisk /dev/sda
Command (m for help):
wybieramy opcj˛e n (nowa partycja)
Command action
e
extended
p
primary partition (1-4)
Program pyta o rodzaj rodzaj partycji, która˛ ma utworzyć. Tu wybór zależy od nas
ale jeśli dysk ma mieć nie wi˛ecej niż cztery partycje, to śmiało możemy zostać przy
partycjach podstawowych - w naszym przykładzie wybieramy opcj˛e 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.
Opcja˛ p) wyświetlamy planowany układ partycji. Po zakończeniu podziału przypisujemy typy partycji opcja˛ t) podajac
˛ kolejno: numer partycji, Jeśli wybrany podział
nam odpowiada to zapisujemy zmiany na dysk (do tablicy partycji) przez wybór
opcji w.
Zakończenie
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 sekcja Systemy plików.
Systemy plików
W tym rozdziale omówimy tworzenie jednej z dwóch możliwych struktur na partycji
lub urzadzeniu
˛
- systemu plików lub obszaru wymiany (swap).
112
Rozdział 13. Pami˛eci masowe
Wybór systemu plików
Rodzaj użytego systemu plików zależy od planowanego zastosowania. W Linuksie
najbardziej uniwersalnym i popularnym systemem plików jest ext2. Swoja˛ pozycj˛e
uzyskał dzi˛eki temu, że jest prostym i stosunkowo wydajnym systemem plików. Ponadto jako jeden z niewielu systemów plików nadaje si˛e 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˛egowaniem (journaling) np.: ext3, ReiserFS, XFS, JFS ze wzgl˛edu na duże bezpieczeństwo przechowywania danych. Dla zastosowań wymagajacych
˛
wysokiej niezawodności najlepszy b˛edzie ext3, pozostałe z wymienionych można polecić w systemach
wymagajacych
˛
dużej wydajności i wsz˛edzie tam gdzie wyst˛epuja˛ 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.
Tworzenie systemu plików
Programy do tworzenia konkretnych systemów plików różnia˛ si˛e nazwami, łatwo je
rozpoznamy gdyż ich nazwy zaczynaja˛ si˛e 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 nazwa˛ urzadze˛
nia jako parametrem, na poniższym przykładzie przedstawiono tworzenie systemu
plików ext2 na drugiej partycji podstawowej:
# /sbin/mkfs.ext2 /dev/sda2
Wi˛ecej o nazewnictwie urzadze
˛
ń masowych w sekcja Nazewnictwo urzadze
˛ ń masowych.
Powyżej przedstawiono jedynie skrócona˛ list˛e wszystkich dost˛epnych programów,
programy te sa˛ dost˛epne w odpowiednich pakietach, przykładowo narz˛edzia dla
systemu plików xfs odnajdziemy w pakiecie xfsprogs.
Tworzenie obszaru wymiany
Do tworzenia obszaru wymiany używamy programu mkswap np.:
# mkswap /dev/hda5
Podmontowanie partycji / aktywacja swapu
Partycje i obszary wymiany sa˛ montowane/właczane
˛
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
113
Rozdział 13. Pami˛eci masowe
System plików zostanie automatycznie wykryty a opcje zostana˛ ustawione na wartość "defaults". Wi˛ecej na ten temat odnajdziemy w podr˛eczniku systemowym.
Obszary wymiany aktywujemy nast˛epujaco:
˛
# /sbin/swapon /dev/hda5
Szczegółowy opis pliku /etc/fstab oraz rc-skryptów przedstawiono w sekcja Kluczowe pliki w Rozdział 12.
Poznanie typu systemu plików
Aby dowiedzieć si˛e jaki typ systemu plików jest na danej partycji, użyjemy programu
file z opcja˛ -s:
# file -s /dev/hda2
/dev/hda1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)
List˛e urzadze
˛
ń z utworzonymi do tej pory systemami plików uzyskamy za pomoca˛
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 urzadze
˛
ń możemy użyć programu
mount:
/dev/hda1 on /boot type ext2 (rw,sync)
/dev/md/0 on /vservers type xfs (rw,noatime,usrquota)
Formatowanie
Obecnie nie formatuje si˛e dysków twardych, można to robić jedynie z dyskietkami
elastycznymi za pomoca˛ narz˛edzia fdformat. Robi si˛e to wyłacznie
˛
dla uzyskania
jakiejś nietypowej pojemności nośnika, w pozostałych wypadkach operacja ta jest
zb˛edna, gdyż dyskietki podobnie jak dyski twarde sa˛ formatowane fabrycznie. Takie
formatowanie nazywane jest także tzw. formatowaniem niskopoziomowym.
To co obecnie potocznie określa si˛e jako "formatowanie" jest złożeniem dwóch operacji: podziału na partycje a nast˛epnie utworzeniem systemów plików.
RAID programowy
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˛etowych które wymagaja˛ specjalnego kontrolera
dysków (dość drogiego), macierze RAID programowe zakłada si˛e na dyskach podłaczonych
˛
do zwykłego kontrolera IDE, SATA lub SCSI i cała˛ obsług˛e 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˛ecej możliwości
114
Rozdział 13. Pami˛eci masowe
konfiguracji. Zarówno korzystajac
˛ z całych dysków jak i partycji należy pami˛etać
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˛e i opis dost˛epnych rodzajów macierzy dla mdadm, w nawiasach podano nazwy parametrów programu:
•
RAID 0 (raid0, 0, stripe) - striping czyli połaczenie
˛
dwóch dysków (partycji)
z przeplotem danych, zwi˛eksza si˛e 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 sa˛ w dwóch jednakowych kopiach, w przypadku awarii jednego drugi przejmuje role pierwszego. Wydajność
tak jak pojedynczy dysk, duże bezpieczeństwo, wada˛ jest duża strata pojemności
(n/2 - n-liczba dysków w macierzy)
•
RAID 4 (raid4, 4) - dane sa˛ rozpraszane na kolejnych dyskach a na ostatnim zapisywane sa˛ dane parzystości, zwi˛ekszone 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 sa˛ zarówno dane jak i informacje o parzystości na
wszystkich dyskach, dzi˛eki 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. Jedyna˛ różnica˛ jest dwukrotne zapisanie sum kontrolnych. Dzi˛eki temu macierz może
bez utraty danych przetrwać awari˛e dwóch dysków. Wymaga minimum czterech
dysków, jej pojemność to n-2.
•
Tryb liniowy (linear) - czyli połaczenie
˛
dwóch dysków w jeden w ten sposób
że koniec pierwszego jest poczatkiem
˛
drugiego, nie zapewnia absolutnie żadnego
bezpieczeństwa a wr˛ecz obniża odporność na awarie dysków.
Najcz˛eściej stosuje si˛e macierze RAID1 i RAID5, do specyficznych zastosowań używa
si˛e RAID0, pozostałe sa˛ rzadziej spotykane.
Instalacja
Instalujemy nast˛epujace
˛ 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
Planowanie macierzy
Dosyć popularnym rozwiazaniem
˛
jest utworzenie identycznego zestawu partycji na
każdym z dysków, a nast˛epnie spi˛ecie odpowiednich partycji w macierze. Aby uła115
Rozdział 13. Pami˛eci masowe
twić sobie zadanie możemy najpierw podzielić jeden z dysków, a na nast˛epne urza˛
dzenia skopiować układ tablicy partycji np.:
# sfdisk -d /dev/sdc | sfdisk /dev/sdd
jak si˛e łatwo domyśleć w powyższym przykładzie kopiujemy z dysku /dev/sdc na
/dev/sdd.
Garść porad:
•
Kernel może być ładowany wyłacznie
˛
z macierzy RAID 1, jeśli wi˛ec b˛edziemy
chcieli używać np. RAID5 na głównym systemie plików to musimy umieścić gałaź
˛
/boot na osobnej, niewielkiej macierzy RAID1. Opis konfiguracji bootloadera do
obsługi macierzy znajduje si˛e w dalszej cz˛eści artykułu.
•
Należy oprzeć si˛e pokusie umieszczenia obszaru wymiany (swap) na RAID0, gdyż
awaria jednego z dysków może doprowadzić do załamania systemu.
•
Urzadzenia,
˛
z których składamy macierz powinny być równej wielkości, w przeciwnym razie wielkość macierzy b˛edzie wyznaczana przez najmniejsza˛ partycj˛e.
Wi˛ecej informacji o podziale na partycje i planowaniu miejsca na dysku zdob˛edziemy
w sekcja Podział na partycje.
Tworzenie macierzy RAID
Przyst˛epujemy do zakładania macierzy na partycjach za pomoca˛ polecenia mdadm:
mdadm -C {$dev_RAID} --level={$rodzaj} --raid-devices={$ilość_urzadzen} {$urzadzenia}
• -C, --create
- utwórz nowa˛ macierz.
- 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 sa˛ synonimami.
Przy opcji Building pierwsze moga˛ być użyte: raid0, raid1, raid4, raid5.
• -l, --level
• -n, --raid-devices
- liczba aktywnych urzadze
˛
ń (dysków) w macierzy
- liczba zapasowych (eXtra) urzadze
˛
ń w tworzonej macierzy. Zapasowe dyski można dodawać i usuwać także później.
• -x, --spare-devices
• -v --verbose
- tryb "gadatliwy"
- automatyczne tworzenie urzadze
˛
ń w /dev/ przez mdadm (stosowane zwykle przy użyciu UDEVa), wi˛ecej w Poradach na końcu rozdziału.
• --auto=yes
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 zapasowa˛
# mdadm -C -v /dev/md2 --level=5 -n 4 --spare-devices=1 \
/dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3
116
Rozdział 13. Pami˛eci masowe
Konfiguracja
Po utworzeniu macierzy post˛epujemy z nia˛ dalej jak z partycja,˛ czyli zakładamy system plików i odwołujemy si˛e 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 poczatek
˛
dodajemy wiersz, w którym wymieniamy list˛e urzadze
˛
ń z których budowane sa˛ macierze (można używać
wyrażeń regularnych):
DEVICE /dev/sd[abcd][123]
Nast˛epnie dodajemy definicje macierzy, możemy to zrobić automatem:
# mdadm --detail --scan >> /etc/mdadm.conf:
lub samodzielnie, poprzez dodanie nast˛epujacych
˛
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) sa˛ składane przez rc-skrypt /etc/rc.d/rc.sysinit, na
podstawie powyższych wpisów konfiguracyjnych, zatem po restarcie maszyny b˛edziemy 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˛ecznym składaniu macierzy przydane może być polecenie skanujace
˛ urzadze˛
nia blokowe w poszukiwaniu istniejacych
˛
macierzy:
# mdadm --examine --scan -v
Initrd
Jeśli główny system plików ma być na macierzy to musimy wygenerować obraz initrd z modułami, które pozwola˛ na złożenie macierzy. Na poczatek
˛
musimy mieć
zainstalowany pakiet mdadm-initrd. Generowanie takiego initrd przebiega dokładnie tak samo jak dla zwykłego urzadzenia
˛
blokowego, musimy si˛e 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 sekcja Initrd
w Rozdział 11.
Bootloader
Jeśli na raidzie ma si˛e znaleźć główny system plików (bez /boot), to konfiguracja jest
identyczna jak w przypadku klasycznych urzadze
˛
ń blokowych.
Jeśli gałaź
˛ /boot ma si˛e znaleźć na macierzy (wyłacznie
˛
RAID1) to powinniśmy zainstalować bootloader na każdym z dysków wchodzacych
˛
w skład macierzy, dzi˛eki
czemu b˛edziemy mogli uruchomić system mimo awarii jednego z dysków. RAID0 i
RAID2-5 nie sa˛ obsługiwane przez LILO\GRUB
W LILO w pliku /etc/lilo.conf należy podać odpowiednie urzadzenie
˛
dla opcji
root i boot:
117
Rozdział 13. Pami˛eci masowe
boot=/dev/md0
raid-extra-boot="/dev/sda,/dev/sdb"
image=/boot/vmlinuz
label=pld
root=/dev/md0
initrd=/boot/initrd
Opcja w opcji raid-extra-boot wskazuje urzadzenia
˛
na których ma zostać zainstalowany bootloader (urzadzenia
˛
wchodzace
˛ 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˛epnie szukamy gdzie znajduja˛ sie pliki bootloadera,
grub>find /boot/grub/stage1
jeśli /boot jest oddzielna˛ partycja˛ 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 sekcja Wst˛ep w Rozdział 10.
118
Rozdział 13. Pami˛eci masowe
Diagnostyka
Skrócone informacje o macierzy:
# mdadm --query /dev/md0
Poniżej podałem przykłady dwóch poleceń, które pozwalaja˛ odczytać dokładne dane
macierzy i jej stan:
# mdadm --detail /dev/md0
# cat /proc/mdstat
Porady
•
Majac
˛ 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 majac
˛ dwie macierze RAID0.
•
Aby samemu złożyć macierz (z np: PLD Live CD) wydajemy polecenie, które może
wygladać
˛
nast˛epujaco:
˛
# mdadm -A /dev/md0 /dev/hda /dev/hdb
•
Jeśli macierz jest składana w trakcie startu systemu to automatycznie tworzony
jest plik urzadzenia
˛
/dev/mdX. W trakcie tworzenia macierzy, lub gdy macierz
nie startuje wraz z systemem, możemy skorzystać z gotowych urzadze
˛
ń w /dev
(pakiet dev) lub samemu je utworzyć (pakiet udev). Udev nie tworzy urzadze
˛
ń
/dev/md0, wi˛ec musimy w tym celu użyć parametru --auto=yes w wywołaniach programu mdadm, lub utworzyć je poleceniem mknod. Urzadzeniu
˛
nadajemy major o wartości 9 i kolejny, niepowtarzalny numer minor. Nie musimy si˛e
martwić o moduły, sa˛ on ładowane automatycznie przez mdadm lub initrd. Wi˛ecej
o UDEV w sekcja Udev - dynamiczna obsługa sprz˛etu w Rozdział 11.
•
Wraz z pakietem mdadm dostarczany jest rc-skrypt uruchamiajacy
˛ mdadm w trybie monitorowania (jako demona). Wi˛ecej szczegółów w dokumentacji programu
mdadm.
•
Migracja z pojedynczego dysku na RAID12
Instalacja linuksa na raid13
Naprawa zdegradowanej macierzy4
Dodatki
Literatura:
•
http://www.eioba.com/a70652/konfiguracja_i_objasnienie_raid_oraz_lvm
•
http://lists.us.dell.com/pipermail/linux-poweredge/2003-July/008898.html
•
http://www.linuxsa.org.au/mailing-list/2003-07/1270.html
•
http://gentoo-wiki.com/HOWTO_Gentoo_Install_on_Software_RAID
119
Rozdział 13. Pami˛eci masowe
LVM
LVM (Logical Volume Management) to system zaawansowanego zarzadzania
˛
przestrzenia˛ dyskowa,˛ który jest o wiele bardziej elastyczny, niż klasyczne partycje dyskowe. To wia˛że si˛e z bardziej złożona˛ konstrukcja,˛ która składa si˛e z nast˛epujacych
˛
struktur:
(physical volumes) - fizyczne woluminy: sa˛ bezpośrednio zwiazane
˛
z partycjami dyskowymi (np. /dev/hda1, /dev/sdb3).
• PV
• VG (volume groups) - grupy woluminów: składaja˛ si˛e z co najmniej jednego PV, ich
wielkość to suma obj˛etości wszystkich PV należacych
˛
do danej grupy. Uzyskane
miejsce dyskowe może być dowolnie dysponowane pomi˛edzy kolejne LV.
(logical volumes) - woluminy logiczne: sa˛ obszarami użytecznymi dla systemu
(podobnie jak partycje dyskowe). LV sa˛ obszarami wydzielonymi z VG, zatem suma wielkości woluminów nie może zatem przekraczać obj˛etości VG, do którego
należa.˛
• LV
Schemat LVM-u, który zostanie użyty jako przykład w tym rozdziale:
PV1
PV2
\ /
VG
/ | \
LV1 LV2 LV3
Planowanie woluminów
Musimy wyznaczyć urzadzenia
˛
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ła˛ partycj˛e dla gał˛ezi /boot, gdyż bootloadery lilo i grub nie
potrafia˛ czytać danych z woluminów. Szczegółowy opis dzielenia dysków na partycje zamieściliśmy w sekcja Podział na partycje.
Załóżmy, że mamy dwa dyski twarde po 250GB (/dev/sda i /dev/sdb), których powierzchni˛e chcemy połaczyć
˛
i rozdysponować pod system operacyjny. Jako, że rootfs
także b˛edzie na woluminie to rozplanowanie miejsca może wygladać
˛
nast˛epujaco:
˛
• /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˛edzie miało rozmiar ~500GB miejsca, z czego 400GB przydzielimy do użytku, a
reszt˛e pozostawimy dla przyszłych, nieokreślonych na razie zastosowań. Miejsce na
VG rozdysponujemy nast˛epujaco:
˛
120
•
swap: 5GB
•
/ (rootFS): 25GB
•
/home: 370GB
Rozdział 13. Pami˛eci masowe
Instalacja
Omawiamy implementacj˛e 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.
Budowanie woluminów
Ładujemy moduł device mappera:
# modprobe dm-mod
Dzielimy dysk /dev/sda na dwie opisane powyżej partycje, a nast˛epnie wskazujemy
urzadzenia
˛
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˛eści rozdziału). Rzucajac
˛ a˛ si˛e w oczy
cecha˛ woluminów logicznych jest możliwość swobodnego nadawania im
nazw, co znacznie ułatwia utrzymanie porzadku.
˛
Do utworzonych powyżej
woluminów odwołujemy si˛e za pomoca˛ utworzonych przed chwila˛ urzadze
˛
ń:
/dev/vgsys/swap, /dev/vgsys/rootfs i /dev/vgsys/home. Woluminy sa˛ 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ł˛ezi /boot:
# mkfs.ext2 /dev/sda1
Teraz montujemy woluminy w klasyczny sposób i jeśli wszystko przebiegło bez bł˛edów dokonujemy odpowiednich modyfikacji w /etc/fstab.
Konfiguracja startowa
Woluminy sa˛ 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ługa˛ LVM. Zostało to szczegółowo przedstawione w sekcja
Initrd w Rozdział 11. W konfiguracji bootloadera ustawiamy opcj˛e ’root=’ na
/dev/vgsys/rootfs. Teraz instalujemy system, instalujemy bootloader i możemy
zrestartować maszyn˛e.
121
Rozdział 13. Pami˛eci masowe
Gdy zajdzie potrzeba "r˛ecznego" aktywowania woluminów (np. spod RescueCD),
to na poczatek
˛
musimy si˛e 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 pomoca˛ odpowiednich narz˛edzi: lvmdiskscan i lvscan. Jeśli
odnaleźliśmy żadane
˛
struktury, to możemy je aktywować:
# vgchange -a y
Narzedzia
˛
diagnostyczne
Skrócone informacje o każdym z rodzaju komponentów (PV/VG/LV) wyświetlimy
za pomoca˛ programów pvs, vgs, lvs. Wi˛ecej informacji uzyskamy za pomoca˛ programów: pvdisplay, vgdisplay, lvdisplay.
Do niektórych operacji z woluminami b˛edziemy musieli je odmontować i deaktywować. Aby deaktywować wszystkie woluminy użyjemy polecenia
# vgchange -a n
aby wszystkie aktywować wywołujemy:
# vgchange -a y
Zarzadzanie:
˛
powiekszanie
˛
woluminu
Teraz przedstawimy pot˛eg˛e LVM-a: pokażemy jak powi˛ekszyć 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ła˛ dost˛epna˛ wolna˛ przestrzeń na naszym VG (100GB) dla /dev/vgsys/homes:
# lvextend
-l 100%VG
/dev/vgsys/home
Teraz, kiedy wolumin jest powi˛ekszony, musimy rozszerzyć system plików, w naszych przykładach jest to XFS, zatem musimy podmontować wolumin, a nast˛epnie:
# 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˛e zapasowa.˛ Każdy system plików posiada własne narz˛edzia do zmiany rozmiaru systemu plików, szczegóły w ich dokumentacji.
Porady
Woluminy LVM powoduja˛ zwi˛ekszone ryzyko uszkodzenia danych, gdyż awaria
jednego dysku może spowodować utrat˛e wszystkich danych. Z tego powodu zaleca
si˛e tworzenie woluminów na macierzach RAID.
122
Rozdział 13. Pami˛eci masowe
Naprawa
Awarie dysków cz˛esto sa˛ bolesne, a nierzadko dosyć kosztowne. Istnieje wiele narz˛edzi do odzyskiwania danych, jednak nigdy nie gwarantuja˛ sukcesu. Dlatego warto
dokonywać regularnie kopie zapasowe danych.
Uszkodzenia fizyczne
Uszkodzenia fizyczne sprawdzamy programem badblocks z pakietu e2fsprogs, uruchamiamy go poleceniem:
# badblocks -s /dev/sda
Program wypisze list˛e uszkodzonych bloków
Naprawa systemu plików
Nazwy programów, podobnie jak programy do tworzenia systemów plików, sa˛ ujednolicone (poza XFS). Zaczynaja˛ si˛e od "fsck.":
fsck.ext2
fsck.reiserfs
fsck.vfat
fsck.jfs
do naprawy XFS-a użyjemy programu xfs_repair. Programy te różnia˛ si˛e nieco obsługa,˛ dlatego przed użyciem każdego z nich należy zapoznać si˛e z podr˛ecznikiem
systemowym (man/info), tak wyglada
˛ przykładowe wywołanie testu systemu plików XFS:
# xfs_repair /dev/sda2
Programy te nie pozwola˛ 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 moga˛ 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łaź
˛ /etc leży na głównym systemie plików i w
pliku tym nie nastapi
˛ a˛ żadne zmiany po takim przemontowaniu. Można to obejść
wcześniej modyfikujac
˛ 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˛e ich integralności, opisana˛ dokładnie w sekcja Zaawansowane operacje w Rozdział 9.
Przypisy
1. http://pl.wikipedia.org/wiki/Partycja_(informatyka)
2. http://andrzej.dopierala.name/2007-04-11_Migracja_serwera_na_RAID1
123
Rozdział 13. Pami˛eci masowe
3. http://andrzej.dopierala.name/2007-04-09_Instalacja_linuksa_na_raid1
4. http://wolvverine.jogger.pl/2007/02/20/degradedarray-fail-event-on-mddevice-repair/
5. http://www.eioba.com/a70652/konfiguracja_i_objasnienie_raid_oraz_lvm
6. http://lists.us.dell.com/pipermail/linux-poweredge/2003-July/008898.html
7. http://www.linuxsa.org.au/mailing-list/2003-07/1270.html
8. http://gentoo-wiki.com/HOWTO_Gentoo_Install_on_Software_RAID
124
Rozdział 14. Administracja
W tym rozdziale znajdziesz informacje dotyczace
˛ administracji systemem PLD
Ratowanie systemu
Wstep
˛
W tym rozdziale pokażemy co można zrobić w wypadku, jeśli nastapiła
˛
awaria systemu, uniemożliwiajaca
˛ normalne uruchomienie. Musimy uzyskać dost˛ep do urza˛
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˛e nie powiedzie, to użyć operacji chroota z
innego systemu np. dystrybucji typu live.
Uruchomienie na niskim poziomie pracy
Możemy uruchomić system z pomini˛eciem wielu czynności wykonywanych przez
skrypty startowe. Operacja polega na przekazaniu do kernela odpowiednich parametrów, które wymusza˛ użycie przez proces init specjalnie przygotowanego zestawu
rc-skryptów.
Interesuje nas poziom 1 lub single (tryb jednego użytkownika), tak też nazywaja˛ si˛e
parametry, które musimy przekazać do kernela. Parametry przekazujemy do jadra
˛
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 sekcja Wst˛ep w Rozdział 10. Poziomy pracy zostały szerzej omówione w sekcja Zmiana
poziomu pracy systemu
Uruchomienie RescueCD
Jako dystrybucj˛e Live najlepiej wybrać RescueCD lub PLD Live. Oba projekty sa˛ dobrze przygotowane do pracy z nasza˛ dystrybucja,˛ gdyż zawieraja˛ program rpm i
poldek.
Na poczatek
˛
musimy zadbać o to, aby system mógł si˛e uruchomić z płyty CD, uzyskamy to modyfikujac
˛ odpowiednia˛ opcj˛e BIOS-u komputera. Teraz uruchamiamy
komputer z RescueCD umieszczonym w nap˛edzie CD-ROM i czekamy aż system si˛e
uruchomi.
Aby dokonać napraw musi zostać załadowany moduł kontrolera masowego. Wi˛ekszość współczesnych dystrybucji typu live sama wykrywa sprz˛et, jeśli jednak to si˛e
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ł idedisk
# 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˛ecej szczegółów dotyczacych
˛
programowych macierzy znajdziemy w sekcja RAID
programowy w Rozdział 13.
125
Rozdział 14. Administracja
Teraz kiedy mamy załadowane odpowiednie moduły i dost˛ep do plików urzadze
˛
ń
(w katalogu /dev) możemy wykonać liczne operacje diagnostyczne i naprawcze (opisane dalej).
Naprawa systemu plików
Do naprawy systemu plików konieczny jest tylko dost˛ep do plików urzadze
˛
ń 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 sekcja Naprawa w
Rozdział 13.
Naprawa konfiguracji
W przypadku podniesienia systemu w trybie single mamy swobodny dost˛ep do plików konfiguracji, w przeciwnym wypadku musimy najpierw podmontować odpowiednia˛ partycj˛e aby uzyskać dost˛ep do plików. W tym celu tworzymy nowy katalog, a nast˛epnie montujemy do niego właściwe urzadzenie
˛
np.:
# mkdir -p /mnt/rootfs
# mount /dev/hda3 /mnt/rootfs
Jeżeli masz wi˛ecej partycji, na których znajduja˛ si˛e pliki systemowe (np. /boot), także
je podmontuj w odpowiednich katalogach np.:
# mount /dev/hda1 /mnt/rootfs/boot
mamy teraz nieograniczony dost˛ep do plików uszkodzonego systemu.
Operacja chroota
Jeśli uruchomiliśmy system z RescueCD i mamy podmontowane systemy plików
to wielu wypadkach wygodniejsze, a czasami nawet konieczne b˛edzie 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˛edzie
to konieczne przy problemach z jadrem,
˛
bootloaderem czy initrd. Aby wykonać ta˛
operacj˛e należy wykonać komend˛e:
# chroot /mnt/rootfs
To polecenie uruchomi powłok˛e /bin/sh w taki sposób, że wszystkie działania z jej
poziomu b˛eda˛ odbywały si˛e przeźroczyście na podmontowanym systemie plików.
Zanim jednak zabierzemy si˛e do pracy prosz˛e o zapoznanie si˛e z uwagami na końcu
rozdziału. Jeśli używamy powłoki korzystajacej
˛ z chroot-a, wystarczy że zakończymy jej prac˛e wydajac
˛ polecenie exit lub skrótem klawiszowym ctrl+d. Na koniec
odmontowujemy systemy plików jeśli takie sa˛ i restartujemy komputer.
Uwagi
•
Niektóre operacje w środowisku chroot wymagaja˛ (np. tworzenie initrd) podmontowania pseudo systemu plików /proc:
# mount /proc /mnt/rootfs/proc -o bind
126
Rozdział 14. Administracja
•
Użytkownicy udeva powinni pami˛etać, że wiele operacji w podmontowanym
środowisku wymagaja˛ istnienia kompletu plików urzadze
˛
ń:
# mount /dev /mnt/rootfs/dev -o bind
Udev dokładniej opisano w sekcja Udev - dynamiczna obsługa sprz˛etu w Rozdział 11.
•
Może si˛e zdarzyć, że poldek si˛e nie uruchamia w chroocie. Sposobem na obejście
tego jest uruchomienie go z flaga˛ -r , np:
# poldek -r /mnt/rootfs
•
Duża˛ zaleta˛ RescueCD jest to, że automatycznie "podnosi" interfejs sieciowy z obsługa˛ DHCP oraz serwer SSH. Pozwala to na zdalna˛ napraw˛e, wystarczy, że ktoś
umieści płyt˛e z dystrybucja˛ w nap˛edzie i uruchomi komputer. My zalogujemy si˛e
na odpowiedni adres za pośrednictwem SSH; login: root, hasło: pld.
Zarzadzanie
˛
podsystemami i usługami
W systemie dost˛epne sa˛ specjalne skrypty, napisane w j˛ezyku powłoki, zwane
"skryptami startowymi" lub "rc-skryptami". W PLD zastosowano skrypty startowe
typu System-V, dzi˛eki temu praca administratora jest znaczaco
˛ zautomatyzowana.
Za pomoca˛ rc-skryptów pomoca˛ 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ń majacych
˛
za zadanie dokonać konfiguracji systemu operacyjnego. Do tego typu zadań należa:˛ konfigurowanie sieci,
ładowanie modułów, prace porzadkowe
˛
i wiele innych. Te skrypty sa˛ integralna˛
cz˛eścia˛ systemu (pakiet rc-scripts) i zapewne sa˛ już u nas zainstalowane.
•
Skrypty zarzadzania
˛
usługami - zarzadzaj
˛
a˛ programami działajace
˛ w tle (demonami) np.: serwerem WWW, serwerem NFS. Skrypty te sa˛ instalowane automatycznie razem z pakietami usług. Wyjatek
˛
stanowia˛ usługi z wydzielonymi w tym celu
pakietami, rozpoznamy je po nazwie *-init i *-standalone. Wi˛ecej o nazewnictwie pakietów przedstawiono w sekcja Cechy pakietów w PLD w Rozdział 9.
Budowa systemu rc-skryptów
Katalog /etc/rc.d przechowuje konfiguracj˛e 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
- katalogi tak oznaczone zawieraja˛ łacza
˛
symboliczne do
skryptów zawartych w katalogu init.d. Wartość {$NR} jest liczba˛ wskazujac
˛ a˛
poziom pracy (run level), dla którego uruchamiana jest zawartość danego katalogu.
• /etc/rc.d/rc{$NR}.d
• /etc/rc.d/rc
- skrypt uruchamiajacy
˛ i zatrzymujacy
˛ usługi
- skrypt ustawiajacy
˛ opcje narodowe (j˛ezyk, waluta) pobiera
konfiguracj˛e z pliku /etc/sysconfig/i18n
• /etc/rc.d/rc.init
- uruchamiany na samym końcu wszystkich skryptów,
użytkownicy moga˛ dodawać tu swoje wpisy jeśli nie chca˛ używać init.d i
• /etc/rc.d/rc.local
rc{$NR}.d
• /etc/rc.d/rc.serial
- konfiguracja portów szeregowych
127
Rozdział 14. Administracja
• 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 sys-
temu lub restarcie.
- plik startowy przy pomocy którego sa˛ ustawiane głównie zmienne systemowe
• /etc/profile
Zarzadzanie podsystememi/usługami
Usługami/podsystemami zarzadzamy
˛
r˛ecznie, wykonujemy to za pomoca˛ uruchomienia odpowiedniego skryptu z katalogu /etc/rc.d/init.d/. Dodatkowo podajemy odpowiednim parametr określajacy
˛ akcj˛e, która˛ skrypt ma wykonać. Uruchomienie bez parametru podaje list˛e możliwych dla niego akcji, dla przykładu wyświetlimy list˛e dost˛epnych 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łaczenie
˛
obsługi sieci, oraz ponowne jej uruchomienie. W
ten sposób zmusza si˛e usług˛e lub podsystem do ponownego odczytania swojej konfiguracji. W tym wypadku nastapi
˛ 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˛epnych parametrów b˛edzie si˛e zmieniać w zależności od usługi, w poniższej tabeli przedstawiono znacznie tych najcz˛eściej spotykanych:
Tabela 14-1. Popularne akcje skryptów startowych
128
Parametr
Akcja
start
Uruchamia podsystem/usług˛e
stop
Zatrzymuje podsystem/usług˛e
reload, force-reload
Przeładowanie usługi poprzez wysłanie
sygnału (zwykle HUP) do demona,
cz˛esto oba podane parametry maja˛ 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.
Rozdział 14. Administracja
Parametr
Akcja
status
Wyświetla stan podsystemu/usługi,
dzi˛eki temu możemy łatwo określić czy
czy jest uruchomiony. W niektórych
wypadkach podawane sa˛ dodatkowe
informacje.
Niektóre usługi posiadaja˛ 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 zarzadza
˛
si˛e skryptami przy pomocy programu service. Aby wykonać za jego pomoca˛ 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 sa˛ potrzebne skrypty startowe. Dzi˛eki temu nowo zainstalowane oprogramowanie uruchamia si˛e automatycznie w trakcie startu systemu lub przy zmianie poziomu pracy.
Aby uruchomić dopiero co zainstalowany podsystem lub usług˛e musimy wykonać
to "r˛ecznie".
•
Zarzadzanie
˛
skryptami startowymi w trakcie instalacji/aktualizacji pakietów
opisano w sekcja Cechy pakietów w PLD w Rozdział 9
•
Jeśli zechcemy utworzyć własny rc-skrypt to z pomoca˛ przyjdzie nam szablon z
pliku /usr/share/doc/rc-scripts{$wersja}/template.init.gz
Konfiguracja rc-skryptów
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˛ekszość tych plików jest bezpośrednio załaczana
˛
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˛epuja˛ 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 sa˛ traktowane inaczej - maja˛ własna˛
składni˛e, przykładem tego rozwiazania
˛
sa˛ np. pliki /etc/sysconfig/static-*,
nimi jednak nie b˛edziemy si˛e 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˛e zetknać
˛ w wielu w innych plikach konfiguracji np.:
• SERVICE_RUN_NICE_LEVEL
- priorytet procesów usługi (liczba nice)
- mówi programowi rpm czy usługa ma być automatycznie restartowana po aktualizacji, wi˛ecej o tej opcji w sekcja Cechy pakietów w
PLD w Rozdział 9
• RPM_SKIP_AUTO_RESTART
Druga grupa to opcje wyst˛epujace
˛ tylko w pliku konfiguracji konkretnego rc-skryptu
- zwykle sa˛ zwiazane
˛
z argumentami pliku wykonywalnego usługi, dlatego należy
129
Rozdział 14. Administracja
uważnie czytać komentarze plików konfiguracji i w razie potrzeby podr˛eczniki systemowe usług.
Zależności
Pomi˛edzy niektórymi demonami i podsystemami istnieja˛ ścisłe powiazania,
˛
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łaczenia
˛
najpierw tej drugiej może niekiedy zaowocować
problemami, gdyż PLD nie dba o to za nas. Musimy samemu si˛e zatroszczyć o
wyłaczanie
˛
usług we właściwej kolejności.
Pewna˛ wskazówka˛ b˛eda˛ numery przy nazwach łaczy
˛
symbolicznych w katalogach
/etc/rc.d/rc{$nr}.d (przy literze S). Numery te określaja˛ kolejność ładowania
usług w trakcie startu systemu.
Usługi a poziomy pracy
W PLD zastosowano klasyczny, oparty na rc-skryptach typu System-V system poziomów pracy. Poziomami na których pracuja˛ usługi można zarzadzać
˛
r˛ecznie, jest
to jednak niezalecany sposób, lepszym pomysłem jest użycie programu chkconfig.
Aby wyświetlić list˛e usług uruchamianych przy w danych poziomach pracy wydajemy polecenie:
# chkconfig --list
crond
0:wył.
cups
0:wył.
sshd
0:wył.
gdm
0:wył.
network
0:wył.
sshd
0:nie
1:wył.
1:wył.
1:wył.
1:wył.
1:wył.
1:nie
2:wł.
2:wł.
2:wył.
2:wył.
2:wł.
2:nie
3:wł.
3:wł.
3:wł.
3:wył.
3:wł.
3:nie
4:wł.
4:wł.
4:wł.
4:wył.
4:wł.
4:tak
5:wł.
5:wł.
5:wł.
5:wł.
5:wł.
5:nie
6:wył.
6:wył.
6:wył.
6:wył.
6:wył.
6:nie
W PLD najcz˛eściej korzysta si˛e z trybów 3 i 5 rzadziej z: 1, 2 i 4, nigdy nie ustawiamy trybu 0 (restart) i 6 (wyłaczenie).
˛
Na powyższym przykładzie podsystem network jest uruchamiana dla poziomów: 2,3,4,5, zaś gdm tylko dla trybu 5. Aby wła˛
czyć/wyłaczyć
˛
uruchamianie jakiejś usługi wywołujemy program nast˛epujaco:
˛ chkconfig {$usługa} on/off. Wyłaczenie
˛
usługi sshd (domyślnie jest właczona):
˛
# chkconfig sshd off
Właczenie
˛
analogicznie:
# chkconfig sshd on
Poziomy dla których usługa ma być właczona/wył
˛
aczona
˛
jest wskazywane przez
specjalny wpis w rc-skrypcie, możemy go odczytać nast˛epujaco:
˛
$ grep chkconfig /etc/init.d/sshd
# chkconfig:
345 55 45
pierwszy ciag
˛ cyfr w wierszu to lista poziomów, których dotyczy operacja włacze˛
nia/wyłaczenia
˛
rc-skryptu. W razie potrzeby możemy wymusić operacj˛e 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˛ecznie lub zmienić tryb pracy.
Poziomy pracy zostały szerzej omówione w sekcja Zmiana poziomu pracy systemu.
130
Rozdział 14. Administracja
Zmiana poziomu pracy systemu
PLD jest systemem uniksowym, a wi˛ec obsługuje tzw. poziomy pracy (ang. run levels). Poziom pracy jest to specjalna konfiguracja systemu, która pozwala zaistnieć
tylko wytypowanym usługom badź
˛ podsystemom. Mamy sporo swobody w wyborze usług pracujacych
˛
badź
˛ wyłaczonych
˛
w danym poziomie pracy, opis jak nimi
zarzadzać
˛
znajdziemy w sekcja Zarzadzanie
˛
podsystemami i usługami.
Tabela 14-2. Dost˛epne poziomy pracy
Poziom
Opis
1
Konfiguracja z minimalna˛ ilościa˛
uruchamianych podsystemów. Nie ma
obsługi sieci i nie zezwala na logowanie
si˛e innym użytkownikom.
2
Rzadko używany tryb wielu
użytkowników. Uruchamiana jest
obsługa sieci i wi˛ekszości usług oprócz
NFS.
3
Popularny tryb prac z dost˛epem 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˛epem wielu
użytkowników uruchamiajacy
˛ system
X-Window (uruchamia demon GDM lub
KDM). Poziom używany na stacjach
roboczych z GUI. Wi˛ecej o sposobach
uruchamiania X-Window w sekcja
X-Server w Rozdział 18.
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łaczanie
˛
ma sens tylko przez
przekazanie do jadra
˛
parametru single
z poziomu bootloadera.
Sa˛ jeszcze dwa tryby: tryb 0 i 6. Pierwszy jest używany w celu zatrzymania wszystkich usług i podsystemów przed zamkni˛eciem systemu, drugi zaś przed ponownym
uruchomieniem systemu. Z pośród wymienionych poziomów pracy najcz˛eściej używa si˛e poziomu 3 lub 5.
Poziomem pracy zarzadza
˛
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˛e poziomu za pośrednictwem programu telinit (link symboliczny do programu init). Należy pami˛etać o
tym, że telinit nie dokonuje zmian w pliku /etc/inittab, tak wi˛ec przy ponownym
uruchomieniu systemu wybrany zostanie ustawiony w nim poziom pracy. Wi˛ecej
informacji o pliku /etc/inittab znajdziemy w sekcja Kluczowe pliki w Rozdział 12.
131
Rozdział 14. Administracja
Za domyślny poziom pracy odpowiada opcja "initdefault", może ona przyjać
˛ wartość od 1 do 5 np.:
id:3:initdefault:
Powyższy przykład właczy
˛
system na trzecim poziomie pracy, jest domyślna wartość
w PLD.
W wyniku zmiany poziomu zostana˛ zatrzymane wszystkie wszystkie podsystemy
wyłaczone
˛
z pracy na tym poziomie, zaś te które maja˛ działać zostana˛ 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łaczona
˛
zostanie usługa NFS.
Możemy również określić poziom uruchomienia przed startem systemu, dokonujemy tego za pomoca˛ parametrów przekazywanych za pośrednictwem bootloadera.
Wi˛ecej szczegółów na ten temat znajdziemy w sekcja Wst˛ep w Rozdział 10.
Konta użytkowników
W PLD zastosowano klasyczny dla systemów uniksowych system kont użytkowników, tak wi˛ec istnieje podział na dwa rodzaje kont: konta systemowe i konta użytkowników. Zarzadzanie
˛
kontami systemowymi nast˛epuje automatycznie w trakcie instalowania bad
˛ ż usuwania programów, które ich wymagaja.˛ Z tego powodu nie musimy
si˛e nimi zajmować, zajmiemy si˛e wi˛ec tylko kontami zwykłych użytkowników.
W PLD domyślnie instalowanym pakietem do zarzadzania
˛
kontami jest pakiet shadow. Możemy do jednak zastapić
˛
zbiorem pwdutils, który zawiera narz˛edzia o wi˛ekszych możliwościach. Dzi˛eki nim nie b˛edzie już konieczności "r˛ecznego" edytowania
plików systemowych, z tego wzgl˛edu opisane zostana˛ wyłaczne
˛
narz˛edzia pwdutils.
Dodanie
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:
132
•
PASS_MAX_DAYS - liczba dni do wygaśni˛ecia hasła -domyślnie: 99999
•
PASS_MIN_DAYS - minimalna liczba dni do mi˛edzy zmianami hasła -domyślnie:
0
Rozdział 14. Administracja
•
PASS_WARN_AGE - ilość dni przez które b˛edzie pokazywane ostrzeżenie o wygaśni˛eciu 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˛ecej informacji na ten temat uzyskamy w podr˛eczniku systemowym. Jeśli chcemy utworzyć
wi˛eksza ilość kont o zmodyfikowanych parametrach to wygodniejsze b˛edzie ustawienie interesujacych
˛
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.
Usuniecie
˛
Aby usunać
˛ konto użyjemy programu userdel:
# userdel jkowalski
Warto wspomnieć tu o opcjach "-r" i "-f", pierwsza usuwa katalog domowy, druga
wymusza usuni˛ecie również plików z katalogu domowego nawet jeśli do niego nie
należa.˛
Ze wzgl˛edów bezpieczeństwa można polecić blokowanie kont użytkowników w
miejsce ich usuwania, w ten sposób możemy si˛e ochronić przed sytuacja˛ powrotu
do użytku numeru UID usuni˛etego użytkownika.
Modyfikacja
Dane użytkownika modyfikujemy poleceniem usermod, dokładny opis tego programu znajdziemy w manualu.
Hasło
Pierwsze hasło dla użytkownika jest nadawane przez administratora, każda˛ nast˛epna˛ jego modyfikacj˛e 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
133
Rozdział 14. Administracja
Zarzadzanie
˛
kontami
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˛etać, że powyższe polecenia nie blokuja˛ dost˛epu opartego o inna˛ metod˛e autoryzacji niż hasło, np. o klucz SSH. W takim wypadku dodatkowo powinniśmy zmienić powłok˛e użytkownikowi na nie figurujac
˛ a˛ w /etc/shells np.:
# usermod -s /bin/false jkowalski
Grupy
W PLD zastosowano klasyczny dla systemów uniksowych system grup, tak wi˛ec 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 sa˛ wartości 1000 i wi˛ecej. Ponadto grupy systemowe cz˛esto przyjmuja˛ nazwy podobne jak nazwy usług np: ftp, named, itp.
Zarzadzanie
˛
grupami systemowymi nast˛epuje automatycznie w trakcie instalowania
badź
˛ usuwania pakietów, z tego powodu nie należy w nie ingerować. W naszej dystrybucji zarzadzanie
˛
grupami zazwyczaj sprowadza si˛e do dodawania/usuwania
własnych grup oraz zarzadzania
˛
uczestnictwem w istniejacych
˛
grupach.
W PLD domyślnie instalowanym pakietem do zarzadzania
˛
grupami jest pakiet shadow. Możemy do jednak zastapić
˛
zbiorem pwdutils, który zawiera narz˛edzia o wi˛ekszych możliwościach. Dzi˛eki nim nie b˛edzie już konieczności "r˛ecznego" edytowania
plików systemowych, z tego wzgl˛edu opisane zostana˛ wyłaczne
˛
narz˛edzia pwdutils.
Dodanie grupy
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".
Zapisanie do grup
Dzi˛eki 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˛e grup do których zapisany jest użytkownik
jkowalski: users, wheel, floppy, audio
134
Rozdział 14. Administracja
Zapisanie do grupy nast˛epuje po
{$konto_użytkownika} {$grupa} np.
wykonaniu
polecenia
groupmod
-A
groupmod -A jkowalski kadry
Aby wyrejestrować użytkownika z grupy musimy użyć parametru "-R" np.
groupmod -R jkowalski kadry
Usuniecie
˛
grupy
Używamy polecenia groupdel {$nazwa_grupy}:
# groupdel kadry
Uwagi
•
Po każdej modyfikacji uczestnictwa w grupach, użytkownik musi si˛e ponownie
zalogować, aby wprowadzone zmiany zacz˛eły obowiazywać.
˛
•
Zapisanie użytkownika do grupy służy podniesieniu jego uprawnień, list˛e przywilejów jakie uzyska zamieszczono w sekcja Zarzadzanie
˛
uprawnieniami.
Zarzadzanie
˛
uprawnieniami
W PLD zastosowano restrykcyjny poziom bezpieczeństwa, zwykły użytkownik domyślnie ma minimalne możliwe uprawnienia. Aby je zwi˛ekszyć administrator musi
zapisać użytkownika do odpowiednich grup, poniżej została przedstawiona skrócona ich lista i odpowiadajace
˛ im "przywileje" lub funkcje.
Tabela 14-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˛edzi takich jak:
tarcerouote, ping, arping,
clockdiff
135
Rozdział 14. Administracja
136
GID
Nazwa
Właściciel/Uprawnienia
6
disk
bezpośredni dost˛ep do
urzadze
˛
ń masowych np.
naprawy i tworzenie
systemów plików,
odtwarzanie i nagrywanie
CD
7
lp
dost˛ep do portu drukarki:
równoległego, USB
9
kmem
odczyt z urzadze
˛
ń
/dev/mem, /dev/kmem
10
wheel
możliwość korzystania z
programu su
17
proc
dost˛ep do pseudosystemu
plików /proc (np. wglad
˛
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˛ep do karty
dźwi˛ekowej
27
cdwrite
dost˛ep do narz˛edzi
nagrywania płyt CD
28
fsctrl
grupa której można
używać do nadawania
praw dla plików na
montowanych
urzadzeniach
˛
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˛epniania
zasobów NFS i SMB (zapis
do /etc/exports,
/etc/samba/smb.conf)
Rozdział 14. Administracja
GID
Nazwa
Właściciel/Uprawnienia
1000
users
domyślna grupa główna
dla zwykłych
użytkowników
Dużo wi˛ecej informacji o grupach i użytkownikach znajdziemy w dokumencie
uid_gid.db.txt1 trzymanym w CVS-ie. Zapisywanie do grup opisano w sekcja Grupy.
Bezpieczeństwo
Bezpieczeństwo systemów i danych to rozległy temat dlatego głównie skupimy si˛e
na aspektach dotyczacych
˛
PLD.
Dostepne
˛
narzedzia
˛
PLD jako dystrybucja "robiona przez administratorów dla administratorów" ma duże zasoby programów użytecznych w zakresie bezpieczeństwa, poczynajac
˛ od NetCata (nc), a na wiresharku i nessusie kończac.
˛
Dostep
˛ do konta root
Nasza polityka bezpieczeństwa wymaga, aby użytkownik należał do grupy wheel,
jeśli chce zwi˛ekszyć swoje uprawnienia za pomoca˛ su i sudo. W ten sposób atakujacy
˛
musi zgadnać
˛ 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˛e 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.
SUID
Domyślnie zwykli użytkownicy nie maja˛ prawa wykonania programów z ustawionym bitem SUID. Aby takie prawo uzyskać musza˛ być zapisani do odpowiedniej
grupy. Przykładowo program ping wymaga zapisania do grupy adm. Pogladowe
˛
zestawienie grup zamieściliśmy w sekcja Zarzadzanie
˛
uprawnieniami.
/proc
Domyślnie użytkownicy nie widza˛ żadnych procesów poza swoimi. Jest to nie tylko krok w stron˛e bezpieczeństwa, ale i w wygody, użytkownik nie głowi si˛e 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.
chroot i vserver
PLD oferuje system sys-chroot, wbudowany w rc-skrypty, służacy
˛ do wygodnego
zarzadzania
˛
środowiskami typu chroot. Usługi, które wspieraja˛ natywnie chrooty
(np. Bind) działaja˛ w izolowanym środowisku od razu po instalacji.
PLD wspiera także mechanizm Linux VServers2, zwany potocznie "chrootem na sterydach". Wymaga on zainstalowania odpowiedniej wersji kernela i odpowiedniego
zestawu narz˛edzi.
137
Rozdział 14. Administracja
Statyczny VIM
Najważniejszym narz˛edziem 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 pomoca˛ przychodzi nam statycznie zlinkowany VIM z
pakietu vim-static. Aby nie kolidował ze "zwykłym" vimem, plik wykonywalny jest
umieszczany w /bin/vim.
Pakiety
Zagadnienia zwiazane
˛
z bezpieczeństwem zostały omówione w sekcja Bezpieczeństwo w Rozdział 9.
Przypisy
1. http://cvs.pld-linux.org/cgi-bin/cvsweb/PLD-doc/uid_gid.db.txt?rev=HEAD
2. http://pld-linux.org/Vserver
138
Rozdział 15. Interfejsy sieciowe
W tym rozdziale znajdziesz informacje dotyczace
˛ konfiguracji sieci
Wstep
˛
Pierwsza˛ rzecza˛ jaka˛ musimy zrobić to ustalić wszystkie konieczne parametry poła˛
czenia sieciowego. W razie watpliwości
˛
należy skontaktować si˛e z naszym dostawca˛
usług internetowych. Ten rozdział opisuje konfiguracj˛e interfejsów sieciowych, testowanie połaczenia
˛
oraz inne prace diagnostyczne przeprowadzimy za pomoca˛ narz˛edzi opisanych w sekcja Narz˛edzia sieciowe w Rozdział 16.
Zarzadzanie
˛
całym podsystemem sieci (właczanie,
˛
wyłaczanie,
˛
restart) dokonujemy
za pomoca˛ rc-skryptu network, wi˛ecej informacji o zarzadzaniu
˛
rc-skryptami znajdziemy w sekcja Zarzadzanie
˛
podsystemami i usługami w Rozdział 14. Jest on integralna˛
cz˛eścia˛ PLD i startuje automatycznie w trakcie uruchomienia systemu. Aby skonfigurować sieć potrzebujemy jedynie ustawić podstawowe parametry sieci (opisane w
nast˛epnym rozdziale) oraz prawidłowo skonfigurować interfejs(y).
Konfiguracj˛e proxy opisano szczegółowo w sekcja Proxy w Rozdział 7.
Jeśli mamy zamiar modyfikować konfiguracj˛e sieci na zdalnej maszynie (np. przez
ssh), to zalecane jest użycie programu screen, aby mieć pewność, że cała procedura zakończy si˛e poprawnie i nie utracimy kontaktu z hostem. Jeśli mamy program
screen wystarczy że wydamy polecenie:
# screen service network restart
Podstawowa konfiguracja sieci
W wi˛ekszości wypadków konfiguracja sieci (oprócz ustawień interfejsu sieciowego)
b˛edzie si˛e 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 jadra:
˛
/etc/sysctl.conf, parametry te zostały omówione w
sekcja Parametry jadra
˛ w Rozdział 11.
Brama domyślna
Jeśli nie korzystamy z serwera DHCP ustawiamy statyczna˛ tras˛e routingu do domyślnej bramy, w tym celu edytujemy plik /etc/sysconfig/static-routes - wpis
może wygladać
˛
nast˛epujaco:
˛
eth0 default via 192.168.0.1
Odwzorowanie nazw - serwery DNS
Wskazanie serwerów DNS jest obowiazkow
˛
a˛ pozycja˛ konfiguracji resolvera nazw.
Operacja ta nast˛epuje automatycznie, o ile korzystamy z serwera DHCP, w przeciwnym wypadku musimy podać ich adresy samodzielnie. Serwery nazw ustawiamy
edytujac
˛ plik /etc/resolv.conf. Jeśli go nie ma, to możemy go utworzyć za pomoca˛
dowolnego edytora lub poleceniem touch. Podajemy przynajmniej jeden (zazwyczaj
nie wi˛ecej niż dwa) serwer nazw za pomoca˛ słowa kluczowego nameserver np.:
nameserver 192.168.0.12
139
Rozdział 15. Interfejsy sieciowe
Nazwa hosta
Możemy ustawić nazw˛e, za pomoca˛ której nasza maszyna b˛edzie si˛e
przedstawiała zalogowanym użytkownikom, i niektórym programom. W pliku
/etc/sysconfig/network ustawiamy:
HOSTNAME=pldmachine
Dla porzadku
˛
warto by była zgodna z adresem FQDN (o ile jest nadany). Niekiedy
podana˛ tu nazw˛e należy dopisać do pliku /etc/hosts opisanego w dalszej cz˛eści
rozdziału.
Odwzorowanie nazw - konfiguracja zaawansowana
Plik /etc/host.conf zawiera podstawowe opcje resolvera nazw, w wi˛ekszoś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˛edzie przeszukiwany plik /etc/hosts, w drugiej
kolejności b˛eda˛ odpytywane serwery DNS. Drugi wiersz zezwala na zwracanie wi˛ecej niż jednego adresu IP z pliku /etc/hosts (o ile przypisano wi˛eksza˛ liczb˛e adresów do nazwy).
W pliku /etc/hosts można dodawać odwzorowania hostów, które sa˛ uzupełnieniem dla usługi DNS, jedyny wymagany wpis to wskazanie adresu IP p˛etli zwrotnej
dla nazwy localhost:
127.0.0.1
localhost
Oprócz nielicznych wyjatków,
˛
inne wpisy nie sa˛ tu konieczne, Dla potrzeb niektórych programów trzeba dopisać do powyższego wiersza nazw˛e hosta ustawionego
za pomoca˛ opisanej powyżej opcji HOSTNAME:
127.0.0.1
localhost styx
przykład wpisu dla programu wymagajacego
˛
przypisania pełnej nazwy domenowej:
213.25.115.88 platinum.elsat.net.pl
Rozwiazanie
˛
to służy do szybszej identyfikacji komputerów w sieci lub prac diagnostycznych. Aby w ogóle z tego skorzystać musimy ustawić odpowiednia˛ kolejność
przeszukiwania w pliku /etc/host.conf
Jeśli cz˛esto odwołujemy si˛e do maszyn w naszej domenie to możemy ułatwić sobie
życie i ustawić domen˛e domyślna˛ w pliku /etc/resolv.conf. Od tej pory podanie samej nazwy hosta (bez cz˛eści domenowej), b˛edzie uważane za podanie pełnego
adresu. Przykładowe ustawienie domyślnej domeny (np. jakasdomena.cos) podano
poniżej:
domain jakasdomena.cos
140
Rozdział 15. Interfejsy sieciowe
Inne opcje
Edytujemy plik /etc/sysconfig/network, domyślne wartości opcji z tego pliku w
zupełności wystarczaja˛ 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˛e z siecia.˛
IPV4_NETWORKING=yes
Ustawiamy na "yes" jeżeli b˛edziemy 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 pomoca˛ których możemy ustawić tras˛e routingu do domyślnej bramy.
Opcje te zostały uznane za przestarzałe, obecnie należy korzystać z pliku
/etc/sysconfig/static-routes.
Ethernet
Urzadzenie
˛
Wi˛ekszość dost˛epnych na rynku kart sieciowych jest oparta na układach Realteka,
3Com badź
˛ Intela, dzi˛eki temu nie b˛edzie problemów z uruchomieniem urzadzenia.
˛
Karty sieciowe sa˛ automatycznie wykrywane przez jadro
˛
i nadawane sa˛ im nazwy
kolejno: eth0, eth1, eth2, itd. Jedyna˛ rzecza˛ jaka pozostaje to załadowanie odpowiedniego modułu dla danego urzadzenia,
˛
proces ten dokładnie opisano tutaj: sekcja Moduły jadra
˛ w Rozdział 11.
Pliki
konfiguracyjne
interfejsów
sa˛
przechowywane
w
katalogu
/etc/sysconfig/interfaces, nazwy tych plików b˛eda˛ 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 pomoca˛ dowolnego edytora
tekstu np.
# vim /etc/sysconfig/interfaces/ifcfg-eth0
Statyczna konfiguracja karty sieciowej
Zaczynamy
od
zmodyfikowania
/etc/sysconfig/interfaces/ifcfg-eth0,
lub
utworzenia
pliku
aby karta działała poprawnie
powinieneś mieć tam podobne ustawienia:
DEVICE="eth0"
Powyższa opcja ta określa nazw˛e urzadzenia.
˛
IPADDR="192.168.0.2/24"
141
Rozdział 15. Interfejsy sieciowe
Ta opcja określa adres karty sieciowej oraz mask˛e podsieci. Mask˛e 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˛e razem z podsystemem sieci.
BOOTPROTO="none"
Ta opcja pozwala dokonać wyboru, w jaki sposób karta sieciowa ma otrzymywać
konfiguracj˛e. Powyższy wpis sprawia, że system pobiera wszystkie ustawienia z posiadanych plików konfiguracyjnych.
Na końcu aktywujemy sieć.
Dynamiczna konfiguracja karty sieciowej (DHCP)
Na poczatek
˛
wybieramy jeden z programów klienckich: dhcpcd lub pump:
# poldek -i dhcpcd
Nasze
zadanie
ogranicza
si˛e
do
zmiany jednego parametru w
Odszukujemy
w
nim
BOOTPROTO i wskazujemy klienta DHCP, który ma być użyty:
/etc/sysconfig/interfaces/ifcfg-eth0.
pliku
opcj˛e
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˛eda˛ ignorowane, zaś zawartość
pliku /etc/resolv.conf b˛edzie nadpisywana informacjami przyznanymi przez serwer DHCP.
Aktywacja sieci
Ostatnia˛ czynnościa˛ jest uruchomienie lub restart podsystemu sieci:
# /etc/rc.d/init.d/network start
Ustawianie parametrów sieci....................[ ZROBIONE ]
Podnoszenie interfejsu eth0....................[ ZROBIONE ]
WiFi
Wstep
˛
W przypadku laptopa dobrym pomysłem jest użycie jakiejś aplikacji X-Window do
konfiguracji WiFi, z możliwościa˛ łatwego przełaczania
˛
pomi˛edzy sieciami oraz automatycznym wykrywanie podłaczenia
˛
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 rcskryptów powinna być wystarczajaca
˛ w wi˛ekszości wypadków.
W naszych przykładach przedstawimy konfiguracj˛e dla sieci bezprzewodowej działajacej
˛ w trybie trybie infrastruktury (managed), o określonym identyfikatorze SSID
142
Rozdział 15. Interfejsy sieciowe
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˛etem to należy używać właśnie WPA2.
Niektóre karty sieciowe WiFi maja˛ dedykowane sterowniki i ich konfiguracja nie
sprawia wi˛ekszych kłopotów, w pozostałych wypadkach posłużymy si˛e sterownikami dla systemu Microsoft Windows, uruchomionymi dzi˛eki aplikacji NdisWrapper. Jest to możliwe dzi˛eki temu, że wi˛ekszość sterowników jest napisana zgodnie ze
standardem NDIS. Po załadowaniu modułów, dalsza konfiguracja interfejsu w obu
przypadkach przebiega niemal identycznie.
Sterowniki dedykowane
Do kernela w wersji 2.6.24 trafiło wiele modułów obsługujacych
˛
sterowniki kart
WLAN, sterowniki rozwijane niezależnie sa˛ dost˛epne 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˛e do pliku
/etc/modules lub /etc/modprobe.conf, co zostało szczegółowo opisano w sekcja
Moduły jadra
˛ w Rozdział 11. Teraz możemy przejść do konfiguracji interfejsu.
Sterowniki z NdisWrapperem
Instalujemy pakiety kernel-net-ndiswrapper oraz ndiswrapper:
$ poldek -i ndiswrapper kernel-net-ndiswrapper
Potrzebne nam b˛eda˛ 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˛e alias w pliku /etc/modprobe.conf wykonujemy polecenie:
# ndiswrapper -m
Sieć WEP
Domyślnie rc-skrypty do obsługi WLAN używaja˛ pakietu wireless-tools:
$ poldek -i wireless-tools
143
Rozdział 15. Interfejsy sieciowe
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ładowa˛ 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 rozpoczynaja˛ si˛e si˛e od przedrostka WLAN_, pozostałe
parametry (w tym opcje protokołu IP) sa˛ takie same jak dla zwykłej karty typu Ethernet, której konfiguracj˛e szczegółowo omówiono w sekcja Ethernet.
Jako urzadzenie
˛
w opcji DEVICE wskazujemy nadana˛ przez kernel nazw˛e. Kartom
nadawane sa˛ zwykle nazwy wlan0, wlan1, itd. Wyjatkiem
˛
od tej reguły sa˛ 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 urzadzeniu
˛
możemy odczytać z komunikatów jadra.
˛
Poniżej przedstawione zostana˛ 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 poczatku
˛
dodać:
"s:"
Dodatkowo możemy ustawić szybkość interfejsu:
WLAN_BITRATE=auto
Ta˛ opcj˛e możemy ustawić również na sztywno, przez podanie obsługiwanej wartości
np.: 11MB, 24MB, 54MB.
Sieć WPA2-PSK
Opisane powyżej wireless-tools nie potrafia˛ używać szyfrowania WPA/WPA2,
dlatego konieczny nam b˛edzie 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
144
Rozdział 15. Interfejsy sieciowe
}
Hasło do naszej sieci w linijce psk może być jawne lub kodowane za pomoca˛ polecenia wpa_passphrase
Testujemy połaczenie
˛
z WiFi:
# ifconfig wlan0 up
# wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd
Opcja -dd włacza
˛
tryb debugowania i jeżeli nie otrzymamy jakichś bł˛edó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 nasza˛ sieć:
# /etc/init.d/network restart
i nasza sieć WiFi powinna już działać.
Aktywacja i diagnostyka
Na wszelki wypadek powinniśmy si˛e upewnić, że nasza maszyna jest w zasi˛egu 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
145
Rozdział 15. Interfejsy sieciowe
w wyświetlonych danych interfejsu odszukujemy wartość jakości połaczenia:
˛
Link
Quality Niezerowa wartość oznacza, że konfiguracja zakończyła si˛e 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łaczenie
˛
z WiFi.
Jeżeli mamy kart˛e obsługujac
˛ a˛ tryb "n" może nam si˛e przydać polecenie iwpriv z pakietu wireless-tools. Możemy przełaczyć
˛
wtedy kart˛e wifi w szybszy tryb, ponieważ
cz˛esto z automatu właczony
˛
jest wolniejszy np. "g". Uruchamiamy wi˛ec:
# iwpriv wlan0 network_type n
i powinniśmy wykorzystywać już nasza˛ kart˛e 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
Neostrada+ z modemem USB firmy Sagem
Wprowadzenie
Na samym poczatku
˛
musimy właczyć
˛
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 zawierajacych
˛
dodatkowe pakiety.
146
Rozdział 15. Interfejsy sieciowe
Instalacja
Przyst˛epujemy do instalacji. Należy przejść do do lokalizacji w której znajduja˛ si˛e
owe pakiety a nast˛epnie wydać nast˛epujace
˛ polecenie.
# rpm -Uvh kernel-usb-eagle* eagle-usb* ppp*
Kiedy już upewniliśmy si˛e, że mamy właczony
˛
port USB w biosie, musimy go zainicjować w systemie. Możemy to zrobić za pomoca˛ pliku /etc/modules.conf w
którym umieszczamy przykładowa˛ linijk˛e
alias usb-controller usb-uhci
Jeżeli posiadasz zainstalowany kernel z serii 2.6.x powinieneś umieścić nast˛epujacy
˛
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 jadra
˛
2.6.x). W przypadku, kiedy ten moduł po prostu
nie zadziała spróbuj załadować usb-ohci (ohci-hcd dla jadra
˛
2.6.x). Jeżeli podłaczyłeś
˛
modem do portu USB 2.0 powinieneś użyć modułu usb-ehci (ehci-hcd dla jadra
˛
2.6.x).
Możemy teraz podłaczyć
˛
modem do komputera. Nasze urzadzenie
˛
zostanie od razu wykryte i zainicjowane w systemie. Poprawna inicjalizacja powinna zakończyć
si˛e załadowaniem do pami˛eci modułu adiusbadsl. UWAGA! Jeżeli posiadasz kernel
2.6.x powinieneś załadować moduł eagle-usb.
Konfiguracja
Możemy zaczać
˛ od pliku /etc/resolv.conf. Opis znajdziecie w rozdziale
poświ˛econym konfiguracji sieci. Przyst˛epujemy teraz do konfiguracji pliku
/etc/eagle-usb/eagle-usb.conf. Należy w nim zmienić wartość opcji VPI na
taka˛ jaka˛ widzicie poniżej.
VPI=00000000
Skonfigurujemy teraz demona PPP. Utworzonemu w wyniku instalacji plikowi
/etc/ppp/options zmieniamy nazw˛e na options.old. Tworzymy nowy plik
options z zawartościa˛ taka˛ jaka została przedstawiona na poniższym listingu.
Najważniejsza˛ rzecza˛ jest podanie w nim nazwy użytkownika, która jest konieczna
do ustanowienia połaczenia.
˛
Możemy również dopisać opcj˛e debug, jeśli chcemy
być informowani o tym co si˛e 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łaczam
˛
debug.
debug
147
Rozdział 15. Interfejsy sieciowe
Musimy
jeszcze
wpisać
hasło.
Aby
tego
dokonać
wyedytujmy
plik
/etc/ppp/chap-secrets. UWAGA! Jeżeli si˛e 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˛e połaczenia
˛
z Neostrada.˛ Jesteśmy już gotowi aby
wszystko uruchomić.
Uruchomienie i post konfiguracja
Najbardziej wygodnym sposobem b˛edzie wykorzystanie mechanizmu rc-scripts do
uruchamiania usługi. Do tego potrzebny b˛edzie 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˛eki opcji ONBOOT=yes połaczenie
˛
b˛edzie nawiazywane
˛
wraz z uruchamianiem
systemu.
Możemy sprawdzić np. pingiem łaczność
˛
z jakimś zewn˛etrznym serwerem, np. ping
www.pld-linux.org. Jeżeli posiadasz jakaś
˛ sieć LAN, lub kilka komputerów w mieszkaniu, powinieneś przeczytać rozdział poświ˛econy maskaradzie.
Neostrada+ z modemem USB firmy Alcatel - Thompson
Przygotowanie do instalacji
Oto krótka lista tego, co b˛edzie nam potrzebne do uruchomienia modemu.
•
Port USB w komputerze
•
Jadro
˛
z serii 2.4 lub 2.6
•
Programy: modem_run oraz pppoa3
•
Pakiet: ppp-plugin-pppoatm
•
Firmware do modemu.
Firmware
dla
modemu
można
ściagn
˛ ać
˛
http://speedtouch.sourceforge.net/files/firmware.bin1.
148
z
stad:
˛
Rozdział 15. Interfejsy sieciowe
Jeżeli już upewniłeś si˛e, że masz wszystkie wymagane rzeczy, możemy przystapić
˛
do instalacji.
Konfiguracja
W pierwszej kolejności musimy zainicjować w systemie USB, oraz kilka modułów
do obsługi ppp. Możemy to zrobić wykonujac
˛ nast˛epujace
˛ 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˛e poprawnie (zostaniesz o tym poinformowany) powinieneś
wybrać jeden z nast˛epujacych:
˛
usb-uhci, usb-ohci lub dla USB 2.0 usb-ehci. Posiadacze jader
˛
z serii 2.6 maja˛ do wyboru nast˛epujacy
˛ zestaw modułów: uhci-hcd,
ohci-hcd lub ehci-hcd. Ta różnorodność jest uwarunkowana sprz˛etowo, w zależności od rodzaju chipsetu obsługujacego
˛
porty USB. Ważna˛ rol˛e tutaj odgrywa moduł
acm, gdyż bez niego nie b˛edzie 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 moga˛ użyć poniższej p˛etli która załaduje wszystkie
potrzebne moduły. Oczywiście należy zwrócić uwag˛e aby załadować odpowiedni
dla Twojego sprz˛etu moduł obsługujacy
˛ kontroler USB na płycie głównej.
# for i in usbcore uhci-hcd cdc-acm ppp_generic ppp_synctty;do modprobe $i;done
Nast˛epnym 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 wydajac
˛ nast˛epujace
˛ polecenie:
# poldek -U speedtouch
Podłacz
˛ modem do komputera. B˛edzie 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 sa˛ możliwości pobrania pliku firmware? Możemy pobrać go z adresu podanego na poczatku
˛
rozdziału. Jest to firmware przygotowany dla systemu MacOS. Linuksowy firmware
możemy pobrać ze strony Alcatela: www.speedtouchdsl.com/dvrreg_lx.htm2. Wymagana jest rejestracja. Możemy również go wziać
˛ z płytki dostarczonej przez TPSA.
Powinien on znajdować si˛e w archiwum Linux/ThomsonST330/pliki.tar.gz. Po
jego rozpakowaniu powinniśmy mieć coś takiego jak: drivers/speedmgmt.tar.gz.
Posiadajac
˛ 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 dotyczace
˛ budowania pakietów znajdziesz w tej dokumentacji w rozdziale: Tworzenie PLD. Po zainstalowaniu zbudowanego pakietu z firmwarem, możemy go załadować wydajac
˛ poniższe polecenie:
# modem_run -v 1 -m -f /ścieżka/do/firmware
149
Rozdział 15. Interfejsy sieciowe
Ładowanie firmware do modemu może troch˛e potrwać. Jeżeli chcesz widzieć co si˛e
dzieje wpisz nast˛epujace
˛ polecenie
# tail -f /var/log/messages
W trakcie ładowania pliku firmware, zaczna˛ migać diody urzadzenia.
˛
B˛edzie to
oznaczać synchronizacj˛e linii. Po kilkunastu sekundach modem si˛e ustabilizuje.
Diody powróca˛ 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˛edzie potrzebny do uruchomienia pppd. Nie
ładuje si˛e on automatycznie, dlatego należy go dopisać np. do /etc/modules.
W porzadku.
˛
Po zakończonej operacji ładowania firmware jesteśmy gotowi aby
skonfigurować nasze ppp do neostrady. Zanim to zrobimy b˛edziemy 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˛edzie si˛e różniła kilkoma szczegółami. Poniżej przedstawiam przykłady dla
obu serii jader.
˛
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
150
Rozdział 15. Interfejsy sieciowe
Ważna˛ rol˛e odgrywa tu parametr -e 1, gdyż bez niego nie uzyskamy połaczenia.
˛
Oczywiście musimy jeszcze odpowiednio skonfigurować pap-secrets oraz
chap-secrets
# cat /etc/ppp/chap-secrets
[email protected]
*
haslo
*
Uruchomienie i zakończenie
W celu nawiazania
˛
połaczenia,
˛
które uprzednio skonfigurowaliśmy, wydajemy takie
oto polecenie
pppd call neostrada
Jeżeli nie chcemy, badź
˛ z jakichś powodów nie możemy korzystać z programu hotplug nie musimy tego robić. Nie jest on tak naprawd˛e niezb˛edny. W takim przypadku za każdym razem b˛edziemy musieli ładować firmware modemu programem
modem_run.
xDSL z interfejsem Ethernet
Wprowadzenie
Coraz wi˛ecej dostawców usług internetowych oferuje dzierżaw˛e linii xDSL z portem
LAN typu Ethernet, takie usługi oferuja˛ np. Telekomunikacja Polska (Internet DSL)
oraz Dialog (DIALNET DSL).
Konfiguracja
W celu uruchomienia usługi, wystarczy jedynie skonfigurować interfejs sieciowy
Ethernet w naszym komputerze, zgodnie z informacjami uzyskanymi od dostawcy łacza
˛
(konfiguracja statyczna). Poniżej przedstawiono skrócony opis konfiguracji
tego typu interfejsu, szczegółowy opis znajdziemy tutaj: sekcja Ethernet
Podniesienie interfejsu eth0 możemy osiagn
˛ ać
˛ tworzac
˛ lub edytujac
˛ (jeśli istnieje)
plik /etc/sysconfig/interfaces/ifcfg-eth0 i wpisujac
˛ dane otrzymane od dostawcy:
DEVICE="eth0"
IPADDR="80.55.203.222/30"
ONBOOT="yes"
BOOTPROTO="none"
Istotna˛ kwestia˛ 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˛etać że 3 adresy IP sa˛ zarezerwowane do obsługi połaczenia
˛
(adres sieci,brama,broadcast)
Ostatnia˛ zmiana˛ potrzebna˛ 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"
151
Rozdział 15. Interfejsy sieciowe
Na koniec pozostaje nam uruchomienie podsystemu sieci:
# service network start
Uwagi
Jeśli przy łaczu
˛
Internet DSL 1 zdarzaja˛ si˛e przypadki zerwania połaczenia,
˛
należy
przywiazać
˛
wszystkie 5 adresów IP jako wirtualne interfejsy
IPADDR1="ip1/29"
IPADDR2="ip2/29"
IPADDR3="ip3/29"
IPADDR4="ip4/29"
IPADDR5="ip5/29"
Zaawansowane opcje interfejsów
HotPlug
HotPlug jest mechanizmem pozwalajacym
˛
na automatyczne konfigurwanie
systemu po podłaczeniu
˛
określonego urzadzenia.
˛
W przypadku urzadze
˛
ń
sieciowych PCMCIA i USB możliwe jest automatyczne aktywowanie interfejsu od
razu po podłaczeniu
˛
urzadzenia.
˛
Aby uruchomić ten mechanizm musimy najpierw zainstalować odpowiednie oprogramowanie:
# poldek -i hotplug*
Kolejnym krokiem b˛edzie umieszczenie odpowiedniego wpisu w pliku konfiguracji
interfejsu sieciowego. Dodajemy opcj˛e:
HOTPLUG=yes
Narzedzia
˛
Narz˛edzia do zarzadzania
˛
i diagnostyki interfejsów sieciowych opisano w sekcja Narz˛edzia sieciowe w Rozdział 16.
Inne opcje
Zaawansowane opcje sieciowe interfejsów nie sa˛ umieszczane w plikach
generowanych w trakcie instalacji systemu. Ich opis znajdziemy w pliku
/usr/share/doc/rc-scripts/ifcfg-description.gz.
Wzory konfiguracji
Wiele przykładowych konfiguracji interfejsów sieciowych odnajdziemy w katalogu
z dokumentacja˛ do rc-skryptów: /usr/share/doc/rc-scripts. Sa˛ to pliki tekstowe
zarchiwizowane programem Gzip.
152
Rozdział 15. Interfejsy sieciowe
Przypisy
1. http://speedtouch.sourceforge.net/files/fi rmware.bin
2. http://www.speedtouchdsl.com/dvrreg_lx.htm
153
Rozdział 15. Interfejsy sieciowe
154
Rozdział 16. Zastosowania sieciowe
W tym rozdziale znajdziesz informacje dotyczace
˛ konfiguracji sieci
Routing statyczny
Podstawowe trasy do podsieci sa˛ 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.
Wstepna
˛
konfiguracja
Konfiguracj˛e routingu obowiazkowo
˛
rozpoczynamy od właczenia
˛
przekazywania
pakietów mi˛edzy interfejsami sieciowymi, opcj˛e ta˛ możemy ustawić tymczasowo
wykonujac
˛ polecenie
# echo "1" > /proc/sys/net/ipv4/ip_forward
Możemy też w pliku /etc/sysctl.conf ustawić nast˛epujaca
˛ opcj˛e:
net.ipv4.ip_forward = 1
Nast˛epnie restartujemy podsystem sieci
# service network restart
Wi˛ecej o parametrach jadra
˛
znajdziemy w sekcja Parametry jadra
˛ w Rozdział 11
Tablica routingu
Aby wyświetlić tablic˛e routingu posłużymy si˛e poleceniem ip route:
# ip route
10.0.0.4/32 dev eth0 proto kernel scope link
10.0.0.0/24 dev eth1 proto kernel scope link
default via 10.0.0.100 dev eth0 onlink
src 10.0.0.4
src 10.0.0.1
Zarzadzanie
˛
trasami
Zarzadzenia
˛
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:
155
Rozdział 16. Zastosowania sieciowe
# 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 łaczenia
˛
trasowania statycznego z dynamicznym. Najcz˛eściej stykamy si˛e z protokołami: redirect, kernel,
boot, ra. Ich pełna˛ list˛e wraz z odpowiadajacym
˛
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".
Zakończenie
•
Dodane przez nas regułki możemy zapisac na stałe, w ten sposób zostana˛ 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
•
Jadro
˛
używa specjalnego cache do wydajniejszego trasowania pakietów, ma to
jednak pewna˛ wad˛e: zmiany w nim nie nast˛epuja˛ od razu po zmodyfikowaniu
tablicy routingu. Aby wymusić natychmiastowe wyczyszczenie cache należy
użyć poniższego polecenia:
# ip route flush cache
NAT
NAT (Network Address Translation) w Linuksie można zrobić na dwa sposoby:
•
wykorzystujac
˛ infrastruktur˛e netfilter jadra
˛
2.4 i 2.6.
•
korzystajac
˛ z narz˛edzi do kontrolowania sieci z pakietu iproute2.
Oryginalna dokumentacja Netfilter w j˛ezyku angielskim1
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 dodajac
˛ regułki do tabeli "nat". Żeby sprawdzić jakie sa˛ dost˛epne "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˛etrznym ($if_wan) zaś 192.168.1.0/16 to adresy na interfejsie sieci lokalnej ($if_lan).
156
Rozdział 16. Zastosowania sieciowe
DNAT
W PREROUTING sa˛ 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˛edzie wykonany NAT poprzez opcj˛e -i $inteface.
Opcja -o w PREROUTING nie jest dost˛epna.
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
SNAT i MASQUERADE
SNAT (Source NAT) zmienia to adres nadawcy np. z puli adresów prywatnych na
adres z puli publicznej, co jest wykorzytywane zwykle do "dzielenia łacza".
˛
# iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT --to 1.2.3.4
Jeśli podamy mask˛e podsieci, zostanie wykorzystana wi˛eksza 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˛e. (np.
w połaczeniach
˛
ze zmiennym IP publicznym)
Zakończenie.
Po ustawieniu DNAT na adres wewn˛etrzny zauważymy, że jest problem z dost˛epem
do ip 1.2.3.4 z wewnatrz
˛
sieci. Dzieje si˛e tak dlatego, że adres source zostaje bez
zmian, dlatego też pakiet nie wraca do bramy. Musimy wi˛ec zmusić, aby host wysyłał
odpowiedź do bramy. Możemy wykonać to w nast˛epujacy
˛ 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.
Podział łacza
˛
w zależności od serwisów
Wstep
˛
Administratorzy sieci osiedlowych cz˛esto natrafiaja˛ na problemy z programami p2p.
Potrafia˛ one skutecznie zapychać łacza.
˛
Jednym z możliwych rozwiaza
˛ ń jest zablokowanie takiego ruchu, a drugim opisanym w tym dokumencie, jest przekierowanie
go na jedno z łacz
˛ - odcia˛żajac
˛ tym samym drugie.
Jednym z możliwych problemów może być "zatykanie" modemu, wi˛ec należy si˛e dowiedzieć ile modem może obsłużyć aktywnych połacze
˛ ń i ograniczyć wyjście przez
iptables do tej wartości.
157
-j DNAT --to
Rozdział 16. Zastosowania sieciowe
Podstawy
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 wychodzacych
˛
połacze
˛ ń TCP. Wyeliminuje to problem, kiedy pakiety nie sa˛ w stanie wyjść w świat gdyż za dużo jest
aktywnych połacze
˛ ń i modem si˛e zawiesza.
Drugim sposobem jest ograniczenie pasma wychodzacego
˛
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
Przekierowanie p2p i połacze
˛
ń podobnych
Trzecim sposobem jest zakupienie drugiego, taniego łacza
˛
i puszczenie nim niechcianego ruchu np tak:
Cały niezidentyfikowany ruch przekierowywany jest na łacze
˛
dodatkowe, a zidentyfikowany na łacze
˛
drugie (szybsze).
Na poczatek
˛
ustawimy w tabeli mangle takie regułki, służac
˛ do oznaczania odpowiednich pakietów:
// przywrócenie wartości mark dla nawiazanych
˛
już połaczeń
˛
# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
// jeśli si˛
e 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
-j MARK --set-mark 0x1
# iptables -t mangle -A PREROUTING -p udp
-j MARK --set-mark 0x1
// porty 1:1024
# iptables -t mangle -A PREROUTING -p tcp
158
-s 192.168.0.0/16 \
-s 192.168.0.0/16 \
-s 192.168.0.0/16 \
Rozdział 16. Zastosowania sieciowe
--dport 1:1024 -j MARK --set-mark 0x1
// mysql
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 3306 -j MARK --set-mark 0x1
// gg
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 8074 -j MARK --set-mark 0x1
// cache
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 8080 -j MARK --set-mark 0x1
// gra americans army
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 1716:1718 -j MARK --set-mark 0x1
// irc
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 6665:6667 -j MARK --set-mark 0x1
// gra enemy terrytory
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 27960 -j MARK --set-mark 0x1
// gra MU Online
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 55201 -j MARK --set-mark 0x1
# iptables -t mangle -A PREROUTING -p tcp
-s
--dport 44405 -j MARK --set-mark 0x1
// wszystkie porty dobrze znanych serwerów
// www.wp.pl
# iptables -t mangle -A PREROUTING -p tcp
-s
-d 212.77.100.101 -j MARK --set-mark 0x1
// czat.wp.pl
# iptables -t mangle -A PREROUTING -p tcp
-s
-d 212.77.100.113 -j MARK --set-mark 0x1
// www.onet.pl
# iptables -t mangle -A PREROUTING -p tcp
-s
-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
-d 69.0.241.20 -j MARK --set-mark 0x1
// www.kurnik.pl
# iptables -t mangle -A PREROUTING -p tcp
-s
-d 217.17.45.25 -j MARK --set-mark 0x1
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
192.168.0.0/16 \
// 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˛epujace
˛ 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 łacze
˛
śmieci
// potrzebne jeśli domyślne jest inne łacze
˛
# 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 łacza
˛
PRIORYTET
Niestety łacze
˛
SMIECI jest maksymalnie zapchane, wi˛ec należy przygotować si˛e na
narzekania użytkowników którzy sa˛ przekierowani na to łacze.
˛
159
Rozdział 16. Zastosowania sieciowe
Przy takim rozwiazaniu
˛
należy mieć stała˛ kontrol˛e nad usługami, które maja˛ działać
na łaczu
˛
PRIORYTET i stale uaktualniać tabel˛e mangle o odpowiednie wpisy.
Nie udało si˛e niestety przekierować samego ruchu p2p gdyż podczas nawiazywania
˛
połaczenia
˛
nie wiemy jeszcze czy jest to pakiet należacy
˛ do p2p. Dzisiejsze programy
p2p potrafia˛ działać na portach poniżej 1024 np 80 (http) wi˛ec rozróżnienie ich po
portach nic nie da
Innym rozwiazaniem
˛
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˛e nie dostosuje to nie b˛edzie miał transferu.
To rozwiazanie
˛
ma jednak wad˛e: b˛edzie generowało dużo połacze
˛ ń nawiazywanych
˛
(pakiety SYN) na obu łaczach,
˛
gdyż iptables nie pozwoli na transfer dopiero po nawiazaniu
˛
połaczenia
˛
i rozpoznaniu połaczania
˛
jako należacego
˛
do p2p.
PPP over SSH - Tunel IPv4
Wstep
˛
Zaleta˛ tego rodzaju tunelu jest to, że jego działanie opiera si˛e na jednych z bardziej
popularnych protokołach PPP oraz SSH. Komunikacja odbywa si˛e na porcie 22. Dzi˛eki temu nie zachodzi potrzeba otwierania dodatkowych portów komunikacyjnych w
konfiguracji zapory ogniowej. Interfejsy tunelu uruchamiane sa˛ przez demona pppd.
Posłuża˛ nam one do zestawienia trasy mi˛edzy dwoma hostami lub sieciami w zależności od potrzeb. Do naszych celów b˛edzie potrzebny demon pppd b˛edacy
˛ implementacja˛ protokołu ppp oraz klient i serwer ssh implementujacy
˛ protokół ssh.
Konfiguracja
Zanim przystapimy
˛
do konfiguracji musimy zdecydować który komputer b˛edzie serwerem a który klientem. Klient b˛edzie inicjował połaczenie
˛
z serwerem uruchamiajac
˛
demona pppd.
Serwer
Zanim przystapimy
˛
do konfiguracji należy sprawdzić czy system wyposażony jest w
demona ppp oraz serwer ssh. Pakiety które to udost˛epniaja˛ to odpowiednio ppp oraz
openssh-server. Przydatnym może si˛e okazać pakiet openssh-clients zawierajacy
˛ 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˛e.
# 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:
160
Rozdział 16. Zastosowania sieciowe
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˛ecznie 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˛e warstwy ssh mamy już za soba.˛ Możemy teraz przystapić
˛
do
konfiguracji demona pppd. Demon nie b˛edzie wymagał autoryzacji, wi˛ec w pliku
/etc/ppp/options wyszukujemy opcj˛e auth i zmieniamy ja˛ na noauth. Musimy
teraz skonfigurować wierzchołek (tzw. peer) końca tunelu. Tworzymy wi˛ec plik
/etc/ppp/peers/tunel określajacy
˛ wszystkie niezb˛edne parametry połaczenia.
˛
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 sa˛ dwukropkiem adresy IP wierzchołków tunelu. Ten
po lewej stronie zostanie ustawiony na interfejsie serwera, ten po prawej klienta.
Przedstawiona˛ konfiguracj˛e należy potraktować jako przykład i dostosować ja˛ do
rzeczywistej. Oczywiście, jeżeli spełnia ona Twoje wymagania możesz ja˛ zastosować.
• noauth
- wyłaczamy
˛
autoryzacj˛e ppp
• lcp-echo-interval - wartość przy tej opcji określa interwał w sekundach z jakim
wysyłana b˛edzie do peera ramka żadania
˛
o echo LCP. Demon sprawdza w ten
sposób czy połaczenie
˛
nadal jest aktywne.
- wartość podana przy tej opcji określa ile żada
˛ ń o echo LCP
ma zostać wysłanych jeżeli peer nie dał odpowiedzi. Po tylu próbach demon
stwierdzi, że połaczenie
˛
zostało utracone.
• lcp-echo-failure
Klient
Konfiguracja po stronie klienta sprowadza si˛e do wygenerowania kluczy rsa oraz
odpowieniego ustawienia demona pppd. Klucze nam sa˛ potrzebne do autentykacji nie interaktywnej ssh. Inaczej nie uda nam si˛e nawiazać
˛
połaczenia
˛
z serwerem.
Do zestawienia połaczenia
˛
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˛epujemy do dalszej konfiguracji usługi po stronie klienta. Zaczniemy od wspomnianego na wst˛epie generowania kluczy.
161
Rozdział 16. Zastosowania sieciowe
$ 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 znajdujace
˛ si˛e w pakiecie openssh-clients polecenie
ssh-keygen. Użyliśmy go z nast˛epujacymi
˛
parametrami:
• -b - długość klucza w bitach. Wartość podana na listingu jest minimalna˛ długościa˛
klucza która jest akceptowana przez demona sshd.
• -f
- nazwa pliku (można podać ścieżk˛e do niego) zawierajacego
˛
klucz prywatny.
- typ klucza. Na listingu jest to RSA. RSA jest algorytmem służacym
˛
do generowania kluczy.
• -t
- hasło klucza. Na potrzeby tunelu hasło musi pozostać puste. Inaczej tunel nie
zadziała. Demon sshd b˛edzie czekał na potwierdzenie hasłem klucza co nigdy nie
nastapi,
˛ gdyż sesja ssh b˛edzie inicjowana poprzez demona pppd uniemożliwiajac
˛
nam w sposób interaktywny jej przej˛ecie.
• -P
Kolejnym krokiem jest skopiowanie zawartości pliku klucz.pub do pliku
~vpn/.ssh/authorized_keys na serwerze. Możemy tego dokonać w nast˛epujacy
˛
sposób.
$ scp ~/.ssh/klucz.pub [email protected]:~/.ssh/authorized_keys
Polecenie to zadziała tylko wtedy, kiedy na koncie vpn znajdujacym
˛
si˛e na serwerze zmienimy tymczasowo powłok˛e z /usr/sbin/pppd na standardowa˛ /bin/bash.
Na tym etapie kończy si˛e cała konfiguracja dotyczaca
˛ ssh po obu stronach. Możemy
wi˛ec przywrócić na serwerze w pliku /etc/passwd dla użytkownika vpn powłok˛e
na /usr/sbin/pppd. Przyst˛epujemy teraz do skonfigurowania demona pppd, który
b˛edzie wywoływał podczas ustanawiania połaczenia
˛
klienta ssh.
Podobnie jak po stronie serwera w pliku /etc/ppp/options musimy opcj˛e auth
zmienić na noauth. Kiedy już to zrobimy, przystapimy
˛
do konfiguracji wierzchołka (tzw. peera) dla klienta, który b˛edzie inicjował połaczenie.
˛
Nazwa pliku może być
taka sama jak na serwerze. Poniżej na listingu znajduje si˛e 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˛etamy, ż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łaczamy
˛
raportowanie szczegółów połaczenia
˛
ppp.
• noauth
- wyłaczamy
˛
autoryzacj˛e.
- dzi˛eki tej opcji możemy wykorzystać zewn˛etrzny skrypt jako ośrodek komunikacji zamiast konkretnego urzadzenia
˛
terminalowego. Wykorzystujemy tutaj
ssh.
• pty
- określony w milisekundach czas oczekiwanie na prawidłowy
pakiet PPP od peera. Jeżeli taki w tym czasie nadejdzie pppd rozpocznie negocjacj˛e wysyłajac
˛ pierwszy pakiet LCP.
• connect-delay
162
Rozdział 16. Zastosowania sieciowe
W
przypadku
problemów
z
połaczeniem
˛
możemy
zwi˛ekszyć
wartość
connect-delay nawet dziesi˛eciokrotnie jeżeli łacza
˛
pomi˛edzy którymi zestawiamy
tunel b˛eda˛ sporo obcia˛żone. Również po stronie klienta musimy nadać bit suid
plikowi /usr/sbin/pppd.
# chmod 4755 /usr/sbin/pppd
Na tym kończymy konfiguracj˛e tunelu. Możemy przejść do fazy jego uruchomienia.
Uruchomienie
Skonfigurowane połaczenie
˛
należy teraz zainicjować wykonujac
˛ polecenie:
$ /usr/sbin/pppd call tunel
Udana próba połaczenia
˛
połaczenia
˛
powinna zaowocować zapisami w logach takimi
jak poniżej na listingu.
Sep
Sep
Sep
Sep
Sep
2 12:35:34
2 12:35:34
2 12:35:34
2 12:35:37
2 12:35:37
address for
Sep 2 12:35:37
Sep 2 12:35:37
pldmachine
pldmachine
pldmachine
pldmachine
pldmachine
proxy ARP
pldmachine
pldmachine
pppd[6623]:
pppd[6623]:
pppd[6623]:
pppd[6623]:
pppd[6623]:
pppd 2.4.2b3 started by foo, uid 501
Using interface ppp0
Connect: ppp0 <--> /dev/pts/0
Deflate (15) compression enabled
Cannot determine ethernet \
pppd[6623]: local IP address 192.168.1.101
pppd[6623]: remote IP address 192.168.1.100
Wykonujac
˛ po obu stronach polecenie ifconfig zauważysz, że utworzone zostały interfejsy ppp służace
˛ do komunikacji. Wykorzystamy je do zestawienia prostej trasy
pomi˛edzy dwoma sieciami.
Zakładajac,
˛ że jedna sieć po stronie serwera ma adresacj˛e 192.168.0.0/24 a po stronie
klienta 192.168.2.0/24 routing b˛edzie wygladał
˛
w sposób nast˛epujacy.
˛
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˛eda˛ przechowywały w swoich tablicach routingu informacje o sieciach połaczonych
˛
dzi˛eki interfejsom tunelu.
VTun - Tunel IPv4
Wstep
˛
VTun umożliwia tworzenie tuneli poprzez sieci TCP/IP wraz z przydzielaniem pasma, kompresja,˛ szyfrowaniem danych w tunelach. Wspierane typy tuneli to: PPP,
IP, Ethernet i wi˛ekszość pozostałych protokołów szeregowych. VTun jest łatwy i elastyczny w konfiguracji. Może zostać wykorzystany do takich sieciowych zastosowań
jak VPN, Mobil IP, łacza
˛
o określonym paśmie oraz innych. Działa w warstwie user
space.
Opis procesu konfiguracji tunelu podzielony został na cz˛eść klient oraz serwer. Adresacja użyta na listingach może zostać użyta o ile nie b˛edzie si˛e ona kłóciła z bieżac
˛ a˛
163
Rozdział 16. Zastosowania sieciowe
konfiguracja˛ Twojej sieci. Zaczynamy od instalacji pakietu vtun na obu maszynach
b˛edacych
˛
końcami tunelu. Dodatkowo ładujemy moduł tun do pami˛eci.
# modprobe tun
Na tym kończy si˛e wst˛epne przygotowanie systemu do konfiguracji tunelu.
Konfiguracja
Serwer
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˛e 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˛ebnić kilka sekcji: options, default, nazwa, up oraz down. Sekcje up
oraz down sa˛ podsekcjami sekcji nazwa.
options - opcje dotyczace
˛ 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.
- zmienne, które zawieraja˛ ścieżki do wykorzystywanych przez VTun programów.
• ppp ifconfig route firewall ip
default - domyślne ustawienia transmisji danych.
default {
compress yes;
speed 0;
}
• compress
• speed
164
- kompresja pakietów w trakcie transmisji.
- pr˛edkość transmisji. Wartość 0 oznacza brak ograniczeń.
Rozdział 16. Zastosowania sieciowe
vpn1 - wymieniona wcześniej nazwa tunelu. W tym miejscu znajduje si˛e właściwa
konfiguracja parametrów połaczenia.
˛
vpn1 {
passwd tajne.haslo;
type tun;
proto tcp;
compress zlib:9;
encrypt yes;
keepalive yes;
up {
...
};
down {
...
};
}
• passwd
• type
- hasło, które posłuży do szyfrowania połaczenia.
˛
- typ tunelu (w przykładzie tunel IP)
• proto
- protokół warstwy transmisyjnej tunelu.
• compress
• encrypt
- metoda oraz stopień kompresji.
- właczenie
˛
szyfrowania transmisji.
• keepalive
- utrzymywanie połaczenia
˛
- co ma si˛e wykonać po nawiazaniu
˛
połaczenia
˛
oraz jego zakończeniu.
Szerzej o tym poniżej.
• up, down
up - akcje wykonywane po nawiazaniu
˛
połaczenia.
˛
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 nawiazaniu
˛
połaczenia
˛
należy uruchomić odpowiedni interfejs. Jego nazwa zostanie rozwiazana
˛
dzi˛eki zmiennej %%. Określamy oczywiście typ interfejsu oraz jego
MTU. Kolejna˛ czynnościa˛ 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 druga˛ stron˛e.
down - czynności nast˛epujace
˛ po wyłaczeniu
˛
tunelu.
down {
ifconfig "%% down";
ifconfig "%% delete";
route "delete -host 192.168.2.11"
};
Po zakończeniu działania połaczenia
˛
powinniśmy wyłaczyć
˛
oraz skasować interfejs
który nam do niego służył. Usuwamy również zb˛edna˛ tras˛e do drugiego końca tunelu z tablicy routingu. Zwróć uwag˛e na konstrukcj˛e tych dwóch podsekcji. polecenie
"argument". Polecenie zostało określone w sekcji options, natomiast argumentami
sa˛ odpowiednie parametry danego polecenia.
Na tym kończy si˛e konfiguracja serwera. Możemy przystapić
˛
teraz do konfiguracji
klienta.
165
Rozdział 16. Zastosowania sieciowe
Klient
Konfiguracj˛e 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óra˛ 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˛e na vtund.conf.orig, aby zachować przykłady konfiguracji. Krok po kroku omówi˛e 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˛eda˛ przez syslog.
• timeout
- timeout VTuna.
• ppp, ifconfig, route, firewall, ip
-
ścieżki
do
programów
wykorzystywanych w czasie konfiguracji.
Przyst˛epujemy teraz do konfiguracji połaczenia
˛
o nazwie vpn1. Jak pami˛etasz nazwa
została już wst˛epnie 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 {
...
};
}
166
Rozdział 16. Zastosowania sieciowe
• passwd
• type
- hasło które posłuży nam do szyfrowania połaczenia.
˛
- typ tunelu, w przykładzie jest to tunel IP.
• proto
- protokół warstwy transmisyjnej tunelu.
- typ oraz stopień kompresji. Na listingu ustawiona została kompresja
przy użyciu zlib dziewiatego
˛
stopnia.
• compress
• encrypt
- właczamy
˛
szyfrowanie połaczenia.
˛
• keepalive
- utrzymywanie połaczenia
˛
w przypadku braku ruchu na interfejsie
tunelu.
- statystyki pracy tunelu, które VTun b˛edzie zapisywał do sysloga co pi˛eć
minut.
• stat
- opcja ustawiona tak jak na listingu sprawi, że w przypadku zerwania
połaczenia
˛
z serwerem klient b˛edzie nawiazywał
˛
połaczenie.
˛
• persist
• up, down - programy wykonywane po nawiazaniu
˛
połaczenia
˛
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˛epnym krokiem jest wyznaczenie trasy do
naszego serwera, czyli drugiego końca tunelu. Jak doskonale widać, ta cz˛eść konfiguracji jest analogiczna do serwera. Należy tylko zwrócić uwag˛e na adresacj˛e. Adres
nast˛epujacy
˛ 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˛e wykonaja˛ po zamkni˛eciu połaczenia.
˛
Kolejno, wyłaczamy
˛
oraz
kasujemy interfejs tunelu. Nast˛epnie kasujemy z tablicy routingu tras˛e do serwera.
Na tym kończy si˛e etap konfiguracji VTuna. Możemy przejść do jego uruchomienia.
Uruchomienie
Uruchomienie VTuna sprowadza si˛e do wykonania jednego polecenia na serwerze
oraz kliencie.
# /etc/rc.d/init.d/vtund start
Po jego wykonaniu na komputerach b˛edacych
˛
końcami tunelu za kilka chwil powinny si˛e utworzyć interfejsy tun0. Numeracja zaczyna si˛e od "0". Nazwy kolejnych
interfejsów b˛eda˛ kończyć si˛e nast˛epna˛ w kolejności liczba˛ naturalna.˛
Narzedzia
˛
sieciowe
W PLD głównym pakietem narz˛edzi sieciowych jest iproute2, oferuje on wi˛eksze
możliwości oraz bardziej ujednolicony interfejs obsługi w stosunku do narz˛edzi z
pakietu net-tools (ifconfig, route, arp, ifup, ifdown). Sercem pakietu iproute2 jest
167
Rozdział 16. Zastosowania sieciowe
program ip zawierajacy
˛ funkcjonalność kilku starszych narz˛edzi w jednym. Z tego
wzgl˛edu b˛edzie naszym podstawowym narz˛edziem sieciowym.
Jako dodatek do niniejszego rozdziału, pragn˛e polecić lektur˛e opisu najprostszych
narz˛edzi sieciowych (ping, traceroute), który można znaleźć w sekcja Podstawowe
narz˛edzia kontroli sieci TCP/IP w Rozdział 7 oraz opis zarzadzania
˛
routingiem statycznym zamieszczony w sekcja Routing statyczny.
Konfiguracja interfejsow
Aby wyświetlić konfiguracj˛e 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˛e dost˛epnych interfejsów, każdy z nich oznaczony jest numerem porzadkowym.
˛
W wi˛ekszości wypadków najbardziej interesujace
˛ sa˛ dla nas
interfejsy fizyczne (eth0 na powyższym przykładzie). Interfejsy lo oraz sit0, sa˛ "wirtualnymi" interfejsami, pierwszy z nich to interfejs p˛etli zwrotnej (loopback), drugi
służy do tunelowania protokołu IPv6 wewnatrz
˛ IPv4.
Tryb pracy urzadzenia
˛
jest wyświetlany wewnatrz
˛ trójkatnych
˛
nawiasów, oto kilka
oznaczeń:
•
UP - urzadzenie
˛
działa
•
LOOPBACK - interfejs p˛etli zwrotnej
•
BROADCAST - urzadzenie
˛
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łaczenia
˛
z siecia˛
Poniżej omawianego wiersza wyświetlone zostały informacje o adresach zwiazanych
˛
z urzadzeniem
˛
(adresy IP i maski podsieci sa˛ przedstawione w notacji CIDR):
168
•
-link/ether - adres fizyczny karty sieciowej (MAC)
•
-inet - dane protokołu IPv4
•
-inet6 - dane protokołu IPv6
Rozdział 16. Zastosowania sieciowe
Zarzadzanie
˛
interfejsami
Do najcz˛estszych operacji tego typu należy właczanie
˛
i wyłaczanie
˛
interfejsów, w
tym celu użyjemy nast˛epujacego
˛
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
Adresy sprzetowe
˛
(MAC)
Do odczytania adresu sprz˛etowego 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]
Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8]
Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8]
4.250ms
0.976ms
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˛etowy za każdym razem był ustawiany dla interfejsu,
powinniśmy dokonać odpowiedniego wpisu w pliku konfiguracyjnym
interfejsu. W przypadku urzadzenia
˛
eth0 musimy zmodyfikować plik
/etc/sysconfig/interfaces/ifcfg-eth0, i dodać zmienna˛ MACADDR np.:
MACADDR="01:01:01:01:01:01"
ARP
Aby wyświetlić tablic˛e ARP należy użyć polecenia ip neighbour:
# ip neighbour
10.0.0.140
10.0.0.2
10.0.0.100
ether
ether
ether
00:E0:7D:A1:8B:E2
4C:00:10:54:19:50
00:04:ED:07:25:F8
C
C
C
eth0
eth0
eth0
Tablica ARP wypełnia si˛e w miar˛e komunikowania si˛e z innymi hostami, aby wymusić zbadanie działania protokołu ARP wystarczy zainicjować komunikacj˛e. Możemy
użyć do tego programu ping.
169
Rozdział 16. Zastosowania sieciowe
Możemy stworzyć własna,˛ statyczna˛ tablic˛e ARP, posłuży nam do tego plik
/etc/sysconfig/static-arp w którym umieszczamy wpisy zawierajace
˛ 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.
Serwery nazw (DNS)
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 obowiazkowy
˛
- 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˛e, 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ługujace
˛ ja˛ serwery
nazw) możemy posłużyć si˛e programem whois:
$ whois pld-linux.org
Wydajność sieci
Aby sprawdzić przepustowość sieci pomi˛edzy dwoma hostami możemy użyć programu iperf. Jest to program typu klient-serwer sprawdzajacy
˛ na kilka sposobów
170
Rozdział 16. Zastosowania sieciowe
przepustowość połaczenia.
˛
Rozpoczynamy od instalacji programu na obu interesujacych
˛
nas maszynach, nast˛epnie 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.
Monitorowanie sieci
Nawiazane
˛
połaczenia
˛
i otwarte porty protokołu TCP/IP możemy kontrolować za
pomoca˛ programu netstat np.:
# netstat -tua
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address
Foreign Address
tcp
0
0 *:blackjack
*:*
tcp
0
0 *:ircs
*:*
tcp
0
0 *:netbios-ssn
*:*
tcp
0
0 *:ipp
*:*
tcp
0
0 *:microsoft-ds
*:*
tcp
0
0 gargamel:ircs
192.168.1.3:rapidmq-reg
tcp
0
0 gargamel:imaps
192.168.1.6:ttc-etap-ds
tcp
0
0 gargamel:td-postman
host-92.gadugadu.p:8074
tcp
0
0 gargamel:cma
chrome.pl:5223
tcp
0
0 *:1024
*:*
udp
0
0 gargamel:netbios-ns
*:*
udp
0
0 *:netbios-ns
*:*
udp
0
0 *:ipp
*:*
State
LISTEN
LISTEN
LISTEN
LISTEN
LISTEN
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
LISTEN
Na powyższym przykładzie zostały wyświetlone dane dotyczace
˛ protokołu TCP
(opcja: -t) oraz UDP (-u). Dodatkowo zostały wyświetlone gniazda nasłuchujace
˛
(-a). Warte uwagi sa˛ jeszcze dwa parametry: -n i -p, pierwszy wyświetla porty i
adresy w postaci liczb, drugi zaś wyświetla nazwy programów korzystajacych
˛
z danych gniazd.
Do analizowania wielkości ruchu sieciowego na interfejsie polecam program nload,
jest to proste narz˛edzie rysujace
˛ wykresy pomoca˛ znaków ASCII. Podstawowe statystyki możemy przegladać
˛
dzi˛eki programowi ip np. ip -s link, dokładniejsze dane
otrzymamy dzi˛eki 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˛e rejestrujac
˛ a˛ połaczenia
˛
TCP z hosta
10.0.0.3 na port 80 danej maszyny. Aby te regułki działały z wpisami odrzucajacymi
˛
pakiety (DROP/REJECT) musza˛ być analizowane wcześniej, w przeciwnym wypadku pakiet nigdy nie dotrze do regułki rejestrujacej.
˛
W przypadku dopasowania pakietu do regułki nast˛epuje odnotowanie tego zdarzenia, wpisy te można odczytywać
za pomoca˛ 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˛eki programowi tcpdump, jest to rozbudowany sniffer i program do analizy pakietów.
171
Rozdział 16. Zastosowania sieciowe
Zakończenie
W przypadku modyfikacji plików konfiguracji w wi˛ekszości wypadków trzeba dokonać restartu podsystemu sieci.
W tym rozdziale opisano niewielki fragment możliwości dost˛epnych narz˛edzi 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.pdf3
•
Dokumentacja iproute2 http://www.policyrouting.org/iproute2-toc.html4
•
http://linux-ip.net/5
Przypisy
1. http://www.netfilter.org/documentation/HOWTO/pl/packet-filteringHOWTO.html
2. http://www.jtz.org.pl/
3. http://echelon.pl/pubs/NET4.pdf
4. http://www.policyrouting.org/iproute2-toc.html
5. http://linux-ip.net/
172
Rozdział 17. Usługi dostepne
˛
w PLD
W rozdziale tym przedstawimy opis instalacji i konfiguracji ważniejszych usług dost˛epnych w PLD
Usługi - wstep
˛
Usługi w PLD sa˛ przygotowane do natychmiastowego uruchomienia, wystarczy wyedytować pliki konfiguracji i można korzystać z programu. Zanim jednak zaczniemy
pracować z usługami warto zapoznać si˛e z opisem zarzadzania
˛
usługami zawartym
w sekcja Zarzadzanie
˛
podsystemami i usługami w Rozdział 14.
Z wieloma demonami dostarczane sa˛ przykładowe pliki konfiguracji, którymi możemy si˛e sugerować przy konfigurowaniu aplikacji, przykłady te sa˛ umieszczane w
dokumentacji programu, w katalogu /usr/share/doc. Ponadto, zanim uruchomimy usług˛e, powinniśmy przyjrzeć si˛e 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
odpowiadaja˛ argumentom programu demona, sa˛ też opcje określajace
˛ np. priorytet
programu i inne właściwości.
W trakcie uruchamiania usługi zdarzaja˛ si˛e trudne do odnalezienia problemy. Pierwsza˛ rzecza˛ jaka˛ powinniśmy w takim wypadku zrobić to przeczesać logi programu,
w takich wypadkach niejednokrotnie pomaga właczenie
˛
wi˛ekszej "gadatliwości" demona. Wygodnym sposobem szukania bł˛edów jest uruchomienie demona na pierwszym planie (bez przejścia w tło), w takich wypadkach cz˛esto demony wysyłaja˛ komunikaty na standardowe wyjście. W trudniejszych przypadkach b˛edziemy 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łaczonym
˛
forkowaniem procesów. Opisane tu czynności sa˛ specyficzne dla każdego z demonów, zatem musimy skorzystać z dokumentacji
właściwej aplikacji.
Aktualizacja niektórych demonów wia˛że si˛e 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˛e z dokumentacja˛ produktu, aby uchronić si˛e przed unieruchomieniem usługi na dobre.
W PLD usługi, podobnie jak inne oprogramowanie, kompilowane jest z najcz˛eściej
używanymi opcjami, jeśli program nie obsługuje jakichś funkcji, to powinniśmy
sprawdzić czy uzyskamy je samodzielnie budujac
˛ pakiet, wi˛ecej na ten temat
odnajdziemy w sekcja Budowanie pakietów w Rozdział 9.
ALSA - Dźwiek
˛ w Linuksie
Obecnie w Linuksie do obsługi dźwi˛eku stosuje si˛e system ALSA (ang: Advanced Linux Sound Architecture), b˛edacy
˛ nast˛epca˛ systemu OSS. ALSA to zestaw modułów
jadra
˛
oraz kilku narz˛edzi pomocniczych, moduły możemy ładować za pomoca˛ systemu UDEV lub statycznie, obydwie metody b˛eda˛ opisane w tym rozdziale. Druga
z metod jest bardziej złożona, dlatego poczatkuj
˛
acych
˛
zach˛ecamy do korzystania z
metody opartej o system UDEV.
Instalacja
Zaczynamy od pakietu zawierajacego
˛
moduły kernela:
$ poldek -i kernel-sound-alsa
Potrzebujemy jeszcze kilku narz˛edzi, w tym programu do zarzadzania
˛
mikserem:
173
Rozdział 17. Usługi dost˛epne w PLD
$ poldek -i alsa-utils
W ogóle nie należy instalować pakietu kernel-sound-oss, ALSA potrafi emulować OSS.
Konfiguracja z użyciem systemu UDEV
Niezaawansowanym zalecamy użycie udeva zamiast statycznej konfiguracji (opisanej dalej), ze wzgl˛edu na łatwiejsza˛ konfiguracj˛e. Zakładam, że w systemie mamy
działajacy
˛ 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˛e 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łaczyć
˛
wyciszenie, co
zostało opisane w dalszej cz˛eści rozdziału. Wi˛ecej o systemie UDEV w sekcja Udev dynamiczna obsługa sprz˛etu w Rozdział 11.
Konfiguracja statyczna
Konfiguracja statyczna jest alternatywna˛ metoda˛ w stosunku do powyższej. Zaczynamy od zainstalowania pakietu alsa-utils-init:
$ poldek -i alsa-utils-init
Teraz
musimy
postarać
si˛e
o
dodanie
koniecznych
aliasów
do
pliku
/etc/modprobe.conf, które posłuża˛ do załadowania koniecznych modułów, przez
zainstalowany przed chwila˛ rc-skrypt. Możemy wykonać to na dwa sposoby:
•
samodzielnie - za pomoca˛ dowolnego edytora tekstu; wpisy możemy skopiować
z opisu Driver & Docs, urzadzenia
˛
odnalezionego na liście obsługiwanego
sprz˛etu1
•
za pomoca˛ programu alsaconf, który wykryje urzadzenie
˛
i dokona koniecznych
wpisów
Pierwsza z metod jest tak oczywista, że zajmiemy si˛e tylko druga˛ z wymienionych.
Na poczatek
˛
musimy si˛e upewnić, że mamy pakiet pciutils i uruchamiamy program:
# /usr/sbin/alsaconf
Po ukazaniu si˛e ekranu z napisem "Searching sound cards" czekamy ok. 10 sekund i
wciskamy ctrl-c (konfigurator szybko znajduje nasza˛ właściwa˛ kart˛e - a ponieważ
szuka również kart starego typu oraz różnych egzotycznych, co zajmuje mu bardzo
dużo czasu dlatego przerywamy wyszukiwanie). Nast˛epne okno pokazuje nam list˛e
znalezionych kart muzycznych (zwykle jedna).
˛ Zatwierdzamy wyświetlona˛ kart˛e i
na pytanie:
Do you want to modify /etc/modprobe.conf?
Odpowiadamy twierdzaco,
˛
spowoduje to dopisanie odpowiednich aliasów modułów do pliku konfigurujacego.
˛
Kiedy progam zakończy działanie, uruchamiamy rcskrypt:
174
Rozdział 17. Usługi dost˛epne w PLD
# /etc/init.d/alsasound start
Teraz pozostaje nam ustawić głośność w mikserze oraz wyłaczyć
˛
wyciszenie.
Ustawienie miksera i testowanie
Domyślnie wszystkie "suwaki" miksera sa˛ ustawione na zero i dodatkowo właczo˛
ne jest wyciszenie (mute), aby to zmienić musimy uruchomić program alsamixer lub
amixer:
# /usr/bin/alsamixer
Wyłaczmy
˛
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łuchujac
˛ 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˛etać należy, że do niektórych programów
należy doczytać odpowiednie wtyczki, które umożliwia˛ prace z ALSA-a.˛ Wtyczki te
łatwo rozpoznać po dopisce "alsa" w nazwie pakietu.
Na koniec pozostaje nam nadać uprawnienia wybranym użytkownikom, do obsługi
dźwi˛eku. Musimy zapisać użytkowników do grupy audio np.:
# usermod -A jkowalski audio
Wi˛ecej o uprawnieniach w sekcja Grupy w Rozdział 14.
Zaawansowana obsługa miksera
W wielu przypadkach okazuje si˛e, że posiadamy kart˛e muzyczna,˛ która nie potrafi
miksować dźwi˛eku sprz˛etowo - co powoduje m.in., że jednocześnie może z karty korzystać jeden program lub proces. Zdarza si˛e także, że niektóre programy na sztywno
próbuja˛ połaczyć
˛
si˛e np. z OSS w celu obsługi dźwi˛eku (np. Skype). W takim przypadku możemy skorzystać z wtyczki ALSA-y o nazwie dmix. Wbrew nazwie nie musimy niczego dogrywać - wszystko odbywa si˛e 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˛ecej szczegółów odsyłamy na strony projektu ALSA (www.alsa-project.org2):
# definiujemy urzadzenie
˛
wirtualne nazwane przez nas demixer
# do którego później b˛
edziemy si˛
e odwoływać:
pcm.demixer
{
type dmix
# typ urzadzenia,
˛
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"
175
Rozdział 17. Usługi dost˛epne w PLD
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 beda˛ używane
# przez demixer (czyli tutaj dmix)
bindings {
0 0 # from 0 => to 0
1 1 # from 1 => to 1
}
} # koniec konfiguracji wirtualnego urzadzenia
˛
demixer
# nast˛
epnie ustawiamy przekierowanie z wybranych
# urzadzeń
˛
do wirtualnego urzadzenia
˛
demixer:
# możemy przekierowywać z nast˛
epujacych
˛
urzadzeń
˛
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 korzystajace
˛
z urzadzenia
˛
default ALSA-y przekierowujemy do miksera
czyli wszystko przechodzi przez dmix
pcm.!default {
type plug
slave.pcm "demixer"
}
# OSS device /dev/mixer0 use hardware
# Urzadzenie
˛
OSS /dev/mixer0 bez zmian
# obsługuje pierwsza˛ (0) kart˛
e audio bezpośrednio
ctl.mixer0 {
type hw
card 0
}
Jeśli chcemy jedynie przekierować dźwi˛ek z programów obsługujacych
˛
tylko OSS
do ALSA, bez programowego miksowania (czyli bez używania dmix) wystarczy że
wpiszemy tylko:
176
Rozdział 17. Usługi dost˛epne w PLD
# 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 wyglada
˛ tak:
pcm.dsp0 {
type plug
slave.pcm "dmix"
}
Dla chipsetów nvidia nforce(2) (intel8x0) oraz C-media konfiguracja powinna wygla˛
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˛epnie możemy przetestować nasz "dmix" czyli urzadzenie
˛
demixer
alsaplayer -o alsa -d demixer test.mp3
ponieważ wcześniej zdefiniowaliśmy urzadzenie
˛
"default", ALSA kieruje wszystko
na urzadzenie
˛
"demixer" - co jest równoważne:
alsaplayer -o alsa test.mp3
To tylko podstawowe przykłady działania jakie daje nam ALSA, a
dzi˛eki
olbrzymim
możliwościom
definiowania
dowolnych
urzadze
˛
ń
wirtualnych i przekierowywania dźwi˛eku, możemy uzyskać ciekawe i
różnorodne efekty. Wi˛ecej o konfiguracji urzadze
˛
ń PCM znajdziemy tutaj:
www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html3.
177
Rozdział 17. Usługi dost˛epne w PLD
Przy pracy z pluginem "dmix" nie należy zapomnieć o wyłaczeniu
˛
demonów ARTs i
ESD gdyż w przeciwnym razie moga˛ pojawić si˛e opóźnienie w odtwarzaniu dźwi˛eków i zakłócenia w niektórych programach, gdyż wiele z nich próbuje najpierw korzystać z w/w demonów dźwi˛eku.
Uwagi
Wi˛ecej o dźwi˛eku pod Linuksem na stronie linux-muzyka.ixion.pl/4.
Apache - Serwer stron internetowych
Wstep
˛
Każdy, nawet poczatkuj
˛
acy
˛ użytkownik sieci internet zetknał
˛ si˛e 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 (RFC26165). Jak sama nazwa wskazuje Apache (a patche server) składa
si˛e z wielu modułów. Można to zauważyć już na pierwszy rzut oka. W tym rozdziale
zostanie opisana autoryzacja, obsługa j˛ezyka PHP, CGI, virtualhosts oraz ogólna jego
konfiguracja. Przedstawiona poniżej oparta została o apache z serii 2.x.
Instalacja
Apache w PLD jest podzielony na wiele małych pakietów, możemy dzi˛eki instalować
tylko potrzebne moduły. Jeśli nie możemy si˛e połapać w tym gaszczu
˛
to możemy
posłużyć si˛e metapakietem apache, który za pośrednictwem mechanizmu zależności
zainstaluje najważniejsze pakiety.
# poldek -i apache
Kiedy b˛edziemy mieli zainstalowane wymagane pakiety, b˛edziemy mogli wst˛epnie
przetestować serwer, zatem uruchomimy usług˛e:
# service httpd start
W katalogu /home/services/httpd umieszczamy jakaś
˛ testowa˛ stron˛e WWW która˛
nazwiemy np. test.html i sprawdzamy za pomoca˛ przegladarki
˛
czy si˛e prawidłowo
wyświetla:
$ elinks localhost/test.html
Jeśli wszystko jest w porzadku,
˛
to możemy przejść do właściwej konfiguracji serwera.
Pliki konfiguracji
Tytułem wst˛epu pragn˛e powiedzieć, że niniejszy dokument nie może być traktowany jako dokumentacja do Apache. Ma on na celu ułatwienie użytkownikowi zapoznania si˛e z usługa˛ oraz kilkoma jej możliwościami. Po bardziej szczegółowe informacje odsyłam do stron podr˛ecznika systemowego (man) oraz dokumentacji on-line6
- w tym katalogu przechowywane sa˛ 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.
• /etc/httpd/httpd.conf
178
Rozdział 17. Usługi dost˛epne w PLD
• /home/services/httpd - pliki domyślnej strony Apache, katalog z komunikatami
o bł˛edach oraz katalog przeznaczony dla skryptów cgi.
- moduły potrzebne do działania Apache oraz poszczególnych
jego składników. Warto o tym pami˛etać w przypadku problemów z uruchomieniem usługi.
• /usr/lib/apache
- jest to katalog należacy
˛ stricte do Apache, jednak warto o nim
wspomnieć ze wzgl˛edu na to iż przechowywane sa˛ w nim jego binaria. Aby si˛e
dowiedzieć które należa˛ do niego wydaj nast˛epujace
˛ polecenie
• /usr/sbin
# rpm -ql apache |grep ^\/usr\/sbin
Aby nasz serwer obsługiwał dodatkowe funkcje musimy zainstalować odpowiednie
moduły, wraz z modułami dostarczane, sa˛ 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żyteczna˛ cecha˛ Apache jest możliwość tworzenia lokalnych plików konfiguracji, dzi˛eki którym możemy modyfikować niektóre opcje konfiguracji. Pliki te
maja˛ nazw˛e .htaccess i może ich używać każdy, kto ma tylko dost˛ep do katalogu
ze strona˛ WWW. Wygoda w ich używaniu polega na tym, że nie ma potrzeby restartowania demona po każdorazowej ich modyfikacji.
Podstawowa konfiguracja
Głównym plikiem konfiguracyjnym jest /etc/httpd/apache.conf. Spośród wielu
opcji w tym pliku zajmiemy si˛e dwiema podstawowymi:
ServerAdmin [email protected]
Powinieneś tutaj wpisać kontaktowy adres e-mail do siebie jako administratora tego
serwera.
Poniżej znajduje si˛e opcja ServerName. Powinna ona wygladać
˛
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 opiekujacym
˛
si˛e Twoja˛ domena.˛ Jeżeli nie posiadasz zarejestrowanej domeny, powinieneś wpisać tutaj adres IP.
Teraz
zajmiemy
si˛e
opcja˛
DocumentRoot,
która˛
odnajdziemy
w
/etc/httpd/conf.d/10_common.conf Określa ona domyślny katalog w którym
b˛edzie przechowywana strona internetowa. Wpisujac
˛ nazw˛e lub adres IP określony
przez ServerName właśnie z tego katalogu zostana˛ pobrane i wczytane przez
przegladark˛
˛
e pliki strony.
DocumentRoot "/home/services/httpd/html"
Domyślnie wszystkie żadania
˛
sa˛ tutaj skierowane. Ta lokalizacja nie jest obligatoryjna, wi˛ec nie musisz si˛e jej trzymać. Może zostać zmieniona przy użyciu dowiaza
˛ ń
symbolicznych lub aliasów wskazujacych
˛
w inne miejsca.
Zgodnie z obecnym standardem tworzenia stron internetowych, domyślnym
plikiem który jest automatycznie wczytywany po wpisaniu w przegladarce
˛
adresu jest index, który w zależności od konstrukcji strony może mieć różne
rozszerzenia. A wi˛ec skad
˛ 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
179
Rozdział 17. Usługi dost˛epne w PLD
Poprzez dyrektyw˛e DirectoryIndex określa si˛e czego i w jakiej kolejności ma szukać
przegladarka.
˛
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.
Strony użytkowników
Swobodne publikowanie stron internetowych przez użytkowników jest
możliwe dzi˛eki pakietowi apache-mod_userdir. Opcja UserDir w pliku
16_mod_userdir.conf definiuje nazw˛e katalogu przechowujacego
˛
strony
użytkowników wewnatrz
˛ 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. Swoja˛ stron˛e internetowa˛ umieszcza w
katalogu /home/users/jan/public_html, zaś dost˛ep do nie uzyskuje za pomoca˛
adresu http://example.net/~jan.
Aby strona si˛e wyświetliła należy ustawić odpowiednie prawa dost˛epu - tak by Apache (domyślnie z prawami użytkownika http) miał prawo do odczytu. Katalog domowy jan powinien mieć ustawione prawa 711. Katalog przechowujacy
˛ jego stron˛e
czyli public_html powinien mieć 755. Każdy katalog zawierajacy
˛ elementy strony
powinien mieć również uprawnienia 755. Pliki strony natomiast 644.
Virtual Hosts
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˛edów dużo bardziej popularna jest druga z metod i właśnie ja˛ b˛edziemy
opisywać.
Obsługa hostów wirtualnych jest zwiazana
˛
z odpowiednia˛ konfiguracja˛ domen w
systemie DNS - wymaga wpisów typu IN A wskazujacych
˛
na nasz serwer WWW.
Konfiguracj˛e serwera DNS opisano w sekcja BIND - Serwer Nazw i b˛edzie docelowo
konieczna, jednak dla potrzeb testowych wystarcza˛ nam wpisy w pliku /etc/hosts,
który z kolei został opisany w sekcja Podstawowa konfiguracja sieci w Rozdział 15.
W naszym przykładzie dodamy obsług˛e domeny moja-strona.com, na poczatku
˛
należy stworzyć dodatkowy plik konfiguracji (dla porzadku)
˛
o nazwie np. vhosts.conf,
który umieścimy w katalogu /etc/httpd/httpd.conf/. Zakładamy, że wszystkie
vhosty b˛edziemy trzymać w katalogu /home/services/httpd/vhosts/. Plik b˛edzie
si˛e zaczynał od nast˛epujacego
˛
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 maja˛ być używane do
obsługi hostów witrualnych, w tym wypadku wszystkie, co jest najcz˛eściej spoty180
Rozdział 17. Usługi dost˛epne w PLD
kana˛ konfiguracja.˛ Sekcja Directory zezwala na dost˛ep 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˛e 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>
Wewnatrz
˛ sekcji VirtualHost znajduje si˛e opcja ServerName, mówiaca
˛ o nazwie domenowej vhosta, a poniżej wskazanie sa˛ ścieżki do katalogu z plikami strony. Po
uruchomieniu mechanizmu hostów wirtualnych całkowicie bezużyteczne stana˛ si˛e
globalne opcje ServerName czy DocumentRoot, od tej pory konfiguracja w całości
opiera si˛e 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łonia˛ 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˛ecej na jego temat odnajdziemy w dokumentacji serwera7.
Ograniczanie dostepu
˛
na podstawie adresu
Czasami chcemy ograniczyć możliwość przegladania
˛
stron dla konkretnych adresów
lub klas adresowych. W tym celu użyjemy modułu apache-mod_authz_host, dzi˛eki niemu b˛edziemy mogli chronić przed dost˛epem do wskazanych katalogów. Jeżeli
potrzebujesz chronić jedynie jeden lub kilka plików, stwórz w obr˛ebie strony katalog
o dowolnej nazwie i umieść je w nim. Oczywiście musisz pami˛etać o przekonstruowaniu linków na stronie.
Do konfiguracji Apache dodajemy podobna˛ konstrukcj˛e konstrukcj˛e:
<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˛ep do katalogu intra maja˛ wszystkie komputery z określonej w przykładzie sieci oraz jeden komputer (badź
˛ urzadzenie
˛
udost˛epniajace
˛ NAT) o wymienionym adresie. Wszystkie połaczenia
˛
nie pasujace
˛ do tych kryteriów traktowane sa˛ jako deny,
zgodnie z porzadkiem
˛
wyznaczonym przez dyrektyw˛e Order.
Ograniczenie dostepu
˛
za pomoca˛ loginu i hasła
Apache udost˛epnia mechanizm autoryzacji, który używany jest do wyodr˛ebnienia
z serwisu pewnej cz˛eś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ł uwierzytelniajacych:
˛
pliki tekstowe, konta
systemowe, bazy LDAP i inne. My b˛edziemy zajmować si˛e autoryzacja˛ za pomoca˛
plików tekstowych, ze wzgl˛edu na popularność i prostot˛e tego rozwiazania.
˛
Istnieja˛ 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 przegladarki
˛
WWW, tak wi˛ec pozostaje nam używanie metody Basic.
181
Rozdział 17. Usługi dost˛epne w PLD
Zaczynamy od instalacji metapakietu apache-mod_auth oraz pakietu
htpasswd-apache. Teraz dodajemy do któregoś z plików konfiguracji regułk˛e
chroniac
˛ a˛ 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˛edów bezpieczeństwa. Opcja
Require określa jacy użytkownicy sa˛ 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˛ep do niego miał
wyłacznie
˛
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˛edzie 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˛edziemy 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˛edu na możliwość
wyświetlenia zawartości tych plików. Możemy si˛e zabezpieczyć przed tym
instalujac
˛ pakiet apache-mod_authz_host, dzi˛eki któremu m.in. nie zostana˛
wysłane do przegladarki
˛
pliki .ht*
Obsługa skryptów PHP
Ze wzgl˛edu na duża˛ funkcjonalność j˛ezyk PHP stał si˛e już w zasadzie pewnym
standardem w tworzeniu interaktywnych stron internetowych. Współczesne serwisy
wykorzystuja˛ m. in. bazy danych, dlatego zostanie również opisane jak taka˛ obsług˛e zapewnić. Przegladaj
˛ ac
˛ list˛e dost˛epnych 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 niesamowita˛ wolność w wyborze tego co jest Ci dokładnie potrzebne.
Zaczynamy od instalacji pakietu apache-mod_php, w ten sposób otrzymamy podstawowa˛ wersj˛e PHP, dodatkowe pakiety instalujemy wtedy gdy potrzebna nam jest jakaś funkcjonalność. Najlepsza˛ metoda˛ sprawdzenia czy PHP działa jest użycie funkcji phpinfo(), aby z niej skorzystać stwórz plik z zawartościa˛ taka˛ jak poniżej:
<? phpinfo(); ?>
nast˛epnie należy go umieść w katalogu /home/services/httpd/html,
pod nazwa˛ np. info.php. Teraz wpisujemy w przegladarce
˛
adres
http://example.net/info.php, powinieneś uzyskać informacje m. in. na temat
wersji PHP, konfiguracji serwera oraz obsługiwanych modułów.
182
Rozdział 17. Usługi dost˛epne w PLD
Obsługa różnego typu systemów bazodanowych rozbita jest na osobne pakiety zawierajace
˛ definicje funkcji PHP które ja˛ zapewniaja.˛ Poniżej w tabeli znajduje si˛e lista
która to odzwierciedla.
Tabela 17-1. Obsługa baz danych
Nazwa pakietu
Baza Danych
php-dba
Moduł dla PHP dodajacy
˛ obsług˛e dla
baz danych opartych na plikach (DBA).
php-dbase
Moduł PHP ze wsparciem dla DBase.
php-filepro
Moduł PHP dodajacy
˛ możliwość
dost˛epu (tylko do odczytu) do baz
danych filePro.
php-interbase
Moduł PHP umożliwiajacy
˛ dost˛ep do
baz danych InterBase i Firebird.
php-mssql
Moduł PHP dodajacy
˛ obsług˛e baz
danych MS SQL poprzez bibliotek˛e
FreeTDS.
php-mysql
Moduł PHP umożliwiajacy
˛ dost˛ep do
bazy danych MySQL.
php-odbc
Moduł PHP ze wsparciem dla ODBC.
php-pgsql
Moduł PHP umożliwiajacy
˛ dost˛ep do
bazy danych PostgreSQL.
php-sybase
Moduł PHP dodajacy
˛ obsług˛e baz
danych Sybase oraz MS SQL poprzez
bibliotek˛e SYBDB.
php-sybase-ct
Moduł PHP dodajacy
˛ obsług˛e baz
danych Sybase oraz MS SQL poprzez
CT-lib.
Aby skorzystać z którego kolwiek modułu wystarczy go po prostu zainstalować.
Przeprowadzajac
˛ instalacj˛e w trybie wsadowym pami˛etaj 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łaczaj
˛
ac
˛ obsług˛e oracla z serwera CVS, instalujac
˛ uprzednio
Oracla którego posiadasz.
Warto jeszcze wspomnieć o narz˛edziach wspomagajacych
˛
zarzadzanie
˛
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.
CGI
Aby nasz Apache obsługiwał programy CGI wystarczy zainstalować pakiet
apache-mod_cgi. Po przeładowaniu demona programy CGI obsługiwane b˛eda
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˛epujacej
˛ treści:
#!/bin/sh
echo "Content-type: text/html\n\n"
echo "Hello, World."
183
Rozdział 17. Usługi dost˛epne w PLD
a nast˛epnie umieścimy go w odpowiednim katalogu z nazwa˛ np. cgi.sh,
nadamy mu prawo wykonywalności i w przegladarce
˛
podamy adres
http://example.net/cgi-bin/cgi.sh. Możemy do tego użyć również testowych
skryptów przychodzacych
˛
z pakietem apache-cgi_test.
Jeśli zechcemy wskazać wi˛ecej 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 skonfigurowana˛ opcj˛e ScriptAlias np.:
ScriptAlias /cgi-bin/ "/home/users/jan/cgi-bin/"
Ze wzgl˛edów bezpieczeństwa autorzy Apache zalecaja˛ by taki katalog leżał poza
ścieżka˛ wskazana˛ w opcji DocumentRoot.
Security Socket Layer (SSL)
Mechanizm ten wykorzystuje si˛e w serwisach wymagajacych
˛
od użytkownika autoryzacji. Najbardziej typowymi aplikacjami tego typu sa˛ różnego rodzaju klienci
poczty. SSL zapewnia szyfrowany kanał dla informacji przepływajacej
˛ od użytkownika do serwera. Dzi˛eki temu niemożliwe jest podsłuchanie hasła. UWAGA! Jeden
certyfikat SSL może zostać przypisany tylko dla jednego adresu IP.
Konfiguracj˛e 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˛e 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˛epujacy sposób.
# openssl req -new -x509 -days 365 -key /etc/httpd/ssl/apache.key \
-out /etc/httpd/ssl/apache.crt
Proces tworzenia certyfikatu b˛edzie 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 prywatna˛ własnościa˛ i nie
należy do żadnej firmy, w polu Organization Name możesz wpisać imi˛e 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łaczenie
˛
b˛edzie szyfrowane oraz ścieżki do plików z kluczem oraz certyfikatem.
Musimy odnaleźć poczatek
˛
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
184
Rozdział 17. Usługi dost˛epne w PLD
Jak widać jej poczatek
˛
nie różni si˛e niczym od konfiguracji VirtualHosts. Zwróć
uwag˛e na opcj˛e ServerName. Powinna ona kończyć si˛e ciagiem
˛
: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 nawiazać
˛
połaczenie
˛
szyfrowane z webmailem należy w przegla˛
darce wpisać adres https://example.net/webmail8. Aby ustanowić połaczenie
˛
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˛e 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ścia˛ taka˛ 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˛e do vhosta z opcja˛
DocumentRoot ustawiona˛ na /home/services/httpd/html/mail.
Indeksowana zawartość katalogu
Jest to bardzo przydatna funkcja, pozwalajaca
˛ w łatwy sposób udost˛epnić zawartość
katalogu na serwerze. Aby umożliwić indeksowanie musimy zainstalować moduł
apache-mod_autoindex.
poldek -i apache-mod_autoindex
Aby uruchomić indeksy musimy właczyć
˛
opcj˛e Indexes. W domyślnej konfiguracji,
Apache ma właczone
˛
indeksy dla wszystkich podkatalogów wewnatrz
˛
/home/services/httpd/html (w pliku 10_common.conf). Jeśli ustawiliśmy inaczej
to musimy właczać
˛
ta˛ opcj˛e 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˛e plik określony przez DirectoryIndex.
185
Rozdział 17. Usługi dost˛epne w PLD
Uwagi
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˛edziemy modyfikować konfiguracj˛e działajacego
˛
serwera produkcyjnego,
to dobra˛ praktyka˛ 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ólna˛
uwag˛e
zasługuja˛
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˛eki temu restart nie jest
odczuwalny przez klientów. Parametry te maja˛ jeszcze jedna˛ ważna˛ zalet˛e, wywołanie ich powoduje sprawdzenie konfiguracji serwera przed rozpocz˛eciem restartu,
dzi˛eki czemu nie musimy do tego używać programu apachectl.
BIND - Serwer Nazw
DNS - Domain Name System
DNS jest systemem hierarchicznym. Na samym szczycie owej hierarchii stoja˛ tzw.
TLD (Top Level Domains), czyli domeny najwyższego rz˛edu. Zaliczaja˛ si˛e do nich
takie domeny jak .com (komercyjne), .pl (krajowe), .net (sieci) i inne. Sa˛ 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˛eszczone hierarchie w obr˛ebie danej domeny. Niniejszy rozdział dotyczy implementacji Bind określanego czasem jako named - jednego
z najpopularniejszych serwerów DNS.
Każda domena (zwana również strefa)
˛ musi mieć co najmniej dwa serwery DNS,
jest to wymóg registrarów, czyli instytucji oferujacych
˛
możliwość rejestracji domen.
Jeden z serwerów określa si˛e jako podstawowy (również master lub primary) a drugi
jako zapasowy (slave lub secondary).
Wstep
˛
Bind w PLD dziala w środowisku chroot, w katalogu /var/lib/named, musimy
o tym pami˛etać, 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 wyglada
˛
nast˛epujaco:
˛
dev/
etc/
186
Rozdział 17. Usługi dost˛epne w PLD
M/
S/
named.pid
root.hint
Podobnie jak w normalnym środowisku, jest obecny tutaj katalog /dev, w
którym znajduja˛ si˛e urzadzenia
˛
konieczne do działania demona: /dev/null oraz
/dev/urandom. Katalog /etc jak zapewne si˛e domyślasz, przechowuje pliki
konfiguracyjne. U nas znajduje si˛e 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 żadanych
˛
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.
Podstawowa konfiguracja
Głównym plikiem konfiguracyjnym serwera Bind jest /etc/named.conf. Znajduja˛
si˛e w nim podstawowe opcje usługi oraz informacje na temat obsługiwanych stref.
Poniżej zamieszczono domyślne wpisy, które znajduja˛ si˛e 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 poczatku
˛
pliku konfiguracyjnego znajduje si˛e sekcja options. Najbardziej
istotna˛ opcja˛ jest tutaj directory. Wskazuje ona na główny katalog przechowywania
plików stref. Być może zdziwi Ci˛e 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˛e do omawiania pozostałych wpisów, należy si˛e jeszcze słowo wyjaśnienia na temat konstrukcji samego pliku. Na pierwszy rzut oka poszczególne wpisy sa˛ podzielone na sekcje. Te z kolei ograniczone sa˛ klamrami. Znak ; również pełni
tutaj rol˛e ogranicznika dla poszczególnych opcji jak i całych sekcji uj˛etych w klamry.
Warto o tym wiedzieć ze wzgl˛edu na ewentualne szukanie bł˛edów powstałych na
skutek edycji tego pliku.
Poniżej mamy zdefiniowane trzy sekcje stref zaczynajacych
˛
si˛e słowem kluczowym
zone. W powyższym przykładzie przedstawione sa˛ wpisy określajace
˛ localhosta. Sa˛
187
Rozdział 17. Usługi dost˛epne w PLD
one typu master. Plik strefy w każdej z nich wskazany jest opcja˛ file. Strefa nie musi być aktualizowana, ani synchronizowana z serwerem slave, wi˛ec dwie pozostałe
opcje maja˛ parametr none oraz any. Ostatnia strefa służy do komunikacji naszego
binda z Root serwerami o których była mowa we wst˛epie. Bez tej strefy nie mógłby
on wyszukiwać nazw w internecie. Mówiac
˛ w przenośni byłby ślepy.
Każdorazowe odpytywanie Root Servers może si˛e okazać mało wydajne, ze wzgl˛edu
na duże czasy odpowiedzi. Dlatego, jeżeli chcemy przyspieszyć ten proces powinniśmy sekcj˛e 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˛e takimi adresami jak w przykładzie. Możemy sobie wybrać takie serwery DNS, które b˛eda˛ nam odpowiadały najszybciej np.
serwery naszego ISP.
W PLD zaleca si˛e, 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˛e o ścieżce do tych katalogów decyduja˛ wpisy w named.conf. Struktura plików
stref dla obu typów domen jest taka sama.
Przykładowa konfiguracja strefy typu primary
Zaczniemy od konfiguracji /etc/named.conf, budowa tego pliku była wyjaśniona
w poprzedniej cz˛eś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 poczatku
˛
tego rozdziału. Podsumujmy wi˛ec dost˛epne informacje skupiajac
˛ si˛e na powyższym przykładzie:
• zone "example.net"
• type master
- nazwa strefy
- rodzaj serwera
• file "M/example.net"
- nazwa pliku z konfiguracja˛ strefy
- adres serwera, który ma możliwość
transferu całej strefy, Jeżeli posiadasz wi˛ecej niż jeden taki DNS, możesz je wpisać
pomi˛edzy klamry pami˛etajac
˛ o tym, aby rozdzielić poszczególne adresy IP,
znakiem ’;’.
• allow-transfer { 123.45.67.89; }
- opcja ta włacza
˛
powiadamianie zapasowego serwera DNS o zmianach w naszej domenie.
• notify yes
Musimy teraz utworzyć plik strefy dla domeny example.net wskazany przez opcj˛e
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
188
Rozdział 17. Usługi dost˛epne w PLD
)
@
@
@
@
ns1
ns2
mail
www
ftp
IN
IN
IN
IN
IN
IN
IN
IN
IN
NS
NS
MX
A
A
A
A
A
CNAME
ns1.example.net.
ns2.example.net.
10
mail.example.net.
123.45.67.8
123.45.67.8
90.12.34.237
123.45.67.8
34.5.6.78
www
Plik strefy można podzielić na trzy odr˛ebne sekcje. Pierwsza określa nazw˛e domeny
oraz okres ważności wpisów. Druga, kto ta˛ domena˛ zarzadza.
˛
W trzeciej znajduje si˛e
cała jej zawartość. Bardziej szczegółowy opis znajduje si˛e w poniższym wykazie. Kilka zdań o wyrażeniach stosowanych w plikach stref. Warto o nich pami˛etać. Wszystkie wpisy poprzedzone ;; b˛eda˛ ignorowane i traktowane jak komentarz. Kolejnym
ważnym znakiem jest znak kropki. Jego znaczenie omówi˛e poniżej w przykładzie.
@
IN
NS
ns1.example.net.
Jeżeli w powyższym wpisie pomin˛elibyśmy końcowy znak kropki, wówczas Bind
dokleiłby na końcu nazw˛e domeny. Wówczas z ns1.example.net zrobiłby si˛e wpis
ns1.example.net.example.net, co oczywiście nie jest pożadane.
˛
nast˛epnym znakiem
specjalnym na który warto zwrócić uwag˛e jest @. Otóż można go potraktować jako
pewnego rodzaju zmienna,˛ która przechowuje nazw˛e example.net. Jednym słowem,
example.net i @ to to samo.
- czas ważności rekordów w domenie wyrażony w sekundach; 86400
s. to jedna doba
• $TTL 86400
• $ORIGIN example.net.
- domena jaka˛ b˛edzie opisywał bieżacy
˛ plik strefy.
- Rekord typu SOA czyli
Start Of Authority. Możemy si˛e z niego dowiedzieć, kto zarzadza
˛
domena˛
([email protected]), jaki jest adres serwera primary DNS. Zwróć uwag˛e, że w
adresie [email protected] zamiast znaku @ użyta została kropka. Rekord SOA
posiada swoja˛ własna˛ struktur˛e o której poniżej. Zawarta jest ona pomi˛edzy
znakami ( ).
• @ IN SOA ns1.example.net. root.example.net.
- numer seryjny domeny. Powinien on być zwi˛ekszany
wraz z każda˛ jej modyfikacja.˛ W dobrym tonie jest utrzymywanie go w formacie
YYYYMMDDnn czyli rok, miesiac,
˛ dzień oraz numer modyfikacji w danym dniu.
• 2004022300 ;; serial
- To pole rekordu SOA definiuje jak cz˛esto serwery slave maja˛
sprawdzać czy dane o domenie nie zmieniły si˛e na masterze. Według RFC 10359
wartość ta powinna si˛e zawierać pomi˛edzy 1200 a 43200 (czyli od dwudziestu
minut do dwunastu godzin). W praktyce najlepsza wartość zawiera si˛e mi˛edzy
3600 a 7200 sekund.
• 1200 ;; refresh
- Czas po jakim secondary ma ponowić prób˛e kontaktu z masterem,
gdy taka si˛e nie powiedzie. Zalecana wartość pomi˛edzy 120 a 7200 sekund.
• 1200 ;; retry
- Ta wartość określa czas po jakim dane domeny maja˛ zostać
uznane za nieaktualne gdy serwer secondary nie b˛edzie mógł si˛e skontaktować z
primary. Zalecana wartość zawiera si˛e pomi˛edzy 1209600 a 2419200 sekund, czyli
od dwóch do czterech tygodni.
• 2419200 ;; expire
- 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˛edzie
przechowywana przez serwer DNS, który ja˛ pobrał. Zalecana wartość zawiera si˛e
mi˛edzy 86400 a 432000 sekund, czyli przez okres od jednego do pi˛eciu dni.
• 86400 ;; TTL
Bezpośrednio pod rekordem SOA definiujemy, które serwery DNS b˛eda˛ obsługiwały
nasza˛ domen˛e. Jeszcze raz przypominam aby właściwie zamknać
˛ ten rekord. Bez
189
Rozdział 17. Usługi dost˛epne w PLD
tego nasza domena nie b˛edzie działać. Do definiowania serwerów DNS służa˛ wpisy
typu IN NS.
@
@
IN
IN
NS
NS
ns1.example.net.
ns2.example.net.
Powyższy wpis mówi, że domen˛e example.net obsługuje serwer DNS ns1.example.net
oraz ns2.example.net. Jeżeli obie nazwy dotycza˛ komputerów, które wcześniej nie pełniły roli serwerów DNS, powienieś dodać wpisy takie jak poniżej.
ns1
ns2
IN
IN
A
A
123.45.67.8
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ługujac
˛ si˛e
wpisami typu IN A. Jak zapewne pami˛etasz, brak końcowej kropki powoduje doklejenie do wpisanej nazwy tego co znajduje si˛e w zmiennej $ORIGIN. Możemy wi˛ec
uznać to co widzisz w powyższym przykładzie za postać skrócona˛ poniższego wpisu.
ns1.example.net.
ns2.example.net.
IN
IN
A
A
123.45.67.8
90.12.34.237
Wpisy typu IN A służa˛ do określania, że właśnie ten adres IP ma przypisana˛ taka˛
a nie inna˛ nazw˛e. Oczywiście do jednego adresu IP możesz stworzyć kilka takich
wpisów. Jeżeli posiadasz serwer poczty, powinieneś zrobić wpis mówiacy
˛ o tym, że
b˛edzie on obsługiwał poczt˛e 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˛e
wtedy, kiedy posiadasz kilka serwerów poczty w swojej domenie. Służy on do ustalenia porzadku;
˛
do którego serwera poczta ma trafić w pierwszej kolejności. Mniejszy
priorytet zapewnia pierwszeństwo.
Pozostałe wpisy dotycza˛ takich standardowych usług jak www czy ftp. Umieszczanie ich w pliku strefy nie jest obowiazkowe.
˛
Jednak domen˛e rejestruje si˛e 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 dodatkowa˛ subdomen˛e dla hosta przypisanego już do innej nazwy. Specjaliści radza˛ by tego rodzaju
rekordy wskazywały wyłacznie
˛
na rekordy typu IN A.
Po zakończeniu konfiguracji musimy jeszcze uruchomić usług˛e.
# /etc/rc.d/init.d/named start
Przykładowa konfiguracja strefy typu secondary
Konfiguracja serwera secondary sprowadza si˛e 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; };
};
190
Rozdział 17. Usługi dost˛epne w PLD
Jak widać wpis wyglada
˛ podobnie jak w przypadku serwera primary. Opcja type tym
razem ma wartość slave. Musimy też wskazać serwer primary. Robimy to używajac
˛
opcji masters, której wartość zawiera adres serwera primary DNS.
Obsługa protokołu IPv6
Podobnie jak wi˛ekszość usług w dystrybucji BIND posiada wsparcie dla protokołu
IPv6 (IPng). Oczywiście wcześniej komputer musi być podłaczony
˛
do tej sieci. W
tej cz˛eści rozdziału zostanie omówiona konfiguracja dla stref IN A oraz strefy odwrotnej. Narz˛edziem wspomagajacym
˛
konfiguracj˛e b˛edzie ipv6calc znajdujacy
˛ si˛e 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˛eda˛ 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 zaczał
˛ obowiazywać
˛
należy zrestartować
usług˛e.
• IN PTR
Konfiguracj˛e strefy odwrotnej zaczniemy od stworzenia odpowiedniego wpisu w
pliku /etc/named.conf. Jak sama nazwa wskazuje b˛edzie on przypominał lustrzane odbicie adresu w zwykłej postaci. Aby mieć pewność, że nasza strefa b˛edzie poprawnie zapisana posłużymy si˛e wspomnianym we wst˛epie narz˛edziem
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ć taka˛ 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˛e praktycznie nie różni
od konfiguracji strefy dla IPv4. Jako nazw˛e strefy podaliśmy to co nam zwrócił
ipv6calc. Przyjrzyjmy si˛e teraz jak powinien wygladać
˛
plik dla tej strefy wskazany
dyrektywa˛ 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 posiadaja˛ na końcu specjalnego
znaku kropki.
191
Rozdział 17. Usługi dost˛epne w PLD
@
IN
2004050600
3H
15M
SOA ns1.example.net. root.example.net. (
1W
1D )
Jak widać rekord IN SOA nie różni si˛e niczym od tego dla domeny IPv4.
@
@
IN
IN
NS
NS
ns1.example.net.
ns2.example.net.
Określamy które serwery przechowuja˛ nasza˛ domen˛e odwrotna.˛ Również tutaj
wszystko wyglada
˛ identycznie jak dla protokołu IPv4. Możemy teraz przystapić
˛
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 obliczajac
˛ 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˛edzie on wygladał
˛
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˛ec zostanie doklejona po
nim zawartość $ORIGIN.
Narz˛edziem pomocnym w odpytywaniu serwerów DNS, jest program host. Można nim również odpytywać o nazwy skonfigurowane dla protokołu IPv6. Jak by
wygladało
˛
zapytanie o nazw˛e 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łacznik
˛
-n oznacza, że b˛edziemy odpytywali stref˛e odwrotna,
˛ natomiast -i,
że jest to adres typu int. Domyślnie host szuka nazw typu arpa.
Rejestracja
Zanim zarejestrujemy domen˛e musimy mieć skonfigurowany podstawowy i zapasowy serwer nazw. Mamy możliwość zarejestrowania własnej domeny, badź
˛ 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˛e mało profesjonalne i warto zarejestrować własna.˛
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˛e z administratorem
innej firmy na wzajemne prowadzenie serwerów secondary.
Diagnostyka
Jeśli chcemy przetestować poprawność składni pliku strefy, powinniśmy skorzystać
z narz˛edzia named-checkzone. Program sprawdzi poprawność pliku strefy i poda
w której linii wystapił
˛ bład
˛ 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 nastapił
˛ problem z uruchomieniem demona, uniemożliwiajacy
˛ mu pisanie do logów, to możemy sprawdzić co si˛e dzieje uruchamiajac
˛
go bez przejścia w tło i z wypisaniem komunikatów na standardowe wyjście:
192
Rozdział 17. Usługi dost˛epne w PLD
/usr/sbin/named -g -t /var/lib/named
Aby ostatecznie sprawdzić poprawność konfiguracji możemy odpytać nasz serwer
za pomoca˛ protokołu DNS. Użyjemy do tego programu host z pakietu bind-utils np.:
# /usr/sbin/host -t mx example.net
Zakończenie
Uwaga! Named nie powinien być resolwerem nazw dla maszyny na której pracuje, powinien nim być inny serwer DNS aby nie powstawały zap˛etlenia zapytań. Wyjatek
˛
stanowia˛ usługi pracujace
˛ w osobnych środowiskach chroot/vserver. Wi˛ecej o konfiguracji resolwera nazw znajdziemy w sekcja Podstawowa konfiguracja sieci w Rozdział
15.
CRON - Cykliczne wykonywanie zadań
CRON jest ważnym demonem systemowym, którego zadaniem jest uruchamianie
programów cyklicznie lub o określonej porze. Omówiona zostanie instalacja vixiecron, który oprócz standardowych usług posiada dodatkowe opcje konfiguracyjne i
zwi˛ekszone bezpieczeństwo
Instalacja
Program instalujemy za pomoca˛ poldka:
# poldek -i vixie-cron
Po zainstalowaniu program jest praktycznie gotowy do użycia. Można wi˛ec od razu
uruchomić demona korzystajac
˛ z polecenia:
# /etc/rc.d/init.d/crond start
Od tej pory demon może działać nieprzerwane - nie wymaga restartów po rekonfiguracji.
Budowa tabel
W cronie istnieje podział na zadania systemowe i zadania użytkowników. Pierwszych zwykle używa si˛e do prac administracyjnych, z drugich korzystaja˛ użytkownicy wedle własnych potrzeb (o ile maja˛ do tego prawo). Główna konfiguracja demona (systemowa) umieszczona jest w pliku /etc/cron.d/crontab, konfiguracje
lokalne użytkowników przechowywane sa˛ w plikach /var/spool/cron/{$login}.
O ile /etc/cron.d/crontab może być swobodnie modyfikowany za pomoca˛ edytora tekstu, o tyle użytkownicy powinni używać w tym celu odpowiedniego narz˛edzia
(opisanego w dalszej cz˛eści).
Pliki konfiguracji crona nazywane sa˛ tabelami, zarówno główny plik konfiguracji jak
i konfiguracje użytkowników maja˛ bardzo podobna˛ budow˛e. Sa˛ to pliki tekstowe o
ściśle ustalonej składni, w których jeden wiersz odpowiada jednemu zadaniu. Wiersz
tabeli systemowej ma nast˛epujac
˛ a˛ składni˛e:
{$data-czas} {$użytkownik} {$zadanie}
193
Rozdział 17. Usługi dost˛epne w PLD
Nieco prostsza˛ budow˛e maja˛ tabele użytkowników:
{$data-czas} {$zadanie}
Pierwsze pole określa jak cz˛esto wykonywane jest zadanie, pole {$użytkownik} wyst˛epuje 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˛e nazwy użytkownika, gdyż
polecenia tam zawarte sa˛ 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˛e (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˛eda˛ wysyłane powiadomienia
poczta˛ elektroniczna˛ lub pełny adres e-mail, ostatnia zmienna to priorytet
wykonywanych zadań (liczba nice).
Format daty i czasu
Sekcja {$użytkownik} i {$zadanie} nie wymagaja˛ komentarza wi˛ec opisane zostanie
jedynie pole {$data-czas}. Pole to składa si˛e z pi˛eciu kolumn:
•
1-sza kolumna (zakres 0-59) oznacza minuty.
•
2-ga kolumna (zakres 0-23) oznacza godzin˛e.
•
3-cia kolumna (zakres 0-31) oznacza dzień miesiaca.
˛
•
4-ta kolumna (zakres 0-12) oznacza miesiac.
˛ (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˛e jaka powinna zostać wykonana dla danego wiersza.
Gwiazdka "*" oznacza cały zakres z możliwego przedziału. Same zakresy w pierwszych pi˛eciu kolumnach moga˛ być reprezentowane w różny sposób. Wi˛ecej szczegółów na ten temat dowiemy si˛e wywołujac
˛ polecenie man 5 crontab
Program vixie-cron posiada także mało udokumentowany format wykonywania poleceń
Nazwa
-----@reboot
@yearly
@annually
@monthly
194
Działanie
------Uruchom jeden raz przy starcie systemu
Uruchom jeden raz w roku, "0 0 1 1 *"
To samo co @yearly
Uruchom jeden raz w miesiacu,
˛
"0 0 1 * *"
Rozdział 17. Usługi dost˛epne w PLD
@weekly
@daily
@midnight
@hourly
Uruchom
Uruchom
To samo
Uruchom
jeden raz w tygodniu, "0 0 * * 0"
jeden raz dziennie, "0 0 * * *"
co @daily
raz na godzin˛
e, "0 * * * *"
Przykład:
@reboot
/usr/bin/rdate -s ntp.task.gda.pl
Tabele systemowe
Główna˛ konfiguracj˛e systemu tworzymy za pomoca˛ naszego ulubionego edytora
tekstu, poprzez modyfikacj˛e pliku /etc/cron.d/crontab. Jego zawartość b˛edzie podobna do poniżej przedstawionego przykładu:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
[email protected]
NICE=15
# run-parts
01 * * * *
02 1 * * *
02 2 * * 0
02 3 1 * *
0-59/10 * * * *
15 18 * * 1-5
root
root
root
root
root
root
/bin/run-parts
/bin/run-parts
/bin/run-parts
/bin/run-parts
/bin/run-parts
/bin/run-parts
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
/etc/cron.10min
/etc/cron.gielda
Poniżej napisu # run-parts umieszczone sa˛ konfiguracje zadań, pierwsze cztery linijki stanowia˛ domyślna˛ konfiguracj˛e demona. Program run-parts służy do uruchamiania o jednej porze wszystkich programów we wskazanym katalogu. Dzi˛eki 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˛e - zaczynajac
˛ 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 miesiac
˛ (w pierwszy dzień miesiaca
˛ 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 piatku
˛
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, zaczynajac
˛ od pełnej godziny - czyli np. 01:00, 01:10, 01:20 itd.):
195
Rozdział 17. Usługi dost˛epne w PLD
0-59/10 * * * * /bin/run-parts /etc/cron.10min
Tabele użytkowników
Domyślnie użytkownicy nie moga˛ 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˛edzia crontab, program ten pozwala na bardzo
łatwe zarzadzanie
˛
tabela˛ użytkownika. Przyjmuje parametry określajace
˛ rodzaj działania, które ma być wykonane na tabeli. Polecenie crontab -l wyświetla list˛e zdefiniowanych zadań, wywołanie crontab -e otworzy plik konfiguracji do edycji, zaś
crontab -r usunie cała˛ zawartość konfiguracji użytkownika.
Wybranie opcji edycji tabeli spowoduje otworzenie edytora tekstu określonego
zmienna˛ środowiskowa˛ EDITOR, po skończonej edycji plik zostanie automatycznie
poddany kontroli poprawności i zapisany jako /var/spool/cron/{$login}.
Najcz˛eściej popełniane bł˛edy 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ść zarzadzania
˛
zadaniami dowolnego
użytkownika, w tym celu stosuje si˛e opcj˛e -u z podana˛ nazwa˛ użytkownika.
Komunikaty cron-a
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 maja˛ docierać
informacje o wystapieniu
˛
bł˛edó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 jedyna˛ forma˛ informowania zwykłych użytkowników o
ewentualnych bł˛edach zadań, gdyż nie maja˛ oni dost˛epu do logów.
Wysyłanie poczty elektronicznej zarówno do użytkowników lokalnych jak i
zewn˛etrznych b˛edzie wymagało instalacji lokalnego serwera poczty MTA. Może to
być niemal dowolny demon pocztowy, np.: Exim (opis w sekcja Exim - Transport
poczty elektronicznej (MTA)) lub Postfix (opis w sekcja Postfix - Transport poczty
elektronicznej (MTA)).
Aby łatwiej było analizować problemy, do wiadomości wysyłanej przez demon, dodawane sa˛ nagłówki X-Cron-Env, zawierajace
˛ dane środowiska np.:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
<SHELL=/bin/sh>
<PATH=/sbin:/bin:/usr/sbin:/usr/bin>
<MAILTO=root>
<NICE=15>
<HOME=/root>
<LOGNAME=root>
<USER=root>
CUPS - Popularny system druku dla Uniksa
Wstep
˛
CUPS jest nowoczesnym i uniwersalnym systemem druku dla systemów uniksowych. Może być stosowany zarówno do drukowania lokalnego jak i do drukowania
196
Rozdział 17. Usługi dost˛epne w PLD
w sieci - obsługuje domyślnie protokół IPP. Po poprawnym skonfigurowaniu urza˛
dzenia b˛edziemy 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 jaka˛ funkcj˛e b˛edzie
pełnić zainstalowane "urzadzenie"
˛
decyduje wybór specjalnego sterownika interfejsu: backendu(poza IPP) i konfiguracji.
Instalacja
Podstawowa cz˛eść CUPS:
$ poldek -i cups cups-clients
Nast˛epnie instalujemy jeden lub wi˛ecej kontrolerów interfejsów drukarki (protokół
IPP nie wymaga backendu):
• cups-backend-parallel
• cups-backend-serial
- port równoległy (parallel port)
- 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ługujacych
˛
PostScriptu konieczne b˛eda˛ dodatkowe
pakiety:
$ poldek -i cups-filter-pstoraster ghostscript-esp
Do zdalnej administracji (za pomoca˛ HTTPS), konieczny b˛edzie program openssl:
$ poldek -i openssl-tools
Czas uruchomić demona:
$ /etc/rc.d/init.d/cups start
Zarzadzanie
˛
drukarkami
Operacje takie jak dodawanie, czy konfigurowanie drukarek moga˛ być dokonywane
na kilka sposobów:
•
HTTP
Popularnym sposobem jest konfiguracja przy pomocy przegladarki
˛
internetowej,
CUPS posiada wbudowany niewielki serwer WWW, z którym łaczymy
˛
si˛e dowolna˛
przegladark
˛
a˛ na adres serwera i port 631 np.:
$ lynx localhost:631
Z poziomu tej strony mamy dost˛ep do wielu opcji administracyjnych: konfiguracji
drukarek, zarzadzania
˛
klasami, zadaniami druku i innymi. Ten sposób zarzadza˛
nia systemem CUPS w niniejszej publikacji jest traktowany jako domyślny.
•
lpadmin
197
Rozdział 17. Usługi dost˛epne w PLD
lpadmin jest programem administracyjnym dostarczanym z CUPS-em, obsługiwany jest całkowicie z linii wiersza poleceń. Jest to narz˛edzie zaawansowane, przez
co stosunkowo trudne w obsłudze, jego dokładny opis zawarto w dokumentacji.
•
Inne
Dla CUPS powstały wygodne programy zarzadzaj
˛
ace
˛ przeznaczone działajace
˛ w
środowiskach GNOME i KDE. Szczególnie pozytywnie przedstawia si˛e systemconfig-printer - wygodna aplikacja, której układ opcji przypomina konfiguracj˛e
przez WWW.
Dodanie drukarki
W tym rozdziale przedstawiono ogólny opis instalacji urzadzenia,
˛
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˛edzia dost˛epnego przez stron˛e WWW:
$ lynx localhost:631
nast˛epnie przechodzimy do opcji Managle Printers -> Add Printer.
Określamy nazw˛e drukarki oraz opcjonalnie komentarz i lokalizacj˛e, nast˛epnie wybieramy jeden z dost˛epnych na liście kontrolerów interfejsów drukarki (backend). Na
koniec wybieramy producenta i model drukarki.
System CUPS jest dostarczany z niewielka˛ ilościa˛ sterowników drukarek, jednak nie
należy si˛e jednak martwić jeśli na liście nie odnajdziemy szukanego urzadzenia.
˛
Coraz wi˛ecej producentów dostarcza ze sprz˛etem pliki PPD (w CUPS sa˛ używane również dla drukarek niepostcriptowych), możemy także skorzystać z bazy Foomatic
zawierajacej
˛ ogromna˛ liczb˛e 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.org10,
po wyszukaniu modelu drukarki (Driver Listings) należy kliknać
˛ 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 normalna˛ instalacj˛e drukarki. Możemy ich wiele
zainstalować, to do której b˛eda˛ trafiać dokumenty zależy od tego, która˛ z nich ustawimy jako domyślna.˛
Szczegóły dodawania drukarki lokalnej
Dodanie drukarki lokalnej dotyczy drukarek podłaczonych
˛
bezpośrednio podłaczo˛
nych do komputera, na którym zainstalowany jest CUPS, w tym wypadku interesuja˛ nas interfejsy: Parallel, Serial i USB. Zanim zaczniemy proces konfiguracji,
musimy sie upewnić, że sa˛ załadowane odpowiednie moduły jadra
˛
(w przeciwnym
wypadku dany backend może być nieaktywny).
Drukarka podłaczona
˛
do portu równoległego b˛edzie wymagała modułów lp,
parport i parport_pc. Moduł lp dopisujemy do pliku /etc/modules, jeśli nie
198
Rozdział 17. Usługi dost˛epne w PLD
używamy udeva to pozostałe moduły także. Drukarki podłaczane
˛
pod port LPT sa˛
dost˛epne za pomoca˛ urzadze
˛
ń /dev/lp*. W przypadku drukarek USB konieczny
b˛edzie moduł usblp oraz rzecz jasna moduł kontrolera USB, urzadzenia
˛
te b˛eda˛
dost˛epne za pomoca˛ /dev/usb/lp*. Wi˛ecej o modułach jadra
˛
i ich zarzadzaniu
˛
odnajdziemy w sekcja Moduły jadra
˛ w Rozdział 11.
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˛etrznych programów - w tym backendów. Jako że urzadzenia
˛
w katalogu /dev maja˛ grup˛e ustawiona˛ na lp, taka˛ też podamy jako wartość
parametru:
Group lp
Dalsza˛ instalacj˛e przeprowadzamy zgodnie z zaprezentowanym wcześniej opisem
Dodanie drukarki.
Szczegóły dodawania drukarki zdalnej
•
IPP
Aby CUPS było klientem IPP musimy dodać drukark˛e z backendem IPP oraz podać prawidłowy URI zasobu, jako producenta wybieramy Raw, zaś jako model
Raw Queue. URI powinno mieć nast˛epujac
˛ a˛ postać:
ipp://{$serwer}/printers/{$drukarka}
($serwer to nazwa lub IP serwera druku, zaś $drukarka to nazwa drukarki). Adres
taki może wygladać
˛
nast˛epujaco:
˛
ipp://10.0.0.3/printers/laserowa
•
SMB
Jedyne co musimy zrobić to dodać drukark˛e 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˛epujac
˛ a˛ postać:
smb://{$serwer}/{$drukarka}
($serwer to nazwa lub IP serwera druku, zaś $drukarka to nazwa drukarki). Adres
taki może wygladać
˛
nast˛epujaco:
˛
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
Konfiguracja serwera
Aby udost˛epnić w sieci zainstalowana˛ drukark˛e, musimy odpowiednio
skonfigurować demona cupsd, jego konfiguracja jest przechowywana w pliku
/etc/cups/cupsd.conf.
199
Rozdział 17. Usługi dost˛epne w PLD
Domyślnie CUPS pozwala jedynie na drukowanie lokalne, aby uzyskać dost˛ep z sieci musimy dokonać zmian w pliku konfiguracji. Należy odszukać sekcj˛e oznaczona˛
znacznikami <Location /></Location>. Dost˛ep z innych maszyn konfigurujemy
za pomoca˛ opcji Allow From {$klient} ($klient to nazwa lub adres IP lub klasa
adresów, którym udost˛epniamy drukark˛e). Poniższy przykład przedstawia udost˛epnienie 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˛ep (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łajacy
˛ 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 usunać
˛ z niego wszystkie opcje dotyczace
˛ druku z sekcji [global], zaś w ich miejsce wstawić poniższe
linijki:
printing = cups
printcap name = cups
Na koniec należy przygotować sekcj˛e drukarek. Prosty przykład pliku konfiguracji
pakietu Samba może wygladać
˛
nast˛epujaco:
˛
[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˛e
application/octet-stream
application/vnd.cups-raw
w pliku /etc/cups/mime.types zaś, należy odkomentować linijk˛e
application/octet-stream
Po tych operacjach wymagany jest oczywiście restart usługi CUPS.
# /etc/rc.d/init.d/cups restart
200
0
-
Rozdział 17. Usługi dost˛epne w PLD
Przy tak skonfigurowanym serwerze drukark˛e 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˛ecej na ten temat odnajdziemy w dokumentacji
Samby.
Zarzadzanie
˛
kolejka˛ druku
Zarzadzanie
˛
wydrukami jest możliwe z poziomu przegladarki
˛
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 znajduja˛
si˛e w pakiecie cups-clients.
Test drukarki i rozwiazywanie
˛
problemów
Drukarka powinna działać od razu po zainstalowaniu, można to przetestować z
poziomu panelu konfiguracji drukarki drukujac
˛ stron˛e testowa.˛ W razie problemów
pierwsza˛ rzecza˛ jaka˛ należy zrobić to przejrzeć plik rejestrowania bł˛edów (log):
/var/log/cups/error_log. Jeśli ciagle
˛
nie możemy odnaleźć źródła problemu
możemy spróbować właczyć
˛
wysoki poziom raportowania bł˛edów. Dokonujemy to
przez edycj˛e w pliku /etc/cups/cupsd.conf i przestawienie ustawienia opcji
"LogLevel" z "info " na "debug" lub " debug2" np.:
LogLevel debug2
Kiedy rozwia˛żemy problem należy przywrócić poprzedni poziom raportowania ze
wzgl˛edu na szybki przyrost obj˛etości logów. Po każdej modyfikacji pliku konfiguracji
należy przeładować demona:
# /etc/rc.d/init.d/cups restart
DHCPD - Dynamic Host Configuration Protocol Daemon
DHCP to protokół pozwalajacy
˛ urzadzeniom
˛
pracujacym
˛
w sieci LAN na pobieranie
ich konfiguracji IP (adresu, maski podsieci, adresu rozgłoszeniowego itp.) z serwera.
Ułatwia on administracj˛e dużych i średnich sieci.
Instalacja
Aby uruchomić serwer DHCP musimy oczywiście zainstalować go. Instalacja w PLD
jest prosta:
# poldek -i dhcp
Podstawowa konfiguracja
Konfiguracja usługi przechowywana jest w pliku /etc/dhcpd.conf , z pakietem dostarczona jest przykładowa konfiguracja, pozwalajaca
˛ uruchomić usług˛e po zmianie
zaledwie kilku wartości. Przedstawiona poniżej sekcja zawiera parametry dla określonej podsieci. Dla wi˛ekszej 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
201
Rozdział 17. Usługi dost˛epne w PLD
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łaczon
˛
a˛ obsługa˛ 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;
}
Wewnatrz
˛ przedstawionej sekcji (ograniczonej nawiasami klamrowymi) umieszczane sa˛ opcje jakie zwykle podajemy przy statycznej konfiguracji interfejsu sieci. Powyższa konfiguracja b˛edzie przydzielać komputerom dynamiczne adresy IP z zakresu 192.168.0.128 - 192.168.0.255 na okres 21600 sekund, jednak nie wi˛ekszy 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˛edzie nasłuchiwał dhcpd
(np. eth1). Po tej operacji wystarczy uruchomić lub zrestartować usług˛e.
Statyczne przypisanie konfiguracji
Aby komputery mogły za każdym razem uzyskać taka˛ sama˛ konfiguracj˛e, musimy
dla każdego z nich dodać odpowiednie wpisy w pliku konfiguracji. Konfiguracje
hostów umieszczamy wewnatrz
˛ 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 pomoca˛ adresów sprz˛etowych 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 pomoca˛ programu ip, lub iconfig, szczegóły na ten temat odnajdziemy w sekcja Narz˛edzia sieciowe w
Rozdział 16.
202
Rozdział 17. Usługi dost˛epne w PLD
Inne opcje
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˛
ezła NetBIOS
option netbios-node-type 2;
Adres serwera czasu NTP:
option ntp-servers
192.168.1.1;
Uruchomienie
Serwer uruchamiamy nast˛epujaco:
˛
# /etc/rc.d/init.d/dhcpd start
Konfiguracja klienta
Szczegółowy opis konfiguracji klienta DHCP umieszczono w sekcja Ethernet w Rozdział 15. Jeśli zechcemy sprawdzić poprawność konfiguracji przydzielonej hostowi
to wystarczy użyć programu ip, lub iconfig, szczegóły odnajdziemy w sekcja Narz˛edzia sieciowe w Rozdział 16.
Uwagi
W wi˛ekszości wypadków najlepszym wyborem b˛edzie przypisywanie
niezmiennych adresów IP dla każdej z maszyn, pozwoli to zachować porzadek
˛
i
lepsza˛ kontrol˛e nad siecia.˛ Jest to absolutnie konieczne w wypadku serwerów oraz
routerów, jednak przy tego typu maszynach zaleca si˛e zrezygnowanie z DHCP na
korzyść statycznej konfiguracji.
Domyślnie logi demona sa˛ rejestrowane przez syslog-a z ustawionym źródłem
(facility) na "daemon". Tego rodzaju komunikaty zwykle sa˛ zapisywane do pliku
/var/log/daemon , dlatego tam właśnie powinniśmy szukać informacji jeśli
wystapi
˛ a˛ jakieś problemy.
Exim - Transport poczty elektronicznej (MTA)
Usługa MTA (ang. message transfer agent) jest odpowiedzialna za przesył m.in. email mi˛edzy serwerami. Najpopularniejszymi przedstawicielami tego typu usług sa:˛
Sendmail, Postfix czy opisany przez nas Exim. Oto zalety jakie przemawiaja˛ za wybraniem Exim-a jako naszego MTA:
203
Rozdział 17. Usługi dost˛epne w PLD
•
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˛e, rozbudowywujac
˛ a˛ Exim o obsług˛e
programów antywirusowych, demona SpamAssasin (skanera antyspamowego)
oraz wykrywania bł˛edów MIME - dzi˛eki 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ółpracujacy
˛ z Exiscanem
Podsumowujac
˛ - Exim jest rewelacyjnym MTA. Jego możliwości konfiguracji pozwoliły mi na zbudowanie dosyć rozbudowanego serwera poczty obsługujacego
˛
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 sa˛ spamem czy nie już nawet nie wspomn˛e. W dodatku Exim
jest całkiem bezpiecznym MTA (wersja 4.x wg. securityfocus jak narazie dorobiła si˛e
jednego bł˛edu - w końcu jakaś cena musi być za te wodotryski). Zreszta˛ konstrukcja
omawianego MTA na poczatku
˛
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
Instalacja pakietu jest prosta. Uruchamiamy program: poldek i wykonujemy:
poldek -i exim
Oczywiście zanim wykonamy zalecenie startu demona powinniśmy dokonać konfiguracji, która˛ opisuje nast˛epny rozdział.
Budowa pliku konfiguracji
Wszelkich zmian w konfiguracji dokonujemy w pliku /etc/mail/exim.conf. Na
poczatek
˛
wyjaśnimy jak zorganizowany jest plik konfiguracyjny, wyglada
˛ to mniej
wi˛ecej tak:
# główna sekcja ...
opcje i dyrektywy sekcji głównej
begin sekcja1
opcje i dyrektywy sekcji1
begin sekcja3
...
Tak wi˛ec plik ten jest zbudowany z sekcji, które rozpoczynaja˛ si˛e słowem begin nazwa, z wyjatkiem
˛
sekcji głównej, która jest na samym poczatku
˛
pliku i nie posiada
swojego begina. Sekcje również nie maja˛ żadnych słów kluczowych, które by je zamykały - po prostu poczatek
˛
begin nowej sekcji oznacza zakończenie poprzedniej. I
tak, standardowo mamy nast˛epujace
˛ sekcje:
204
•
główna - odpowiedzialna za podstawowe ustawienia Exim
•
acl - listy kontroli dost˛epu, filtrowania, odrzucania i akceptowania poczty
Rozdział 17. Usługi dost˛epne w PLD
•
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˛eczenia poczty
•
retry - ustawienia ponowień
•
rewrite - reguły do przepisywania nagłówków
•
authenticators - reguły do autoryzacji
Co to sa˛ 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˛e na jakaś
˛ reguł˛e (router) to jest przekazywany do transportu określonego przez ten router. Inaczej mówiac
˛ router w Eximie
kieruje maila do odpowiedniego transportera. Transporter natomiast robi już z mailem co należy - dor˛ecza go lokalnie, albo przekierowywuje gdzieś indziej albo odsyła
do innego serwera. Wiem, że w tym momencie może wydawać si˛e to skomplikowane, ale nie przejmujcie si˛e, to tylko wiedza teoretyczna która na poczatku
˛
nie b˛edzie
wam potrzebna. Musiałem natomiast wam wytłumaczyć, że sa˛ sekcje i że musicie
nauczyć si˛e tego, iż jak napisz˛e ’dopisać w sekcji głównej’ to należy coś dopisać na
poczatku
˛
pliku.
Podstawowa konfiguracja
Zanim zaczniemy konfiguracj˛e demona SMTP, musimy koniecznie dodać rekord MX
do każdej strefy DNS obsługiwanej przez nasz serwer. Informacje na ten temat zawarto w sekcja 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 rozdzielajac
˛ je dwukropkami:
domainlist local_domains = @ : domena.pl : baseciq.org : \
/etc/mail/local_domains
Poza domena.pl, baseciq.org, Exim b˛edzie 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˛eda˛ wymagały restartu. Tak wi˛ec najwygodniej b˛edzie 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˛e bardzo łatwo. Linijk˛e
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˛edzie akceptował każda˛ poczt˛e zaadresowana˛ do domen zawartych
w pliku /etc/mail/relay_to_domains. A co z nia˛ zrobi? Jak wiadomo, jeżeli domena ma kilka MX’ów, to Exim b˛edzie starał si˛e ja˛ dostarczyć do serwera o najniższym
priorytecie MX. Chyba że on ma najniższy, to wygeneruje bład.
˛
205
Rozdział 17. Usługi dost˛epne w PLD
Relaying, czyli określenie kto może przez nasz serwer wysyłać poczt˛e. I tutaj, list˛e adresów i hostów buduje si˛e w podobny sposób do local_domains i relay_to_domains.
Wystarczy stworzyć list˛e 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 istniejacego
˛
konta użytkownika. Przy
takiej konfiguracji poczta b˛edzie docierała do skrzynek typu mbox.
Skrzynki pocztowe
Exim potrafi umieszczać poczt˛e 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˛edu
na wsteczna˛ zgodność Exim domyślnie używa tych pierwszych, aby używać Maildira wykonujemy nast˛epujace
˛ czynności:
W sekcji konfiguracji transporterów odszukujemy opcj˛e "local_delivery", tam wstawiamy znak komentarza przed opcja˛ "file =" i dodajemy linijki:
maildir_format = true
directory=${home}/Mail/Maildir
Jak si˛e łatwo domyślić druga z opcji wskazuje miejsce przechowywanie skrzynek. Po
modyfikacji omawiana sekcja może wygladać
˛
nast˛epujaco:
˛
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 zaczynajacych
˛
si˛e od "procmail:", podobnie post˛epujemy w sekcji transporterów w miejscu zaczynajacym
˛
si˛e od wiersza "procmail_pipe:". Na koniec musimy jeszcze tylko
umieścić plik konfiguracji Procmaila: .procmailrc w katalogu domowym użytkownika.
Różne opcje
Czasami (czytaj: gdy mamy sieczk˛e w /etc/hosts) Exim zgłasza si˛e 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˛e inaczej niż hostname maszyny na
którym stoi wystarczy ustawić (badź
˛ dodać gdy jej nie ma) opcj˛e 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˛e 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:
206
Rozdział 17. Usługi dost˛epne w PLD
smtp_banner = $primary_hostname ESMTP $tod_full
Spowoduje to wyświetlanie nast˛epujacego
˛
tekstu jako bannera:
220 serwer.domena.pl ESMTP Wed, 23 Jul 2003 15:18:04
+0200
Chyba nie musz˛e tłumaczyć, że aby usunać
˛ dat˛e należy wywalić $tod_full?
Teraz zajmiemy si˛e aliasami. Plik z aliasami powinien znajdować si˛e w
/etc/mail/aliases. Jest to czysty plik tekstowy, wprowadzone w nim zmiany
wymagaja˛ 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 ciag
˛ system_aliases: - jest to definicja routera odpowiedzialnego za
rozwiazywanie
˛
aliasów. Tam też, w linijce data widać ścieżk˛e 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
Autoryzacja SMTP
Jeżeli z naszego SMTP korzystaja˛ użytkownicy spoza sieci lokalnej przyda nam si˛e
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˛eściej nie działa. Z pomoca˛ przyjdzie nam pakiet cyrus-sasl, a dokładniej
pwcheck daemon (w PLD cyrus-sasl-saslauthd). W sekcji AUTHENTICATORS wpisujemy nast˛epujace
˛ 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
Ostatnia˛ rzecza˛ przy saslauthd (uruchomionym z opcja˛ -a pam) jaka˛ 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
207
Rozdział 17. Usługi dost˛epne w PLD
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
Syfrowanie SSL
Exim sobie bardzo dobrze radzi z połaczeniami
˛
szyfrowanymi przy użyciu protokołu
SSL (wspiera metod˛e 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 podajac
˛ 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˛e po SSL,
co zreszta˛ 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:
208
Rozdział 17. Usługi dost˛epne w PLD
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˛epnie
wystarczy
że
standardowe
listen-address
w
pliku
/etc/tpop3d.confzmienimy 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˛edzie obsługiwał SSL po wykonaniu komendy STLS
(np. TheBat potrafi tak zaczać
˛ sesj˛e SSL) a na porcie 995 b˛edzie od razu używał SSL
(TheBat, Outlook Express).
Quota
Generalnie nie ma sensu m˛eczyć kernela i filesystemu żeby pilnował quoty na poczt˛e.
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 lokalna˛ quot˛e 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˛
e w wysokości 20MB:
quota = 20M
Proste, prawda? Tak naprawd˛e ma to zastosowanie w systemach poczty wirtualnej
gdzie możemy w bazie danych przechowywać quot˛e 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 quota˛ systemowa,˛ 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˛edzie miał żadnych limitów na swoja˛ skrzynk˛e pocztowa.˛ Plik taki powinien
wygladać
˛
mniej wi˛ecej tak:
lukasz: 100M
kflis: 5M
ania: 20M
I tak oto ja mam 100mb na poczt˛e, 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
209
Rozdział 17. Usługi dost˛epne w PLD
linijki z quota,˛ gdzie mamy ’0M’ możemy wstawić np. ’20M’. Wtedy, osoby nie
dopisane do /etc/mail/quota.conf b˛eda˛ miały 20MB limitu (limit domyślny).
Oczywiście jak na Exim przystało, od quoty jest wi˛ecej bajerków. Chyba najbardziej
pożadanym
˛
b˛edzie opcja quota_warn_message. Jest to nic innego jak mail ostrzegaja˛
cy usera o tym, że skrzynka jest zapchana po same brzegi. Zanim jednak polecisz to
wdrażać, zainteresuj si˛e jak to działa. Otóż po dostarczeniu każdego maila Exim b˛edzie sprawdzał czy został przekroczony konkretny próg (podany w megabajtach lub
w procentowo). Jeżeli tak, wygeneruje on odpowiednia˛ wiadomość. I tak, dodajemy
do molestowanego przez nas local_delivery nast˛epujace
˛ 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˛
eda˛ dostarczane\n\
do Ciebie nowe wiadomości. Opróżnij skrzynk˛
e pocztowa˛ ze starych\n\
wiadomości.\n"
quota_warn_threshold = 90%
Dodanie skanerów antywirusowych
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˛ec 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˛e 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 poczatku):
˛
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 = *
210
Rozdział 17. Usługi dost˛epne w PLD
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 szkodliwa˛ 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 ucia˛żliwego użytkownika co chwila próbujacego wysłać
poczt˛e uznana˛ za szkodliwa.˛ Kolejny warunek spowoduje iż maile z uszkodzonymi
nagłówkami MIME zostana˛ odpowiednio oznaczone (czyli, także, duże maile podzielone na cz˛eś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˛e Exima musi zostać dodany do grupy exim.
Dokonujemy tego poleceniem groupadd albo edytujac
˛ po prostu plik /etc/group:
[...]
exim:x:79:clamav,mail
[...]
Kolejny feature jaki daje exiscan to odrzucanie plików z załacznikiem
˛
o określonym
rozszerzeniu. W tym celu dopisujemy zaraz po exiscan: nast˛epujace
˛ 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łacznikami
˛
sa˛ pliki: *.exe, *.pif, *.bat, *.scr, *.lnk oraz *.vbs. Teraz, jeżeli nie
chcemy aby skanowane były maile pochodzace
˛ 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˛eda˛ mogli, to przed):
accept hosts = /etc/mail/dontscan
Teraz, w pliku /etc/mail/dontscan umieszczamy adresy IP badź
˛ 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 zaczać
˛ oznaczać poczt˛e odpowiednimi
znacznikami oraz przyjać
˛ że poczta z tym znacznikiem nie była ponownie skanowana. Tak wi˛ec, przed końcowym accept dodajemy:
warn message = X-Scan-Signature: ${hmac{md5}{atutajwpiszhaslo} \
{$body_linecount}}
Exim spowoduje dodanie zaszyfrowanego ciagu
˛ znaków składajacego
˛
si˛e z hasła i
wielkości maila. Dzi˛eki temu ktoś kto nie pozna waszego hasła nie b˛edzie mógł sfałszować informacji o tym że mail został już zeskanowany. Teraz, aby taka poczta przechodziła bez skanowania, na samym poczatku
˛
po exiscan: dopisujemy:
211
Rozdział 17. Usługi dost˛epne w PLD
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˛edzie przechodził przez kilka z nich, tylko jeden b˛edzie musiał go przeskanować.
Walka ze spamem
Zjawisko spamu jest niezwykle ucia˛żliwe. W niektórych Stanach w USA traktowane
jest w kategoriach kryminalnych. Zapewne znasz jego definicj˛e lub przynajmniej
wiesz jak spam wyglada.
˛
W skrócie jest to wiadomość e-mail, której nie chciałeś
otrzymać. Exim posiada wbudowana˛ obsług˛e 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łajacym
˛
poczte a
serwerem MTA. Nie tylko odcina to cz˛eść robotów spamerskich ale także zmiejsza
ryzyko przecia˛żenia serwera.
Przejdźmy do konfiguracji. Wszystkie te wpisy powinny znaleść si˛e w sekcji ACL
CONFIGURATION w obr˛ebie 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˛e 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
212
Rozdział 17. Usługi dost˛epne w PLD
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)?)
delay = 5s
log_message = Stupid localhost HELO.
HELO musi być nazwa˛ domenowa˛ (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łna˛ nazwa˛ domenowa˛ (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˛e 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 sa˛ bardzo restrycyjnymi testami. Formalnie przez RFC nie jest
wymagane aby domena miała zdefiniowany rekord MX. Lecz każdy szanujacy
˛ si˛e
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}
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
213
Rozdział 17. Usługi dost˛epne w PLD
• deny message
Określamy jaka informacja zwrotna pojawi si˛e u nadawcy.
• delay
Opóźnienie po jakim komunikat określnony jako message zostanie zwrócony
nadawcy.
• dnslist
Lista systemów z bazami blokujacymi
˛
serwery open relay. Wymienione tutaj powinny skutecznie powstrzymać spam. Jeżeli nadal dostajesz niechciane maile, wykonaj nast˛epujace
˛ czynności. Sprawdź w nagłówku wiadomości adres IP serwera,
który przekazał Twojemu MTA poczt˛e. Wejdź na stron˛e: www.ordb.org/lookup/11
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˛e systemów RBL (Relay Black List). Można ja˛ wykorzystać dopisujac
˛ 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łacze
˛ ń z wszystkich serwerów za wyjatkiem
˛
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łaczyć
˛
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
Obsługa wielu domen w Eximie
Jeżeli czytasz ta˛ cz˛eść opisu konfiguracji exima stanałeś
˛ przed problemem obsługi
przez niego wi˛ecej 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
214
Rozdział 17. Usługi dost˛epne w PLD
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 poczatku
˛
sekcji routers. Dla przypomnienia
dodam, że poczatek
˛
sekcji oznacza si˛e słowem kluczowym begin.
Jak słusznie zauważyłeś, wpisy z virtusertable do złudzenia przypominaja˛ te z
system_aliases. Działa to właściwie w ten sam sposób. Podczas odbierania przesyłki exim czyta linijk˛e data. Ma w niej zdefiniowane, że ma szukać na podstawie
local_partczyli to co jest przed znakiem @ oraz domain czyli cz˛eści domenowej adresu. Wartości które zostana˛ podstawione zamiast tych zmiennych zostana˛ 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 zostana˛ aliasy systemowe. Jeżeli i tam użytkownik nie zostanie odnaleziony, zostanie wysłana wiadomość z odpowiednia˛ informacja˛ do nadawcy z komunikatem bł˛edu. Cz˛eść defaultalias jest prawie identyczna. Różnica tkwi jedynie w
opcji data. Sprawdzana jest jedynie cz˛eść 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˛edzie otrzymywał cała˛ poczt˛e
z domeny jakasdomena.pl. Po tych zabiegach exim powinien być już przygotowany
do obsługi wielu domen. Musisz pami˛etać aby go zrestartować po dokonaniu modyfikacji jego pliku konfiguracyjnego.
# /etc/rc.d/init.d/exim restart
Automatyczna odpowiedź - Vacations
W przypadku, gdy masz zamiar gdzieś wyjechać na dłużej i nie b˛edziesz miał dost˛epu do poczty, dobrym pomysłem jest ustawienie automagicznej odpowiedzi dla
ludzi, którzy do Ciebie pisza.˛ Tu z pomoca˛ przychodzi nam opcja w Eximie.
Na poczatku
˛
edytujemy plik /etc/mail/exim.conf i w sekcji routers przed
localuser router dodajemy nast˛epujace
˛ linijki:
user_vacation:
driver = accept
check_local_user
# nie odpisujemy na bł˛
edy badź
˛
listy dyskusyjne
condition = "${if or {{match {$h_precedence:} {(?i)junk|bulk|list}} {eq {$sender_a
no_expn
require_files = /var/mail/vacation/${local_part}/vacation.msg
# nie odpisujemy na maile od list dyskusyjnych oraz na powiadomienia o bł˛
edach
senders = " ! ^.*-request@.*:\
! ^.*@list*.*:\
! ^owner-.*@.*:\
! ^postmaster@.*:\
! ^listmaster@.*:\
! ^mailer-daemon@.*\
! ^root@.*"
transport = vacation_reply
215
Rozdział 17. Usługi dost˛epne w PLD
unseen
user = ${local_part}
no_verify
Nast˛epnie tworzymy katalog /var/mail/vacation , w którym b˛eda˛ si˛e znajdować
katalogi zawierajace
˛ nazw˛e użytkownika oraz pliki z informacjami o powodzie jego nieobecności. Powód taki wpisujemy do pliku vacation.msg znajdujacego
˛
si˛e w
/var/mail/vacation/NAZWA_UŻYTKOWNIKA/. Gdy już mamy te ustawienia za soba˛
w sekcji transport dodajemy nast˛epujace
˛ 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:}}} (au
text = "\
Witaj $h_from\n\n\
Ta wiadomość została wygenerowana automatycznie\n\
Tekst poniżej zawiera informacj˛
e od użytkownika:\n\
====================================================\n\n\
"
to = "$sender_address"
Ważna˛ cz˛eścia˛ tutaj jest opcja once_repeat, która sprawdza jak cz˛esto nadawcy b˛eda˛
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 - Implementacja protokołu Kerberos
Heimdal jest implementacja˛ nowoczesnego sieciowego protokołu uwierzytelniania
użytkowników Kerberos. Użytkownik po standardowym zalogowaniu za pomoca˛
hasła na czas trwania sesji otrzymuje specjalny unikalny klucz (w terminologii kerberos’a nazywany biletem (ang. ticket)) za pomoca˛ którego może uzyskać dost˛ep 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 zarzadzanie
˛
centralna˛ baza˛ kluczy (m.in. wydawanie nowych kluczy oraz odpowiadanie na pytania dotyczace
˛ ich autentyczności).
Uwaga:Kerberos nie zapewnia dystrybucji bazy użytkowników w sieci - do tego celu
najlepiej użyć usługi NIS.
Instalacja i konfiguracja KDC
Za pomoca˛ poldka instalujemy serwer i narz˛edzia 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˛edziemy używali kerberos’a (na serwerze i klientach)
[libdefaults]
default_realm = FOO.PL
216
Rozdział 17. Usługi dost˛epne w PLD
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ślna˛ domen˛e kerberos’a. Zamiast FOO.PL wpisujemy
wybrana˛ nazw˛e domeny, typowo jest to pisana wielkimi literami nazwa naszej domeny dns. kdc.foo.pl zast˛epujemy adresem serwera, na którym uruchomiony jest
serwer KDC heimdal’a.
clockskew określa maksymalna˛ różnic˛e czasu (w sekundach) pomi˛edzy serwerem a
klientami (jeżeli różnica czasu b˛edzie wi˛eksza niż podana, kerberos odmówi współpracy) dlatego dobrze w sieci uruchomić także usług˛e synchronizacji czasu ntp.
Sekcja [realms] definiuje domeny kerberosa. Można tu wymienić kilka niezależnych domen, określajac
˛ dla nich lokalizacj˛e serwerów kerberosa. kdc.foo.pl zast˛epujemy oczywiście nazwa˛ hosta na którym b˛edzie 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˛e znajduje. Nazwa dns zaczynajaca
˛ si˛e od kropki pasuje do dowolnej
poddomeny podanej domeny.
uruchamiamy usług˛e dystrybucji kluczy KDC:
# service heimdal start
Do zarzadzania
˛
domena˛ kerberos’a używamy narz˛edzia kadmin. Inicjalizujemy domen˛e i dodajemy użytkownika, w tym przypadku mrk (zostawiajac
˛ 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
dajac
˛ użytkownikowi [email protected] prawo do administracji kerberosem - w tym
przypadku kadmin wołamy z parametrem -p użytkownik
Logujemy si˛e w systemie na koncie zwykłego użytkownika (w naszym przykładzie
mrk) i próbujemy si˛e zalogować do domeny kerberosa:
$ kinit
kinit domyślnie próbuje uzyskać bilet dla zalogowanego użytkownika, można to
zmienić podajac
˛ 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
217
Rozdział 17. Usługi dost˛epne w PLD
Apr 13 11:02:40
Apr 13 21:02:40
krbtgt/[email protected]
Logowanie do systemu
Instalujemy moduł pam-pam_krb5.
# poldek -i pam-pam_krb5
Zmieniamy wybrane pliki /etc/pam.d/*, dodajac
˛ dodatkowo sprawdzanie hasła za
pomoca˛ nowego modułu:
Przykładowo /etc/pam.d/login wykorzystywany przez program login poprawiamy tak:
#zmieniamy linijk˛e
auth
required
pam_unix.so
sufficient
required
pam_unix.so
pam_krb5.so use_first_pass
na:
auth
auth
i dodajemy:
session optional pam_krb5.so
W ten sposób możemy si˛e 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˛e już podajac
˛ hasło kerberos’a.
Po zalogowaniu możemy jeszcze za pomoca˛ polecenia klist sprawdzić czy kerberos
wystawił nam bilet:
$ klist
Konfiguracja poszczególnych usług
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˛epowania w przypadku innych usług obsługujacych
˛
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 zwiazany
˛
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łna˛ nazwa˛ hosta wraz
z domena,˛ 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˛e podstawach konfiguracji sieci
SSH
Tworzymy konto dla daemona sshd. Konto musi miec nazw˛e w postaci:
host/hostname
218
Rozdział 17. Usługi dost˛epne w PLD
# 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˛ep do tego klucza robimy:
kadmin> ext_keytab host/host.foo.pl
Powyższe polecenie zapisuje klucz zwiazany
˛
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 znajdujacej
˛ si˛e w pliku /etc/heimdal/krb5.keytab. Z tej tablicy
kluczy domyślnie korzystaja˛ usługi używajace
˛ kerberos’a.
By
sshd
uwierzytelniał
użytkowników
za
pomoca˛ 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˛e, na która˛ si˛e logujemy.
Po restarcie sshd, jeżeli mamy wystawiony bilet kerberosa powinniśmy móc zalogować si˛e przez ssh na nasz serwer bez pytania o hasło.
Powyższy opis dotyczy sytuacji, gdy serwer sshd znajduje si˛e 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˛epnie przenieść plik sshd.keytab na maszyn˛e 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
Cyrus IMAP
Doinstalowujemy plugin gssapi do sasl’a
# poldek -i cyrus-sasl-gssapi
Tworzymy konto dla cyrrus’a. Konto ma mieć nazw˛e w postaci imap/hostname:
kadmin> add -r imap/host.foo.pl
exportujemy klucz do tablicy kluczy:
kadmin> ext_keytab /etc/heimdal/cyrus.keytab
Wybieramy inna˛ niż domyślna tablic˛e 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˛ep do tablicy kluczy użytkownikowi cyrus:
219
Rozdział 17. Usługi dost˛epne w PLD
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 potrafia˛ użyć protokołu kerberos do uwierzytelnienia użytkownika to evolution i mutt
Apache
Doinstalowujemy moduł apache’a obsługujacy
˛ uwierzytelnianie za pomoca˛ kerberos’a:
# poldek -i apache-mod_auth_kerb
Dodajemy konto usługi w domenie kerberos’a:
kadmin> add -r HTTP/hostname
hostname zast˛epujac
˛ nazwa˛ 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˛e tablicy kluczy możemy tak jak wcześniej podać apache’owi globalnie
przez zmienna˛ środowiskowa,˛ dopisujac
˛ do /etc/sysconfig/apache:
export KRB5_KTNAME=/etc/heimdal/httpd.keytab
Można to także zrobić za pomoca˛ dyrektywy Krb5Keytab w pliku konfiguracyjnym
apache’a
Przykładowa konfiguracja dost˛epu może wygladać
˛
nast˛epujaco:
˛
<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˛epu z prawdopodobnie zakończy si˛e pytaniem o hasło. Naszym celem
jest jednak dost˛ep do serwisu www’a za pomoca˛ biletu kerberos’a, bez zb˛ednego
podawania hasła. W firefox’ie wpisujemy url: about:config, i szukamy pozycji:
network.negotiate-auth.delegation-uris
network.negotiate-auth.trusted-uris
Określaja˛ one url’e, dla których przegladarka
˛
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.
220
Rozdział 17. Usługi dost˛epne w PLD
Jabber 2 - Serwer typu Instant Messaging
Wstep
˛
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.).
Zaleta˛ jabbera jest to, że jest otwarty, zapewnia darmowa˛ i pełna˛ infrastruktur˛e (serwery, a także klienty) dla osób prywatnych i użytkowników komercyjnych. Charakteryzuje si˛e także dużym bezpieczeństwem - rozmowy, a także komunikacja mi˛edzy
serwerami może być szyfrowana.
W PLD jest kilka serwerów obsługujacych
˛
komunikacj˛e 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, zdobywajacy
˛ popularność ejaberd czy opisywany poniżej jabberd w wersji 2.0.
Opisana zostanie podstawowa konfiguracja, umożliwiajaca
˛ połaczenia
˛
szyfrowane,
a do składowania danych przez jabberd2 wykorzystamy silnik SQL Postgresql.
Instalacja
Pakiet jabberd2 instalujemy za pomoca˛ 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˛etać, że jabberd2 może współpracować także z MySQL,
sqlite3, a także znacznie prostrza˛ wersja˛ bazy db.
Konfiguracja DNS i rekordów SRV
Zanim zaczniemy, musimy stworzyć domen˛e, która jednoznacznie b˛edzie wskazywała na maszyn˛e Jabbera. Dodamy także rekordy SRV, które służa˛ 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
_jabber._tcp.jabber
_xmpp-server._tcp.jabber
_xmpp-client._tcp.jabber
A
10.1.1.1
IN SRV 20 0 5269
IN SRV 20 0 5269
IN SRV 20 0 5222
;Tu wpisujemy IP naszej domeny
domena.org.
domena.org.
domena.org.
Oczywiście nie możemy zapomnieć o zmianie rekordu serial w strefie domeny i restarcie demona named
Konfiguracja portów (jeżeli korzystamy z firewall-a)
W przypadku wykorzystwania zapór ogniowych w systemie powinniśmy otworzyć
porty tcp dla nast˛epujacych
˛
portów:
•
5222 - Dla komunikacji klienckiej (połaczenie
˛
nieszyfrowane)
•
5223 - Dla komunikacji klienckiej (połaczenie
˛
szyfrowane SSL)
•
5269 - Dla komunikacji mi˛edzy serwerami Jabbera
•
5347 - Dla komunikacji mi˛edzy serwerami Jabbera, wykorzystany przez
dodatkowe transporty (np. transport GG)
221
Rozdział 17. Usługi dost˛epne w PLD
Pami˛etać należy, że powyższe porty sa˛ 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˛e pozostawić proponowane wyżej porty.
Oczywiście, jeżeli nie chcemy aby nasz serwer był widoczny na zewnatrz
˛ naszej sieci
(np. jest przeznaczony tylko dla wewn˛etrzej sieci intranetowej) nie otwieramy portu
przeznaczonego do komunikacji mi˛edzy serwerami (u nas to porty 5269 i 5347).
Podstawowa konfiguracja Jabberd2
Możemy wreszcie skonfigurować wst˛epnie usług˛e jabberd2. Wszystkie pliki konfiguracyjne znajduja˛ si˛e w katalogu /etc/jabber.
W pliku /etc/jabber/c2s.xml w okolicy tagu "local" dodajemy nasza˛ domen˛e:
<!-- 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 nasza˛ domen˛e:
<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˛e 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 wystarczajacy
˛ sposób. Jednak przy wi˛ekszej ich ilości, bardziej praktyczne jest trzymanie tych danych w bazie SQL.
Konfiguracja dla SQL (Postgresql)
Przy poprawnie działajacym
˛
postgresie, z uprawnionego dla niego użytkownika
tworzymy baz˛e jabberd2
$ createdb -U postgres jabberd2
222
Rozdział 17. Usługi dost˛epne w PLD
Nast˛epnie przypisujemy do tej bazy użytkownika jabberd2 i ustalamy dla niego hasło
i opcje dost˛epu do bazy:
$ createuser -P -U
Enter password for
Enter it again:
Shall the new user
Shall the new user
CREATE USER
postgres jabberd2
user "jabberd2":
be allowed to create databases? (y/n) n
be allowed to create more new users? (y/n) n
Teraz musimy wypełnić nowoutworzona˛ baz˛e 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łaczenie
˛
z baza˛ b˛edzie odbywać si˛e po localhost, tak
wi˛ec musimy zadbać o to, żeby postgres umożliwiał takie połaczenie
˛
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 porzadku
˛
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˛epnie sekcji "pgsql" aby w odpowiednim miejscu
wpisać hasło dost˛epu do bazy jabberd2. Możemy tam także zmienić sposób dost˛epu:
<!-- 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żliwiaja˛ 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>
223
Rozdział 17. Usługi dost˛epne w PLD
<!-- 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˛e już cieszyć bardziej zaawansowana˛
funkcjonalnościa˛ naszego komunikatora.
Szyfrowanie
Przed konfiguracja˛ 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.pe
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˛e, abyśmy w polu Common Name wpisali nasza˛ domen˛e, obsługiwana˛ przez serwer jabbera) usuniemy hasło z klucza prywatnego:
# openssl rsa -in privkey.pem -out privkey.pem
Nast˛epnie połaczymy
˛
oba klucze w jeden plik i skasujemy klucz prywatny:
# cat privkey.pem >> server.pem
# rm privkey.pem
Zmieniamy nazw˛e naszego certyfikatu (dla porzadku),
˛
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˛eciu plików konfiguracyjnych znajdujacych
˛
si˛e w /etc/jabber
tj.
router.xml, sm.xml, resolver.xml, s2s.xml, c2s.xml
znajdujemy
zakomentowany ciag
˛ wskazujacy
˛ na nasz certyfikat:
<!-<pemfile>/etc/jabber/server.pem</pemfile>
-->
224
Rozdział 17. Usługi dost˛epne w PLD
Kasujemy komentarze (czyli <!-- i -->) i wpisujemy odpowiednia˛ scieżk˛e do naszego
certyfikatu:
<pemfile>/var/lib/openssl/certs/jabber.pem</pemfile>
Kolejny restart demona jabber i możemy cieszyć si˛e połaczeniami
˛
szyfrowanymi.
Zakończenie
Opisane powyżej sposoby konfiguracji nie wyczerpuja˛ oczywiście wszystkich aspektów. Zach˛ecamy do odwiedzenia strony z oryginalna˛ dokumentacja˛ jabbera13. Mimo,
że niektórym może sprawić problem j˛ezyk angielski, to podane przykłady w jasny
sposób omawiaja˛ także zaawansowane zagadnienia.
MySQL - System Zarzadzania
˛
Relacyjnymi Bazami Danych (ang.
RDBMS)
Co to jest MySQL?
MySQL jest Systemem Zarzadzania
˛
Relacyjnymi Bazami Danych. Znany i ceniony
jest przede wszystkim ze wzgl˛edu na swoja˛ niebywała˛ wydajność i szybkość działania. Świetnie nadaje si˛e 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˛esto mówia,˛ jak to bardzo brakuje mu wielu ficzerów, które posiadaja˛ prawdziwe, duże systemy baz danych. Ze
swojego doświadczenia wiem, że cz˛eść z tych ludzi nawet nie rozróżnia wersji systemu, które oferuje nam firma MySQL AB (producent MySQL).
Ogólne cechy MySQL
•
Napisany w C i C++ (wydajność!).
•
API dla wielu j˛ezyków programowania: C, C++, Eiffel, Java, Perl, PHP, Python,
Ruby, Tcl.
•
Pełna wielowatkowość,
˛
korzystajaca
˛ z watków
˛
kernela. Oznacza to, że MySQL
b˛edzie pracował na maszynie wieloprocesorowej, jeśli tylko taka˛ posiadasz.
•
Opcjonalna obsługa transakcji.
•
B-drzewa z kompresowanymi indeksami. To wam si˛e przyda, jakbyście mieli wieeeelkie bazy ;) Wystarczy powiedzieć, że znaczaco
˛ wpływa na czas wyszukiwania
i pobierania danych (wierszy) z bazy.
•
Istnieje możliwość "osadzenia" (ang. embed) serwera MySQL w aplikacji, która˛ piszemy. Jeśli ktoś potrzebuje funkcjonalności systemu baz danych, a niekoniecznie
chce si˛e bawić w klient-serwer, to czemu nie?
•
Duża liczba typów danych w kolumnach. Liczby, ciagi
˛ znakowe, obiekty binarne
(BLOB), data & czas, typy wyliczeniowe, zestawy. Na uwag˛e zasługuje fakt, że w
MySQL możemy dana˛ kolumn˛e dostosować do pewnej wielkości danych, które
zamierzamy w niej przechowywać (np. TINYINT, a nie INT), tym samym uzyskujemy wi˛eksza˛ wydajność i mniejsze zużycie pami˛eci (również dyskowej). Istnieje
możliwość definiowania niektórych typów danych jako narodowych (różne standardy kodowania chociażby).
•
Obsługa klauzul agregujacych
˛
i grupujacych
˛
SQL.
225
Rozdział 17. Usługi dost˛epne w PLD
•
Złaczenia
˛
zewn˛etrzne (LEFT & RIGHT).
•
Komenda SHOW pozwalajaca
˛ przegladać
˛
informacje na temat baz, tabel i indeksów. Komenda EXPLAIN opisujaca
˛ prac˛e optymalizatora zapytań.
•
Bardzo prosty (z punktu widzenia administratora) system zabezpieczeń. Wszystkie hasła sa˛ szyfrowane.
•
Połaczenia
˛
z serwerem przez: TCP/IP, ODBC, JDBC.
•
Lokalizacja (w sensie j˛ezykowym) serwera. Komunikaty m.in. po polsku.
Instalacja
Instalacj˛e oprogramowania przeprowadzimy oczywiście z pomoca˛ naszego poldka.
Logujemy si˛e jako root, badź
˛ używamy polecenia sudo, jeżeli mieliśmy je skonfigurowane do tego celu. Pierwsza˛ rzecza,˛ która˛ b˛edziemy musieli zrobić, jest ściagni˛
˛ ecie
i zainstalowanie odpowiednich pakietów z repozytorium PLD. Można zrobić to używajac
˛ zarówno trybu wsadowego, jak i interaktywnego. Podam oba sposoby, wybierz sobie ten, który bardziej Ci odpowiada :) (osobiście wol˛e tryb interaktywny, ze
wzgl˛edu na tab-completion).
Najpierw uruchamiamy poldka. Można podać mu flag˛e -n, która oznacza źródło,
z którego zamierzamy ściagać
˛
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.
Instalacja w trybie wsadowym
W trybie wsadowym poldka, instalacja wyglada
˛ nast˛epujaco:
˛
# poldek -n bentel -i mysql mysql-client mysql-libs
Instalacja w trybie interaktywnym
W trybie interaktywnym poldka, instalacja wyglada
˛ tak:
# poldek -n
Wczytywanie
Przeczytano
Wczytywanie
Przeczytano
bentel
ftp://spirit.bentel.sk/mirrors/PLD/[...]/packages.dir.gz...
5116 pakietów
/root/.poldek-cache/packages.dir.dbcache.var.lib.rpm.gz...
450 pakietów
Witaj w poldkowym trybie interaktywnym. Wpisz "help" aby otrzymać pomoc.
poldek>
Teraz przyst˛epujemy do instalacji pakietów MySQL:
poldek> install mysql mysql-client mysql-libs
poldek sam zadba o spełnienie wymaganych zależności.
Konfiguracja MySQL
Żeby móc sprawnie (i bezpiecznie) używać naszego świeżo zainstalowanego serwera, musimy go odpowiedno skonfigurować.
226
Rozdział 17. Usługi dost˛epne w PLD
Otworzymy naszym ulubionym edytorem tekstu plik konfiguracyjny demona MySQL. W przypadku użycia edytora Vim wydajemy nast˛epujac
˛ a˛ komend˛e:
# vim /etc/mysql/clusters.conf
Jeżeli nie zamierzamy zmieniać lokacji, w której b˛edzie u nas pracował MySQL, to po
prostu odkomentujmy linijk˛e z MYSQL_DB_CLUSTERS, a jeżeli zamierzamy umieścić
serwer MySQL w innym miejscu, to należy ta˛ linijk˛e odkomentować, ale dodatkowo
zmienić ścieżk˛e.
# standard setting
MYSQL_DB_CLUSTERS="/var/lib/mysql"
Upewniamy si˛e, że jesteśmy zalogowani na konsoli jako root i wydajemy polecenie:
# /etc/rc.d/init.d/mysql init
Polecenie to b˛edzie 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˛e bład,
˛ mówiacy
˛ o duplikacie wpisu
localhost-mysql dla klucza 1 - możecie go zignorować.j
Teraz możemy przystapić
˛
już do edycji właściwiego pliku konfiguracyjnego
RDBMS.
Używajac
˛
naszego
ulubionego
edytora
otwieramy
plik
/var/lib/mysql/mysqld.conf
# vim /var/lib/mysql/mysqld.conf
Teraz możemy przystapić
˛
do jego edycji. Pierwsza˛ grupa˛ opcji, na jaka˛ 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˛eda˛ nasze bazy. Można zo-
stawić tak jak jest.
user to użytkownik "pod którym" b˛edzie działał nasz serwer, w sensie - uruchomie-
nie serwera wyglada
˛ tak, jakby to ten użytkownik, reprezentowany przez zmienna˛
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˛edów, to opcja port. Chodzi o
dwa przypadki:
•
Chcemy umożliwić dost˛ep do naszego serwera baz danych z zewnatrz,
˛
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˛epny.
•
Mamy maszyn˛e z zewn˛etrznym IP (taka,˛ do której można si˛e podłaczyć
˛
z Internetu), nie blokowaliśmy jednak dost˛epu do MySQL, ale chcielibyśmy podnieść choć
troszeczk˛e poziom bezpieczeństwa i udost˛epnić 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
227
Rozdział 17. Usługi dost˛epne w PLD
Jeżeli chcemy zablokować dost˛ep do serwera MySQL z zewnatrz
˛ (z sieci), to... nie
robimy nic. A jeśli chcemy umożliwić innym komputerom łaczenie
˛
si˛e z naszym serwerem, to należy wykomentować (dodać #) linijk˛e z skip-networking.
Gdyby nam si˛e kiedyś coś popsuło (zapomnieliśmy hasła, nie możemy dostać si˛e do
bazy), to przyda si˛e odkomentowanie tej opcji:
# Emergency option. Use only if you really need this.
#skip-grant-tables
Przydatna˛ rzecza˛ (ale w sumie tylko, jeśli zamierzamy udost˛epniać bazy na
zewnatrz),
˛
b˛edzie właczenie
˛
logowania połacze
˛ ń i zapytań (zwalnia prac˛e serwera).
Dodam, że można oczywiście zmienić standardowa˛ ścieżk˛e, do której zapisywane
sa˛ 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ływaja˛ bezpośrednio na prac˛e i wydajność serwera,
nie b˛ed˛e si˛e wi˛ec w nie zagł˛ebiał. To troch˛e trudniejszy temat. Jak ktoś chce bardzo
zoptymalizować prac˛e swojego serwera, to polecam lektur˛e dokumentacji MySQL.
Przydatna jest również znajomość zagadnień relacyjnych baz danych i SQL’a. Przykładowo zerkniemy na jedna˛ zmienna:˛
#set-variable = max_connections=100
Odkomentowanie tej linijki pozwoli nam na ustawienie maksymalnej liczby poła˛
czeń, które nasz MySQL b˛edzie mógł przyjać
˛ 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łaczyć
˛
si˛e do mojego serwera w jednej chwili i
ile takich połacze
˛ ń przypada średnio na jedna˛ osob˛e?". Odpowiedź wpisujemy w
zmienna˛ max_connections. Innym pytaniem mogłoby być "czy skrypty obsługujace
˛
moje strony www korzystaja˛ ze stałych (persistent) połacze
˛ ń?"
Ponieważ "Polacy nie g˛esi i swój j˛ezyk maja"
˛ odkomentujemy jeszcze jedna˛ linijk˛e w
pliku konfiguracyjnym, aby właczyć
˛
polskie komunikaty:
# Language
language
= polish
W tej chwili nasz serwer powinien być już skonfigurowany do pracy. Upewniamy
si˛e, ż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˛e 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łaczonym
˛
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˛e do pliku mysql.sock, który powinien znajdować si˛e w
katalogu, w którym umieściliśmy MySQL.
228
Rozdział 17. Usługi dost˛epne w PLD
Demon MySQL
Demon MySQL standardowo startuje wraz z systemem, ale przydaje si˛e znać dwie
komendy. Aby właczyć
˛
lub wyłaczyć
˛
serwer, b˛edac
˛ zalogowanym jako root, badź
˛
używajac
˛ komendy sudo, wydajemy polecenie:
# /etc/rc.d/init.d/mysql start | stop
wstawiajac
˛ oczywiście opcje start lub stop, w zależności od tego, co chcemy zrobić.
mysqladmin
mysqladmin jest narz˛edziem, za pomoca˛ którego możemy tworzyć i usuwać bazy
oraz przeładowywać konfiguracj˛e. Nie b˛edziemy go używać do wyłaczania
˛
serwera, bo od tego jest skrypt omówiony powyżej. Narz˛edzie wywołuje si˛e poleceniem
mysqladmin, a flagi i argumenty (opcje) polecenia służa˛ 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 nowa˛ baz˛e danych o nazwie nazwabazy.
•
drop nazwabazy - usuwa baz˛e danych o nazwie nazwabazy
•
flush-privileges albo reload - obie opcje robia˛ to samo - przeładowuja˛ 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
mysqldump to program, służacy
˛ 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.
- dodaje DROP TABLE do skryptów tworzacych
˛
tabele z
backup-u (jak b˛edziemy przywracać dane). Przydatne, kiedy np chcemy
przywrócić już istniejac
˛ a˛ tabel˛e. Spowoduje to najpierw jej usuni˛ecie, a nast˛epnie
utworzenie od nowa z danych, które mieliśmy w kopii zapasowej. Ogólnie, żeby
uniknać
˛ ewentualnych problemów z duplikatami wierszy, itp. warto ta˛ opcj˛e
właczyć.
˛
• --add-drop-table
- w kopii nie zostanie zawarta informacja o tworzeniu tabel
(nazwy tabel, typy pól, indeksy itp.). Przydatne, jeżeli chcemy zrobić kopi˛e tylko
danych, a nie całej struktury bazy.
229
• --no-create-info
Rozdział 17. Usługi dost˛epne w PLD
- Ta opcja pozwala zapisać sama˛ informacj˛e o strukturze bazy i tabel,
nie zapisuje natomiast danych.
• --no-data
- tworzy kopi˛e bazy nazwabazy wraz z rozszerzonymi informacjami MySQL, blokowaniem tabel, itd. Chyba najcz˛eściej stosowana opcja przy
robieniu kopii zapasowych.
• --opt nazwabazy
Należy pami˛etać, ż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 przydatna˛ opcja˛ jest --opt omówiona wcześniej. Polecam jej stosowanie
do wykonywania kopii całej bazy, włacznie
˛
ze struktura˛ tabel i samymi danymi. Aby
stworzyć pełna˛ kopi˛e zapasowa˛ bazy baza1 i zapisać ja˛ w pliku baza1_kopia.sql:
# mysqldump -u mysql --opt baza1 > baza1_kopia.sql -p
Przywracanie baz wykonanych poleceniem mysqldump wyglada
˛ tak:
# mysql -u mysql baza1 < baza1_kopia.sql -p
Inna metoda (w sumie różniaca
˛ si˛e zapisem):
# mysql -u mysql -e ’source /sciezka_do_pliku/baza1_kopia.sql’ baza1 -p
phpMyAdmin
TODO
NFS - Network File System
NFS jest to usługa pozwalajaca
˛ udost˛epniać zasoby dyskowe komputerom w sieci.
Serwer udost˛epnia katalog(i) klientom, którzy moga˛ 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.
Serwer
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˛e portmap, a nast˛epnie 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˛e plikowi /etc/sysconfig/nfsd, który może wygladać
˛
nast˛epujaco:
˛
SERVICE_RUN_NICE_LEVEL="+0"
230
Rozdział 17. Usługi dost˛epne w PLD
#RPCMOUNTOPTIONS="--no-nfs-version 3"
RPCNFSDCOUNT=8
NFSDTYPE=K
• SERVICE_RUN_NICE_LEVEL
- ustala priorytet serwera
- opcja dla jader
˛
z serii 2.2, dla
współczesnych kerneli powinna być zakomentowana
• #RPCMOUNTOPTIONS="--no-nfs-version 3"
• RPCNFSDCOUNT
- podaje liczb˛e instancji serwera, czyli ilu klientów może obsłużyć
jednocześnie
- podaje czy serwer ma pracować jako oddzielny demon (U), czy w trybie jadra
˛
(K). Zalecane jest to drugie z rozwiaza
˛ ń, gdyż zapewnia wi˛eksza˛ wydajność.
• NFSDTYPE
Modyfikacja pliku konfiguracji wymaga restartu uslugi.
Udostepnianie
˛
Uruchomiliśmy serwer, teraz przyszedł czas na udost˛epnienie zasobów. W pliku
/etc/exports definiuje si˛e udost˛epniane katalogi, ich list˛e podajemy w postaci wierszy, które maja˛ nast˛epujac
˛ a˛ składni˛e:
$katalog
$klient1($opcja1,$opcja2,...)
$klient2($opcja1,$opcja2,...)
•
$katalog - udost˛epniony katalog. Warto tutaj wspomnieć, że jeżeli udost˛epniamy
dany katalog to nie możemy udost˛epnić w nowej regułce katalogu b˛edacego
˛
jego
ojcem jak i synem, jeżeli leża˛ na tym samym systemie plików. Udost˛epnianie partycji FAT, itp. też nie jest dobrym rozwiazaniem.
˛
•
$klient - IP lub nazwa komputera, któremu udost˛epniamy katalog. Można podać
także cała˛ sieć, wtedy zezwolimy wszystkim komputerom w sieci na przegladanie
˛
i/lub zapisywanie do katalogu.
•
$opcje - tutaj możemy ustalić m.in. czy zasób ma być udost˛epniony tylko do
odczytu, czy także do zapisu, oraz nałożyć inne ograniczenia. Wszystkie opcje
opisane sa˛ w manualu (man exports).
Oto przykładowe wpisy do /etc/exports:
/srv/pub
/home
192.168.0.1(ro) 192.168.0.2(rw)
192.168.0.0/255.255.255.0(rw)
Pomijajac
˛ 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 sa˛ poprawne:
# exportfs -v
Polecenie to wyświetli list˛e katalogów gotowych do wyeksportowania, jeśli któryś z
udziałów nie jest wyświetlony, to prawdopodobnie popełniliśmy jakiś bład
˛ w składni. Gdy jesteśmy pewni, że chcemy udost˛epnić udziały NFS, to wydajemy polecenie:
231
Rozdział 17. Usługi dost˛epne w PLD
# exportfs -rv
W PLD stworzono grup˛e systemowa˛ 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 zarzadzania
˛
grupami użytkowników opisano w sekcja Grupy w Rozdział 14.
Klient
Konfiguracj˛e 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, dostarczajacy
˛
wymagany rc-skrypt:
/etc/rc.d/init.d/nfsfs.
Teraz przyszedł czas na połaczenie
˛
si˛e z zasobem NFS, w tym celu musimy go zamontować np.:
# mount serwer.net:/srv/pub /mnt/net -t nfs
serwer.net to IP badź
˛ nazwa naszego serwera, /srv/pub jest przykładowym udost˛epnionym katalogiem na serwerze (wpisaliśmy go wcześniej do /etc/exports).
Katalog /mnt/net to przykładowe miejsce podmontowania zasobu. Można użyć do-
datkowo flagi -o a po niej podać potrzebne nam opcje montowania. Pełna˛ list˛e opcji
znajdziemy w podr˛eczniku systemowym: man 5 nfs.
Jeśli nic nie stoi na przeszkodzie abyśmy podłaczali
˛
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 wyglada
˛ znajomo, ale uwag˛e zwracaja˛ opcje hard i intr. Otóż hard oznacza, że
programy korzystajace
˛ z zasobów NFS w momencie awarii serwera zostana˛ zawieszone w oczekiwaniu na dost˛ep do danych i nie b˛edzie możliwości ich odwieszenia
w postaci polecenia kill, chyba, że dodamy opcj˛e intr dzi˛eki czemu b˛edziemy mogli zabić dany proces. Zamiast hard możemy użyć opcji soft, jednak w przypadku
awarii serwera NFS sygnalizuje bład
˛ programom korzystajacym
˛
z zasobów. Wada˛
tego rozwiazania
˛
jest to, że nie wszystkie programy potrafia˛ poradzić sobie z takim
komunikatem i może dojść do utraty danych.
Bezpieczeństwo serwera
Musimy zadbać o bezpieczeństwo naszego serwera, podstawowym sposobem
zabezpieczania zasobu jest ograniczenie dost˛epu. Możemy go ograniczać za
pomoca˛ ustawień w pliku /etc/exports, za pomoca˛ 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˛ep do naszych usług wpisujac
˛ do pliku pliku
/etc/tcpd/hosts.deny:
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
Nast˛epnie 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ła˛ podsieć.
portmap: 192.168.0.0/255.255.255.0
232
Rozdział 17. Usługi dost˛epne w PLD
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˛edu nie bardzo nadaje si˛e do udost˛epniania w Internecie, jeśli to tylko
możliwe lepiej użyć protokołu FTP lub WebDAV.
Dostrajanie wydajności
Wolne działanie protokołu NFS wskazuje przeważnie na brak odpowiedniego dostrojenia połaczenia,
˛
wystarczy ustawić kilka opcji by uzyskać zaskakujaco
˛ duży
wzrost wydajności. Podane poniżej zalecenia dotycza˛ konfiguracji klienta.
Na poczatek
˛
zajmiemy si˛e opcjami rsize i wsize. Dzi˛eki nim możemy zwi˛ekszyć
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˛edzie wygladać
˛
teraz nast˛epujaco:
˛
192.168.0.1:/usr/local
/usr/local
nfs
rw,hard,intr,rsize=8192,wsize=8192
Domyślnie NFS działa w oparciu o protokół UDP, doświadczenie pokazuje jednak, że
przełaczenie
˛
w tryb TCP może w niektórych wypadkach zwi˛ekszyć szybkość przesyłu danych. Niestety nie każdy serwer NFS obsługuje połaczenia
˛
TCP, wi˛ec nie wsz˛edzie możemy użyć tej opcji. Na szcz˛eście PLD zawiera demona pozwalajacego
˛
na
używanie TCP. Aby właczyć
˛
ta˛ opcj˛e 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˛e eksperymentować z ustawieniami, na
poczatek
˛
dobrym pomysłem może być użycie obu powyższych wskazówek. Wi˛ecej
o dostrajaniu NFS-a można odnaleźć w podr˛eczniku systemowym.
PDNS (Power DNS) - Serwer Nazw
Power DNS14 zwany w dalszej cz˛eś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) daja˛ szerokie możliwości tworzenia skryptów lub
interface zarzadzaj
˛
acych.
˛
Sam PDNS jest uważany za zdecydowanie bezpieczniejszy
niż Bind, a także od niego szybszy - zwłaszcza przy wi˛ekszej ilości obsługiwanych
domen.
Wstep
˛
W tym rozdziale zostanie omówiona podstawowa instalacja, konfiguracja z baza˛
Postgresql, a także wst˛epna konfiguracja przykładowej domeny. Oczywiście wi˛ecej
szczegółów możemy znaleźć w oryginalnej dokumentacji15.
Instalacja
Instalacja przebiega standardowo za pomoca˛ poldka.
poldek> install pdns
233
0
Rozdział 17. Usługi dost˛epne w PLD
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˛ec jeżeli
nie mamy Postgresql to instalujemy go i poprawnie konfigurujemy.
Konfiguracja Postgresql dla PDNS
Nast˛epnym krokiem b˛edzie 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˛edzi np. phpPgAdmin
Najpierw z konta użytkownika uprawnionego do operacji na bazie tworzymy baz˛e:
$ createdb -U postgres powerdns
Tworzymy także użytkownika dla w/w bazy:
$ createuser -P -U
Enter password for
Enter it again:
Shall the new user
(y/n) n
Shall the new user
users? (y/n) n
CREATE USER
postgres pdns
user "pdns":
be allowed to create databases?
be allowed to create more new
Teraz za pomoca˛ 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
);
234
Rozdział 17. Usługi dost˛epne w PLD
GRANT
GRANT
GRANT
GRANT
GRANT
SELECT
ALL ON
ALL ON
ALL ON
ALL ON
ON supermasters TO pdns;
domains TO pdns;
domains_id_seq TO pdns;
records TO pdns;
records_id_seq TO pdns;
Konfiguracja PDNS
W /etc/pdns/pdns.conf konfigurujemy działanie programu PDNS. Przykładowa
konfiguracja PDNSa współpracujacego
˛
z baza˛ Postgresql może wygladać
˛
nast˛epuja˛
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. serwe
# 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łaczenie
˛
usługi monitorowania pracy PDNS przez WWW
webserver-address=10.1.1.1 # Adres IP strony monitorujacej
˛
prac˛
e PDNS
webserver-password=hasło_do_strony_monitorujacej
˛
webserver-port=8088
# port strony monitorujacej
˛
Krzyżyk "#" na poczatku
˛
oznacza komentarz badź
˛ wyłaczenie
˛
danej opcji. Oryginalne teksty komentarzy sa˛ na tyle czytelne, że tylko niektóre opcje skomentowalismy
po polsku.
Domeny
Praktycznie PDNS jest gotowy do pracy. Musimy jeszcze wypełnić treścia˛ baz˛e - czyli dodać domen˛e (domeny). Przykładowa˛ domen˛e zaprezentujemy w formie tzw.
"dump-a" bazy. Jest to na tyle czytelne, że skomentowane zostana˛ 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;
235
Rozdział 17. Usługi dost˛epne w PLD
--- 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
INSERT INTO domains VALUES
-- W pierwszym ID podajemy
-- W drugim ID definiujemy
(1, ’foo.com’, NULL, NULL, ’NATIVE’, NULL, NULL);
(2, ’1.1.10.in-addr.arpa’, NULL, NULL, ’NATIVE’, NULL, NULL)
domen˛
e ’foo.com’
domen˛
e odwrotna˛ dla danego IP
--- Data for Name: records; Type: TABLE DATA; Schema: public; Owner: pdns
--- Poniżej zgodnie z określonymi ID definiowane sa˛ kolejno strefy
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INSERT
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
INTO
records
records
records
records
records
records
records
records
records
records
records
records
records
records
records
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
VALUES
(2, 1, ’localhost.foo.com’, ’A’, ’127.0.0.1’, 120, NULL, NUL
(3, 1, ’www.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(5, 1, ’dns.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(6, 1, ’ftp.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(7, 1, ’poczta.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(8, 1, ’pop3.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(9, 1, ’smtp.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(10, 1, ’ssh.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(11, 1, ’jabber.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(1, 1, ’foo.com’, ’SOA’, ’localhost user.foo.com 1’, 86400,
(16, 1, ’foo.com’, ’TXT’, ’Serwer PDNS’, 300, NULL, NULL);
(17, 1, ’foo.com’, ’NS’, ’ns.foo.com’, 300, NULL, NULL);
(4, 1, ’mail.foo.com’, ’A’, ’10.1.1.1’, 120, NULL, NULL);
(18, 1, ’foo.com’, ’MX’, ’mail.foo.com’, 300, 5, NULL);
(19, 1, ’foo.com’, ’A’, ’10.1.1.1’, 300, 0, NULL);
-- Poniżej definiujemy rekordy SRV
INSERT INTO records VALUES (12, 1,
’SRV’, ’0 5269 foo.com’, 300, 10,
INSERT INTO records VALUES (13, 1,
’SRV’, ’0 5269 foo.com’, 300, 10,
INSERT INTO records VALUES (14, 1,
’SRV’, ’0 5222 foo.com’, 300, 10,
dla serwera Jabber
’_jabber._tcp.jabber.foo.com’,
NULL);
’_xmpp-server._tcp.jabber.foo.com’,
NULL);
’_xmpp-client._tcp.jabber.foo.com’,
NULL);
-- Domena odwrotna
INSERT INTO records VALUES (15, 2, ’1.1.1.10.in-addr.arpa’, ’PTR’, ’foo.com’, 86400, NU
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, NU
--- Data for Name: supermasters; Type: TABLE DATA; Schema: public; Owner: pdns
---- PostgreSQL database dump complete
--
236
Rozdział 17. Usługi dost˛epne w PLD
Wszelkie zmiany lub dodawanie nowych domen możemy wykonywać na bazie danych lub wykorzystujac
˛ do tego odpowiednie skrypty. Teraz możemy uruchomić demona PDNS wykorzystujac
˛ skrypt:
# /etc/init.d/pdns start
Należy pami˛etać, że jeżeli wcześniej używalismy BINDa badź
˛ innnego demona do
obsługi nazw domenowych, należy go przed uruchomieniem PDNS wyłaczyć.
˛
Po uruchomieniu serwisu możemy za pomoca˛ przegladarki
˛
http wejść na stron˛e
monitorujac
˛ a˛ prac˛e PDNS (odpowiednie opcje dotyczace
˛ 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 dotyczacych
˛
pracy naszego serwera nazw.
Postfix - Transport poczty elektronicznej (MTA)
Postfix jest MTU czyli w wielkim skrócie demonem poczty elektronicznej. No tak,
w sumie powiecie ściagamy
˛
poldkiem instalujemy i działa... działa ale chcemy coś
wi˛ecej... chcemy by nasz smtpd był ładnie skonfigurowany.
Zaczynamy
Ściagamy
˛
to co nam b˛edzie potrzebne. Wiadomo... postfix i dodatki, które mu sa˛
potrzebne:
poldek -i postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-saslauthd \
cyrus-sasl-login
A tutaj coś co b˛edzie nam potrzebne do tworzenia certyfikatów.
poldek -i openssl-tools
A tutaj coś żebyśmy mogli pobrać poczt˛e z serwera.
poldek -i tpop3d inetd rc-inetd
Konfiguracja
Przyszedł czas na konfiguracj˛e postfix-a.
# echo ’pwcheck_method:saslauthd’ > /etc/sasl/smtpd.conf
Należy jeszcze sprawdzić czy w /etc/pam.d/ znajduje si˛e 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
237
Rozdział 17. Usługi dost˛epne w PLD
# 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 wygladać
˛
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
Szyfrowanie
Właczamy
˛
teraz szyfrowanie wysyłania poczty oraz transmisji mi˛edzy MX-ami dla
różnych domen
Nast˛epnie generujemy certyfikat SSL. Podczas generowania certyfikatu b˛edziesz musiał odpowiedzieć na kilka prostych pytań.
Robimy to w sposób nast˛epujacy:
˛
#
#
#
#
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 zastapić
˛
aktualna˛ linijk˛e czyli ta˛ z domyślnej
instalacji:
#smtps inet n - n
na nasza˛ aktualna:
˛
238
-
-
smtpd
Rozdział 17. Usługi dost˛epne w PLD
smtps inet n - y smtpd -o smtpd_tls_wrappermode=yes \
-o smtpd_sasl_auth_enable=yes
Domeny
Jeżeli posiadamy wi˛ecej niż jedna˛ domen˛e 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˛e 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 nastepujace
˛ wpisy:
# plik domains, w nim wpisane domeny dla których nasz serwer
#poczt˛
e b˛
edzie 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 sa˛ 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˛
edzie 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
Usprawnienia
Dodatkowe
wpisy
które
poprawia˛
prac˛e
naszego
postfix-a
Edytujemy
/etc/mail/main.cf i dodajemy nast˛epujace
˛ 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 majac
˛ \
# dobre łacze
˛
można
# wpisać 10 mega [10000000]
message_size_limit = 2000000
239
Rozdział 17. Usługi dost˛epne w PLD
# 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.
Końcowa konfiguracja
# 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 -
240
smtpd
Rozdział 17. Usługi dost˛epne w PLD
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
tpop3d, czyli coś dzi˛eki czemu b˛edziemy mogli pobrać poczt˛e z serwera.
No i właczamy
˛
tpop3d-a
# /etc/rc.d/init.d/tpop3d start
amavis + mks
Przyst˛epujemy do instalacji i konfiguracji amavisa + mks :)
Instalujemy poldkiem mks, serwer mksd, bazy, oraz skrypt aktualizujacy
˛ bazy
poldek -i mks mksd mks-bases mks-updater mksd-clients
Teraz ściagamy
˛
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
241
Rozdział 17. Usługi dost˛epne w PLD
Jeśli dostałeś coś takiego, tzn. że wszystko jest okej. mksd przyśpiesza znacznie prac˛e
na słabych maszynach... wtedy znacznie odczujesz.
Instalujemy teraz amavisa
poldek -i amavisd-new
No i teraz najgorsze ;)
Edytujemy /etc/amavisd.conf
Odkomentuj lini˛e:
@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˛eki czemu b˛edzie on mógł korzystać z katalogów z cz˛eściami maili
amavisa.
# grep amavis /etc/group
amavis:x:116:mksd
Zakomentuj lini˛e:
#$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 zastap
˛ 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˛ezyku (English) to odkomentuj linie i zrób własne wpisy w
/var/amavis/*.txt
# $notify_sender_templ
242
= read_text(’/var/amavis/notify_sender.txt’);
Rozdział 17. Usługi dost˛epne w PLD
# $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˛e
http://www.mks.com.pl gdyż jest do warunek licencji na używanie mks. Na końcu
pliku /usr/sbin/amavisd znajduja˛ si˛e przykładowe szablony.
W pliku /etc/mail/master.cf dopisujemy nowa˛ lini˛e:
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˛e :) nie wierzysz? tail -n 100
-f /var/log/maillog
A teraz sprawdzimy jak reaguje na przesyłk˛e 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
243
Rozdział 17. Usługi dost˛epne w PLD
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˛
e:
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 -o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
n
-
2
smtp
Restart postfix-a:
# /etc/rc.d/init.d/postfix restart
i powinno wszystko nam pi˛eknie latać:)
Wyślij sobie eicar.com w załaczniku
˛
a zobaczysz, że smtp odrzuci i dostaniesz maila
z alertem :]
postifx.admin
TODO (http://high5.net/postfixadmin/)
PostgreSQL - Baza danych SQL
Co to jest PostgreSQL
PostgreSQL : The most advanced Open Source database system in the
world
PostgreSQL: Najbardziej zaawansowany system zarzadzania
˛
baza˛ danych na świecie
typu OpenSource - w taki oto sposób grupa rozwijajaca
˛ SZBD PostgreSQL reklamuje swój produkt. SZBD PostgreSQL jest implementacja˛ j˛ezyka 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 maja˛ obsługiwać baz˛e danych - typu małe portale internetowe, proste bazy, i tym podobne. Jednakże SZBD PostgreSQL dostaje skrzydeł w
wi˛ekszych projektach, jest cz˛esto porównywany do bardzo rozbudowanego SZBD
Oracle. Cechy SZBD PostgreSQL to mi˛edzy innymi:
•
244
osadzane j˛ezyki proceduralne wykonywane przez baz˛e danych (plperl, pl/perlu,
plpgsql, plpython, pltcl, pl/tcl)
Rozdział 17. Usługi dost˛epne w PLD
•
możliwość tworzenia funkcji w PostgreSQLu w j˛ezyku C, kompilowanych do bibliotek dynamicznych
•
sterowniki dost˛epu do bazy z j˛ezyków C, C++, python, perl, czy Java (poprzez
JDBC), ODBC
•
wysoce zaawansowana implementacja standardu SQL, obejmujaca
˛ 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˛e BSD, która umożliwia zamykanie kodu SZBD PostgreSQL przy dokonywaniu modyfikacji, co jest istotne w rozwiazaniach
˛
biznesowych
Instalacja pakietów
Uruchamiamy program poldek:
# poldek
Wykonujemy:
poldek>ls -l postgresql-*
Przykładowy wynik to:
poldek> ls -l postgresql-*
package
postgresql-7.4-0.8
postgresql-backend-devel-7.4-0.8
postgresql-clients-7.4-0.8
postgresql-devel-7.4-0.8
postgresql-doc-7.4-0.8
postgresql-ecpg-7.4-0.8
postgresql-ecpg-devel-7.4-0.8
postgresql-libs-7.4-0.8
postgresql-module-pgcrypto-7.4-0.8
postgresql-module-plperl-7.4-0.8
postgresql-module-plpgsql-7.4-0.8
postgresql-module-plpython-7.4-0.8
postgresql-module-pltcl-7.4-0.8
postgresql-static-7.4-0.8
postgresql-tcl-7.4-0.8
postgresql-tcl-devel-7.4-0.8
postgresql-tcl-static-7.4-0.8
17 packages, 18.6 MB
poldek>
build date
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
2003/12/16
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
20:45
8.8
1.4
1.5
93.0
5.3
479.0
17.0
252.0
91.0
30.0
100.0
35.0
44.0
303.0
38.0
0.0
36.0
size
MB
MB
MB
KB
MB
KB
KB
KB
KB
KB
KB
KB
KB
KB
KB
KB
KB
Do poprawnego działania SZBD PostgreSQL konieczne sa˛ nast˛epujace
˛ pakiety:
•
postgresql
•
postgresql-clients
•
postgresql-libs
Zatem można przystapić
˛
do ich instalacji, wpisujac
˛ nast˛epujace
˛ polecenie:
# poldek -i postgresql postgresql-clients postgresql-libs
245
Rozdział 17. Usługi dost˛epne w PLD
Aby SZBD PostgreSQL skorzystał z wewn˛etrznych j˛ezyków plpgsql czy też plphpython należy doinstalować pakiety postgresql-module-plpgsql
# poldek -i postgresql-module-plpgsql
oraz
root# poldek -i postgresql-module-plpython
Konfiguracja PostgreSQLa w PLD
Wstepna
˛
konfiguracja
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"
Sortowanie po polsku
poldek -i localedb-src && localedb-gen -l pl_PL && echo LANG=pl_PL \
>>/etc/sysconfig/i18n
TODO: locale tylko dla PostgreSQLa.
Inicjalizacja
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.
Konfiguracja PostgreSQLa
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˛e edycja plików
${PG_DB_CLUSTERS}/{postgresql.conf,pg_hba.conf}:
# vim /var/lib/pgsql/{postgresql.conf,pg_hba.conf}
Przydatna
opcja
to
/var/lib/pgsql/postgresql.conf.
246
tcpip_socket = true
w
pliku
Rozdział 17. Usługi dost˛epne w PLD
Uruchomienie PostgreSQLa
# service postgresql start
Dodanie użytkownika
# su - postgres -c ’psql template1’
template1=# CREATE USER uzytkownik WITH ENCRYPTED PASSWORD ’hasło’ \
CREATEUSER CREATEDB;
CREATE USER
Użytkownik ‘uzytkownik’ b˛edzie miał możliwość tworzenia baz danych (za pomoca˛
createdb lub CREATE DATABASE z poziomu psql) jak i dodawania użytkowników
(createuser lub CREATE USER z poziomu psql).
Ostatni test
$ psql -h 127.0.0.1 template1
template-1=# SELECT count(*) FROM pg_database;
count
------2
(1 row)
Dodatki
Warto właczyć
˛
obsług˛e PostgreSQLa w PHP, instalujac
˛ 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++ korzystajacych
˛
z PostgreSQLa. Dokumentacja do PostgreSQLa znajduje si˛e, a jakże, w pakiecie
postgresql-doc.
#
#
#
#
#
#
poldek
poldek
poldek
poldek
poldek
poldek
-i
-i
-i
-i
-i
-i
php-pgsql
perl-DBD-Pg
perl-Pg
python-postgresql
postgresql-devel
postgresql-doc
Odnośniki
•
www.postgresql.org - strona główna projektu16
•
www.postgresql.org.pl - polska strona projektu17
- Lokalna wersja FAQ,
instalowana z pakietem postgresql (może być także w oddzielnej paczce z
dokumentacja).
˛
• /usr/share/doc/postgresql-*/FAQ_polish.gz
247
Rozdział 17. Usługi dost˛epne w PLD
ProFTPD - serwer FTP
Wstep
˛
Duża˛ zaleta˛ ProFTPD jest jego prostota. Plik konfiguracyjny demona do złudzenia
przypomina ten od Apache. Jego zrozumienie nie powinno sprawiać trudności.
Instalacja
Zanim przystapisz
˛
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 żadania
˛
o t˛e usług˛e. Natomiast w trybie daemon ProFTPD jest uruchomiony
cały czas i pracuje niezależnie od inetd. Tak wi˛ec, jeżeli Twój komputer, który przeznaczysz na serwer nie jest zbyt szybki, powinieneś wybrać ProFTPD uruchamianego poprzez inetd. Dystrybucja udost˛epnia obie te możliwości. Pakiet proftpd-inetd
zapewnia uruchamianie poprzez inetd, natomiast po zainstalowaniu usługi z pakietu proftpd-standalone uruchamiana ona b˛edzie w trybie daemon. W opisie posłużymy si˛e wersja˛ daemon. Instalujemy pakiet proftpd-standalone
Podstawowa konfiguracja demona
Jak już wspomniałem we wst˛epie, ProFTPD jest jednym z prostszych w konfiguracji
programów serwerowych. Wszystkie pliki potrzebne do jego skonfigurowania znajduja˛ si˛e w katalogu /etc/ftpd.
# ls -1 /etc/ftpd
ftpusers
proftpd.conf
W pliku ftpusers znajduje si˛e lista użytkowników, którym odebrana została możliwość logowania si˛e do serwera ftp. Poszczególne pozycje z tej listy zakończone sa˛
znakiem nowej linii, tak wi˛ec każda pozycja jest rozmieszczona jedna pod druga.˛
Natomiast plik proftpd.conf zawiera właściwa˛ konfiguracj˛e usługi.
ServerName
ServerIdent
ServerType
DeferWelcome
DefaultServer
DefaultRoot
• ServerName
"ProFTPD"
off
standalone
off
on
~
określa nazw˛e serwera wyświetlana˛ łacz
˛ acym
˛
si˛e z nim użytkown-
ikom.
pozwala na wyświetlenie wiadomości powitalnej podczas
połaczenia,
˛
np. zawartości pliku .message. Domyślnie wyłaczona.
˛
• ServerIdent
• ServerType
ustawia tryb pracy demona ProFTPD
• DeferWelcome
Nie pokazuje wiadomości powitalnej dopóki użytkownik si˛e nie
zautoryzuje.
• DefaultServer
Określamy konfiguracj˛e jako domyślna˛
Wyznaczamy nadrz˛edny dla każdego użytkownika katalog spoza
którego nie b˛edzie mógł wyjść. W listingu powyżej b˛edzie to katalog domowy.
• DefaultRoot
Poniżej znajduje si˛e szereg zakomentowanych opcji pozwalajacych
˛
na konfiguracj˛e
połacze
˛ ń bezpieczna˛ metoda˛ przy użyciu SSL. Jeżeli jesteś zainteresowany ich uży248
Rozdział 17. Usługi dost˛epne w PLD
ciem powinieneś zapoznać si˛e z dokumentacja˛ on line18 serwera ProFTPD. Przechodzimy teraz do dalszej konfiguracji.
Port
Umask
User
Group
AuthPAMAuthoritative
21
022
ftp
ftp
on
Definiujemy tutaj port na którym serwer b˛edzie oczekiwał nadchodzacych
˛
połacze
˛ ń
• Port
Tryb umask 022 jest typowym standardem dla ogolnie dost˛epnych plików i
katalogów
• Umask
• User
Konto użytkownika na którego uprawnieniach pracuje usługa
• Group
Grupa do której należy konto użytkownika usługi
Dajemy możliwość autoryzacji użytkowników poprzez
moduł PAM jeśli jest to możliwe.
• AuthPAMAuthoritative
Przedstawione tutaj wartości poszczególnych opcji sa˛ 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.
Konfiguracja dostepu
˛
<Directory />
AllowOverwrite
</Directory>
on
Zezwalamy na nadpisywanie plików w obr˛ebie katalogu do którego użytkownik
si˛e zaloguje. Poniżej w pliku znajduje si˛e przykładowa konfiguracja dla
użytkownika anonimowego. Sekcja mieści si˛e wewnatrz
˛
znacznika <Anonymous
~ftp></Anonymous>. Poniższy wykaz omawia najcz˛eściej wykorzystywane
dyrektywy w tej sekcji.
User
ftp
Group
ftp
AnonRequirePassword off
RequireValidShell off
• User - konto użytkownika którego prawa b˛edzie uzyskiwała osoba logujaca
˛ si˛e do
serwera
• Group
- grupa do której należy powyższe konto.
- w powyższym przykładzie wyłaczona.
˛
Umożliwia
użytkownikom anonimowym logowanie si˛e bez hasła.
• AnonRequirePassword
- opcja ta powoduje, że ProFTPD nie sprawdza czy dany
użytkownik, który si˛e loguje posiada przypisana˛ w /etc/shells powłok˛e.
• RequireValidShell
UserAlias anonymous ftp
MaxClients 10
DisplayLogin welcome.msg
DisplayFirstChdir .message
AllowStoreRestart on
249
Rozdział 17. Usługi dost˛epne w PLD
- przyporzadkowuje
˛
nazw˛e użytkownika do systemowego konta. W
przykładzie anonymous został przypisany kontu ftp.
• UserAlias
• MaxClients - ilość jednoczesnych połacze
˛ ń anonimowych które b˛eda˛ realizowane
przez serwer.
• DisplayLogin
- określamy plik którego zawartość b˛edzie wyświetlana po starcie.
• DisplayFirstChdir
- plik którego zawartość b˛edzie 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˛epu. W powyższym
przykładzie każdy ma dost˛ep do zapisu w tym katalogu natomiast nikt nie posiada
prawa do jego odczytywania.
Zakończenie
Dost˛ep do serwera ftp możemy ograniczać na kilka sposobów. Można limitować ilość
jednoczesnych połacze
˛ ń, stworzyć list˛e adresów IP, które b˛eda˛ miały prawo do zapisu czy odczytu określonych katalogów.
Na tym zakończymy podstawowa˛ konfiguracj˛e serwera ProFTPD. Wi˛ecej informacji
na jego temat znajdziesz na stronach z jego dokumentacja˛19.
Samba - współpraca z Windows
Samba jako Serwer domeny NT4 (PDC)
W tym rozdziale przedstawiona zostanie konfiguracja samby w roli serwera domeny
Microsoft Windows NT4 (PDC).
Instalacja
Do realizacji tego zadania potrzebne b˛eda˛ pakiety: samba i samba-clients. Znaczenie
poszczególnych pakietów:
250
•
samba - pakiet ten zawiera serwer samby
•
samba-clients - zestaw narz˛edzi przydatnych w poruszaniu si˛e w środowisku Microsoft Networks.
Rozdział 17. Usługi dost˛epne w PLD
Proces instalacji pakietów przedstawiony został w dziale Zarzadzanie
˛
pakietami.
Konfiguracja
Przy użyciu dowolnego edytora otwieramy plik /etc/samba/smb.conf. Cała˛ konfiguracj˛e należy wykonać w sekcji [global]. Przyj˛eta w nim została nast˛epujaca
˛ konwencja: <opcja> = <wartość>. Jeżeli dana opcja ma kilka wartości, oddziela si˛e je znakiem spacji. Poszczególne opcje umieszczane sa˛ w osobnych liniach. Komentarze w
pliku rozpoczynaja˛ si˛e znakiem "#" lub ";". Poniżej znajduje si˛e wykaz najważniejszych opcji które należy ustawić podczas realizacji zadania.
workgroup = DOM
server string = File Server
announce as = NT Server
Ustawiamy nazw˛e domeny której członkiem b˛edzie 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łówna˛ przegladarka˛ 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˛epnie restartujemy SAMBE˛ i przyst˛epujemy do dalszej konfiguracji. W bazie
użytkowników Samby musi znaleźć si˛e konto administratora. B˛edzie ono wymagane
przy dołaczaniu
˛
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˛epnie 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˛etajmy też o utworzeniu wpisu w bazie użytkowników Samby:
# smbpasswd -a jurek
251
Rozdział 17. Usługi dost˛epne w PLD
nast˛epnie ustawiamy mapowanie grup w linux na odpowiednie grupy windows-a,
poleceniem net groupmap. Domyślne ustawienia Samby (mapowanie na uniksowa˛
grup˛e -1) wymaga zmiany, która˛ 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 - decydujac
˛ si˛e 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˛eda˛ 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łaczaniu
˛
komputera do domeny i znane tylko parze klient-serwer. Dzi˛eki temu istnieje możliwość
sprawdzenia tożsamości próbujacego
˛
si˛e logować komputera - nawet gdy ktoś dołaczy
˛
maszyn˛e o tej samej nazwie, to nie powinien uzyskać możliwości dost˛epu do
domeny. Nazwy kont odpowiadaja˛ nazwom NetBIOS komputerów, ale z dołaczo˛
nym na końcu symbolem dolara. Dla stacji biuro b˛edzie to wi˛ec biuro$. Konto to
powinno być zablokowane, by niemożliwe było uzyskanie dost˛epu poprzez ssh, czy
też inne usługi systemu operacyjnego. Nie jest także konieczny katalog domowy, w
zamian za to zdecydujemy si˛e na umieszczenie kont w grupie machines - pozwoli
to w jakimś stopniu ogarnać
˛ szybko zwi˛ekszajac
˛ a˛ si˛e liczb˛e 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, że powinniśmy teraz utworzyć odpowiedni wpis w bazie haseł Samby nie jest to jednak konieczne. Przy próbie podłaczenia
˛
komputera do domeny czynność ta zostanie wykonana automatycznie. Gdy jednak zajdzie potrzeba r˛ecznego
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
passwd chat debug = no
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*aut
passwd program = /usr/bin/smbpasswd -L -a %u
i oczywiście utworzyć katalog /var/lib/nobody
252
Rozdział 17. Usługi dost˛epne w PLD
# 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łaczaj
˛
ac
˛ (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.html20
Sherlock Error logging a Win XP machine into a domain running Samba.
http://www.slakaz.org/articles/6.html
Serwer członkowski domeny NT4
W tym rozdziale przedstawiona zostanie konfiguracja samby w roli serwera członkowskiego domeny Microsoft Windows NT4. Zaleta˛ takiej konfiguracji jest możliwość budowania polityki praw dost˛epu do zasobów zgromadzonych na serwerze w
oparciu o konta użytkowników lokalnego serwera PDC.
Instalacja
Do realizacji tego zadania potrzebne b˛eda˛ trzy pakiety: samba, samba-clients oraz
samba-winbindd. Znaczenie poszczególnych pakietów:
•
samba - pakiet ten zawiera serwer samby
•
samba-clients - zestaw narz˛edzi przydatnych w poruszaniu si˛e w środowisku Microsoft Networks.
•
samba-winbindd - demon pozwalajacy
˛ na pobieranie uprawnień z serwera PDC.
Proces instalacji pakietów przedstawiony został w dziale Zarzadzanie
˛
pakietami.
Konfiguracja
Przy użyciu dowolnego edytora otwieramy plik /etc/samba/smb.conf. Cała˛ konfiguracj˛e z której b˛edzie również korzystał demon winbindd należy wykonać w sekcji
[global]. Przyj˛eta w nim została nast˛epujaca
˛ konwencja: <opcja> = <wartość>. Jeżeli dana opcja ma kilka wartości, oddziela si˛e je znakiem spacji. Poszczególne opcje
umieszczane sa˛ w osobnych liniach. Komentarze w pliku rozpoczynaja˛ si˛e znakiem
"#" lub ";". Poniżej znajduje si˛e wykaz najważniejszych opcji które należy ustawić
podczas realizacji zadania. Wykraczaja˛ one nieco poza czysta˛ konfiguracj˛e winbindd
ale sa˛ konieczne do jego prawidłowego działania.
253
Rozdział 17. Usługi dost˛epne w PLD
workgroup = DOM
server string = File Server
Ustawiamy nazw˛e domeny której członkiem b˛edzie 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˛edzie
pobierał uprawnienia.
To tyle, jeżeli chodzi o ogólna˛ konfiguracj˛e 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
- znak, którym oddzielana b˛edzie nazwa użytkownika badź
˛
grupy od nazwy domeny. Np. "DOM+jan"
• winbind separator
- zakres uidów w systemie zarezerwowanych na użytkowników
domenowych
• idmap uid
• idmap gid
- zakres gidów w systemie przeznaczonych na grupy domenowe
Na tym możemy zakończyć edycj˛e pliku konfiguracyjnego samby. Aby nasza konfiguracja stała si˛e aktywna musimy przerestartować usług˛e.
/etc/rc.d/init.d/smb restart
W ślad za usługa˛ smb zostana˛ przerestartowane także nmbd oraz interesujacy
˛ nas
winbindd. Czynnościa˛ która˛ musimy bezwzgl˛ednie wykonać jest podłaczenie
˛
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˛e z serwerem domeny możesz dodać do polecenia opcj˛e -I a po niej adres IP serwera PDC. Po pomyślnej operacji podłaczenia
˛
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˛e użytkowników, natomiast -g list˛e grup.
Jeżeli wynik obu poleceń wyglada
˛ podobnie jak na listingu oznacza to, że winbind
pracuje poprawnie.
254
Rozdział 17. Usługi dost˛epne w PLD
Zakończenie
Jakie korzyści płyna˛ z takiej konfiguracji samby? Otóż sprawdza si˛e ona w środowisku sieciowym w którym zasoby udost˛epniaja˛ zarówno serwery pracujace
˛ pod
kontrola˛ Windows jak i linuksa. Pozwala to na budowanie spójnej polityki bezpieczeństwa w oparciu o uwierzytelnianie użytkownika na poziomie domeny. Druga˛
z zalet jest prostota w implementacji. Dzi˛eki winbindd dost˛ep do grup oraz użytkowników domenowych odbywa si˛e w taki sam sposób jak do ich odpowiedników
lokalnych.
# chown DOM+Administrator.DOM+Domain\ Users plik.txt
Snort - Sieciowy System Wykrywania Włamań
Snort22 to bardzo silny sieciowy system wykrywania ataków (ang. Network Intrusion Detection System, NIDS), który daje szeroki zakres mechanizmów detekcji, mogacych
˛
w czasie rzeczywistym dokonywać analizy ruchu i rejestrowania pakietów w
sieciach opartych na protokołach IP/TCP/UDP/ICMP. Potrafi przeprowadzać analiz˛e 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.
Wymagania
Przed instalacja˛ Snorta warto zaopatrzyć si˛e w baz˛e danych (w opisie wykorzystano
MySQL) i serwer Apache z obsługa˛ PHP. W bazie b˛eda˛ składowane logi, a za wygodny interfejs do przegladania
˛
alarmów posłuży ACID (ang. Analysis Console for
Intrusion Databases).
Instalacja Snorta i ACID
Gdy mamy już baz˛e danych i serwer WWW z PHP, instalujemy nast˛epujace
˛ 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 < \
255
Rozdział 17. Usługi dost˛epne w PLD
/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˛epnie (najprościej przy użyciu popularnego narz˛edzia 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łaczenia
˛
si˛e 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˛epna 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ża˛ ilość zb˛ednych
alertów, te bardziej istotne można przenosić do drugiej bazy za pomoca˛ ACID, dla
przejrzystości ogółu.
Konfiguracja Snorta
Do działania jako sieciowy system wykrywania włamań, Snort potrzebuj˛e
sprecyzowania zasad funkcjonowania całości w głównym pliku konfiguracyjnym
snort.conf. W starszych wersjach systemu, wszystkie opcje, łacznie
˛
z regułami
ataków znajdowały si˛e w jednym pliku. Ciagła
˛
rozbudowa Snorta, rosnaca
˛ liczba
sygnatur i ogólna funkcjonalność, wymusiła rozdzielenie niektórych cz˛eś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łacza
˛
si˛e odpowiednie
zestawy sygnatur i inne cz˛eści konfiguracyjne, np.:
include: ścieżka_do_pliku/nazwa
Bazy reguł charakteryzuja˛ si˛e nazwa˛ pliku z końcówka˛ .rules, pierwszy człon nazwy zawiera rodzaj usługi lub typ ataku, którego dotyczy dany zestaw.
Pozostałymi plikami konfiguracyjnymi sa:˛
• classification.config - zawierajacy
˛ 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
- posiadajacy
˛ skróty adresów do stron organizacji z baza˛
opisów ataków, np.:
config reference: bugtraq http://www.securityfocus.com/bid/
256
Rozdział 17. Usługi dost˛epne w PLD
• threshold.conf
• unicode.map
- metody łagodzenia licznych, fałszywych alarmów,
- 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 znajduja˛ si˛e 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˛e zestaw parametrów uruchomieniowych, zaczynaja˛
cych si˛e od wyrażenia config (pełna ich lista znajduj˛e si˛e w dokumentacji):
# wybor interfejsu do nasłuchu (jeden demon Snorta moze
# obslugiwac tylko jeden interfejs sieciowy)
config interface: eth0
Druga cz˛eść głównego pliku konfiguracyjnego, zawiera ustawienia preprocesorów.
Parametry domyślne nie b˛eda˛ przedstawione w poniższym opisie. Kompletna˛ list˛e
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.
257
Rozdział 17. Usługi dost˛epne w PLD
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 podlegaja˛ ochronie. Serwery IIS i Apache, pracuja˛ w odmienny sposób, a zarazem posiadaja˛ inne słabe punkty wykorzystywane podczas ataków. Operacja dostosowania ustawień skupia mechanizmy ochronne na odpowiednich metodach ataków dla danego typu serwera badź
˛ ich grupy w danej sieci obj˛etej
ochrona.˛
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˛edzie tylko przykład logowania do bazy MySQL.
output database: alert, mysql, user=login password=haslo \
dbname=snort_log host=127.0.0.1
Za pomoca˛ reguł akcji można tworzyć własne rodzaje reakcji na wykryte zdarzenie,
np.:
ruletype czerwony_alarm
{
type log
258
Rozdział 17. Usługi dost˛epne w PLD
# 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˛eść, 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ł maja˛ być brane pod uwag˛e (czyli jakie
pliki z regułami maja˛ być dołaczane
˛
za pomoca˛ polecenia include). W środowisku, w
którym wszystkie serwery WWW to Apache, reguły chroniace
˛ serwer IIS b˛eda˛ generowały zupełnie niepotrzebne alarmy. Jeśli nie udost˛epniamy FTP, reguły opisujace
˛
ataki na t˛e usług˛e b˛eda˛ tylko spowalniały prac˛e 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, sprawiajac,
˛ ż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˛epujacych
˛
w bazie kategorii sygnatur, opisz˛e jakiego rodzaju ataki wykrywaja:˛
•
attack-responses - odpowiedzi usług na prób˛e 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˛e Domain Name System;
•
experimental - zestaw eksperymentalnych reguł;
•
exploit - programy majace
˛ na celu wykorzystywanie bł˛edów w oprogramowaniu;
•
icmp-info, icmp - komunikaty ICMP z różnych programów, testujacych
˛
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, dotyczace
˛ usług CVS, MS Terminal, BOOT, UPnP itd.;
259
Rozdział 17. Usługi dost˛epne w PLD
•
multimedia - strumienie audio, wideo;
•
mysql, sql, oracle - ataki na znane serwer baz danych;
•
netbios - anomalia zwiazane
˛
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 zwiazane
˛
z przesyłaniem plików poprzez serwer ftp;
•
virus - transfer poczty z podejrzanym załacznikiem;
˛
•
web-attacks, web-misc, web-client, web-cgi, web-php, web-coldfusion, web-frontpage, webiis - ataki na różnego typu serwery WWW, przeważnie z wykorzystaniem bł˛edów
w skryptach cgi, php;
•
x11 - aktywności sesji serwera XFree86.
Aktualizacja reguł
Do aktualizacji sygnatur posłuży nam perlowy skrypt Oinkmaster23. Ma on duże
możliwości które pozwalaja˛ w prosty sposób zarzadzać
˛
regułami Snorta. Wymagane
pakiety do uruchomienia to: perl, perl-base, perl-modules i vixie-cron albo hc-cron .
Instalacja Oinkmaster
Ściagamy
˛
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˛e po nast˛epujacej
˛ 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˛e automatycznie, w katalogu /etc/cron.daily tworzymy plik uprules.
# touch /etc/cron.daily/uprules
# chmod 700 /etc/cron.daily/uprules
260
Rozdział 17. Usługi dost˛epne w PLD
I dodajemy do niego nast˛epujac
˛ a˛ zawartość, podajac
˛ adres e-mail na który ma zostać
wysłany raport z codziennej aktualizacji jeśli pojawia si˛e 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˛e bliżej ciekawym funkcjonalnościom oinkmastera. W pliku konfiguracyjnym mamy możliwość wyłaczania
˛
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˛eda˛ nadpisywane.
Architektura Snorta
Snort jest logicznie podzielony na kilka komponentów, które współpracuja˛ ze soba˛
by wykrywać ataki i generować wyniki w odpowiednim formacie. Głównymi składnikami systemu sa:˛ 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 łacza
˛
danych za pomoca˛ biblioteki pcap. Rozpoznaje różne protokoły modelu OSI - Ethernet, 802.11, Token Ring oraz wiele protokołów działajacych
˛
w wyższych warstwach jak: IP, TCP, UDP i ICMP. Surowe pakiety z warstwy łacza
˛
danych
(np. ramki Ethernetowe) po zdekodowaniu wadruj
˛
a˛ do preprocesorów (warstwa
transportowa), gdzie sa˛ testowane i w razie konieczności obrabiane na potrzeby silnika detekcji (warstwa sesji). Tam dokonywana jest analiza pakietów pod katem
˛
zbioru zadanych reguł. Nast˛epnie po wykryciu próby ataku badź
˛ anomalii sieciowych,
system przekazuje odpowiednie dane do modułu wyjściowego, który to decyduje o
zapisaniu wyniku wykrycia w logach lub wszcz˛eciu alarmu.
Tryby pracy
Snort umożliwia duża˛ swobod˛e konfiguracji, za pomoca˛ wielu parametrów, które pozwalaja˛ 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˛edzie
wyświetlać informacje o nagłówkach IP, TCP/UDP/ICMP. Do uzyskania bardziej
szczegółowych danych o wychwyconych pakietach, służa˛ parametry -d (aby
monitorować ładunek pakietów) i -e (dodatkowe nagłówki warstwy łacza
˛
danych). Parametry można łaczyć
˛
razem, bez znaczenia jest ich kolejność (np.
snort -ved). Aby zakończyć prac˛e 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˛e po użyciu opcji -l, która˛ wskazujemy katalog, gdzie Snort b˛edzie
zapisywać w odpowiednio nazwanych podkatalogach i plikach, zawartość
261
Rozdział 17. Usługi dost˛epne w PLD
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 pomoca˛
programów rozpoznajacych
˛
format binarny tcpdump (np. Ethereal). Oczywiście
można ta˛ sama˛ czynność wykonać z wykorzystaniem Snorta, używajac
˛ opcji
-r, po czym przetworzyć sczytane pakiety dost˛epnymi trybami. Snort czytajac
˛
swoje dzienniki (tak samo działajac
˛ w trybie sniffera) przyjmuje parametry w
formacie BPF (Berkeley Packet Filter), dzi˛eki 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łaczenie
˛
Snorta z filtrami BPF
znacznie zwi˛eksza wydajność całego systemu, gdyż filtrowanie BPF odbywa si˛e
w warstwie łacza
˛
danych (a wi˛ec na poziomie biblioteki pcap). Określajac
˛ w ten
sposób, jakie pakiety nas interesuja˛ (lub jakie chcemy zignorować) można dość
dokładnie "zaw˛ezić" 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˛ecej na temat możliwości oferowanych przez
BPF można poczytać na stronach podr˛ecznika zarówno Snorta, jak i Tcpdump.
•
Network Intrusion Detection Mode - sieciowy system wykrywania włamań. Jest najbardziej skomplikowanym trybem działania programu. Za pomoca˛ parametru -c,
wskazujemy plik konfiguracyjny, w którym określane sa˛ 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
Preprocesory zostały wprowadzone do Snorta w wersji 1.5. Pozwalaja˛ użytkownikom i programistom w prosty sposób na rozbudow˛e funkcjonalności całego systemu
poprzez pisanie dodatkowych modułów (ang. plugins).
Preprocesory analizuja˛ pakiety przed wykorzystaniem ich przez silnik detekcji. W
ten sposób zwi˛ekszaja˛ możliwości całego procesu wykrywania ataków sieciowych,
wzbogacajac
˛ 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 ciagów
˛
binarnych z sesji FTP czy Telnet, normalizacja żada
˛ ń RPC), jak i wykrywania niezgodności z tymi protokołami.
Poniżej pokrótce opiszemy standardowy zestaw preprocesorów wchodzacych
˛
w
skład darmowej dystrybucji Snorta w wersji 2.1.3.
262
•
Frag2 - defragmentuje i normalizuje dane przychodzace
˛ w postaci fragmentów,
co utrudnia ukrywanie ataków prowadzonych za pomoca˛ nieprawidłowo sfragmentowanych pakietów IP. W tym celu wykorzystuje ustalony przez użytkownika bufor pami˛eci, w której przez określony czas przetrzymuje do badania pakiety z tablicy stanów połacze
˛ ń. Im wi˛eksza liczba sfragmentowanych pakietów
tym wymagany jest wi˛ekszy bufor. Defragmentacja, układajac
˛ datagramy IP w
jedna˛ całość, ułatwia dalsza˛ analiz˛e danych poprzez pozostałe preprocesory i silnik detekcji. Frag2 umożliwia wychwytywanie znanych ataków wykorzystujacych
˛
zniekształcenia fragmentów pakietów np. teardrop, fragroute.
•
Stream4 - rozwija model detekcji oparty na testowaniu pojedynczych pakietów
umożliwiajac
˛ śledzenie sesji (stanu połaczenia)
˛
TCP i składanie (reasemblacji)
Rozdział 17. Usługi dost˛epne w PLD
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 łaczenia
˛
si˛e z
poszczególnymi usługami w określonych odst˛epach czasu oraz wykrywanie
prób oszukania Snorta za pomoca˛ narz˛edzi takich, jak np. Stick lub Snot, które
generuja˛ pojedyncze (niewchodzace
˛ w skład poprawnych sesji TCP) pakiety
majace
˛ za zadanie zalać mechanizm detekcji masa˛ fałszywych alarmów (sa˛ to
pakiety budowane na losowo wybranych sygnaturach). Snort broni si˛e przed
takimi technikami wykorzystujac
˛ stream4 preprocesor - losowe pakiety sa˛ dość
łatwo identyfikowane (i ignorowane), ponieważ nie należa˛ do prawidłowej sesji
TCP. Stream4 wychwytuje próby skanowania technikami: stealth, null, xmas, fin;
wykrywanie systemu operacyjnego - fingerprint i inne anomalia zwiazane
˛
z
protokołem TCP.
•
Flow i Flow-Portscan - posiada mechanizm śledzenia połacze
˛ ń, zapisujac
˛ 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, sa˛ 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łacze
˛ ń, 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 pomoca,˛ których reguluje si˛e skale
punktacji, rozmiary tablicy wyników, tolerancj˛e niepowtarzalności zdarzeń itp.
•
HTTP Inspect - jest ogólnym dekoderem protokołu HTTP na poziomie warstwy aplikacyjnej. Za pomoca˛ ustalonego bufora wynajduje odpowiednia˛ składnie HTTP i
ja˛ normalizuje. HTTP Inspekt działa w obydwu trybach jednocześnie: client requests
(pol. zapytania klienta) i server responses (pol. odpowiedzi serwera). Mnoga liczba
dost˛epnych opcji w konfiguracji preprocesora, umożliwia dostosowanie ustawień do konkretnego typu serwera WWW. Głównymi zadaniami http_inspect jest
przetwarzanie adresów URI, konwertujac
˛ na ASCII znaki zakodowane w postaci
szesnastkowej. Utrudnia to ukrycie ataku przed modułem wykrywajacym
˛
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, polegajace
˛
na
przekroczeniu pewnej progowej liczby prób połacze
˛ ń z różnymi portami w
określonym przedziale czasu. Ze wzgl˛edu na brak możliwości unikni˛ecia
fałszywych alarmów w typowych przypadkach (np. obcia˛żony serwer DNS),
istnieje możliwość wyłaczenia
˛
alarmów wzbudzanych przez określone adresy IP
używajac
˛ dodatkowego procesora portscan-ignorehosts. Pozwala także, zapisać
wyniki w oddzielnym pliku dziennika.
•
Telnet Decode - usuwa z sesji TELNET i FTP binarne ciagi
˛ mogace
˛ utrudnić
wyszukiwanie z udziałem sygnatur ataków.
•
RPC Decode - normalizuje żadania
˛
po protokole RPC, utrudniajac
˛ ukrywanie podejrzanych pakietów za pomoca˛ mniejszych operacji.
•
Back Orifice detektor - wyszukuje w pakietach UDP próby połacze
˛ ń konia
trojańskiego Back Orifice i próbuje złamać zabezpieczajace
˛ je słabe kodowanie.
•
Arpspoof - wykrywa podejrzane pakiety ARP, mogace
˛ sygnalizować próby ARP
spoofingu.
•
Performance Monitor - udost˛epnia 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 moga˛ zareagować w określony sposób. Po wychwyceniu pakietów, spełniajacych
˛
warunki nadane konfiguracja˛ preprocesorów lub regułami, podejmowane jest odpowiednie działanie (np. zapisanie pakietów badź
˛ alarm).
263
Rozdział 17. Usługi dost˛epne w PLD
Moduł sygnatur
Główny mechanizm systemu detekcji zagrożeń polega na dopasowaniu przetworzonych pakietów i ich zrekonstruowanych strumieni z baza˛ sygnatur. System detekcji porównuje cechy pakietu ze zbiorem reguł. Po dopasowaniu, zostaje podj˛eta odpowiednia akcja. Do porównywalnych cech należa˛ atrybuty główne - adresy, porty
źródłowe i docelowe oraz opcje pomocnicze: flagi TCP identyfikujace
˛ np. żadania
˛
zwiazane
˛
z WWW, różne typy pakietów ICMP, opcje IP czy wreszcie sama treść pakietu. Na razie w głównej cz˛eści reguł możliwe jest śledzenie protokołów IP, ICMP,
TCP i UDP. Autorzy przewiduja˛ rozszerzenie Snorta o nast˛epne protokoły sieciowe,
m.in. IPX, GRE, czy protokoły wymiany informacji mi˛edzy routerami - RIP, OSPF
oraz IGRP.
Reguły identyfikowania ataku pozwalaja˛ na podj˛ecie pi˛eciu rodzajów akcji: przepuszczenia pakietu (pass), zapisania informacji do dziennika (log), ogłoszenia alarmu (alert), alarmowania i podj˛ecia do działania innej dynamicznej reguły (activate) i
pozostanie w spoczynku do czasu aktywowania przez reguł˛e activate, po czym działanie jako reguła log (dynamic).
Sygnatury Snorta zazwyczaj składaja˛ si˛e z dwóch głównych sekcji - nagłówka i ciała
(treści). Nagłówek określa m.in., jaka˛ akcj˛e należy podjać
˛ po przypasowaniu reguły, informacje o wykorzystanym protokole, adresy badź
˛ porty źródłowe i docelowe.
Ciało reguły pozwala rozwinać
˛ informacje zawarte w nagłówku, tu także podaje sia˛
treść wzbudzanych alarmów i różnego rodzaju informacje dodatkowe (np. odniesienia do bazy z opisami danego naruszenia, tzw. referencje - Bugtraq24, CERT25 czy
CVE26).
Najprostsze sygnatury obejmuja˛ wskazanie akcji, protokołu, kierunku, adresów i
portów b˛edacych
˛
przedmiotem obserwacji, jak np. poniższa reguła, stanowiaca
˛ reakcj˛e na prób˛e 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˛ezyk sygnatur umożliwia zadeklarowanie reguły, który dopasuje pakiety poruszajace
˛
si˛e w obu stronach operatorem dwukierunkowym "<>", np.:
alert tcp any any <> $HOME_NET 23
Do zasadniczej cz˛eści reguły można dodać ograniczone okragłymi
˛
nawiasami pole
opcjonalne (tzw. ciało), zawierajace
˛ definicj˛e bardziej złożonych i wyrafinowanych
działań zwiazanych
˛
z przej˛eciem 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˛ete działania nie musza˛ być ograniczone do pojedynczej czynności. Średnik separuje deklaracje poszczególnych działań, jak w poniższym przykładzie, w którym
opcja˛ content testowana jest treść przesyłanego strumienia TCP, a w razie odnotowania podejrzanego ciagu
˛ 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 ciagów
˛
znaków w obr˛ebie przesyłanych treści.
264
Rozdział 17. Usługi dost˛epne w PLD
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ścia˛ poszukiwanych ciagów.
˛
Możliwość rekonstrukcji
całych strumieni transmisji TCP, wgladu
˛ w warstw˛e aplikacyjna˛ i efektywne wyszukiwanie treści pozwala na walk˛e przy użyciu Snorta również z zainfekowanymi załacznikami
˛
elektronicznych listów. Oprócz przeszukiwania treści pakietów możemy
badać pod różnymi katami
˛
ich nagłówki, m.in. pola i kody ICMP, pole TTL, rozmiary
fragmentacji czy numery sekwencji.
Bardzo silna˛ konstrukcja˛ w regułach Snorta jest możliwość aktywowania kolejnych
reguł po pierwszym dopasowaniu. Konstrukcja ta nosi nazw˛e activate/dynamic rules i wyglada
˛ w nast˛epujacy
˛ 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 wia˛ża˛ 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˛epnych 50 pakietów
(opcja count) w celu późniejszej analizy. Druga opcja w reguły dynamicznej jest obligatoryjna - reguła zawierajaca
˛ wyłacznie
˛
opcj˛e dowiazania
˛
do innej, macierzystej
konstrukcji jest bezużyteczna.
Nast˛epne godne uwagi parametry, to resp i react wspieraja˛ mechanizm elastycznego reagowania na atak. Opcja resp może doprowadzić do zerwania połaczenia,
˛
np. poprzez wysłanie do atakujacego
˛
komunikatu ICMP o niedost˛epności trasy do
zaatakowanego komputera, natomiast react służy do blokowania dost˛epu do usług
zwiazanych
˛
z WWW.
Ciekawe projekty
•
Nessus27 - sieciowy tester bezpieczeństwa, przydatny do określania skuteczności
skonfigurowanego przez nas Snorta.
•
SnortALog28 - skrypt Perlowy pozwalajacy
˛ na generowanie różnego rodzaju raportów, grafów i statystyk. Korzystajac
˛ z logów Snorta, format wygenerowanych
raportów może stanowić plik tekstowy, HTML, a nawet PDF.
•
Snort Inline29 - poprawka dla Snorta, umożliwiajaca
˛ współprace z regułami firewalla IPtables, stosowanego w systemach opartych na jadrze
˛
Linux. Specjalnie
sformułowane sygnatury Snorta, reaguja˛ na atak i blokuja˛ badź
˛ przekierowuja˛ za
pomoca˛ ściany ogniowej drog˛e pakietów pochodzacych
˛
od intruza.
•
SnortSam30 - jest to zestaw pluginów do Snorta pełniacych
˛
podobna˛ funkcje jak
Snort Inline, ale wspomagajaca
˛ wi˛eksza˛ liczb˛e 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).
•
FLoP31 - 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˛edzie przy pracy w sieciach o dużej przepustowości.
265
Rozdział 17. Usługi dost˛epne w PLD
Syslog-ng
Wstep
˛
W PLD domyślnie instalowanym systemem magazynowania zdarzeń systemowych
(logów) jest syslog-ng (syslog - new generation), zajał
˛ on miejsce klasycznego tandemu syslogd i kalogd. Jest to program o bogatych opcjach konfiguracji, zapewniajacy
˛
wi˛eksza˛ pewność działania, a co za tym idzie wi˛eksze bezpieczeństwo logów.
Wi˛eksze 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).
Konfiguracja
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˛epnie
połaczenie
˛
ich ze soba˛ w reguły. Mamy trzy rodzaje obiektów: źródła, filtry i cele. Źródła wskazuja˛ miejsca pochodzenia komunikatów, filtry pozwalaja˛ selekcjonować dane, cele zaś wskazuja˛ sposób i miejsce magazynowania logów (zwyczajowo jako pliki tekstowe w katalogu /var/log). Cała˛ konfiguracj˛e umieszczamy w jednym pliku:
/etc/syslog-ng/syslog-ng.conf.
•
Źródła - definiujemy je nast˛epujaco:
˛
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
source
source
src
udp
tcp
{ internal(); };
{ udp(); };
{ 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łacze
˛ ń.
•
Filtry:
filter $nazwa { $rodzaj($wartość); };
rodzaje:
•
266
facility - pochodzenie zdarzenia: cron, daemon, mail, ... - szczegóły w dodatku
Rozdział 17. Usługi dost˛epne w PLD
•
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
filter
filter
filter
f_emergency
f_daemon
f_foo
f_su_sudo
{
{
{
{
level(emerg); };
facility(daemon); };
host("foo"); };
program("^su|sudo$"); };
Pierwszy przykładowy filtr przepuszcza jedynie powiadomienia o najpoważniejszych bł˛edach. Drugi zdarzenia pochodzace
˛ od demonów, trzeci wybiera zdarzenia pochodzace
˛ od komputera majacego
˛
w nazwie ciag
˛ "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
filter f_ppp
•
{ not facility(authpriv, cron, lpr, mail, news); };
{ facility(daemon) and program(pppd) or program(chat); };
Cele - ogólna definicja:
destination $nazwa { $cel($miejsce); };
najpopularniejsze cele:
•
file - plik tekstowy / urzadzenie
˛
znakowe (/dev/)
•
usertty - ekran terminala wskazanego użytkownika
•
tcp - komunikaty do loghosta (TCP)
•
udp - komunikaty do loghosta (UDP)
przykłady:
destination
destination
destination
destination
kernel
console_all
root
loghost
{
{
{
{
file("/var/log/kernel"); };
file("/dev/tty12"); };
usertty("root"); };
udp("10.0.0.1"); };
W pierwszym przykładnie komunikaty sa˛ kierowane do pliku /var/log/kernel,
w drugim b˛eda˛ 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);
log { source(src);
destination(console_all); };
filter(f_emergency); destination(loghost); };
Aby zmiany weszły w życie oraz utworzone zostały nowe pliki dzienników, należy
ponownie uruchomić demona:
267
Rozdział 17. Usługi dost˛epne w PLD
# service syslog-ng reload
Test konfiguracji
Najlepsza˛ metoda˛ sprawdzenia konfiguracji sysloga jest wysłanie własnych komuników systemowych. Posłużymy si˛e w tym celu programem logger, pozwalajacym
˛
wysyłać dowolne komunikaty z wiersza poleceń. Dla naszych potrzeb wywołujemy
program nast˛epujaco:
˛
logger -p {$źródło}.{$poziom} {$komunikat} np.:
# logger -p mail.warning Test ostrzeżenia
Uwagi
•
Podobnie jak poprzednik nie kontroluje obj˛etości logów, tak wi˛ec nie można zapomnieć o programie rotujacym
˛
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łacze
˛ ń sieciowych, aby to zmienić należy użyć parametru "max-connections" w
opcjach źródła (patrz przykłady).
Dodatek
System operacyjny posiada wewn˛etrzny, niezależny od demona logów, schemat klasyfikowania zdarzeń, dziela˛ si˛e one na dwie grupy:
Pochodzenie komunikatów (facility):
Tabela 17-2.
Priorytety (level):
Tabela 17-3.
Przypisy
1. http://www.alsa-project.org/main/index.php/Matrix:Main
2. http://www.alsa-project.org/
3. http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
4. http://linux-muzyka.ixion.pl/
5. http://www.faqs.org/rfcs/rfc2616.html
6. http://httpd.apache.org/docs-2.2/
7. http://httpd.apache.org/docs/2.2/mod/mod_vhost_alias.html
8. #
9. http://www.ietf.org/rfc/rfc1035.txt
268
Rozdział 17. Usługi dost˛epne w PLD
10. http://www.linuxprinting.org/
11. http://www.ordb.org/lookup/
12. http://www.ordb.org/lookup/rbls/?host=w.x.y.z
13. http://jabberd.jabberstudio.org/2/docs/
14. http://www.powerdns.com/
15. http://www.powerdns.com/en/documentation.aspx
16. http://www.postgresql.org/
17. http://www.postgresql.org.pl/
18. http://www.proftpd.org/docs/
19. http://www.proftpd.org/docs/
20. http://www.afp548.com/Articles/system/sambapdc.html
21. http://www.slakaz.org/articles/6.html
22. http://www.snort.org
23. http://oinkmaster.sourceforge.net/
24. http://www.securityfocus.com/bid
25. http://www.cert.org/
26. http://www.cve.mitre.org/
27. http://www.nessus.org/
28. http://jeremy.chartier.free.fr/snortalog/
29. http://snort-inline.sf.net/
30. http://www.snortsam.net/
31. http://www.geschke-online.de/FLoP/
269
Rozdział 17. Usługi dost˛epne w PLD
270
Rozdział 18. X-Window
Rozdział opisuje konfiguracj˛e środowiska graficznego.
Wstep
˛
W rozdziale tym postaramy pomóc w stworzeniu systemu "biurkowego", czyli systemu z X-Window. B˛edziemy tu opisywać implementacj˛e X.Org, wi˛ecej 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ńczona˛ liczb˛e urzadze
˛
ń (dotyczy to zwłaszcza kart graficznych) i może si˛e niestety zdarzyć, że posiadamy kart˛e graficzna,˛ która nie jest obsługiwana. Dotyczy to głównie
najnowszego sprz˛etu, starsze modele maja˛ dosyć dobre wsparcie.
W przypadku kart firm firm ATI i NVIDIA, mamy dost˛epne zarówno sterowniki b˛edace
˛ cz˛eścia˛ X.Org jak i sterowniki zamkni˛ete, tworzone przez samych producentów.
Nielicznymi zaletami tych drugich jest bardzo dobra wydajność i pełne wsparcie dla
akceleracji grafiki trójwymiarowej.
X-Server
Instalacja
Na poczatku,
˛
korzystajac
˛ z programu poldek instalujemy konieczne pakiety. W przypadku Ac b˛eda˛ 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˛e nazwy pakietów i sa˛ 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˛epne (jeśli nie mamy pewności) lub ten właściwy. W ustaleniu, który
sterownik b˛edzie najbardziej odpowiedni pomoże nam zestawienie w dokumentacji
X.Org2. Nazwy pakietów ze sterownikami zaczynaja˛ 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˛e ATI to wybieramy pakiet:
$ poldek -i xorg-driver-video-ati
271
Rozdział 18. X-Window
Sterownikami z pełna˛ obsługa˛ 3D b˛edziemy mogli si˛e zajać
˛ później. Jeśli ciagle
˛
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˛e w pakiecie X11-modules
Zanim zaczniemy konfiguracje˛
Użytkownicy myszek PS/2 lub USB, którzy nie korzystaja˛ z dobrodziejstw udeva
musza˛ załadować oprócz modułu huba USB moduły:
# modprobe psmouse
# modprobe usbhid
Aby moduły ładowały si˛e za każdym razem, gdy uruchamiamy system, należy dodać ich nazwy do pliku /etc/modules. Wi˛ecej o zarzadzaniu
˛
modułami w sekcja
Statyczne zarzadzanie
˛
modułami w Rozdział 11.
Pierwsze uruchomienie
X.Org nie wymaga pliku konfiguracji do podstawowego działania, po uruchomieniu
automatycznie próbuje wykryć dołaczony
˛
sprz˛et. X-Serwer uruchamiamy nast˛epujaco:
˛
# X
Jeśli naszym oczom ukaże si˛e 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˛et
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 podstawowa˛ konfiguracj˛e, by uzyskać wi˛eksza˛ ergonomi˛e pracy, ustawić układ klawiatury dla danego j˛ezyka, czy obsłużyć dodatkowe możliwości sprz˛etu.
Konfiguracja
Generujemy wst˛epna˛ konfiguracj˛e 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˛e rozpoznać używany przez nas sprz˛et 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˛e uruchamia:
# X
dokładnie jak to wcześniej opisaliśmy.
272
Rozdział 18. X-Window
W ten oto sposób mamy wst˛epnie skonfigurowany X-Server i możemy rozpoczać
˛
prac˛e w środowisku graficznym. Wskazówki bardziej wyrafinowanej konfiguracji
odnajdziemy w sekcja Zaawansowane. Cz˛eść z nich b˛edziemy mogli dokonać za pomoca˛ poniżej opisanych programów (np. xorgcfg -textmode), bardziej zaawansowane opcje ustawimy wyłacznie
˛
edytujac
˛ plik konfiguracji.
Inne sposoby konfiguracji
Z aplikacja˛ dostarczane sa˛ dodatkowo dwa programy do konfiguracji, obydwie można użyć do generowania pliku konfiguracji zamiast operacji X -configure, pozwalaja˛
na precyzyjnie ustawianie parametrów X-Servera X -configure, jednak wymagaja˛ też
wi˛ecej 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 ta˛ zalet˛e, że może modyfikować
istniejacy
˛ plik konfiguracji. O ile wygod˛e trybu graficznego można uznać za
dyskusyjna,˛ o tyle tryb tekstowy nie powinien sprawiać nikomu problemów.
- jest to konsolowe narz˛edzie, które prowadzi krok po kroku przez
kolejne etapy konfiguracji. W zasadzie to przydaje si˛e do generowania pliku konfiguracji po raz pierwszy (zamiast X -configure), jeśli chce si˛e dokonać jakiejkolwiek zmiany trzeba przechodzić przez wszystkie kroki na nowo. Program ten dodatkowo dodaje do pliku liczne komentarze, co nie wszystkim odpowiada.
• xorgconfig
Rozwiazywanie
˛
problemów
Jeżeli pojawi si˛e jakiś problem musimy przeanalizować komunikaty wypisywane na
ekran i do pliku /var/log/Xorg.0.log. Bł˛edy sa˛ oznaczane dwoma literkami EE
np.:
(EE) Failed to load module "ati" (module does not exist, 0)
Powyższy komunikat informuje o brakujacym
˛
sterowniku do karty graficznej, najprawdopodobniej nie jest zainstalowany konieczny pakiet.
Środowisko graficzne (GUI)
Do wyboru mamy dwa pot˛eżne, zintegrowane środowiska: KDE i Gnome, nieco
mniejsze XFCE4, czy całkiem proste np. : blackbox, fluxbox b˛edace
˛ jedynie zarzad˛
cami 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 pomoca˛ skryptu startx lub demonów GDM/KDM. Zagadnienia te szczegółowo omówiliśmy w sekcja Uruchamianie środowiska graficznego.
Zaawansowane
W tym miejscu zajmiemy si˛e bardziej zaawansowana˛ konfiguracja˛ X-Servera. Zakładam, że istnieje wst˛epnie skonfigurowany plik /etc/X11/xorg.conf, za pomoca˛
polecenia X -configure. Wiele opisanych tu czynności konfiguracyjnych dla konkretnych podsystemów, wykonujemy za pomoca˛ programu xorgcfg, uruchamiamy go w
trybie tekstowym :
# xorgcfg -textmode
273
Rozdział 18. X-Window
Po uruchomieniu zobaczymy list˛e dost˛epnych kategorii, odpowiadaja˛ one
dalszym opisom. Przykładowo, aby skonfigurować myszk˛e, wybieramy z listy
opcj˛e: Configure mouse a nast˛epnie Edit Mouse0 itd. Po ustawieniu wszystkich
interesujacych
˛
nas opcji, wybieramy Write xorg.conf and quit
Bardziej zaawansowane b˛eda˛ wymagały ingerencji za pomoca˛ edytora tekstu, przypominam, że "obrabiamy" plik # /etc/X11/xorg.conf.
Mysz
Zakładam, że w programie wybraliśmy sekcj˛e konfiguracji myszki. Dla
współczesnych myszek, w konfiguracji protokołu wybieramy Auto, dla myszek
szeregowych wybierzemy Microsoft. Nast˛epnie konfigurator spyta o to, czy dla
myszek dwuprzyciskowych właczyć
˛
emulacj˛e trzeciego klawisza, w przypadku
myszek o wi˛ekszej ilości przycisków odpowiadamy negatywnie. Jako urzadzenie
˛
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˛e z wieloma klawiszami i rolkami, a standardowy sterownik
nie radzi sobie z obsługa˛ wszystkich zdarzeń, to możemy wybrać bardziej nowoczesny i elegancki sposób na uruchomienie naszego sprz˛etu - evdev. Przykładowa instalacja i konfiguracja zostanie przedstawiona dla popularnej myszki Logitech MX500.
Pierwszym krokiem jest załadowanie modułu jadra
˛
modprobe evdev oraz instalacja
pakietu xorg-driver-input-evdev (X11-driver-evdev dla Ac). Nast˛epnie odszukujemy w
/proc/bus/input/devices numer urzadzenia
˛
eventX naszej myszki i wpisujemy do
konfiga X.Org poniższa˛ sekcj˛e:
Section "InputDevice"
Identifier "Mouse1"
Driver
"evdev"
Option
"Device"
Option
"Buttons"
EndSection
"/dev/input/event1"
"10"
Klawiatura
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˛epujac
˛ a˛ konfiguracj˛e 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 pomoca˛ dowolnego edytora tekstu.
274
Rozdział 18. X-Window
Jeśli posiadamy klawiatur˛e multimedialna˛ i chcemy wykorzystywać jej dodatkowe
klawisze, to musimy wybrać odpowiedni model klawiatury. Nasz wybór b˛edzie dotyczył wartości parametru XkbModel, nast˛epnie musimy sprawdzić za pomoca˛ programu xev czy wszystkie zdarzenia z klawiszy multimedialnych sa˛ prawidłowo obsługiwane przez X-serwer.
Monitor
Właściciele monitorów LCD/Plasma sa˛ na uprzywilejowanej pozycji, jeśli sterownik karty graficznej potrafi "porozumieć si˛e" z monitorem (za pomoca˛ DDC), to nie
sa˛ wymagane żadne czynności konfiguracyjne. Aby detekcja nast˛epowała automatycznie musimy w pliku konfiguracji postawić znak komentarza ("#") przed opcjami
HorizSync, VertRefresh.
W pozostałych przypadkach musimy określić parametry monitora. Wybierajac
˛ opcje
programu Configure monitor, b˛edziemy b˛edziemy mogli wybrać jakiś monitor z listy lub podać parametru własnego urzadzenia:
˛
Enter your own horizontal sync
range. Tu podajemy wartości HorizSync (w kHz) i VertRefresh w (Hz) zgodne ze
specyfikacja˛ naszego urzadzenia.
˛
Po zapisaniu pliku konfiguracji otrzymamy:
Section "Monitor"
Identifier "Monitor0"
HorizSync
31.5 - 96.0
VertRefresh 50 - 100
Option "DPMS"
EndSection
O ile HorizSync jest opcja˛ ściśle zależna˛ od możliwości monitora i pod żadnym pozorem nie powinniśmy jej dowolnie zmieniać, o tyle VertRefresh daje wi˛ecej swobody.
Za jej pomoca˛ 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˛estotliwość 85Hz. (oczywiście pod warunkiem, że nasz monitor, przy danej rozdzielczości pozwala na wyświetlanie z taka˛ wartościa).
˛
Rozdzielczość obrazu
Wst˛epnie plik konfiguracji nie zawiera żadnych definicji rozdzielczości i b˛edzie ona
ustalana automatycznie, co jest wskazane przy monitorach LCD/Plasma. W przypadku monitorów CRT, zapewne b˛edziemy chcieli użyć najbardziej ergonomicznej.
Mamy tu dwa wyjścia, możemy nic nie ustawiać w X.Org, ale za to ustawić ja˛ w aplikacjach konfiguracyjnych środowisk Gnome/KDE, lub ustawić ja˛ na stałe w konfiguracji X-serwera. Możliwości ustawień konfiguratorów w środowiskach graficznych
sa˛ dosyć skromne, dlatego niektórzy pokusza˛ si˛e zapewne o ustawienie odpowiednich wartości na stałe.
Po wybraniu Configure screen w programie, zostaniemy zapytani o ilość dost˛epnych kolorów, dla współczesnego sprz˛etu bez zastanowienia możemy wybrać 24bity
na piksel a nast˛epnie wybieramy list˛e rozdzielczości, które maja˛ być dost˛epne. W
wi˛ekszości wypadków wystarczy nam jedna rozdzielczość. Oczywiście musi być obsługiwana przez monitor. Zapisana konfiguracja może wygladać
˛
nast˛epujaco:
˛
Section "Screen"
Identifier "Screen0"
Device
"Card0"
Monitor
"Monitor0"
SubSection "Display"
Viewport
0 0
Depth
24
Modes "1024x768"
EndSubSection
275
Rozdział 18. X-Window
EndSection
Zaawansowane - DPI
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 pomoca˛ DDC odczytywany jest rozmiar obszaru wyświetlania, by automatycznie określić DPI. Dla monitorów, które nie posiadaja˛ takiej możliwości lub podaja˛
ja˛ nieprawidłowo, b˛edziemy 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˛e:
DisplaySize $x $y
gdzie parametry $x i $y sa˛ wymiarami w milimetrach, odczytanymi z dokumentacji
urzadzenia
˛
lub po prostu zmierzonymi linijka.˛ Sekcja konfiguracji monitora może
wygladać
˛
nast˛epujaco:
˛
Section "Monitor"
Identifier "Monitor0"
HorizSync
31.5 - 96.0
VertRefresh 50 - 100
DisplaySize 269 201
EndSection
Zaawansowane - serwer czionek
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˛edziemy korzystać z serwera czcionek X11-xfs, który uruchamiamy poleceniem /etc/init.d/xfs start. Dlatego też
sekcja dotyczaca
˛ czcionek w pliku xorg.conf.new powinna wygladać
˛
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˛e zarzadzania
˛
czcionkami serwerowi xfs.
Uwagi
Parametry monitora moga˛ być odczytywane za pomoca˛ modułu DDC, o ile monitor
jest właczony.
˛
Powinniśmy zatem właczać
˛
monitor przed uruchomieniem X-Servera
lub ustawić "na sztywno" jego parametry, inaczej w skrajnym wypadku obraz b˛edzie
miał rozdzielczość 640x480, przy odświeżaniu 60Hz.
276
Rozdział 18. X-Window
Środowisko GNOME
Instalacja
GNOME jest rozbudowanym środowiskiem, dodatkowo filozofia mikropakietów w
PLD nie ułatwia jego instalacji poczatkuj
˛
acym.
˛
Aby temu zaradzić stworzone zostały
metapakiety, które oszcz˛edza˛ nam sporej ilości pracy, oto ich zestawienie:
•
metapackage-gnome - główna cz˛eść środowiska
•
metapackage-gnome-extras - dodatki
•
metapackage-gnome-extras-accessibility - narz˛edzie ułatwień dost˛epu
•
metapackage-gnome-office - pakiet aplikacji biurowych
Na poczatku
˛
powinien nam wystarczyć podstawowy metapakiet:
poldek> install metapackage-gnome
Teraz wystarczy uzbroić si˛e w cierpliwość, po instalacji wymagań metapakietu, możemy już samodzielnie doinstalować te kilka pakietów, albo od razu uruchomić środowisko. Filozofi˛e metapakietów omówiliśmy w sekcja Cechy pakietów w PLD w Rozdział 9.
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 imponujaca,
˛ aby łatwiej było
si˛e odnaleźć w tym gaszczu,
˛
zach˛ecamy do zapoznania si˛e z zestawieniem aplikacji
w dalszej cz˛eści rozdziału.
Internacjonalizacja
Aby GNOME i GDM obsługiwały j˛ezyk inny niż angielski, należy ustawić tzw. Locale, co zostało opisane w sekcja Internacjonalizacja w Rozdział 12, a nast˛epnie wybrać
preferowany j˛ezyk: Language z menu GDM-a.
Dźwiek
˛
Zakładam, że już została skonfigurowana już ALSA, zgodnie ze wskazówkami opisanymi w sekcja ALSA - Dźwi˛ek w Linuksie w Rozdział 17. Od GNOME 2.26 dźwi˛ek
jest obsługiwany przez aplikacj˛e pulseaudio, zapewniajac
˛ a˛ programowe miksowanie dźwi˛eku z wielu źródeł, czy też przesyłanie strumienia za pośrednictwem sieci.
Instalujemy:
$ poldek -i pulseaudio pulseaudio-gconf pulseaudio-alsa gstreamer gstreamer-audiosink-e
instalujemy pakiety z pluginami dekodujacymi
˛
formaty wav,au oraz mp3:
$ poldek -i
gstreamer-audio-formats gstreamer-mad
instalujemy gnome-media, aplet do sterowania głośnościa,˛ odtwarzacz Totem i
opcjonalnie pakiet dźwi˛eków zdarzeń:
$ poldek -i gnome-media gnome-applets-mixer totem gnome-audio
277
Rozdział 18. X-Window
Uruchomienie
Zanim uruchomimy środowisko, musimy si˛e 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 sekcja Podstawowa konfiguracja sieci w Rozdział 15, np.:
127.0.0.1
pldmachine
Szczegóły uruchamiania środowiska opisaliśmy w sekcja Uruchamianie środowiska
graficznego.
Administracja - GNOME System Tools
GST to zestaw wygodnych narz˛edzi administracyjnych, obsługujacych
˛
PolicyKit. Pozwala na zarzadzanie
˛
m.in. usługami, użytkownikami oraz siecia.˛ 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˛edziemy mogli używać po ponownym zalogowaniu.
Przydatne drobiazgi
O wygodzie pracy w środowisku czasami decyduja˛ drobiazgi, oto lista takich niewielkich narz˛edzi, przydatnych w codziennej pracy:
•
gnome-volume-manager - narz˛edzie do zarzadzania
˛
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żace
˛ 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˛ep do wielu appletów, tematów graficznych i innych.
Godne polecenia aplikacje
Zaleta˛ złożonych środowisk takich jak GNOME czy KDE jest duża liczba programów, które dobrze integruja˛ si˛e ze środowiskiem, poniżej została zamieszczona lista
użytecznych programów.
278
•
gnome-terminal - rozbudowany emulator terminala z obsługa˛ zakładek
•
gcalctool - wielofunkcyjny kalkulator
Rozdział 18. X-Window
•
totem - odtwarzacz audio i video.
•
Exaile, Quod Libet i Rhythmbox - wygodne odtwarzacze audio z dobra˛ obsługa˛
dużych bibliotek muzyki, wszystkie obsługuja˛ gstreamera.
•
eog - Eye of GNOME - narz˛edzie do przegladania
˛
obrazków
•
evince - program służacy
˛
do przegladania
˛
dokumentów w formatach pdf,
postscript i wielu innych.
•
gedit2 - edytor tekstu z obsługa˛ kolorowania składni j˛ezyków programowania i
wtyczek.
•
epiphany - przegladarka
˛
WWW z silnikiem renderujacym
˛
Gecko
•
evolution - rozbudowany klient poczty i narz˛edzie do planowania zadań
•
gajim - klient Jabbera
•
file-roller - zarzadca
˛
archiwów - jest graficznym interfejsem dla własciwych
narz˛edzi archiwizacji danych
•
Brasero (dawniej Bonfire) - komfortowe narz˛edzie do nagrywania płyt CD/DVD.
Wi˛ecej na stronie www.gnome.org/projects/3, warto też odwiedzić stron˛e
www.gnomefiles.org4, b˛edacej
˛ bogatym zestawieniem aplikacji bardziej lub mniej
zwiazanych
˛
ze środowiskiem.
Pomoc i rozwiazywanie
˛
problemów
GNOME jest dostarczane z pokaźna˛ dokumentacja˛ - niestety brak jest polskiego tłumaczenia. Jest dost˛epna dla aktywnego okna po wciśni˛eciu przycisku F1 lub po wywołaniu programu yelp - przegladarki
˛
dokumentacji. Musimy tylko doinstalować
konieczne pakiety:
$ poldek -i gnome-user-docs yelp
Jeśli natkniemy si˛e na jakieś problemy z działaniem aplikacji, na poczatek
˛
powinniśmy zajrzeć do specjalnego dziennika bł˛edów:
$ cat ~/.xsession-errors
Możemy też spróbować uruchomić dana˛ aplikacj˛e w wirtualnym terminalu (np. w
programie gnome-terminal), w celu odczytania komunikatów programu.
Środowisko KDE
Poniżej przedstawiamy list˛e 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
279
Rozdział 18. X-Window
Od tej chwili, domyślnym środowiskiem graficznym dla tego użytkownika jest KDE,
które możemy uruchomić za pomoca˛ polecenia startx.
Blackbox - Szybki i lekki zarzadca
˛
okien
Wstep
˛
Blackbox jest lekkim menedżerem okien dla XFree86. Jest napisany w C++, a jego
projekt zakładał wydajność, niskie użycie pami˛eci oraz brak zależności od zewn˛etrznych bibliotek. Blackbox zabiera bardzo niewiele miejsca na ekranie na dekoracje
okien. Mimo swojego minimalizmu, jest bardzo wygodny i funkcjonalny. Zawiera
wszystko, czego oczekuje si˛e od menedżera okien - obsług˛e wirtualnych pulpitów,
okna typu sticky, zwijanie okien, okna pozbawione dekoracji. Posiada też pasek dokowania, zwany slitem, na którym moga˛ umieszczać si˛e aplety w stylu NEXTstep
(np. Window Maker, AfterStep) oraz okna w trybie withdrawn (np. gkrellm). Te cechy sprawiły, że Blackbox stał si˛e całkiem popularny wśród osób nie lubiacych
˛
przeładowania towarzyszacego
˛
środowiskom KDE i GNOME
Dzi˛eki swoim zaletom Blackbox stał si˛e na tyle znany, że wypaczkowało
˛
z niego kilka
odmian z nowymi cechami. Należa˛ do nich Fluxbox, Openbox i Kahakai. Blackbox i
jego pochodne sa˛ doskonałym wyborem, jeśli pożadane
˛
jest oszcz˛edzanie pami˛eci i
niskie wykorzystanie procesora. Sa˛ też dobre dla tych, którzy wola˛ elegancj˛e ponad
nadmiar elementów, jaki wyst˛epuje w popularnych środowiskach. My w tym opisie
zajmiemy si˛e instalacja˛ Blackbox.
Instalacja pakietów
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 wymagajacy
˛ jeżeli chodzi o zasoby.
Konfiguracja
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 pomoca˛ przyjdzie nam program vfmg, który już wcześniej zainstalowaliśmy. Komendy które sa˛ poniżej należy wykonywać w katalogu domowym ~/
# mkdir ~/.blackbox
# vfmg blackbox > .blackbox/menu
280
Rozdział 18. X-Window
Mamy już gotowe menu, ale nie ma w nim opcji "Wyjście", która jest niewatpliwie
˛
przydatna˛ opcja.˛
W ~/.blackbox/menu należy pod sam koniec dopisać "Wyjście" tak, aby 3 ostatnie
linijki wygladały
˛
nast˛epujaco:
˛
# tail -3 ~/.blackbox/menu
[end]
[exit] (Wyjście)
[end]
Dodatkowo należy edytować plik ~/.blackboxrc i zmienić w nim linijk˛e
session.menuFile na:
# grep menu .blackboxrc
session.menuFile:
.blackbox/menu
Majac
˛ już menu Blackbox możemy go wreszcie uruchomić:
# startx
Aby wszystko poprawnie funkcjonowało należy zapoznać si˛e z działem "Konfiguracja środowiska graficznego", który znajduje si˛e w dokumentacji PLD.
Fluxbox - Nastepca
˛
BlackBoxa
Wstep
˛
Młodszym bratem BlackBoxa jest Fluxbox, bazujacy
˛ na kodzie Blackboxa. Fluxbox
wyglada
˛ 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 sa˛ wi˛ec 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ń.
Instalacja pakietów
Czas zainstalować potrzebne nam pakiety.
# poldek -i fluxbox fluxconf
Właściwie do pracy potrzebny nam jest tylko fluxbox, ale fluxconf troch˛e ułatwia
konfiguracje.
Konfiguracja
Aby fluxbox był naszym domyślnym menadżerem okien w .Xclients dajemy wpis.
exec fluxbox
281
Rozdział 18. X-Window
wyglad
˛ menu można zmieniać edytujac
˛ 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 korzystajac
˛ z programu vfmg.
Instalujemy go poleceniem:
# poldek -i vfmg
Nast˛epnie wydajemy polecenia:
# mkdir ~/.fluxbox
# vfmg blackbox > ~/.fluxbox/menu
Mamy już gotowe menu, ale nie ma w nim opcji "Wyjście", która jest niewatpliwie
˛
przydatna˛ opcja.˛
W ~/.fluxbox/menu należy pod sam koniec dopisać "Wyjście" tak, aby 3 ostatnie
linijki wygladały
˛
nast˛epujaco:
˛
# tail -3 ~/.blackbox/menu
[end]
[exit] (Wyjście)
[end]
Chcac
˛ dodać tło pulpitu możemy si˛e 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 ImageMag
nast˛epnie w pliki ~/.fluxbox/init odszukujemy wpis:
session.screen0.rootCommand: i dodajemy: display -size ROZDZIELCOZŚĆ -window root NAZWA
u mnie wpis ten wyglada
˛ nast˛epujaco:
˛
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
Uruchamianie środowiska graficznego
Istnieja˛ dwie metody uruchamiania środowiska, pierwsza˛ jest uruchamianie systemu
na trzecim poziomie pracy (domyślnie) i autoryzowaniu si˛e w terminalu tekstowym.
282
Rozdział 18. X-Window
Po zalogowaniu uruchamiamy program startx. Druga˛ możliwościa˛ 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łaja˛ na piatym
˛
poziomie
pracy, dlatego musimy skonfigurować system by domyślnie startował na tym poziomie. Estetyka i wygoda to nie jedyne zalety demonów, sa˛ one silnie zintegrowane ze
swoimi środowiskami, dzi˛eki czemu zapewniaja˛ wiele dodatkowych funkcji.
Skrypt startx
W tej metodzie po zalogowaniu si˛e 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 obowiazuje
˛
w nim
jej składnia, wpis w nim można wykonać nast˛epujaco:
˛
$ echo "gnome-session" >~/.xinitrc
lub
$ echo "exec gnome-session" >~/.xinitrc
Aby uruchomić środowisko wykonujemy polecenie:
$ startx
Poniżej przedstawilimy list˛e programów startowych dla wybranych środowisk:
•
Gnome: gnome-session
•
KDE: startkde
•
XFCE: startxfce4
•
fluxbox: fluxbox
•
icewm: icewm
Jedynie w wyjatkowych
˛
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.
GDM
Zaczynamy od instalacji demona GDM:
poldek> install gdm gdm-init
i już możemy go uruchomić:
# service gdm start
283
Rozdział 18. X-Window
Powinniśmy móc si˛e teraz zalogować i uruchomić środowisko, jeśli wszystko działa prawidłowo to możemy ustawić by system uruchamiał si˛e ma piatem
˛
poziomie
pracy, zgodnie ze wskazówkami pod koniec rozdziału.
KDM
Instalujemy KDM
# poldek -i kdm
Dla lokalnej pracy nie trzeba nic specjalnie konfigurować, wi˛ec od razu możemy uruchomić demona poleceniem:
# /etc/init.d/kdm start
Pozostało nam jeszcze poinformować nasz system, że chcemy, aby nasz zarzadca
˛
uruchamiał si˛e po starcie systemu (na piatym
˛
poziomie).
Ustawienie poziomu pracy
W przypadku demonów GDM/KDM powinniśmy jeszcze skonfigurować system
tak, by domyślnie uruchamiał si˛e na piatym
˛
poziomie. pracy. Owe usługi uruchamiaja˛ si˛e 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 sekcja Zmiana poziomu pracy systemu w Rozdział 14. Wiersz
z opcja˛ initdefault powinien wygladać
˛
nast˛epujaco:
˛
id:5:initdefault:
Aby sprawdzić poprawność operacji, możemy zrestartować system.
Porady
Należy za wszelka˛ cen˛e unikać logowania si˛e jako administrator (root), jeśli chcemy
używać aplikacji wymagajacych
˛
wysokich uprawnień, powinniśmy je uruchamiać
za pomoca˛ programu sudo.
Karty firmy nVidia
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 pomoca˛ programu poldek zainstalować
pakiety:
# X11-driver-nvidia kernel-video-nvidia
Nast˛epnie w wygenerowanym pliku konfiguracyjnym serwera X11 dokonujemy
zmian w sekcji Device Card0:
Identifier
Driver
VendorName
BoardName
BusID
284
"Card0"
"nvidia"
"nVidia Corporation"
"NV5M64 [RIVA TNT2 Model 64/Model 64 Pro]"
"PCI:1:0:0"
Rozdział 18. X-Window
Option
Option
Option
Option
Option
"HWCursor"
"CursorShadow"
"DPMS"
"noDCC"
"NoLogo"
"on"
"on"
"on"
"on"
"on"
Czyli praktycznie zamieniamy ciag
˛ znaków w linijce Driver z nv na nvidia.
Teraz wracamy do serwera X11 i jego testowego uruchomienia. W przypadku problemów standardowo zagladamy
˛
w logi.
Karty firmy ATI
Do zainstalowania kart graficznych firmy ATI zalecamy wykorzystać firmowe sterowniki firegl. Z serwerem X11 dostarczane sa˛ także otwarte sterowniki X11-driverati - jednak nie wykorzystuja˛ one wszystkich możliwości jakie daja˛ sterowniki firegl i
dopiero przy dużych problemach z nimi możemy jako awaryjne skonfigurować serwer X11 z otwartymi sterownikami ATI.
Instalacja i konfiguracja
Aby wczytać firegl, należy za pomoca˛ programu poldek zainstalować pakiety:
# X11-driver-firegl kernel-video-firegl
Nast˛epnie za pomoca˛ programu fglrxconfig generujemy plik konfiguracyjny dla serwera X11. Oprócz pytań zwiazanych
˛
z serwerem odpowiemy na szereg pytań dotyczacych
˛
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 dotyczacym
˛
instalacji X11
należy z katalogu domowego użytkownika root do katalogu /etc/X11/ i dokonać
ewentualnych korekt dotyczacych
˛
myszy i obsługi czcionek
Aby karta graficzna została poprawnie zainicjowana musimy wczytać odpowiednie
moduły kernela. Na poczatku
˛
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˛epnie wczytujemy moduł kernela obsługujacy
˛ 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˛e upewnić, że mamy zamontowany pseudo-system plików shm
używany do obsługi dzielonej pami˛eci POSIX. Wymagany wpis w /etc/fstab wyglada
˛ nast˛epujaco:
˛
none
/dev/shm
tmpfs
defaults
0 0
Test konfiguracji
Teraz możemy wrócić do konfigurowania serwera X11 i jego testowego uruchomienia. Kiedy uruchomimy X-Window możemy sprawdzić poprawność konfiguracji pomoca˛ programów glxinfo oraz glxgears uruchamianych z emulatora terminala (np.
285
Rozdział 18. X-Window
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 osiagn
˛ ać
˛ wydajność kilku tysi˛ecy klatek na sekund˛e. W przypadku problemów standardowo zagladamy
˛
w logi.
Przypisy
1. http://www.x.org/wiki/
2. http://xorg.freedesktop.org/wiki/Projects/Drivers?action=show
3. http://www.gnome.org/projects/
4. http://www.gnomefiles.org
286
Rozdział 19. Możliwa droga do zostania szeregowym
developerem PLD
Co jest potrzebne
Każdego użytkownika Linuxa pracujacego
˛
na swojej maszynie nachodziła refleksja
na tematy filozoficzne - kto to wymyślił? kto to zrobił? i jak to zrobił? Pytania ciekawe
- Prezentujac
˛ sposób pracy przy PLD możemy cz˛eściowo zrozumieć mechanizmy
tworzenia takich projektów.
Naszym miejscem pracy b˛edzie 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˛e pakietów - sam proces instalacji w praktycznie zostanie pomini˛ety, gdyż
użytkownicy już powinni wiedzieć co to jest poldek i jak si˛e 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˛e uwag˛e tylko na CVS. Sposób instalacji środowiska1 bardzo dobrze opisuje
Baseciq2 - ten krok należy wykonać ze szczególna˛ starannościa˛
Innym ważnym pakietem jest rpm plus dodatki. Głównym zaj˛eciem szeregowego
developera jest tworzenie lub modyfikacja plików .spec, które sa˛ głównym czynnikiem budowania pakietów RPM. Sa˛ jeszcze potrzebne różne inne pakiety i źródła ale to już w zależności od tego co b˛edziemy budować.
Źródła wiedzy
Najwi˛eksza˛ skarbnica˛ wiedzy o RPMie i budowaniu pakietów możemy znaleźć w
publikacji Maximum RPM3 - opis jest w j˛ezyku angielskim i nie jest mi znane tłumaczenie na nasz j˛ezyk. Na szcz˛eście sa˛ jeszcze inne źródełka, a także i niniejszy opis
- wi˛ec powinno nam być lżej przyswajać wiedz˛e. Szczególnie polecam stron˛e Grzegorza Niew˛egłowskiego4 (lub lokalna˛ kopi˛e)5 gdzie dużo teorii i praktycznych rad
może nam rozjaśnić w naszych głowach czym jest praca ze "specami".
Jest dost˛epny także opis stworzony przez Developera PLD6 lecz z tego co si˛e dowiedziałem jest już troch˛e leciwy i niektóre dane moga˛ być nieścisłe.
Po tej bombie teorii jaka˛ niestety musimy przejść, czeka nas przestudiowanie jeszcze
jednego dokumentu, którego najnowsza˛ wersj˛e możemy ściagn
˛ ać
˛ z CVS PLD. B˛edzie
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
$
287
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
Jak widać kroki wykonujemy jako zwykły użytkownik (nie root) i tej zasady b˛edziemy si˛e konsekwentnie trzymali.
Do katalogu ~/rpm/PLD-doc/ ściagneliśmy
˛
z repozytorium PLD dokument tekstowy devel-hints-pl.txt7. W tym dokumencie zawarte sa˛ zalecenia i ustalenia jakich
powinniśmy si˛e trzymać aby tworzyć właściwe dla PLD pakiety RPM.
Przykład budowania
Teraz spróbujemy ściagn
˛ ać
˛ jakiś .spec z CVS PLD i zbudujemy sobie jakaś
˛ paczk˛e np. pakiet tar (przykład budowania ’ekg’ mogliśmy obejrzeć także podczas instalacji
CVS na stronie Baseciq8):
$ cd rpm
$ cvs get SPECS/tar.spec
U SPECS/tar.spec
$ cd SPECS/
$ rpmbuild -ba tar.spec
bład:
˛
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 ściagni˛
˛ eciu
”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 ściagnie
˛
odpowiedniego .speca (oczywiście jeżeli tylko zawiera go
repozytorium CVS), źródła i wykona paczki rpm i srpms - ale my nie b˛edziemy tutaj
sobie za bardzo ułatwiać pracy :-)
Po ściagni˛
˛ eciu 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
288
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
BuildRequires:
BuildRequires:
BuildRequires:
BuildRequires:
autoconf
automake
bison
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˛ec ’poldek’ rusza do boju (tutaj już
lepiej użyć konta ’root’ - chyba że mamy poldka skonfigurowanego do pracy ’sudo’):
# poldek
Wczytywanie
Wczytywanie
Wczytywanie
Wczytywanie
Wczytywanie
Wczytywanie
Przeczytano
ftp://ftp.pld-linux.org/dists/[...]/RPMS/packages.dir.gz...
ftp://ftp.pld-linux.org/dists/ra/[...]/packages.dir.gz...
ftp://ftp.pld-linux.org/dists/ra/[...]/packages.dir.gz...
ftp://ep09.kernel.pl/pub/People/[...]/packages.dir.gz...
ftp://ftp.pld-linux.org/dists/[...]/packages.dir.gz...
http://pld.mysza.eu.org/Ra/i686/packages.dir.gz...
6814 pakietów
Usuni˛
eto 16 zdublowanych pakietów z listy dost˛
epnych
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˛ec 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):
289
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
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˛ete 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ł˛edu 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ł˛edów podczas budowania.
Nasz pierwszy pakiet został zbudowany.
Pozostaje jednak niedosyt - ciagle
˛ 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
Pierwszy spec
No to zaczynamy. Naszym pierwszym (a właściwie moim) wykonanym specem b˛edzie Mantis9 czyli system kontroli bł˛edów oparty o stron˛e WWW (PHP) i baz˛e SQL
Mysql.
Tutaj mała dygresja - wi˛ekszość pakietów powstaje dlatego, że danemu Developerowi był on akurat potrzebny; oznacza to że nie ma sensu pisanie na list˛e dyskusyjna˛
z prośba˛ o stworzenie określonego pakietu bo można otrzymać par˛e przykrych komentarzy (w najlepszym razie).
Pierwsza˛ czynnościa˛ jest zainstalowanie pakietu ze źródeł. Potem notujemy sobie co
należy zrobić aby dany pakiet zaczał
˛ działać - wszystko po to aby przewidzieć co dany .spec powinien zrobić aby pakiet pracował w miar˛e bezproblemowo po instalacji
RPMa - Można to zanotować np. na kartce papieru - ale od czego mamy komputery?
Moje notatki wygladały
˛
tak:
// MANTIS
// Mysql init
# cd /etc/rc.d/init.d
# ./mysql init
# /usr/bin/mysqladmin -u mysql password ’password’
290
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
// 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 zwiazku
˛
z j˛
ezykiem)
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˛e słów o samym
mantisie. System jest oparty o gotowe pliki składajace
˛ si˛e na stron˛e WWW, dokumentacje i plik potrzebny do stworzenia odpowiedniej bazy Mysql. Nie b˛edziemy
dokonywali żadnych kompilacji - wi˛ec uprości to nasz proces budowania i testowania pakietu.
Łacz
˛ ac
˛ informacje zawarte w dostarczonej dokumentacji i własnych notatek wiemy
już że głównym zadaniem naszego RPMa b˛edzie takie zaprojektowanie go, aby odpowiednie pliki PHP zostały przekopiowane w odpowiednie miejsce, dokonać niezb˛ednych poprawek w plikach konfiguracyjnych lub innych poprawek, które naszym zdaniem moga˛ ułatwić prac˛e przyszłym użytkownikom. Pami˛etajmy jednak
żeby nie przedobrzyć.
Niestety nie wszystko uda nam si˛e zautomatyzować - dlatego stworzymy dwa pliki tekstowe (w dwóch wersjach j˛ezykowych PL i EN) z krótkim opisem, co należy
wykonać aby system zadziałał.
Wydaje mi si˛e 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˛edzie wyświetlał bł˛edy.
Okazuje si˛e że pakiety w PLD sa˛ maksymalnie ”rozdrobnione” i do działania potrzebny jest jeszcze pakiet ’php-pcre’ - a do tego, żeby strony PHP odpowiednio komunikowały si˛e z baza˛ ’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’.
291
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
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 ściagni˛
˛ ecie 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ł˛
edów
Name: mantis
Version: 0.18.0a4
# define _alpha a4
Release: 1
License: GPL
Group: Development/Tools
[...]
Zaczynamy wypełniać tzw. preambuł˛e, czyli wst˛ep w którym opisujemy nasz pakiet
- myśl˛e, że wyjaśnianie powyższego nie jest specjalnie potrzebne. Zwróc˛e tylko uwag˛e na lini˛e ’Version’ i ’Ralease’ - zgodnie z devel-hints-pl.txt10 powinno ono raczej
wygladać
˛
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ład
˛ przy budowaniu, gdyż jak dalej zobaczymy nazwa
źródeł korzysta z pola ’Version’ i każda manipulacja na nim powoduje potrzeb˛e przebudowania .speca lub zmian˛e nazwy archiwum w którym sa˛ źródła (co jest bardzo
złym nawykiem i karygodnym bł˛edem!). Tak wi˛ec 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 sa˛ jednak chlebem powszednim wi˛ec nie bójmy
si˛e 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˛e go najcz˛eściej w formie
linku plus fraza %{name}-%{version}.tar.gz i tak naprawd˛e ta fraza jest
najważniejsza do zbudowania pakietu, ponieważ URL (w naszym przypadku
http://dl.sourceforge.net/mantisbt/) jest ignorowany. Tak wi˛ec 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˛epuje jeszcze Source111 - jest to dodatkowa dokumentacja składajaca
˛ si˛e z dwóch plików tekstowych zawierajaca
˛ dodatkowe
wskazówki po instalacyjne. Pierwotnie próbowałem zrobić to korzystajac
˛ z mechanizmu Patch i polecenia:
diff -urN katalog_z_oryginałem
źródła-powód.patch
katalog_z_poprawionym_oryginałem
>
opisanego w devel-manual12 (rozdział 1.2.2), ale mechanizm ten nie pozwala tworzyć
nowych plików wi˛ec pozostało tylko wykonać dodatkowe źródła.
Pami˛etajmy także aby w żadnym przypadku nie modyfikować r˛ecznie źródeł
programu. Prawidłowy .spec powinien wykorzystywać natywne źródła, a wszelkie
zmiany dokonujemy w %build, %install lub za pomoca˛ patch’ów.
Sygnatura md5 po # jest wynikiem wykorzystania tzw. distfiles i na razie to musi
nam wystarczyć. Distfiles omówimy gdy b˛edziemy zapisywać do CVS PLD - czyli
niepr˛edko ;-)
292
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
[...]
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˛e poprawnie polecenia wykonywane przez .spec (np.
sekcja %post)
W ’BuildArch’ architektur˛e pod który przeznaczony jest RPM - u nas jest to ’noarch’
czyli bez żadnej konkretnej architektury - z moich obserwacji wynika że developerzy
PLD omijaja˛ to pole - chyba że jest to właśnie ’noarch’.
’BuildRoot’ jest bardzo ważnym tagiem - na szcz˛eście wyst˛epuje zawsze w takiej
postaci jak u nas - a oznacza katalog w którym rpm b˛edzie 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ł˛
edów opartym na interfejsie \
WWW i MySQL.
[...]
W tej cz˛eści wykorzystujemy przydatna˛ właściwość RPMa czyli definiowanie stałych. W naszym przykładzie ’_mantisdir’ jest katalogiem w którym b˛eda˛ zainstalowane pliki dla serwera WEB. Tutaj mała uwaga dotyczaca
˛ komentarza ’#’ - Gdy definiujemy makro wtedy komentarz nie działa, dlatego usun˛eliś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˛e chyba wyjaśniać jakie to może spowodować
problemy?
W ’%description’ opisujemy krótko charakterystyk˛e pakietu, a niżej widzimy jak to
zrobić dla opisu w j˛ezyku polskim - później RPM wykorzystujac
˛ zmienne locale wyświetla odpowiednia˛ wersj˛e j˛ezykowa˛ ’description’ gdy sobie tego od RPMa życzymy.
[...]
%prep
%setup -q -a1
[...]
293
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
Od tego momentu skończyliśmy wypełniać dane preambuły. Sekcja %prep może wykonać skrypt potrzebny przed instalacja˛ plików. My akurat nic przed instalacja˛ 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łaczaj
˛
a˛ 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 taka˛ modyfikacj˛e ź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˛e w wi˛ekszości pakietów przed ’%install’ wykonywane jest makro
’%build’, które kompiluje nam źródła, a w najprostszej postaci wyglada
˛ tak:
%build %configure make
U nas nie ma potrzeby wykonywania żadnych kompilacji wi˛ec od razu wykonywana
jest sekcja ’%install’. Na poczatku
˛
czyścimy sobie katalog w którym b˛edziemy instalowali nasz program (czyli ’fake root’) - mimo że prawdopodobnie jest pusty - ale
lepiej dmuchać na zimne. Potem dokonujemy instalacji pakietu przekazujac
˛ mu w
parametrze ’-d’ że docelowo ma być zainstalowany w ’fake root’, ale same pliki pojawia˛ si˛e w naszym katalogu tymczasowym (TMPDIR), dlatego później za pomoca˛
polecenia ’cp’ kopiujemy pliki, jakie sa˛ potrzebne, do właściwego ’fake root’ - zauważmy że pomin˛eliśmy np. katalog ’doc’.
Nast˛epnie jeszcze za pomoca˛ komendy ’SED’ dokonujemy drobnej poprawki w pliku
konfiguracyjnym mantisa - zamieniajac
˛ domyślnego użytkownika MYSQL z ’root’
na ’mysql’. Taka˛ poprawk˛e 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 obowiazkowy
˛
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˛epujacy
˛
później tag ’%files’ miałby niejakie problemy z nieistniejacymi
˛
już plikami. Czyli po
poprawnym zbudowaniu pakietu, wykonywane jest makro ’%clean’, a w przypadku
jakiegokolwiek bł˛edu, nie jest - czyli rozpakowane i zainstalowane źródła pozostaja.˛
Umożliwia nam to np. diagnostyk˛e w przypadku bł˛edów podczas budowania pakietu.
[...]
%post
if [ "$LANG" = "pl_PL" ]; then
#sed -e "s/= ’english’;/= ’polish’;/g" \
294
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
%{_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˛
ecej: /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˛eda˛ instalowane po zbudowaniu pakietu. Makro ’%post’ wykonywane jest przez RPM podczas instalacji
pakietu. Zakomentowane polecenia umożliwiaja˛ zmian˛e w zainstalowanym pliku
’config_defaults_inc.php’ zgodnie z zawartościa˛ zmiennej locale ’LANG’. Później w
zależności od tej zmiennej wyświetlany jest komunikat w j˛ezyku PL lub EN.
Zadacie pytanie dlaczego cz˛eść tych poleceń jest ”wyłaczona"
˛
- otóż, później gdy
dany .spec chcemy już udost˛epnić ogółowi zostanie on sprawdzony pod wzgl˛edem
”czystości rasowej” :-) - W tym przypadku okazało si˛e, że taka zmiana w plikach konfiguracyjnych, może spowodować kłopoty podczas np. zmiany użytkownika. Programy korzystajace
˛ z ’locale’ powinny odpowiednio reagować na zmiany ’locale’ np. po modyfikacji LANG na ’EN_en’ zaczać
˛ 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 dodatkowa˛ instrukcja,˛
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*
295
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
%{_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 instalujacego
˛
naszego RPMa. Tag %files jest bardzo
ważny gdyż bł˛edy spowodowane tutaj moga˛ 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˛epnie w:
%doc doc/* PLD_Install_PL.txt PLD_Install_EN.txt config_inc.php.sample
określamy nasze pliki, które znajda˛ si˛e w dokumentacji. Czyli katalog ’doc/’ z katalogu ’TMPDIR’ i pliki z ’SOURCE1’ oraz ’config_inc.php.sample’ zostana˛ 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ła˛ ’%{_mantisdir}’ i kopiujemy pliki jakie sa˛ poniżej tego tagu. Na poczatku
˛
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˛e
bład
˛ 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˛epowały na liście do skopiowania i jako pliki konfiguracyjne. Dlatego trzeba niestety zrobić list˛e plików jak to my
zrobiliśmy minus pliki, które znajda˛ si˛e 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łaczenie
˛
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˛e pakiet rpm i srpm. Zostaje jeszcze przetestowanie czy
wszystkie pliki sa˛ tam gdzie chcieliśmy, czy maja˛ odpowiednie prawa i czy pakiet
działa tak jak powinien. Jeszcze ewentualne poprawki i musimy przepuścić nasza˛
prac˛e przez zestaw adaptujacy
˛ ’adapter.awk’.
Ściagamy
˛
go z CVSu:
$ cvs get SPECS/adapter.awk
U SPECS/adapter.awk
296
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
$
nast˛epnie zmieniamy nazw˛e pliku .speca dodajac
˛ 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˛e developerów: w mailu umieszczajac
˛ załacznik
˛
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˛e ściagn
˛ ać
˛ z lokacji jaka˛ umieściliśmy w naszym .specu.).
Załacznik
˛
powinien być typu plain-text.
Można także spróbować na grupie IRC #PLD znaleźć ofiar˛e, która umieści nasza˛ prac˛e w repozytorium.
Dobrze też w czasie nauki robienia .speców podgladać
˛
jak to robia˛ inni - W repozytorium CVS jest naprawd˛e z czego wybierać. A my nabywajac
˛ umiej˛etność czytania
plików .spec możemy skupić si˛e już tylko na odpowiednim ich napisaniu.
W końcu otrzymamy możliwość zapisu do CVS i wtedy czytamy nast˛epna˛ cz˛eść
poradnika ”W krainie CVS”
Przypisy
1. http://developer-doc.pld-linux.org/baseciq/slack2pld.html
2. http://www.baseciq.org/
3. http://developer-doc.pld-linux.org/maximum%20rpm/index.htm
4. http://lubuska.zapto.org/~hoppke/too_much_to_learn/rpm/index.html
5. http://developer-doc.pld-linux.org/hoppke/too_much_to_learn/rpm/index.htm
6. http://developer-doc.pld-linux.org/develmanual/develmanual-packages.html
7. http://developer-doc.pld-linux.org/develhints/developer_hints.htm
8. http://developer-doc.pld-linux.org/baseciq/slack2pld.html
9. http://mantisbt.sourceforge.net/
10. http://developer-doc.pld-linux.org/develhints/developer_hints.htm
11. http://developer-doc.pld-linux.org/source1.htm
12. http://developer-doc.pld-linux.org/develmanual/develmanual-packages.html
297
Rozdział 19. Możliwa droga do zostania szeregowym developerem PLD
298
Rozdział 20. W krainie CVS - czyli wielki kocioł
Wstep
˛
Umiemy już w miar˛e klecić nowe spece, naprawiać stare - chcemy dołaczyć
˛
do drużyny PLD... Musimy mieć wi˛ec możliwość pogrania na boisku, a nie tylko zasiadać
na trybunach jako widz. Naszym boiskiem b˛edzie CVS a możliwość czytania i pisania do niego (Read-Write) naszym sposobem na gr˛e :)
Jak to życiu, aby coś dostać musimy najpierw si˛e postarać i wykonać par˛e czynności.
Żeby otrzymać własne konto CVS należy uzyskać poparcie już aktywnych deweloperów. Zwykle osoby wykazujace
˛ si˛e aktywnościa˛ na listach dyskusyjnych (podsyłajace
˛
patche, itp.) pr˛edzej czy później sa˛ wr˛ecz proszone o zgłoszenie si˛e po konto. W typowym przypadku wystarczy, że trzech deweloperów wyrazi poparcie kandydata na
dewelopera (trzeci z nich powinien wskazać mu dokad
˛ powinien si˛e zgłosić po konto). Osoba popierajaca
˛ kandydata jednocześnie staje si˛e jego opiekunem i nadzoruje
jego działania w poczatkowej
˛
fazie. W przypadku gdyby, mimo poparcia przez niektórych, osoba kandydata wywoływała kontrowersje, decyzja o jego przyj˛eciu (lub
nie) b˛edzie podj˛eta zgodnie z obowiazuj
˛ ac
˛ a˛ procedura˛ rozwiazywania
˛
konfliktów.
Kiedy już zostaniemy przyj˛eci, musimy wymyśleć sobie ksywk˛e i hasło. Potem z
linii poleceń wykonujemy jednolinijkowe polecenie - wstawiajac
˛ 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 ciag
˛ znaków podobny do:
login:/APGG.cfeqPpk
Ciag
˛ ten kopiujemy do listu e-mail z prośba˛ 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˛eciu dniach przyjdzie mail z odpowiedzia.˛
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 ja˛ dla przykładu :)
Witam,
twoje konto zostało założone, prosz˛
e dopisz si˛
e do CVSROOT/users
-Admin CVS <imi˛
e i nazwisko> :)
Czyli pierwsze formalności mamy za soba.˛ Możemy już działać na CVS. Jednak proponuj˛e znowu troch˛e teorii - tym razem zdecydowana wi˛ekszość dokumentacji jest
w j˛ezyku angielskim. Mamy wi˛ec bardzo dobry, oficjalny podr˛ecznik CVS2 (uwaga
ponad 800KB), ksia˛żk˛e kucharska˛ CVS3 (uwaga ponad 600KB) - jest także opis po
polsku4 - stworzony przez developerów PLD, a także ksia˛żka z cyklu leksykon kieszonkowy "CVS" Gregor N. Purdy (koszt ok. 10PLN) - tak wi˛ec jest w czym wybierać.
Jeszcze raz zwróćmy uwag˛e 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 modyfikujac
˛ istniejace,
˛ dotychczasowe konto "anonymous" albo tworzac
˛ od poczatku
˛
środowsko w nowym katalogu. Ja wybrałem pierwszy
sposób (troch˛e wbrew zaleceniom z dokumentacji - ale za to szybszy), polega on na
modyfikacji każdego pliku "Root" w podkatalogach "CVS" - należy tam wpisać fraz˛e:
299
Rozdział 20. W krainie CVS - czyli wielki kocioł
: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˛ecznie plik "Root" - nie ma w tej chwili tych
katalogów wiele, wi˛ec nie powinno to sprawić kłopotu.
Proponuj˛e także poustawiać sobie zmienne CVS np. CVSEDITOR itp. (szczegóły oczywiście dokumentacja).
Nast˛epnie możemy już spróbować zalogować si˛e 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ł˛edu 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
ciagle
˛ gotowi do pracy.
Czas już zabrać si˛e za plik "users"
$ cvs get CVSROOT/users
U CVSROOT/users
$
Do naszego lokalnego repozytorium, do katalogu CVSROOT ściagneliś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˛e
Nazwisko:[email protected]
i
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˛e cz˛eść i zatrzymujemy si˛e na imieniu i nazwisku. Dla zainteresowanych - istnieje
oficjalny serwer Jabbera projektu PLD Linux - konta na nim zakłada Mariusz Mazur.
Edytujemy odpowiednio wi˛ec plik users (pami˛etajmy, żeby zachować alfabetyczna˛
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˛e nasz ulubiony edytor i
pojawi si˛e coś podobnego do:
- added nasz_login // tu wpisujemy komentarz z kreseczka˛ 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 nasza˛ skrzynk˛e pocztowa.˛
300
Rozdział 20. W krainie CVS - czyli wielki kocioł
Dalsza cz˛eść naszych rozważań b˛edzie 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 raczk˛
˛ e nie b˛edzie prowadził, a czekaja˛ nas pot, krew,
łzy i pierwsze "recenzje" naszych poczynań - np. na grupie PLD-devel czy kanale
#PLD - a jedynymi nagrodami b˛edzie brak tych recenzji, zdobyta wiedza, satysfakcja
i działajace
˛ paczki, których przez chwil˛e nikt na świecie nie b˛edzie miał :)
Dodawanie plików do CVS PLD
Każdy nowy plik, który chcemy umieścić w repozytorium należy dodać za pomoca˛
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˛e za
pomoca˛ polecenia "cvs ci" (polecenia podaj˛e w formie skróconej) - Samo zatwierdzanie (commit) robiliśmy już wcześniej przy okazji pliku "users".
Aktualizacja plików
Pliki możemy zaktualizować wzgl˛edem CVS - jeżeli nasz plik jest nowszy nie zostanie dokonana żadna zmiana na naszym lokalnym repozytorium. Aktualizacja˛ nie
dokonujemy zmian na zdalnym repozytorium.
Jeżeli w danym katalogu mamy już zdefiniowana˛ kartotek˛e (czyli mamy już odpowiedni podkatalog CVS) to aktualizacja˛ możemy ściagn
˛ ać
˛ 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˛e 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˛edem
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˛ety 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
301
Rozdział 20. W krainie CVS - czyli wielki kocioł
Zatwierdzanie zmian i Distfiles
Sam przykład zatwierdzania zmian mogliśmy poznać wcześniej. Jest to najcz˛eściej
wykonywana operacja na CVS.
Jednak chciałbym zwrócić uwag˛e na inny sposób składowania źródeł natywnych.
W pewnym momencie okazuje si˛e, że składowanie wszystkich plików w repozytorium CVS jest mało efektywne i powoduje zbyt duże obcia˛żenia serwerów. Dlatego
też w PLD zastosowano mechanizm Distfiles5 którego krótki opis możemy odszukać tu6. W wielkim skrócie oznacza to że preparujac
˛ odpowiednio spec (pami˛etacie
tajemnicze md5?) i korzystajac
˛ z odpowiednich opcji programu ./builder możemy
sterować ściaganiem
˛
plików do distfiles. Tak naprawd˛e najcz˛eściej wykorzystane sa˛
dwie opcje ./builder - "5" i "U". Jest to także powód używania programu ./builder (a
nie frazy "rpmbuild -ba"), którego kopi˛e najlepiej ściagn
˛ ać
˛ z CVS. Pami˛etajmy także
o tym, że w systemie istnieje inny builder, który jest dostarczany z narz˛edziami 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˛eściej do katalogu SOURCES).
Oto przykłady użycia ./builder z odpowiednimi opcjami:
$ ./builder -5 mantis.spec
# $Revision: 6218 $, $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.
Łaczenie
˛
si˛
e z dl.sourceforge.net[193.1.219.87]:80... połaczono
˛
si˛
e.
Żadanie
˛
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" sa˛ podobne, z tym że "5" próbuje poprawić md5 korzystajac
˛ z istniejacego
˛
sources w lokalnym repozytorium. Natomiast "U" próbuje zawsze ściagn
˛ ać
˛
źródła z podanego przez spec URL. Taka jest teoria. Ja praktycznie używam opcji "U"
kasujac
˛ wcześniej źródła z lokalnego repozytorium, ponieważ w innym przypadku
wyskakuja˛ dziwne bł˛edy o konflikcie z parametrem -nd
$ ./builder -U mantis.spec
# $Revision: 6218 $, $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.
Łaczenie
˛
si˛
e z dl.sourceforge.net[193.190.198.97]:80... połaczono
˛
si˛
e.
Żadanie
˛
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.
$
Odnogi (Branche) i Etykiety (Tag)
W każdym wi˛ekszym CVSie, projekty główne rozgał˛eziaja˛ si˛e tworzac
˛ tzw. branche
- W przypadku PLD np. istnieje stabilny, lecz już troche leciwy branch "RA-branch",
który wywodzi si˛e z brancha głównego HEAD. W pewnym momencie RA-branch
302
Rozdział 20. W krainie CVS - czyli wielki kocioł
został "zamrożony" i dokonywane sa˛ na nim tylko zmiany zawierajace
˛ poprawki
poważnych bł˛edów lub aktualizacje zwiazane
˛
z bezpieczeństwem. Branch HEAD
"żyje" dalej i sa˛ w nim dokonywane zmiany i powstaja˛ nowe pakiety. Odgał˛ezień
może być (i jest) wiele, co na poczatku
˛
troche gmatwa spojrzenie na CVS ale później
doceniamy zalety tego rozwiazania.
˛
Dane odnogi maja˛ przydzielone odpowiednie
etykiety "lepkie" (ang. sticky tag) - czyli etykieta jest przekazywana każdej nast˛epnej
wersji w danej odnodze. Zwykłe etykiety (ang. tag) możemy użyć np. do okreslenia
indywidualnego stanu danego pliku - określajac
˛ np. tag STABLE, UNSTABLE lub
DEVELOP.
Jeżeli chodzi o etykietowanie to trzeba zachować rozwag˛e. Musimy być pewni że
wiemy co chcemy osiagn
˛ ać,
˛ bo możemy popsuć prac˛e komuś innemu (dotyczy to
także zmian w cudzych specach).
Praktycznie najcz˛eściej wykorzystywane sa˛ nast˛epujace
˛ opcje zwiazane
˛
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 dotyczace
˛
lepkiej etykiety - zwiazanej
˛
z branchem (odnoga)
˛
Sticky Date: (none)
Sticky Options: (none)
Existing Tags: // Istniejace
˛
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 PLD7
bo sam tego jeszcze nie robiłem :). Etykietowanie możemy wykonać np.: majac
˛ plik
w naszym lokalnym repozytorium wydajemy polecenie:
cvs tag UNSTABLE plik.spec
czyli plik.spec otrzymał etykiet˛e UNSTABLE.
Ostatnim przykładem b˛edzie przenoszenie zmian mi˛edzy odnogami (branchami).
Robiac
˛ 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˛eściej różnice mi˛edzy wersjami w odnogach sa˛ tak duże, że otrzymamy komunikat o braku automatycznej możliwości przeniesienia zmian. Wtedy można rozwiazać
˛
ten problem innym sposobem. Tworzymy np. w podkatalogu "SPECS" katalog "RA-branch" (nazwa katalogu jest nieistotna, ale pomocna). W podkatalogu "RAbranch" 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
303
Rozdział 20. W krainie CVS - czyli wielki kocioł
Myśl˛e że komentarze sa˛ czytelne. Gdy zrobimy co najmniej jedna˛ taka˛ operacj˛e, to
istniejacy
˛ katalog RA-branch może nam służyć do późniejszych operacji kopiowania
zmian mi˛edzy odnogami (np. korzystajac
˛ z opcji "cvs up".
Zlecenia dla builderów
Zdarza si˛e cz˛esto, że chcemy dać sygnał iż dany pakiet powinien zostać przebudowany przez buildery PLD (czyli takie zdalne komputery-muły8 robocze, które przygotowuja˛ 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"
Zakończenie
Zbliżamy si˛e do końca naszego praktycznego poradnika. Nie zostało poruszonych
wiele kwestii, które wyjda˛ w codziennej pracy. Dlatego mamy do pomocy dokumentacj˛e, listy dyskusyjne, IRC, zasoby CVS i przegladark˛
˛
e GOOGLE ;). Praca ta miała
na celu wprowadzić w świat pracy developerskiej i pokazać praktyczne rozwiazania
˛
niektórych problemów - reszta zależy od naszej wiedzy i pracowitości - i pami˛etajmy, że najważniejsze to rozwijać swoje zdolności, bo od tego zależy nasza przyszłość
i przyszłość projektu dla którego pracujemy :)
Przypisy
1. mailto:[email protected]
2. http://developer-doc.pld-linux.org/cvs_official_eng/cederqvist-1.11.6.html
3. http://developer-doc.pld-linux.org/cvs_book/cvsbook.html
4. http://developer-doc.pld-linux.org/cvs_pld/cvs_pld.html
5. http://developer-doc.pld-linux.org/distfiles/distfiles.htm
6. http://developer-doc.pld-linux.org/distfiles/distfiles.htm
7. http://developer-doc.pld-linux.org/cvs_pld/cvs_pld.html
8. http://buildlogs.pld-linux.org/
304
Rozdział 21. O podreczniku
˛
Autorzy dokumentacji PLD
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ł˛ebiowski 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>
305
Rozdział 21. O podr˛eczniku
306
Rozdział 22. Licencja i prawa autorskie
Tłumaczenie Licencji GNU Wolnej Dokumentacji
Niniejsza dokumentacja jest wydawana na licencji GNU Wolnej Dokumentacji.
Oryginalny tekst licencji wersji 1.2 w j˛ezyku angielskim możemy odnaleźć na
stronie GNU Free Documentation License1. Tłumaczenie starszej wersji 1.1 zostanie
tutaj przytoczone i znajduje si˛e na stronie GNU.org.pl2. Różnice mi˛edzy wersja˛ 1.1 a
1.2 niniejszej licencji w wersji angielskiej możemy przeczytać korzystajac
˛ z tego
odnośnika3
Wersja 1.1, marzec 2000
Copyright (c) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston,
MA 02111-1307 USA Zezwala si˛e na kopiowanie i rozpowszechnianie wiernych kopii
niniejszego dokumentu licencyjnego, jednak bez prawa wprowadzania zmian.
0. Preambuła
Celem niniejszej licencji jest zagwarantowanie wolnego dost˛epu do podr˛ecznika, treści ksia˛ż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 musza˛ nosić cech˛e wolnego dost˛epu w tym samym sensie co produkt oryginalny. Licencja stanowi uzupełnienie Powszechnej Licencji Publicznej GNU (GNU
General Public License), która jest licencja˛ dotyczac
˛ a˛ wolnego oprogramowania.
Niniejsza Licencja została opracowana z zamiarem zastosowania jej do podr˛eczników do wolnego oprogramowania, ponieważ wolne oprogramowanie wymaga wolnej dokumentacji: wolny program powinien być rozpowszechniany z podr˛ecznikami, których dotycza˛ te same prawa, które wia˛ża˛ si˛e z oprogramowaniem. Licencja
ta nie ogranicza si˛e jednak do podr˛eczników oprogramowania. Można ja˛ stosować
do różnych dokumentów tekstowych, bez wzgl˛edu na ich przedmiot oraz niezależnie od tego, czy zostały opublikowane w postaci ksia˛żki drukowanej. Stosowanie tej
Licencji zalecane jest głównie w przypadku prac, których celem jest instruktaż lub
pomoc podr˛eczna.
1. Zastosowanie i definicje
Niniejsza Licencja stosuje si˛e do podr˛eczników i innych prac, na których umieszczona jest pochodzaca
˛ od właściciela praw autorskich informacja, że dana praca może
być rozpowszechniana wyłacznie
˛
na warunkach niniejszej Licencji. Używane poniżej
słowo "Dokument" odnosić si˛e b˛edzie do wszelkich tego typu publikacji. Ich odbiorcy nazywani b˛eda˛ licencjobiorcami.
"Zmodyfikowana wersja" Dokumentu oznacza wszelkie prace zawierajace
˛ Dokument lub jego cz˛eść w postaci dosłownej badź
˛ zmodyfikowanej i/lub przełożonej
na inny j˛ezyk.
"Sekcja˛ drugorz˛edna"
˛ nazywa si˛e dodatek opatrzony odr˛ebnym tytułem lub sekcj˛e
poczatkow
˛
a˛ Dokumentu, która dotyczy wyłacznie
˛
zwiazku
˛
wydawców lub autorów
Dokumentu z ogólna˛ tematyka˛ Dokumentu (lub zagadnieniami z nia˛ zwiazanymi)
˛
307
Rozdział 22. Licencja i prawa autorskie
i nie zawiera żadnych treści bezpośrednio zwiazanych
˛
z ogólna˛ tematyka˛ (na przykład, jeżeli Dokument stanowi w cz˛eści podr˛ecznik matematyki, Sekcja drugorz˛edna
nie może wyjaśniać zagadnień matematycznych). Wyżej wyjaśniany zwiazek
˛
może
si˛e natomiast wyrażać w aspektach historycznym, prawnym, komercyjnym, filozoficznym, etycznym lub politycznym.
"Sekcje niezmienne" to takie Sekcje drugorz˛edne, których tytuły sa˛ ustalone jako tytuły Sekcji niezmiennych w nocie informujacej,
˛
że Dokument został opublikowany
na warunkach Licencji.
"Treść okładki" to pewne krótkie fragmenty tekstu, które w nocie informujacej,
˛
że Dokument został opublikowany na warunkach Licencji, sa˛ opisywane jako "do umieszczenia na przedniej okładce" lub "do umieszczenia na tylnej okładce".
"Jawna" kopia Dokumentu oznacza kopi˛e czytelna˛ dla komputera, zapisana˛ w formacie, którego specyfikacja jest publicznie dost˛epna. Zawartość tej kopii może być
ogladana
˛
i edytowana bezpośrednio za pomoca˛ typowego edytora tekstu lub (w
przypadku obrazów złożonych z pikseli) za pomoca˛ typowego programu graficznego lub (w przypadku rysunków) za pomoca˛ ogólnie dost˛epnego edytora rysunków.
Ponadto kopia ta stanowi odpowiednie dane wejściowe dla programów formatuja˛
cych tekst lub dla programów konwertujacych
˛
do różnych formatów odpowiednich
dla programów formatujacych
˛
tekst. Kopia spełniajaca
˛ powyższe warunki, w której
jednak zostały wstawione znaczniki majace
˛ na celu utrudnienie dalszych modyfikacji
przez czytelników, nie jest Jawna. Kopi˛e, która nie jest "Jawna", nazywa si˛e "Niejawna".
˛
Przykładowe formaty kopii Jawnych to: czysty tekst ASCII bez znaczników, format
wejściowy Texinfo, format wejściowy LaTeX, SGML lub XML wykorzystujace
˛ publicznie dost˛epne DTD, standardowy prosty HTML przeznaczony do r˛ecznej modyfikacji. Formaty niejawne to na przykład PostScript, PDF, formaty własne, które
moga˛ być odczytywane i edytowane jedynie przez własne edytory tekstu, SGML lub
XML, dla których DTD i/lub narz˛edzia przetwarzajace
˛ nie sa˛ ogólnie dost˛epne, oraz
HTML wygenerowany maszynowo przez niektóre procesory tekstu jedynie w celu
uzyskania danych wynikowych.
"Strona tytułowa" oznacza, w przypadku ksia˛żki drukowanej, sama˛ stron˛e tytułowa˛
oraz kolejne strony zawierajace
˛ informacje, które zgodnie z ta˛ Licencja˛ musza˛ pojawić si˛e na stronie tytułowej. W przypadku prac w formatach nieposiadajacych
˛
strony
tytułowej "Strona tytułowa" oznacza tekst pojawiajacy
˛ si˛e najbliżej tytułu pracy, poprzedzajacy
˛ poczatek
˛
tekstu głównego.
2. Kopiowanie dosłowne
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ówiacej,
˛
że do Dokumentu ma zastosowanie niniejsza Licencja, a także pod warunkiem nie umieszczania
żadnych dodatkowych ograniczeń, które nie wynikaja˛ z Licencji. Licencjobiorca nie
ma prawa używać żadnych technicznych metod pomiarowych utrudniajacych
˛
lub
kontrolujacych
˛
czytanie lub dalsze kopiowanie utworzonych i rozpowszechnianych
przez siebie kopii. Może jednak pobierać opłaty za udost˛epnianie kopii. W przypadku dystrybucji dużej liczby kopii Licencjobiorca jest zobowiazany
˛
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.
3. Kopiowanie ilościowe
Jeżeli Licencjobiorca publikuje drukowane kopie Dokumentu w liczbie wi˛ekszej niż
100, a licencja Dokumentu wymaga umieszczenia Treści okładki, należy dołaczyć
˛
kopie okładek, które zawieraja˛ cała˛ wyraźna˛ i czytelna˛ Treść okładki: treść przedniej
308
Rozdział 22. Licencja i prawa autorskie
okładki, na przedniej okładce, a treść tylnej okładki, na tylnej okładce. Obie okładki
musza˛ też jasno i czytelnie informować o Licencjobiorcy jako wydawcy tych kopii.
Okładka przednia musi przedstawiać pełny tytuł; wszystkie słowa musza˛ 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˛edami jako kopiowanie dosłowne.
Jeżeli napisy wymagane na którejś z okładek sa˛ zbyt obszerne, by mogły pozostać
czytelne po ich umieszczeniu, Licencjobiorca powinien umieścić ich poczatek(tak
˛
a˛
ilość, jaka wydaje si˛e rozsadna)
˛
na rzeczywistej okładce, a pozostała˛ cz˛eść na sasied˛
nich stronach.
W przypadku publikowania lub rozpowszechniania Niejawnych kopii Dokumentu
w liczbie wi˛ekszej niż 100, Licencjobiorca zobowiazany
˛
jest albo dołaczyć
˛
do każdej
z nich Jawna˛ kopi˛e czytelna˛ dla komputera, albo wymienić w lub przy każdej kopii
Niejawnej publicznie dost˛epna˛ w sieci komputerowej lokalizacj˛e pełnej kopii Jawnej
Dokumentu, bez żadnych informacji dodanych -- lokalizacj˛e, do której każdy użytkownik sieci miałby bezpłatny anonimowy dost˛ep za pomoca˛ standardowych publicznych protokołów sieciowych. W przypadku drugim Licencjobiorca musi podjać
˛
odpowiednie środki ostrożności, by wymieniona kopia Jawna pozostała dost˛epna 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˛e, choć nie wymaga, aby przed rozpocz˛eciem rozpowszechniania dużej liczby kopii Dokumentu, Licencjobiorca skontaktował si˛e z jego autorami celem uzyskania uaktualnionej wersji Dokumentu.
4. Modyfikacje
Licencjobiorca może kopiować i rozpowszechniać Zmodyfikowana˛ wersj˛e
Dokumentu na zasadach wymienionych powyżej w punkcie 2 i 3 pod warunkiem
ścisłego przestrzegania niniejszej Licencji. Zmodyfikowana wersja pełni wtedy
rol˛e Dokumentu, a wi˛ec Licencja dotyczaca
˛
modyfikacji i rozpowszechniania
Zmodyfikowanej wersji przenoszona jest na każdego, kto posiada jej kopi˛e. Ponadto
Licencjobiorca musi w stosunku do Zmodyfikowanej wersji spełnić nast˛epujace
˛
wymogi:
•
A. Użyć na Stronie tytułowej (i na okładkach, o ile istnieja)
˛ 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˛e.
•
B. Wymienić na Stronie tytułowej, jako autorów, jedna˛ lub kilka osób albo jednostek odpowiedzialnych za autorstwo modyfikacji Zmodyfikowanej wersji, a także
przynajmniej pi˛eciu spośród pierwotnych autorów Dokumentu (wszystkich, jeśli
było ich mniej niż pi˛eciu).
•
C. Umieścić na Stronie tytułowej nazw˛e wydawcy Zmodyfikowanej wersji.
•
D. Zachować wszelkie noty o prawach autorskich zawarte w Dokumencie.
•
E. Dodać odpowiednia˛ not˛e o prawach autorskich dotyczacych
˛
modyfikacji obok
innych not o prawach autorskich.
•
F. Bezpośrednio po notach o prawach autorskich, zamieścić not˛e licencyjna˛
zezwalajac
˛ a˛ na publiczne użytkowanie Zmodyfikowanej wersji na zasadach
niniejszej Licencji w postaci podanej w Załaczniku
˛
poniżej.
•
G. Zachować w nocie licencyjnej pełna˛ list˛e Sekcji niezmiennych i wymaganych
Treści okładki podanych w nocie licencyjnej Dokumentu.
•
H. Dołaczyć
˛
niezmieniona˛ kopi˛e niniejszej Licencji.
309
Rozdział 22. Licencja i prawa autorskie
•
I. Zachować sekcj˛e zatytułowana˛ "Historia" oraz jej tytuł i dodać do niej informacj˛e dotyczac
˛ a˛ 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 ja˛ utworzyć,
podajac
˛ tytuł, rok, autorów i wydawc˛e Dokumentu zgodnie z danymi zamieszczonymi na stronie tytułowej, a nast˛epnie dodajac
˛ informacj˛e dotyczac
˛ a˛ Zmodyfikowanej wersji, jak opisano w poprzednim zdaniu.
•
J. Zachować wymieniona˛ w Dokumencie (jeśli taka istniała) informacj˛e o lokalizacji sieciowej, publicznie dost˛epnej Jawnej kopii Dokumentu, a także o podanych
w Dokumencie lokalizacjach sieciowych poprzednich wersji, na których został on
oparty. Informacje te moga˛ si˛e znajdować w sekcji "Historia". Zezwala si˛e na pomini˛ecie 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˛e.
•
K. W każdej sekcji zatytułowanej "Podzi˛ekowania" lub "Dedykacje" zachować tytuł
i treść, oddajac
˛ również ton każdego z podzi˛ekowań 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 sa˛ traktowane jako należace
˛ do tytułów sekcji.
•
M. Usunać
˛ wszelkie sekcje zatytułowane "Adnotacje". Nie musza˛ one być
załaczane
˛
w Zmodyfikowanej wersji.
•
N. Nie nadawać żadnej z istniejacych
˛
sekcji tytułu "Adnotacje" ani tytułu pokrywajacego
˛
si˛e z jakakolwiek
˛
Sekcja˛ niezmienna.˛
Jeżeli Zmodyfikowana wersja zawiera nowe sekcje poczatkowe
˛
lub dodatki stanowiace
˛ Sekcje drugorz˛edne i nie zawierajace
˛ materiału skopiowanego z Dokumentu,
Licencjobiorca może je lub ich cz˛eść 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 musza˛ być różne od tytułów pozostałych sekcji.
Licencjobiorca może dodać sekcj˛e "Adnotacje", pod warunkiem, że nie zawiera ona
żadnych treści innych niż adnotacje dotyczace
˛ Zmodyfikowanej wersji -- moga˛ to
być na przykład stwierdzenia o recenzji koleżeńskiej albo o akceptacji tekstu przez
organizacj˛e 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 przekraczaja˛
cej pi˛eciu słów, a także fragment o długości do 25 słów "do umieszczenia na tylnej
okładce". Przez każda˛ jednostk˛e (lub na mocy ustaleń przez nia˛ poczynionych) może zostać dodany tylko jeden fragment z przeznaczeniem na przednia˛ okładk˛e i jeden z przeznaczeniem na tylna.˛ Jeżeli Dokument zawiera już treść okładki dla danej
okładki, dodana˛ uprzednio przez Licencjobiorc˛e lub w ramach ustaleń z jednostka,˛
w imieniu której działa Licencjobiorca, nowa treść okładki nie może zostać dodana.
Dopuszcza si˛e jednak zastapienie
˛
poprzedniej treści okładki nowa˛ pod warunkiem
wyraźnej zgody poprzedniego wydawcy, od którego stara treść pochodzi.
Niniejsza Licencja nie oznacza, iż autor (autorzy) i wydawca (wydawcy) wyrażaja˛
zgod˛e na publiczne używanie ich nazwisk w celu zapewnienia autorytetu jakiejkolwiek Zmodyfikowanej wersji.
5. Łaczenie
˛
dokumentów
Licencjobiorca może łaczyć
˛
Dokument z innymi dokumentami wydanymi na warunkach niniejszej Licencji, na warunkach podanych dla wersji zmodyfikowanych w
cz˛eści 4 powyżej, jednak tylko wtedy, gdy w połaczeniu
˛
zostana˛ zawarte wszystkie
Sekcje niezmienne wszystkich oryginalnych dokumentów w postaci niezmodyfikowanej i gdy b˛eda˛ one wymienione jako Sekcje niezmienne połaczenia
˛
w jego nocie
licencyjnej.
310
Rozdział 22. Licencja i prawa autorskie
Połaczenie
˛
wymaga tylko jednej kopii niniejszej Licencji, a kilka identycznych Sekcji
niezmiennych może zostać zastapionych
˛
jedna.˛ Jeżeli istnieje kilka Sekcji niezmiennych o tym samym tytule, ale różnej zawartości, Licencjobiorca jest zobowiazany
˛
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 sa˛ w tytułach sekcji na liście Sekcji niezmiennych w nocie licencyjnej połaczenia.
˛
W połaczeniu
˛
Licencjobiorca musi zawrzeć wszystkie sekcje zatytułowane "Historia"
z dokumentów oryginalnych, tworzac
˛ jedna˛ sekcj˛e "Historia". Podobnie ma postapić
˛
z sekcjami "Podzi˛ekowania" i "Dedykacje". Wszystkie sekcje zatytułowane "Adnotacje" należy usunać.
˛
6. Zbiory dokumentów
Licencjobiorca może utworzyć zbiór składajacy
˛ si˛e z Dokumentu i innych dokumentów wydanych zgodnie z niniejsza˛ Licencja˛ i zastapić
˛ poszczególne kopie Licencji pochodzace
˛ z tych dokumentów jedna˛ kopia˛ dołaczon
˛
a˛ do zbioru, pod warunkiem zachowania zasad Licencji dotyczacych
˛
kopii dosłownych we wszelkich innych aspektach każdego z dokumentów.
Z takiego zbioru Licencjobiorca może wyodr˛ebnić pojedynczy dokument i rozpowszechniać go niezależnie na zasadach niniejszej Licencji, pod warunkiem zamieszczenia w wyodr˛ebnionym dokumencie kopii niniejszej Licencji oraz zachowania zasad Licencji we wszystkich aspektach dotyczacych
˛
dosłownej kopii tego dokumentu.
7. Zestawienia z pracami niezależnymi
Kompilacja Dokumentu lub jego pochodnych z innymi oddzielnymi i niezależnymi
dokumentami lub pracami nie jest uznawana za Zmodyfikowana˛ wersj˛e Dokumentu, chyba że odnosza˛ si˛e 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 sa˛ to pochodne Dokumentu.
Jeżeli do kopii Dokumentu odnosza˛ si˛e wymagania dotyczace
˛ Treści okładki wymienione w cz˛eści 3 i jeżeli Dokument stanowi mniej niż jedna˛ czwarta˛ całości zestawienia, Treść okładki Dokumentu może być umieszczona na okładkach zamykajacych
˛
Dokument w obr˛ebie zestawienia. W przeciwnym razie Treść okładki musi si˛e pojawić na okładkach całego zestawienia.
8. Tłumaczenie
Tłumaczenie jest uznawane za rodzaj modyfikacji, a wi˛ec Licencjobiorca może rozpowszechniać tłumaczenia Dokumentu na zasadach wymienionych w punkcie 4. Zastapienie
˛
Sekcji niezmiennych ich tłumaczeniem wymaga specjalnej zgody właścicieli prawa autorskiego. Dopuszcza si˛e 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˛edzy zamieszczonym tłumaczeniem a oryginalna˛ wersja˛ angielska˛ niniejszej Licencji moc prawna˛ ma oryginalna
wersja angielska.
9. Wygaśniecie
˛
Poza przypadkami jednoznacznie dopuszczonymi na warunkach niniejszej Licencji
nie zezwala si˛e Licencjobiorcy na kopiowanie, modyfikowanie, czy rozpowszechnianie Dokumentu ani też na cedowanie praw licencyjnych. We wszystkich pozostałych
311
Rozdział 22. Licencja i prawa autorskie
wypadkach każda próba kopiowania, modyfikowania lub rozpowszechniania Dokumentu albo cedowania praw licencyjnych jest nieważna i powoduje automatyczne wygaśni˛ecie 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 zostana˛ anulowane, dopóki strony te w pełni
si˛e do nich stosuja.˛
10. Przyszłe wersje Licencji
W miar˛e potrzeby Free Software Foundation może publikować nowe poprawione
wersje GNU Free Documenation License. Wersje te musza˛ pozostawać w duchu podobnym do wersji obecnej, choć moga˛ si˛e różnić w szczegółach dotyczacych
˛
nowych
problemów czy zagadnień. Patrz http://www.gnu.org/copyleft/. Każdej wersji niniejszej Licencji nadaje si˛e wyróżniajacy
˛ ja˛ numer. Jeżeli w Dokumencie podaje si˛e
numer wersji Licencji, oznaczajacy,
˛ iż odnosi si˛e do niego podana "lub jakakolwiek
późniejsza" wersja licencji, Licencjobiorca ma do wyboru stosować si˛e 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ć dowolna˛
wersj˛e kiedykolwiek opublikowana˛ (nie jako propozycja) przez Free Software Foundation.
Załacznik:
˛
Jak zastosować t˛e Licencj˛e dla swojego dokumentu.
Aby zastosować t˛e Licencj˛e w stosunku do dokumentu swojego autorstwa, dołacz
˛
kopi˛e Licencji do dokumentu i zamieść nast˛epujac
˛ a˛ informacj˛e o prawach autorskich
i uwagi o licencji bezpośrednio po stronie tytułowej.
Copyright (c) ROK TWOJE IMIE I NAZWISKO Udziela si˛e zezwolenia do kopiowania rozpowszechniania i/lub modyfikacj˛e 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łaczona
˛
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 postap
˛ z "Tekstem na Tylnej Okładce"
Jeśli w twoim dokumencie zawarte sa˛ nieszablonowe przykłady kodu programu, zalecamy abyś także uwolnił te przykłady wybierajac
˛ licencj˛e wolnego oprogramowania, taka˛ jak Powszechna Licencja Publiczna GNU, w celu zapewnienia możliwości
ich użycia w wolnym oprogramowaniu.
Przypisy
1. http://www.fsf.org/copyleft/fdl.html
2. http://gnu.org.pl/text/GFDL-pl.html
3. http://www.fsf.org/licenses/fdl-1.2-diff.txt
312

Podobne dokumenty