PLD Linux Distribution

Podręcznik użytkownika, administratora i tw�rcy

Historia zmian
Zmiana $Rev: 12145 $
beta

Spis treści

I. Informacje podstawowe
1. Wprowadzenie
Streszczenie
Konwencje użyte w tej książce
O tym podręczniku
Kr�tka historia PLD
Informacje o PLD
Podstawowe informacje
Założenia PLD
System
Bezpieczeństwo
Sieć
Pakiety
Cechy użytkowe
Oficjalne wersje PLD
Model rozwoju PLD Linux Distribution
Projekty związane z PLD
2. Zasoby sieciowe PLD
Ważne adresy
Źr�dła obraz�w ISO
Serwery z pakietami
FTP - serwer podstawowy
FTP - serwery lustrzane
HTTP - serwer podstawowy
HTTP - serwery lustrzane
RSYNC
3. Historia powstania naszego logo
Wstęp
Loga duże
Ikony do umieszczania na stronach WWW
Ikony stworzone przez użytkownik�w
Galeria rysunk�w Karola Kreńskiego
II. Instalacja
4. Instalacja przy użyciu chroota
Wstęp
Przygotowanie
Uruchomienie
Partycje/woluminy
Systemy plik�w
Konfiguracja sieci
Proxy
Konfiguracja Poldka
Instalacja
Instalacja pakiet�w
Przygotowanie do instalacji kernela
Instalacja kernela
Bootloader
UDEV
Konta użytkownik�w
Operacje końcowe
5. Aktualizacje
Aktualizacja z Ra do Ac
III. Podręcznik użytkownika
6. Podstawy
Wstęp
Włączanie i wyłączanie systemu
Podstawowe operacje na plikach i katalogach
Poruszanie się w drzewie katalog�w
Data i czas
Edycja plik�w konfiguracyjnych
Podstawowe narzędzia kontroli sieci TCP/IP
Ping
Traceroute
MTR
Proxy
7. Zasoby systemu
Ilość miejsca na dysku
Procesy i zasoby
Jak sprawdzić kto jest zalogowany opr�cz nas?
IV. Podręcznik administratora
8. Zarządzanie pakietami
Informacje podstawowe
Wstęp
Pakiety w PLD
Menadżery pakiet�w
Pobieranie pakiet�w
Cechy pakiet�w w PLD
Zależności między pakietami
Wymagania (requires) i własności (provides)
Zawartość pakiet�w
Konwencja nazw pakiet�w w PLD
Metapakiety
Komunikaty
Wpływ pakiet�w na pracę systemu
Wpływ pakiet�w na pliki konfiguracji
Architektury pakiet�w
Wyb�r architektury
Procesory
Źr�dła pakiet�w
Ścieżki do podstawowych źr�deł w konfiguracji Poldka
Cykl życia pakietu
Budowanie pakiet�w
Wstęp
Budowanie
Zarządzanie
Poldek
Wstęp
Pliki konfiguracji
Konfiguracja pobierania pakiet�w
Inne opcje
Tryby pracy
Tryb interaktywny
Tryb wsadowy
Pierwsze kroki z Poldkiem
Zarządzanie pakietami
Źr�dła
Porady
RPM
Instalowanie pakiet�w
Aktualizowanie pakiet�w
Odinstalowywanie pakiet�w
Uwagi
Bezpieczeństwo
Uruchamianie Poldka
Podpisy pakiet�w
Zaawansowane operacje
Lista ostatnio instalowanych pakiet�w
Odinstalowanie "opornych" pakiet�w
Repackage - bezpieczna aktualizacja
Kontrola integralności systemu
Naprawa bazy RPM
Reinstalacja wszystkich pakiet�w - zmiana architektury
9. Bootloader
Wstęp
Parametry jadra
MBR czy bootsector?
Frame buffer (bufor ramki)
LILO
Konfiguracja podstawowa
Inne systemy operacyjne
Frame Buffer
Graficzne menu
Zakończenie
GRUB
Nazewnictwo urządzeń
Konfiguracja podstawowa
Instalacja
Inne systemy operacyjne
Frame Buffer
Graficzne menu
Bezpieczeństwo bootloadera
Uwagi
rc-boot
Wstęp
Podstawowa konfiguracja
Tworzenie "obraz�w"
Uwagi
10. Kernel i urządzenia
Jądro systemu
Koncepcja jądra w PLD
Informacje o używanym jądrze
Rodzaje jąder systemowych
Aktualizacja
Zależności
Uwagi
Parametry jądra
Moduły jądra
Czym są?
Załadowanie właściwego modułu dla urządzenia
Konfiguracja modułï¿½w
Statyczne zarządzanie modułami
Określenie modułu dla urządzenia
Zarządzanie modułami
/etc/modules
/etc/modprobe.conf
Udev - dynamiczna obsługa sprzętu
Instalacja
Konfiguracja
Udev w praktyce
Uwagi
Initrd
Wstęp
Przygotowanie
Automatyczne generowanie initrd
Ręczne generowanie initrd
Gdy zawiedzie geninitrd
Bootloader
Uwagi
Urządzenia
Podstawowe informacje o urządzeniu
Systemy plik�w-urządzeń
UDEV
Jaki system wybrać?
11. Konfiguracja systemu
Podstawowe ustawienia
Konfiguracja skrypt�w startowych
Opcje związane z jądrem
Opcje uruchamiania systemu
Usługi
Ustawienia konsoli
Internacjonalizacja
Wstęp
Internacjonalizacja konsoli i program�w
Myszka pod konsolą
Wstęp
Szeregowa
PS/2, TouchPad, TrackPoint
USB
Zakończenie
Porady
Strefa czasowa
Zegar
Zmienne środowiskowe
Przeglądanie
Konfiguracja globalna
Konfiguracja lokalna
PLDconf - Narzędzie do konfiguracji systemu
Kluczowe pliki
/etc/inittab
/etc/fstab
/etc/passwd
/etc/shadow
/etc/group
/etc/shells
/etc/motd
/etc/nologin
12. Pamięci masowe
Wstęp
Nazewnictwo urządzeń masowych
Numerowanie partycji
Urządenia ATA (IDE)
Urządenia SCSI/SATA/USB Storage
Dyskietki elastyczne
LVM
RAID programowy
Urządzenia w GRUB-ie
Podział na partycje
Partycje
Zanim zaczniemy
Wymagane miejsce na system
Plan podziału dysku
Programy do zarządzania partycjami
Podział
Zakończenie
Systemy plik�w
Wyb�r systemu plik�w
Tworzenie systemu plik�w
Tworzenie obszaru wymiany
Podmontowanie partycji / aktywacja swapu
Poznanie typu systemu plik�w
Formatowanie
RAID programowy
Instalacja
Planowanie macierzy
Tworzenie macierzy RAID
Konfiguracja
Initrd
Bootloader
Diagnostyka
Porady
Dodatki
LVM
Planowanie wolumin�w
Instalacja
Budowanie wolumin�w
Konfiguracja startowa
Narzędzia diagnostyczne
Zarządzanie: powiększanie woluminu
Porady
Naprawa
Uszkodzenia fizyczne
Naprawa systemu plik�w
13. Administracja
Ratowanie systemu
Wstęp
Uruchomienie na niskim poziomie pracy
Uruchomienie RescueCD
Naprawa systemu plik�w
Naprawa konfiguracji
Operacja chroota
Uwagi
Zarządzanie podsystemami i usługami
Budowa systemu rc-skrypt�w
Zarzadzanie podsystememi/usługami
Konfiguracja rc-skrypt�w
Zależności
Usługi a poziomy pracy
Zmiana poziomu pracy systemu
Konta użytkownik�w
Dodanie
Usunięcie
Modyfikacja
Hasło
Zarządzanie kontami
Grupy
Dodanie grupy
Zapisanie do grup
Usunięcie grupy
Uwagi
Zarządzanie uprawnieniami
Bezpieczeństwo
Dostępne narzędzia
Dostęp do konta root
SUID
/proc
chroot i vserver
Statyczny VIM
Pakiety
14. Interfejsy sieciowe
Wstęp
Podstawowa konfiguracja sieci
Brama domyślna
Odwzorowanie nazw - serwery DNS
Nazwa hosta
Odwzorowanie nazw - konfiguracja zaawansowana
Inne opcje
Ethernet
Urządzenie
Statyczna konfiguracja karty sieciowej
Dynamiczna konfiguracja karty sieciowej (DHCP)
Aktywacja sieci
WiFi
Wstęp
Sterowniki dedykowane
Sterowniki z NdisWrapperem
Sieć WEP
Sieć WPA2-PSK
Aktywacja i diagnostyka
Neostrada+ z modemem USB firmy Sagem
Wprowadzenie
Instalacja
Konfiguracja
Uruchomienie i post konfiguracja
Neostrada+ z modemem USB firmy Alcatel - Thompson
Przygotowanie do instalacji
Konfiguracja
Uruchomienie i zakończenie
xDSL z interfejsem Ethernet
Wprowadzenie
Konfiguracja
Uwagi
Zaawansowane opcje interfejs�w
HotPlug
Narzędzia
Inne opcje
Wzory konfiguracji
15. Zastosowania sieciowe
Routing statyczny
Wstępna konfiguracja
Tablica routingu
Zarządzanie trasami
Zakończenie
NAT
DNAT
SNAT i MASQUERADE
Zakończenie.
Podział łącza w zależności od serwis�w
Wstęp
Podstawy
Przekierowanie p2p i połączeń podobnych
PPP over SSH - Tunel IPv4
Wstęp
Konfiguracja
Uruchomienie
VTun - Tunel IPv4
Wstęp
Konfiguracja
Uruchomienie
Narzędzia sieciowe
Konfiguracja interfejsow
Zarządzanie interfejsami
Adresy sprzętowe (MAC)
ARP
Serwery nazw (DNS)
Wydajność sieci
Monitorowanie sieci
Zakończenie
16. Usługi dostępne w PLD
Usługi - wstęp
ALSA - Dźwięk w Linuksie
Instalacja
Konfiguracja z użyciem systemu UDEV
Konfiguracja statyczna
Ustawienie miksera i testowanie
Zaawansowana obsługa miksera
Uwagi
Apache - Serwer stron internetowych
Wstęp
Instalacja
Pliki konfiguracji
Podstawowa konfiguracja
Strony użytkownik�w
Virtual Hosts
Ograniczanie dostępu na podstawie adresu
Ograniczenie dostępu za pomocą loginu i hasła
Obsługa skrypt�w PHP
CGI
Security Socket Layer (SSL)
Indeksowana zawartość katalogu
Uwagi
BIND - Serwer Nazw
DNS - Domain Name System
Wstęp
Podstawowa konfiguracja
Przykładowa konfiguracja strefy typu primary
Przykładowa konfiguracja strefy typu secondary
Obsługa protokołu IPv6
Rejestracja
Diagnostyka
Zakończenie
CRON - Cykliczne wykonywanie zadań
Instalacja
Budowa tabel
Format daty i czasu
Tabele systemowe
Tabele użytkownik�w
Komunikaty cron-a
CUPS - Popularny system druku dla Uniksa
Wstęp
Instalacja
Zarządzanie drukarkami
Dodanie drukarki
Szczeg�ły dodawania drukarki lokalnej
Szczeg�ły dodawania drukarki zdalnej
Konfiguracja serwera
Zarządzanie kolejką druku
Test drukarki i rozwiązywanie problem�w
DHCPD - Dynamic Host Configuration Protocol Daemon
Instalacja
Podstawowa konfiguracja
Statyczne przypisanie konfiguracji
Inne opcje
Uruchomienie
Konfiguracja klienta
Uwagi
Exim - Transport poczty elektronicznej (MTA)
Instalacja
Budowa pliku konfiguracji
Podstawowa konfiguracja
Skrzynki pocztowe
R�żne opcje
Autoryzacja SMTP
Syfrowanie SSL
Quota
Dodanie skaner�w antywirusowych
Walka ze spamem
Obsługa wielu domen w Eximie
Automatyczna odpowiedź - Vacations
Heimdal - Implementacja protokołu Kerberos
Instalacja i konfiguracja KDC
Logowanie do systemu
Konfiguracja poszczeg�lnych usług
Jabber 2 - Serwer typu Instant Messaging
Wstęp
Instalacja
Konfiguracja DNS i rekord�w SRV
Konfiguracja port�w (jeżeli korzystamy z firewall-a)
Podstawowa konfiguracja Jabberd2
Konfiguracja dla SQL (Postgresql)
Szyfrowanie
Zakończenie
MySQL - System Zarządzania Relacyjnymi Bazami Danych (ang. RDBMS)
Co to jest MySQL?
Og�lne cechy MySQL
Instalacja
Konfiguracja MySQL
Demon MySQL
mysqladmin
mysqldump
phpMyAdmin
NFS - Network File System
Serwer
Udostępnianie
Klient
Bezpieczeństwo serwera
Dostrajanie wydajności
PDNS (Power DNS) - Serwer Nazw
Wstęp
Instalacja
Konfiguracja Postgresql dla PDNS
Konfiguracja PDNS
Domeny
Postfix - Transport poczty elektronicznej (MTA)
Zaczynamy
Konfiguracja
Szyfrowanie
Domeny
Usprawnienia
Końcowa konfiguracja
tpop3d
amavis + mks
postifx.admin
PostgreSQL - Baza danych SQL
Co to jest PostgreSQL
Instalacja pakiet�w
Konfiguracja PostgreSQLa w PLD
Inicjalizacja
Konfiguracja PostgreSQLa
Uruchomienie PostgreSQLa
Dodanie użytkownika
Ostatni test
Dodatki
Odnośniki
ProFTPD - serwer FTP
Wstęp
Instalacja
Podstawowa konfiguracja demona
Konfiguracja dostępu
Zakończenie
Samba - wsp�łpraca z Windows
Samba jako Serwer domeny NT4 (PDC)
Serwer członkowski domeny NT4
Snort - Sieciowy System Wykrywania Włamań
Wymagania
Instalacja Snorta i ACID
Konfiguracja Snorta
Aktualizacja reguł
Instalacja Oinkmaster
Architektura Snorta
Tryby pracy
Preprocesory
Moduł sygnatur
Ciekawe projekty
Syslog-ng
Wstęp
Konfiguracja
Test konfiguracji
Uwagi
Dodatek
17. X-Window
Wstęp
X-Server
Instalacja
Zanim zaczniemy konfigurację
Pierwsze uruchomienie
Konfiguracja
Inne sposoby konfiguracji
Rozwiązywanie problem�w
Środowisko graficzne (GUI)
Zaawansowane
Mysz
Klawiatura
Monitor
Rozdzielczość obrazu
Zaawansowane - DPI
Zaawansowane - serwer czionek
Uwagi
Środowisko GNOME
Instalacja
Internacjonalizacja
Dźwięk
Uruchomienie
Administracja - GNOME System Tools
Przydatne drobiazgi
Godne polecenia aplikacje
Pomoc i rozwiązywanie problem�w
Środowisko KDE
Blackbox - Szybki i lekki zarządca okien
Wstęp
Instalacja pakiet�w
Konfiguracja
Fluxbox - Następca BlackBoxa
Wstęp
Instalacja pakiet�w
Konfiguracja
Uruchamianie środowiska graficznego
Skrypt startx
GDM
KDM
Ustawienie poziomu pracy
Porady
Karty firmy nVidia
Karty firmy ATI
Instalacja i konfiguracja
Test konfiguracji
V. Tworzenie PLD - Praktyczny poradnik
18. Możliwa droga do zostania szeregowym developerem PLD
Co jest potrzebne
Źr�dła wiedzy
Przykład budowania
Pierwszy spec
19. W krainie CVS - czyli wielki kocioł
Wstęp
Dodawanie plik�w do CVS PLD
Aktualizacja plik�w
Zatwierdzanie zmian i Distfiles
Odnogi (Branche) i Etykiety (Tag)
Zlecenia dla builder�w
Zakończenie
VI. O podręczniku
20. O podręczniku
Autorzy dokumentacji PLD
21. Licencja i prawa autorskie
Tłumaczenie Licencji GNU Wolnej Dokumentacji
Wersja 1.1, marzec 2000
0. Preambuła
1. Zastosowanie i definicje

Spis rysunk�w

3.1. Logo głï¿½wne
3.2. Logo głï¿½wne z cieniowaniem
3.3. Ikona na www 1
3.4. Ikona na www 2
3.5. Ikona na www 3
3.6. Ikona na www 4
3.7. Ikona na www 5
3.8. Ikona na www 6
3.9. Ikona stworzona przez "muche"
3.10. Ikona stworzona przez Łukasza "Baseciq" Mozera

Spis tabel

8.1. Opis zawartości pakiet�w w zależności od ich nazwy
8.2. Lista nazw kodowych architektur i odpowiadających im rodzin procesor�w:
9.1. Parametry jądra
9.2. Tryby bufora ramki
10.1. Kernele
13.1. Popularne akcje skrypt�w startowych
13.2. Dostępne poziomy pracy
13.3.
16.1. Obsługa baz danych
16.2.
16.3.

Część�I.�Informacje podstawowe

Rozdział 1. Wprowadzenie

Streszczenie

Dziękujemy za zainteresowanie się PLD Linux Distribution™!

W tym rozdziale przedstawione zostaną r�żne aspekty dotyczące projektu PLD, takie jak jego historia, cele, model rozwoju, itp.

Konwencje użyte w tej książce

Aby jak najlepiej zrozumieć i przyswoić informacje zawarte w tym podręczniku, warto zapoznać się wpierw z użytymi konwencjami.

$ komenda

W ten spos�b opisywane są komendy, kt�re wykonać możemy z uprawnieniami użytkownika.

# komenda

Tutaj natomiast przedstawiona została komenda, kt�rą należy wykonać z poziomu użytkownika root, czyli administratora.

Zbyt długie linie zrzut�w ekranowych, kt�re nie mieszczą się w jednej linii, podzielone są przy pomocy znaku \. Czyli:

# komenda z_bardzo_\
długim_parametrem

należy zinterpretować jako:

# komenda z_bardzo_długim_parametrem

W dokumentacji dosyć często korzysta się z następującej konstrukcji:

{$zmienna}

Tak oznaczane są miejsca, w kt�rych użytkownik może lub musi samodzielnie dokonać wyboru i wstawić w miejsce ciągu znak�w {$zmienna} odpowiednią wartość.

Niejdnokrotnie w nazwach plik�w pojawia się znak "gwiazdki", kt�ry należy odczytywać podobnie jak robi to powłoka (shell), a więc zastępuje dowolny ciąg znak�w, przykładowo:

/katalog/plik.*

oznacza wszytskie pliki zaczynjące się od plik. w katalogu /katalog.

O tym podręczniku

Celem tego podręcznika jest pomoc w zainstalowaniu PLD Linux Distribution™ na Twojej maszynie. Nie jest to i nigdy nie będzie zamiennik dokumentacji systemowej. Jeśli będzie to Twoja pierwsza instalacja Linuksa, gorąco zachęcamy Cię do przeczytania wpierw tego podręcznika. Nawet jeśli jesteś doświadczonym użytkownikiem, warto przestudiować instrukcje dotyczące instalacji, aby upewnić się, że wszystko p�jdzie gładko.

Opr�cz niniejszej dokumentacji możemy szukać pomocy w wielu innych miejscach. Prężnie działają listy dyskusyjne oraz oficjalne kanały IRC (#PLD i #PLDhelp). Na często zadawane pytania (FAQ) odpowiedzi można znaleźć na głï¿½wnej stronie WWW.

Jeśli uważasz, że dokumentacja jest niepełna, znalazłeś błędy, lub chciałbyś do nas dołączyć prosimy o wysłanie informacji na listę dyskusyjną lub o kontakt z jednym z autor�w dokumentacji, kt�rych listę zamieszczono w „Autorzy dokumentacji PLD”

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ż takową robią. Nic jednak z tego nie wynikało. Wreszcie, w lipcu 1998, zawiązał się projekt mający na celu stworzenie polskiej dystrybucji Linuxa. Projekt PLD, czyli Polish(ed) Linux Distribution, był na tyle dobrze zorganizowany, by przetrwać trudne początki. Nie obeszło się oczywiście bez burzliwych dyskusji na temat kształtu dystrybucji, doboru oprogramowania jak r�wnież wersji jądra, na kt�rej projekt ma być rozwijany. W efekcie zdecydowano się prowadzić r�wnolegle dwa projekty. Pierwszy został nazwany PLD-devel i był forpocztą dla obecnego PLD-stable. Prace nad 1.1 PLD (devel) koordynowali przede wszystkim Wojtek Ślusarczyk, Marcin Korzonek i Arek Miśkiewicz. Miała to być pierwsza dystrybucja Linuxa zgodna z nowym, promowanym przez OpenGroup, standardem - Unix98. R�wnolegle druga grupa, na czele z Tomkiem Kłoczko i Arturem Frysiakiem, pracowała nad podwalinami właściwej PLD-stable.

Nieco p�źniej, przede wszystkim z braku wolnego czasu z prac nad projektem wycofali się Wojtek Ślusarczyk, Andrzej Nakonieczny oraz Marcin Korzonek. Tomasz Kłoczko postanowił kontynuować prace nad PLD, gromadząc wok�ł siebie coraz to większą liczbę developer�w. Pojawiła się domena pld.org.pl, a wraz z nią liczne adresy "funkcjonalne", takie jak ftp.pld.org.pl, www.pld.org.pl czy cvs.pld.org.pl. Ruch na listach mailingowych stawał się coraz większy, widać było, iż projekt zyskiwał na popularności.

22 listopada 2002 roku światło dzienne ujrzała pierwsza stabilna wersja dystrybucji PLD Linux Distribution 1.0 (Ra). Jeszcze w czasie jej stabilizacji rozpoczęły się prace nad kolejną wersją.

Tw�rcy projektu zakładali uniwersalność PLD, kt�ra pozwalałaby na korzystanie z dystrybucji przez użytkownik�w z całego świata, jednak pojawiły się obawy, że nazwa Polish(ed) Linux Distribution ™ odstraszy potencjalnych odbiorc�w z innych kraj�w. Postanowiono, że zmieniona zostanie nazwa projektu. Pozostawiono charakterystyczny skr�t "PLD" w niezmienionej postaci, zmieniono zaś jego rozwinięcie - nazwa "PLD" stała się rekurencyjnym skr�tem od PLD Linux Distribution™.

Pierwszego kwietnia 2007 roku wydana została wersja Ac, długi okres rozwoju przyzwyczaił użytkownik�w do nieustających aktualizacji oprogramowania. Taki model rozwoju dystrybucji okazał się na tyle wygodny, że postanowiono by kolejne wydanie miały być rozwijane bez końca. Oznacza to, że na razie nie są planowane żadne kolejne wydania, a do stabilnej gałęzi pakiet�w nieprzerwanie trafiają aktualizacje.

Informacje o PLD

Podstawowe informacje

PLD-Linux jest dystrybucją rozwijaną głï¿½wnie w Polsce. Jest to produkt grupy entuzjast�w Linuksa chcącej stworzyć system operacyjny dopasowany do własnych potrzeb. Aktualnie rozwojem dystrybucji interesuje się około 200 os�b, z pośr�d nich najbardziej aktywna jest grupa 50 deweloper�w.

PLD jest jednym z najaktywniejszych projekt�w Open Source na świecie. Dzięki temu powstała jedna z największych dystrybucji Linuksa, w trakcie prac nad drugą wersją systemu (Ac) ilość dostępnych pakiet�w zbliżyła się do trzynastu tysięcy.

Założenia PLD

Jedną z największych bolączek administrator�w jest chroniczny brak czasu, dlatego bardzo istotne jest zminimalizowanie nakładu pracy przy codziennych zajęciach administracyjnych. Mając to na uwadze, stworzono dystrybucję, kt�ra zapewnia wysokie bezpieczeństwo i łatwość administracji. PLD jest tak projektowane by w możliwie najkr�tszym czasie uruchomić bezpieczny, wydajny i łatwy w zarządzaniu system produkcyjny. Założono, że administrator nie może tracić czasu na kompilację jądra, program�w czy też pisania rc-skrypt�w.

PLD jest uniwersalną i elastyczną dystrybucją, dzięki czemu sprawdzi się w r�żnorodnych zastosowaniach. Przy jej tworzeniu, głï¿½wny nacisk jest jednak kładziony na niezawodne działanie usług. Utarło się nawet powiedzenie, że PLD jest dystrybucją tworzoną przez administrator�w dla administrator�w, mamy więc do czynienia z systemem dobrze przygotowanym do pracy w roli serwera.

Nie oznacza to bynajmniej, że PLD nie nadaje się na system dla stacji roboczej, doskonale sprawdza się r�wnież w tym zastosowaniu. Zwykły użytkownik nie znajdzie tu wielu ułatwiających życie początkującym narzędzi, aby używać PLD konieczna jest solidna porcja wiedzy. Mamy nadzieję, że niniejszy podręcznik będzie pomocny w jej zdobyciu.

Poniżej przedstawiono zestawienie najciekawszych cech systemu.

System

  • w systemie dostępne są silnie zmodularyzowane jądra, dzięki czemu w ogromnej większości wypadk�w nie trzeba go kompilować na nowo; wystarczy wybrać właściwy kernel i załadować potrzebne moduły

  • w PLD zastosowano skrypty startowe (rc-skrypty) typu System-V, Pozwoliło to na maksymalne zautomatyzowanie procesu instalacji usług systemowych.

  • podobną koncepcją do rc-inetd™ kierowano się w tworzeniu pakietu rc-boot™, pozwala on na łatwe zarządzania bootloaderami

  • używanie FHS 2.x jako specyfikacji struktury katalog�w

  • całkowite odejście od termcap™ i libtermcap™ (w PLD nie ma pakietu z libtermcap i samego termcapa; ani jeden pakiet nie jest związany z termcapem)

  • uporządkowane rozmieszczenia plik�w w gałęzi /usr - żaden pakiet dystrybucyjny nie umieszcza plik�w w katalogach wewnątrz /usr/local

Bezpieczeństwo

  • domyślne jądro zawiera grsecurity

  • restrykcyjne uprawnienia dla użytkownik�w

  • przystosowanie do łatwego przejścia systemu na alternatywne metody autoryzacji (i -- w zależności od potrzeb -- szyfrowania) komunikacji po sieci, jak PAM, czy GSAPI, TSL/SSL... Jest bardzo prawdopodobne, że już w niedługiej perspektywie dużą rolę zacznie tu odgrywać SASL. W praktyce owo łatwe dostosowywanie do np. kerberyzacji systemu jest realizowane także z użyciem rc-inetd, kt�ra to platforma ułatwia znakomicie podmianę r�żnych serwis�w na wersje skerberyzowane czy też wykorzystujące inne mechanizmy jak np. socks5 (tutaj jeszcze jest mało zrobione, ale furtka jest szeroko i jednoznacznie otwarta)

  • mechanizm sys-chroot™ ułatwiający zarządzanie środowiskami typu chroot oraz dobre wsparcie dla środowisk Linux VServer

Sieć

  • PLD posiada najlepszą obsługę przyszłościowego protokołu IPv6 z pośr�d innych dystrybucji Linuksa.

  • używanie iproute2™ jako podstawowego narzędzia do operowania na interfejsach sieciowych, dzięki czemu np. skrypty startowe z PLD są prostsze i kr�tsze mimo większej funkcjonalności w stosunku do swoich odpowiednik�w z RH; inną zaletą jest wsteczna kompatybilność z opisem interfejs�w sieciowych z tym, co jest stosowane w initscripts z RH; kolejną cechą skrypt�w startowych jest to, że -- w zależności od preferencji użytkownika -- mogą one wyświetlać wszystkie komunikaty po polsku

  • PLD zawiera rc-inetd™ - interfejs do zarządzania usługami typu inetd. Pozwala zarządzać takimi usługami (np.: telnetd, cvs-pserver) bez znaczenia jakiego typu demon inetd jest używany

Pakiety

  • PLD zawiera ogromne ilości gotowych, binarnych pakiet�w; pozwala to uniknąć instalacji oprogramowania spoza dystrybucji

  • w dystrybucji używane są pakiety typu RPM™, do zarządzania nimi stworzono program o swojsko brzmiącej nazwie Poldek™, można też używać klasycznego programu RPM

  • możliwość samodzielnego budowania pakiet�w RPM pozwoli na łatwe skompilowanie pakietu z nietypową funkcjonalnością

  • znaczna liczba program�w podzielona jest na mniejsze pakiety, pozwalające instalować tylko te elementy systemu, kt�re są akurat potrzebne

  • pakiety często są wstępnie skonfigurowane i gotowe do działania, ponadto nakładane są na nie istotne łaty

  • w PLD nie są faworyzowane żadne z usług czy program�w. To czego używamy zależy tylko od nas

  • pełne przygotowanie pakiet�w do automatycznego uaktualnienia. Pakiety z RH kompletnie nie są na to przygotowane. Przygotowanie to wiąże się z restartowaniem serwis�w przy ich uaktualnieniu, odpowiednim przygotowywaniem procedur uaktualnienia w taki spos�b, by umożliwić automatyczną aktualizację nawet przy zmianie plik�w konfiguracyjnych

  • kompresowanie wszystkich plik�w dokumentacji z użyciem gzip (bzip2 nic w praktyce tu nie wnosi, a dostarcza tylko nowych kłopot�w, czego doświadczają od czasu do czasu użytkownicy Mandrake)

  • separacja bibliotek statycznych w osobne podpakiety {$nazwa}-static (nie każdy tego potrzebuje), a nagłï¿½wk�w do {$nazwa}-devel

  • uzupełnianie opis�w pakiet�w i dokumentacji w r�żnych językach. W dużej części robi się to niejako przy okazji. Użytkownik może sobie skonfigurować i zainstalować wybrane oprogramowanie ze wsparciem dla preferowanego zestawu język�w, np.: angielski i niemiecki czy też angielski i polski (zasoby dla innych język�w zostaną pominięte). Tak unikalną możliwość konfiguracji osiągamy dzięki konsekwentnemu oznaczaniu zasob�w narodowych makrem %lang() w poszczeg�lnych pakietach

Cechy użytkowe

  • PLD jest systemem przyjaznym dla programisty. Dostępne są narzędzia do tworzenia aplikacji w wielu językach programowania. Dotyczy wielu "standardowych" język�w programowania takich jak C, C++, Perl czy Python. Dostępne są też kompilatory do nieco mniej znanych język�w takich jak SML, Prolog, OCaml jak też eksperymentalne kompilatory: Cyclone, Ksi. Dodatkowo mamy wyb�r wielu narzędzi programistycznych i bibliotek.

  • maksymalna automatyzacja r�żnych powtarzalnych czynności (dotyczy to zar�wno metodologii bieżącej pracy jak i zawartości pakiet�w)

  • dystrybucja jest przystosowana do obsługi wielu język�w narodowych, a w tym języka polskiego. Jest to najlepiej przygotowana dystrybucja na potrzeby polskich użytkownik�w

  • brak nałożonych z g�ry ograniczeń co do zestawu pakiet�w, jakie mogą być w dystrybucji. W praktyce oznacza to, że użytkownik ma do dyspozycji wszystko, co udało się nam zebrać, Jeżeli coś zostanie opracowane i przystosowane do tego, żeby mogło wsp�łgrać z resztą pakiet�w, to znaczy, że komuś było potrzebne, więc może komuś przydać się w przyszłości

Oficjalne wersje PLD

W PLDwersjom dystrybucji nadawane numery oraz dwuliterowe oznaczenia kodowe, kt�re pochodzą od skr�towych oznaczeń pierwiastk�w. Pierwszej wersji PLD nadano oznaczenie Ra (Rad), zaś kolejne odpowiadają nazwom pierwiastk�w poukładanych zgodnie z kolejnością określoną przez ich liczbę atomową. Aktualnie mmy trzy oficjalne wydania: Ra, Ac, Th, jest też nieoficjalny fork Titanium prowadzony przez jednego z deweloper�w.

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 posiadających prawo zapisu do repozytorium CVS (o kt�rym poniżej), ale także użytkownik�w zgłaszających informacje o błędach lub nadsyłających poprawki lub propozycje zmian. Z chęcią przyjmiemy nowych developer�w, a osoby chcące być bardziej związane z projektem powinny zapisać się na listę dyskusyjną developer�w [email protected].

Informacje o PLD i sposobie jego rozwoju:

  • Repozytorium CVS

    Źr�dła PLD Linux Distribution trzymane są w repozytorium CVS (Concurrent Versions System, http://www.cyclic.com/CVS/index.html), wolnodostępnym systemie kontroli wersji dostarczanym wraz z naszą dystrybucją. Serwer CVS PLD Linux Distribution (http://cvs.pld-linux.org/) jest dostępny dla wszystkich w trybie tylko dla odczytu (Read Only), oraz dodatkowo w trybie do odczytu/zapisu (Read/Write) dla developer�w. Repozytorium zostało podzielone na kilka modułï¿½w w celu ułatwienia pracy osobom doń commitującym (określenie commit pochodzi z podręcznika systemowego cvs).

  • Serwer DistFiles

    W zamierzchłych czasach wszystkie pliki (a więc kody źr�dłowe, łatki (patche), poprawki, itp) potrzebne do zbudowania pakiet�w trzymane były w repozytorium. Niestety CVS nie został zaprojektowany do przechowywania plik�w binarnych (a archiwum tar.gz takim jest) i pr�ba zmuszenia go do przechowywania takowych dostarczała r�żnych problem�w. A to osoba posiadające stosunkowo wolne łącze zaczęła wrzucać kilkudziesięcio megabajtowy plik, skutecznie blokując możliwość pracy innym developerom na kilka godzin. Uciążliwe były też pozostające tzw. 'locki', czyli blokady na modułach repozytorium (przede wszystkim SOURCES/). Rozwiązaniem tych problem�w było wprowadzenie w maju 2003 roku serwera DistFiles, do kt�rego przeniesiono większość plik�w binarnych z CVS.

  • Core Developers Group

    Gdyby PLD Linux Distribution było firmą, Core Developers Group najtrafniej można by określić jako Radę Nadzorczą. Jej celem jest podejmowanie w spos�b demokratyczny krytycznych dla dystrybucji decyzji oraz rozwiązywanie konflikt�w, kt�rych nie dało się zażegnać w inny spos�b. W skład Grupy wchodzą developerzy aktywnie udzielający się w projekcie.

  • Lista dyskusyjna [email protected]

    Na liście tej prowadzone są dyskusje na temat bieżących prac nad dystrybucją, jak r�wnież ustalane są plany na przyszłość. Jeśli nie posiadasz prawa zapisu do repozytorium, a chciałbyś podzielić się efektami swych prac z innymi, lista ta jest najlepszym miejscem na poinformowanie o tym fakcie.

  • Buildery

    Mianem builder�w określane są specjalnie przygotowane środowiska (często na dedykowanych maszynach), na kt�rych budowane są pakiety, kt�re p�źniej zostaną umieszczone na serwerach FTP projektu. Każda z linii dystrybucji ma swoje oddzielne buildery, stworzone z pakiet�w dla niej przeznaczonych.

    Nie wszyscy developerzy mają prawo do puszczania zleceń na buildery, czyli rozkaz�w zbudowania poszczeg�lnych pakiet�w - przywiliej ten ma ledwie garstka os�b, zaznajomionych z automatyką oraz znających potrzeby danej dystrybucji. Rzadko kiedy zachodzi potrzeba bezpośredniego grzebania w strukturze danego środowiska - codzienna praca opiera się na wysyłaniu odpowiednio przygotowanych maili, podpisanych kluczem PGP osoby uprawnionej.

Projekty związane z PLD

  • Rescue CD

    Jest to niewielka dystrybucja startująca z płyty CD, bez konieczności instalacji na twardym dysku. Zawiera zestaw wyspecjalizowanych narzędzi pomocnych w przypadku usuwania awarii systemu. Rescue CD oparto o jądro PLD i wyposażono w zestaw najbardziej niezbędnych program�w, dzięki czemu udało się uzyskać niewielkie rozmiary dystrybucji. Pozwala to załadowanie całości do pamięci operacyjnej, a następnie a wyjęcie płyty CD z czytnika. Lista dostępnych program�w jest umieszczona na domowej stronie WWW projektu.

  • PLD Live CD http://livecd.pl/

    Pierwszy, oparty o PLD Ac projekt, mający na celu stworzenie kompletnej dystrybucji Linuksa startującej z płyty CD, zawiera znaczną ilość narzędzi i program�w użytkowych. PLD Live jest przygotowane dla zwykłych użytkownik�w chcących bliżej poznać PLD, zawiera system X Window i liczne programy użytkowe. Z założenia w PLD Live dokonywano jak najmniej zmian w stosunku do bazowej dystrybucji.

  • PLD Live.th http://livecd.pld-linux.org

    Wersja Live zbudowana na bazie Th i środowiska GNOME

  • PLD-Linux LiveCD http://kde4.livecd.pld-linux.org/index.php

    Wersja Live zbudowana na bazie Titanium i środowiska KDE

Rozdział 2. Zasoby sieciowe PLD

Ważne adresy

Źr�dła obraz�w ISO

Obrazy ISO są katalogowane wg. schematu {$serwer}/{$wersja}/{$arch} np.: ftp.iso.pld-linux.org/2.0/i586. Wersje systemu szerzej opisano w „ Oficjalne wersje PLD ”, zaś architektury w „Architektury pakiet�w”.

Dla każdego z obraz�w ISO dostępna jest suma MD5, umieszczona w pliku o rozszerzeniu md5. Dzięki niej będziemy mogli sprawdzić przed nagraniem czy pobrany obraz nie zawiera żadnych zmian. Do obliczenia skr�t�w MD5 w pod systemami uniksowymi posłużymy się programem md5sum, zaś w systemach Microsoftu użyjemy dostępnego na serwerze programu md5sum.exe.

Serwery FTP z obrazami ISO:

Serwery z pakietami

Pakiety są katalogowane wg. schematu {$serwer}/dists/{$wersja}/{$źr�dło}/{$arch} np.: ftp.pld-linux.org/dists/2.0/PLD/i586/. Wersje systemu szerzej opisano w „ Oficjalne wersje PLD ”, źr�dła w „Źr�dła pakiet�w”, zaś architektury w „Architektury pakiet�w”.

PLD możemy zainstalować z sieci za pomocą protokołu FTP, HTTP lub RSYNC. Pakiety możemy pobierać z głï¿½wnego serwera PLD lub z jednego z wielu lustrzanych.

FTP - serwer podstawowy

FTP - serwery lustrzane

HTTP - serwer podstawowy

HTTP - serwery lustrzane

RSYNC

Osoby zainteresowane udostępnianiem serwera lustrzanego przy pomocy protokołu RSYNC proszone są o kontakt z nami w celu uzyskania szczeg�łowych informacji:

Rozdział 3. Historia powstania naszego logo

Wstęp

Pomysł na nasze logo zrodził się 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.pld-linux.org zasadami (na przykład oficjalne płyty CD)

    • uzyskają aprobatę PLD Linuksa™ do używania loga w określonych celach

  • Część całkowitego produktu uznana jest oficjalnie za należącą do PLD™ (tak jak jest to opisane w punkcie pierwszym) i jeśli posiada wyraźnie zaznaczone informacje, że tylko ta cześć została zatwierdzona

  • Zastrzegamy sobie prawo do unieważnienia i modyfikacji licencji dla danego produktu

Pozwolenie na używanie oficjalnego loga zostało przyznane dla wszelkiego typu odzieży (t-shirty, czapki, itd) ale pod warunkiem, że są one wykonywane przez developer�w PLD™ i nie są sprzedawane dla zysku.

Wyjaśnienie: Licencja "zapożyczona" z Debiana™.

Rysunek 3.1. Logo głï¿½wne

Logo główne

Rysunek 3.2. Logo głï¿½wne z cieniowaniem

Logo główne z cieniowaniem

Ikony do umieszczania na stronach WWW

Powered by PLD Linux

To logo i jego zmodyfikowane wersje mogą być zamieszczane dla podkreślenia poparcia dla projektu, lecz nie oznacza ono, że dany produkt jest częścią projektu.

Przypomnienie: docenimy jeśli dodasz do obrazka link wskazujący na www.pld-linux.org i umieścisz go na swojej stronie.

Rysunek 3.3. Ikona na www 1

Ikona na www 1

Rysunek 3.4. Ikona na www 2

Ikona na www 2

Rysunek 3.5. Ikona na www 3

Ikona na www 3

Rysunek 3.6. Ikona na www 4

Ikona na www 4

Rysunek 3.7. Ikona na www 5

Ikona na www 5

Rysunek 3.8. Ikona na www 6

Ikona na www 6

Ikony stworzone przez użytkownik�w

To logo i jego zmodyfikowane wersje mogą być zamieszczane dla podkreślenia poparcia dla projektu, lecz nie oznacza ono, że dany produkt jest częścią projektu.

Przypomnienie: docenimy jeśli dodasz do obrazka link wskazujący na www.pld-linux.org i umieścisz go na swojej stronie.

Rysunek 3.9. Ikona stworzona przez "muche"

Ikona stworzona przez "muche"

Rysunek 3.10. Ikona stworzona przez Łukasza "Baseciq" Mozera

Ikona stworzona przez Łukasza "Baseciq" Mozera

Galeria rysunk�w Karola Kreńskiego

Pod tym adresem http://www.inf.sgsp.edu.pl/pub/MALUNKI/PLD/ Karol Kreński "Mimooh" umieścił sporą galerię obrazk�w związanych z PLD Linux Distribution

Część�II.�Instalacja

Rozdział 4. Instalacja przy użyciu chroota

Instalacja systemu przy użyciu chroot

Wstęp

Mamy możliwość zainstalowania PLD™ przy użyciu innego systemu operacyjnego, spos�b ten ma tę zaletę, że daje nam okazję dobrego poznania PLD już na etapie instalacji, a ponadto umożliwia wykonanie bardziej wyrafinowanych operacji, kt�re są niedostępne z poziomu instalatora. Ta metoda instalacji pozwala zainstalować bardzo małą wersję systemu, (ok. 120MB), kt�ra wystarcza do uruchomienia systemu, skonfigurowania sieci, Poldka™ i pobrania kolejnych pakiet�w.

Do instalacji możemy użyć działającej dystrybucji, jednak najwygodniejsze będzie użycie dystrybucji typu live: RescueCD™ lub PLD-Live™. Użycie systemu z płyty CD ma tą zaletę, że instalacja może być wykonywana na docelowej maszynie, co ułatwi nam stworzenie prawidłowego obrazu initrd. Do instalacji Th należy użyć RescueCD 2.90 lub nowszej (kiedy się pojawią), zaś do instalacji Ac - jednej ze starszych wersji np. 2.01.

Osoby ciekawe jak wygląda przebieg instalacji "na żywo", mogą obejrzeć nagranie przykładowej instalacji.

Uwaga! W niniejszym rozdziale nie zawarto wielu zbyt szczeg�łowych opis�w, dlatego w przypadku drukowania na papierze może być konieczne dodrukowanie innych rozdziałï¿½w dokumentacji.

Przygotowanie

Uruchomienie

W przypadku instalacji z działającego systemu musimy podłączyć dysk twardy do komputera i uruchomić go. W przypadku płyty CD typu live - w BIOS-ie maszyny docelowej włączamy opcję startu systemu z płyty, a następnie umieszczamy nośnik w napędzie i czekamy na start systemu.

Wsp�łczesne dystrybucje typu live same wykrywają sprzęt i ładują odpowiednie moduły kernela, jeśli jednak to się nie powiedzie to musimy wtedy wykonać tę operację samodzielnie, więcej na ten temat w „Statyczne zarządzanie modułami”. Interesują nas jedynie moduły kontrolera ATA/SATA/SCSI oraz interfejsu sieciowego.

Partycje/woluminy

System możemy zainstalować na klasycznych partycjach dyskowych, woluminach LVM lub programowych macierzach, instalacja z chroot-a daje w tej kwestii dużą swobodę. Opis tworzenia wolumin�w LVM przedstawiliśmy w „LVM” zaś macierzy w „RAID programowy”. Dla ułatwienia jednak dalsze przykłady będą dotyczyły zwykłych partycji.

Potrzebujemy co najmniej dw�ch partycji: jednej na głï¿½wny system plik�w i drugiej na obszar wymiany. Obszar wymiany nie jest wymagany do instalacji, jednak dla porządku utworzymy go już na tym etapie. Przykłady będą dotyczyły dysku /dev/sda. Nazewnictwo urządzeń masowych wyczerpująco przedstawiono w „Nazewnictwo urządzeń masowych”.

Na uprzywilejowanej pozycją będą tym razem użytkownicy kompletnych system�w, kt�re umożliwiają użycie programu GParted™ lub QTParted™, w przeciwnym wypadku użyjemy programu fdisk™ lub cfdisk™ np.:

# cfdisk /dev/sda

Podział dysku na partycje szerzej opisano w „Podział na partycje”. Zakładamy, że na pierwszej partycji dysku IDE umieścimy obszar wymiany, zaś na drugiej głï¿½wny system plik�w.

Systemy plik�w

Inicjujemy obszar wymiany:

# mkswap /dev/sda1

Tworzymy system plik�w (np. ext3):

# mkfs.ext3 /dev/sda2

Powyższe operacje om�wiliśmy dokładnie w „Systemy plik�w”.

Zapamiętujemy układ partycji i system�w plik�w, gdyż będzie on nam potrzebny do prawidłowego skonfigurowania pliku /etc/fstab. Teraz przyszedł czas na utworzenie punktu montowania i podmontowania partycji np.:

# mkdir /pldroot
# mount /dev/sda2 /pldroot

Jeśli system ma używać większej ilości partycji (np. dla /boot) to montujemy je wszystkie.

Konfiguracja sieci

Założyliśmy, że będziemy instalować pakiety z sieci, dlatego musimy skonfigurować połączenie. W opisach przyjęliśmy, że maszyna jest podłączona do sieci Ethernet.

W przypadku RescueCD system domyślnie pr�buje pobrać konfigurację z DHCP, dlatego od razu po uruchomieniu powinniśmy mieć działającą sieć. Jeśli w sieci nie ma takiego serwera to musimy statycznie przydzielić parametry połączenia. Zakładając, że chcemy ustawić adres 192.168.0.2 z maską /24 parametry pliku konfiguracji interfejsu (np.: /etc/sysconfig/interfaces/ifcfg-eth0) powinny mieć następujące wartości:

DEVICE=eth0
IPADDR=192.168.0.2/24
ONBOOT=yes
BOOTPROTO=none

W pliku /etc/sysconfig/static-routes dodajemy trasę routingu do bramy (np.: 10.0.0.254):

eth0 default via 10.0.0.254

W pliku /etc/resolv.conf podajemy przynajmniej jeden adres serwera DNS:

nameserver 193.192.160.243

Na koniec przeładowujemy podsystem sieci:

# service network restart

Konfigurację sieci szerzej opisano w „Wstęp”.

Proxy

Jeśli potrzebujemy skorzystać z proxy ustawiamy odpowiednią zmienną środowiskową np.:

# export ftp_proxy=w3cache.dialog.net.pl:8080

Szczeg�ły konfiguracji proxy odnajdziemy w „Proxy”.

Konfiguracja Poldka

Zaczynamy od ustawienia najlepiej dopasowanej architektury instalowanych pakiet�w, za pomocą opcji _pld_arch w pliku /etc/poldek/repos.d/pld.conf. Więcej o architekturach pakiet�w w „Architektury pakiet�w”. Dobrym pomysłem jest ustawienie opcji, umożliwiającej precyzyjne wybieranie alternatywnych pakiet�w (dla nieco bardziej zaawansowanych):

choose equivalents manually = yes

w pliku /etc/poldek/poldek.conf.

Teraz tworzymy katalog na indeksy Poldka np.:

# mkdir -p /pldroot/var/cache/poldek-cache

Następnie w konfiguracji Poldka musimy wskazać ten katalog, odszukujemy w pliku /etc/poldek/poldek.conf opcję cachedir, w kt�rej definiujemy ścieżkę do katalogu:

cachedir = /pldroot/var/cache/poldek-cache

Instalacja

Instalacja pakiet�w

Zanim zaczniemy instalować pakiety musimy mieć świadomość, że zachodzi między nimi wiele zależności. Zostaną zainstalowane wszystkie wymagane dodatkowo pakiety, jednak nie mamy wpływu na kolejność instalacji. Zdarza się, że pakiet wymaga pliku lub programu, kt�rego jeszcze nie ma w instalowanym systemie, przez co nie mogą być wykonane pewne operacje poinstalacyjne. Pojawią się nam wtedy na ekranie komunikaty błęd�w, nie należy się tym martwić, gdyż naprawimy ten problem reinstalując pakiet. Musimy jedynie wywołać instalację z opcją --reinstall

Instalację rozpoczynamy od inicjacji bazy danych pakiet�w:

# rpm --root /pldroot --initdb

W tej części instalacji zainstalujemy kolejno pakiety: setup, FHS, dev, pwdutils, chkconfig, dhcpcd, poldek, vim (lub inny edytor), geninitrd, module-init-tools, cpio, bootloader lilo lub grub, mount oraz mingetty. Możemy dodatkowo zainstalować wiele innych pakiet�w, jednak możemy spokojnie to wykonać z działającego już systemu.

Mamy możliwość użycia trybu interaktywnego Poldka:

# poldek --root /pldroot

poldek> install setup FHS dev pwdutils chkconfig dhcpcd poldek vim geninitrd \
module-init-tools cpio grub mount login mingetty

lub wsadowego

# poldek --root /pldroot -i setup FHS dev pwdutils chkconfig \ 
dhcpcd poldek vim geninitrd module-init-tools cpio grub mount login mingetty

Jeśli zdecydowaliśmy sie macierze dyskowe, to powinniśmy zainstalować dodatkowo pakiety: mdadm i mdadm-initrd (jeśli jest na głï¿½wnym systemie plik�w). Jeśli używamy wolumin�w logicznych (LVM) to potrzebujemy pakiety odpowiednio lvm2 i lvm2-initrd.

Przygotowanie do instalacji kernela

Przed instalacją jądra musimy wykonać operacje konieczne do prawidłowego wygenerowania initrd:

  • Montujemy pseudo-system plik�w /proc:

    # mount /proc /pldroot/proc -o bind

  • Konfigurujemy plik /pldroot/etc/fstab, tak by wpisy odpowiadały wybranemu przez nas układowi partycji i system�w plik�w. Dla przykład�w z początku rozdziału wpisy będą wyglądały następująco.:

    /dev/sda1 swap swap defaults 0 0
    /dev/sda2 /    ext3 defaults 0 0

    Więcej w „Kluczowe pliki”.

  • Dokonać odpowiednich koniecznych operacji konfiguracyjnych w przypadku korzystania z macierzy RAID (plik /etc/mdadm.conf) lub wolumin�w LVM (/etc/lvm/lvm.conf).

Instalacja kernela

Musimy wybrać, kt�ry kernel zainstalujemy, na początek powinniśmy się zainteresować pakietami: kernel, kernel-grsecurity i ew. ich odmiany z SMP. W wyborze może pom�c nam opis kerneli w „Jądro systemu”. Kiedy już wybraliśmy, instalujemy wybrany pakiet:

# poldek --root /pldroot -i kernel

Jeśli nie pominęliśmy żadnego kroku, to powinien nam się wygenerować prawidłowy obraz initrd, w przeciwnym wypadku musimy to wykonać samodzielnie wg. opisu zamieszczonego w „Initrd”.

Bootloader

Jeśli wybraliśmy LILO™ jako bootloader to powinniśmy odpowiednio zmodyfikować plik konfiguracji (/pldroot/etc/lilo.conf), w przypadku użytej w przykładach konfiguracji będzie wyglądał on następująco:

boot=/dev/sda
read-only
lba32
prompt
timeout=100

image=/boot/vmlinuz
	label=pld
	root=/dev/sda2
	initrd=/boot/initrd

Kiedy konfiguracja jest skończona wydajemy polecenie:

# chroot /pldroot /sbin/lilo

W przypadku GRUB-a™ plik konfiguracji (/pldroot/boot/grub/menu.lst) powinien wyglądać tak:

timeout 10

title  pld
root (hd0,1)
kernel /boot/vmlinuz boot=/dev/sda
initrd /boot/initrd

Teraz instalujemy bootloader:

# chroot /pldroot /sbin/grub

Kiedy zgłosi się nam powłoka GRUB-a kolejno wydamy następujące polecenia:

grub> root (hd0,1)
grub> setup (hd0)
grub> quit

Konfigurację bootloadera wyczerpująco przedstawiono w „Wstęp”. Jeśli gałąź /boot ma być na macierzy to powinniśmy umieścić bootloader na wszystkich wchodzących w skład tej macierzy dyskach, szczeg�ły tej operacji przedstawiliśmy w „RAID programowy”.

UDEV

Jeśli chcemy używać systemu urządzeń udev, to jest doskonała okazja żeby go zainstalować. Podstawowe pakiety wymagają urządzeń z pakietu dev, dlatego możemy go zainstalować dopiero teraz:

# poldek --root /pldroot -i udev
# poldek --root /pldroot -e dev

Urządzenia dev oraz udev zostały opisane w „Urządzenia”.

Konta użytkownik�w

Aby m�c się zalogować do nowego systemu musimy nadać hasło dla root-a:

# chroot /pldroot /usr/bin/passwd

Nic nie stoi na przeszkodzie, żeby utworzyć konta użytkownik�w i skonfigurować uprawnienia. W tym celu posłużymy się narzędziami z pakietu shadow™ lub pwdutils™, zanim to jednak zrobimy musimy ustalić z jakiej powłoki będą korzystać użytkownicy. Domyślnie oba pakiety ustawiają użytkownikom powłokę /bin/bash, dlatego przy tworzeniu kont musimy ustawić ją na /bin/sh, lub zainstalować Basha.

Zakładając, że mamy zainstalowanego Basha dodajemy konto użytkownika następująco:

# chroot /pldroot /usr/sbin/useradd -m jkowalski

# chroot /pldroot /usr/bin/passwd jkowalski

Szczeg�łowy opis narzędzi z pakietu pwdutils znajdziemy w „Konta użytkownik�w”.

Operacje końcowe

Przed restartem musimy odmontować systemy plik�w:

# umount /pldroot/proc
# umount /pldroot

Na koniec wpisujemy polecenie reboot, wyjmujemy płytę z napędu i czekamy aż uruchomi się nowy system.

Rozdział 5. 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ę skryptem ra2ac. Pakiety z tego skryptu standardowo pobierane są z ftp. Czynnością kt�rą musimy wykonać zanim posłużymy się skryptem to aktualizacja kernela do wersji 2.4.x. Gotowe pakiety możemy pobrać z dw�ch źr�deł w zależności od architektury.

Cała aktualizacja systemu sprowadzi się do uruchomienia skryptu i ręcznej rekonfiguracji nowych wersji usług.

Należy pamiętać, że AC jest na kernelu 2.6, lub 2.4 do wyboru, w tych kernelach nie ma ipchains-�w, zamiast tego jest narzędzie nazywające się iptables. Pomimo iż służy do tego samego, regułki mają inną składnie. W kernelach 2.4 i 2.6 niekt�re moduły urządzeń inaczej się nazywają, więc na to też należy być przygotowanym.

Skrypt jest przeznaczony dla ludzi, kt�rzy wiedzą co robią i mają og�lne pojęcie o linuksie, jeżeli jesteś początkującym użytkownikiem PLD, to lepszą decyzją będzie od nowa zainstalowanie systemu.

Pierwszym krokiem powinno być zrobienie kopii zapasowej plik�w konfiguracyjnych - najlepiej przekopiować gdzieś cały katalog /etc, jeżeli masz np. postgresa, to ważne jest abyś zrzucił gdzieś bazy. O innych ważnych usługach i zmianach w konfiguracjach powinniśmy poczytać wcześniej. Wiele nowszych pakiet�w, stare pliki konfiguracyjne przekopiuje do plik�w z rozszerzeniem *.old

Zainstalowanego na komputerze kde™ lub gnome™ najlepiej jest usunąć (łącznie z katalogami i plikami zaczynającymi się od .kde i .gnome w katalogach domowych użytkownik�w) - gdyż zmiany są bardzo duże i praca ze starymi ustawieniami powoduje często wadliwą prace. Generalnie ważne jest aby aktualizować jak najmniejszą liczbę pakiet�w, wtedy wszystko powinno p�jść w miarę gładko. Resztę pakiet�w można p�źniej ręcznie doinstalować po aktualizacji.

Teraz pobieramy z cvsu skrypt ra2ac poleceniem:

# cvs -d :pserver:[email protected]:/cvsroot get raac-converter
cvs server: Updating raac-converter
U raac-converter/ChangeLog
U raac-converter/TODO
U raac-converter/ra2ac

Lub korzystamy z adresu www

Następnie uruchamiamy ra2ac:

# sh raac-converter/ra2ac

Czekamy aż skończy się instalowanie pakiet�w, na przewijające się niespełnione zależności i błędy nie zważamy :)

I na samym końcu najbardziej nieprzyjemna część aktualizacji - konfiguracja. Należy teraz większość usług jeszcze raz przekonfigurować, część usług będzie potrzebowała tylko przekopiowania konfigu z Ra, jednak inne (np. exim™, postfix™) wymagają od administratora edycji nowych plik�w konfiguracyjnych. Ważne jest żeby poczytać w dokumentacji o zmianach w plikach konfiguracyjnych między wersjami kt�re mieliśmy w RA, a wersjami występującymi teraz po skończeniu działania skryptu.

Część�III.�Podręcznik użytkownika

Rozdział 6. Podstawy

W tym rozdziale znajdziesz podstawowe komendy i czynności, kt�re powinieneś znać.

Wstęp

Dokument, kt�ry aktualnie czytasz zawiera minimalny zestaw instrukcji i porad koniecnych do instalacji i zarządzania dystrybucją PLD Linux™. Większość opisywanych mechanizm�w i narzędzi ma o wiele większe możliwości, aby je poznać powinniśmy używać podręcznik�w systemowych info™ i man™ (przestarzały). Aby z nich korzystać musisz je zainstalować (o ile nie są już zainstalowane) poleceniami:

poldek -U man
poldek -U info

W skr�cie z podręcznika korzystamy następująco:

info {$hasło}

{$hasło} może być nazwą programu, biblioteki, pliku konfiguracyjnego. Dodatkową dokumentację odnajdziemy w katalogu /usr/share/doc, tam też możemy odnaleźć przykładowe pliki konfiguracji, historię zmian programu, licencje i wiele innych informacji.

Jeśli szukasz prostego narzędzia o konkretnych możliwościach możemy przejrzeć dokumentację systemową zestawu coreutils™:

info coreutils

Możesz r�wnież szukać pomocy na listach dyskusyjnych, IRC-u, czy forum. Listę tych jak i wielu innych użytecznych adres�w odnajdziesz w „Ważne adresy”.

Włączanie i wyłączanie systemu

Tradycyjną metodą wyłączania komputera jest komenda shutdown, np.:

# shutdown -h now

Lub poweroff dająca ten sam efekt.

Użycie komendy halt jest też właściwe.

# halt

Aby zresetować system wpisujemy reboot albo korzystamy z kombinacji klawiszy CTRL+ALT+DEL.

W trakcie pracy możemy dowolnie przełączać się pomiędzy trybami pracy. Służy do tego polecenie init {$nr} ({$nr} to liczba oznaczająca tryb pracy) np.

# init 5

Zmianę poziomu pracy szerzej opisano tutaj: „Zmiana poziomu pracy systemu”

Podstawowe operacje na plikach i katalogach

Zawartość plik�w wyświetlamy poleceniem cat.

$ cat archiwum

Jeśli chcemy przyjrzeć się plikowi, kt�ry nie mieści się na ekranie po wykonania cat możemy uzyskać poleceniem less. Możemy wtedy przeglądać plik używając "strzałek", a kiedy skończymy - naciskamy q.

$ less plik

Komendą touch możemy modyfikować znaczniki czasu pliku, częściej jednak używa się jej do tworzenia pustych plik�w.

$ touch pusty_plik

Polecenie mkdir tworzy katalog.

$ mkdir archiwum

Za pomocą polecenia rmdir usuwamy puste katalogi.

$ rmdir archiwum

Plik możemy przenieść, albo zmienić jego nazwę, za pomocą polecenia mv.

$ mv listing listing.old
$ mv /home/listing.old /usr/src/

W podobny spos�b operujemy na katalogach.

$ mv archiwum smietnik
$ mvdir smietnik /usr/src/smietnik/

Do kopiowania służy polecenie cp.

$ cp listing podkatalog/

Kasujemy poleceniem rm.

$ rm plik        	// Kasuje plik.
$ rm *           	// Kasuje wszystkie pliki w danym katalogu.
$ rm * -i        	// Kasuje wszystkie pliki w danym katalogu z potwierdzeniem.
$ rm * -f        	// Kasuje wszystkie pliki w danym katalogu bez pytania.
$ rm -r          	// Kasuje wszystkie pliki, także te w podkatalogach
$ rm -rf /home/  	// Kasuje wszystkie pliki i katalogi w katalogu /home/

Poruszanie się w drzewie katalog�w

Do poruszania się w drzewie katalog�w w trybie tekstowym można używać programu Midnight Commander™ uruchamianego poleceniem mc, jednak nie każdy go instaluje, więc warto zapoznać się z kilkoma poleceniami przedstawionymi w tym rozdziale.

Do poruszania się w drzewie katalog�w używamy polecenia cd ścieżka np.:

$ cd /home/users/zenek/

Ten sam efekt uzyskamy poleceniem

$ cd users/zenek/

wykonanym w katalogu /home

Kilka innych przykład�w przedstawiamy poniżej.

W systemach uniksowych wyr�żniamy kilka rodzaj�w specjalnych katalog�w. Najważniejszym w całym drzewie jest katalog głï¿½wny -korzeń (ang. root) oznaczany przez ukośnik: "/"

$ cd /

Często po lewej stronie ścieżki podaje się korzeń aby wskazać położenie katalogu lub pliku bez względu na miejsce z kt�rego wydajemy polecenie np.:

$cd /etc/sysconfig

Polecenie ls powoduje wyświetlenie zawartości katalogu. Należy po nim podać nazwę katalogu, kt�ry chcemy zobaczyć, w przeciwnym wypadku wyświetlona zostanie zawartość katalogu bieżącego.

$ls /
bin   dev  home    lib    mnt  proc  sbin     srv  tmp  var
boot  etc  initrd  media  opt  root  selinux  sys  usr
$cd /home
$ls
services  users

Parametr -a powoduje, że funkcja pokazuje r�wnież pliki ukryte (zaczynające się od kropki). -R powoduje wylistowanie r�wnież podfolder�w.

Polecenie pwd powoduje wyświetlenie ścieżki bieżącego katalogu.

$cd users/bart
$pwd
/home/users/bart/

Ważnym katalogiem jest katalog domowy użytkownika - oznaczany znakiem tyldy (~). Każdy użytkownik może używać w ścieżce tego znaku i zawsze będzie oznaczał jego własny katalog domowy np.:

$ ls ~/dokumenty

Kolejnym takim katalogiem jest katalog nadrzędny oznaczany za pomocą dw�ch kropek. Będąc w katalogu: /home/users/zenek możemy przejść o jeden poziom do g�ry używając polecenia

cd ..

Dzięki temu znajdziemy się w katalogu /home/users.

Data i czas

By wyświetlić aktualny czas i datę systemową posługujemy się komendą date:

$ date sob kwi 26 23:48:33 CEST 2003

Opr�cz możliwości wyświetlania daty i czasu w niemal dowolnym formacie, pozwoli nam na ustawianie czasu systemowego. Szczeg�łowy opis programu znajdziemy w podręczniku man.

Czas działania komputera sprawdzamy komendą uptime.

$ uptime
5:27pm  up  6:51,  4 users,  load average: 0.32, 0.08, 0.02

W sytuacji gdy chcemy z zmierzyć czas potrzeby na wykonanie operacji/czynności/procesu to posługujemy się komendą time.

$ time find /home/users/rennis/ HELLO
real	0m13.297s
user	0m0.060s
sys	0m0.230s

Przykład ten poszukuje pliku HELLO w moim katalogu domowym, co zajmuje systemowi ~13s.

Edycja plik�w konfiguracyjnych

W systemach z rodziny UNIXa konfiguracja systemu jest przechowywana w plikach tekstowych. Zaletą tego rozwiązania jest możliwość konfigurowania systemu przy pomocy bardzo prostych narzędzi, wadą zaś to że można łatwo popełnić błąd. Dlatego jeśli chcemy tylko przeglądać plik powinniśmy użyć programu less np.:

# less /etc/poldek/poldek.conf

Jeśli jesteśmy pewni że chcemy dokonać zmian, powinniśmy wcześniej wykonać kopię zapasową pliku (pliki kopii zapasowej kończy się tyldą).

# cp /etc/poldek/poldek.conf /etc/poldek/poldek.conf~

Teraz możemy zacząć modyfikować plik, domyślnie instalowanym edytorem plik�w jest vim, dlatego dobrze jest umieć się nim posługiwać choćby w podstawowym zakresie. Bardzo użyteczną cechą Vima jest kolorowanie składni podstawowych plik�w konfiguracji (o ile nasz terminal jest kolorowy), dzięki czemu łatwo możemy zauważyć ewentualne błędy.

Aby otworzyć nim plik do edycji wydajemy polecenie

# vim /etc/poldek/poldek.conf

Po otworzeniu pliku jesteśmy w trybie wydawania poleceń, aby przejść do trybu edycji naciskamy klawisz i. Teraz możemy wprowadzać zmiany. Po wykonaniu zmian naciskamy klawisz Esc aby powr�cić do trybu wydawania poleceń. Teraz należy opuścić program jednym z poniższych poleceń: :q - wyjście z programu jeśli nie dokonaliśmy żadnych zmian; :wq - wyjście z zapisaniem zmian do pliku; :q! - wyjście z programu bez zapisywania dokonanych zmian.

Początkującym można zaproponować edytor mcedit będący częścią programu mc (Midnight Commander), inne nieco mniej popularne edytory to: emacs, pico, joe

Należy pamiętać o tym, że prawo zapisu plik�w w katalogu konfiguracji systemu (/etc) ma tylko superużytkownik (root) i z takimi uprawnieniami należy uruchamiać edytor. Pliki konfiguracyjne w linuksie muszą kończyć się znakiem nowej linii, dlatego przed zapisem należy pamiętać o sprawdzeniu czy jest wstawiony. Po raz kolejny swoją przewagę nad innymi edytorami pokazuje Vim, kt�ry automatycznie wstawia znak nowej linii.

Podstawowe narzędzia kontroli sieci TCP/IP

Aby używać przedstawionych tu program�w, należy mieć uprawnienia superużytkownika lub być zapisanym do odpowiedniej grupy. Listę grup i odpowiadających im uprawnień zamieszczono w „Zarządzanie uprawnieniami”. Bardziej zaawansowane narzędzia sieciowe opisano w „Narzędzia sieciowe”.

Ping

Najczęściej używanym narzędziem diagnostycznym jest program ping™ - pozwala on zbadać istnienie połączenia między dwoma komputerami, drogę pomiędzy nimi, czas potrzebny na przejście pakietu oraz sprawdza czy drugi komputer pracuje w danym momencie w sieci. Przy okazji ping™ dokonuje tłumaczenia adresu domenowego na numer IP. Program ten jest przydatny do określania stanu sieci i określonych host�w, śledzenia i usuwania problem�w sprzętowych, testowania, mierzenia i zarządzania siecią, oraz do badania sieci. Polecenie ping {$nazwa/$numer_IP} wysyła specjalne pakiety ICMP do wskazanego komputera i czeka na odpowiedź. Możemy podawać jako cel adres domenowy lub numer IP. Przy okazji program ten dokonuje tłumaczenia adresu domenowego na numer IP.

$ ping pld-linux.org

PING pld-linux.org (81.0.225.27) 56(84) bytes of data.
64 bytes from 81.0.225.27: icmp_seq=1 ttl=44 time=135 ms
64 bytes from 81.0.225.27: icmp_seq=2 ttl=44 time=99.8 ms
64 bytes from 81.0.225.27: icmp_seq=3 ttl=44 time=149 ms

--- pld-linux.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 99.840/128.084/149.144/20.761 ms

pracę programu przerywamy skr�tem ctrl+c

Na powyższym wydruku przedstawiono 3 odpowiedzi na wysłane pakiety. Jeden wiersz oznacza odpowiedź na jeden pakiet, dla każdego z nich podawane są parametry trasy pomiędzy komputerami. Najistotniejszym parametrem jest czas odpowiedzi (time). W przypadku problem�w z siecią część pakiet�w może zostać zagubiona, będzie wskazywane przez specjalny licznik (icmp_seq) oraz przez końcowe statystyki. Brak jakiejkolwiek odpowiedzi można interpretować jako brak połączenia sieciowego z interesującym nas komputerem, blokadę tego typu pakiet�w na komputerze zdalnym lub zwyczajne wyłączenie maszyny. Na końcu wyświetlane są dodatkowo szczeg�łowe statystyki. Przy prawidłowym połączeniu czas odpowiedzi dla sieci lokalnej zazwyczaj nie przekracza 1 ms zaś w internecie może sięgnąć nawet kilkuset ms.

Komenda może dać r�wnież efekt podobny do poniższego:

[root@g82 ~]# ping google.pl
PING google.pl (216.239.57.99) 56(84) bytes of data.
From 192.168.6.1 icmp_seq=1 Packet filtered
From 192.168.6.1 icmp_seq=2 Packet filtered

--- google.pl ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time
1000ms

Może to oznaczać, że w naszej sieci zabronione jest wysyłanie ping�w poza LAN.

Traceroute

Nieco bardziej zaawansowanym programem jest traceroute™. Pokazuje on trasę jaką przechodzą pakiety między naszym komputerem, a sprawdzanym przez nas hostem. Wskazuje on czasy przesłania pakiet�w pomiędzy sąsiadującymi ze sobą routerami (tzw. czasy przeskok�w), znajdującymi się na trasie połączenia dw�ch maszyn. Pozwala śledzić trasę pakiet�w oraz wykrywać r�żnego rodzaje problemy w sieciach np.: błądzenie pakiet�w w sieci, "wąskie gardła" sieci, oraz awarie połączeń.

$ traceroute pld-linux.org

traceroute to pld-linux.org (81.0.225.27), 30 hops max, 38 byte packets
 1  192.168.1.1 (192.168.1.1)  0.295 ms  0.608 ms  0.484 ms
 2  217.153.188.173 (217.153.188.173)  1.012 ms  0.648 ms  0.495 ms
 3  217.8.190.153 (217.8.190.153)  30.894 ms  28.983 ms  29.719 ms

Jak widać, polecenie to wypisuje linie zawierające TTL, adres bramki oraz czas przebycia każdej z pr�bek z r�żnych gateway�w. Jeśli nie było odpowiedzi w ciągu trzech sekund to dla pr�bki drukowane jest '*'

MTR

Godnym uwagi programem jest MTR™, jest narzędziem łączącym funkcje opisanych wcześniej program�w. Program ten śledzi trasę połączenia między dwoma punktami podobnie jak traceroute™ i odświeża wyniki w regularnych odstępach czasu.

$ mtr pld-linux.org

Proxy

Zdarza się, że chcemy lub musimy korzystać z serwera pośredniczącego (proxy), w tym celu trzeba wskazać programowi jego adres i port. Konfiguracja proxy w GNU/Linuksie zależy od programu klienckiego i może być wykonana na jeden z trzech sposob�w, oto ich lista:

  • zmienne środowiskowe - z nich korzystają głï¿½wnie programy działające w trybie znakowym np.: lynx™, wget™, poldek™. Definiujemy je następująco: {$protok�ł}_proxy np. serwer proxy dla FTP wskazujemy za pomocą zmiennej ftp_proxy zaś dla HTTP za pomocą http_proxy np.:

    export ftp_proxy=w3cache.dialog.net.pl:8080

    Są programy, kt�re akceptują nazwy tych zmiennych napisanych wyłącznie wielkimi literami, tak więc dla wygody i pewności możemy zdefiniować obie wersje. Więcej o zmiennych środowiskowych znajdziemy w „Zmienne środowiskowe”.

  • opcje programu - wiele bardziej rozbudowanych aplikacji używa własnej konfiguracji proxy. Są to przeważnie programy dla środowiska X-Window np.: gFTP™, Firefox™, Opera™.

  • konfiguracja środowiska - programy ściśle związane ze środowiskami graficznymi Gnome™ lub KDE™ używają ustawień tychże środowisk. Do tego typu program�w należą np.: Epiphany™, Konqueror™.

Rozdział 7. Zasoby systemu

Tutaj opisano spos�b badania zasob�w systemu operacyjnego.

Ilość miejsca na dysku

Wiele poleceń zwracających wielkości zajmowanej pamięci obsługuje parametr -h przedstawiający wielkości w jednostkach bardziej wygodnych dla człowieka.

Komenda df służy do pokazania ilości miejsca na zamontowanych partycjach.

$ df -h
System plik�w        rozm. użyte dost. %uż. zamont. na
/dev/hdc1              36G  5.6G   29G  16% /

Natomiast komendą du można sprawdzać objętość plik�w oraz całych katalog�w. Uruchomienie du -h wyświetli listę plik�w, katalog�w i ich objętości (z bieżącego katalogu)

$ du -h
4.1kB	./archiv/httpd
4.1kB	./archiv/mysql
4.1kB	./archiv/exim
17kB	./archiv
4.1kB	./httpd
4.1kB	./mysql
111kB	./exim
107kB	./ircd
4.1kB	./mail
2.1MB	.

Za pomocą opcji -s uzyskamy sumę objętości wszystkich plik�w

$ du -sh /bin
3,4M    /bin

Procesy i zasoby

Listę wszystkich uruchomionych proces�w oraz dotyczące ich dane otrzymamy dzięki poleceniu ps

$ ps aux

USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND
root      1350  0.0  0.1  1788  868 ?        Ss   May27   0:00 syslog-ng
zenek     2252  0.0  1.2 11316 6668 ?        Ss   May27   0:01 xfce4-session
root      2301  0.0  0.3  2748 1556 tty2     Ss   May27   0:00 -bash

Oraz w formie drzewa proces�w rodzic�w i proces�w potomnych

$ ps xf

 PID TTY      STAT   TIME COMMAND
2459 ?        S      0:32 xmms
2460 ?        S      0:00  \_ xmms
2461 ?        S      0:00      \_ xmms
2465 ?        S      0:00      \_ xmms
2816 ?        S      0:00      \_ xmms

W przypadku potrzeby ciągłego śledzenia zmian w systemie możemy użyć programu top. Program ten pokazuje najbardziej zasobożerne procesy. Dodatkowo na bieżąco wyświetla całkowite zużycie procesora (CPU), pamięci operacyjnej(Mem) oraz zajętość przestrzeni wymiany (Swap).

$ top

top - 01:38:54 up  3:28,  4 users,  load average: 0.10, 0.08, 0.08
Tasks:  63 total,   2 running,  61 sleeping,   0 stopped,   0 zombie
Cpu(s):  2.3% us,  1.3% sy,  0.0% ni, 96.1% id,  0.0% wa,  0.3% hi,  0.0% si
Mem:    516244k total,   440344k used,    75900k free,    11840k buffers
Swap:  1076312k total,        0k used,  1076312k free,   328012k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                        
2240 root      15   0 62644  24m  45m S  1.6  4.9   7:37.40 X                                                              
2892 zenek     16   0  1880  928 1672 R  0.6  0.2   0:00.05 top                                                            
2695 zenek     16   0  6532 3824 5056 R  0.3  0.7   0:01.63 xterm                                                          
   1 root      16   0  1532  584 1372 S  0.0  0.1   0:00.82 init                                                           

Informacje o samej pamięci i przestrzeni wymiany uzyskamy dzięki komendzie free

$ free
             total       used       free     shared    buffers     cached
Mem:        516244     445536      70708          0      11880     332728
-/+ buffers/cache:     100928     415316
Swap:      1076312          0    1076312

Całkowita ilość zużytej pamięci (razem z buforami dyskowymi) mieści się w pierwszym wierszu w kolumnie USED. Zaś ilość pamięci zużytej jedynie przez programy mieści się w drugim wierszu w tej samej kolumnie.

Do śledzenia zmian zużycia zasob�w systemu w funkcji czasu warto polecić program vmstat z liczbą sekund w parametrze. Podany czas jest odstępem pomiędzy pomiarami, program pokazuje zmiany w wykorzystaniu pamięci, obszaru wymiany, czasu procesora, przerwań czy wielkości transferu do i z urządzeń masowych:

# vmstat 2
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 0  0      0 276896    980  89812    0    0   377     6  482   818  6  2 90  1
 0  0      0 276780    980  89816    0    0     0     0  456   770  0  0 100  0
 0  0      0 276772    980  89816    0    0     0    28  461   846  0  0 100  0

Szczeg�łowy opis oznaczeń kolumn odnajdziemy w podręczniku systemowym man/info.

Do proces�w kt�rych jesteśmy właścicielami możemy wysyłać sygnały (root może wysłać sygnał do każdego procesu). Aby zakończyć jakiś proces należy do procesu wysłać sygnał TERM. Dokonuje się tego poleceniem kill lub killall. Pierwsze zabija proces o podanym numerze PID (unikalnym identyfikatorze procesu) np.:

$ kill 2901

Drugie z poleceń zabija wszystkie procesy, kt�re mają podaną nazwę np.:

$ killall xmms

Sygnał TERM może być nieskuteczny w niekt�rych wypadkach, wtedy należy użyć bardziej brutalnej metody - sygnału KILL. Możemy go wysłać programem kill lub killall z odpowiednim parametrem: "-9" lub "-KILL":

kill -9 2901

W systemach uniksowych można ustawiać priorytety uruchamianym programom bądź też modyfikować bieżący priorytet działającego procesu. Priorytet jest nazywany jest "liczbą nice". M�wi ona jak mili jesteśmy dla systemu i innych użytkownik�w. Priorytet możemy ustawiać od -20 do +19, przy czym domyślna wartość zazwyczaj wynosi 0. Ujemne wartości oznaczają wyższy priorytet, zaś dodatnie niższy. Ujemną wartość może nadać tylko superużytkownik.

Aby uruchomić proces z priorytetem innym niż domyślny należy użyć programu nice np.:

$ nice -n +5 mc

Działającym procesom można zmieniać priorytet. Aby to zrobić używamy polecenia renice:

$ renice +5 mc

Jak sprawdzić kto jest zalogowany opr�cz nas?

Pierwszą komendą jest who. Podaje ona nam nazwę użytkownika, terminal na kt�rym jest zalogowany oraz czas rozpoczęcia pracy.

$ who
gozda    tty1         Apr 18 10:52
gozda    pts/1        Apr 18 16:21
gozda    pts/4        Apr 18 11:06
gozda    pts/6        Apr 18 14:46
gozda    pts/8        Apr 18 16:25
gozda    pts/9        Apr 18 18:25
gozda    pts/10       Apr 18 18:29

Kolejna komenda w pokazuje nam kto jest zalogowany i co robi na poszczeg�lnych sesjach.

$ w
6:56pm  up  8:05, 7 users,  load average: 1.94, 1.75, 1.61
USER     TTY      FROM  LOGIN@   IDLE   JCPU   PCPU  WHAT
gozda    tty1     -     10:52am  8:03m 16.67s  0.02s  sh /usr/X11R6/bin/startx
gozda    pts/1    -     4:21pm  6:45   5.37s  5.32s  irssi
gozda    pts/4    -     11:06am 37:46   3.22s  3.17s  ekg
gozda    pts/6    -     2:46pm 10:17  12.66s  1.08s  mp3blaster
gozda    pts/9    -     6:25pm  0.00s  0.12s  0.03s  w
gozda    pts/10   -     6:29pm 22:07   3:58   0.02s  ./mozilla-bin

Komenda users. Pokazuje ona pseudonimy użytkownik�w zalogowanych w systemie.

$ users
gozda gozda gozda gozda gozda gozda gozda

Poleceniem whoami dowiadujemy się, jak nazywa się użytkownik, na kt�rym pracujemy.

$ whoami
gozda

Część�IV.�Podręcznik administratora

Spis treści

8. Zarządzanie pakietami
Informacje podstawowe
Wstęp
Pakiety w PLD
Menadżery pakiet�w
Pobieranie pakiet�w
Cechy pakiet�w w PLD
Zależności między pakietami
Wymagania (requires) i własności (provides)
Zawartość pakiet�w
Konwencja nazw pakiet�w w PLD
Metapakiety
Komunikaty
Wpływ pakiet�w na pracę systemu
Wpływ pakiet�w na pliki konfiguracji
Architektury pakiet�w
Wyb�r architektury
Procesory
Źr�dła pakiet�w
Ścieżki do podstawowych źr�deł w konfiguracji Poldka
Cykl życia pakietu
Budowanie pakiet�w
Wstęp
Budowanie
Zarządzanie
Poldek
Wstęp
Pliki konfiguracji
Konfiguracja pobierania pakiet�w
Inne opcje
Tryby pracy
Tryb interaktywny
Tryb wsadowy
Pierwsze kroki z Poldkiem
Zarządzanie pakietami
Źr�dła
Porady
RPM
Instalowanie pakiet�w
Aktualizowanie pakiet�w
Odinstalowywanie pakiet�w
Uwagi
Bezpieczeństwo
Uruchamianie Poldka
Podpisy pakiet�w
Zaawansowane operacje
Lista ostatnio instalowanych pakiet�w
Odinstalowanie "opornych" pakiet�w
Repackage - bezpieczna aktualizacja
Kontrola integralności systemu
Naprawa bazy RPM
Reinstalacja wszystkich pakiet�w - zmiana architektury
9. Bootloader
Wstęp
Parametry jadra
MBR czy bootsector?
Frame buffer (bufor ramki)
LILO
Konfiguracja podstawowa
Inne systemy operacyjne
Frame Buffer
Graficzne menu
Zakończenie
GRUB
Nazewnictwo urządzeń
Konfiguracja podstawowa
Instalacja
Inne systemy operacyjne
Frame Buffer
Graficzne menu
Bezpieczeństwo bootloadera
Uwagi
rc-boot
Wstęp
Podstawowa konfiguracja
Tworzenie "obraz�w"
Uwagi
10. Kernel i urządzenia
Jądro systemu
Koncepcja jądra w PLD
Informacje o używanym jądrze
Rodzaje jąder systemowych
Aktualizacja
Zależności
Uwagi
Parametry jądra
Moduły jądra
Czym są?
Załadowanie właściwego modułu dla urządzenia
Konfiguracja modułï¿½w
Statyczne zarządzanie modułami
Określenie modułu dla urządzenia
Zarządzanie modułami
/etc/modules
/etc/modprobe.conf
Udev - dynamiczna obsługa sprzętu
Instalacja
Konfiguracja
Udev w praktyce
Uwagi
Initrd
Wstęp
Przygotowanie
Automatyczne generowanie initrd
Ręczne generowanie initrd
Gdy zawiedzie geninitrd
Bootloader
Uwagi
Urządzenia
Podstawowe informacje o urządzeniu
Systemy plik�w-urządzeń
UDEV
Jaki system wybrać?
11. Konfiguracja systemu
Podstawowe ustawienia
Konfiguracja skrypt�w startowych
Opcje związane z jądrem
Opcje uruchamiania systemu
Usługi
Ustawienia konsoli
Internacjonalizacja
Wstęp
Internacjonalizacja konsoli i program�w
Myszka pod konsolą
Wstęp
Szeregowa
PS/2, TouchPad, TrackPoint
USB
Zakończenie
Porady
Strefa czasowa
Zegar
Zmienne środowiskowe
Przeglądanie
Konfiguracja globalna
Konfiguracja lokalna
PLDconf - Narzędzie do konfiguracji systemu
Kluczowe pliki
/etc/inittab
/etc/fstab
/etc/passwd
/etc/shadow
/etc/group
/etc/shells
/etc/motd
/etc/nologin
12. Pamięci masowe
Wstęp
Nazewnictwo urządzeń masowych
Numerowanie partycji
Urządenia ATA (IDE)
Urządenia SCSI/SATA/USB Storage
Dyskietki elastyczne
LVM
RAID programowy
Urządzenia w GRUB-ie
Podział na partycje
Partycje
Zanim zaczniemy
Wymagane miejsce na system
Plan podziału dysku
Programy do zarządzania partycjami
Podział
Zakończenie
Systemy plik�w
Wyb�r systemu plik�w
Tworzenie systemu plik�w
Tworzenie obszaru wymiany
Podmontowanie partycji / aktywacja swapu
Poznanie typu systemu plik�w
Formatowanie
RAID programowy
Instalacja
Planowanie macierzy
Tworzenie macierzy RAID
Konfiguracja
Initrd
Bootloader
Diagnostyka
Porady
Dodatki
LVM
Planowanie wolumin�w
Instalacja
Budowanie wolumin�w
Konfiguracja startowa
Narzędzia diagnostyczne
Zarządzanie: powiększanie woluminu
Porady
Naprawa
Uszkodzenia fizyczne
Naprawa systemu plik�w
13. Administracja
Ratowanie systemu
Wstęp
Uruchomienie na niskim poziomie pracy
Uruchomienie RescueCD
Naprawa systemu plik�w
Naprawa konfiguracji
Operacja chroota
Uwagi
Zarządzanie podsystemami i usługami
Budowa systemu rc-skrypt�w
Zarzadzanie podsystememi/usługami
Konfiguracja rc-skrypt�w
Zależności
Usługi a poziomy pracy
Zmiana poziomu pracy systemu
Konta użytkownik�w
Dodanie
Usunięcie
Modyfikacja
Hasło
Zarządzanie kontami
Grupy
Dodanie grupy
Zapisanie do grup
Usunięcie grupy
Uwagi
Zarządzanie uprawnieniami
Bezpieczeństwo
Dostępne narzędzia
Dostęp do konta root
SUID
/proc
chroot i vserver
Statyczny VIM
Pakiety
14. Interfejsy sieciowe
Wstęp
Podstawowa konfiguracja sieci
Brama domyślna
Odwzorowanie nazw - serwery DNS
Nazwa hosta
Odwzorowanie nazw - konfiguracja zaawansowana
Inne opcje
Ethernet
Urządzenie
Statyczna konfiguracja karty sieciowej
Dynamiczna konfiguracja karty sieciowej (DHCP)
Aktywacja sieci
WiFi
Wstęp
Sterowniki dedykowane
Sterowniki z NdisWrapperem
Sieć WEP
Sieć WPA2-PSK
Aktywacja i diagnostyka
Neostrada+ z modemem USB firmy Sagem
Wprowadzenie
Instalacja
Konfiguracja
Uruchomienie i post konfiguracja
Neostrada+ z modemem USB firmy Alcatel - Thompson
Przygotowanie do instalacji
Konfiguracja
Uruchomienie i zakończenie
xDSL z interfejsem Ethernet
Wprowadzenie
Konfiguracja
Uwagi
Zaawansowane opcje interfejs�w
HotPlug
Narzędzia
Inne opcje
Wzory konfiguracji
15. Zastosowania sieciowe
Routing statyczny
Wstępna konfiguracja
Tablica routingu
Zarządzanie trasami
Zakończenie
NAT
DNAT
SNAT i MASQUERADE
Zakończenie.
Podział łącza w zależności od serwis�w
Wstęp
Podstawy
Przekierowanie p2p i połączeń podobnych
PPP over SSH - Tunel IPv4
Wstęp
Konfiguracja
Uruchomienie
VTun - Tunel IPv4
Wstęp
Konfiguracja
Uruchomienie
Narzędzia sieciowe
Konfiguracja interfejsow
Zarządzanie interfejsami
Adresy sprzętowe (MAC)
ARP
Serwery nazw (DNS)
Wydajność sieci
Monitorowanie sieci
Zakończenie
16. Usługi dostępne w PLD
Usługi - wstęp
ALSA - Dźwięk w Linuksie
Instalacja
Konfiguracja z użyciem systemu UDEV
Konfiguracja statyczna
Ustawienie miksera i testowanie
Zaawansowana obsługa miksera
Uwagi
Apache - Serwer stron internetowych
Wstęp
Instalacja
Pliki konfiguracji
Podstawowa konfiguracja
Strony użytkownik�w
Virtual Hosts
Ograniczanie dostępu na podstawie adresu
Ograniczenie dostępu za pomocą loginu i hasła
Obsługa skrypt�w PHP
CGI
Security Socket Layer (SSL)
Indeksowana zawartość katalogu
Uwagi
BIND - Serwer Nazw
DNS - Domain Name System
Wstęp
Podstawowa konfiguracja
Przykładowa konfiguracja strefy typu primary
Przykładowa konfiguracja strefy typu secondary
Obsługa protokołu IPv6
Rejestracja
Diagnostyka
Zakończenie
CRON - Cykliczne wykonywanie zadań
Instalacja
Budowa tabel
Format daty i czasu
Tabele systemowe
Tabele użytkownik�w
Komunikaty cron-a
CUPS - Popularny system druku dla Uniksa
Wstęp
Instalacja
Zarządzanie drukarkami
Dodanie drukarki
Szczeg�ły dodawania drukarki lokalnej
Szczeg�ły dodawania drukarki zdalnej
Konfiguracja serwera
Zarządzanie kolejką druku
Test drukarki i rozwiązywanie problem�w
DHCPD - Dynamic Host Configuration Protocol Daemon
Instalacja
Podstawowa konfiguracja
Statyczne przypisanie konfiguracji
Inne opcje
Uruchomienie
Konfiguracja klienta
Uwagi
Exim - Transport poczty elektronicznej (MTA)
Instalacja
Budowa pliku konfiguracji
Podstawowa konfiguracja
Skrzynki pocztowe
R�żne opcje
Autoryzacja SMTP
Syfrowanie SSL
Quota
Dodanie skaner�w antywirusowych
Walka ze spamem
Obsługa wielu domen w Eximie
Automatyczna odpowiedź - Vacations
Heimdal - Implementacja protokołu Kerberos
Instalacja i konfiguracja KDC
Logowanie do systemu
Konfiguracja poszczeg�lnych usług
Jabber 2 - Serwer typu Instant Messaging
Wstęp
Instalacja
Konfiguracja DNS i rekord�w SRV
Konfiguracja port�w (jeżeli korzystamy z firewall-a)
Podstawowa konfiguracja Jabberd2
Konfiguracja dla SQL (Postgresql)
Szyfrowanie
Zakończenie
MySQL - System Zarządzania Relacyjnymi Bazami Danych (ang. RDBMS)
Co to jest MySQL?
Og�lne cechy MySQL
Instalacja
Konfiguracja MySQL
Demon MySQL
mysqladmin
mysqldump
phpMyAdmin
NFS - Network File System
Serwer
Udostępnianie
Klient
Bezpieczeństwo serwera
Dostrajanie wydajności
PDNS (Power DNS) - Serwer Nazw
Wstęp
Instalacja
Konfiguracja Postgresql dla PDNS
Konfiguracja PDNS
Domeny
Postfix - Transport poczty elektronicznej (MTA)
Zaczynamy
Konfiguracja
Szyfrowanie
Domeny
Usprawnienia
Końcowa konfiguracja
tpop3d
amavis + mks
postifx.admin
PostgreSQL - Baza danych SQL
Co to jest PostgreSQL
Instalacja pakiet�w
Konfiguracja PostgreSQLa w PLD
Inicjalizacja
Konfiguracja PostgreSQLa
Uruchomienie PostgreSQLa
Dodanie użytkownika
Ostatni test
Dodatki
Odnośniki
ProFTPD - serwer FTP
Wstęp
Instalacja
Podstawowa konfiguracja demona
Konfiguracja dostępu
Zakończenie
Samba - wsp�łpraca z Windows
Samba jako Serwer domeny NT4 (PDC)
Serwer członkowski domeny NT4
Snort - Sieciowy System Wykrywania Włamań
Wymagania
Instalacja Snorta i ACID
Konfiguracja Snorta
Aktualizacja reguł
Instalacja Oinkmaster
Architektura Snorta
Tryby pracy
Preprocesory
Moduł sygnatur
Ciekawe projekty
Syslog-ng
Wstęp
Konfiguracja
Test konfiguracji
Uwagi
Dodatek
17. X-Window
Wstęp
X-Server
Instalacja
Zanim zaczniemy konfigurację
Pierwsze uruchomienie
Konfiguracja
Inne sposoby konfiguracji
Rozwiązywanie problem�w
Środowisko graficzne (GUI)
Zaawansowane
Mysz
Klawiatura
Monitor
Rozdzielczość obrazu
Zaawansowane - DPI
Zaawansowane - serwer czionek
Uwagi
Środowisko GNOME
Instalacja
Internacjonalizacja
Dźwięk
Uruchomienie
Administracja - GNOME System Tools
Przydatne drobiazgi
Godne polecenia aplikacje
Pomoc i rozwiązywanie problem�w
Środowisko KDE
Blackbox - Szybki i lekki zarządca okien
Wstęp
Instalacja pakiet�w
Konfiguracja
Fluxbox - Następca BlackBoxa
Wstęp
Instalacja pakiet�w
Konfiguracja
Uruchamianie środowiska graficznego
Skrypt startx
GDM
KDM
Ustawienie poziomu pracy
Porady
Karty firmy nVidia
Karty firmy ATI
Instalacja i konfiguracja
Test konfiguracji

Rozdział 8. Zarządzanie pakietami

Ten rozdział opisuje metody zarządzania pakietami w systemie PLD.

Informacje podstawowe

Wstęp

Instalowanie, deinstalowanie oraz aktualizowanie składnik�w systemu operacyjnego to jedne z najważniejszych zadań administratora. Zautomatyzowanie tych proces�w pozwala na znaczne przyspieszenie i ułatwienie zarządzania systemem.

W świecie Otwartego Oprogramowania pomiędzy programami istnieją liczne powiązania, kt�re w efekcie wymuszają konieczność instalacji dodatkowych program�w i/lub bibliotek. Pominięcie tych zależności spowoduje problemy z działaniem programu lub całkowity jego brak. Śledzenie tych zależności może przyprawić o b�l głowy większość administrator�w. Na szczęście istnieją mechanizmy i narzędzia, kt�re pomagają znacznie zautomatyzować ten proces.

Pakiety w PLD

Elementy systemu operacyjnego dostępne są w tzw. pakietach (pot. "paczkach"). W PLD zastosowano system pakiet�w RPM™ (RPM Packet Manager™), kt�ry został stworzony przez tw�rc�w dystrybucji Red Hat Linux™. Istnieje możliwość instalacji pakiet�w RPM przygotowanych dla innych dystrybucji, jednak nie skorzystamy wtedy z dobrodziejstwa zależności dotyczących danego pakietu. Wymagane dodatkowe pakiety należy wtedy zainstalować samodzielnie.

Menadżery pakiet�w

Do zarządzania pakietami (instalacja, deinstalacja, uzyskiwanie informacji) używa się specjalnych program�w zwanych menadżerami pakiet�w:

  • Poldek

    Poldek to domyślny menadżer pakiet�w dla PLD. Jest nakładką na RPM-a o ogromnych możliwościach, pozwalającym na znaczną automatyzację procesu zarządzania dużymi ilościami pakiet�w. Jest "wołem roboczym" odciążającym administratora w jego żmudnym zajęciu. Konfigurację i opis Poldka przedstawiono w „Poldek”.

  • PackageKit

    Prosty zarządca pakiet�w, dla środowiska X-Window. Został stworzony pierwotnie dla Gnome, ma także wersję dla Qt. Jest to wygodne narzędzie, dobrze sprawujące się przy zrządzaniu niewielkimi ilościami pakiet�w. PackageKit wyświetla na tacce systemowej dostępność aktualizacji. PackageKit jest świetnym wyborem dla zupełnie niezaawansowanych użytkownik�w.

  • RPM

    Niskopoziomowy zarzdca pakiet�w, używany zwykle w nietypowych i awaryjnych sytuacjach. Opis posługiwania się tym programem zamieszczono w „RPM”.

Pobieranie pakiet�w

Jedną z najczęściej używanych form instalacji jest instalacja z sieci, dlatego jeśli nie zostanie podane inaczej to właśnie taka instalacja jest traktowana jako domyślna. Używamy tej metody nawet jeśli system był instalowany z lokalnego źr�dła (np. z dysku), choćby w celu aktualizacji systemu.

Menadżery pakiet�w są wstępnie skonfigurowane, Aby jednak instalować niestandardowe pakiety lub użyć innego źr�dła, musimy podać odpowiednie parametry. Konfiguracja w tym zakresie jest opisana w „Serwery z pakietami”.

Cechy pakiet�w w PLD

Zależności między pakietami

Istotną cechą pakiet�w RPM jest mechanizm tzw. zależności, dzięki nim w trakcie instalacji pakietu instalowane są automatycznie dodatkowe wymagane pakiety. Niekiedy w ramach zależności wymagana jest funkcjonalność dostarczana przez więcej niż jeden pakiet. W takim wypadku zostaniemy zapytani o to kt�ry pakiet ma być zainstalowany. Wynika to z filozofii PLD, kt�ra dopuszcza bogaty wyb�r oprogramowania spełniającego tą samą rolę.

Istnieją zależności wymagające wzajemnego wykluczania się pakiet�w, tak aby w systemie była zainstalowany był tylko jeden program z pośr�d kilku dostępnych. Jako przykład można wskazać serwery usług tego samego rodzaju lub pakiety zawierające w nazwie słowa "inetd" oraz "standalone".

Dodatkowo system pakiet�w pilnuje, aby nie można było mieć zainstalowanych dw�ch wersji tego samego pakietu. Pr�ba instalacji pakietu starszego niż ten, kt�ry mamy w systemie zakończy się niepowodzeniem, zaś przy instalacji nowszego nastąpi jego aktualizacja.

Menadżery pakiet�w pozwalają na ignorowanie powyższych zależności, jest to jednak operacja nie zalecana, gdyż powoduje p�źniej trudny do ogarnięcia bałagan. Wyjątki od tej zasady powinny być robione jedynie w razie uzasadnionej konieczności, takim przypadkiem jest np. aktualizacja kernela, operacja ta została opisana w „Jądro systemu”.

Dawniej zależności były budowane na podstawie nazw pakiet�w, w tej chwili stopniowo wprowadzane są zależności na podstawie plik�w (program�w, bibliotek itd.). Zyskujemy w ten spos�b elastyczność kosztem wygody w niekt�rych, rzadko spotykanych sytuacjach. W przypadku codziennej pracy z pakietami, nie odczujemy większych r�żnic i nie musimy się tym martwić.

Wymagania (requires) i własności (provides)

Ważnymi elementami mechanizmu zależności są tzw. wymagania i własności. Pierwsza z cech wskazuje listę wymaganych dodatkowo element�w (pakiet�w, plik�w) do działania instalowanej aplikacji, druga zaś informuje, kt�re z element�w są dostarczane wraz z pakietem. Aby poznać wymagania pakietu posłużymy się Poldkiem w trybie interaktywnym:

poldek:/all-avail> desc -r logrotate

Package:        logrotate-3.7-2
PreReqs:        /bin/sh, fileutils
Requires:       /bin/mail, /bin/sh, config(logrotate) = 3.7-2, crondaemon,
    glibc, libc.so.6, libc.so.6(GLIBC_2.0), libc.so.6(GLIBC_2.1),
    libc.so.6(GLIBC_2.2), libc.so.6(GLIBC_2.3), libpopt.so.0, libselinux,
    libselinux.so.1, popt
RPMReqs:        rpmlib(CompressedFileNames) <= 3.0.4-1,
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1,
    rpmlib(PayloadIsBzip2) <= 3.0.5-1

Powyższe polecenie ma zadanie czysto informacyjne, gdyż jak już wspomniano zależnościami zajmie sie menedżer pakiet�w.

Sprawa nieco komplikuje się w przypadku własności, ponieważ w PLD nierzadko mamy dostępnych wiele pakiet�w spełniających podobne wymagania. Aby sprawdzić dostarczaną funkcjonalność ponownie użyjemy Poldka:

poldek:/all-avail> desc -p vixie-cron

Package:        vixie-cron-4.1-7
Provides:       config(vixie-cron) = 4.1-7, crondaemon, crontabs >= 1.7,
    group(crontab)

Analizując powyższe przykłady można dopatrzyć się informacji o dostarczaniu własności crondaemon przez vixie-cron, kt�ra z kolei jest wymagana przez logrotate.

Własność crondaemon jest dostarczana przez większą ilość pakiet�w, możemy samodzielnie wybierać, kt�ry z pakiet�w ma być instalowany lub ustawić automatyczny wyb�r. O tym decyduje ustawienie opcji choose equivalents manually w konfiguracji Poldka. Jeśli ustawimy opcję na yes (zalecane) to instalacja programu może wyglądać następująco:

poldek:/all-avail> install logrotate
Przetwarzanie zależności...
Więcej niż jeden pakiet udostępnia właściwość "crondaemon":
a) anacron-2.3-22
b) fcron-3.0.0-3
c) hc-cron-0.14-22
d) vixie-cron-4.1-7
Which one do you want to install ('Q' to abort)? [b]

Na powyższym przykładzie widać listę pakiet�w mogących pełnić funkcję demona zegarowego (crondaemon), dodatkowo podana jest domyślna wartość wyboru, nie zawsze jest to najlepszy wyb�r dla konkretnej instalacji, dlatego powinniśmy się upewnić, że wybieramy najwłaściwszy pakiet. Więcej informacji o obsłudze i konfiguracji Poldka odnajdziemy w „Poldek”.

Zawartość pakiet�w

Pakiety mogą zawierać wiele małych program�w i/lub bibliotek albo jeden duży program może być podzielony na kilka pakiet�w. W PLD najczęściej stosowane jest to drugie rozwiązanie: osobno przechowywane są pliki uruchomieniowe, osobno biblioteki, a jeszcze osobno moduły, wtyczki i dodatki. Ponadto jeśli tylko można to są umieszczane w pojedynczych pakietach, dzięki temu unikamy dużych, zbiorczych paczek. Pozwala to instalować tylko to co jest nam potrzebne. Przykładowo jeśli program ABC wymaga bibliotek programu XYZ to instalujemy tylko pakiet z bibliotekami tego drugiego. Skraca to czas instalacji (zwłaszcza przy pobieraniu plik�w z Internetu) i pozwala oszczędzać miejsce na dysku.

Nierzadko do osobnych pakiet�w trafiają elementy aplikacji, kt�re zostały przewidziane przez jej tw�rc�w jako kompletna instalacja. Nie należy się tego obawiać, gdyż mechanizm zależności wymusi instalację wszystkich wymaganych dodatkowo pakiet�w.

Tak silne rozdrobnienie powoduje czasami, że do przy instalacji mechanizm zależności zaznacza sporą ilość dodatkowych pakiet�w. Potrafi to wprowadzić w konsternację, jednak nie należy się tego obawiać, gdyż są to zazwyczaj małe pakiety i po zainstalowaniu zajmują tyle samo lub mniej niż domyślna instalacja.

Aby ułatwić poruszanie się w tym gąszczu, możemy posłużyć się opisami pakiet�w:

poldek:/all-avail> desc proftpd-inetd

lub listami plik�w dostarczanych przez pakiet:

poldek:/all-avail> desc -f proftpd-inetd

Zdarza się, że znamy nazwę pliku, ale nie wiemy w jakim pakiecie się znajduje. Do odnalezienia pakietu posłużymy się poleceniem:

poldek:/all-avail> search -f */sendmail

Dodatkowo możemy korzystać z zamieszczonej dalej tabeli.

Konwencja nazw pakiet�w w PLD

Nazwy pakiet�w mają następującą budowę: {$nazwa}-{$wersja}.{$arch}.rpm np.: 0verkill-0.16-3.i686.rpm. Tak wyglądają nazwy pakiet�w w systemie plik�w lub na serwerze FTP. W menedżerach pakiet�w posługujemy się jedynie nazwą lub nazwą i wersją (nie licząc instalacji za pomocą rpm-a).

Tabela 8.1. Opis zawartości pakiet�w w zależności od ich nazwy

Nazwa pakietuZawartość
program, program-coregłï¿½wny pakiet programu, zawiera pliki wykonywalne, dokumentację, skrypty startowe w przypadku usług, niekiedy biblioteki
program-commonpodstawowe, wsp�lne pliki; zwykle samodzielny taki pakiet jest bezużyteczny i wymaga zainstalowania dodatkowych pakiet�w
program-libszestaw bibliotek stworzonych na potrzeby danego programu, są niekiedy wymagane przez inne programy
program-tools, program-utils, program-progs dodatkowe narzędzia, zwykle nie są konieczne do podstawowej pracy programu
program-extras dodatkowe, rzadziej używane elementy
program-mod, program-plugin, program-applets, program-addon r�żnej maści moduły, "wtyczki", applety i dodatki przeważnie nie są konieczne do podstawowej pracy programu
program-skin(s), program-theme(s) "sk�rki" i "tematy" modyfikujące wygląd programu
program-driversterowniki
program-backend specjalne interfejsy służące do rozszerzania możliwości programu, łączenia z innymi programami, sprzętem itp.
program-i18ndodatkowe wersje językowe
program-docdokumentacja programu
program-develpakiety potrzebne dla programist�w i os�b kt�re zajmują się własnoręczną kompilacją program�w, bądź budowaniem pakiet�w.
program-staticprogram skompilowany statycznie - nie wymaga bibliotek
program-debuginfo informacje dla debuggera - pliki użyteczne tylko dla os�b badających problemy z działaniem programu
lib_nazwa_bibliotekizestaw uniwersalnych bibliotek, nie związanych z żadnym konkretnym programem.
usługa-inetd, usługa-standalone alternatywne pakiety służące do wyboru trybu pracy niekt�rych usług. Należy wybrać jeden z nich: uruchamianie przez Inetd™ lub praca w tle (standalone). Pakiety te wzajemnie się wykluczają na poziomie mechanizmu zależności.
usługa-initskrypty startowe programu
metapackage-programmetapakiet
program-legacystarsze wersje program�w lub sterowniki do starszych urządzeń
kernelpakiety okołokernelowe, zostały om�wione w „Jądro systemu”

Metapakiety

Wadą silnego rozdrobnienia pakiet�w jest pracochłonne zarządzanie, aby temu zaradzić stworzono tzw. metapakiety, zwane r�wnież pakietami wirtualnymi. Są to pakiety zawierający jedynie wymagania (requires), nie zawierają żadnych plik�w, ani własności (provides). Ich zadaniem jest zautomatyzowana instalacja większych grup pakiet�w oraz utrzymanie wstecznej zgodności w nazwach.

Część metapakiet�w łatwo odnajdziemy dzięki nazwie, kt�ra zawiera słowo metapackage, np. metapackage-gnome. Aby poznać listę wymagań takiego pakietu, użyjemy opisanego nieco wcześniej polecenia desc -r trybu interaktywnego Poldka.

Komunikaty

Prace przy zarządzaniu pakietami niekiedy kończą się komunikatami skierowanymi do administratora, są to dość ważne informacje, dlatego powinniśmy je uważnie czytać. Zazwyczaj dotyczą plik�w konfiguracji, zarządzania użytkownikami/grupami, modyfikacji systemu rc-skrypt�w oraz zalecenia dalszego postępowania po instalacji pakietu. Dla przykładu poniżej przedstawiono komunikaty wyświetlane po instalacji Exim-a™:

Adding group exim GID=79.
Adding user exim UID=79.
Run "/etc/rc.d/init.d/exim start" to start exim daemon.

Wpływ pakiet�w na pracę systemu

Pakiety, opr�cz plik�w programu, zawierają dokumentację, przykładowe pliki konfiguracji, strony podręcznika systemowego (man, info) oraz automatykę. Owa automatyka jest uruchamiana w trakcie instalowania bądź odinstalowania pakietu i wykonuje konieczne prace w systemie, dzięki czemu zmniejsza się nakład pracy administratora do absolutnego minimum. Jest tak skonstruowana, aby nie zaskakiwać administratora w najmniej oczekiwanych momentach oraz zapewnić nieprzerwanie działanie systemu, poniżej przedstawiono kilka przykład�w jej działania.

Jeśli instalujemy w systemie jakąś usługę to zostanie zapisana odpowiednia informacja do skrypt�w startowych i nowe oprogramowanie uruchomi się przy najbliższej zmianie trybu pracy lub restarcie systemu. Jeżeli jakaś usługa jest wyłączona z działania i nastąpi jej aktualizacja, to w dalszym ciągu nie będzie uruchamiana.

Jeśli działa usługa, a my ją zaktualizujemy lub doinstalujemy dodatkowy moduł, to zostanie ona automatycznie zrestartowana lub taka operacja zostanie zasugerowana przez pakiet. Będzie to zależało od ustawienia opcji RPM_SKIP_AUTO_RESTART w konfiguracji rc-skryptu lub globalnie w /etc/sysconfig/rpm - opcja przyjmuje wartość yes/no. Konfigurację rc-skrypt�w dokładniej om�wiono w „Zarządzanie podsystemami i usługami”.

Wpływ pakiet�w na pliki konfiguracji

Po aktualizacji pakietu nie są naruszanie istniejące pliki konfiguracji, nowe wersje tych plik�w są zapisywane z rozszerzeniem ".rpmnew". Przykładowo po zaktualizowaniu pakietu sudo™ obok pliku /etc/sudoers pojawi się nowy plik o nazwie /etc/sudoers.rpmnew, tak więc zaktualizowany program będzie używał starego pliku konfiguracji. W większości wypadk�w nie będzie to stanowić problemu, jednak dla pewności należy skonfigurować plik dostarczony z nowszym pakietem na wz�r poprzedniej konfiguracji i zmienić mu nazwę poprzez usunięcie omawianego rozszerzenia. Jest to pierwsza rzecz, kt�rą należy sprawdzić w razie problem�w z działaniem programu po aktualizacji.

Kiedy odnajdziemy plik *rpmnew to możemy łatwo sprawdzić czym r�żni się jego zawartość w stosunku do obecnie używanego pliku konfiguracji. Posłużymy się w tym celu programem diff z pakietu diffutils np.:

# diff jakis_plik.conf jakis_plik.conf.rpmnew

W przypadku niekt�rych program�w, po odinstalowaniu pakietu, pozostawiane są jego pliki konfiguracji, posiadają one rozszerzenie ".rpmsave", możemy je zachować lub skasować jeśli uznamy że są nam zbędne.

Osoby chcące trzymać porządek w systemie powinny zajmować się plikami .rpmnew i .rpmsave od razu po pracy z menadżerem pakiet�w. Pliki łatwo odnajdziemy, gdyż występują zwykle w katalogu /etc, odszukamy je następująco:

$ find /etc -name "*rpmnew"
$ find /etc -name "*rpmsave"

Architektury pakiet�w

W PLD programy są kompilowane dla wielu architektur sprzętowych, pozwala to na używanie systemu na bardziej r�żnorodnym sprzęcie oraz na lepsze dopasowanie do używanego procesora. Architekturę pakietu rozpoznamy po nazwie, jest to kilkuznakowe oznaczenie znajdujące się tuż przed rozszerzeniem pliku. W przypadku pakietu 0verkill-0.16-3.i686.rpm jego architektura to i686.

Aby sprawdzić architekturę komputera, używamy polecenia arch lub uname -m.

Wyb�r architektury

Pakiety zbudowane dla poszczeg�lnych architektur są umieszczane w odpowiednich katalogach na serwerze. Ścieżka katalog�w na serwerze wygląda następująco:

/dists/{$wersjaPLD}/PLD/{$architektura}

Przykładowo adres ftp://ftp.pld-linux.org/dists/2.0/PLD/i686/ dotyczy systemu w wersji 2.0 (Ac)™ z wybraną architekturą "i686". Poldek instaluje pakiety z tej architektury, do kt�rej należał pakiet z Poldkiem, co w zasadzie jest jednoznaczne z architekturą, kt�ra została wybrana przy instalacji. Konfiguracja źr�deł pakiet�w w Poldku została opisana w „Poldek”.

Procesory

Tabela 8.2. Lista nazw kodowych architektur i odpowiadających im rodzin procesor�w:

Nazwa architekturyObsługiwana platformaDostępna wersja PLD
alphaDEC/Compaq/HP Alpha AXPRa, Ac
amd64 / x86_64AMD K8: Opteron, Athlon 64, Sempron (socket: 754, 939), Intel EM64TAc, Th
athlonAMD K7: Athlon, Duron, Sempron (socket A)Ac
i386wszystkie procesory zgodne z i386 firmy IntelRa, Ac
i486Intel 486, AMD K5 (socket 3) i nowszeTh
i586Intel 586 Pentium, Cyrix 5x86, Cyrix 6x86, AMD K5 (socket 7), AMD K6 i nowszeRa, Ac
i686Intel Pentrium II, Pentium PRO, AMD K7 i nowszeRa, Ac, Th
ppcPowerPCRa, Ac
sparcSun SPARC 32bitRa, Ac
sparc64Sun SPARC 64bitAc
noarchdowolna-


Należy pamiętać by instalować pakiety wyłącznie przeznaczone dla używanej architektury. Wyjątkiem są pakiety z oznaczeniem noarch oraz pakiety przeznaczone dla procesor�w Intel x86 i zgodnych: i386, i486, itd.

Architektury z rodziny x86 są bardziej lub mniej wyspecjalizowanymi grupami, najbardziej og�lna jest 386, zaś każda następna w kolejności jest bardziej wyspecjalizowana. Im węższa specjalizacja grupy tym mniej modeli procesor�w obsługuje. Przykładowo na maszynie z procesorem Pentium III™ (i686) możemy zainstalować system w wersji i386, ale na procesorze 386™ wersja i686 nie będzie działać. Jeśli mamy nowszy procesor, to będziemy mogli użyć bardziej wyspecjalizowanej architektury, a co za tym idzie lepiej wykorzystać jego potencjał.

Źr�dła pakiet�w

W PLD jest kilka grup pakiet�w (źr�deł) w ramach tej samej wersji dystrybucji, r�żnią się one wersjami pakiet�w i zastosowaniem. Ich listę uzyskamy za pomocą Poldka:

$ poldek -l

W większości wypadk�w, będziemy korzystać z głï¿½wnego źr�dła (main), jednak od czasu do czasu potrzeba zaktualizować system lub pobrać niestandardowe wersje pakiet�w, właśnie wtedy z nich skorzystamy. Źr�dła są oznaczane za pomocą etykiet:

  • main (np. th): głï¿½wne źr�dło pakiet�w (domyślne), zawiera stabilne wersje, od chwili wydania danej wersji dystrybucji, nie są tu dokonywane żadne zmiany

  • obsolete (np. th-obsolete): stare pakiety, usunięte z main w wyniku aktualizacji. Dzięki temu źr�dłu, możemy wr�cić do starszej wersji pakietu, jeśli zajdzie taka konieczność. Źr�dło wprowadzone w Th.

  • test (np. th-test): trafiają tu pakiety prostu z builder�w, bez sprawdzenia czy w og�le działają i czy są spełnione zależności. Używanie pakiet�w z tego źr�dła jest dosyć ryzykownym krokiem, dlatego należy go wykonywać wyłącznie w ostateczności

  • ready (np. th-ready): następny krok w życiu pakietu, jeśli pakiety działają bez zarzutu, to są przenoszone razem z zależnościami do main. Pakiety te są już wstępnie przetestowane, nadal jednak powinniśmy zachować ostrożność instalując pakiety z tego katalogu

  • debuginfo (np. th-debuginfo, th-ready-debuginfo): pakiety zawierające wyłącznie symbole potrzebne przy debugowaniu. Pakiety te są pomocne dla programist�w i deweloper�w.

  • home: źr�dło lokalne, pozwala łatwo instalować pakiety z katalogu ~/rpm/RPMS - miejsca domyślnego umieszczania własnoręcznie zbudowanych pakiet�w.

Multilib

W środowisku x86_64 możemy używać także aplikacji 32 bitowych, aby wygodnie instalować pakiety zostały przygotowane źr�dła multilib /etc/poldek/repos.d/pld-multilib.conf. Domyślnie są przygotowane dla i686.

Źr�dła używane w starszych wersjach PLD:

  • updates (np. ac-updates) - aktualizacje, zaleca się regularne sprawdzanie czy nie pojawiają się tu nowe pakiety, źr�dło stało się zbędne w Th i nie jest używane. W Th w roli updates używa się źr�dła ready. W Ra™ istniały dwa niezależne źr�dła pakiet�w z aktualizacjami: {$wersja}-updates-security i {$wersja}-updates-general. W Ac™ nastąpiło ich połączenie i od tej pory źr�dło nazywa się {$wersja}-updates.

  • supported (np. ac-updates) - nietypowe pakiety, kt�re nie powinny być trzymane w głï¿½wnym źr�dle. Są tu umieszczane pakiety rzadko używane lub starsze wersje, podobnie jak updates przestało mieć rację bytu w Th.

Aby wybrać źr�dło inne niż domyślne należy użyć parametru -n np.:

$ poldek -n th -n th-ready

Należy pamiętać, że użycie każdego źr�dła będzie możliwe dopiero po pobraniu aktualnych indeks�w:

$ poldek -n debuginfo --up

Ścieżki do podstawowych źr�deł w konfiguracji Poldka

Poldek jest dostarczany z właściwie skonfigurowanymi etykietami, są one zdefiniowane w plikach /etc/poldek/source.conf i /etc/poldek/repos.d/pld.conf. Adresy oficjalnych serwer�w i mirror�w znajdziemy w „Serwery z pakietami”. Etykieta źr�dła rozpoczyna się od przedrostka określającego wersję dystrybucji, zapisaną małymi literami, poniżej przedstawiono ją jako ciąg {$wersja}, kt�ry może mieć wartość np. ra, ac lub th. Ciąg {$arch} to architektura pakiet�w.

  • main: dists/{$wersja}/PLD/{$arch}/PLD/RPMS

  • obsolete: dists/{$wersja}/obsolete/{$arch}/RPMS

  • test: dists/{$wersja}/test/${arch}/

  • ready: dists/{$wersja}/ready/${arch}/

  • home: katalog lokalny: ~/rpm/RPMS

Cykl życia pakietu

Zbudowany pakiet trafia do test gdzie oczekuje na zbudowanie zależności, następnie jest przenoszony przez RM-a do ready. kiedy wszytko jest w porządku trafia w końcu do main/updates. W przypadku bardziej krytycznych pakiet�w kiedy pojawia się aktualizacja to starsza wersja trafia do obsolete. Proces ten został szerzej opisany w podręczniku dewelopera.

Budowanie pakiet�w

Wstęp

W większości wypadk�w będziemy korzystali z gotowych pakiet�w, zdarza się jednak, że nie ma dostępnego jakiegoś pakietu lub nie odpowiadają nam opcje z jakimi został skompilowany. Co więcej może się zdarzyć, że będziemy potrzebować starszej, niedostępnej już wersji programu.

W takim wypadku nie powinniśmy pod żadnym pozorem kompilować samodzielnie program�w, jeśli nie upewnimy się, że nie można go zbudować.

Budowanie

Budowanie jest operacją tworzenia pakiet�w na podstawie plik�w spec, do tego nie potrzeba umiejętności tworzenia spec�w ani wiedzy dewelopera. Wystarczy odpowiednio przygotować środowisko, zainstalować kilka pakiet�w i użyć odpowiedniego narzędzia. Tak utworzymy nasz własny, prywatny builder, kt�ry może nam wielokrotnie służyć.

Opis budowania pakiet�w odnajdziemy w przewodniku dla deweloper�w PLD, wszystkie potrzebne informacje odnajdziemy pod adresem pld-linux.org/DevelopingPLD oraz w „Co jest potrzebne”.

Zarządzanie

Jeśli utworzymy środowisko wg. podanych wskaz�wek pakiety będą umieszczane w katalogu ~/rpm/RPMS. Ułatwi to ich instalację, gdyż Poldek ma ustawione lokalne źr�dło dla tego katalogu. Zbudowany pakiet będziemy mogli instalować dowolną ilość razy, warto więc przechowywać je uznamy że mogą nam się jeszcze przydać.

Jeśli wymagamy od programu nietypowej funkcjonalności i budujemy pakiet z niestandardowymi opcjami to może się zdarzyć, że przy aktualizacji zastąpimy naszą wersję programu tą z pakietu dystrybucyjnego. Dlatego musimy być czujni przy operacji aktualizacji lub dopisać nazwę tego pakietu do opcji hold w pliku konfiguracji Poldka.

Poldek

Wstęp

Poldek™ jest nakładką na program rpm™, zapewniającą wygodny interfejs obsługi oraz kilka dodatkowych funkcji. Poldek jest pośrednikiem w pobieraniu pakiet�w, indeksuje ich listy oraz ułatwia zarządzanie wieloma źr�dłami, może pobierać pakiety lokalnie (dyski twarde, napędy optyczne) lub z sieci (FTP, HTTP, HTTPS, SMB, RSYNC). Obsługuje ponadto zależności miedzy pakietami, wykrywa konflikty itp. Poldek nie obsługuje jednak wszystkich operacji możliwych na pakietach RPM, dlatego nie może całkowicie zastąpić programu rpm.

Poldek do wielu operacji (pobieranie pakiet�w i indeks�w, wyszukiwanie informacji itp.) nie wymaga praw administratora, wymagane są jednak do operacji zapisu w systemie, np. instalowanie, odinstalowanie, itp. Poldek w tym celu automatycznie używa programu sudo™, z tego względu konieczne jest posiadanie skonfigurowanego sudo, w przeciwnym razie pozostaje nam uruchamianie programu z konta roota.

Konfiguracja Poldka jest dość złożona i wyjaśnienie wszystkich szczeg�łï¿½w zajęło by zbyt wiele miejsca, dlatego zajmiemy się jedynie najczęściej używanymi opcjami. Nie powinniśmy się jednak tym przejmować, program jest gotowy do działania od razu po zainstalowaniu i w większości wypadk�w nie ma potrzeby nic modyfikować. Musimy jednak się upewnić, że mamy dobrze skonfigurowane adresy serwer�w i architekturę pakiet�w, co zostało om�wione w dalszej części rozdziału.

Więcej informacji o poldku i jego konfiguracji odnajdziemy w podręczniku systemowym (man,info) oraz na witrynie projektu pod adresem http://poldek.pld-linux.org.

Pliki konfiguracji

Konfiguracja Poldka jest przechowywana w kilku plikach wewnątrz katalogu /etc/poldek, to czy dany plik konfiguracji jest używany określa opcja %include, umieszczona w głï¿½wnym pliku konfiguracji.

  • poldek.conf - głï¿½wny plik konfiguracji, jeśli nie zostało zaznaczone inaczej to właśnie ten plik ma na myśli autor

  • aliases.conf - zawiera zdefiniowane aliasy poleceń dla trybu interaktywnego

  • fetch.conf - zawiera konfigurację alternatywnych program�w do pobierania pakiet�w, domyślnie konfiguracja z tego pliku nie jest wczytywana.

  • repos.d/pld.conf - ustawienia źr�deł pakiet�w dla PLD

  • source.conf - plik przeznaczony dla lokalnych źr�deł pakiet�w

  • .poldekrc - plik konfiguracji użytkownika, kt�ry umieszczamy w katalogu domowym.

Konfiguracja pobierania pakiet�w

W pliku repos.d/pld.conf mamy dwie ważne opcje wskazujące skąd mają być pobierane pakiety. Opcja _pld_arch wskazuje architekturę sprzętową pakiet�w, zaś _pld_prefix m�wi skąd mają być pobierane pakiety i dla jakiej wersji dystrybucji. Więcej o architekturach pakiet�w znajdziemy w „Architektury pakiet�w”, adresy serwer�w i oficjalnych mirror�w zawarto w „Serwery z pakietami”.

Poldek zacznie korzystać z proxy po ustawieniu właściwych zmiennych środowiskowych - zar�wno w przypadku wbudowanego klienta jak i klient�w zewnętrznych (np. wget). Możemy też użyć opcji proxy. Konfigurację proxy dla Linuksa szerzej opisano w „Proxy”.

Inne opcje

Poldek przechowuje indeksy pakiet�w w katalogu zdefiniowanym w opcji cachedir, domyślnie jest to $HOME/.poldek-cache. Jest to dobre rozwiązanie jeśli z Poldka korzysta jeden użytkownik, jeśli ma używać go więcej os�b to lepiej ustawić wsp�lny katalog np. /var/cache/poldek-cache, w ten spos�b unikniemy wielokrotnego pobierania indeks�w.

use sudo - użycie sudo przy uruchomieniu z konta zwykłego użytkownika.

hold - blokuje aktualizację pakiet�w kt�re znalazły się na jej liście.

ignore - opcja ukrywająca podane pakiety na liście dostępnych.

choose equivalents manually - pozwala wybierać użytkownikowi jeden z kilku pakiet�w oferujących tą samą funkcjonalność, domyślnie wyłączona przez co wyb�r następuje automatycznie. Pozwala bardzo precyzyjnie wybierać pakiety do zainstalowania.

Tryby pracy

Kolejną ważną jego cechą jest możliwość pracy zar�wno w trybie wsadowym jak i interaktywnym. Pierwszy z nich nadaje do wszelkiej maści skrypt�w i automatyki, zaś drugi jest wygodniejszy do bezpośredniej obsługi przez użytkownika. Komfort pracy w trybie interaktywnym sprawia, że użytkownicy na co dzień korzystają niemal zawsze z niego. Stąd jeśli nie zostało to inaczej napisane to właśnie ten tryb autor ma na myśli.

Tryb interaktywny

Praca w trybie interaktywnym przypomina do złudzenia używanie powłoki systemowej (shella). Dostępne są: historia poleceń, pomoc, dopełnianie komend i nazw pakiet�w, aliasy, potoki itp. Na potrzeby tego rozdziału w przykładach taki tryb będziemy sygnalizować następującym znakiem zachęty:

poldek>

Jedną z największych zalet trybu interaktywnego jest dopełnianie nazw pakiet�w i poleceń za pomocą tabulatora. Przykładowo naciśnięcie klawisza tab po poleceniu:

poldek> upgrade

spowoduje wyświetlenie listy pakiet�w, dla kt�rych są dostępne aktualizacje.

W przypadku nazw pakiet�w możemy używać "gwiazdki" jako znaku zastępczego (wildcard), kt�ry zastępuje dowolny ciąg znak�w. Przedstawiono to na poniższym przykładzie, kt�ry spowoduje zainstalowanie wszystkich pakiet�w o nazwach zaczynających się od "gnome-theme"

poldek> install gnome-theme*

Zazwyczaj nie ma potrzeby podawania wersji programu, jednak w pewnych przypadkach możemy mieć dostępnych kilka wersji tego samego pakietu (np. przy używaniu wielu źr�deł na raz). Wtedy musimy podać jednoznacznie wersję pakietu.

Mamy do dyspozycji potoki:

poldek> ls perl* | grep curses

Możemy r�wnież wywoływać polecenia zewnętrzne:

poldek> ls perl* | !wc -l

W obsłudze źr�deł i pakiet�w występuje wiele podobieństw do systemu plik�w. Źr�dła są traktowane jak katalogi zaś pakiety jak pliki, do poruszania się w tym środowisku używamy poleceń takich jak pwd, ls oraz cd.

Tryb wsadowy

Opis wszystkich parametr�w trybu wsadowego uzyskamy dzięki poleceniu

$ poldek --help

Jest tam całe bogactwo opcji, dzięki kt�rym będziemy mogli ułatwić sobie pracę. Na szczeg�lną uwagę zasługuje parametr --shcmd pozwalający wydawać polecenia w trybie wsadowym jak w trybie powłoki np.:

$ poldek --shcmd="desc apache"

Możemy w tym celu użyć r�wnież polecenia ipoldek, np.:

$ ipoldek desc apache

Pierwsze kroki z Poldkiem

Poldek uruchomiony po raz pierwszy (bez podawania parametr�w) sprawdza czy istnieją indeksy dla źr�deł, kt�re ma automatycznie obsługiwać. Jeśli ich nie ma, to zostaną automatycznie pobrane i zapisane w miejscu wskazanym przez om�wioną powyżej opcję cachedir. Po tej operacji zostanie uruchomiony Poldek trybie interaktywnym i będzie gotowy do pracy. Przed każdą kolejną pracą z programem musimy uaktualnić indeksy pakiet�w, na wypadek gdyby w źr�dłach nastąpiły zmiany, w przeciwnym razie możemy otrzymywać komunikaty o braku pakiet�w. Aby uaktualnić indeksy domyślnych źr�deł wywołujemy następująco program z powłoki systemowej:

$ poldek --up

Aby pobrać na nowo indeksy wywołujemy Poldka z parametrem --upa, dla pozostałych źr�deł musimy podać ich nazwę po parametrze -n, źr�dła pakiet�w zostały om�wione w dalszej części rozdziału.

Po uruchomieniu programu mamy od razu możliwość zarządzania pakietami, aby zobaczyć listę dostępnych poleceń wpisujemy help i naciskamy klawisz Enter. Większość poleceń ma składnię:

poldek> {$polecenie} {$pakiet} {$opcje}

Opis dodatkowych parametr�w znajdziemy w pomocy danego polecenia, po napisaniu:

poldek> {$polecenie} -?

Aby opuścić program wpisujemy polecenie quit lub wciskamy ctrl+d

Zarządzanie pakietami

Mamy dostępne następujące polecenia zarządzania pakietami: operacje instalacji (install), aktualizacji pakiet�w (upgrade), usuwania pakiet�w (uninstall), pobierania pakiet�w bez instalacji (get). Ponadto mamy polecenia do zbierania danych o pakietach: wyświetlanie listy dostępnych (ls), wyświetlenia informacji (desc) oraz przeszukiwania bazy (search). W wielu przypadkach pomocna będzie opcja -t, kt�ra przeprowadzi symulację całej operacji, dzięki kt�rej dowiemy się jak duże i jak istotne zmiany zostaną dokonane w systemie po operacji. Najczęściej jest używana przy aktualizacji i usuwaniu pakiet�w.

Poniżej zamieszczono kilka przykład�w zarządzania pakietami, na początek przykład wyświetlenia listy pakiet�w (wszystkich zaczynających się od zsh):

poldek> ls zsh*

wyświetlenie informacji o pakiecie:

poldek> desc zsh

instalacja pakietu:

poldek> install zsh

deinstalacja:

poldek> uninstall zsh

To jedynie podstawowe polecenia, więcej informacji znajdziemy w pomocy Poldka.

Ź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ę skonfigurowanych źr�deł, wraz użytymi opcjami użyjemy polecenia:

$ poldek -l
ac           ftp://ftp.ac.pld-linux.org/dists/ac/PLD/athlon/PLD/RPMS/  (type=pndir)
ac-ready     ftp://ftp.ac.pld-linux.org/dists/ac/ready/athlon/  (noauto,type=pndir)
ac-supported ftp://ftp.ac.pld-linux.org/dists/ac/supported/athlon/  (noauto,type=pndir)
ac-test      ftp://ftp.ac.pld-linux.org/dists/ac/test/athlon/  (noauto,type=pndir)
ac-updates-general ftp://ftp.ac.pld-linux.org/dists/ac/updates/general/athlon/  (noauto,type=pndir)
ac-updates-security ftp://ftp.ac.pld-linux.org/dists/ac/updates/security/athlon/  (type=pndir)
home         /home/users/qwiat/rpm/RPMS/  (noauto,noautoup,type=dir)

Nie wszystkie źr�dła są obsługiwane automatycznie, zależy to od ustawienia opcji noauto w konfiguracji danego źr�dła (zauważymy ją też na powyższym zrzucie ekranu). Aby tymczasowo użyć innego zestawu źr�deł przy uruchomieniu musimy podać ich listę poprzedzonych parametrem -n np.:

$ poldek -n ac -n ac-ready

Teraz lista dostępnych pakiet�w będzie się składała z zawartości źr�deł ac i ac-ready, jeśli chcemy, aby zawsze korzystał z niestandardowego zestawu źr�deł wygodniej będzie zmodyfikować ustawienie opcji noauto. Oficjalne źr�dła PLD zostały wyczerpująco om�wione w „Źr�dła pakiet�w”.

Istnieje możliwość instalacji pakiet�w Poldkiem z lokalnych źr�deł, zamiast posługiwania się programem rpm. W pliku source.conf zdefiniowane jest źr�dło home, kt�re służy do wygodnego instalowania pakiet�w z katalogu $HOME/rpm/RPMS, używanego powszechnie do umieszczania samodzielnie budowanych pakiet�w. Nie ma jednak potrzeby każdorazowego umieszczania tam pakiet�w jeśli to uznamy za konieczne. Możemy utworzyć tymczasowe źr�dło lokalne na podstawie zawartości katalogu za pomocą opcji -s:

poldek -s /jakis/katalog

Poldek po uruchomieniu tworzy dla wygody dodatkowe źr�dła wirtualne: all-avail i installed. Pierwsze zawiera sumę pakiet�w ze wszystkich wskazanych źr�deł, drugie to lista zainstalowanych pakiet�w.

Przy pracy z samodzielnie podawanymi źr�dłami należy wskazywać też głï¿½wne źr�dło pakiet�w (main), tak aby mogły zostać pobrane pakiety wymagane w ramach zależności. W przeciwnym razie możemy otrzymać błędy o nieistniejących pakietach.

Porady

Przy pracy z wieloma pakietami możemy utracić możliwość przewinięcia ekranu w celu odczytania najstarszych komunikat�w. Aby temu zaradzić użyjemy opcji --log, dzięki kt�rej, wskażemy plik do kt�rego trafią wszystkie komunikaty.

RPM

Instalowanie pakiet�w

Używając programu rpm posługujemy się następującym schematem: rpm [opcje] pakiet.rpm

Instalacja pakietu jest dosyć prosta. Załï¿½żmy że pobraliśmy z sieci plik docbook-dtd31-sgml-1.0-12.noarch.rpm, teraz jedyną rzeczą jaką musimy wykonać jest wydanie polecenia rpm z opcją -i. Używając kombinacji -ivh dla procesu instalacji, -Uvh uzyskamy pasek postępu instalacji dla poszczeg�lnych instalowanych pakiet�w.

# rpm -i docbook-dtd31-sgml-1.0-12.noarch.rpm

Brak ostrzeżeń lub błęd�w oznacza prawidłową instalację, teraz nieco skomplikujemy sytuację:

# rpm -i libghttp-devel-1.0.9-4.i686.rpm
error: failed dependencies:
		libghttp = 1.0.9 is needed by libghttp-devel-1.0.9-4

Tym razem instalacja się nie powiodła, ponieważ pakiet libghttp-devel wymaga zainstalowanego pakietu libghttp. Aby instalacja pakietu się powiodła wykonujemy następujące polecenie:

# rpm -i libghttp-devel-1.0.9-4.i686.rpm libghttp-1.0.9-4.i686.rpm

Teraz wszystko jest w porządku, oba pakiety są zainstalowane. Możliwe jest instalowanie pakietu z opcją ignorowania zależności: --nodeps, opcję tą stosujemy jednak w ostateczności.

Aktualizowanie pakiet�w

Aktualizacja przebiega podobnie jak instalacja, tyle że używamy przełącznika -U np.:

# rpm -U docbook-dtd31-sgml-1.0-13.noarch.rpm

Należy pamiętać o tym, że aktualizacja nastąpi tylko wtedy gdy w systemie jest zainstalowana starsza wersja, w przeciwnym wypadku zostaniemy poinformowani, że pakiet jest już zainstalowany. Aby dokonać reinstalacji pakietu wykonujemy polecenie

# rpm -i docbook-dtd31-sgml-1.0-13.noarch.rpm --force

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ę stało? Podano nieprawidłową nazwę pakietu, należy pamiętać o tym, że przy odinstalowaniu pakietu nie podaje się rozszerzenia pakietu. Poprawne polecenie przedstawiono poniżej:

# rpm -e libghttp-devel libghttp

lub:

# rpm -e libghttp-devel-1.0.9-4 libghttp-1.0.9-4

Uwaga: pierwszy przykład stosuje się w przypadku zainstalowania jednej wersji pakietu, drugi zaś używa się w przypadku kilku r�żnych (np. dwie r�żne wersje jądra).

Uwagi

Program rpm posiada o wiele bogatsze opcje, przedstawiono tu zaledwie kilka najważniejszych, więcej można znaleźć w podręczniku systemowym (man/info).

Bezpieczeństwo

Uruchamianie Poldka

Dobrym zwyczajem jest używanie Poldka z poziomu zwykłego użytkownika z włączoną obsługą sudo:

use sudo = yes

Jest to domyślne zachowanie Poldka, dzięki temu dla operacji wymagających uprawnień superużytkownika używany jest program sudo. Oczywiście w systemie musi być zainstalowany pakiet sudo, a dany użytkownik musi być uprawniony do jego używania.

Podpisy pakiet�w

W PLD mamy możliwość kontrolowania podpis�w pakiet�w, dzięki czemu zyskujemy pewność, że instalujemy pakiety z zaufanego źr�dła. Importując klucz klucz publiczny GPG unikamy r�wnież zasypywania następującymi komunikatami:

Nagłï¿½wek V3 sygnatura DSA: NOKEY, key ID 1bbd5459

Zaczynamy od zaimportowania klucza publicznego (dla Ac) z serwera FTP:

rpm --import ftp://ftp.pld-linux.org/dists/2.0/PLD-2.0-Ac-GPG-key.asc

Od tej pory nie zobaczymy żadnych komunikat�w z ostrzeżeniami, warto dodatkowo zabezpieczyć się przed przypadkowym zainstalowaniem niepodpisanych pakiet�w. Wystarczy, że do każdego z podpisanych źr�deł zdefiniowanych w pliku /etc/poldek/pld-source.conf dodajemy wiersz:

signed = yes

przykładowe źr�dło będzie wyglądało następująco:

[source]
type  = %{_ac_idxtype}
name  = ac
path  = %{_pld_prefix}/PLD/%{_pld_arch}/PLD/RPMS/
signed = yes

Teraz Poldek będzie ostrzegał przy instalacji niepodpisanego pakietu:

uwaga: rhythmbox-0.9.8-2.athlon.rpm: gpg/pgp nie znaleziono podpisu
błąd: rhythmbox-0.9.8-2: signature verification failed
Wystąpiły błędy weryfikacji podpisu. Kontynuować? [y/N]

Więcej informacji w dokumentacji programu rpm i Poldka.

Zaawansowane operacje

Lista ostatnio instalowanych pakiet�w

Jeśli chcemy utworzyć listę zainstalowanych pakiet�w w kolejności wg. daty instalacji to posłużymy się poleceniem

# rpm -qa --last

Odinstalowanie "opornych" pakiet�w

Bywa, że pakiet w wyniku błęd�w w skryptach nie pozwala się odinstalować, możemy go jednak łatwo usunąć wydając polecenie deinstalacji z parametrem --noscripts np.:

# rpm -e lockdev-1.0.2-1 --noscripts

Repackage - bezpieczna aktualizacja

Jeśli obawiamy się aktualizacji jakichś pakiet�w, możemy posłużyć się operacją repackage - ponownego umieszczenia plik�w w pakiecie rpm. Jeśli program po aktualizacji odmawia posłuszeństwa, wystarczy ponownie zainstalować pakiet w starszej wersji. Aby włączyć repakietację wystarczy, że ustawimy niezerową wartość dla makra %_repackage_all_erasures w pliku /etc/rpm/macros:

%_repackage_all_erasures    1

Od tej pory każda aktualizacja rozpocznie się od ponownego złożenia pakietu. Dla pojedynczych pakiet�w nie ma sensu modyfikować pliku z makrami, lepiej przekazać parametr do rpm-a:

poldek> upgrade geninitrd-10000.18-6.noarch --pmop=--repackage

W przypadku bezpośredniego użycia rpm-a:

# rpm -U --repackage geninitrd-10000.18-6.noarch

Tak zbudowane pakiety trafiają do katalogu /var/spool/repackage Repakietacja jest czasochłonna, ponadto dodatkowo zajmowane jest miejsce na dysku, dlatego najlepiej używać tej funkcji tylko dla wybranych program�w.

Aby cofnąć wersję pakietu wykonujemy następującą operację:

rpm -U --oldpackage /var/spool/repackage/1189984560/geninitrd-10000.18-6.noarch

Kontrola integralności systemu

Zdarza się, że potrzebujemy sprawdzić czy nie nastąpiły w systemie uszkodzenia jakichś plik�w lub ich modyfikacje. Takie zdarzenia mogą się pojawić w wypadku uszkodzenia systemu plik�w, błędu człowieka lub ataku crackera. W obu przypadkach możemy posłużyć się weryfikacją pakiet�w RPM. Kontrola przyniesie oczekiwany skutek tylko wtedy, gdy jesteśmy pewni, że sama baza RPM nie została skompromitowana lub uszkodzona.

Aby uzyskać listę zmodyfikowanych plik�w użyjemy programu rpm:

# rpm --verify --all
......G.   /etc/cups
S.5....T   /usr/lib/libsasl2.so.2.0.22
S....... c /etc/xml/catalog
.M...UG. c /etc/samba/smb.conf

szczeg�łowy opis oznaczeń znajdziemy w manualu programu rpm. Musimy pamiętać, że wiele plik�w konfiguracyjnych (oznaczanych literką "c") jest modyfikowanych po instalacji programu, dlatego ich obecność na liście jest naturalna.

Załï¿½żmy, że poznaliśmy listę zmodyfikowanych plik�w i chcemy na jej podstawie stworzyć listę pakiet�w do reinstalacji. Zaczynamy od odfiltrowania wszystkiego pr�cz nazw plik�w:

# rpm --verify --all | sed 's/.*\ //' > pliki.txt

Taką listę możemy teraz sobie obejrzeć i ewentualnie zmodyfikować, kiedy lista już nam odpowiada sprawdzamy z jakich pakiet�w pochodzą pliki:

# cat pliki.txt | xargs rpm -qf --qf '%{NAME}\n' | sort -u  > pakiety.txt

Powyższy ciąg poleceń stworzy listę składającą się wyłącznie z nazw pakiet�w, by uniknąć problem�w w przypadku r�żnic w wersjach pakiet�w: tych zainstalowanych z dostępnymi do instalacji. Mając listę unikalnych nazw pakiet�w, możemy wywołać polecenie ich reinstalacji:

# poldek --reinstall --pset pakiety.txt

Naprawa bazy RPM

System pakiet�w RPM opiera się na bazie w postaci plik�w przechowywanych w katalogu /var/lib/rpm. Nagłe przerwanie pracy programu, kt�ry na niej operował może zaowocować błędami w jej strukturze. Na początek należy się upewnić, że żaden z proces�w nie operuje na bazie:

# lsof | grep /var/lib/rpm

jeśli nie wyświetlą nam się żadne informacje to możemy usunąć pliki blokad, łatwo je rozpoznamy, gdyż zaczynają się od __db

# rm -f /var/lib/rpm/__db*

Teraz możemy spr�bować czy sytuacja się poprawiła, jeśli nie to musimy spr�bować przebudować bazę. Zaczynamy od wykonania kopii bezpieczeństwa:

# tar -czf rpm.tar.gz /var/lib/rpm/

następnie wydajemy polecenia przebudowania:

# rpm --rebuilddb

W większości wypadk�w ta operacja pomoże nam odzyskać bazę, może się jednak zdarzyć, że odtworzy nam się tylko jej część. Do oszacowania strat konieczne będzie utworzenie listy pakiet�w w bazie:

# rpm -qa

Kiedy ustalimy listę brakujących pozycji, najłatwiejszym sposobem dodania brakujących wpis�w będzie instalacja pakiet�w z opcją --justdb, powodującą jedynie modyfikowanie bazy RPM.

Reinstalacja wszystkich pakiet�w - zmiana architektury

Zdarza się, że potrzebujemy zainstalować na nowo wszystkie pakiety, np. w wypadku zainstalowania pakiet�w w niewłaściwej architekturze. Nie jest to pracochłonna operacja, wystarczy, że z powłoki Poldka wydamy polecenie:

poldek> install -F * --reinstall --nodeps --nofollow

Rozdział 9. Bootloader

Ten rozdział zawiera dostępnych w PLD bootloader�w

Wstęp

Podczas startu naszego komputera z naszego dysku uruchamiany jest bootloader. To właśnie on odpowiada za załadowanie prawidłowego jądra systemu, czy też przekazywanie do jądra specjalnych parametr�w. Dla architektur x86 mamy do wyboru jeden z dw�ch bootloader�w: LILO™ oraz Grub™ (brak wersji 64 bit).

Parametry jadra

Oba bootloadery pozwalają na przekazywanie do jądra specjalnych parametr�w, dzięki kt�rym możemy wpływać na start lub pracę systemu jeszcze przed jego załadowaniem. Parametry przekazane przed startem systemu będą przesłaniać te użyte w konfiguracji bootloadera. W poniższej tabeli przedstawiono najczęściej używane opcje.

Przekazywanie parametr�w jądra wygląda podobnie w obu wypadkach, po włączeniu specjalnego trybu w bootloaderze otrzymujemy wiersz, na końcu kt�rego dopisujemy potrzebne nam parametry lub modyfikować istniejące. Poniżej przedstawiamy przykładowe dodanie parametru init w bootloaderze Grub:

grub append> root=/dev/sda2 init=/bin/sh

Tryb modyfikacji parametr�w startowych w Grubie aktywujemy przez wciśnięcie klawisza e, w przypadku LILO wpisujemy etykietę obrazu, jeśli to jest graficzne LILO to użyjemy klawisza tab.

Tabela 9.1. Parametry jądra

ParametrZnaczeniePrzykład
{$nr}/single

Cyfra (1-5) wskazująca kt�ry poziom uruchomieniowy (run level), opcja single to tryb jednego użytkownika. Dzięki nim opcjom można przesłonić ustawienie opcji initdefault z pliku /etc/inittab.

Więcej o poziomach pracy w „Zmiana poziomu pracy systemu”, zaś o pliku /etc/inittab przeczytamy w „Kluczowe pliki”.

single lub 1
root={$urządzenie}

Wskazanie urządzenia (partycji) na kt�rym znajduje się głï¿½wny system plik�w. Wartością parametru może być ścieżka do urządzenia w katalogu /dev (np. /dev/hda1) lub wartość liczbowa powstała z połączenia szesnastkowej wartości liczb major i minor urządzenia. Major podajemy w postaci jednej cyfry, natomiast minor powinien być już rozwinięty do dw�ch. Przykładowo urządzenie o wartościach major 3 i minor 1 będzie przedstawiane jako 301, 0301 lub 0x301 (wartości 3 i 1 są takie same w systemie dziesiętnym i szesnastkowym).

Urządzenia oraz liczby major i minor szerzej opisano w „Urządzenia”

root=/dev/hda1 lub root=0x301
init={$program} Wskazanie programu, kt�ry ma zostać użyty zamiast domyślnego programu Init™; opcja używana w krytycznych sytuacjach, np. gdy system nie może zostać uruchomiony nawet w trybie single. init=/bin/bash
vga={$tryb} Wskazanie trybu bufora ramki, więcej o buforze ramki w następnym rozdziale. vga=0x303

Opis wybranych parametr�w jądra zamieszczono na stronie http://www.jtz.org.pl/Html/BootPrompt-HOWTO.pl.html, zaś pełną ich listę odnajdziemy w dokumentacji jądra, w pliku /usr/src/linux/Documentation/filesystems/devfs/boot-options

Są r�wnież specjalne parametry, kt�re przekazuje się do jądra w trakcie pracy systemu, opisaliśmy je w „Parametry jądra”.

MBR czy bootsector?

Oba bootloadery mają możliwość instalacji zar�wno w obszarze MBR dysku, jak i bootsectorze partycji. Instalacja w MBR jest dosyć wygodna i o wiele bardziej popularna, dlatego właśnie tam powinniśmy instalować bootloader. Instalacja w bootsectorze w wypadku niekt�rych system�w plik�w (np. XFS) jest niemożliwa, gdyż ich superblok jest umieszczany na samym początku partycji - w miejscu kt�re powinno być zarezerwowane dla bootloadera.

Frame buffer (bufor ramki)

Frame Buffer (bufor ramki) to m.in. mechanizm pozwalający na pracę konsoli w wyższych rozdzielczościach. Aby go włączyć przekazujemy parametr vga przy uruchomieniu bootloadera lub dodajemy go do pliku konfiguracji np.:

vga=0x303

Spos�b dodania tej opcji do pliku konfiguracji bootloadera opisano w dotyczących ich rozdziałach.

Wartość opcji vga to numer trybu graficznego dla danej rozdzielczości i głębi koloru, listę dostępnych tryb�w przedstawiono w poniższej tabeli. Kodowe oznaczenia tryb�w bufora ramki możemy podawać zar�wno szesnastkowo jak i dziesiętnie, dlatego też w tabeli, obok wartości szesnastkowych umieszczono wartości w systemie dziesiętnym (w nawiasach).

Tabela 9.2. Tryby bufora ramki

Głębia koloru640x480800x6001024x7681280x1024
256 (8 bit)0x301 (769)0x303 (771)0x305 (773)0x307 (775)
32k (15 bit)0x310 (784)0x313 (787)0x316 (790)0x319 (793)
65k (16 bit)0x311 (785)0x314 (788)0x317 (791)0x31A (794)
16M (24 bit)0x312 (786)0x315 (789)0x318 (792)0x31B (795)

Zamiast wskazywać konkretny tryb możemy opcji vga przypisać wartość ask, dzięki temu jądro pozwoli wyświetlić listę tryb�w i wybrać jeden z nich. Więcej o buforze ramki dowiemy się z dokumentacji kernela, jeśli zainstalowaliśmy pakiet z dokumentacją jądra to znajdziemy ją w katalogu /usr/src/linux/Documentation/fb.

LILO

LILO™ (LInux LOader) jest najbardziej popularnym linuksowym bootloaderem. Jego instalacja polega na utworzeniu pliku konfiguracyjnego (/etc/lilo.conf) a następnie na wydaniu polecenia lilo w celu instalacji w MBR lub bootsektorze. Każda modyfikacja pliku konfiguracji, wygenerowanie nowego obrazu initrd lub instalacja nowego jądra pociąga za sobą konieczność ponownej instalacji obrazu.

O initrd poczytamy w „Initrd”.

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żliwiając w ten spos�b uruchomienie naszej dystrybucji.

boot=/dev/hda
read-only
lba32

image=/boot/vmlinuz
	label=pld
	root=/dev/hda1
	initrd=/boot/initrd

Plik konfiguracji lilo dzieli się na dwie zasadnicze części: blok opcji głï¿½wnych oraz opcje obrazu. W powyższym przykładzie opcje głï¿½wne umieszczone są na samym początku (do pustego wiersza). Wartość zmiennej boot m�wi gdzie ma zostać zainstalowany bootloader (bootsector/MBR), w tym wypadku jest o MBR dysku. Opcja read-only wymusza start systemu w trybie tylko do odczytu (p�źniej jest przemontowany na tryb do odczytu i zapisu), lba32 włącza wykorzystanie 32-bitowego adresowania (jest rozwiązaniem limitu cylindra 1024).

Następna sekcja (ustawienia obrazu) to konfiguracja dla konkretnego systemu operacyjnego (tutaj Linuksa). Każdy system, kt�ry mielibyśmy obsługiwać z poziomu lilo, musi mieć taką sekcję. Opcja image rozpoczyna sekcję i jednocześnie wskazuje ściekę do jądra, label to wyświetlana etykieta obrazu, root wskazuje urządzenie z głï¿½wnym systemem plik�w, initrd to ścieżka do obrazu initrd (initial ramdisk).

Opcję root szerzej opisano w „Wstęp”. Z nazewnictwem urządzeń masowych zapoznamy się w „Nazewnictwo urządzeń masowych”.

Dzięki powyższej konfiguracji bootloader bezzwłocznie uruchomi nasze PLD zainstalowane na pierwszej partycji dysku hda bez zadawania jakichkolwiek pytań. W wielu przypadkach będziemy chcieli przekazać do kernela specjalne parametry lub mieć możliwość wyboru innego systemu operacyjnego (o ile dodaliśmy do lilo taką możliwość). Wtedy konieczne będzie zdefiniowanie dw�ch dodatkowych opcji:

prompt
timeout=100

Pierwsza włącza tryb interaktywny, druga zaś ustawia czas oczekiwania na naszą reakcję, podawany w dziesiątych częściach sekundy. W tej chwili możemy wygenerować lilo i zrestartować maszynę aby sprawdzić czy dokonaliśmy prawidłowej konfiguracji.

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 pozwalająca uruchomić system DOS/Windows umieszczony na dysku hda3.

other=/dev/hda3
	label=windows

Domyślnym obrazem wybranym przez bootloader jest pierwszy w kolejności z pliku konfiguracji. Możemy to ustawienie bardzo prosto modyfikować za pomocą opcji default wskazującej etykietę domyślnego obrazu, np.:

default=pld

Opcję default umieszczamy w głï¿½wnej części konfiguracji.

Frame Buffer

Frame Buffer (bufor ramki) to m.in. mechanizm pozwalający na pracę konsoli w wyższych rozdzielczościach. Aby go włączyć, do konfiguracji linuksowego obrazu lub do sekcji głï¿½wnej dodajemy parametr jądra vga np.:

vga=0x303

Przykładowa konfiguracja obrazu będzie wyglądała następująco:

image=/boot/vmlinuz
	label=pld
	root=/dev/hda1
	initrd=/boot/initrd
	vga=0x303

Listę dostępnych tryb�w zamieszczono w „Wstęp”.

Graficzne menu

Jeśli zdecydowaliśmy się na wyświetlanie menu początkowego (za pomocą opcji prompt) to możemy się pokusić o ustawienie graficznego menu. Z pakietem lilo dostajemy odpowiednio przygotowane bitmapy, musimy tylko dodać kilka opcji do głï¿½wnej sekcji pliku konfiguracji.

Wskazujemy interesujący nas obrazek:

bitmap = /boot/lilo-pldblue8.bmp

Określamy kolory i położenie tekstu na ekranie:

bmp-table = 17,9;1,14,16,4
bmp-colors = 0,213,137;152,24,1
bmp-timer = 2,29;152,52,1

Musimy pamiętać że powyższe dane są dobrane dla konkretnego obrazka i dla innego mogą nie być dobre.

Zakończenie

Kiedy już skonfigurujemy nasz bootloader wydajemy polecenie lilo:

# lilo
Added pld *

następnie restartujemy system.

GRUB

GRUB™ (GRand Unified Bootloader) jest bootloaderem zdobywającym sporą popularność, ze względu na swoją elastyczność i duże możliwości. Jest tak rozbudowany, że musi trzymać część swoich danych na dysku twardym, z tego też względu obsługuje kilka system�w plik�w i może wykonywać proste operacje dyskowe. GRUB normalnie "widzi" pliki na dysku, a więc widzi własny plik konfiguracji, kernel i obraz initrd. Dzięki temu nie ma potrzeby robienia czegokolwiek po zmianie konfiguracji, wygenerowaniu initrd czy aktualizacji kernela. Jest za to czuły niekiedy na aktualizacje "samego siebie" i wymaga niekiedy ponownej instalacji do MBR-u/bootsectora, nie ma tu jednak żadnej jasnej reguły. GRUB na każdym etapie konfiguracji (w trybie interaktywnym) wspiera nas wbudowaną pomocą oraz dopełnianiem nazw plik�w, urządzeń i partycji.

Do największych zalet GRUB-a można zaliczyć możliwość zmiany konfiguracji startowej z poziomu działającego bootloadera. Kiedy uruchomiony zostanie bootloader wybieramy obraz a następnie wciskamy klawisz e. Wyświetlą nam się wiersze konfiguracji, możemy je modyfikować za pomocą wbudowanego prostego edytora tekst�w. Po skończonej edycji wciskamy klawisz b, aby uruchomić system z wprowadzonymi zmianami.

Kolejną ważną jego cechą jest możliwość używania klawiatury USB, w przeciwieństwie do LILO™, jedyną rzeczą jaką musimy zrobić w tym wypadku to włączyć obsługę klawiatury USB w BIOS-ie.

O initrd poczytamy w „Initrd”.

Nazewnictwo urządzeń

Nie używamy nazw dysk�w opierających się na urządzeniach widniejących w /dev (np. /dev/hda). GRUB przy pomocy BIOS-u sprawdza istniejące dyski i numeruje je począwszy od zera. Dla przykładu, jeżeli posiadamy dwa dyski twarde (np. hda i hdc), pierwszy z nich zostanie oznaczony jako hd0, drugi jako hd1. Sytuacja z partycjami wygląda podobnie, r�wnież numerowane są od zera, natomiast pierwsza partycja logiczna będzie oznaczona numerem 4.

Obszar MBR oznaczany jako /dev/hda będzie widziany jako (hd0), partycja /dev/hda1 będzie rozpoznawana jako (hd0,0). Podane nawiasy nie są przypadkowe, jest to cecha składni poleceń GRUB-a.

Urządzenia masowe opisano szerzej w „Nazewnictwo urządzeń masowych”.

Konfiguracja 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żą na tej samej partycji pierwszego dysku twardego. W przykładowej konfiguracji będzie to /dev/hda1. Poniżej przedstawiono przykładową konfigurację:

timeout 15

title  pld
root (hd0,0)
kernel /boot/vmlinuz root=/dev/hda1
initrd /boot/initrd

Konfiguracja GRUB-a podzielona jest na sekcję głï¿½wną i sekcje obraz�w, sekcja głï¿½wna są to ustawienia globalne, zaś konfiguracja obraz�w to opcje dla każdego z obsługiwanych system�w operacyjnych. Powyżej mamy sekcję głï¿½wną oraz sekcję obrazu oddzieloną pustym wierszem.

Opcja timeout w sekcji głï¿½wnej to czas w sekundach oczekiwania na reakcję użytkownika.

Opcja title w sekcji obrazu to jego etykieta, root(hd0,0) to partycja na kt�rej GRUB będzie szukał swoich plik�w (w PLD GRUB trzyma swoje pliki w /boot/grub). Parametry kernel i initrd to ścieżki do plik�w kernela i initrd, w powyższym przykładzie będą szukane na urządzeniu (hd0,0) gdyż podane do nich ścieżki są względne. Parametr root= jest parametrem jądra wskazującym położenie głï¿½wnego systemu plik�w, opisanym szerzej w „Wstęp”. Może mieć zar�wno postać liczbową jak i postać nazwy urządzenia z katalogu /dev np. /dev/hda1.

Kiedy plik konfiguracji jest gotowy możemy przejść do instalacji GRUB-a.

Instalacja

Przejdźmy teraz do instalacji GRUB-a w MBR, rozpoczynamy od uruchomienia programu grub, mamy teraz do dyspozycji interaktywną powłokę, oferującą liczne polecenia, dopełnianie oraz pomoc. Rozpoczynamy od polecenia root z parametrem wskazującym miejsce gdzie znajdują się pliki GRUB-a, konieczne do jego instalacji.

grub> root (hd0,0)
Filesystem type is xfs, partition type 0x83

Teraz uruchamiamy instalację bootloadera w MBR dysku, wydajemy polecenie setup z odpowiednim parametrem:

grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/xfs_stage1_5" exists... yes
Running "embed /boot/grub/xfs_stage1_5 (hd0)"...  18 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd0) (hd0)1+18 p (hd0,0)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.

Komunikaty wskazują poprawność operacji, więc pozostaje nam tylko wyjście z powłoki programu.

grub> quit

W ten oto spos�b staliśmy się posiadaczami GRUB-a w naszym systemie, możemy teraz zrestartować maszynę.

Inne systemy operacyjne

Zakładam, że chcemy dodać system Microsoftu zainstalowany na partycji /dev/hda2, oto sekcja jaką musimy dopisać do /boot/grub/menu.lst:

title Windows
rootnoverify (hd0,1)
chainloader +1

Domyślnym obrazem wybranym przez bootloader jest ten pierwszy w kolejności w pliku konfiguracji. Możemy to ustawienie bardzo prosto modyfikować za pomocą opcji default wskazującej numer obrazu. Obrazy są numerowane wg. kolejności począwszy od 0 np.:

default 2

Omawianą opcję wstawiamy do sekcji głï¿½wnej pliku konfiguracji.

Frame Buffer

Frame Buffer (bufor ramki) to mechanizm pozwalający m.in. na pracę konsoli w wyższych rozdzielczościach. Aby go włączyć, do parametr�w jądra w konfiguracji linuksowego obrazu dodajemy parametr vga np. vga=0x303. Przykładowa konfiguracja obrazu będzie wyglądała następująco:

title  pld
root (hd0,0)
kernel /boot/vmlinuz root=0301 vga=0x303
initrd /boot/initrd

Listę dostępnych tryb�w zamieszczono w „Wstęp”.

Graficzne menu

W pakiecie z GRUB-em dostępne są grafiki, co sugeruje możliwość wyświetlenia ich w menu, jednak GRUB w PLD domyślnie ich nie obsługuje. Aby włączyć taką możliwość musimy samemu zbudować pakiet z opcją --with splashimage.

Instalujemy zbudowany pakiet, a następnie do pliku konfiguracji, do sekcji głï¿½wnej dodajemy opcję wskazującą bitmapę, kt�ra ma być wyświetlana np.:

splashimage=(hd0,0)/boot/grub/splash.xpm.gz

Aby napisy pozostały czytelne możemy ustalić ich kolor za pomocą opcji foreground i background np.:

foreground  = ffffff
background  = 000000

Pierwsza z opcji wskazuje głï¿½wny kolor liter, druga zaś określa kolor ich cienia, oba parametry przyjmują szesnastkowe wartości. Teraz restartujemy komputer, aby sprawdzić czy wszystko działa poprawnie.

Grafiki możemy tworzyć samemu, GRUB wymaga indeksowanej bitmapy o 14 kolorach i rozdzielczości 640x480, typu .xpm, plik musi być dodatkowo skompresowany programem Gzip.

Bezpieczeństwo bootloadera

Jak już zostało wspomniane, GRUB trzyma część swoich danych w systemie plik�w, co przy poważnym uszkodzeniu systemu plik�w może uniemożliwić start systemu. Rozwiązaniem tego problemu, może być umieszczenie gałęzi /boot na osobnej partycji, tak jak to było dawniej robione dla ominięcia ograniczeń starych wersji LILO™. Więcej o podziale na partycje odnajdziemy w „Podział na partycje”.

Dla większego bezpieczeństwa partycję taką można montować w trybie tylko do odczytu, musimy jednak wtedy pamiętać o konieczności przemontowania jej do trybu rw, przed każdą aktualizacją jądra, lub bootloadera.

Uwagi

  • W przypadku nietypowych konfiguracji będziemy zmuszeni do podawania ścieżek bezwzględnych do plik�w. Podajemy je następująco: (hdX,Y)/katalog/plik np.: (hd0,0)/boot/vmlinuz

  • GRUB wymaga kompletnej listy urządzeń w katalogu /dev, stąd mogą pojawić się problemy przy pr�bie instalacji go z chroota opartego o udev. Należy w tym wypadku podmontować z głï¿½wnego system katalog /dev z opcją -bind. Pliki urządzeń zostały dokładniej opisane w „Urządzenia”.

rc-boot

Wstęp

Osoby nie przepadające za konfiguracją powyższych bootloader�w, mogą skorzystać z narzędzia o nazwie rc-boot™. Jest to proste i wygodne w użyciu narzędzie, stworzone dla potrzeb PLD, kt�re zapewnia uniwersalny interfejs do zarządzania bootloaderem. Został stworzony w celu automatycznego aktualizowania bootloadera po zaktualizowaniu jądra, jednak nie zdobył szerszej popularności wśr�d użytkownik�w. Dzięki rc-boot możemy używać dowolnego bootloadera (np. LiLo™, Grub™), nie znając zasad ich działania czy składni plik�w konfiguracji.

W gruncie rzeczy korzystanie z rc-boot ma sens wyłącznie przy używaniu LiLo. Bootloader GRUB nie wymaga przeładowania po aktualizacji jądra, dlatego użytkownicy używają właśnie jego zamiast rc-boot.

Aby utworzyć bootloader omawianym narzędziem należy się posłużyć poleceniem rc-boot, to jaki bootloader zostanie użyty i jakie opcje będą ustawione, definiujemy w jednym uniwersalnym pliku konfiguracji: /etc/sysconfig/rc-boot/config. Dodatkowo wymagane są specjalne pliki "obraz�w" odpowiadające każdemu systemowi operacyjnemu, kt�ry chcemy obsługiwać z poziomu bootloadera. Są to proste pliki konfiguracyjne umieszczane w katalogu /etc/sysconfig/rc-boot/images. Po zainstalowaniu systemu powinien tam być przynajmniej jeden taki plik.

Podstawowa konfiguracja

Po zainstalowaniu pakietu rc-boot™ wymagane są poprawki w konfiguracji pliku /etc/sysconfig/rc-boot/config. Na początek odblokujemy działanie rc-boot™:

DOIT=yes

Kolejno wybieramy bootloader jaki chcemy używać, mamy do wyboru lilo™ oraz grub™:

LOADER=grub

Następnie ustalamy gdzie ma być zainstalowany bootloader np.: /dev/hda, /dev/hdb2 lub mbr. Wartość mbr oznacza że rc-boot™ stara się automatycznie wykryć gdzie jest tw�j MBR (Master Boot Record).

BOOT=mbr

Jeśli posiadamy więcej niż jeden obraz, możemy wskazać domyślny, poprzez podanie nazwy pliku obrazu z katalogu /etc/sysconfig/rc-boot/images. Definiowanie tej opcji nie jest konieczne, gdyż rc-boot™ pr�buje samemu wykryć domyślny system operacyjny, jednak w naszym przykładzie ustawimy to "na sztywno":

DEFAULT=pld

Tworzenie "obraz�w"

Teraz możemy przejść do utworzenia plik�w obraz�w. Mają one bardzo prostą budowę - są to pliki tekstowe składające się z kilku wierszy. Poniższa treść pliku jest wystarczającą konfiguracją do uruchomienia Linuksa, plikowi temu nadamy nazwę "pld".

TYPE=Linux
ROOT=/dev/hda3
KERNEL=/boot/vmlinuz
INITRD=/boot/initrd

Opcja TYPE określa rodzaj systemu operacyjnego dla danego obrazu, mamy do wyboru następujące pozycje: Linux, DOS (DOS/Windows), BSD. Opcja ROOT wskazuje partycję na kt�rej znajduje się system, wartość podana powyżej jest tylko przykładem. Wartości KERNEL i INITRD są wskazaniami do pliku kernela i pliku initrd - muszą odnosić się do właściwych pozycji w katalogu /boot

Dla każdego kolejnego obsługiwanego systemu operacyjnego należy dodać kolejny plik obrazu. Jeśli chcemy używać systemu firmy Microsoft, należy utworzyć pusty plik o nazwie np. "windows" i umieścić w nim przykładową konfigurację:

TYPE=dos
ROOT=/dev/hda1

Na koniec generujemy bootloader używając polecenia rc-boot.

# rc-boot
pld taken as defult image
image: pld * is linux on /dev/hda3
image: windows is dos on /dev/hda1

Uwagi

Program rc-boot™ nadpisze plik konfiguracji wybranego bootloadera, zanim więc użyjemy tego narzędzia powinniśmy na wszelki wypadek zrobić kopię bezpieczeństwa właściwego pliku.

Więcej szczeg�łï¿½w można uzyskać z podręcznika systemowego.

Rozdział 10. Kernel i urządzenia

Jądro systemu

Abstrakt

Jak zapewne większości z was wiadomo jądro (kernel) jest najważniejszym elementem każdego systemu. W uproszczeniu można powiedzieć, że zajmuje się ono nadzorowaniem komunikacji wszystkich element�w systemu.

Koncepcja jądra w PLD

Jedną z silniejszych stron PLD™ są dobrze przygotowane jądra systemu, pozwala to szybko uruchomić system produkcyjny bez zbędnych przygotowań. Poniżej zamieszczono listę najistotniejszych cech jąder PLD:

  • funkcjonalność - nakładanych jest wiele łat rozszerzających możliwości domyślnego kernela.

  • modularność - jądro jest tak małe, jak to tylko możliwe; jeśli czegoś potrzebujemy to wystarczy załadować odpowiedni moduł. Konsekwencją takiego rozwiązania jest konieczność używania obrazu initrd, co zostało drobiazgowo om�wione w „Initrd”.

  • elastyczność - mamy wyb�r kilku jąder, przygotowanych w postaci binarnych pakiet�w dla kilku najczęstszych zastosowań; dzięki temu unikamy czasochłonnej kompilacji. Dostępne jądra zostały opisane w dalszej części rozdziału.

  • bezpieczeństwo - domyślny kernel ma nakładaną łatę grsecurity™ (www.grsecurity.net), ponadto możemy mieć jądro z obsługą Linux VServers™ (linux-vserver.org).

Podsumowując można stwierdzić, że dla większości zastosowań jądra dystrybucyjne spełnią wszystkie stawiane przed nimi wymagania, bez konieczności rekompilacji.

Informacje o używanym jądrze

Używaną wersję jądra sprawdzimy za pomocą programu uname:

# uname -r
2.6.14.7-5

Jeśli interesuje nas konfiguracja danego jądra, to możemy ją odczytać z pliku /proc/config.gz (w Th plik jest dostępny po uprzednim załadowaniu modułu configs) np.:

# zcat /proc/config.gz

lub z pliku config-dist dostarczanego z właściwym pakietem kernel-headers np.:

# cat /usr/src/linux-2.6.27.13/config-dist

Rodzaje jąder systemowych

Z PLD dostarczanych jest kilka kerneli, przygotowanych do r�żnych zastosowań, jedyną rzeczą jaka nam pozostaje to wyb�r właściwego jądra dla naszej maszyny. W poniższej tabeli zamieszczono przykładowe zestawienie dostępnych kerneli. Nie wszystkie z wymienionych poniżej pakiet�w bezpośrednio dostępne na liście pakiet�w, jeśli tak nie jest to trzeba je zbudować samodzielnie ze speca.

Tabela 10.1. Kernele

NazwaCechy
kernel uniwersalny kernel z wieloma dodatkowymi funkcjami przydatnymi na serwerach, będzie dobry dla większości zastosowań (w PLD Th i w Ac z ac-updates obsługuje Linux VServers™).
kernel-grsecurity kernel z obsługą grsecurity™ (przyrostek "grsecurity" wprowadzono w PLD Ac) - przeznaczony raczej dla serwer�w
kernel-desktopprzeznaczony dla stacji roboczych: obsługa m.in.: squashfs, bootsplash; pakiet jest budowany z kernel-desktop.spec
kernel-laptopodmiana kernel-desktop, przeznaczona przede wszystkim dla komputer�w przenośnych
kernel-vanillaKernel bez jakichkolwiek modyfikacji (tzw. waniliowy), zwykle dostarcza najaktualniejszą wersję jądra. Brakuje mu wielu funkcji z głï¿½wnego w PLD jądra, niekiedy jednak bywa od niego szybszy.
kernel-mosixjądro z obsługą klastr�w openMOSIX
kernel24 rodzina kerneli z serii 2.4.x - obecnie przestarzała, ciągle jednak dostępna w Ac.

Powyższe zestawienie należy traktować orientacyjnie, gdyż kernel ciągle się zmienia. Aby poznać szczeg�ły, najlepiej jest sprawdzić plik spec dla konkretnego kernela. Ułatwieniem w poszukiwaniu właściwej rewizji, mogą być tagi zaczynające się od auto-, np.: auto-th-kernel-2_6_27_12-1. Tagi te są nadawane dla każdej wersji pakietu trafiającego na serwery FTP/HTTP.

W wersjach Ra™ i Ac™ istniał podział na kernel jednoprocesorowy (tzw. up) oraz wieloprocesorowy - SMP (symmetric multiprocessing). Dla odr�żnienia te z obsługą wielu procesor�w miały w nazwie pakietu przyrostek -smp. W Th™ i pakietach z ac-updates zaniechano takiego podziału i wszystkie jądra obsługują wiele procesor�w i jednocześnie zrezygnowano z przyrostka -smp.

Należy zwr�cić uwagę, na inne przyrostki po słowie kernel w nazwach pakiet�w, nie m�wią one o rodzaju kernela ale o pakiecie z dodatkowymi modułami: kernel-net, kernel-sound, kernel-video, dokumentacją: kernel-doc i inną zawartością.

Aktualizacja

Kernel jest kluczową częścią systemu, dlatego zaleca się inaczej podejść do jego aktualizacji niż do innych pakiet�w, dobrym zwyczajem jest instalacja nowej wersji, zamiast aktualizacji np.:

poldek> install -I kernel-2.6.14.7-5

Po tej operacji zostanie na nowo wygenerowany obraz initrd, użytkownicy LiLo muszą dodatkowo wydać polecenie lilo. W ten spos�b mamy zainstalowane dwa jądra, przy czym po ponownym uruchomieniu użyta zostanie nowa wersja.

Gdyby nowy kernel okazał się niestabilny, to zawsze możemy powr�cić do starej wersji. Aby ułatwić taką operację symlinki wskazujące na dotychczasowy kernel (/boot/vmlinuz) i initrd (/boot/initrd) automatycznie będą teraz dostępne pod nazwami /boot/vmlinuz.old i /boot/initrd.old. Dzięki temu, możemy w konfiguracji bootloadera mieć "obraz" konfiguracji dla starego kernela i użyć go w razie potrzeby.

Zależności

Istnieje kilka pakiet�w, bardziej lub mniej zależnych od konkretnej wersji kernela. Ścisłe zależności będą dotyczyły pakiet�w z modułami np. kernel-vanilla-sound-alsa oraz pakiet�w ściśle wsp�łpracujących z kernelem np. moduł kernel-video-nvidia ze sterownikiem X.Org: xorg-driver-video-nvidia. Nieco mniej oczywisty jest związek kernela z pakietami iproute2 czy iptables, w ich przypadku mamy nieco swobody.

W wielu sytuacjach nie będziemy musieli się o to martwić, gdyż ten problem załatwiają nam zależności. Mimo to, że mamy tu dostępną automatykę, przy tego rodzaju pakietach powinniśmy zachować zdwojoną czujność. Dla ważnych maszyn produkcyjnych warto dodać kernel i pakiety okołokernelowe do opcji hold w Poldku™, opcję tą om�wiliśmy w „Poldek”. Więcej o zależnościach pomiędzy pakietami w „Cechy pakiet�w w PLD”.

Uwagi

Czasami zdarza się, że załamuje się praca systemu sygnalizowana za pomocą komunikatu Kernel Panic, jądro informuje nas, że nie wie co ma dalej zrobić i przerywa pracę. Warto ustawić system tak, by po takim zdarzeniu automatycznie następował restart, konfigurację takiego zachowania opisaliśmy w „Podstawowe ustawienia”.

Parametry jądra

Mamy możliwość wpływania na pracę systemu, dzięki modyfikowaniu specjalnych parametr�w jądra, parametry te można podzielić na dwie grupy: podawane przed startem kernela oraz podawane po wystartowaniu. Pierwszy rodzaj został opisany w „Wstęp”, drugi to zestaw specjalnych wpis�w do pseudo-systemu plik�w /proc/sys.

Czytać wartości możemy za pomocą programu cat np.:

# cat /proc/sys/net/ipv4/ip_forward

Parametry możemy wysłać za pomocą programu echo np.:

# echo "1" > /proc/sys/net/ipv4/ip_forward

Możemy do tego r�wnież użyć programu sysctl, kt�ry za nazwę węzła przyjmuje nazwy katalog�w rozdzielone kropkami, z pominięciem "/proc/sys". Poniżej umieszczono przykład odczytania opcji:

# /sbin/sysctl net.ipv4.ip_forward

oraz przypisania:

# /sbin/sysctl net.ipv4.ip_forward=1

Wadą powyższego rozwiązania jest powr�t do poprzednich ustawień po restarcie maszyny. Rozwiązaniem problemu jest korzystanie z pliku /etc/sysctl.conf, w nim przypisujemy wartości odpowiednim zmiennym. W celu wprowadzenia ustawień wywołujemy polecenie:

# /sbin/sysctl -p

Niekt�re rc-skrypty wywołują automatycznie program sysctl, przykładowo robi to skrypt podsystemu sieci, gdyż plik /etc/sysctl.conf zawiera istotne opcje sieciowe.

Moduły jądra

Czym są?

Sterowniki mogą być wkompilowane do wnętrza jądra lub wydzielone jako osobne obiekty - moduły. Moduły jądra zostały stworzone po to by kernel zajmował mało pamięci operacyjnej i był zarazem uniwersalny. Ułatwiają one także prace ludziom zaangażowanym w rozw�j jądra i dodatkowych modułï¿½w (nie potrzeba kompilować całego kernela by sprawdzić zmiany, wystarczy tylko sam moduł) Wyobraź sobie sytuację, w kt�rej masz wkompilowane do niego wszystko, a tw�j system nie posiada urządzeń, kt�re kernel potrafi obsłużyć. Jest to duże marnotrawstwo, ponieważ w pamięci znajdą się nie potrzebne nam funkcje. Dodać należy fakt, ograniczenia wielkości jądra (można to zmienić odpowiednimi przer�bkami źr�deł via Red Hat). Dlatego lubimy moduły. Dają nam one możliwość wyboru między tym co niezbędne, a brakiem wsparcia dla urządzeń. Podsumowując. Nie potrzebujesz to nie używasz.

By m�c używać modułï¿½w potrzebujesz dw�ch rzeczy. Kernela z wkompilowaną opcją Loadable module support oraz sterownik�w skompilowanych jako moduły. Ponieważ używasz PLD to nie masz co się głowić ponieważ wszystko to masz u siebie w systemie.

Załadowanie właściwego modułu dla urządzenia

Istnieją dwie metody załadowania modułï¿½w:

  • statyczna - metoda tradycyjna, polega na wskazaniu modułï¿½w do załadowania przez administratora

  • dynamiczna - automatyczne ładowanie modułï¿½w, kiedy urządzenie zostaje wykryte

Obydwie metody zostaną przedstawione w dalszych rozdziałach.

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ę /etc/modules.conf. W pliku mamy dostępnych wiele opcji, my om�wimy tylko najczęściej używane: alias, option i blacklist.

Aliasy - są to dodatkowe nazwy dla modułï¿½w, pozwalają na wczytanie go odwołując się do aliasu. Z alias�w korzysta wiele program�w, kt�re nie mogą wiedzieć z jakiego modułu mają korzystać i używają ustalonych nazw (alias�w) np.:

alias eth0 8139too

Dzięki tej linijce wszelkie odwołania przy ładowaniu modułï¿½w załadują automatycznie moduł 8139too.

alias parport_lowlevel parport_pc

W tym fragmencie pliku /etc/modprobe.conf widzimy już znany alias z tym, że w trochę innej formie. Ponieważ występuje tu nazwa_jednego_modułu i nazwa_drugiego_modułu. Oznacza to, że jak będzie potrzeby moduł parport_lowlevel, to zostanie też automatycznie załadowany moduł parport_pc.

Opcje - często używa się możliwości przesłania do modułu ustawień. Przedstawię to na przykładzie drukarki podpiętej do portu LPT:

options parport_pc io=0x378, irq=7

Linijka przesyła jako parametr do modułu parport_pc argumenty we/wy i przerwania. Więcej informacji o dostępnych opcjach modułu można uzyskać po wydaniu polecenia modinfo parport_pc.

Czarna lista - możemy zabronić ładowania jakiegoś modułu za pomocą słowa kluczowego blacklist np.:

blacklist rivafb

.

Statyczne zarządzanie modułami

Określenie modułu dla urządzenia

W zależności od naszych wymagań oraz zastosowania systemu operacyjnego, będzie się zmieniać liczba wymaganych sterownik�w, w większości wypadk�w będzie to wartość od kilku do kilkunastu modułï¿½w. Jeśli tych modułï¿½w jest mało to samodzielne ładowanie może być lepszym rozwiązaniem.

Aby wskazać odpowiedni moduł, musimy poznać dane urządzenia. Najbardziej interesującymi informacjami są: producent i model urządzenia lub użyty chipset. W większości wypadk�w te informacje znajdują się w dokumentacji urządzenia. Jeśli tak nie zdobędziemy szukanych informacji to możemy spr�bować użyć kt�rąś z poniższych metod:

  • Organoleptycznie - jeśli mamy dostęp do sprzętu to możemy obejrzeć urządzenie, opis może być umieszczony na płytce drukowanej lub na chipsecie (zwykle największy układ scalony).

  • lshw - zaawansowany program służący do wyświetlania szczeg�łowych danych o sprzęcie, jego zaletą jest duża ilość sprawdzanych podsystem�w i wyświetlanie nazw używanych modułï¿½w przez konkretne urządzenie.

  • lspci - program ten wyświetla listę wykrytych urządzeń PCI/AGP wraz z dodatkowymi informacjami. Warto użyć tu dodatkowo opcji "-v" - "-vv" w celu zwiększenia ilości danych. Program ten znajdziemy w pakiecie pciutils.

  • Komunikaty jądra - są to dosyć cenne informacje, możemy je odczytać w dzienniku kernela: /var/log/kernel lub przejrzeć to co zwraca program dmesg:

    # dmesg | less

Kiedy uzyskaliśmy informacje o sprzęcie, pozostaje nam odnaleźć moduł:

  • pcidev - program z pakietu pci-database - stara się wykryć używany przez nas sprzęt oraz podaje nazwę sugerowanego modułu. Należy wywołać program z parametrem wskazującym o interesujące nas urządzenie np:

    # pcidev agp
    10de01e0 nvidia-agp nVidia Corporation|nForce2 AGP (different version?)

    drugi zwr�cony łańcuch jest nazwą szukanego modułu. Aby otrzymać listę parametr�w jakie przyjmuje program należy uruchomić go bez parametru. Uwaga: w celu określenia modułu kontrolera dysku nie należy używać parametru 'ide', tylko 'sata', gdyż linia sterownik�w IDE jest przestarzała. Zamiast niej należy używać tych opartych na libata.

  • Internet - można założyć, że ktoś się już spotkał z podobnym problemem. Mamy do dyspozycji sporą skarbnicę wiedzy: WWW, listy i grupy dyskusyjne.

  • Po nazwie modułu: modprobe -l {$słowo_kluczowe} - tak możemy pr�bować odnaleźć moduł wg. szukanego klucza np:

    # modprobe -l *snd*
    /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/pdaudiocf/snd-pdaudiocf.ko.gz
    /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vxp440.ko.gz
    /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vx-cs.ko.gz
    /lib/modules/2.6.11.6-4/kernel/sound/pcmcia/vx/snd-vxpocket.ko.gz
    /lib/modules/2.6.11.6-4/kernel/sound/drivers/snd-serial-u16550.ko.gz
    /lib/modules/2.6.11.6-4/kernel/sound/drivers/mpu401/snd-mpu401-uart.ko.gz
    /lib/modules/2.6.11.6-4/kernel/sound/drivers/mpu401/snd-mpu401.ko.gz
    

  • modinfo - program ten zwraca informacje o module, kt�rego nazwę podajemy jako parametr. Program jest pomocny jeśli zawęziliśmy listę pasujących modułï¿½w do kilku pozycji.

Kiedy sądzimy że odnaleźliśmy właściwy moduł możemy go bez obaw wczytać i przetestować nasze urządzenie, jeśli pr�ba zakończyła się sukcesem to możemy zapisać jego nazwę do odpowiedniego pliku aby został załadowany przy każdym starcie systemu. Opis tego znajduje się w dalszej części rozdziału.

Zarządzanie modułami

Moduły są ze sobą powiązane i załadowanie danego modułu załaduje moduły od niego zależne (jeśli takie są), podobnie jest z ich usuwaniem z pamięci. Do zarządzania modułami zaleca się używanie programu modprobe z odpowiednimi parametrami zamiast program�w insmod i rmmod

Listę załadowanych modułï¿½w i zależności między nimi otrzymamy po wydaniu polecenia lsmod np:

# lsmod
Module                  Size  Used by
lp                      8644  0
parport                29896  1 lp
ext3                  119304  1
amd74xx                11676  0 [permanent]
psmouse                34840  0
ide_core              109560  2 ide_disk,amd74xx
ide_disk               14336  9

Wczytanie modułu do pamięci:

# modprobe ne2k-pci

Usuwanie modułu z pamięci (możliwe tylko jeśli nie jest używany):

# modprobe -r ne2k-pci

Wyświetlenie listy modułï¿½w zależnych od podanego:

# modprobe --show-depends ne2k-pci
insmod /lib/modules/2.6.11.6-4/kernel/drivers/net/8390.ko.gz
insmod /lib/modules/2.6.11.6-4/kernel/drivers/net/ne2k-pci.ko.gz

Wyświetlenie listy dostępnych modułï¿½w:

# modprobe -l

Po "ręcznym" załadowaniu modułu do pamięci będzie on dostępny do czasu ponownego uruchomienia komputera, aby moduł był automatycznie ładowany przy starcie systemu musimy użyć opisanych dalej plik�w: /etc/modules lub /etc/modprobe.conf.

/etc/modules

Plik ten zawiera listę modułï¿½w, kt�re zostaną załadowane podczas startu systemu (przez rc-skrypty). Znając nazwę modułu możemy dodać ją do tego pliku np:

echo "via82cxxx_audio" >> /etc/modules

/etc/modprobe.conf

W „Moduły jądra” powiedzieliśmy, że plik /etc/modprobe.conf służy do konfiguracji modułï¿½w, jednak za pomocą pewnej sztuczki będziemy mogli wskazywać moduły do załadowania. Polega ona na utworzeniu alias�w o ustalonych nazwach i kt�re będą ładowane np. przez rc-skrypty. Przykładowo utworzenie aliasu eth0 do odpowiedniego modułu karty sieciowej spowoduje załadowanie danego modułu przy pr�bie podniesienia interfejsu pierwszego interfejsu Ethernet. Przykładowy alias:

alias eth0 8139too

spowoduje załadowanie modułu 8139too. Nic nie stoi na przeszkodzie żeby taki moduł został dopisany do /etc/modules, jednak metoda oparta na aliasach jest bardziej czytelna i elegancka (zwłaszcza przy większej ilości kart sieciowych). Poniżej została przedstawiona lista takich alias�w:

  • eth{$Nr} - opisany powyżej alias dla karty sieciowej typu Ethernet.

  • ide_hostadapter, scsi_hostadapter - aliasy do modułï¿½w kontroler�w pamięci masowych, używane są m.in. przez skrypt geninitrd.

  • char-major-116, snd-card-{$Nr}, char-major-14, sound-* - aliasy dla modułï¿½w kart muzycznych (ALSA).

Przykładowa konfiguracja:

alias eth0 8139too
alias scsi_hostadapter sata_sil
alias char-major-116 snd
alias snd-card-0 snd-intel8x0

Udev - dynamiczna obsługa sprzętu

Statyczne zarządzanie modułami kernela i urządzeniami w /dev było skomplikowane, uciążliwe i wymagało praw administratora, stąd narodziła się idea systemu, kt�ry zautomatyzuje te czynności. Tak oto powstał udev™, wsp�łczesne wersje udeva (następcy DevFS) mają wbudowaną obsługę hotpluga™ i coldpluga™. Dzięki temu mogą automatycznie ładować potrzebne moduły, ma to sens wyłącznie w przypadku modularnego kernela, jaki jest dostępny w PLD. Mimo włączenia hotpluga do udeva w PLD ciągle dostępne są pakiety z hotplugiem, są przechowywane jedynie dla wstecznej zgodności i nie będą nam już potrzebne.

Poza nielicznymi wypadkami nie będzie już konieczne dopisywanie nazw modułï¿½w do pliku /etc/modules, ani ich ręczne ładowanie za pomocą programu modprobe.

Więcej o plikach urządzeń znajdziemy w „Urządzenia”.

Instalacja

W systemie domyślnie instalowany jest pakiet dev™, jeśli zechcemy przejść na udev to wystarczy, że zainstalujemy pakiet udev a następnie odinstalujemy dev np.:

# poldek -i udev
# poldek -e dev

Osoby nie ufające do końca dynamicznemu tworzeniu urządzeń, nie usuwają z systemu statycznego deva tak jak to zrobiliśmy powyżej. Praktyka pokazuje jednak, że nie ma powod�w do obaw i poza wyjątkowo ważnymi instalacjami systemu nie ma takiej potrzeby.

Konfiguracja

Udev w większości wypadk�w nie wymaga żadnych operacji konfiguracyjnych, czasami tylko konieczne jest poprawienie lub dodanie regułki do katalogu /etc/udev/rules.d/. Zanim się tym zajmiemy powinniśmy zapoznać się z dokumentacją.

W Ac™ do wyboru są dwa tryby pracy: udevstart (domyślny) i udevsynthesize. Ten drugi wykrywa większą liczbę urządzeń, stąd warto się pokusić o wyb�r właśnie jego. Aby go używać wystarczy, że ustawimy odpowiednią opcję w pliku /etc/udev/udev.conf:

UDEV_STARTER="udevsynthesize"

W Th™ powyższe opcje nie są już dostępne, ich miejsce zajął mechanizm udevtrigger.

Udev w praktyce

Liczba załadowanych modułï¿½w przez udev może przywr�cić o zawr�t głowy, udev ładuje moduły znalezionych urządzeń bez względu czy w og�le z niego korzystamy. Jedyną wadą takiego działania jest większe zużycie pamięci przez nieużywane sterowniki. Nie powinno przekroczyć 2MiB pamięci, więc dla ogromnej większości wsp�łczesnych komputer�w nie będzie to stanowić żadnego problemu.

Mamy wpływ na listę ładowanych modułï¿½w, aby zablokować ładowanie jakiegoś modułu wystarczy dodać do pliku /etc/modprobe.conf nazwę modułu poprzedzoną słowem blacklist np.:

blacklist rivafb
blacklist nvidiafb

Powyższa metoda ma sens jedynie jeśli chcemy zablokować pojedyncze moduły, jeśli mamy komputer o bardzo małej ilości pamięci lepszym pomysłem będzie pozostanie przy statycznej metodzie ładowania modułï¿½w.

Uwagi

Jeśli mamy kilka kontroler�w urządzeń masowych (IDE/SATA/SCSI) to mogą występować problemy z wykrywaniem ich na czas, tak by były gotowe do zamontowania system�w plik�w określonych w /etc/fstab. Jedynym pewnym sposobem poradzenia sobie z tym kłopotem jest dodanie modułï¿½w kontroler�w do initrd.

Więcej o udev możemy poczytać w FAQ

Udev nie zajmuje się montowaniem przenośnych nośnik�w danych, musimy robić to ręcznie (co wymaga uprawnień administratora), lub użyć HAL-a, D-Busa oraz np. gnome-volume-manager w przypadku środowiska Gnome.

Initrd

Wstęp

W PLD wszystkie możliwe sterowniki są dostępne w postaci tzw. modułï¿½w, przez co nie są one "widoczne" dla jądra w trakcie startu systemu. Aby system wystartował wymaganych jest kilka modułï¿½w i innych komponent�w koniecznych do zamontowania głï¿½wnego systemu plik�w (root filesystem):

  • moduły kontrolera urządzeń masowych (IDE/SATA/SCSI) np.: sata_nv, sata_sil, sd_mod

  • systemu plik�w na głï¿½wnej partycji systemowej np.: xfs, reiserfs

  • elementy konieczne do złożenia wolumin�w opartych o LVM lub programowy RAID

Jedynym sposobem dostarczenia tych sterownik�w jest umieszczenie ich w specjalnym "obrazie" zwanym initrd (initial ramdisk). Obraz ten jest plikiem wczytywanym przez bootloader, tak więc dodatkowo musimy właściwie skonfigurować bootloader - wskazać położenie obrazu. Obraz przechowywany jest w katalogu /boot i ma nazwę initrd-{$wersja_jądra}.gz, do niego zaś prowadzi łącze o nazwie initrd.

Initrd jest tworzony przy każdej instalacji/aktualizacji kernela. Bywa jednak, że nasz obraz nie jest wygenerowany prawidłowo i jesteśmy zmuszeni do utworzenia go samodzielnie. Źle utworzony uniemożliwi uruchomienie systemu, ujrzymy wtedy następujący komunikat:

Kernel panic: VFS: Unable to mount root fs...

Jądro m�wi nam, że nie może zamontować głï¿½wnego systemu plik�w, gdyż brakuje mu jakiegoś komponentu. Może się to zdarzyć, że nasz sprzęt nie został prawidłowo wykryty lub pr�bujemy uruchomić PLD z naszego dysku na innym komputerze (o innym kontrolerze urządzeń masowych).

Systemu nie można uruchomić więc musimy skorzystać z operacji chroot-a, możemy w tym celu użyć dowolnej dystrybucji linuksa jednak chyba najwygodniejsze będzie użycie PLD-Live™ lub RescueCD™.

Przygotowanie

Poniżej przedstawiono trzy metody generowania initrd. W większości wypadk�w wystarczy nam pierwszy ze sposob�w, pozostałe są trudniejsze gdyż musimy znać nasz sprzęt i system plik�w partycji "/". Jeśli obraz nie jest tworzony prawidłowo przez pierwszą metodę musimy się zadowolić dwoma pozostałymi. Druga i trzecia metoda mają jedną zasadniczą przewagę nad pierwszą - mogą być przeprowadzane na dowolnej maszynie.

W dw�ch pierwszych metodach użyjemy skryptu /sbin/geninitrd z pakietu geninitrd. Jest to wygodny automat, kt�ry stara się wykryć sprzęt, system plik�w i czy głï¿½wny system plik�w jest stworzony na LVM/soft RAID. Skrypt geninitrd wymaga prawidłowych wpis�w w /etc/fstab i podmontowanego /proc. Tak więc jeśli generujemy initrd w systemie typu chroot to wydajemy polecenie (z chroota):

# mount /proc

Opis wykrywania sprzętu i dobierania właściwych modułï¿½w opisano w „Statyczne zarządzanie modułami”.

Automatyczne generowanie initrd

W razie potrzeby edytujemy plik /etc/sysconfig/geninitrd i ustawiamy jaki rodzaj urządzenia (SCSI, IDE, RAID) ma być automatycznie wykrywany:

## Do install SCSI modules (if / is on SCSI partition)?
PROBESCSI=yes

## Do install IDE modules (if / is on IDE partition)?
PROBEIDE=yes

## Do install RAID modules (if RAID is used)?
PROBERAID=yes

Teraz przyszedł czas na wygenerowanie obrazu wg schematu

geninitrd [opcje] {$initrd} {$wersja_jądra} np.:

# geninitrd -v -f /boot/initrd-2.6.16.35-1.gz 2.6.16.35-1

Parametr -v odpowiada za "gadatliwość" programu, zaś -f wymusza nadpisanie istniejącego obrazu.

Ręczne generowanie initrd

Metoda ta wymaga precyzyjnej znajomości używanego sprzętu i systemu plik�w, gdyż sami musimy wskazać odpowiednie moduły. Jest jednak konieczna, w przypadku problem�w z automatycznym wykryciem wymaganych sterownik�w lub jeśli chcemy operację wykonać na innej maszynie niż docelowa.

Możemy wpisać listę koniecznych modułï¿½w do odpowiedniej sekcji w pliku /etc/sysconfig/geninitrd:

## Basic modules to be loaded
BASICMODULES=""

## Modules that should be loaded before anything (i.e. jbd for ext3)
PREMODS=""

lub zmodyfikować wywołanie geninitrd poprzez użycie parametru --with:

geninitrd [opcje] --with={$nazwa_modułu} {$initrd} {$wersja_jądra}

Dużym ułatwieniem zadania jest automatyczne dołączanie modułï¿½w zależnych od wskazanego (o ile takie są). Poniżej zamieszczono przykładowe wywołanie geninitrd dla systemu plik�w ext3 i kontrolera IDE PDC20268 firmy Promise:

# geninitrd -v --with=ext3 --with=pdc202xx_new  /boot/initrd-2.6.16.35-1.gz 2.6.16.35-1

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łąd wejścia/wyjścia

Pomimo tego błędu dobrze się skopiowało, warto jednak sprawdzić uprawnienia i atrybuty pliku (ewentualnie poprawić na takie jak w oryginale)

Aby dodać moduł, musimy go skopiować z naszego systemu do odpowiedniego katalogu w initrd-moje/lib/modules/*/, następnie do skryptu initrd-moje/linuxrc dodać wpis "insmod {$moduł}" na wz�r już istniejących ({$moduł} musi zawierać pełną ścieżkę do pliku).

Przyszedł czas na wygenerowanie initrd:

# genromfs -d initrd-moje -f initrd-nowy

Kompresujemy nowy initrd:

# gzip -9 initrd-nowy

Teraz już pozostało tylko skopiowanie pliku initrd-nowy.gz do /boot i nadanie mu odpowiedniej nazwy.

Bootloader

Musimy się upewnić czy łącze symboliczne /boot/initrd wskazuje na prawidłowy obraz. Jeśli używamy LiLo™ wydajemy polecenie:

# lilo

W przypadku Grub-a™ nic nie musimy robić.

Na koniec restartujemy komputer i system powinien uruchomić się bez problemu. Konfigurację bootloader�w szerzej opisano w „Wstęp”.

Uwagi

Częste zmiany używanego obrazu initrd mogą być uciążliwe, można to obejść łącząc do jednego obrazu większą ilość modułï¿½w. Aby to zrobić możemy dopisać nazwy modułï¿½w do przedstawionych poniżej opcji w pliku /etc/sysconfig/geninitrd:

## Basic modules to be loaded
BASICMODULES=""

## Modules that should be loaded before anything (i.e. jbd for ext3)
PREMODS=""

możemy też użyć opcji --with programu geninitrd. Warto pamiętać żeby nie przesadzać z ich ilością, może to spowodować wolniejszy start systemu i niepotrzebne zużycie pamięci operacyjnej przez nieużywane sterowniki.

Urządzenia

Podobnie jak w innych systemach uniksowych obowiązuje tutaj zasada "everything is a file", czyli wszystko jest plikiem. Dzięki takiemu podejściu uproszczono spos�b komunikacji z urządzeniami, poprzez odwoływanie się do specjalnych plik�w, odpowiadających konkretnym urządzeniom. Pliki te są przechowywane w katalogu /dev, zwykły użytkownik nie musi się martwić o jego zawartość, wystarczy że będzie znał powiązania między fizycznymi urządzeniami a nazwami tych plik�w.

Z nazw urządzeń najczęściej korzysta się w przypadku operacji dyskowych, warto zatem znać zasadę ich określania, więcej szczeg�łï¿½w na ten temat podano w „Nazewnictwo urządzeń masowych”.

Podstawowe informacje o urządzeniu

Nazwy urządzeń nadawane są tak, aby ułatwiać życie użytkownikom, dla jądra są właściwie obojętne. Jądro rozr�żnia urządzenia za pomocą pary liczb: major (głï¿½wnej) i minor (pobocznej). To jakie są wartości tych liczb odczytamy następująco:

ls -l /dev/hda2
	brw-rw----  1 root disk 3, 2 2005-11-11 15:08 /dev/hda2

Na powyższym przykładzie major jest r�wna 3, zaś minor jest r�wna 2. Pierwsza literka w łańcuchu opisującego uprawnienia określa rodzaj pliku, znak "b" (jak na powyższym przykładzie) oznacza urządzenie blokowe, zaś "c" urządzenie znakowe.

Jeśli potrzebujemy samodzielnie utworzyć plik urządzenia, to użyjemy do tego programu mknod np.:

# /bin/mknod  /dev/zero c 1 5

Numery major i minor oraz inne informacje odnajdziemy w dokumentacji kernela, jeśli zainstalujemy pakiet kernel-doc to powinniśmy zapoznać się z zawartością pliku /usr/src/linux/Documentation/devices.txt

Systemy plik�w-urządzeń

Są dwa sposoby dostarczania plik�w urządzeń dla systemu: dev™ - statyczny i udev™ - dynamiczny. Każdy z nich ma wsparcie w PLD, jednak domyślnie instalowany jest pakiet udev. Jeśli chcemy użyć innego mechanizmu, wystarczy że odinstalujemy udev a zainstalujemy dev w jego miejsce, dla pewności tą operację lepiej przeprowadzać przy pomocy operacji chroot-a.

Najstarszym z rozwiązań jest pakiet dev™, dzięki niemu w katalogu /dev zostanie utworzona spora ilość węzłï¿½w (nawet jeśli nie mamy danego rodzaju urządzenia), wystarczająca dla większości zastosowań. Jeśli jednak mamy jakieś egzotyczne urządzenie to będziemy musieli samemu utworzyć wymagane pliki. Pliki urządzeń tworzymy za pomocą opisanego wcześniej programu mknod.

W odr�żnieniu od statycznej bazy plik�w urządzeń w ostatnim czasie popularność zdobywają systemy automatycznego tworzenia węzłï¿½w w katalogu /dev. W chwili podłączenia urządzenia lub startu systemu automatycznie tworzone są wymagane pliki. Jest to ogromne ułatwienie dla użytkownik�w, gdyż nie wymaga od nich wiedzy na ten temat.

UDEV

Udev™ automatycznie tworzy pliki urządzeń, jednak sam potrzebuje kilku z nich, aby m�gł zacząć działać, są to: /dev/console, /dev/null, /dev/zero. Pliki te są dostarczane razem z pakietem, a więc nie musimy się to martwić.

System udev jest wart uwagi dlatego, że nie tylko tworzy wymagane węzły urządzeń lecz dodatkowo ładuje wymagane moduły jądra dla danego urządzenia. Więcej informacji o udev znajdziemy w „Udev - dynamiczna obsługa sprzętu”

Należy pamiętać o tym, że udev jest wywoływany z rc-skrypt�w, i nie wystartuje przy użycia parametru jądra init lub przy pr�bie wykonania operacji chroota z innego systemu. Wtedy wymagane pliki nie zostaną utworzone, co może spowodować nieoczekiwane problemy z działaniem program�w. W przypadku wykonania operacji chroota problem ten rozwiązujemy poprzez wcześniejsze podmontowanie katalogu /dev z systemu głï¿½wnego. W pozostałych przypadkach uruchamiamy skrypt /etc/rc.d/rc.sysinit, w ostateczności tworzymy wymagane urządzenia za pomocą programu mknod lub skądś je kopiujemy. Operacja chroota została szerzej opisana w „Ratowanie systemu”. Parametr jądra init jak i wiele innych szerzej opisano w „Wstęp”.

Jaki system wybrać?

Na stacji roboczej bez zastanowienia można polecić udev, gdyż pozwoli na znaczne podniesienie komfortu pracy. W przypadku serwer�w będzie to głï¿½wnie zależało od preferencji administratora i wyb�r nie będzie miał tu większego znaczenia.

Zupełnie inaczej to wygląda w przypadku system�w zamkniętych typu chroot, zar�wno plikami urządzeń jak i modułami zajmuje się system gospodarz, ponadto udev może stać się poważnym wyłomem w bezpieczeństwie klatki. W takim wypadku powinniśmy użyć statycznych plik�w (dev), kt�rych lista powinna zostać poważnie ograniczona do kilku niezbędnych.

Rozdział 11. Konfiguracja systemu

Ten rozdział prezentuje metody konfiguracji parametr�w systemu.

Podstawowe ustawienia

Plik /etc/sysconfig/system przechowuje zaawansowaną konfigurację systemu, w rozdziale tym opisano część z zawartych w nim opcji.

Konfiguracja skrypt�w startowych

Zmienna określa czy skrypty startowe mają używać kolor�w:

COLOR_INIT=yes

Numer kolumny wyświetlania wyniku działania skryptu startowego:

INIT_COL=75

Szybsze uruchomienie systemu z pominięciem niekt�rych skrypt�w, startowych - m.in. skryptu od obsługi język�w:

FASTRC=no

Zezwolenie na interaktywny start rc-skrypt�w (pytanie o uruchomienie każdego z podsystem�w) po wciśnięciu klawisza I:

RC_PROMPT=yes

Opcje związane z jądrem

"Gadatliwość" kernela dla komunikat�w wysyłanych na konsolę tekstową. Opcja jest jednoznaczna z wywołaniem polecenia dmesg -n {$nr} (domyślnie 1):

CONSOLE_LOGLEVEL=1

Czas w sekundach, po kt�rym nastąpi restart maszyny jeśli wystąpił krytyczny błąd jądra (kernel panic). Ważna opcja w przypadku komputer�w, do kt�rych nie mamy fizycznego dostępu:

PANIC_REBOOT_TIME=60

Opcje uruchamiania systemu

Uruchomienie programu sulogin™ (pytanie o hasło root-a) zamiast powłoki jeśli wystąpią problemy w trakcie uruchomienia:

RUN_SULOGIN_ON_ERR=yes

Wartość "yes" poniższej zmiennej pozwala na zalogowanie się użytkownik�w dopiero po zakończeniu procesu ładowania systemu. Dzięki unikniemy potencjalnych problem�w wynikających z przedwczesnym uzyskaniem dostępu, z drugiej jednak strony tracimy możliwość zalogowania się (np. przez SSH) jeśli pojawią się problemy przed końcem ładowania systemu. Może to być istotne dla system�w obsługiwanych na odległość.

DELAY_LOGIN=yes

Opcja określa czy w czasie startu ma być usuwana zawartość katalogu /tmp:

CLEAN_TMP=yes

Wskazuje czy ma być zamontowany podsystem devfs™:

MOUNT_DEVFS=no

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 przechowujących systemy typu chroot, kt�re mają być zarządzane przez skrypt /etc/init.d/sys-chroots:

SYSTEM_CHROOTS=/jakis_katalog

Ustawienia konsoli

Dzięki plikowi /etc/sysconfig/console możemy ustawić takie parametry jak czcionka konsoli, mapa klawiatury, kodowanie font�w oraz zarządzanie energią.

Aby zmienić czcionkę, edytujemy parametr:

CONSOLEFONT=lat2u-16

Do wyboru mamy czcionki zamieszczone w katalogu /usr/share/consolefonts.

Aby zmienić kodowanie znak�w, edytujemy parametr:

CONSOLEMAP=8859-2

Aby zmienić mapowanie klawiatury edytujemy parametr:

KEYTABLE=pl2

Aby ustawić numery konsol dla kt�rych aplikowane są parametry, zmieniamy:

SET_FONT_TERMINALS="1 2 3 4 5 6 7 8"

Przedstawiony parametr deklaruje zmianę ustawień dla konsol tty1-tty8.

Aby zmienić opcje zarządzania energią, edytujemy parametry:

POWER_SAVE=on
BLANK_TIME=10
POWERDOWN_TIME=60

Parametr BLANK_TIME określa liczbę minut nieaktywności do wygaszenia ekranu, POWERDOWN_TIME - do wyłączenia monitora.

Aby zmienić kolor czcionki lub tła, edytujemy parametr:

FOREGROUND_COLOUR=red
BACKGROUND_COLOUR=green	

Do wyboru posiadamy kolory black|red|green|yellow|blue|magenta|cyan|white|default.

Aby zmienić domyślny tryb NUM Locka, edytujemy parametr:

NUM_LOCK=on

Do wyboru posiadamy atrybut "on" lub "off".

Aby uaktywnić zmiany wykonujemy:

/sbin/service console start

Internacjonalizacja

Wstęp

Częstym problemem początkującego użytkownika Linuksa jest ustawienie wyświetlania znak�w diakrytycznych, walut oraz odpowiedniego języka. Ponieważ PLD jest dystrybucją dla zaawansowanych użytkownik�w, możemy w niej przystosować środowisko pracy do naszych indywidualnych potrzeb.

Internacjonalizacja konsoli i program�w

Zanim przystąpimy do instalowania poszczeg�lnych paczek, musimy w pliku /etc/sysconfig/i18n ustawić odpowiednie zmiennie środowiskowe odpowiadające za język czcionkę systemową oraz kodowanie. W naszym przypadku wpis ten wygląda następująco:

SUPPORTED_LOCALES=pl_PL
LANG=pl_PL
LC_ALL=pl_PL
LINGUAS=pl_PL
SYSFONT=lat2u-16
UNIMAP=lat2u
SYSFONTACM=iso02

Następnie instalujemy pakiety odpowiedzialne za ustawienia lokalne i klawiaturę:

# poldek -i localedb-src kbd

Locale generujemy poleceniem localedb-gen, kt�re domyślne ustawienia pobiera ze zmiennej SUPPORTED_LOCALES wiec jeśli chcielibyśmy mieć obsługę r�wnież innego języka, to trzeba to zaznaczyć właśnie przy tej zmiennej.

Przykładowy zapis dla kilku język�w w pliku /etc/sysconfig/i18n może wyglądać tak:

LANG=pl_PL

# list of supported locales
SUPPORTED_LOCALES="pl_PL/ISO-8859-2 de_DE/ISO-8859-2 \
    en_GB/ISO-8859-1 en_US/ISO-8859-1"

Można też zainstalować pakiet zawierający bazę danych locale dla wszystkich lokalizacji obsługiwanych przez glibc.

# poldek -i glibc-localedb-all

Aby sprawdzić czy wszystko przebiegło pomyślnie wydajemy polecenie:

$ locale
LANG=pl_PL
LC_CTYPE="pl_PL"
LC_NUMERIC="pl_PL"
LC_TIME="pl_PL"
LC_COLLATE="pl_PL"
LC_MONETARY="pl_PL"
LC_MESSAGES="pl_PL"
LC_PAPER="pl_PL"
LC_NAME="pl_PL"
LC_ADDRESS="pl_PL"
LC_TELEPHONE="pl_PL"
LC_MEASUREMENT="pl_PL"
LC_IDENTIFICATION="pl_PL"
LC_ALL=

Sprawdzamy czy wszystkie wpisy się zgadzają.

Jeśli chcemy aby ustawienia dopasowane były do naszych upodobań do dyspozycji mamy następujące zmienne LC_*:

Dostępne zmienne LC_*:
* LC_CTYPE: Konwersja czcionki i wielkości liter.                               
* LC_COLLATE: Porządek sortowania.                                              
* LC_TIME: Format wyświetlania daty i godziny.                           
* LC_NUMERIC: Wyświetlanie liczb nie związanych z walutą
* LC_MONETARY: Formaty walutowe.
* LC_MESSAGES: Format wiadomości informacyjnych, diagnostycznych \
    oraz określających interakcje programu.
* LC_PAPER: Rozmiar papieru.
* LC_NAME: Format nazw.
* LC_ADDRESS: Format wyświetlania adresu i lokalizacji.
* LC_TELEPHONE: Format wyświetlania numeru telefonu.
* LC_MEASUREMENT: Jednostki miary (metryczna lub inna)
* LC_IDENTIFICATION: Metadata o ustawieniach locale.

Przykładowo jako domyślnego języka, możemy używać angielskiego jednak ze wsparciem dla polskich czcionek i polskich walut. Wszelkiego typu zmiany dokonujemy poprzez dodanie do pliku ~/.bash_profile odpowiednich wpis�w:

LANG=en_EN
export LANG
LC_CTYPE=pl_PL
export LC_CTYPE

Myszka pod konsolą

Wstęp

Niniejszy rozdział dotyczy uruchomienia obsługi myszy dla terminala znakowego, konfigurację myszy dla środowiska graficznego (X-Window™) opisano w „X-Server”. Proces konfiguracji rozpoczynamy od instalacji demona gpm™:

# poldek -i gpm

Dalsza część konfiguracji polega na załadowaniu właściwego modułu jądra i ustawieniu przynajmniej dw�ch parametr�w w pliku /etc/sysconfig/mouse: nazwy urządzenia (DEVICE) i typu myszy (MOUSETYPE).

Poniższy opis dotyczy kernela 2.6.x, w tej wersji jako urządzenia dla myszy PS2 i USB stosuje się /dev/input/mouse0, /dev/input/mouse1, ... lub urządzenie zbiorcze /dev/input/mice. Jednak dla wstecznej zgodności działa dalej /dev/psaux

Szeregowa

Obsługa portu szeregowego RS-232 jest częścią jądra PLD, więc nie ładujemy żadnego modułu - urządzenia działają od razu po podłączeniu. W zależności od tego, na kt�rym porcie mamy podpiętą mysz, ustawiamy odpowiednio parametr DEVICE, pamiętając, że /dev/ttyS0 to COM1, /dev/ttyS1 to COM2 ...

Typ myszy będzie zależał od modelu posiadanego urządzenia, w większości wypadk�w powinna zadziałać dla wartości "ms", "msc", lub "ms3". Szczeg�łowe informacje na ten temat znajdziemy w pomocy demona, kt�rą wyświetlimy w spos�b opisany na końcu rozdziału.

DEVICE=/dev/ttyS0
MOUSETYPE=ms3

PS/2, TouchPad, TrackPoint

W laptopach urządzenia wskazujące są zgodne z myszkami typu PS/2, stąd ich konfiguracja przebiega tak samo. Rozpoczynamy od załadowania modułu jądra:

# modprobe psmouse

Podajemy urządzenie myszy i jej typ, kt�ry dla większości urządzeń ustawimy na "ps2" lub "imps2":

DEVICE=/dev/input/mice
MOUSETYPE=ps2

USB

Ładowanie modułï¿½w dla tego rodzaju urządzeń może być wykonane automatycznie przez mechanizm udev™ lub ręcznie. W drugim wypadku wydajemy następujące polecenia (zakładam że są już załadowane moduły dla kontrolera USB):

# modprobe usbhid
# modprobe usbmouse

Podajemy urządzenie myszy i jej typ, kt�ry dla większości urządzeń ustawimy na ps2 lub imps2:

DEVICE=/dev/input/mice
MOUSETYPE=ps2

Zakończenie

Teraz wystarczy tylko uruchomić usługę gpm™:

# /etc/init.d/gpm start

Wcześniej załadowane moduły można jeszcze wpisać do /etc/modules, aby ładowały się przy starcie systemu.

Porady

  • Większość dostępnych na rynku myszek powinna zadziałać z przedstawioną powyżej konfiguracją. Możliwe jednak, że nasza mysz używa nietypowego protokołu i należy ustawić inny typ urządzenia (MOUSETYPE). W takim wypadku pomocna może się okazać lista urządzeń i odpowiadających im typ�w wyświetlana w wyniku poniższego polecenia:

    # gpm -m /dev/input/mice -t help
  • Pożyteczną opcją jest BUTTON_COUNT, kt�ra definiuje liczbę przycisk�w myszy.

  • Zamiast wskazania pliku urządzenia, możemy użyć łącza symbolicznego o nazwie /dev/mouse wskazującego na właściwe urządzenie.

Strefa czasowa

Strefy czasowe to specjalne ustawienia, pozwalające systemowi na łatwe przeliczanie czasu uniwersalnego (UTC) na lokalny i na odwr�t. Zaczynamy od instalacji koniecznego pakietu:

$ poldek -i tzdata

Aby wskazać strefę czasową modyfikujemy plik /etc/sysconfig/timezone, jego ustawienia wskazują na odpowiednie pliki i katalogi w /usr/share/zoneinfo, kt�re z kolei odpowiadają strefom czasowym. Nazwy plik�w odpowiadają pewnym punktom geograficznym tak aby łatwiej było określić właściwą strefę.

W Ac™ ustawiamy zmienne ZONE_INFO_AREA i TIME_ZONE. Opcje wskazują na katalog i plik opisujący strefę, jak zapewne czytelnik zauważy, część z nich nie jest przechowywania w podkatalogach, wtedy tą zmienną należy ustawić pustą. Dla Polski wybieramy podajemy następujące wartości:

ZONE_INFO_AREA="Europe"
TIME_ZONE="Warsaw"

W Th™ powyższe opcje zostały zastąpione przez TIMEZONE, tutaj wartości oddzielamy slashem:

TIMEZONE="Europe/Warsaw"

Aby zmiany odniosły skutek musimy zrestartować odpowiedni skrypt startowy:

# service timezone restart

Więcej informacji o strefach czasowych znajdziemy na witrynie www.timeanddate.com

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ędą następowały automatycznie, bez modyfikowania ustawień zegara sprzętowego.

Wyjątkiem od tej reguły jest używanie na tym samym komputerze PLD i kt�regoś z produkt�w Microsoftu. Te ostatnie używają zgodnego czasu dla BIOS-u i systemu, co spowoduje r�żnice we wskazaniach zegar�w. Jedynym rozwiązaniem tego problemu jest zmuszenie naszego PLD, by używał czasu BIOS-u jako czasu lokalnego. W tym wypadku zmianą czasu letni/zimowy może zająć się system Microsoftu lub możemy wykonać to samodzielnie.

Aby skorzystać z pierwszego rozwiązania synchronizujemy zegar sprzętowy z czasem uniwersalnym, a w pliku /etc/sysconfig/clock ustawiamy:

UTC="true"

W przeciwnym wypadku ustawiamy czas lokalny i wybieramy wartość

UTC="false"

Zmienne środowiskowe

Przeglądanie

Zmienne środowiskowe to prosty spos�b modyfikowania konfiguracji środowiska użytkownika. Listę zmiennych i przypisanych im wartości uzyskamy za pomocą polecenia powłoki set, na poniższym przykładzie przedstawiono fragment wyniku polecenia:

$ set
BASH=/bin/bash
BASH_VERSINFO=([0]="2" [1]="05b" [2]="0" [3]="2" [4]="release" [5]="i686-pld-linux-gnu")
BASH_VERSION='2.05b.0(2)-release'
COLORTERM=gnome-terminal
COLUMNS=125

Konfiguracja globalna

Administrator może ustawić globalnie wszystkim użytkownikom zmienne środowiskowe. Do tego wykorzystuje się mechanizm env.d. Jest to katalog umieszczony w /etc, zawierający pliki tekstowe o nazwach takich samych jak nazwy zmiennych, wewnątrz każdego z nich podana nazwa zmiennej i jej wartość. Przykładowo zmienna EDITOR zostanie zainicjowana jeśli utworzymy plik /etc/env.d/EDITOR, jego treść może wyglądać następująco:

EDITOR=vim

Zmiany w /etc/env.d są aktualizowane po ponownym zalogowaniu danego użytkownika.

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ększości z nich (sh, zsh, bash, ksh) istnieje polecenie export kt�re pozwala ustawić dowolna zmienną np.:

# export EDITOR=mcedit

Tak ustawiona zmienna będzie funkcjonować do czasu wylogowania użytkownika

Aby ustawić na stałe zmienną użyjemy pliku konfiguracyjnego powłoki. Musimy jedynie wstawić do takiego pliku podane wyżej polecenie export. Każda z powłok posiada swoje własne pliki startowe, przykładowo powłoka BASH używa pliku ~/.bash_profile i ~/.bashrc, zaś ZSH ~/.zshenv. Więcej informacji na ten temat zawarto w manualu każdej z powłok.

Jeśli chcemy ustawić zmienną środowiskową tylko dla jednego uruchamianego programu, to podajemy jej definicję przed nazwą programu np.:

$ http_proxy=62.87.244.34:8080 wget http://foobar.com/plik.foo

PLDconf - Narzędzie do konfiguracji systemu

Pldconf jest narzędziem tworzonym z myślą o początkujących użytkownikach. Wiele opcji jest konfigurowanych automatycznie. Pldconf ma małe wymagania i jest niewielkim pakietem (ok. 150 kB) Jego instalacja sprowadza się do wydania polecenia:

# poldek -i pldconf

Program zadaje minimalną ilość pytań i w podstawowej wersji (dla PLD RA 1.0) konfiguruje:

  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ęcej;

  4. Menedżer startu: menu z linuksem i windows, dyskietka startowa i więcej;

  5. Dostęp do partycji windows;

tyle z podstawowych możliwości - pldconf potrafi więcej.

Obecnie pldconf rozwijany jest dla nadchodzącego PLD 2.0 (AC/DC/NEST). W nowej wersji dodano między innymi:

  1. Konfiguracje karty dźwiękowej (alsa);

  2. Konfiguracje drukarki (cups);

  3. Optymalizacje dysku twardego (hdparm);

  4. Konfiguracje fetchmail;

  5. Konfiguracje tunera telewizyjnego

  6. Zarządzanie kontami użytkownik�w

Wersja pldconf dla PLD 2.0 nieznacznie r�żni się od wersji dla PLD 1.0. R�żnice dotyczą przede wszystkim zmiany ścieżek (np. /usr/X11R6/bin/mozilla w PLD 2.0 zmieniono na /usr/bin/mozilla) głï¿½wnie w module do konfiguracji desktopu. W praktyce blisko 100% pldconf w najnowszej wersji (przeznaczonym dla PLD 2.0) działa poprawnie r�wnież w systemie PLD 1.0. W szczeg�lności najnowszy pldconf potrafi przeprowadzić sieciową instalację PLD 2.0 - moduł instalacji zadziała poprawnie w systemie PLD 1.0. Innymi słowy, aby zainstalować PLD 2.0 spod uruchomionego PLD 1.0 należy zainstalować najnowszą wersję pldconf.

Uwaga: W przypadku instalacji nowego pldconf w systemie PLD 1.0 wymagana jest r�wnież instalacja pakietu perl-modules.

Strona domowa projektu

Kluczowe pliki

W tym rozdziale przedstawione są informacje o kluczowych plikach systemu operacyjnego. Zostały tu opisane jedynie podstawowe dane na ich temat, więcej można znaleźć w podręczniku systemowym man, oraz info

/etc/inittab

Plik /etc/inittab przechowuje konfigurację programu init, uruchamianego w trakcie startu systemu i działającego bez przerwy do chwili jego zamknięcia. Głï¿½wnym zadaniem procesu init jest kontrola zachowania systemu w zależności od osiągniętego poziomu pracy systemu oraz w wypadku wystąpienia specjalnych zdarzeń. Poziomy pracy szczeg�łowo opisano w „Zmiana poziomu pracy systemu”.

Oto najważniejsze opcje zawarte w pliku /etc/inittab:

  • Domyślny poziom uruchomienia - wskazuje programowi init jaki poziom uruchomienia ma być wybrany jeśli wywołano go bez parametr�w lub w trakcie startu systemu. Wiersz określający tę opcję wygląda następująco: id:{$poziom}:initdefault: ($poziom to cyfra odpowiadająca poprawnemu poziomowi uruchomienia), ustawienie domyślnie trzeciego poziomu uruchomienia przedstawiono na poniższym przykładzie:

    id:3:initdefault:
  • Instrukcje uruchomienia programu mingetty™ na pierwszym terminalu wirtualnym (/dev/tty1), wywołania dla kolejnych będą bardzo podobne:

    1:12345:respawn:/sbin/mingetty --noclear tty1

  • Poniższy wiersz uruchomi program agetty™, łączący się z portem szeregowym /dev/ttyS0, w celu podłączenia terminala szeregowego:

    0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100

    Jeśli nie używamy tego rodzaju urządzeń to powyższe wywołania są dla nas zbyteczne.

  • Wywołania skrypt�w startowych - opcje te bardzo rzadko wymagają ingerencji użytkownika:

    si::sysinit:/etc/rc.d/rc.sysinit
    l0:0:wait:/etc/rc.d/rc 0
  • Obsługa specjalnych zdarzeń np. wciśnięcia kombinacji klawiszy ctrl+alt+del:

    ca::ctrlaltdel:/sbin/shutdown -t3 -r now

    Mamy sporą dowolność w zarządzaniu tym zdarzeniem, w powyższym przykładzie po naciśnięciu kombinacji ctrl+alt+del nastąpi przeładowanie systemu, aby nastąpiło zamkniecie powinniśmy użyć polecenia shutdown -h.

/etc/fstab

Plik ten przechowuje szczeg�łowe informacje o systemach plik�w, kt�re mają być montowane do odpowiednich katalog�w. Informacje w nim zawarte są odczytywane w trakcie startu systemu, dzięki temu automatycznie są montowane wszystkie woluminy (partycje) nie oznaczone opcją "noauto". Plik ten jest zazwyczaj tworzony przez instalator, jednak administrator ma możliwość, a nawet obowiązek dokonywać w nim zmian. Dla lepszego zrozumienia tematu przyjrzyjmy się przykładowemu plikowi i przeanalizujmy funkcje jakie spełniają poszczeg�lne wpisy.

#(fs_spec)	(fs_file)(fs_vfstype)	(fs_mntops)	(fs_freq) (fs_passno)
/dev/hda2	/		ext3	defaults		0	0
/dev/hda3	swap		swap	defaults		0	0
proc		/proc		proc	defaults		0	0
pts		/dev/pts	devpts	gid=5,mode=600		0	0
/dev/fd0	/media/floppy	vfat	noauto			0	0
/dev/cdrom	/media/cdrom	iso9660	noauto,ro,user,unhide	0	0

Jak widzimy plik jest podzielony na wiersze, z kt�rych każdy odpowiada jednemu obsługiwanemu woluminowi. Poszczeg�lne pola oddzielone są od siebie spacją lub tabulatorem. Dane odpowiedniego rekordu wczytywane są przez skrypty startowe oraz programy takie jak: fsck, mount czy umount przez co muszą one być zapisane w uporządkowany spos�b.

Pole (fs_spec) - określa urządzenie blokowe lub zas�b sieciowy przeznaczony do zamontowania, na przykład partycję dysku, CDROM czy udział NFS. Opis urządzeń masowych przedstawiono w „Nazewnictwo urządzeń masowych”, montowanie udziałï¿½w NFS przedstawiono w „NFS - Network File System”.

Pole (fs_file) - wskazuje na miejsce, w kt�rym ma być zamontowany dany system plik�w, na przykład dla partycji wymiany (ang. "swap partition") to pole powinno zawierać wartość "none", a dla CDROM-u "/media/cdrom".

Pole (fs_vfstype) - określa typ systemu plik�w jaki znajduje się na danym urządzeniu. Najbardziej powszechne obecnie i obsługiwane systemy plik�w to:

  • ext2 - podstawowy system plik�w w Linuksie

  • ext3 - j.w. tyle że z księgowaniem

  • reiserfs - zaawansowany system plik�w z księgowaniem

  • xfs - zaawansowany system plik�w z księgowaniem

  • vfat - używany w starszych systemach Microsoftu, znany r�wnież jako FAT32

  • ntfs - system plik�w wsp�łczesnych wersji system�w Microsoftu

  • iso9660 - używany na płytach CD-ROM

  • nfs - sieciowe udziały dyskowe NFS

  • swap - obszar wymiany

Pole (fs_mntops) udostępnia szereg znacznik�w systemowych, kt�re mogą mieć kluczowe znaczenie dla bezpieczeństwa i wydajności naszego systemu. Przykładowo następujące znaczniki oznaczają:

  • defaults - domyślny zestaw opcji, użyteczny w większości wypadk�w.

  • nodev - zapobiega rozpoznawaniu przez jądro dowolnych plik�w urządzeń, znajdujących się w systemie plik�w

  • noexec - zapobiega wykonywaniu plik�w wykonywalnych w danym systemie plik�w

  • nosuid - zapobiega uwzględnianiu bit�w set-UID oraz set-GID w przypadku dowolnego pliku wykonywalnego

  • ro - powoduje zamontowanie systemu plik�w w trybie tylko do odczytu, powstrzymując wszelkie modyfikacje informacji dotyczących plik�w, włączając w to na przykład czas dostępu do pliku

Pole (fs_freq) jest używane przez program dump do wykrywania, kt�ry system plik�w ma mieć wykonywaną kopię bezpieczeństwa. Jeżeli nie ma informacji o tym polu, zwracana jest wartość 0 i dump przyjmuje, że dany system plik�w nie musi być mieć robionych kopii danych. Jeśli nie korzystamy z tego programu możemy wszędzie ustawić wartość 0.

Pole (fs_passno) jest używane przez program fsck aby zadecydować, jaka powinna być kolejność sprawdzania system�w plik�w podczas ładowania systemu. Głï¿½wny system plik�w powinien mieć (fs_passno) r�wną 1, zaś inne systemy plik�w powinny mieć (fs_passno) r�wne 2. Jeżeli to pole nie posiada żadnej wartości lub jest ona r�wna 0 to wtedy dany system plik�w nie jest sprawdzany. Sprawdzania nie wymagają właściwie systemy plik�w z księgowaniem, gdyż są bardzo odporne na awarie.

Uwaga! Najważniejszym woluminem w systemie jest ten przypisywany do korzenia drzewa katalog�w (katalog "/"), dlatego należy bardzo ostrożnie dokonywać zmian jego konfiguracji. Błąd może spowodować problemy z uruchomieniem systemu operacyjnego.

/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ę z p�l rozdzielonych dwukropkiem:

login:haslo:UID:GID:komentarz:katalog_domowy:powłoka
np.:
marek:x:502:1000:Marek Kowalski:/home/users/marek:/bin/bash

Uwagi: Znak "x" w miejscu hasła oznacza że jest przechowywane w osobnym pliku (/etc/shadow). UID to unikalny identyfikator użytkownika, zaś GID to unikalny numer grupy głï¿½wnej użytkownika - zdefiniowany w pliku /etc/group. Powłoka (shell) musi być zdefiniowana w pliku /etc/shells. Oznaczenie powłoki jako /bin/false oznacza że jest to konto użytkownika systemowego. Jest to specjalny rodzaj kont na kt�re zwykli użytkownicy nie mogą się zalogować

Plik ten jak i opisany poniżej /etc/shadow mają kluczowe znaczenie dla systemu, dlatego nie należy ich edytować ręcznie. Narzędzia, służce do tego, opisano w „Konta użytkownik�w”.

/etc/shadow

Plik zawierający zakodowane hasła i dodatkowe informacje dla systemu uwierzytelniania użytkownik�w np.:

marek:$1$qb/waABk$F3Y6dKw/6ekZPfcoTpzks/:12575:0:99999:5:::

/etc/group

Plik zawierający nazwy utworzonych grup i przypisanych do nich użytkownik�w według schematu:

nazwa_grupy::GID:login1,login2,login3,...
np.:
audio::23:kasia,marek

Uwagi: Pierwsze pole to unikalna nazwa grupy, drugie nie ma we wsp�łczesnych systemach uniksowych już zastosowania, GID to niepowtarzalny identyfikator grupy, trzecie pole zawiera listę identyfikator�w użytkownik�w zapisanych do tej grupy.

Podobnie jak dwa powyższe, ten plik też powinien być modyfikowany przez przeznaczone do tego programy, ich opis zawarto w „Grupy”

/etc/shells

Zawiera listę dostępnych dla użytkownik�w powłok np.:

/bin/ksh
/bin/sh
/bin/bash

Aby użytkownik miał możliwość korzystania z danej powłoki musi być ona zdefiniowana w tym pliku

/etc/motd

Wiadomość dnia (ang. Message of the day) - Powitanie użytkownika: treść tego pliku wyświetlana po uwierzytelnieniu się w systemie.

/etc/nologin

Plik tworzony przez administratora - blokuje możliwość logowania się użytkownik�w do systemu. Przy pr�bie logowania wyświetlana jest jego treść.

Rozdział 12. Pamięci masowe

Ten rozdział opisuje operacje dyskowe takie jak podział na partycje, tworzenie system�w plik�w i inne zaawansowane zagadnienia

Wstęp

Uwaga! Wszelkie operacje dyskowe narażają nas na nieodwracalną utratę danych, dlatego zaleca się stworzenie kopii zapasowej danych i zachowanie szczeg�lnej ostrożności.

Nazewnictwo urządzeń masowych

Numerowanie partycji

W Linuksie mogą być obsłużone cztery partycje podstawowe lub trzy podstawowe i jedna rozszerzona. Takie partycje są numerowane od 1 do 4, zaś dyski logiczne kolejnymi numerami począwszy od 5. Podawanie numeru partycji ma sens wyłącznie w wypadku dysk�w twardych, nie podajemy ich dla urządzeń takich jak napędy optyczne (CD/DVD), dyskietki czy też woluminy logiczne. Nie podajemy go r�wnież w przypadku odwołania do urządzenia fizycznego np. używając programu fdisk™ lub hdparm™.

Aby zorientować się w układzie partycji urządzenia możemy użyć programu fdisk™ np.:

# fdisk -l /dev/hda

Urządenia ATA (IDE)

Urządzenia ATA nazywane są wg. schematu: /dev/hd{$x}{$Nr} np. /dev/hda1.

Parametr {$x} jest małą literą identyfikującą fizyczne urządzenie, zaś {$Nr} to om�wiony powyżej numer partycji dyskowej. W odr�żnieniu od urządzeń SATA i SCSI w interfejsie IDE litery te mają swoje specjalne znaczenie - wskazują spos�b podłączenia urządzenia:

  • "a" -dysk nadrzędny (primary) podłączony do pierwszego kanału IDE

  • "b" -dysk podrzędny (slave) podłączony do pierwszego kanału IDE

  • "c" -dysk nadrzędny (primary) podłączony do drugiego kanału IDE

  • "d" -dysk podrzędny (slave) podłączony do drugiego kanału IDE

Urządenia SCSI/SATA/USB Storage

Dyski twarde i pamięci flash mają oznaczenia /dev/sd{$x}{$Nr} np. /dev/sda1. Symbol {$x} to oznaczenie fizycznego urządzenia, kt�rym przypisywane są kolejne litery zaczynając od "a", zaś {$Nr} to opisany na początku numer partycji. Napędy optyczne (CD/DVD) są oznaczane jako /dev/sr{$Nr} np.: /dev/sr0.

Dyskietki elastyczne

Do stacji dyskietek odwołujemy się za pomocą urządzenia /dev/fd0 lub /dev/fd1.

LVM

Woluminy logiczne mają dowolne nazwy - nadawane przez administratora w trakcie ich zakładania. Jeśli pliki urządzeń nie są utworzone statycznie, to mogą być wykrywane automatycznie (przy starcie systemu) i wtedy nadawane są im nazwy w konwencji /dev/mapper/$VG-$LV np. /dev/mapper/sys-home.

RAID programowy

Urządzenia mają nazwy wg. schematu: /dev/md{$nr}, np. /dev/md0, kt�re z kolei jest symlinkiem do /dev/md/0.

Urządzenia w GRUB-ie

GRUB ze względu na swoja wieloplatformowość używa własnego schematu nazewnictwa. Dyski fizyczne są widoczne jako (hd{$NR}), np. (hd1) zaś partycje jako (hd{$NR1},{$NR2}) np. (hd1,2). Urządzenia te nie są bezpośrednio powiązane z plikami urządzeń w katalogu katalogu /dev i programy poza GRUB-em nie mogą z nich korzystać. Więcej w opisie bootloadera, w „GRUB”.

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ę rozszerzoną możemy podzielić na liczne dyski logiczne (logical partitions).

Partycje szerzej opisano m.in. w Wikipedii, zaś spos�b ich oznaczania przedstawiono w „Nazewnictwo urządzeń masowych”. Opis systemu plik�w-urządzeń z katalogu /dev odnajdziemy w „Urządzenia”.

Zanim zaczniemy

Operacje na partycjach mogą skończyć się utratą danych, dlatego warto najpierw zrobić zrzut tablicy partycji do pliku:

# sfdisk -d /dev/hda > hda.out

Jeśli zechcemy powr�cić do poprzedniego układu partycji wystarczy, że wydamy polecenie:

# sfdisk /dev/hda < hda.out

Wymagane miejsce na system

Wymagania dyskowe w PLD (nie licząc danych, log�w i obszaru wymiany):

  • instalacja minimalna - poniżej 150MB

  • serwer - dużo zależy od zainstalowanych usług, należy założyć, że zajmie co najmniej 250MB; dla większej elastyczności i stabilności warto przeznaczyć większy zapas miejsca, niż w przypadku maszyn domowych.

  • stacja robocza z XWindow - należy przeznaczyć przynajmniej 1GB miejsca

Logi i dane mogą zajmować bardzo duże ilości miejsca, dlatego musimy podejść do tego indywidualnie.

Osobnym zagadnieniem jest wielkość obszaru wymiany, stara zasada m�wiąca, aby swap był dwukrotnie większy niż pamięć operacyjna, sprawdza się większości wypadk�w. Należy jednak podejść do tego elastycznie i dobrać objętość obszaru wymiany odpowiednio do charakterystyki pracy maszyny.

Plan podziału dysku

Dla stacji roboczych zazwyczaj wystarczy podział na dwie partycje, kt�re będą użyte dla: "/" (głï¿½wnego drzewa) i obszaru wymiany (swap). W przypadku serwer�w dużo będzie zależało od zastosowania maszyny i preferencji administratora, lecz jako minimum należy dodatkowo przydzielić partycję dla gałęzi /var.

W obu zastosowaniach dla wygody i bezpieczeństwa nierzadko tworzy się dodatkową partycję dla katalogu /home, pozwala to na łatwiejsze zarządzanie uprawnieniami i ułatwia wiele operacji. Partycję na katalogi domowe należy traktować jako obowiązkową jeśli na maszynie będą dostępne konta z dostępem do powłoki (shella). Jej wielkość bezpośrednio zależy od planowanej ilości przechowywanych danych.

Jeśli od maszyny wymagamy zwiększonej niezawodności można utworzyć małą partycję dla katalogu /boot, w kt�rym są trzymane ważne pliki systemowe. Dane w katalogu /boot zaraz po zainstalowaniu nie powinny przekroczyć ok. 7MB, aby więc mieć możliwość instalacji kilku kerneli, musimy przeznaczyć na taką partycję co najmniej 25MB miejsca. Dzięki temu zwiększymy szanse na uruchomienie systemu z uszkodzonym głï¿½wnym systemem plik�w. Jest to szczeg�lnie zalecane w przypadku użycia bootloadera GRUB, ze względu na jego specyficzną konstrukcję, więcej na temat GRUB-a znajdziemy w „GRUB”.

Programy do zarządzania partycjami

fdisk™ - interaktywny program do zarządzania partycjami, wydane polecenia zostaną wykonane na samym końcu - po operacji zapisu zmian. Właśnie ten program zostanie użyty w naszych przykładach, wywołujemy go z parametrem określającym urządzenie z katalogu /dev.

cfdisk™ - wygodne narzędzie, wyposażone w semigraficzny interfejs użytkownika. Tw�rcy ułatwili życie początkującym, poprzez ukrywanie partycji rozszerzonych, tworzeniem i ich usuwaniem zajmuje się program bez naszego udziału. Podobnie jak fdisk™ zapisuje zmiany do tablicy partycji na samym końcu. Wywołujemy go z parametrem określającym urządzenie z katalogu /dev.

parted™ - jest potężnym narzędziem, umożliwiającym wiele operacji niedostępnych dla obu poprzednich program�w. Opr�cz podstawowych operacji na partycjach umożliwia takie operacje jak zmianę wielkości partycji, tworzenie obraz�w partycji i inne. Istotną r�żnicą w działaniu w por�wnaniu dla powyższych narzędzi jest natychmiastowe wprowadzanie zmian, stąd zaleca się zachowanie dużej ostrożności przy korzystaniu z niego.

GParted™/QtParted™ - programy dla X-Window oparte o parted™. Mają interfejs wzorowany na programie Partion Magic z systemu MS Windows.

sfdisk™ - program obsługiwany za pomocą argument�w i danych przesyłanych na wejście standardowe. Jest dosyć trudny w obsłudze ale za to może być używany w skryptach.

Podział

Poniższe przykłady będą dotyczyć programu fdisk™, cfdisk™ jest bardzo prosty w obsłudze i nikt nie powinien mieć nim problem�w, zaś opis parted™ wykracza poza ramy tego rozdziału.

Aby sprawdzić czy na dysku /dev/sda są jakieś partycje użyjemy następującego polecenia:

# fdisk -l /dev/sda

Założyłem, że na dysku nie ma innych partycji, jeśli w naszym wypadku takie są to musimy je najpierw usunąć. Kiedy dysk jest gotowy uruchamiamy program fdisk:

# fdisk /dev/sda
Command (m for help):

wybieramy opcję n (nowa partycja)

Command action
   e   extended
   p   primary partition (1-4)

Program pyta o rodzaj rodzaj partycji, kt�rą ma utworzyć. Tu wyb�r zależy od nas ale jeśli dysk ma mieć nie więcej niż cztery partycje, to śmiało możemy zostać przy partycjach podstawowych - w naszym przykładzie wybieramy opcję p (podstawowa partycja). Dalej program zapyta nas o numer partycji, pierwszy i rozmiar partycji. Rozmiar możemy podać w cylindrach, KiB, MiB lub GiB.

Dla kolejnych partycji powtarzamy cały proces, aż uzyskamy to co zaplanowaliśmy. Opcją p) wyświetlamy planowany układ partycji. Po zakończeniu podziału przypisujemy typy partycji opcją t) podając kolejno: numer partycji, Jeśli wybrany podział nam odpowiada to zapisujemy zmiany na dysk (do tablicy partycji) przez wyb�r opcji w.

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 „Systemy plik�w”.

Systemy plik�w

W tym rozdziale om�wimy tworzenie jednej z dw�ch możliwych struktur na partycji lub urządzeniu - systemu plik�w lub obszaru wymiany (swap).

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. Swoją pozycję uzyskał dzięki temu, że jest prostym i stosunkowo wydajnym systemem plik�w. Ponadto jako jeden z niewielu system�w plik�w nadaje się do użytku na dyskietkach i bardzo małych partycjach.

W pozostałych zastosowaniach możemy śmiało użyć system�w plik�w z tzw. księgowaniem (journaling) np.: ext3, ReiserFS, XFS, JFS ze względu na duże bezpieczeństwo przechowywania danych. Dla zastosowań wymagających wysokiej niezawodności najlepszy będzie ext3, pozostałe z wymienionych można polecić w systemach wymagających dużej wydajności i wszędzie tam gdzie występują duże ilości plik�w.

Aby z partycji mogły r�wnież korzystać systemy Microsoftu musimy utworzyć na niej system plik�w vfat. Utracimy jednak wtedy wszystkie zalety uniksowych system�w plik�w.

Tworzenie systemu plik�w

Programy do tworzenia konkretnych system�w plik�w r�żnią się nazwami, łatwo je rozpoznamy gdyż ich nazwy zaczynają się od "mkfs." np.:

/sbin/mkfs.ext2
/sbin/mkfs.ext3
/sbin/mkfs.reiserfs
/sbin/mkfs.msdos
/sbin/mkfs.vfat
/sbin/mkfs.xfs

Aby utworzyć system plik�w wywołujemy odpowiedni program z nazwą urządzenia jako parametrem, na poniższym przykładzie przedstawiono tworzenie systemu plik�w ext2 na drugiej partycji podstawowej:

# /sbin/mkfs.ext2 /dev/sda2

Więcej o nazewnictwie urządzeń masowych w „Nazewnictwo urządzeń masowych”.

Powyżej przedstawiono jedynie skr�coną listę wszystkich dostępnych program�w, programy te są dostępne w odpowiednich pakietach, przykładowo narzędzia dla systemu plik�w xfs odnajdziemy w pakiecie xfsprogs.

Tworzenie obszaru wymiany

Do tworzenia obszaru wymiany używamy programu mkswap np.:

# mkswap /dev/hda5

Podmontowanie partycji / aktywacja swapu

Partycje i obszary wymiany są montowane/włączane przez rc-skrypty w trakcie uruchamiania systemu wg. opcji zawartych w pliku /etc/fstab (o ile tam zostały dodane). W pozostałych wypadkach systemy plik�w montujemy poleceniem mount z odpowiednimi opcjami np.:

# mount /dev/sda2 /katalog_docelowy

System plik�w zostanie automatycznie wykryty a opcje zostaną ustawione na wartość "defaults". Więcej na ten temat odnajdziemy w podręczniku systemowym.

Obszary wymiany aktywujemy następująco:

# /sbin/swapon /dev/hda5

Szczeg�łowy opis pliku /etc/fstab oraz rc-skrypt�w przedstawiono w „Kluczowe pliki”.

Poznanie typu systemu plik�w

Aby dowiedzieć się jaki typ systemu plik�w jest na danej partycji, użyjemy programu file™ z opcją -s:

# file -s /dev/hda2
/dev/hda1: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

Listę urządzeń z utworzonymi do tej pory systemami plik�w uzyskamy za pomocą programu blkid:

# blkid
/dev/md/0: UUID="4f6fc9cc-9a3a-42bd-9e47-50ecfbeb090b" TYPE="xfs" 
/dev/hda1: UUID="6d7abd95-9731-4406-b154-78ee66fc6c7f" TYPE="ext2" 
/dev/sda: UUID="4f6fc9cc-9a3a-42bd-9e47-50ecfbeb090b" TYPE="xfs" 
/dev/sdb: UUID="4f6fc9cc-9a3a-42bd-9e47-50ecfbeb090b" TYPE="xfs"

Aby zobaczyć systemy plik�w podmontowanych urządzeń możemy użyć programu mount:

/dev/hda1 on /boot type ext2 (rw,sync)
/dev/md/0 on /vservers type xfs (rw,noatime,usrquota)

Formatowanie

Obecnie nie formatuje się dysk�w twardych, można to robić jedynie z dyskietkami elastycznymi za pomocą narzędzia fdformat™. Robi się to wyłącznie dla uzyskania jakiejś nietypowej pojemności nośnika, w pozostałych wypadkach operacja ta jest zbędna, gdyż dyskietki podobnie jak dyski twarde są formatowane fabrycznie. Takie formatowanie nazywane jest także tzw. formatowaniem niskopoziomowym.

To co obecnie potocznie określa się jako "formatowanie" jest złożeniem dw�ch operacji: podziału na partycje a następnie utworzeniem system�w plik�w.

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ętowych kt�re wymagają specjalnego kontrolera dysk�w (dość drogiego), macierze RAID programowe zakłada się na dyskach podłączonych do zwykłego kontrolera IDE, SATA lub SCSI i całą obsługę przekazuje do odpowiedniego oprogramowania (np: mdadm™).

Macierze możemy zakładać zar�wno na całych dyskach, jak i na odpowiednio przygotowanych partycjach, przy czym zakładanie na partycjach daje więcej możliwości konfiguracji. Zar�wno korzystając z całych dysk�w jak i partycji należy pamiętać o tym że najmniejsza partycja lub dysk decyduje o wielkości zakładanej macierzy (miejsce ponad jest tracone), dlatego też należy raczej korzystać z takich samych rozmiar�w dysk�w lub partycji.

Poniżej zamieszczono listę i opis dostępnych rodzaj�w macierzy dla mdadm™, w nawiasach podano nazwy parametr�w programu:

  • RAID 0 (raid0, 0, stripe) - striping czyli połączenie dw�ch dysk�w (partycji) z przeplotem danych, zwiększa się wydajność w por�wnaniu z pojedynczym dyskiem, obniża odporność na awarie dysk�w - awaria jednego dysku to utrata wszystkich danych.

  • RAID 1 (raid1, 1, mirror) - kopie lustrzane, dyski są w dw�ch jednakowych kopiach, w przypadku awarii jednego drugi przejmuje role pierwszego. Wydajność tak jak pojedynczy dysk, duże bezpieczeństwo, wadą jest duża strata pojemności (n/2 - n-liczba dysk�w w macierzy)

  • RAID 4 (raid4, 4) - dane są rozpraszane na kolejnych dyskach a na ostatnim zapisywane są dane parzystości, zwiększone bezpieczeństwo danych przy zachowaniu dużej pojemności (n-1). Wymaga przynajmniej trzech dysk�w, wydajność ograniczona przez dysk parzystości

  • RAID 5 (raid5, 5) - rozpraszane są zar�wno dane jak i informacje o parzystości na wszystkich dyskach, dzięki czemu wydajność jest wyższa niż w RAID 4; pojemność n-1, wymaga przynajmniej trzech dysk�w.

  • RAID 6 (raid6, 6) - jest to rzadko stosowana, rozbudowana macierz typu 5. Jedyną r�żnicą jest dwukrotne zapisanie sum kontrolnych. Dzięki temu macierz może bez utraty danych przetrwać awarię dw�ch dysk�w. Wymaga minimum czterech dysk�w, jej pojemność to n-2.

  • Tryb liniowy (linear) - czyli połączenie dw�ch dysk�w w jeden w ten spos�b że koniec pierwszego jest początkiem drugiego, nie zapewnia absolutnie żadnego bezpieczeństwa a wręcz obniża odporność na awarie dysk�w.

Najczęściej stosuje się macierze RAID1 i RAID5, do specyficznych zastosowań używa się RAID0, pozostałe są rzadziej spotykane.

Instalacja

Instalujemy następujące pakiety:

# poldek -i mdadm

A jeśli zaplanowaliśmy umieszczenie głï¿½wnego systemu plik�w (/) na macierzy, musimy dodatkowo zainstalować pakiet mdadm-initrd:

# poldek -i mdadm-initrd

oraz możemy opcjonalnie dla dysk�w ATA przy korzystaniu z device-mapera zainstalować dodatkowo:

# poldek -i dmraid

Planowanie macierzy

Dosyć popularnym rozwiązaniem jest utworzenie identycznego zestawu partycji na każdym z dysk�w, a następnie spięcie odpowiednich partycji w macierze. Aby ułatwić sobie zadanie możemy najpierw podzielić jeden z dysk�w, a na następne urządzenia skopiować układ tablicy partycji np.:

# sfdisk -d /dev/sdc | sfdisk /dev/sdd

jak się łatwo domyśleć w powyższym przykładzie kopiujemy z dysku /dev/sdc na /dev/sdd.

Garść porad:

  • Kernel może być ładowany wyłącznie z macierzy RAID 1, jeśli więc będziemy chcieli używać np. RAID5 na głï¿½wnym systemie plik�w to musimy umieścić gałąź /boot na osobnej, niewielkiej macierzy RAID1. Opis konfiguracji bootloadera do obsługi macierzy znajduje się w dalszej części artykułu.

  • Należy oprzeć się pokusie umieszczenia obszaru wymiany (swap) na RAID0, gdyż awaria jednego z dysk�w może doprowadzić do załamania systemu.

  • Urządzenia, z kt�rych składamy macierz powinny być r�wnej wielkości, w przeciwnym razie wielkość macierzy będzie wyznaczana przez najmniejszą partycję.

Więcej informacji o podziale na partycje i planowaniu miejsca na dysku zdobędziemy w „Podział na partycje”.

Tworzenie macierzy RAID

Przystępujemy do zakładania macierzy na partycjach za pomocą polecenia mdadm:

mdadm -C {$dev_RAID} --level={$rodzaj} --raid-devices={$ilość_urzadzen} {$urzadzenia}

  • -C, --create - utw�rz nową macierz.

  • -l, --level - ustaw poziom RAID np: linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6; Jak możemy zauważyć niekt�re opcje są synonimami. Przy opcji Building pierwsze mogą być użyte: raid0, raid1, raid4, raid5.

  • -n, --raid-devices - liczba aktywnych urządzeń (dysk�w) w macierzy

  • -x, --spare-devices - liczba zapasowych (eXtra) urządzeń w tworzonej macierzy. Zapasowe dyski można dodawać i usuwać także p�źniej.

  • -v --verbose - tryb "gadatliwy"

  • --auto=yes - automatyczne tworzenie urządzeń w /dev/ przez mdadm (stosowane zwykle przy użyciu UDEVa), więcej w Poradach na końcu rozdziału.

Przykłady tworzenia macierzy r�żnego typu:

  • RAID0 na dw�ch partycjach - /dev/sda1 i /dev/sdb1 jako /dev/md0

    # mdadm -C -v /dev/md0 --level=0 -n 2 /dev/sda1 /dev/sdb1

  • RAID1 na dw�ch partycjach - /dev/sdc1 i /dev/sdd1 jako /dev/md1

    # mdadm -C -v /dev/md1 --level=1 -n 2 /dev/sdc1 /dev/sdd1

  • RAID5 na 4 partycjach w tym jedna jako zapasowa (hot spare), jeśli nie podasz ile ma być zapasowych partycji domyślnie 1 zostanie zarezerwowana na zapasową

    # mdadm -C -v /dev/md2 --level=5 -n 4 --spare-devices=1 \
    /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3

Konfiguracja

Po utworzeniu macierzy postępujemy z nią dalej jak z partycją, czyli zakładamy system plik�w i odwołujemy się do niej np: jako /dev/md0 np.:

# mkfs.xfs /dev/md0

Teraz możemy dokonać odpowiednich wpis�w w pliku /etc/fstab.

Aby macierz była automatycznie składana przy starcie systemu musimy dodać odpowiednie wpisy do pliku /etc/mdadm.conf. Na początek dodajemy wiersz, w kt�rym wymieniamy listę urządzeń z kt�rych budowane są macierze (można używać wyrażeń regularnych):

DEVICE /dev/sd[abcd][123]

Następnie dodajemy definicje macierzy, możemy to zrobić automatem:

# mdadm --detail --scan >> /etc/mdadm.conf:

lub samodzielnie, poprzez dodanie następujących wierszy:

ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1
ARRAY /dev/md1 devices=/dev/sdc1,/dev/sdd1
ARRAY /dev/md2 devices=/dev/sda3,/dev/sdb3,/dev/sdc3,/dev/sdd3

Macierze (inne niż rootfs) są składane przez rc-skrypt /etc/rc.d/rc.sysinit, na podstawie powyższych wpis�w konfiguracyjnych, zatem po restarcie maszyny będziemy już z nich korzystać. Jeśli mamy macierz z głï¿½wnym systemem plik�w, to musimy jeszcze przygotować initrd i bootloader (poniżej).

Przy ręcznym składaniu macierzy przydane może być polecenie skanujące urządzenia blokowe w poszukiwaniu istniejących macierzy:

# mdadm --examine --scan -v

Initrd

Jeśli głï¿½wny system plik�w ma być na macierzy to musimy wygenerować obraz initrd z modułami, kt�re pozwolą na złożenie macierzy. Na początek musimy mieć zainstalowany pakiet mdadm-initrd. Generowanie takiego initrd przebiega dokładnie tak samo jak dla zwykłego urządzenia blokowego, musimy się tylko upewnić, że do obrazu trafiły dodatkowo moduły: md-mod, odpowiednio raid0, raid1... i ewentualnie xor. Generowanie obrazu initrd szczeg�łowo zostało opisane w „Initrd”.

Bootloader

Jeśli na raidzie ma się znaleźć głï¿½wny system plik�w (bez /boot), to konfiguracja jest identyczna jak w przypadku klasycznych urządzeń blokowych.

Jeśli gałąź /boot ma się znaleźć na macierzy (wyłącznie RAID1) to powinniśmy zainstalować bootloader na każdym z dysk�w wchodzących w skład macierzy, dzięki czemu będziemy mogli uruchomić system mimo awarii jednego z dysk�w. RAID0 i RAID2-5 nie są obsługiwane przez LILO\GRUB

W LILO™ w pliku /etc/lilo.conf należy podać odpowiednie urządzenie dla opcji root i boot:

boot=/dev/md0
 raid-extra-boot=mbr-only
 
 image=/boot/vmlinuz
     label=pld
     root=/dev/md0
     initrd=/boot/initrd

Opcja w opcji raid-extra-boot wskazuje urządzenia na kt�rych ma zostać zainstalowany bootloader (urządzenia wchodzące w skład /dev/md0). Po zmodyfikowaniu konfiguracji musimy zaktualizować bootloader poleceniem lilo.

Jeśli używamy Grub-a™ wywołujemy z powłoki:

# grub
grub>

następnie szukamy gdzie znajdują sie pliki bootloadera,

grub>find /boot/grub/stage1

jeśli /boot jest oddzielną partycją to /grub/stage1 i otrzymujemy wynik, np:

(hd0,0)
(hd1,0)


Now you want to make sure that grub gets installed into the master boot
record of your additional raid drives so that if id0 is gone then the next
drive has a mbr loaded with grub ready to go.  Systems will automatically go
in drive order for both ide and scsi and use the first mbr and active
partitions it finds so you can have multiple drives that have mbr's as well
as active partitions and it won't affect your system booting at all.

So using what was shown with the find above and already knowing that hd0
already has grub in mbr, we then run:

Grub>device (hd0)/dev/sda (/dev/hda for ide)
Grub>root (hd0,0)
Grub>setup (hd0)

i to samo dla dysku drugiego czyli:

Grub>device (hd1) /dev/sdb (/dev/hdb for ide)
Grub>root (hd1,0)
Grub>setup (hd1)

Grub will then spit out all the commands it runs in the background of setup
and will end with a successful embed command and then install command and
end with .. succeeded on both of these commands and then Done returning to
the grub> prompt.

Notice that we made the second drive device 0.  Why is that you ask?
Because device 0 is going to be the one with mbr on the drive so passing
these commands to grub temporarily puts the 2nd mirror drive as 0 and will
put a bootable mbr on the drive and when you quit grub you still have the
original mbr on sda and will still boot to it till it is missing from the
system.

You have then just succeeded in installing grub to the mbr of your other
mirrored drive and marked the boot partition on it active as well.  This
will insure that if id0 fails that you can still boot to the os with id0
pulled and not have to have an emergency boot floppy.

Bootloadery szczeg�łowo opisaliśmy w „Wstęp”.

Diagnostyka

Skr�cone informacje o macierzy:

# mdadm --query /dev/md0

Poniżej podałem przykłady dw�ch poleceń, kt�re pozwalają odczytać dokładne dane macierzy i jej stan:

# mdadm --detail /dev/md0

# cat /proc/mdstat

Porady

  • Mając dwie macierze RAID1 np: /dev/md0 i /dev/md1, możemy utworzyć macierz RAID10 (strip dw�ch mirror�w) jako /dev/md2

    # mdadm -C -v /dev/md2 --level=1 -n 2 /dev/md0 /dev/md1

    analogicznie RAID01 tworzymy mając dwie macierze RAID0.

  • Aby samemu złożyć macierz (z np: PLD Live CD™) wydajemy polecenie, kt�re może wyglądać następująco:

    # mdadm -A /dev/md0 /dev/hda /dev/hdb

  • Jeśli macierz jest składana w trakcie startu systemu to automatycznie tworzony jest plik urządzenia /dev/mdX. W trakcie tworzenia macierzy, lub gdy macierz nie startuje wraz z systemem, możemy skorzystać z gotowych urządzeń w /dev (pakiet dev) lub samemu je utworzyć (pakiet udev). Udev nie tworzy urządzeń /dev/md0, więc musimy w tym celu użyć parametru --auto=yes w wywołaniach programu mdadm, lub utworzyć je poleceniem mknod. Urządzeniu nadajemy major o wartości 9 i kolejny, niepowtarzalny numer minor. Nie musimy się martwić o moduły, są on ładowane automatycznie przez mdadm lub initrd. Więcej o UDEV w „Udev - dynamiczna obsługa sprzętu”.

  • Wraz z pakietem mdadm dostarczany jest rc-skrypt uruchamiający mdadm w trybie monitorowania (jako demona). Więcej szczeg�łï¿½w w dokumentacji programu mdadm.

  • Migracja z pojedynczego dysku na RAID1

    Instalacja linuksa na raid1

    Naprawa zdegradowanej macierzy

LVM

LVM™ (Logical Volume Management) to system zaawansowanego zarządzania przestrzenią dyskową, kt�ry jest o wiele bardziej elastyczny, niż klasyczne partycje dyskowe. To wiąże się z bardziej złożoną konstrukcją, kt�ra składa się z następujących struktur:

  • PV (physical volumes) - fizyczne woluminy: są bezpośrednio związane z partycjami dyskowymi (np. /dev/hda1, /dev/sdb3).

  • VG (volume groups) - grupy wolumin�w: składają się z co najmniej jednego PV, ich wielkość to suma objętości wszystkich PV należących do danej grupy. Uzyskane miejsce dyskowe może być dowolnie dysponowane pomiędzy kolejne LV.

  • LV (logical volumes) - woluminy logiczne: są obszarami użytecznymi dla systemu (podobnie jak partycje dyskowe). LV są obszarami wydzielonymi z VG, zatem suma wielkości wolumin�w nie może zatem przekraczać objętości VG, do kt�rego należą.

Schemat LVM-u, kt�ry zostanie użyty jako przykład w tym rozdziale:

 PV1   PV2
   \  /
    VG
   / | \
LV1 LV2 LV3

Planowanie wolumin�w

Musimy wyznaczyć urządzenia blokowe kt�rych chcemy użyć do stworzenia struktur PV. Jeśli głï¿½wny system plik�w ma być umieszczony na woluminie logicznym to musimy przeznaczyć małą partycję dla gałęzi /boot, gdyż bootloadery lilo™ i grub™ nie potrafią czytać danych z wolumin�w. Szczeg�łowy opis dzielenia dysk�w na partycje zamieściliśmy w „Podział na partycje”.

Załï¿½żmy, że mamy dwa dyski twarde po 250GB (/dev/sda i /dev/sdb), kt�rych powierzchnię chcemy połączyć i rozdysponować pod system operacyjny. Jako, że rootfs także będzie na woluminie to rozplanowanie miejsca może wyglądać następująco:

  • /dev/sda1: mała partycja na /boot o pojemności 50MB

  • /dev/sda2: druga partycja dla wolumin�w (reszta dysku)

  • /dev/sdb: cały dysk dla wolumin�w

VG będzie miało rozmiar ~500GB miejsca, z czego 400GB przydzielimy do użytku, a resztę pozostawimy dla przyszłych, nieokreślonych na razie zastosowań. Miejsce na VG rozdysponujemy następująco:

  • swap: 5GB

  • / (rootFS): 25GB

  • /home: 370GB

Instalacja

Omawiamy implementację LVM2™, zatem instalujemy pakiet lvm2, jeśli LVM ma być użyty jako głï¿½wny system plik�w to potrzebujemy jeszcze pakiet lvm2-initrd do wygenerowania odpowiedniego obrazu initrd.

Budowanie wolumin�w

Ładujemy moduł device mappera:

# modprobe dm-mod

Dzielimy dysk /dev/sda na dwie opisane powyżej partycje, a następnie wskazujemy urządzenia Physical Volumes:

# pvcreate /dev/sda2 /dev/sdb

tworzymy Volume Group o nazwie "vgsys" z wskazanych powyżej PV:

# vgcreate vgsys /dev/sda2 /dev/sdb

W powstałej VG tworzymy woluminy o podanych pojemnościach (-L) i dowolnych nazwach (-n):

# lvcreate -L 5GB -n swap vgsys
# lvcreate -L 25GB -n rootfs vgsys
# lvcreate -L 370GB -n home vgsys

na naszym VG pozostaje 100GB wolnego miejsca, kt�re możemy rozdysponować w przyszłości (przykład dalszej części rozdziału). Rzucającą się w oczy cechą wolumin�w logicznych jest możliwość swobodnego nadawania im nazw, co znacznie ułatwia utrzymanie porządku. Do utworzonych powyżej wolumin�w odwołujemy się za pomocą utworzonych przed chwilą urządzeń: /dev/vgsys/swap, /dev/vgsys/rootfs i /dev/vgsys/home. Woluminy są już gotowe do pracy, musimy jeszcze tylko utworzyć na nich systemy plik�w, co robimy jak w przypadku tradycyjnych partycji np.:

# mkswap /dev/vgsys/swap
# mkfs.xfs /dev/vgsys/rootfs
# mkfs.xfs /dev/vgsys/home

partycja dla gałęzi /boot:

# mkfs.ext2 /dev/sda1

Teraz montujemy woluminy w klasyczny spos�b i jeśli wszystko przebiegło bez błęd�w dokonujemy odpowiednich modyfikacji w /etc/fstab.

Konfiguracja startowa

Woluminy są automatycznie aktywowane przez rc-skrypt /etc/rc.d/rc.sysinit lub initrd. Moduł device mappera r�wnież jest ładowany automatycznie. Jeśli chcemy umieścić głï¿½wny system plik�w na LV, to musimy jeszcze wygenerować nowy obraz initrd, z obsługą LVM. Zostało to szczeg�łowo przedstawione w „Initrd”. W konfiguracji bootloadera ustawiamy opcję 'root=' na /dev/vgsys/rootfs. Teraz instalujemy system, instalujemy bootloader i możemy zrestartować maszynę.

Gdy zajdzie potrzeba "ręcznego" aktywowania wolumin�w (np. spod RescueCD), to na początek musimy się upewnić, że jest załadowany moduł dm-mod. Kernel nie zgłasza komunikat�w o odnalezieniu wolumin�w, tak jak ma to miejsce z partycjami, należy je odszukać za pomocą odpowiednich narzędzi: lvmdiskscan i lvscan. Jeśli odnaleźliśmy żądane struktury, to możemy je aktywować:

# vgchange -a y

Narzędzia diagnostyczne

Skr�cone informacje o każdym z rodzaju komponent�w (PV/VG/LV) wyświetlimy za pomocą program�w pvs, vgs, lvs. Więcej informacji uzyskamy za pomocą program�w: pvdisplay, vgdisplay, lvdisplay.

Do niekt�rych operacji z woluminami będziemy musieli je odmontować i deaktywować. Aby deaktywować wszystkie woluminy użyjemy polecenia

# vgchange -a n

aby wszystkie aktywować wywołujemy:

# vgchange -a y

Zarządzanie: powiększanie woluminu

Teraz przedstawimy potęgę LVM-a: pokażemy jak powiększyć wolumin, gdy dochodzimy do wniosku, że przeznaczonego miejsca jest za mało. Załï¿½żmy, że mamy woluminy utworzone zgodnie z wcześniejszymi przykładami i chcemy przeznaczyć całą dostępną wolną przestrzeń na naszym VG (100GB) dla /dev/vgsys/homes:

# lvextend  -l 100%VG  /dev/vgsys/home

Teraz, kiedy wolumin jest powiększony, musimy rozszerzyć system plik�w, w naszych przykładach jest to XFS, zatem musimy podmontować wolumin, a następnie:

# xfs_growfs /home

Operacja trwa kr�tko i nie powoduje utraty danych, jednak jak przypadku każdych operacji dyskowych, powinniśmy wcześniej wykonać kopię zapasową. Każdy system plik�w posiada własne narzędzia do zmiany rozmiaru systemu plik�w, szczeg�ły w ich dokumentacji.

Porady

Woluminy LVM powodują zwiększone ryzyko uszkodzenia danych, gdyż awaria jednego dysku może spowodować utratę wszystkich danych. Z tego powodu zaleca się tworzenie wolumin�w na macierzach RAID.

Naprawa

Awarie dysk�w często są bolesne, a nierzadko dosyć kosztowne. Istnieje wiele narzędzi do odzyskiwania danych, jednak nigdy nie gwarantują sukcesu. Dlatego warto dokonywać regularnie kopie zapasowe danych.

Uszkodzenia fizyczne

Uszkodzenia fizyczne sprawdzamy programem badblocks z pakietu e2fsprogs, uruchamiamy go poleceniem:

# badblocks -s /dev/sda

Program wypisze listę uszkodzonych blok�w

Naprawa systemu plik�w

Nazwy program�w, podobnie jak programy do tworzenia system�w plik�w, są ujednolicone (poza XFS). Zaczynają się od "fsck.":

fsck.ext2
fsck.reiserfs
fsck.vfat
fsck.jfs

do naprawy XFS-a użyjemy programu xfs_repair. Programy te r�żnią się nieco obsługą, dlatego przed użyciem każdego z nich należy zapoznać się z podręcznikiem systemowym (man/info), tak wygląda przykładowe wywołanie testu systemu plik�w XFS:

# xfs_repair /dev/sda2

Programy te nie pozwolą na sprawdzanie na systemie plik�w podmontowanym w trybie do odczytu i zapisu. Powinniśmy w og�le nie montować takiego systemu plik�w, a przynajmniej podmontować w trybie tylko do odczytu.

Nieco bardziej złożone jest sprawdzanie głï¿½wnego systemu plik�w jeśli uruchomiliśmy system w trybie jednego użytkownika. Problemem jest konieczność przemontowania systemu plik�w w tryb ro. Niekt�re programy mogą sprawdzać w pliku /etc/mtab czy system plik�w jest w trybie tylko do odczytu. Może to dać nieprawidłowe wyniki, gdyż zazwyczaj gałąź /etc leży na głï¿½wnym systemie plik�w i w pliku tym nie nastąpią żadne zmiany po takim przemontowaniu. Można to obejść wcześniej modyfikując wpis w /etc/mtab, kiedy już to zrobimy wykonujemy polecenie:

# mount / -o ro,remount

Naprawienie systemu plik�w nie gwarantuje, że nie zostały uszkodzone żadne pliki. Jeśli na naprawianym systemie plik�w były jakieś dane systemowe, to powinniśmy wykonać kontrolę ich integralności, opisaną dokładnie w „Zaawansowane operacje”.

Rozdział 13. Administracja

W tym rozdziale znajdziesz informacje dotyczące administracji systemem PLD

Ratowanie systemu

Wstęp

W tym rozdziale pokażemy co można zrobić w wypadku, jeśli nastąpiła awaria systemu, uniemożliwiająca normalne uruchomienie. Musimy uzyskać dostęp do urządzeń lub plik�w na dysku twardym, możemy w tym celu spr�bować uruchomić system na niskim poziomie pracy, a jeśli to się nie powiedzie, to użyć operacji chroota z innego systemu np. dystrybucji typu live.

Uruchomienie na niskim poziomie pracy

Możemy uruchomić system z pominięciem wielu czynności wykonywanych przez skrypty startowe. Operacja polega na przekazaniu do kernela odpowiednich parametr�w, kt�re wymuszą użycie przez proces init specjalnie przygotowanego zestawu rc-skrypt�w.

Interesuje nas poziom 1 lub single (tryb jednego użytkownika), tak też nazywają się parametry, kt�re musimy przekazać do kernela. Parametry przekazujemy do jądra za pośrednictwem bootloadera, w trakcie uruchomienia systemu np.:

grub append> root=/dev/sda2 single

Szczeg�łowy opis bootloadera i przekazywanie parametr�w kernela opisano w „Wstęp”. Poziomy pracy zostały szerzej om�wione w „Zmiana poziomu pracy systemu”

Uruchomienie RescueCD

Jako dystrybucję Live najlepiej wybrać RescueCD lub PLD Live. Oba projekty są dobrze przygotowane do pracy z naszą dystrybucją, gdyż zawierają program rpm™ i poldek™.

Na początek musimy zadbać o to, aby system m�gł się uruchomić z płyty CD, uzyskamy to modyfikując odpowiednią opcję BIOS-u komputera. Teraz uruchamiamy komputer z RescueCD umieszczonym w napędzie CD-ROM i czekamy aż system się uruchomi.

Aby dokonać napraw musi zostać załadowany moduł kontrolera masowego. Większość wsp�łczesnych dystrybucji typu live sama wykrywa sprzęt, jeśli jednak to się nie powiedzie lub używamy starej wersji RescueCD to musimy sami załadować moduł. Jeśli potrzebujemy obsłużyć kontroler typu IDE musimy załadować moduł ide-disk

# modprobe ide-disk

Jeżeli naprawiany system jest oparty na macierzach programowych to musimy je najpierw złożyć np.:

# mdadm -A --auto=yes /dev/md0 /dev/hda /dev/hdb

Więcej szczeg�łï¿½w dotyczących programowych macierzy znajdziemy w „RAID programowy”.

Teraz kiedy mamy załadowane odpowiednie moduły i dostęp do plik�w urządzeń (w katalogu /dev) możemy wykonać liczne operacje diagnostyczne i naprawcze (opisane dalej).

Naprawa systemu plik�w

Do naprawy systemu plik�w konieczny jest tylko dostęp do plik�w urządzeń z katalogu /dev. Aby sprawdzić i naprawić system plik�w XFS wydajemy polecenie:

# xfs_repair /dev/sda2

Naprawy system�w plik�w została szczeg�łowo om�wiona w „Naprawa”.

Naprawa konfiguracji

W przypadku podniesienia systemu w trybie single mamy swobodny dostęp do plik�w konfiguracji, w przeciwnym wypadku musimy najpierw podmontować odpowiednią partycję aby uzyskać dostęp do plik�w. W tym celu tworzymy nowy katalog, a następnie montujemy do niego właściwe urządzenie np.:

# mkdir -p /mnt/rootfs
# mount /dev/hda3 /mnt/rootfs

Jeżeli masz więcej partycji, na kt�rych znajdują się pliki systemowe (np. /boot), także je podmontuj w odpowiednich katalogach np.:

# mount /dev/hda1 /mnt/rootfs/boot 

mamy teraz nieograniczony dostęp do plik�w uszkodzonego systemu.

Operacja chroota

Jeśli uruchomiliśmy system z RescueCD i mamy podmontowane systemy plik�w to wielu wypadkach wygodniejsze, a czasami nawet konieczne będzie wykonanie tzw. chroot-a.. Polega to na podmianie głï¿½wnego systemu plik�w używanego przez dany program na głï¿½wny system plik�w ratowanego systemu operacyjnego. Będzie to konieczne przy problemach z jądrem, bootloaderem czy initrd. Aby wykonać tą operację należy wykonać komendę:

# chroot /mnt/rootfs

To polecenie uruchomi powłokę /bin/sh w taki spos�b, że wszystkie działania z jej poziomu będą odbywały się przeźroczyście na podmontowanym systemie plik�w. Zanim jednak zabierzemy się do pracy proszę o zapoznanie się z uwagami na końcu rozdziału. Jeśli używamy powłoki korzystającej z chroot-a, wystarczy że zakończymy jej pracę wydając polecenie exit lub skr�tem klawiszowym ctrl+d. Na koniec odmontowujemy systemy plik�w jeśli takie są i restartujemy komputer.

Uwagi

  • Niekt�re operacje w środowisku chroot wymagają (np. tworzenie initrd) podmontowania pseudo systemu plik�w /proc:

    # mount /proc /mnt/rootfs/proc -o bind

  • Użytkownicy udeva powinni pamiętać, że wiele operacji w podmontowanym środowisku wymagają istnienia kompletu plik�w urządzeń:

    # mount /dev /mnt/rootfs/dev -o bind

    Udev dokładniej opisano w „Udev - dynamiczna obsługa sprzętu”.

  • Może się zdarzyć, że poldek się nie uruchamia w chroocie. Sposobem na obejście tego jest uruchomienie go z flagą -r , np:

    # poldek -r /mnt/rootfs

  • Dużą zaletą RescueCD jest to, że automatycznie "podnosi" interfejs sieciowy z obsługą DHCP oraz serwer SSH. Pozwala to na zdalną naprawę, wystarczy, że ktoś umieści płytę z dystrybucją w napędzie i uruchomi komputer. My zalogujemy się na odpowiedni adres za pośrednictwem SSH; login: root, hasło: pld.

Zarządzanie podsystemami i usługami

W systemie dostępne są specjalne skrypty, napisane w języku powłoki, zwane "skryptami startowymi" lub "rc-skryptami". W PLD™ zastosowano skrypty startowe typu System-V, dzięki temu praca administratora jest znacząco zautomatyzowana.

Za pomocą rc-skrypt�w pomocą możemy uruchamiać lub zatrzymywać podsystemy i usługi, kontrolować ich działanie oraz wiele innych. Można je podzielić na dwie zasadnicze grupy:

  • Skrypty podsystem�w - specjalnych zadań mających za zadanie dokonać konfiguracji systemu operacyjnego. Do tego typu zadań należą: konfigurowanie sieci, ładowanie modułï¿½w, prace porządkowe i wiele innych. Te skrypty są integralną częścią systemu (pakiet rc-scripts) i zapewne są już u nas zainstalowane.

  • Skrypty zarządzania usługami - zarządzają programami działające w tle (demonami) np.: serwerem WWW, serwerem NFS. Skrypty te są instalowane automatycznie razem z pakietami usług. Wyjątek stanowią usługi z wydzielonymi w tym celu pakietami, rozpoznamy je po nazwie *-init i *-standalone. Więcej o nazewnictwie pakiet�w przedstawiono w „Cechy pakiet�w w PLD”.

Budowa systemu rc-skrypt�w

Katalog /etc/rc.d przechowuje konfigurację uruchamiania usług i podsystem�w, poniżej pokr�tce om�wiono składniki systemu rc-skrypt�w:

  • /etc/rc.d/init.d - katalog z skryptami startowymi usług

  • /etc/rc.d/rc{$NR}.d - katalogi tak oznaczone zawierają łącza symboliczne do skrypt�w zawartych w katalogu init.d. Wartość {$NR} jest liczbą wskazującą poziom pracy (run level), dla kt�rego uruchamiana jest zawartość danego katalogu.

  • /etc/rc.d/rc - skrypt uruchamiający i zatrzymujący usługi

  • /etc/rc.d/rc.init - skrypt ustawiający opcje narodowe (język, waluta) pobiera konfigurację z pliku /etc/sysconfig/i18n

  • /etc/rc.d/rc.local - uruchamiany na samym końcu wszystkich skrypt�w, użytkownicy mogą dodawać tu swoje wpisy jeśli nie chcą używać init.d i rc{$NR}.d

  • /etc/rc.d/rc.serial - konfiguracja port�w szeregowych

  • rc.sysinit - głï¿½wny skrypt startowy uruchamiany jednokrotnie (w trakcie startu)

  • /etc/rc.d/rc.modules - załadowanie modułï¿½w z /etc/modules

  • /etc/rc.d/rc.shutdown - głï¿½wny skrypt uruchamiany przy zatrzymaniu systemu lub restarcie.

  • /etc/profile - plik startowy przy pomocy kt�rego są ustawiane głï¿½wnie zmienne systemowe

Zarzadzanie podsystememi/usługami

Usługami/podsystemami zarządzamy ręcznie, wykonujemy to za pomocą uruchomienia odpowiedniego skryptu z katalogu /etc/rc.d/init.d/. Dodatkowo podajemy odpowiednim parametr określający akcję, kt�rą skrypt ma wykonać. Uruchomienie bez parametru podaje listę możliwych dla niego akcji, dla przykładu wyświetlimy listę dostępnych parametr�w podsystemu sieci:

# /etc/rc.d/init.d/network
Usage: /etc/rc.d/init.d/network {start|stop|restart|status}

Poniżej przedstawiono wyłączenie obsługi sieci, oraz ponowne jej uruchomienie. W ten spos�b zmusza się usługę lub podsystem do ponownego odczytania swojej konfiguracji. W tym wypadku nastąpi skonfigurowanie na nowo interfejs�w, zaktualizowanie ustawień, tablic routingu itd...

# /etc/rc.d/init.d/network stop
Shutting down interface eth0.......................................[ DONE ]
Shutting down interface eth1.......................................[ DONE ]

# /etc/rc.d/init.d/network start
Setting network parameters.........................................[ DONE ]
Bringing up interface eth0.........................................[ DONE ]
Bringing up interface eth1.........................................[ DONE ]

Lista dostępnych parametr�w będzie się zmieniać w zależności od usługi, w poniższej tabeli przedstawiono znacznie tych najczęściej spotykanych:

Tabela 13.1. Popularne akcje skrypt�w startowych

ParametrAkcja
startUruchamia podsystem/usługę
stopZatrzymuje podsystem/usługę
reload, force-reload Przeładowanie usługi poprzez wysłanie sygnału (zwykle HUP) do demona, często oba podane parametry mają takie same działanie. Operacja używana do ponownego odczytania konfiguracji demona.
restart Pełny restart usługi (zazwyczaj jest to kolejne wywołanie skryptu z parametrem start i stop). Operacja używana do ponownego odczytania konfiguracji demona.
status Wyświetla stan podsystemu/usługi, dzięki temu możemy łatwo określić czy czy jest uruchomiony. W niekt�rych wypadkach podawane są dodatkowe informacje.

Niekt�re usługi posiadają inne, użyteczne tylko dla nich parametry. Przykładem może być argument init, kt�ry zazwyczaj musi być użyty przed pierwszym uruchomieniem usługi.

Nieco wygodniej zarządza się skryptami przy pomocy programu service. Aby wykonać za jego pomocą taki sam efekt jak powyżej musimy go wywołać z dwoma parametrami, pierwszy to nazwa skryptu, drugi zaś to wybrana akcja:

# service network stop
# service network start

Domyślnie po zainstalowaniu nowego podsystemu lub usługi, dodawane są potrzebne skrypty startowe. Dzięki temu nowo zainstalowane oprogramowanie uruchamia się automatycznie w trakcie startu systemu lub przy zmianie poziomu pracy. Aby uruchomić dopiero co zainstalowany podsystem lub usługę musimy wykonać to "ręcznie".

  • Zarządzanie skryptami startowymi w trakcie instalacji/aktualizacji pakiet�w opisano w „Cechy pakiet�w w PLD”

  • Jeśli zechcemy utworzyć własny rc-skrypt to z pomocą przyjdzie nam szablon z pliku /usr/share/doc/rc-scripts{$wersja}/template.init.gz

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ększość tych plik�w jest bezpośrednio załączana do kodu rc-skrypt�w, zatem ich składnia musi odpowiadać składni powłoki wskazanej w skrypcie (w PLD jest to /bin/sh). Dotyczy to także plik�w konfiguracji interfejs�w sieciowych w katalogu /etc/sysconfig/interfaces. W plikach tych występują jedynie konstrukcje przypisania zamiennych oraz ewentualne komentarze. Możemy co prawda umieszczać tam dowolne komendy wiersza poleceń, jednak należy być przy tym niezwykle ostrożnym i robić to tylko w uzasadnionych przypadkach. Jest jednak kilka plik�w konfiguracji, kt�re są traktowane inaczej - mają własną składnię, przykładem tego rozwiązania są np. pliki /etc/sysconfig/static-*, nimi jednak nie będziemy się zajmować w tym rozdziale.

Opcje w plikach konfiguracji można podzielić na dwie grupy: og�lnego stosowania i specyficzne dla rc-skryptu. Pierwsza z nich to uniwersalne opcje, z kt�rymi możemy się zetknąć w wielu w innych plikach konfiguracji np.:

  • SERVICE_RUN_NICE_LEVEL - priorytet proces�w usługi (liczba nice)

  • RPM_SKIP_AUTO_RESTART - m�wi programowi rpm czy usługa ma być automatycznie restartowana po aktualizacji, więcej o tej opcji w „Cechy pakiet�w w PLD”

Druga grupa to opcje występujące tylko w pliku konfiguracji konkretnego rc-skryptu - zwykle są związane z argumentami pliku wykonywalnego usługi, dlatego należy uważnie czytać komentarze plik�w konfiguracji i w razie potrzeby podręczniki systemowe usług.

Zależności

Pomiędzy niekt�rymi demonami i podsystemami istnieją ścisłe powiązania, jako przykład można wymienić usługi sieciowe i podsystem sieci. Usługa jest zależna od działania sieci i pr�ba wyłączenia najpierw tej drugiej może niekiedy zaowocować problemami, gdyż PLD nie dba o to za nas. Musimy samemu się zatroszczyć o wyłączanie usług we właściwej kolejności.

Pewną wskaz�wką będą numery przy nazwach łączy symbolicznych w katalogach /etc/rc.d/rc{$nr}.d (przy literze S). Numery te określają kolejność ładowania usług w trakcie startu systemu.

Usługi a poziomy pracy

W PLD™ zastosowano klasyczny, oparty na rc-skryptach typu System-V system poziom�w pracy. Poziomami na kt�rych pracują usługi można zarządzać ręcznie, jest to jednak niezalecany spos�b, lepszym pomysłem jest użycie programu chkconfig. Aby wyświetlić listę usług uruchamianych przy w danych poziomach pracy wydajemy polecenie:

# chkconfig --list
crond           0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
cups            0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
sshd            0:wył.  1:wył.  2:wył.  3:wł.   4:wł.   5:wł.   6:wył.
gdm             0:wył.  1:wył.  2:wył.  3:wył.  4:wył.  5:wł.   6:wył.
network         0:wył.  1:wył.  2:wł.   3:wł.   4:wł.   5:wł.   6:wył.
sshd            0:nie   1:nie   2:nie   3:nie   4:tak   5:nie   6:nie

W PLD najczęściej korzysta się z tryb�w 3 i 5 rzadziej z: 1, 2 i 4, nigdy nie ustawiamy trybu 0 (restart) i 6 (wyłączenie). Na powyższym przykładzie podsystem network jest uruchamiana dla poziom�w: 2,3,4,5, zaś gdm tylko dla trybu 5. Aby włączyć/wyłączyć uruchamianie jakiejś usługi wywołujemy program następująco: chkconfig {$usługa} on/off. Wyłączenie usługi sshd™ (domyślnie jest włączona):

# chkconfig sshd off

Włączenie analogicznie:

# chkconfig sshd on

Poziomy dla kt�rych usługa ma być włączona/wyłączona jest wskazywane przez specjalny wpis w rc-skrypcie, możemy go odczytać następująco:

$ grep chkconfig /etc/init.d/sshd
# chkconfig:    345 55 45

pierwszy ciąg cyfr w wierszu to lista poziom�w, kt�rych dotyczy operacja włączenia/wyłączenia rc-skryptu. W razie potrzeby możemy wymusić operację dla konkretnego numeru poziomu pracy np:

# chkconfig --level 5 sshd off

Dodawanie lub usuwanie usług w poziomach pracy nie powoduje ich uruchomienia lub zatrzymywania, aby to zrobić musimy wykonać to ręcznie lub zmienić tryb pracy. Poziomy pracy zostały szerzej om�wione w „Zmiana poziomu pracy systemu”.

Zmiana poziomu pracy systemu

PLD jest systemem uniksowym, a więc obsługuje tzw. poziomy pracy (ang. run levels). Poziom pracy jest to specjalna konfiguracja systemu, kt�ra pozwala zaistnieć tylko wytypowanym usługom bądź podsystemom. Mamy sporo swobody w wyborze usług pracujących bądź wyłączonych w danym poziomie pracy, opis jak nimi zarządzać znajdziemy w „Zarządzanie podsystemami i usługami”.

Tabela 13.2. Dostępne poziomy pracy

PoziomOpis
1 Konfiguracja z minimalną ilością uruchamianych podsystem�w. Nie ma obsługi sieci i nie zezwala na logowanie się innym użytkownikom.
2 Rzadko używany tryb wielu użytkownik�w. Uruchamiana jest obsługa sieci i większości usług opr�cz NFS.
3 Popularny tryb prac z dostępem wielu użytkownik�w i uruchomieniem wszystkich usług. Jest to typowy tryb dla maszyn obsługiwanych z konsoli tekstowej - np.: serwer�w.
4 Rzadko używany tryb wielu użytkownik�w. - praca w konsoli tekstowej
5 Typowy tryb z dostępem wielu użytkownik�w uruchamiający system X-Window™ (uruchamia demon GDM lub KDM). Poziom używany na stacjach roboczych z GUI. Więcej o sposobach uruchamiania X-Window w „X-Server”.
single Tryb jednego użytkownika (ang. Single user mode) - używany przez administrator�w w sytuacjach awaryjnych. Uruchamia mniej skrypt�w startowych niż pierwszy poziom. Jego włączanie ma sens tylko przez przekazanie do jądra parametru single z poziomu bootloadera.


Są jeszcze dwa tryby: tryb 0 i 6. Pierwszy jest używany w celu zatrzymania wszystkich usług i podsystem�w przed zamknięciem systemu, drugi zaś przed ponownym uruchomieniem systemu. Z pośr�d wymienionych poziom�w pracy najczęściej używa się poziomu 3 lub 5.

Poziomem pracy zarządza proces init. W celu określenia domyślnego poziomu pracy, init odczytuje sw�j plik konfiguracji (/etc/inittab) podczas uruchomienia systemu. Po uruchomieniu administrator może wymusić zmianę poziomu za pośrednictwem programu telinit (link symboliczny do programu init). Należy pamiętać o tym, że telinit nie dokonuje zmian w pliku /etc/inittab, tak więc przy ponownym uruchomieniu systemu wybrany zostanie ustawiony w nim poziom pracy. Więcej informacji o pliku /etc/inittab znajdziemy w „Kluczowe pliki”.

Za domyślny poziom pracy odpowiada opcja "initdefault", może ona przyjąć wartość od 1 do 5 np.:

id:3:initdefault:

Powyższy przykład włączy system na trzecim poziomie pracy, jest domyślna wartość w PLD.

W wyniku zmiany poziomu zostaną zatrzymane wszystkie wszystkie podsystemy wyłączone z pracy na tym poziomie, zaś te kt�re mają działać zostaną uruchomione. Przykładowo jeśli chcemy przejść do trybu 2 użyjemy polecenia:

# telinit 2

Jeśli system do tej pory pracował w trybie 3 to wyłączona zostanie usługa NFS.

Możemy r�wnież określić poziom uruchomienia przed startem systemu, dokonujemy tego za pomocą parametr�w przekazywanych za pośrednictwem bootloadera. Więcej szczeg�łï¿½w na ten temat znajdziemy w „Wstęp”.

Konta użytkownik�w

W PLD zastosowano klasyczny dla system�w uniksowych system kont użytkownik�w, tak więc istnieje podział na dwa rodzaje kont: konta systemowe i konta użytkownik�w. Zarządzanie kontami systemowymi następuje automatycznie w trakcie instalowania bądż usuwania program�w, kt�re ich wymagają. Z tego powodu nie musimy się nimi zajmować, zajmiemy się więc tylko kontami zwykłych użytkownik�w.

W PLD domyślnie instalowanym pakietem do zarządzania kontami jest pakiet shadow. Możemy do jednak zastąpić zbiorem pwdutils, kt�ry zawiera narzędzia o większych możliwościach. Dzięki nim nie będzie już konieczności "ręcznego" edytowania plik�w systemowych, z tego względu opisane zostaną wyłączne narzędzia pwdutils.

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:

  • PASS_MAX_DAYS - liczba dni do wygaśnięcia hasła -domyślnie: 99999

  • PASS_MIN_DAYS - minimalna liczba dni do między zmianami hasła -domyślnie: 0

  • PASS_WARN_AGE - ilość dni przez kt�re będzie pokazywane ostrzeżenie o wygaśnięciu hasła - domyślnie: 7

Wiele opcji kont zawartych w tych plikach można łatwo modyfikować, poprzez przekazanie odpowiednich parametr�w do programu useradd oraz passwd, więcej informacji na ten temat uzyskamy w podręczniku systemowym. Jeśli chcemy utworzyć większa ilość kont o zmodyfikowanych parametrach to wygodniejsze będzie ustawienie interesujących nas wartości w podanych powyżej plikach.

Jeśli użytkownik ma konto na wielu maszynach dobrym zwyczajem jest nadawanie takiego samego numeru użytkownika (UID) dla każdego z kont. W przypadku programu useradd należy użyć opcji "-u".

Na koniec administrator musi ustawić hasło dla danego użytkownika.

Usunięcie

Aby usunąć konto użyjemy programu userdel:

# userdel jkowalski

Warto wspomnieć tu o opcjach "-r" i "-f", pierwsza usuwa katalog domowy, druga wymusza usunięcie r�wnież plik�w z katalogu domowego nawet jeśli do niego nie należą.

Ze względ�w bezpieczeństwa można polecić blokowanie kont użytkownik�w w miejsce ich usuwania, w ten spos�b możemy się ochronić przed sytuacją powrotu do użytku numeru UID usuniętego użytkownika.

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żdą następną jego modyfikację użytkownik może wykonywać samodzielnie.

Ustawienie hasła przez administratora: passwd {$nazwa_użytkownika}

# passwd jkowalski
Changing password for jkowalski.
New UNIX password:  
Retype new UNIX password:

Zwykły użytkownik zmienia swoje hasło r�wnież poleceniem passwd, tyle że bez podawania parametru. Administrator może zmusić użytkownika do zmiany hasła tuż po zalogowaniu:

# passwd -e jkowalski

Zarządzanie 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ętać, że powyższe polecenia nie blokują dostępu opartego o inną metodę autoryzacji niż hasło, np. o klucz SSH. W takim wypadku dodatkowo powinniśmy zmienić powłokę użytkownikowi na nie figurującą w /etc/shells np.:

# usermod -s /bin/false jkowalski

Grupy

W PLD zastosowano klasyczny dla system�w uniksowych system grup, tak więc istnieje podział na dwa rodzaje grup: grupy systemowe i grupy użytkownik�w. Grupy te rozr�żniamy na podstawie identyfikator�w grupowych (GID), dla grup użytkownik�w przeznaczone są wartości 1000 i więcej. Ponadto grupy systemowe często przyjmują nazwy podobne jak nazwy usług np: ftp, named, itp.

Zarządzanie grupami systemowymi następuje automatycznie w trakcie instalowania bądź usuwania pakiet�w, z tego powodu nie należy w nie ingerować. W naszej dystrybucji zarządzanie grupami zazwyczaj sprowadza się do dodawania/usuwania własnych grup oraz zarządzania uczestnictwem w istniejących grupach.

W PLD domyślnie instalowanym pakietem do zarządzania grupami jest pakiet shadow. Możemy do jednak zastąpić zbiorem pwdutils, kt�ry zawiera narzędzia o większych możliwościach. Dzięki nim nie będzie już konieczności "ręcznego" edytowania plik�w systemowych, z tego względu opisane zostaną wyłączne narzędzia pwdutils.

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ęki poleceniu id {$nazwa_użytkownika} sprawdzimy do jakich grup zapisany jest użytkownik, jeśli nie podamy nazwy konta to zostanie wyświetlona informacja o aktualnie używanym koncie np.

$id jkowalski
uid=500(jkowalski) gid=1000(users) grupy=1000(users),10(wheel),19(floppy),23(audio)

Program zwr�cił wartości: UID, GID i listę grup do kt�rych zapisany jest użytkownik jkowalski: users, wheel, floppy, audio

Zapisanie do grupy następuje po wykonaniu polecenia groupmod -A {$konto_użytkownika} {$grupa} np.

groupmod -A jkowalski kadry

Aby wyrejestrować użytkownika z grupy musimy użyć parametru "-R" np.

groupmod -R jkowalski kadry

Usunięcie grupy

Używamy polecenia groupdel {$nazwa_grupy}:

# groupdel kadry

Uwagi

  • Po każdej modyfikacji uczestnictwa w grupach, użytkownik musi się ponownie zalogować, aby wprowadzone zmiany zaczęły obowiązywać.

  • Zapisanie użytkownika do grupy służy podniesieniu jego uprawnień, listę przywilej�w jakie uzyska zamieszczono w „Zarządzanie uprawnieniami”.

Zarządzanie uprawnieniami

W PLD zastosowano restrykcyjny poziom bezpieczeństwa, zwykły użytkownik domyślnie ma minimalne możliwe uprawnienia. Aby je zwiększyć administrator musi zapisać użytkownika do odpowiednich grup, poniżej została przedstawiona skr�cona ich lista i odpowiadające im "przywileje" lub funkcje.

Tabela 13.3.

GIDNazwaWłaściciel/Uprawnienia
0rootgrupa administracyjna - wysokie uprawnienia w całym systemie
3sysodczyt niekt�rych plik�w systemowych np. konfiguracji i log�w systemu druku CUPS
4admmożliwość korzystania z narzędzi takich jak: tarcerouote, ping, arping, clockdiff
6diskbezpośredni dostęp do urządzeń masowych np. naprawy i tworzenie system�w plik�w, odtwarzanie i nagrywanie CD
7lpdostęp do portu drukarki: r�wnoległego, USB
9kmemodczyt z urządzeń /dev/mem, /dev/kmem
10wheelmożliwość korzystania z programu su
17procdostęp do pseudosystemu plik�w /proc (np. wgląd do proces�w innych użytkownik�w)
19floppymożliwość niskopoziomowego formatowania dyskietek i tworzenia na nich systemu plik�w
22utmpzapis do plik�w /var/run/utmpx, /var/log/wtmp, /var/log/lastlog
23audiodostęp do karty dźwiękowej
27cdwritedostęp do narzędzi nagrywania płyt CD
28fsctrlgrupa kt�rej można używać do nadawania praw dla plik�w na montowanych urządzeniach
50ftpgrupa systemowa serwera FTP: odczyt plik�w konfiguracji
51httpgrupa systemowa serwera WWW
117crontabodczytywanie konfiguracji demona CRON
123statsgrupa używana do potrzeb automatycznie generowanych statystyk (mrtg, calamaris, itd.)
124logsgrupa odczytu niekt�rych log�w
138filesharemożliwość udostępniania zasob�w NFS i SMB (zapis do /etc/exports, /etc/samba/smb.conf)
1000usersdomyślna grupa głï¿½wna dla zwykłych użytkownik�w

Dużo więcej informacji o grupach i użytkownikach znajdziemy w dokumencie uid_gid.db.txt trzymanym w CVS-ie. Zapisywanie do grup opisano w „Grupy”.

Bezpieczeństwo

Bezpieczeństwo system�w i danych to rozległy temat dlatego głï¿½wnie skupimy się na aspektach dotyczących PLD.

Dostępne narzędzia

PLD jako dystrybucja "robiona przez administrator�w dla administrator�w" ma duże zasoby program�w użytecznych w zakresie bezpieczeństwa, poczynając od NetCata™ (nc), a na wiresharku™ i nessusie™ kończąc.

Dostęp do konta root

Nasza polityka bezpieczeństwa wymaga, aby użytkownik należał do grupy wheel, jeśli chce zwiększyć swoje uprawnienia za pomocą su i sudo. W ten spos�b atakujący musi zgadnąć trzy parametry zamiast jednego (nazwa użytkownika, hasło i hasło administratora zamiast samego hasła administratora). Nie ma też możliwości zdalnego zalogowania się bezpośrednio na konto roota (z tych samych powod�w). Dodatkowo root nie może zdalnie używać innych usług (ftp, imap, pop3, smtp) m.in z powodu niedostatecznie silnego szyfrowania transmisji.

SUID

Domyślnie zwykli użytkownicy nie mają prawa wykonania program�w z ustawionym bitem SUID. Aby takie prawo uzyskać muszą być zapisani do odpowiedniej grupy. Przykładowo program ping wymaga zapisania do grupy adm. Poglądowe zestawienie grup zamieściliśmy w „Zarządzanie uprawnieniami”.

/proc

Domyślnie użytkownicy nie widzą żadnych proces�w poza swoimi. Jest to nie tylko krok w stronę bezpieczeństwa, ale i w wygody, użytkownik nie głowi się nad długimi listami proces�w generowanych przez program top czy ps. Podobnie jak z programami z bitem SUID jest to oparte o grupy, aby użytkownik widział wszystkie procesy należy go zapisać do grupy /proc.

chroot i vserver

PLD oferuje system sys-chroot, wbudowany w rc-skrypty, służący do wygodnego zarządzania środowiskami typu chroot. Usługi, kt�re wspierają natywnie chrooty (np. Bind™) działają w izolowanym środowisku od razu po instalacji.

PLD wspiera także mechanizm Linux VServers, zwany potocznie "chrootem na sterydach". Wymaga on zainstalowania odpowiedniej wersji kernela i odpowiedniego zestawu narzędzi.

Statyczny VIM

Najważniejszym narzędziem administracyjnym jest edytor tekstu, dlatego nie powinniśmy pozostać bez takiego programu, co może mieć miejsce np. przy uszkodzeniu systemu plik�w. Tu z pomocą przychodzi nam statycznie zlinkowany VIM z pakietu vim-static. Aby nie kolidował ze "zwykłym" vimem, plik wykonywalny jest umieszczany w /bin/vim.

Pakiety

Zagadnienia związane z bezpieczeństwem zostały om�wione w „Bezpieczeństwo”.

Rozdział 14. Interfejsy sieciowe

W tym rozdziale znajdziesz informacje dotyczące konfiguracji sieci

Wstęp

Pierwszą rzeczą jaką musimy zrobić to ustalić wszystkie konieczne parametry połączenia sieciowego. W razie wątpliwości należy skontaktować się z naszym dostawcą usług internetowych. Ten rozdział opisuje konfigurację interfejs�w sieciowych, testowanie połączenia oraz inne prace diagnostyczne przeprowadzimy za pomocą narzędzi opisanych w „Narzędzia sieciowe”.

Zarządzanie całym podsystemem sieci (włączanie, wyłączanie, restart) dokonujemy za pomocą rc-skryptu network, więcej informacji o zarządzaniu rc-skryptami znajdziemy w „Zarządzanie podsystemami i usługami”. Jest on integralną częścią PLD i startuje automatycznie w trakcie uruchomienia systemu. Aby skonfigurować sieć potrzebujemy jedynie ustawić podstawowe parametry sieci (opisane w następnym rozdziale) oraz prawidłowo skonfigurować interfejs(y).

Konfigurację proxy opisano szczeg�łowo w „Proxy”.

Jeśli mamy zamiar modyfikować konfigurację sieci na zdalnej maszynie (np. przez ssh), to zalecane jest użycie programu screen, aby mieć pewność, że cała procedura zakończy się poprawnie i nie utracimy kontaktu z hostem. Jeśli mamy program screen wystarczy że wydamy polecenie:

# screen service network restart

Podstawowa konfiguracja sieci

W większości wypadk�w konfiguracja sieci (opr�cz ustawień interfejsu sieciowego) będzie się składała ze wskazania domyślnej bramy i serwer�w DNS dla resolvera. Wiele zaawansowanych opcji sieci (np. przekazywanie pakiet�w) ustawianych jest w pliku konfiguracji jądra: /etc/sysctl.conf, parametry te zostały om�wione w „Parametry jądra”.

Brama domyślna

Jeśli nie korzystamy z serwera DHCP ustawiamy statyczną trasę routingu do domyślnej bramy, w tym celu edytujemy plik /etc/sysconfig/static-routes - wpis może wyglądać następująco:

eth0 default via 192.168.0.1

Odwzorowanie nazw - serwery DNS

Wskazanie serwer�w DNS jest obowiązkową pozycją konfiguracji resolvera nazw. Operacja ta następuje automatycznie, o ile korzystamy z serwera DHCP, w przeciwnym wypadku musimy podać ich adresy samodzielnie. Serwery nazw ustawiamy edytując plik /etc/resolv.conf. Jeśli go nie ma, to możemy go utworzyć za pomocą dowolnego edytora lub poleceniem touch. Podajemy przynajmniej jeden (zazwyczaj nie więcej niż dwa) serwer nazw za pomocą słowa kluczowego nameserver np.:

nameserver 192.168.0.12

Nazwa hosta

Możemy ustawić nazwę, za pomocą kt�rej nasza maszyna będzie się przedstawiała zalogowanym użytkownikom, i niekt�rym programom. W pliku /etc/sysconfig/network ustawiamy:

HOSTNAME=pldmachine

Dla porządku warto by była zgodna z adresem FQDN (o ile jest nadany). Niekiedy podaną tu nazwę należy dopisać do pliku /etc/hosts opisanego w dalszej części rozdziału.

Odwzorowanie nazw - konfiguracja zaawansowana

Plik /etc/host.conf zawiera podstawowe opcje resolvera nazw, w większości wypadk�w wystarczy domyślna konfiguracja:

order hosts,bind
multi on

Pierwsza pozycja wskazuje kolejność używania metod szukania adres�w host�w, w podanym przykładzie najpierw będzie przeszukiwany plik /etc/hosts, w drugiej kolejności będą odpytywane serwery DNS. Drugi wiersz zezwala na zwracanie więcej niż jednego adresu IP z pliku /etc/hosts (o ile przypisano większą liczbę adres�w do nazwy).

W pliku /etc/hosts można dodawać odwzorowania host�w, kt�re są uzupełnieniem dla usługi DNS, jedyny wymagany wpis to wskazanie adresu IP pętli zwrotnej dla nazwy localhost:

127.0.0.1       localhost

Opr�cz nielicznych wyjątk�w, inne wpisy nie są tu konieczne, Dla potrzeb niekt�rych program�w trzeba dopisać do powyższego wiersza nazwę hosta ustawionego za pomocą opisanej powyżej opcji HOSTNAME:

127.0.0.1       localhost styx

przykład wpisu dla programu wymagającego przypisania pełnej nazwy domenowej:

213.25.115.88 platinum.elsat.net.pl

Rozwiązanie to służy do szybszej identyfikacji komputer�w w sieci lub prac diagnostycznych. Aby w og�le z tego skorzystać musimy ustawić odpowiednią kolejność przeszukiwania w pliku /etc/host.conf

Jeśli często odwołujemy się do maszyn w naszej domenie to możemy ułatwić sobie życie i ustawić domenę domyślną w pliku /etc/resolv.conf. Od tej pory podanie samej nazwy hosta (bez części domenowej), będzie uważane za podanie pełnego adresu. Przykładowe ustawienie domyślnej domeny (np. jakasdomena.cos) podano poniżej:

domain jakasdomena.cos

Inne opcje

Edytujemy plik /etc/sysconfig/network, domyślne wartości opcji z tego pliku w zupełności wystarczają do typowego korzystania z sieci i nie ma potrzeby nic modyfikować w nim.

NETWORKING=yes

Ustawiamy na "yes" jeżeli w og�le chcemy komunikować się z siecią.

IPV4_NETWORKING=yes

Ustawiamy na "yes" jeżeli będziemy korzystać z protokołu IPv4 (wymagany do korzystania z Internetu).

NISDOMAIN=

Domena NIS, jeśli nie korzystasz z tej usługi sieciowej, lub nie jesteś pewien pozostaw to pole puste.

GATEWAY=192.168.0.254
GATEWAYDEV=eth0

Opcje za pomocą kt�rych możemy ustawić trasę routingu do domyślnej bramy. Opcje te zostały uznane za przestarzałe, obecnie należy korzystać z pliku /etc/sysconfig/static-routes.

Ethernet

Urządzenie

Większość dostępnych na rynku kart sieciowych jest oparta na układach Realteka, 3Com bądź Intela, dzięki temu nie będzie problem�w z uruchomieniem urządzenia. Karty sieciowe są automatycznie wykrywane przez jądro i nadawane są im nazwy kolejno: eth0, eth1, eth2, itd. Jedyną rzeczą jaka pozostaje to załadowanie odpowiedniego modułu dla danego urządzenia, proces ten dokładnie opisano tutaj: „Moduły jądra”.

Pliki konfiguracyjne interfejs�w są przechowywane w katalogu /etc/sysconfig/interfaces, nazwy tych plik�w będą miały kolejno nazwy ifcfg-eth0, ifcfg-eth1, ifcfg-eth2, itd. W tym rozdziale założono, że konfigurujemy pierwszy interfejs (eth0). Pliki te modyfikujemy za pomocą dowolnego edytora tekstu np.

# vim /etc/sysconfig/interfaces/ifcfg-eth0

Statyczna konfiguracja karty sieciowej

Zaczynamy od zmodyfikowania lub utworzenia pliku /etc/sysconfig/interfaces/ifcfg-eth0, aby karta działała poprawnie powinieneś mieć tam podobne ustawienia:

DEVICE="eth0"

Powyższa opcja ta określa nazwę urządzenia.

IPADDR="192.168.0.2/24"

Ta opcja określa adres karty sieciowej oraz maskę podsieci. Maskę podsieci podajemy w notacji CIDR - "/24" odpowiada masce 255.255.255.0.

ONBOOT="yes"

Ustaw na "yes" jeśli chcesz aby interfejs automatycznie podnosił się razem z podsystemem sieci.

BOOTPROTO="none"

Ta opcja pozwala dokonać wyboru, w jaki spos�b karta sieciowa ma otrzymywać konfigurację. Powyższy wpis sprawia, że system pobiera wszystkie ustawienia z posiadanych plik�w konfiguracyjnych.

Na końcu aktywujemy sieć.

Dynamiczna konfiguracja karty sieciowej (DHCP)

Na początek wybieramy jeden z program�w klienckich: dhcpcd lub pump:

# poldek -i dhcpcd

Nasze zadanie ogranicza się do zmiany jednego parametru w pliku /etc/sysconfig/interfaces/ifcfg-eth0. Odszukujemy w nim opcję BOOTPROTO i wskazujemy klienta DHCP, kt�ry ma być użyty:

BOOTPROTO="dhcp"

Na koniec dokonujemy aktywacji interfejsu.

Mała uwaga: przy użyciu DHCP statyczne opcje sieciowe (adres IP, maska podsieci, brama) umieszczone w plikach konfiguracyjnych będą ignorowane, zaś zawartość pliku /etc/resolv.conf będzie nadpisywana informacjami przyznanymi przez serwer DHCP.

Aktywacja sieci

Ostatnią czynnością jest uruchomienie lub restart podsystemu sieci:

# /etc/rc.d/init.d/network start
Ustawianie parametr�w sieci....................[ ZROBIONE ]
Podnoszenie interfejsu eth0....................[ ZROBIONE ]

WiFi

Wstęp

W przypadku laptopa dobrym pomysłem jest użycie jakiejś aplikacji X-Window do konfiguracji WiFi, z możliwością łatwego przełączania pomiędzy sieciami oraz automatycznym wykrywanie podłączenia kabla do karty Ethernet. Takie możliwości zapewnia np. NetworkManager™ (korzysta z aplikacji wpa_supplicant™), przeznaczony dla środowiska Gnome. W przypadku stacjonarnych maszyn konfiguracja rc-skrypt�w powinna być wystarczająca w większości wypadk�w.

W naszych przykładach przedstawimy konfigurację dla sieci bezprzewodowej działającej w trybie trybie infrastruktury (managed), o określonym identyfikatorze SSID i zabezpieczonej kluczem WEP oraz WPA2-PSK (WPA2 Personal). WEP zawiera zbyt dużo słabych punkt�w i jest podatny na szybkie złamanie, dlatego o ile nie jesteśmy ograniczeni sprzętem to należy używać właśnie WPA2.

Niekt�re karty sieciowe WiFi mają dedykowane sterowniki i ich konfiguracja nie sprawia większych kłopot�w, w pozostałych wypadkach posłużymy się sterownikami dla systemu Microsoft Windows, uruchomionymi dzięki aplikacji NdisWrapper™. Jest to możliwe dzięki temu, że większość sterownik�w jest napisana zgodnie ze standardem NDIS. Po załadowaniu modułï¿½w, dalsza konfiguracja interfejsu w obu przypadkach przebiega niemal identycznie.

Sterowniki dedykowane

Do kernela w wersji 2.6.24 trafiło wiele modułï¿½w obsługujących sterowniki kart WLAN, sterowniki rozwijane niezależnie są dostępne w osobnych pakietach kernel-net-* Przykładowo zainstalujemy moduł dla kart Atheros:

$ poldek -i kernel-net-madwifi-ng

musimy załadować moduł:

# modprobe ath_pci

Jeśli nie UDEV ładuje nam moduł kernela, to musimy dodać jego nazwę do pliku /etc/modules lub /etc/modprobe.conf, co zostało szczeg�łowo opisano w „Moduły jądra”. Teraz możemy przejść do konfiguracji interfejsu.

Sterowniki z NdisWrapperem

Instalujemy pakiety kernel-net-ndiswrapper oraz ndiswrapper:

$ poldek -i ndiswrapper kernel-net-ndiswrapper

Potrzebne nam będą teraz sterowniki windowsowe naszej karty sieciowej. Konkretnie chodzi o pliki z rozszerzeniami *.inf oraz *.sys. Możesz je skopiować z dostarczonej przez producenta płytki ze sterownikami

# mkdir /lib/windrivers
# cd /lib/windrivers
# cp /media/cdrom/sciezka/do/sterownikow/sterownik.inf .
# cp /media/cdrom/sciezka/do/sterownikow/sterownik.sys .

Musimy teraz zainstalować te sterowniki przy użyciu NdisWrappera.

# ndiswrapper -i /lib/windrivers/sterownik.inf

Jeśli chcemy aby stworzył się alias w pliku /etc/modprobe.conf wykonujemy polecenie:

# ndiswrapper -m

Sieć WEP

Domyślnie rc-skrypty do obsługi WLAN używają pakietu wireless-tools:

$ poldek -i wireless-tools

Kiedy poradziliśmy sobie ze sterownikiem, musimy utworzyć odpowiedni plik konfiguracji, kt�ry umieścimy w katalogu /etc/sysconfig/interfaces/. Nazwiemy go ifcfg-wlan0, zaś w przypadku kart z chipsetem Atheros użyjemy nazwy ifcfg-ath0. Przykładową treść takiego pliku zamieszczono poniżej:

DEVICE=wlan0
IPADDR=192.168.0.2/24
ONBOOT=yes
BOOTPROTO=dhcp

WLAN_ESSID=nasza_nazwa_sieci
WLAN_KEY=A638FED41027EA086ECD6825B0

Opcje sieci bezprzewodowej rozpoczynają się się od przedrostka WLAN_, pozostałe parametry (w tym opcje protokołu IP) są takie same jak dla zwykłej karty typu Ethernet, kt�rej konfigurację szczeg�łowo om�wiono w „Ethernet”.

Jako urządzenie w opcji DEVICE wskazujemy nadaną przez kernel nazwę. Kartom nadawane są zwykle nazwy wlan0, wlan1, itd. Wyjątkiem od tej reguły są niekt�re sterowniki, rozwijane niezależnie od kernela np. ath{$NR} dla kart z układami Atheros Communications, czy ra{$NR} dla Ralink Technology (w kernelach do 2.6.24). To jaka nazwa została przydzielona naszemu urządzeniu możemy odczytać z komunikat�w jądra.

Poniżej przedstawione zostaną parametry sieci WLAN:

WLAN_ESSID=moja_siec

Powyższa opcja to identyfikator ESSID naszej sieci

WLAN_KEY=A638FED41027EA086ECD6825B0

Przy pomocy kolejnej zmiennej podajemy klucz WEP, na przykładzie użyto klucza szesnastkowego, aby podać klucz w postaci ASCII musimy ma jego początku dodać: "s:"

Dodatkowo możemy ustawić szybkość interfejsu:

WLAN_BITRATE=auto

Tą opcję możemy ustawić r�wnież na sztywno, przez podanie obsługiwanej wartości np.: 11MB, 24MB, 54MB.

Sieć WPA2-PSK

Opisane powyżej wireless-tools nie potrafią używać szyfrowania WPA/WPA2, dlatego konieczny nam będzie pakiet wpa_supplicant™:

$ poldek -i wpa_supplicant

Edytujemy plik /etc/wpa_supplicant.conf, w kt�rym definiujemy opcje sieci WLAN:

ap_scan=1
		
network={
   ssid="nasza_nazwa_sieci"
   key_mgmt=WPA-PSK
   proto=RSN
   pairwise=CCMP TKIP
   group=CCMP TKIP WEP104 WEP40
   psk=anejdlf7323e64ekjlkbdsxhjsldjf3fda
}

Hasło do naszej sieci w linijce psk może być jawne lub kodowane za pomocą polecenia wpa_passphrase

Testujemy połączenie z WiFi:

# ifconfig wlan0 up
# wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf -dd

Opcja -dd włącza tryb debugowania i jeżeli nie otrzymamy jakichś błęd�w, to przerywamy działanie wpa_supplicant™ skr�tem ctr-c Pozostała nam jeszcze edycja /etc/sysconfig/interfaces/ifcfg-wlan0, w celu wskazania, że chcemy korzystać z wpa_supplicant:

DEVICE=wlan0
IPADDR=192.168.0.2/24
ONBOOT=yes
BOOTPROTO=dhcp

WLAN_WPA=yes
WLAN_WPA_DRIVER=wext

Restartujemy ponownie naszą sieć:

# /etc/init.d/network restart

i nasza sieć WiFi powinna już działać.

Aktywacja i diagnostyka

Na wszelki wypadek powinniśmy się upewnić, że nasza maszyna jest w zasięgu sieci radiowej:

# iwlist wlan0 scan

Jeśli sieć jest na liście, to pr�bujemy podnieść interfejs (oczywiście, jeżeli tego nie zrobiliśmy już wcześniej):

# /etc/rc.d/init.d/network start
Ustawianie parametr�w sieci....................[ ZROBIONE ]
Podnoszenie interfejsu wlan0...................[ ZROBIONE ]

Aby sprawdzić czy wszystko jest OK możemy użyć polecenia iwconfig, kt�re powinno wyświetlić coś w stylu:

# iwconfig
lo      no wireless extensions.
 
eth0    no wireless extensions.
 
wlan0   IEEE 802.11g  ESSID:"nasza_nazwa_sieci" Nickname:"foo.com"
        Mode:Managed  Frequency:2.412 GHz  Access Point: 8A:1C:F0:6F:43:2D
        Bit Rate=300 Mb/s   Sensitivity=-200 dBm
        RTS thr=2346 B   Fragment thr=2346 B
        Encryption key:ABFA-155B-E90F-1D1C-FC34-66ED Security mode:restricted
        Power Management:off
        Link Quality:100/100  Signal level:-30 dBm  Noise level:-96 dBm
        Rx invalid nwid:0  Rx invalid crypt:0
        Rx invalid frag:0
        Tx excessive retries:0  Invalid misc:0  Missed beacon:0

w wyświetlonych danych interfejsu odszukujemy wartość jakości połączenia: Link Quality Niezerowa wartość oznacza, że konfiguracja zakończyła się sukcesem.

W przypadku użycia pakietu wpa_supplicant możemy użyć programu wpa_cli:

wpa_cli status
Selected interface 'wlan0'
bssid=00:1e:e5:6d:62:5e
ssid=nasza_nazwa_sieci
id=0
pairwise_cipher=CCMP
group_cipher=TKIP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.0.2

Wartość COMPLETED parametru wpa_state oznacza prawidłowe połączenie z WiFi.

Jeżeli mamy kartę obsługującą tryb "n" może nam się przydać polecenie iwpriv z pakietu wireless-tools™. Możemy przełączyć wtedy kartę wifi w szybszy tryb, ponieważ często z automatu włączony jest wolniejszy np. "g". Uruchamiamy więc:

# iwpriv wlan0 network_type n

i powinniśmy wykorzystywać już naszą kartę maksymalnie - co możemy sprawdzić poleceniem:

# iwlist bitrate
lo	no bit-rate information.
		
eth0	no bit-rate information.
		
wlan0   8 available bit-rates :
        6 Mb/s
        9 Mb/s
        12 Mb/s
        18 Mb/s
        24 Mb/s
        36 Mb/s
        48 Mb/s
        54 Mb/s
        Current Bit Rate=270 Mb/s

Neostrada+ z modemem USB firmy Sagem

Wprowadzenie

Na samym początku musimy włączyć w biosie komputera port USB oraz zainstalować takie pakiety jak eagle™ oraz kernel-usb-eagle™. Dodatkowo musimy jeszcze zainstalować pakiet ppp™. Jeżeli zainstalowałeś system z płytki MINI-iso, powinieneś je tam znaleźć. W przypadku, kiedy instalowałeś system z dyskietki, znajdziesz je na jednej lub kilku dyskietek "addons" czyli dyskietek zawierających dodatkowe pakiety.

Instalacja

Przystępujemy do instalacji. Należy przejść do do lokalizacji w kt�rej znajdują się owe pakiety a następnie wydać następujące polecenie.

# rpm -Uvh kernel-usb-eagle* eagle-usb* ppp*

Kiedy już upewniliśmy się, że mamy włączony port USB w biosie, musimy go zainicjować w systemie. Możemy to zrobić za pomocą pliku /etc/modules.conf w kt�rym umieszczamy przykładową linijkę

alias usb-controller usb-uhci

Jeżeli posiadasz zainstalowany kernel z serii 2.6.x powinieneś umieścić następujący wpis w pliku /etc/modprobe.conf

alias usb-controller uhci-hcd

Po ponownym uruchomieniu komputera powinniśmy posiadać w systemie obecny moduł usb-uhci (uhci-hcd dla jądra 2.6.x). W przypadku, kiedy ten moduł po prostu nie zadziała spr�buj załadować usb-ohci (ohci-hcd dla jądra 2.6.x). Jeżeli podłączyłeś modem do portu USB 2.0 powinieneś użyć modułu usb-ehci (ehci-hcd dla jądra 2.6.x).

Możemy teraz podłączyć modem do komputera. Nasze urządzenie zostanie od razu wykryte i zainicjowane w systemie. Poprawna inicjalizacja powinna zakończyć się załadowaniem do pamięci modułu adiusbadsl. UWAGA! Jeżeli posiadasz kernel 2.6.x powinieneś załadować moduł eagle-usb.

Konfiguracja

Możemy zacząć od pliku /etc/resolv.conf. Opis znajdziecie w rozdziale poświęconym konfiguracji sieci. Przystępujemy teraz do konfiguracji pliku /etc/eagle-usb/eagle-usb.conf. Należy w nim zmienić wartość opcji VPI na taką jaką widzicie poniżej.

VPI=00000000

Skonfigurujemy teraz demona PPP. Utworzonemu w wyniku instalacji plikowi /etc/ppp/options zmieniamy nazwę na options.old. Tworzymy nowy plik options z zawartością taką jaka została przedstawiona na poniższym listingu. Najważniejszą rzeczą jest podanie w nim nazwy użytkownika, kt�ra jest konieczna do ustanowienia połączenia. Możemy r�wnież dopisać opcję debug, jeśli chcemy być informowani o tym co się dzieje.

# cat /etc/ppp/options
user "[email protected]"
mru 1492
mtu 1492
noipdefault
defaultroute
usepeerdns
noauth
#ipcp-accept-remote
#ipcp-accept-loacal
nobsdcomp
nodeflate
nopcomp
novj
novjccomp
#novaccomp -am
noaccomp -am
#włączam debug.
debug

Musimy jeszcze wpisać hasło. Aby tego dokonać wyedytujmy plik /etc/ppp/chap-secrets. UWAGA! Jeżeli się pomylisz i wpiszesz hasło do /etc/ppp/pap-secrets, hasło nie zadziała.

# cat /etc/ppp/chap-secrets
[email protected]	*	haslo	*

Na tym zakończymy konfigurację połączenia z Neostradą. Jesteśmy już gotowi aby wszystko uruchomić.

Uruchomienie i post konfiguracja

Najbardziej wygodnym sposobem będzie wykorzystanie mechanizmu rc-scripts do uruchamiania usługi. Do tego potrzebny będzie odpowiedni plik konfiguracji, przykładowy taki plik umieszczono w katalogu /usr/share/doc/rc-scipts/ oraz na poniższym wydruku:

DEVICE=ppp0
ONBOOT=yes
PPPOA_EAGLE=yes
AUTH=no
MTU=1452
PERSIST=yes
DEFROUTE=yes
USEPEERDNS=yes
[email protected]
# put password in /etc/ppp/pap-secrets or install
# ppp-plugin-ifcfg-password and uncommend following lines
# PLUGIN_IFCFG_PASSWORD=yes
# PASSWORD=YYYY

Plik zapisujemy jako /etc/sysconfig/interfaces/ifcfg-ppp0 i wydajemy polecenie:

# ifup ppp0

Dzięki opcji ONBOOT=yes połączenie będzie nawiązywane wraz z uruchamianiem systemu.

Możemy sprawdzić np. pingiem łączność z jakimś zewnętrznym serwerem, np. ping www.pld-linux.org. Jeżeli posiadasz jakąś sieć LAN, lub kilka komputer�w w mieszkaniu, powinieneś przeczytać rozdział poświęcony maskaradzie.

Neostrada+ z modemem USB firmy Alcatel - Thompson

Przygotowanie do instalacji

Oto kr�tka lista tego, co będzie nam potrzebne do uruchomienia modemu.

  • Port USB w komputerze

  • Jądro z serii 2.4 lub 2.6

  • Programy: modem_run™ oraz pppoa3

  • Pakiet: ppp-plugin-pppoatm

  • Firmware do modemu.

Firmware dla modemu można ściągnąć z stąd: http://speedtouch.sourceforge.net/files/firmware.bin.

Jeżeli już upewniłeś się, że masz wszystkie wymagane rzeczy, możemy przystąpić do instalacji.

Konfiguracja

W pierwszej kolejności musimy zainicjować w systemie USB, oraz kilka modułï¿½w do obsługi ppp. Możemy to zrobić wykonując następujące polecenie

# for i in usbcore uhci acm ppp_generic \
    ppp_synctty;do modprobe $i;done

Komentarza wymaga tutaj obsługa USB. W przykładzie został podany moduł uhci. Jeżeli nie załaduje się poprawnie (zostaniesz o tym poinformowany) powinieneś wybrać jeden z następujących: usb-uhci, usb-ohci lub dla USB 2.0 usb-ehci. Posiadacze jąder z serii 2.6 mają do wyboru następujący zestaw modułï¿½w: uhci-hcd, ohci-hcd lub ehci-hcd. Ta r�żnorodność jest uwarunkowana sprzętowo, w zależności od rodzaju chipsetu obsługującego porty USB. Ważną rolę tutaj odgrywa moduł acm, gdyż bez niego nie będzie możliwe załadowanie firmware do modemu. W kernelach z serii 2.6.x odpowiednikiem acm jest moduł cdc-acm.

Posiadacze kernela z serii 2.6.x mogą użyć poniższej pętli kt�ra załaduje wszystkie potrzebne moduły. Oczywiście należy zwr�cić uwagę aby załadować odpowiedni dla Twojego sprzętu moduł obsługujący kontroler USB na płycie głï¿½wnej.

# for i in usbcore uhci-hcd cdc-acm ppp_generic ppp_synctty;do modprobe $i;done

Następnym krokiem jest podmontowanie systemu plik�w w proc.

# mount none /proc/bus/usb -t usbfs

W tym momencie możemy sprawdzić, czy SpeedTouch rzeczywiście jest widziany przez system. Aby tego dokonać wykonaj poniższe polecenie

# cat /proc/bus/usb/devices
[...]
S:  Manufacturer=ALCATEL
S:  Product=Speed Touch 330
[...]

Musisz teraz zainstalować oprogramowanie do modemu. Robimy to wydając następujące polecenie:

# poldek -U speedtouch

Podłącz modem do komputera. Będzie on potrzebował do działania specjalnego pliku, tak zwanego firmware. Program modem_run potrafi odczytywać firmware w formatach przygotowanych dla Linuksa, Windowsa oraz MacOS. Jakie są możliwości pobrania pliku firmware? Możemy pobrać go z adresu podanego na początku rozdziału. Jest to firmware przygotowany dla systemu MacOS. Linuksowy firmware możemy pobrać ze strony Alcatela: www.speedtouchdsl.com/dvrreg_lx.htm. Wymagana jest rejestracja. Możemy r�wnież go wziąć z płytki dostarczonej przez TPSA. Powinien on znajdować się w archiwum Linux/ThomsonST330/pliki.tar.gz. Po jego rozpakowaniu powinniśmy mieć coś takiego jak: drivers/speedmgmt.tar.gz. Posiadając już plik speedmgmt.tar.gz możemy sobie zbudować pakiet rpm z firmwarem przy użyciu speedtouch-firmware.spec. Musimy tylko skopiować archiwum do katalogu ~/rpm/SOURCES. Dalsze instrukcje dotyczące budowania pakiet�w znajdziesz w tej dokumentacji w rozdziale: Tworzenie PLD. Po zainstalowaniu zbudowanego pakietu z firmwarem, możemy go załadować wydając poniższe polecenie:

# modem_run -v 1 -m -f /ścieżka/do/firmware

Ładowanie firmware do modemu może trochę potrwać. Jeżeli chcesz widzieć co się dzieje wpisz następujące polecenie

# tail -f /var/log/messages

W trakcie ładowania pliku firmware, zaczną migać diody urządzenia. Będzie to oznaczać synchronizację linii. Po kilkunastu sekundach modem się ustabilizuje. Diody powr�cą do zielonego koloru.

Jeżeli masz zainstalowany kernel z serii 2.6 lub 2.4.22+ wykonaj poniższe polecenia:

# modprobe speedtch
# modem_run -k -m -v 1 -f /usr/share/speedtouch/mgmt.o
# modprobe pppoatm

Moduł speedtch jest potrzebny do użycia opcji -k (może być ładowany automatycznie przez hotplug. Z kolei pppoatm będzie potrzebny do uruchomienia pppd. Nie ładuje się on automatycznie, dlatego należy go dopisać np. do /etc/modules.

W porządku. Po zakończonej operacji ładowania firmware jesteśmy gotowi aby skonfigurować nasze ppp do neostrady. Zanim to zrobimy będziemy musieli zainstalować pakiet ppp-plugin-pppoatm.

# poldek -U ppp-plugin-pppoatm

W zależności od wersji zainstalowanego kernela (2.6 lub 2.4) konfiguracja demona pppd będzie się r�żniła kilkoma szczeg�łami. Poniżej przedstawiam przykłady dla obu serii jąder.

Linux z serii 2.4

# cat /etc/ppp/peers/neostrada
debug
lock
noipdefault
defaultroute
pty "/usr/sbin/pppoa3 -v 1 -e 1 -c -m 1 -vpi 0 -vci 35"
asyncmap 0
lcp-echo-interval  2
lcp-echo-failure   7
sync
user "[email protected]"
noauth
holdoff 3
persist
maxfail 25
mru 1500
mtu 1500

Linux z serii 2.6 lub 2.4.22+

# cat /etc/ppp/peers/neostrada
noauth
usepeerdns
noipdefault
defaultroute
pty "/usr/sbin/pppoa3 -e 1 -v 1 -m 1 -c -vpi 0 -vci 35"
sync
user nasz_login
noaccomp
nopcomp
noccp
holdoff 4
persist
maxfail 25

Ważną rolę odgrywa tu parametr -e 1, gdyż bez niego nie uzyskamy połączenia.

Oczywiście musimy jeszcze odpowiednio skonfigurować pap-secrets oraz chap-secrets

# cat /etc/ppp/chap-secrets
[email protected]     *       haslo        *

Uruchomienie i zakończenie

W celu nawiązania połączenia, kt�re uprzednio skonfigurowaliśmy, wydajemy takie oto polecenie

pppd call neostrada

Jeżeli nie chcemy, bądź z jakichś powod�w nie możemy korzystać z programu hotplug™ nie musimy tego robić. Nie jest on tak naprawdę niezbędny. W takim przypadku za każdym razem będziemy musieli ładować firmware modemu programem modem_run™.

xDSL z interfejsem Ethernet

Wprowadzenie

Coraz więcej dostawc�w usług internetowych oferuje dzierżawę linii xDSL z portem LAN typu Ethernet, takie usługi oferują np. Telekomunikacja Polska (Internet DSL) oraz Dialog (DIALNET DSL).

Konfiguracja

W celu uruchomienia usługi, wystarczy jedynie skonfigurować interfejs sieciowy Ethernet w naszym komputerze, zgodnie z informacjami uzyskanymi od dostawcy łącza (konfiguracja statyczna). Poniżej przedstawiono skr�cony opis konfiguracji tego typu interfejsu, szczeg�łowy opis znajdziemy tutaj: „Ethernet”

Podniesienie interfejsu eth0 możemy osiągnąć tworząc lub edytując (jeśli istnieje) plik /etc/sysconfig/interfaces/ifcfg-eth0 i wpisując dane otrzymane od dostawcy:

DEVICE="eth0"
IPADDR="80.55.203.222/30"
ONBOOT="yes"
BOOTPROTO="none"

Istotną kwestią jest przypisanie odpowiedniego prefiksu (maski podsieci) przy podaniu adresu IP zarezerwowanego dla abonenta. Prefiks wykorzystywane w usłudze InternetDSL, to: /30 Internet DSL 512 oraz Internet DSL 1 (przydzielone 4 adresy IP, co odpowiada masce podsieci 255.255.255.252), /29 Internet DSL 2 (przydzielone 8 adres�w IP, co odpowiada masce podsieci 255.255.255.248). Należy pamiętać że 3 adresy IP są zarezerwowane do obsługi połączenia (adres sieci,brama,broadcast)

Ostatnią zmianą potrzebną do prawidłowego działania sieci jest wyedytowanie pliku /etc/sysconfig/network. Należy tam podać adres bramy (IP modemu DSL).

GATEWAY="80.55.203.221"
GATEWAYDEV="eth0"

Na koniec pozostaje nam uruchomienie podsystemu sieci:

# service network start

Uwagi

Jeśli przy łączu Internet DSL 1 zdarzają się przypadki zerwania połączenia, należy przywiązać 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 pozwalającym na automatyczne konfigurwanie systemu po podłączeniu określonego urządzenia. W przypadku urządzeń sieciowych PCMCIA i USB możliwe jest automatyczne aktywowanie interfejsu od razu po podłączeniu urządzenia.

Aby uruchomić ten mechanizm musimy najpierw zainstalować odpowiednie oprogramowanie:

# poldek -i hotplug*

Kolejnym krokiem będzie umieszczenie odpowiedniego wpisu w pliku konfiguracji interfejsu sieciowego. Dodajemy opcję:

HOTPLUG=yes

Narzędzia

Narzędzia do zarządzania i diagnostyki interfejs�w sieciowych opisano w „Narzędzia sieciowe”.

Inne opcje

Zaawansowane opcje sieciowe interfejs�w nie są umieszczane w plikach generowanych w trakcie instalacji systemu. Ich opis znajdziemy w pliku /usr/share/doc/rc-scripts/ifcfg-description.gz.

Wzory konfiguracji

Wiele przykładowych konfiguracji interfejs�w sieciowych odnajdziemy w katalogu z dokumentacją do rc-skrypt�w: /usr/share/doc/rc-scripts. Są to pliki tekstowe zarchiwizowane programem Gzip™.

Rozdział 15. Zastosowania sieciowe

W tym rozdziale znajdziesz informacje dotyczące konfiguracji sieci

Routing statyczny

Podstawowe trasy do podsieci są automatycznie tworzone przy konfiguracji interfejs�w sieciowych na podstawie podanego adresu IP i maski podsieci. Trasa domyślna jest konfigurowana na podstawie ustawień w pliku /etc/sysconfig/network. Operacje te zostały opisane w poprzednim rozdziale, w przypadku bardziej zaawansowanych zastosowań musimy samodzielnie skonfigurować trasy pakiet�w.

Wstępna konfiguracja

Konfigurację routingu obowiązkowo rozpoczynamy od włączenia przekazywania pakiet�w między interfejsami sieciowymi, opcję tą możemy ustawić tymczasowo wykonując polecenie

# echo "1" > /proc/sys/net/ipv4/ip_forward

Możemy też w pliku /etc/sysctl.conf ustawić następująca opcję:

net.ipv4.ip_forward = 1

Następnie restartujemy podsystem sieci

# service network restart

Więcej o parametrach jądra znajdziemy w „Parametry jądra”

Tablica routingu

Aby wyświetlić tablicę routingu posłużymy się poleceniem ip route:

# ip route
10.0.0.4/32 dev eth0  proto kernel  scope link  src 10.0.0.4
10.0.0.0/24 dev eth1  proto kernel  scope link  src 10.0.0.1
default via 10.0.0.100 dev eth0 onlink

Zarządzanie trasami

Zarządzenia routingiem na kilku przykładach:

Dodanie trasy do hosta

# ip route add 10.0.0.4/32 dev eth0

Dodanie trasy do podsieci

# ip route add 10.0.0.0/24 dev eth1

Wskazanie bramy domyślnej:

# ip route add 0/0 via 10.0.0.100 dev eth0

dodatkowe opcje:

  • src {$adres_IP} - adres źr�dłowy nowo tworzonych pakiet�w, opcja ma istotne znaczenie m.in. w przypadku przypisania kilku adres�w IP do tego samego interfejsu.

  • protocol {$nazwa/$numer} - opcja ważna w przypadku łączenia trasowania statycznego z dynamicznym. Najczęściej stykamy się z protokołami: redirect, kernel, boot, ra. Ich pełną listę wraz z odpowiadającym im numerom znajdziemy w pliku /etc/iproute2/rt_protos. Dla samego statycznego routowania nie ma potrzeby jej definiowania.

Usuwanie regułek jest bardzo podobne do dodawania, musimy użyć opcji "del" zamiast "add".

Zakończenie

  • Dodane przez nas regułki możemy zapisac na stałe, w ten spos�b zostaną automatycznie wczytanie po "podniesieniu" podsystemu sieci. W tym celu modyfikujemy plik /etc/sysconfig/static-routes np.:

    eth0 10.0.0.0/24
    eth1 192.168.0.0/24 src 192.168.0.4

  • Jądro używa specjalnego cache do wydajniejszego trasowania pakiet�w, ma to jednak pewną wadę: zmiany w nim nie następują od razu po zmodyfikowaniu tablicy routingu. Aby wymusić natychmiastowe wyczyszczenie cache należy użyć poniższego polecenia:

    # ip route flush cache

NAT

NAT (Network Address Translation) w Linuksie można zrobić na dwa sposoby:

  • wykorzystując infrastrukturę netfilter™ jądra 2.4 i 2.6.

  • korzystając z narzędzi do kontrolowania sieci z pakietu iproute2™.

Oryginalna dokumentacja Netfilter w języku angielskim

Najlepszym sposobem jest wykorzystanie możliwości netfilter™, gdyż wykonuje on nat przed (PREROUTING) lub po (POSTROUTING) routingu, co daje nam możliwość tak skonfigurowania firewalla, jak by nie było wykonywane NAT. NAT w iptables™ tworzymy dodając regułki do tabeli "nat". Żeby sprawdzić jakie są dostępne "Chains" w tabeli nat, należy wykonać takie polecenie:

# iptables -t nat -L

W poniższych przykładach założyliśmy, że 1.2.3.4 jest adresem IP podniesionym na interfejsie zewnętrznym ($if_wan) zaś 192.168.1.0/16 to adresy na interfejsie sieci lokalnej ($if_lan).

DNAT

W PREROUTING są regułki do wykonania DNAT (Destination NAT). Zamienia to adres hosta docelowego na nasz prywatny, w ten spos�b możemy przekierować ruch na dowolny host w sieci prywatnej:

# iptables -t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to 192.168.1.2

Można określić na jakim interfejsie będzie wykonany NAT poprzez opcję -i $inteface. Opcja -o w PREROUTING nie jest dostępna.

Możemy też dokonać przekierowania ruchu kierowanego na konkretny port, zwanego potocznie przekierowaniem portu:

# iptables -t nat -A PREROUTING -i $if_wan -p TCP -d 1.2.3.4 --dport 8000  -j DNAT --to 192.168.1.11:80

SNAT 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 łącza".

# iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT --to 1.2.3.4

Jeśli podamy maskę podsieci, zostanie wykorzystana większa ilość adres�w.

MASQUERADE wykonuje to samo co SNAT z tym, że na adres interfejsu jakim wychodzi pakiet. Używać go należy tylko kiedy nasz adres publiczny zmienia się. (np. w połączeniach ze zmiennym IP publicznym)

Zakończenie.

Po ustawieniu DNAT na adres wewnętrzny zauważymy, że jest problem z dostępem do ip 1.2.3.4 z wewnątrz sieci. Dzieje się tak dlatego, że adres source zostaje bez zmian, dlatego też pakiet nie wraca do bramy. Musimy więc zmusić, aby host wysyłał odpowiedź do bramy. Możemy wykonać to w następujący spos�b:

# iptables -t nat -A POSTROUTING -o $if_lan -s 192.168.0.0/16 \
		    -d 1.2.3.4 -j SNAT --to 192.168.0.1

Gdzie $if_lan to interfejs lokalnej sieci, a 192.168.0.1 to adres na tym interfejsie.

Podział łącza w zależności od serwis�w

Wstęp

Administratorzy sieci osiedlowych często natrafiają na problemy z programami p2p. Potrafią one skutecznie zapychać łącza. Jednym z możliwych rozwiązań jest zablokowanie takiego ruchu, a drugim opisanym w tym dokumencie, jest przekierowanie go na jedno z łącz - odciążając tym samym drugie.

Jednym z możliwych problem�w może być "zatykanie" modemu, więc należy się dowiedzieć ile modem może obsłużyć aktywnych połączeń i ograniczyć wyjście przez iptables do tej wartości.

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 wychodzących połączeń TCP. Wyeliminuje to problem, kiedy pakiety nie są w stanie wyjść w świat gdyż za dużo jest aktywnych połączeń i modem się zawiesza.

Drugim sposobem jest ograniczenie pasma wychodzącego w taki spos�b, żeby router pilnował, aby na modemie nie było zbyt dużego ruchu sieciowego.

# tc qdisc del dev eth1 root
# tc qdisc add dev eth1 root handle 1 cbq bandwidth 256Kbit \
    avpkt 1000 cell 8
# tc class change dev eth1 root cbq weight 32bit allot 1514

# tc class add dev eth1 parent 1: classid 1:2 cbq bandwidth 256Kbit \
    rate 216Kbit weight 27Kbit prio 1 allot 1514 cell 8 maxburst 20 \
    avpkt 1000 bounded
# tc qdisc add dev eth1 parent 1:2 handle 2 tbf rate 216Kbit \
    buffer 10Kb/8 limit 15Kb mtu 1500
# tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 \
    match ip src $ip_nat classid 1:2

Gdzie $ip_nat to adres ip serwera

Przekierowanie p2p i połączeń podobnych

Trzecim sposobem jest zakupienie drugiego, taniego łącza i puszczenie nim niechcianego ruchu np tak:

Cały niezidentyfikowany ruch przekierowywany jest na łącze dodatkowe, a zidentyfikowany na łącze drugie (szybsze).

Na początek ustawimy w tabeli mangle takie regułki, służąc do oznaczania odpowiednich pakiet�w:

// przywr�cenie wartości mark dla nawiązanych już połączeń
# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark

// jeśli się okaże, że jakieś p2p działa na portach preferowanych to
// zaznaczy je i wtedy nie przepuści
# iptables -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p \
    -j MARK --set-mark 0x1214
# iptables -t mangle -A PREROUTING -p tcp -m ipp2p --ipp2p-data \
    -j MARK --set-mark 0x1214
// zachowanie dla potomności
# iptables -t mangle -A PREROUTING -p tcp -m mark --mark 0x1214 \
    -j CONNMARK --save-mark

// jeśli jakiś pakiet jest już oznaczony to wychodzi 
// z tabeli mangle i sprawdza kolejne regułki iptables
# iptables -t mangle -A PREROUTING -m mark ! --mark 0x0 -j RETURN

// znakuje uprzywilejowane servisy
# iptables -t mangle -A PREROUTING -p icmp  -s 192.168.0.0/16 \
    -j MARK --set-mark 0x1
# iptables -t mangle -A PREROUTING -p udp   -s 192.168.0.0/16 \
    -j MARK --set-mark 0x1
// porty 1:1024
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 1:1024 -j MARK --set-mark 0x1
// mysql
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 3306 -j MARK --set-mark 0x1
// gg
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 8074 -j MARK --set-mark 0x1
// cache
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 8080 -j MARK --set-mark 0x1
// gra americans army
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 1716:1718 -j MARK --set-mark 0x1
// irc
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 
    --dport 6665:6667 -j MARK --set-mark 0x1
// gra enemy terrytory
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 27960 -j MARK --set-mark 0x1
// gra MU Online
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 55201 -j MARK --set-mark 0x1
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    --dport 44405 -j MARK --set-mark 0x1

// wszystkie porty dobrze znanych serwer�w
// www.wp.pl
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    -d 212.77.100.101 -j MARK --set-mark 0x1
// czat.wp.pl
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    -d 212.77.100.113 -j MARK --set-mark 0x1
// www.onet.pl
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    -d 213.180.130.200 -j MARK --set-mark 0x1
//strona z grami Online  www.miniclip.com
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    -d 69.0.241.20 -j MARK --set-mark 0x1
// www.kurnik.pl
# iptables -t mangle -A PREROUTING -p tcp   -s 192.168.0.0/16 \
    -d 217.17.45.25 -j MARK --set-mark 0x1

// no i jeszcze zachować dla potomności
# iptables -t mangle -A PREROUTING -p tcp -m mark --mark 0x1 \
    -j CONNMARK --save-mark

Jeśli już mamy oznaczone pakiety należy je odpowiednio przekierować. Możemy skorzystać z dobrodziejstwa iproute2™ i dodać następujące regułki:

# ip route add from 192.168.0.0/16 fwmark 0x1214 lookup TABLE_SMIECI
# ip route add from 192.168.0.0/16 fwmark 0x1 lookup TABLE_PRIORYTET
// ta regułka kieruje cały nieoznakowany ruch na łącze śmieci
// potrzebne jeśli domyślne jest inne łącze
# ip route add from 192.168.0.0/18 lookup TABLE_SMIECI

Oczywiście trzeba dodać do tabeli odpowiednie wpisy default i informacje o sieciach obsługiwanych przez ten router. Należy jeszcze wykonać te polecenia dla interfejsu z wyjściem w świat:

# echo 0 >  /proc/sys/net/ipv4/conf/eth1/rp_filter

Po takich zabiegach użytkownicy powinni odczuć znaczny wzrost wydajności łącza PRIORYTET

Niestety łącze SMIECI jest maksymalnie zapchane, więc należy przygotować się na narzekania użytkownik�w kt�rzy są przekierowani na to łącze.

Przy takim rozwiązaniu należy mieć stałą kontrolę nad usługami, kt�re mają działać na łączu PRIORYTET i stale uaktualniać tabelę mangle o odpowiednie wpisy.

Nie udało się niestety przekierować samego ruchu p2p gdyż podczas nawiązywania połączenia nie wiemy jeszcze czy jest to pakiet należący do p2p. Dzisiejsze programy p2p potrafią działać na portach poniżej 1024 np 80 (http) więc rozr�żnienie ich po portach nic nie da

Innym rozwiązaniem może być wydzielenie port�w dla program�w p2p i ogłoszenie ich użytkownikom sieci. Należy wtedy zablokować ruch p2p na wszystkie porty opr�cz tych wydzielonych i jeśli ktoś się nie dostosuje to nie będzie miał transferu. To rozwiązanie ma jednak wadę: będzie generowało dużo połączeń nawiązywanych (pakiety SYN) na obu łączach, gdyż iptables™ nie pozwoli na transfer dopiero po nawiązaniu połączenia i rozpoznaniu połączania jako należącego do p2p.

PPP over SSH - Tunel IPv4

Wstęp

Zaletą tego rodzaju tunelu jest to, że jego działanie opiera się na jednych z bardziej popularnych protokołach PPP™ oraz SSH™. Komunikacja odbywa się na porcie 22. Dzięki temu nie zachodzi potrzeba otwierania dodatkowych port�w komunikacyjnych w konfiguracji zapory ogniowej. Interfejsy tunelu uruchamiane są przez demona pppd. Posłużą nam one do zestawienia trasy między dwoma hostami lub sieciami w zależności od potrzeb. Do naszych cel�w będzie potrzebny demon pppd będący implementacją protokołu ppp oraz klient i serwer ssh implementujący protok�ł ssh.

Konfiguracja

Zanim przystąpimy do konfiguracji musimy zdecydować kt�ry komputer będzie serwerem a kt�ry klientem. Klient będzie inicjował połączenie z serwerem uruchamiając demona pppd.

Serwer

Zanim przystąpimy do konfiguracji należy sprawdzić czy system wyposażony jest w demona ppp oraz serwer ssh. Pakiety kt�re to udostępniają to odpowiednio ppp™ oraz openssh-server™. Przydatnym może się okazać pakiet openssh-clients™ zawierający jak sama nazwa wskazuje klienta ssh.

Po zainstalowaniu wyżej wymienionych pakiet�w przechodzimy do konfiguracji systemu. W pierwszej kolejności zakładamy konto użytkownika oraz przydzielamy mu grupę.

# groupadd vpn-users
# useradd -m -s /usr/sbin/pppd -g vpn-users vpn
# passwd vpn
New UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Efekt wykonanych poleceń możesz zobaczyć na listingu poniżej

# grep vpn /etc/passwd
vpn:x:506:1005::/home/users/vpn:/usr/sbin/pppd

#grep vpn-users /etc/group
vpn-users:x:1005:

Wynik tych poleceń powinien odpowiadać temu co tutaj widać. GID grupy vpn-users wynosi 1005 czyli odpowiada GID ustawionemu w pliku /etc/passwd. Poleceniem passwd ustawiamy hasło dla tego konta, kt�re zostało wpisane do /etc/shadow.

Istotnym dla konfiguracji elementem w katalogu użytkownika vpn jest katalog ~/.ssh. Możemy go stworzyć (o ile wcześniej zainstalowaliśmy) przy pomocy klienta ssh. Robimy to w dw�ch krokach kt�re obrazuje poniższy przykład

# su - vpn -s /bin/bash
$ ssh domena.pl
Warning: Permanently added 'domena.pl,xxx.xxx.xx.x' \
    (RSA) to the list of known hosts.
Password:
^C

Można też ręcznie utworzyć z poziomu konta vpn ten katalog poleceniem mkdir. Aby umożliwić użytkownikowi prawo do wykonania po zalogowaniu polecenia /usr/sbin/pppd należy nadać temu plikowi suida.

# chmod 4755 /usr/sbin/pppd

Konfigurację warstwy ssh mamy już za sobą. Możemy teraz przystąpić do konfiguracji demona pppd. Demon nie będzie wymagał autoryzacji, więc w pliku /etc/ppp/options wyszukujemy opcję auth i zmieniamy ją na noauth. Musimy teraz skonfigurować wierzchołek (tzw. peer) końca tunelu. Tworzymy więc plik /etc/ppp/peers/tunel określający wszystkie niezbędne parametry połączenia. Na listingu poniżej przykładowa konfiguracja wierzchołka.

# cat /etc/ppp/peers/tunel
192.168.1.100:192.168.1.101
noauth
lcp-echo-interval 5
lcp-echo-failure 3

W pierwszej linijce oddzielone są dwukropkiem adresy IP wierzchołk�w tunelu. Ten po lewej stronie zostanie ustawiony na interfejsie serwera, ten po prawej klienta. Przedstawioną konfigurację należy potraktować jako przykład i dostosować ją do rzeczywistej. Oczywiście, jeżeli spełnia ona Twoje wymagania możesz ją zastosować.

  • noauth - wyłączamy autoryzację ppp

  • lcp-echo-interval - wartość przy tej opcji określa interwał w sekundach z jakim wysyłana będzie do peera ramka żądania o echo LCP. Demon sprawdza w ten spos�b czy połączenie nadal jest aktywne.

  • lcp-echo-failure - wartość podana przy tej opcji określa ile żądań o echo LCP ma zostać wysłanych jeżeli peer nie dał odpowiedzi. Po tylu pr�bach demon stwierdzi, że połączenie zostało utracone.

Klient

Konfiguracja po stronie klienta sprowadza się do wygenerowania kluczy rsa oraz odpowieniego ustawienia demona pppd. Klucze nam są potrzebne do autentykacji nie interaktywnej ssh. Inaczej nie uda nam się nawiązać połączenia z serwerem. Do zestawienia połączenia z serwerem po stronie klienta wymagana jest instalacja pakiet�w ppp™ oraz openssh-clients™. Jeżeli ich nie posiadasz musisz je niezwłocznie zainstalować.

Przystępujemy do dalszej konfiguracji usługi po stronie klienta. Zaczniemy od wspomnianego na wstępie generowania kluczy.

$ ssh-keygen -b 1024 -f ~/.ssh/klucz -t rsa -P ""
Generating public/private rsa key pair.
Your identification has been saved in /home/users/foo/.ssh/klucz.
Your public key has been saved in /home/users/foo/.ssh/klucz.pub.
The key fingerprint is:
c9:d8:17:bd:ba:82:a0:f0:47:7c:32:c2:e8:7e:32:e8 foo@pldmachine

Do generowania kluczy służy znajdujące się w pakiecie openssh-clients™ polecenie ssh-keygen. Użyliśmy go z następującymi parametrami:

  • -b - długość klucza w bitach. Wartość podana na listingu jest minimalną długością klucza kt�ra jest akceptowana przez demona sshd™.

  • -f - nazwa pliku (można podać ścieżkę do niego) zawierającego klucz prywatny.

  • -t - typ klucza. Na listingu jest to RSA. RSA jest algorytmem służącym do generowania kluczy.

  • -P - hasło klucza. Na potrzeby tunelu hasło musi pozostać puste. Inaczej tunel nie zadziała. Demon sshd będzie czekał na potwierdzenie hasłem klucza co nigdy nie nastąpi, gdyż sesja ssh będzie inicjowana poprzez demona pppd uniemożliwiając nam w spos�b interaktywny jej przejęcie.

Kolejnym krokiem jest skopiowanie zawartości pliku klucz.pub do pliku ~vpn/.ssh/authorized_keys na serwerze. Możemy tego dokonać w następujący spos�b.

$ scp ~/.ssh/klucz.pub [email protected]:~/.ssh/authorized_keys

Polecenie to zadziała tylko wtedy, kiedy na koncie vpn znajdującym się na serwerze zmienimy tymczasowo powłokę z /usr/sbin/pppd na standardową /bin/bash. Na tym etapie kończy się cała konfiguracja dotycząca ssh po obu stronach. Możemy więc przywr�cić na serwerze w pliku /etc/passwd dla użytkownika vpn powłokę na /usr/sbin/pppd. Przystępujemy teraz do skonfigurowania demona pppd, kt�ry będzie wywoływał podczas ustanawiania połączenia klienta ssh.

Podobnie jak po stronie serwera w pliku /etc/ppp/options musimy opcję auth zmienić na noauth. Kiedy już to zrobimy, przystąpimy do konfiguracji wierzchołka (tzw. peera) dla klienta, kt�ry będzie inicjował połączenie. Nazwa pliku może być taka sama jak na serwerze. Poniżej na listingu znajduje się przykładowa konfiguracja wierzchołka dla klienta.

# cat /etc/ppp/peers/tunel
192.168.1.101:192.168.1.100
debug
noauth
pty "ssh -i ~/.ssh/klucz [email protected]"
connect-delay 5000

Pierwsza linijka w pliku to dwa adresy IP oddzielone znakiem dwukropka. Adres po lewej stronie jest adresem tego końca tunelu, kt�ry właśnie konfigurujemy. Pamiętamy, że adres 192.168.1.100 został już przydzielony jako adres wierzchołka serwera. Pozostałe opcje zostały objaśnione poniżej.

  • debug - włączamy raportowanie szczeg�łï¿½w połączenia ppp.

  • noauth - wyłączamy autoryzację.

  • pty - dzięki tej opcji możemy wykorzystać zewnętrzny skrypt jako ośrodek komunikacji zamiast konkretnego urządzenia terminalowego. Wykorzystujemy tutaj ssh.

  • connect-delay - określony w milisekundach czas oczekiwanie na prawidłowy pakiet PPP od peera. Jeżeli taki w tym czasie nadejdzie pppd rozpocznie negocjację wysyłając pierwszy pakiet LCP.

W przypadku problem�w z połączeniem możemy zwiększyć wartość connect-delay nawet dziesięciokrotnie jeżeli łącza pomiędzy kt�rymi zestawiamy tunel będą sporo obciążone. R�wnież po stronie klienta musimy nadać bit suid plikowi /usr/sbin/pppd.

# chmod 4755 /usr/sbin/pppd

Na tym kończymy konfigurację tunelu. Możemy przejść do fazy jego uruchomienia.

Uruchomienie

Skonfigurowane połączenie należy teraz zainicjować wykonując polecenie:

$ /usr/sbin/pppd call tunel

Udana pr�ba połączenia połączenia powinna zaowocować zapisami w logach takimi jak poniżej na listingu.

Sep  2 12:35:34 pldmachine pppd[6623]: pppd 2.4.2b3 started by foo, uid 501
Sep  2 12:35:34 pldmachine pppd[6623]: Using interface ppp0
Sep  2 12:35:34 pldmachine pppd[6623]: Connect: ppp0 <--> /dev/pts/0
Sep  2 12:35:37 pldmachine pppd[6623]: Deflate (15) compression enabled
Sep  2 12:35:37 pldmachine pppd[6623]: Cannot determine ethernet \
    address for proxy ARP
Sep  2 12:35:37 pldmachine pppd[6623]: local  IP address 192.168.1.101
Sep  2 12:35:37 pldmachine pppd[6623]: remote IP address 192.168.1.100

Wykonując po obu stronach polecenie ifconfig zauważysz, że utworzone zostały interfejsy ppp służące do komunikacji. Wykorzystamy je do zestawienia prostej trasy pomiędzy dwoma sieciami.

Zakładając, że jedna sieć po stronie serwera ma adresację 192.168.0.0/24 a po stronie klienta 192.168.2.0/24 routing będzie wyglądał w spos�b następujący.

Po stronie serwera:

# route add -net 192.168.2.0/24 gw 192.168.1.100

Po stronie klienta:

# route add -net 192.168.0.0/24 gw 192.168.1.101

W ten spos�b oba komputery będą przechowywały w swoich tablicach routingu informacje o sieciach połączonych dzięki interfejsom tunelu.

VTun - Tunel IPv4

Wstęp

VTun umożliwia tworzenie tuneli poprzez sieci TCP/IP wraz z przydzielaniem pasma, kompresją, szyfrowaniem danych w tunelach. Wspierane typy tuneli to: PPP, IP, Ethernet i większość pozostałych protokołï¿½w szeregowych. VTun jest łatwy i elastyczny w konfiguracji. Może zostać wykorzystany do takich sieciowych zastosowań jak VPN, Mobil IP, łącza o określonym paśmie oraz innych. Działa w warstwie user space.

Opis procesu konfiguracji tunelu podzielony został na część klient oraz serwer. Adresacja użyta na listingach może zostać użyta o ile nie będzie się ona kłï¿½ciła z bieżącą konfiguracją Twojej sieci. Zaczynamy od instalacji pakietu vtun™ na obu maszynach będących końcami tunelu. Dodatkowo ładujemy moduł tun™ do pamięci.

# modprobe tun

Na tym kończy się wstępne przygotowanie systemu do konfiguracji tunelu.

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ę pliku.

# mv /etc/vtund.conf /etc/vtund.conf.orig

Przy użyciu ulubionego edytora stw�rzmy nowy plik /etc/vtund.conf. Możemy w nim wyodrębnić kilka sekcji: options, default, nazwa, up oraz down. Sekcje up oraz down są podsekcjami sekcji nazwa.

options - opcje dotyczące działania demona oraz wykorzystywanych przez niego program�w.

options {
	port 	      5000;
        syslog        daemon;
  	ppp           /usr/sbin/pppd;
  	ifconfig      /sbin/ifconfig;
	route         /sbin/route;
	firewall      /sbin/iptables;
  	ip            /sbin/ip;
}
  • port - port na kt�rym ma nasłuchiwać demon.

  • syslog - spos�b logowania zdarzeń na interfejsie tunelu.

  • ppp ifconfig route firewall ip - zmienne, kt�re zawierają ścieżki do wykorzystywanych przez VTun program�w.

default - domyślne ustawienia transmisji danych.

default {
	compress yes;
	speed 0;           
}
  • compress - kompresja pakiet�w w trakcie transmisji.

  • speed - prędkość transmisji. Wartość 0 oznacza brak ograniczeń.

vpn1 - wymieniona wcześniej nazwa tunelu. W tym miejscu znajduje się właściwa konfiguracja parametr�w połączenia.

vpn1 {
	passwd  tajne.haslo; 
	type  tun;          
	proto tcp;         
	compress  zlib:9;
	encrypt  yes;   
	keepalive yes; 
	up {
  		...
  	};
  	down {
  		...
  	};
}
  • passwd - hasło, kt�re posłuży do szyfrowania połączenia.

  • type - typ tunelu (w przykładzie tunel IP)

  • proto - protok�ł warstwy transmisyjnej tunelu.

  • compress - metoda oraz stopień kompresji.

  • encrypt - włączenie szyfrowania transmisji.

  • keepalive - utrzymywanie połączenia

  • up, down - co ma się wykonać po nawiązaniu połączenia oraz jego zakończeniu. Szerzej o tym poniżej.

up - akcje wykonywane po nawiązaniu połączenia.

up {
	ifconfig "%% 192.168.2.10 pointopoint 192.168.2.11 mtu 1450";
        route "add -host 192.168.2.11 gw 192.168.2.10";
};

Po nawiązaniu połączenia należy uruchomić odpowiedni interfejs. Jego nazwa zostanie rozwiązana dzięki zmiennej %%. Określamy oczywiście typ interfejsu oraz jego MTU. Kolejną czynnością jest podanie trasy do drugiego końca tunelu. Adres IP po prawej stronie jest oczywiście adresem naszego (czyli serwera) końca i przez niego prowadzi droga na drugą stronę.

down - czynności następujące po wyłączeniu tunelu.

down {
        ifconfig "%% down";
        ifconfig "%% delete";
	route "delete -host 192.168.2.11"
};

Po zakończeniu działania połączenia powinniśmy wyłączyć oraz skasować interfejs kt�ry nam do niego służył. Usuwamy r�wnież zbędną trasę do drugiego końca tunelu z tablicy routingu. Zwr�ć uwagę na konstrukcję tych dw�ch podsekcji. polecenie "argument". Polecenie zostało określone w sekcji options, natomiast argumentami są odpowiednie parametry danego polecenia.

Na tym kończy się konfiguracja serwera. Możemy przystąpić teraz do konfiguracji klienta.

Klient

Konfigurację klienta zaczniemy od edycji pliku /etc/sysconfig/vtun. Opcje w nim zawarte powinieneś ustawić zgodnie z tym co jest przedstawione na listingu.

VTUND_MODE="client"
VTUND_SESSION="vpn1"
VTUND_SERVER_ADDR="123.45.67.89"
VTUND_SERVER_PORT="5000"
  • VTUND_MODE - tryb pracy demona.

  • VTUND_SESSION - nazwa sesji, kt�rą ustawimy w pliku konfiguracyjnym

  • VTUND_SERVER_ADDR - publiczny adres IP serwera.

  • VTUND_SERVER_PORT - port na kt�rym nasłuchuje serwer.

R�wnież po stronie klienta musimy wyedytować plik /etc/vtund.conf. Także i tutaj możemy mu zmienić nazwę na vtund.conf.orig, aby zachować przykłady konfiguracji. Krok po kroku om�wię sekcje vtund.conf po stronie klienta.

options {
	type stand;
	port 5000;
	syslog daemon;	
	timeout 60;                                                                  
	ppp           /usr/sbin/pppd;
	ifconfig      /sbin/ifconfig;
	route         /sbin/route;
	firewall      /sbin/iptables;
	ip            /sbin/ip;
}
  • type - tryb pracy VTuna. Na listingu ustawiony został standalone.

  • port - port na kt�rym nasłuchuje VTun.

  • syslog - logi VTuna zbierane będą przez syslog.

  • timeout - timeout VTuna.

  • ppp, ifconfig, route, firewall, ip - ścieżki do program�w wykorzystywanych w czasie konfiguracji.

Przystępujemy teraz do konfiguracji połączenia o nazwie vpn1. Jak pamiętasz nazwa została już wstępnie określona w pliku /etc/sysconfig/vtun.

vpn1 {
	passwd  tajne.haslo; 
  	type tun;
  	proto tcp;
  	compress zlib:9;
  	encrypt yes;
  	keepalive yes;
  	stat yes;
  	persist yes;          
  	up {
  		...
  	};
  	down {
  		...
	};
}
  • passwd - hasło kt�re posłuży nam do szyfrowania połączenia.

  • type - typ tunelu, w przykładzie jest to tunel IP.

  • proto - protok�ł warstwy transmisyjnej tunelu.

  • compress - typ oraz stopień kompresji. Na listingu ustawiona została kompresja przy użyciu zlib dziewiątego stopnia.

  • encrypt - włączamy szyfrowanie połączenia.

  • keepalive - utrzymywanie połączenia w przypadku braku ruchu na interfejsie tunelu.

  • stat - statystyki pracy tunelu, kt�re VTun będzie zapisywał do sysloga co pięć minut.

  • persist - opcja ustawiona tak jak na listingu sprawi, że w przypadku zerwania połączenia z serwerem klient będzie nawiązywał połączenie.

  • up, down - programy wykonywane po nawiązaniu połączenia i po jego zerwaniu.

up {
        ifconfig "%% 192.168.2.11 pointopoint 192.168.2.10 mtu 1450";
        route "add -host 192.168.2.10 gw 192.168.2.11";
};

Poleceniem ifconfig uruchamiamy interfejs naszego tunelu o parametrach takich jakie zostały podane w przykładzie. Następnym krokiem jest wyznaczenie trasy do naszego serwera, czyli drugiego końca tunelu. Jak doskonale widać, ta część konfiguracji jest analogiczna do serwera. Należy tylko zwr�cić uwagę na adresację. Adres następujący po parametrze gw określa nasz (czyli klienta) koniec tunelu. Przez niego wiedzie droga na drugi koniec.

down {
        ifconfig "%% down";
        ifconfig "%% delete";
        route "del -host 192.168.2.10";
};

Polecenia kt�re się wykonają po zamknięciu połączenia. Kolejno, wyłączamy oraz kasujemy interfejs tunelu. Następnie kasujemy z tablicy routingu trasę do serwera.

Na tym kończy się etap konfiguracji VTuna. Możemy przejść do jego uruchomienia.

Uruchomienie

Uruchomienie VTuna sprowadza się do wykonania jednego polecenia na serwerze oraz kliencie.

# /etc/rc.d/init.d/vtund start

Po jego wykonaniu na komputerach będących końcami tunelu za kilka chwil powinny się utworzyć interfejsy tun0. Numeracja zaczyna się od "0". Nazwy kolejnych interfejs�w będą kończyć się następną w kolejności liczbą naturalną.

Narzędzia sieciowe

W PLD głï¿½wnym pakietem narzędzi sieciowych jest iproute2™, oferuje on większe możliwości oraz bardziej ujednolicony interfejs obsługi w stosunku do narzędzi z pakietu net-tools™ (ifconfig, route, arp, ifup, ifdown). Sercem pakietu iproute2™ jest program ip zawierający funkcjonalność kilku starszych narzędzi w jednym. Z tego względu będzie naszym podstawowym narzędziem sieciowym.

Jako dodatek do niniejszego rozdziału, pragnę polecić lekturę opisu najprostszych narzędzi sieciowych (ping, traceroute), kt�ry można znaleźć w „Podstawowe narzędzia kontroli sieci TCP/IP” oraz opis zarządzania routingiem statycznym zamieszczony w „Routing statyczny”.

Konfiguracja interfejsow

Aby wyświetlić konfigurację interfejs�w użyjemy polecenia ip addr.

# ip addr
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:50:8d:e1:e8:83 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.1/24 brd 10.0.0.255 scope global eth0
    inet 10.0.0.22/24 brd 10.0.0.255 scope global secondary eth0
    inet6 fe80::250:8dff:fee1:e883/64 scope link
       valid_lft forever preferred_lft forever
3: sit0: <NOARP> mtu 1480 qdisc noop
    link/sit 0.0.0.0 brd 0.0.0.0

Polecenie wyświetliło listę dostępnych interfejs�w, każdy z nich oznaczony jest numerem porządkowym. W większości wypadk�w najbardziej interesujące są dla nas interfejsy fizyczne (eth0 na powyższym przykładzie). Interfejsy lo oraz sit0, są "wirtualnymi" interfejsami, pierwszy z nich to interfejs pętli zwrotnej (loopback), drugi służy do tunelowania protokołu IPv6 wewnątrz IPv4.

Tryb pracy urządzenia jest wyświetlany wewnątrz tr�jkątnych nawias�w, oto kilka oznaczeń:

  • UP - urządzenie działa

  • LOOPBACK - interfejs pętli zwrotnej

  • BROADCAST - urządzenie ma możliwość wysyłania komunikat�w rozgłoszeniowych

  • MULTICAST - interfejs może być używany do transmisji typu multicast

  • PROMISC - tryb nasłuchiwania, używany przez monitory sieci i sniffery

  • NO-CARRIER - brak nośnej, komunikat spotykany zwykle w wypadku braku fizycznego połączenia z siecią

Poniżej omawianego wiersza wyświetlone zostały informacje o adresach związanych z urządzeniem (adresy IP i maski podsieci są przedstawione w notacji CIDR):

  • -link/ether - adres fizyczny karty sieciowej (MAC)

  • -inet - dane protokołu IPv4

  • -inet6 - dane protokołu IPv6

Zarządzanie interfejsami

Do najczęstszych operacji tego typu należy włączanie i wyłączanie interfejs�w, w tym celu użyjemy następującego polecenia:

ip link set {$interfejs} {up/down}

# ip link set eth0 up
# ip link set eth0 down

Dodawanie/usuwanie adres�w IP interfejsu:

ip addr {add/del} {$adresIP}/{$maska} dev {$interfejs}

# ip addr add 10.1.1.1/24 dev eth0
# ip addr del 10.1.1.1/24 dev eth0

Adresy sprzętowe (MAC)

Do odczytania adresu sprzętowego lokalnych kart sieciowych możemy użyć opisanego wcześniej polecenia ip addr. Aby odczytać MAC zdalnej maszyny użyjemy programu arping {$nazwa/$IP} np.:

# arping 10.0.0.100
ARPING 10.0.0.100 from 10.0.0.1 eth0
Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8]  4.250ms
Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8]  0.976ms
Unicast reply from 10.0.0.100 [00:04:ED:07:25:F8]  0.929ms

Dowolny adres MAC karty sieciowej ustawimy poleceniem:

ip link set {$interfejs} address {$MAC-adres}

# ip link set eth0 address 01:01:01:01:01:01

Aby adres sprzętowy za każdym razem był ustawiany dla interfejsu, powinniśmy dokonać odpowiedniego wpisu w pliku konfiguracyjnym interfejsu. W przypadku urządzenia eth0 musimy zmodyfikować plik /etc/sysconfig/interfaces/ifcfg-eth0, i dodać zmienną MACADDR np.:

MACADDR="01:01:01:01:01:01"

ARP

Aby wyświetlić tablicę ARP należy użyć polecenia ip neighbour:

# ip neighbour
10.0.0.140               ether   00:E0:7D:A1:8B:E2   C                     eth0
10.0.0.2                 ether   4C:00:10:54:19:50   C                     eth0
10.0.0.100               ether   00:04:ED:07:25:F8   C                     eth0

Tablica ARP wypełnia się w miarę komunikowania się z innymi hostami, aby wymusić zbadanie działania protokołu ARP wystarczy zainicjować komunikację. Możemy użyć do tego programu ping.

Możemy stworzyć własną, statyczną tablicę ARP, posłuży nam do tego plik /etc/sysconfig/static-arp w kt�rym umieszczamy wpisy zawierające kolejno: interfejs, adres MAC, adres IP oraz status wpisu.

eth0 00:80:48:12:c2:3c 192.168.10.10 permanent
eth0 00:c0:df:f9:4e:ac 10.0.0.7 permanent

Opcja permanent oznacza, że wpis nigdy nie wygasa.

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 obowiązkowy - wskazuje na serwer nazw, kt�ry chcemy odpytać. Jeśli nie podamy drugiego parametru użyty zostanie serwer zdefiniowany w pliku /etc/resolv.conf.

Odpytanie serwera DNS o domenę, wpisanego do pliku /etc/resolv.conf

$ host pld-linux.org
pld-linux.org has address 217.149.246.8

Odpytanie o adres IP (odwzorowanie odwrotne)

$ host 217.149.246.8
8.246.149.217.in-addr.arpa domain name pointer webmachine.pld-linux.org.

Odpytanie dowolnego serwera DNS

$ host pld-linux.org ns4.pld-linux.org.
Using domain server:
Name: ns4.pld-linux.org.
Address: 217.149.246.7#53
Aliases:

pld-linux.org has address 217.149.246.8

Aby odczytać konkretny rekord domeny użyjemy parametru "-t". Dla przykładu spr�bujemy określić rekord MX dla domeny pld-linux.org:

$ host -t mx pld-linux.org
pld-linux.org mail is handled by 0 a.mx.pld-linux.org.

W celu poznania szczeg�łï¿½w zarejestrowanej domeny (np. obsługujące ją serwery nazw) możemy posłużyć się programem whois:

$ whois pld-linux.org

Wydajność sieci

Aby sprawdzić przepustowość sieci pomiędzy dwoma hostami możemy użyć programu iperf. Jest to program typu klient-serwer sprawdzający na kilka sposob�w przepustowość połączenia. Rozpoczynamy od instalacji programu na obu interesujących nas maszynach, następnie na jednej z maszyn uruchamiamy program w trybie serwera:

$ iperf -s

a na drugiej w trybie klienta - iperf -c {$adres_serwera} np.:

$ iperf -c 192.168.0.5

Po chwili odczytujemy wyniki testu.

Monitorowanie sieci

Nawiązane połączenia i otwarte porty protokołu TCP/IP możemy kontrolować za pomocą programu netstat np.:

# netstat -tua 

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:blackjack             *:*                     LISTEN      
tcp        0      0 *:ircs                  *:*                     LISTEN      
tcp        0      0 *:netbios-ssn           *:*                     LISTEN      
tcp        0      0 *:ipp                   *:*                     LISTEN      
tcp        0      0 *:microsoft-ds          *:*                     LISTEN      
tcp        0      0 gargamel:ircs           192.168.1.3:rapidmq-reg ESTABLISHED 
tcp        0      0 gargamel:imaps          192.168.1.6:ttc-etap-ds ESTABLISHED 
tcp        0      0 gargamel:td-postman     host-92.gadugadu.p:8074 ESTABLISHED 
tcp        0      0 gargamel:cma            chrome.pl:5223          ESTABLISHED 
tcp        0      0 *:1024                  *:*                     LISTEN      
udp        0      0 gargamel:netbios-ns     *:*                                 
udp        0      0 *:netbios-ns            *:*                                 
udp        0      0 *:ipp                   *:*

Na powyższym przykładzie zostały wyświetlone dane dotyczące protokołu TCP (opcja: -t) oraz UDP (-u). Dodatkowo zostały wyświetlone gniazda nasłuchujące (-a). Warte uwagi są jeszcze dwa parametry: -n i -p, pierwszy wyświetla porty i adresy w postaci liczb, drugi zaś wyświetla nazwy program�w korzystających z danych gniazd.

Do analizowania wielkości ruchu sieciowego na interfejsie polecam program nload, jest to proste narzędzie rysujące wykresy pomocą znak�w ASCII. Podstawowe statystyki możemy przeglądać dzięki programowi ip np. ip -s link, dokładniejsze dane otrzymamy dzięki programowi iptraf™.

Wygodnym sposobem śledzenia wybranego ruchu sieciowego jest użycie regułek linuksowego filtra pakiet�w. Do śledzenia ruchu służy cel "-j LOG" np.:

# iptables -A INPUT -p TCP --dport 80  -s 10.0.0.3 -j LOG

Powyższy wpis doda do łańcucha INPUT regułkę rejestrującą połączenia TCP z hosta 10.0.0.3 na port 80 danej maszyny. Aby te regułki działały z wpisami odrzucającymi pakiety (DROP/REJECT) muszą być analizowane wcześniej, w przeciwnym wypadku pakiet nigdy nie dotrze do regułki rejestrującej. W przypadku dopasowania pakietu do regułki następuje odnotowanie tego zdarzenia, wpisy te można odczytywać za pomocą programu dmesg, lub z plik�w syslog-a - zwykle z /var/log/kernel i /var/log/messages.

Dużo bardziej szczeg�łowe informacje o ruchu sieciowym otrzymamy dzięki programowi tcpdump, jest to rozbudowany sniffer i program do analizy pakiet�w.

Zakończenie

W przypadku modyfikacji plik�w konfiguracji w większości wypadk�w trzeba dokonać restartu podsystemu sieci.

W tym rozdziale opisano niewielki fragment możliwości dostępnych narzędzi sieciowych. Poniższa lista przedstawia miejsca gdzie można znaleźć szerszy opis niekt�rych zagadnień.

Rozdział 16. Usługi dostępne w PLD

Spis treści

Usługi - wstęp
ALSA - Dźwięk w Linuksie
Instalacja
Konfiguracja z użyciem systemu UDEV
Konfiguracja statyczna
Ustawienie miksera i testowanie
Zaawansowana obsługa miksera
Uwagi
Apache - Serwer stron internetowych
Wstęp
Instalacja
Pliki konfiguracji
Podstawowa konfiguracja
Strony użytkownik�w
Virtual Hosts
Ograniczanie dostępu na podstawie adresu
Ograniczenie dostępu za pomocą loginu i hasła
Obsługa skrypt�w PHP
CGI
Security Socket Layer (SSL)
Indeksowana zawartość katalogu
Uwagi
BIND - Serwer Nazw
DNS - Domain Name System
Wstęp
Podstawowa konfiguracja
Przykładowa konfiguracja strefy typu primary
Przykładowa konfiguracja strefy typu secondary
Obsługa protokołu IPv6
Rejestracja
Diagnostyka
Zakończenie
CRON - Cykliczne wykonywanie zadań
Instalacja
Budowa tabel
Format daty i czasu
Tabele systemowe
Tabele użytkownik�w
Komunikaty cron-a
CUPS - Popularny system druku dla Uniksa
Wstęp
Instalacja
Zarządzanie drukarkami
Dodanie drukarki
Szczeg�ły dodawania drukarki lokalnej
Szczeg�ły dodawania drukarki zdalnej
Konfiguracja serwera
Zarządzanie kolejką druku
Test drukarki i rozwiązywanie problem�w
DHCPD - Dynamic Host Configuration Protocol Daemon
Instalacja
Podstawowa konfiguracja
Statyczne przypisanie konfiguracji
Inne opcje
Uruchomienie
Konfiguracja klienta
Uwagi
Exim - Transport poczty elektronicznej (MTA)
Instalacja
Budowa pliku konfiguracji
Podstawowa konfiguracja
Skrzynki pocztowe
R�żne opcje
Autoryzacja SMTP
Syfrowanie SSL
Quota
Dodanie skaner�w antywirusowych
Walka ze spamem
Obsługa wielu domen w Eximie
Automatyczna odpowiedź - Vacations
Heimdal - Implementacja protokołu Kerberos
Instalacja i konfiguracja KDC
Logowanie do systemu
Konfiguracja poszczeg�lnych usług
Jabber 2 - Serwer typu Instant Messaging
Wstęp
Instalacja
Konfiguracja DNS i rekord�w SRV
Konfiguracja port�w (jeżeli korzystamy z firewall-a)
Podstawowa konfiguracja Jabberd2
Konfiguracja dla SQL (Postgresql)
Szyfrowanie
Zakończenie
MySQL - System Zarządzania Relacyjnymi Bazami Danych (ang. RDBMS)
Co to jest MySQL?
Og�lne cechy MySQL
Instalacja
Konfiguracja MySQL
Demon MySQL
mysqladmin
mysqldump
phpMyAdmin
NFS - Network File System
Serwer
Udostępnianie
Klient
Bezpieczeństwo serwera
Dostrajanie wydajności
PDNS (Power DNS) - Serwer Nazw
Wstęp
Instalacja
Konfiguracja Postgresql dla PDNS
Konfiguracja PDNS
Domeny
Postfix - Transport poczty elektronicznej (MTA)
Zaczynamy
Konfiguracja
Szyfrowanie
Domeny
Usprawnienia
Końcowa konfiguracja
tpop3d
amavis + mks
postifx.admin
PostgreSQL - Baza danych SQL
Co to jest PostgreSQL
Instalacja pakiet�w
Konfiguracja PostgreSQLa w PLD
Inicjalizacja
Konfiguracja PostgreSQLa
Uruchomienie PostgreSQLa
Dodanie użytkownika
Ostatni test
Dodatki
Odnośniki
ProFTPD - serwer FTP
Wstęp
Instalacja
Podstawowa konfiguracja demona
Konfiguracja dostępu
Zakończenie
Samba - wsp�łpraca z Windows
Samba jako Serwer domeny NT4 (PDC)
Serwer członkowski domeny NT4
Snort - Sieciowy System Wykrywania Włamań
Wymagania
Instalacja Snorta i ACID
Konfiguracja Snorta
Aktualizacja reguł
Instalacja Oinkmaster
Architektura Snorta
Tryby pracy
Preprocesory
Moduł sygnatur
Ciekawe projekty
Syslog-ng
Wstęp
Konfiguracja
Test konfiguracji
Uwagi
Dodatek

W rozdziale tym przedstawimy opis instalacji i konfiguracji ważniejszych usług dostępnych w PLD

Usługi - wstęp

Usługi w PLD są przygotowane do natychmiastowego uruchomienia, wystarczy wyedytować pliki konfiguracji i można korzystać z programu. Zanim jednak zaczniemy pracować z usługami warto zapoznać się z opisem zarządzania usługami zawartym w „Zarządzanie podsystemami i usługami”.

Z wieloma demonami dostarczane są przykładowe pliki konfiguracji, kt�rymi możemy się sugerować przy konfigurowaniu aplikacji, przykłady te są umieszczane w dokumentacji programu, w katalogu /usr/share/doc. Ponadto, zanim uruchomimy usługę, powinniśmy przyjrzeć się konfiguracji startowej demona, kt�ra umieszczana jest w pliku konfiguracji rc-skryptu - plik ten przychodzi wraz z pakietem i umieszczany jest w katalogu /etc/sysconfig. Zwykle zamieszczone w nim opcje odpowiadają argumentom programu demona, są też opcje określające np. priorytet programu i inne właściwości.

W trakcie uruchamiania usługi zdarzają się trudne do odnalezienia problemy. Pierwszą rzeczą jaką powinniśmy w takim wypadku zrobić to przeczesać logi programu, w takich wypadkach niejednokrotnie pomaga włączenie większej "gadatliwości" demona. Wygodnym sposobem szukania błęd�w jest uruchomienie demona na pierwszym planie (bez przejścia w tło), w takich wypadkach często demony wysyłają komunikaty na standardowe wyjście. W trudniejszych przypadkach będziemy zmuszeni użycia programu strace w celu śledzenia wywołań systemowych aplikacji. W wypadku demon�w powinniśmy użyć opcji -f, aby śledzić r�wnież procesy potomne lub uruchomić demona z wyłączonym forkowaniem proces�w. Opisane tu czynności są specyficzne dla każdego z demon�w, zatem musimy skorzystać z dokumentacji właściwej aplikacji.

Aktualizacja niekt�rych demon�w wiąże się z pewnymi czynnościami przygotowawczymi i poprawkami, problem ten dotyczy szczeg�lnie silnik�w baz danych. Zanim bezmyślnie zaktualizujemy pakiet, należy dokładnie zapoznać się z dokumentacją produktu, aby uchronić się przed unieruchomieniem usługi na dobre.

W PLD usługi, podobnie jak inne oprogramowanie, kompilowane jest z najczęściej używanymi opcjami, jeśli program nie obsługuje jakichś funkcji, to powinniśmy sprawdzić czy uzyskamy je samodzielnie budując pakiet, więcej na ten temat odnajdziemy w „Budowanie pakiet�w”.

ALSA - Dźwięk w Linuksie

Obecnie w Linuksie do obsługi dźwięku stosuje się system ALSA™ (ang: Advanced Linux Sound Architecture), będący następcą systemu OSS™. ALSA to zestaw modułï¿½w jądra oraz kilku narzędzi pomocniczych, moduły możemy ładować za pomocą systemu UDEV™ lub statycznie, obydwie metody będą opisane w tym rozdziale. Druga z metod jest bardziej złożona, dlatego początkujących zachęcamy do korzystania z metody opartej o system UDEV.

Instalacja

Zaczynamy od pakietu zawierającego moduły kernela:

$ poldek -i kernel-sound-alsa

Potrzebujemy jeszcze kilku narzędzi, w tym programu do zarządzania mikserem:

$ poldek -i alsa-utils

W og�le nie należy instalować pakietu kernel-sound-oss, ALSA potrafi emulować OSS.

Konfiguracja z użyciem systemu UDEV

Niezaawansowanym zalecamy użycie udeva zamiast statycznej konfiguracji (opisanej dalej), ze względu na łatwiejszą konfigurację. Zakładam, że w systemie mamy działający UDEV, instalujemy pakiet z rc-skryptem, koniecznym do zapisywania stanu miksera (inicjacja miksera jest wykonywana bezpośrednio przez UDEV):

$ poldek -i alsa-udev

i uruchamiamy go

# /etc/init.d/alsa-udev start

Nie należy sie martwić, że nic się nie wyświetla po jego uruchomieniu, parametr start nic nie robi. Najprawdopodobniej mamy już załadowane właściwe moduły i jedyne co pozostaje nam to w mikserze ustawić głośność i wyłączyć wyciszenie, co zostało opisane w dalszej części rozdziału. Więcej o systemie UDEV w „Udev - dynamiczna obsługa sprzętu”.

Konfiguracja statyczna

Konfiguracja statyczna jest alternatywną metodą w stosunku do powyższej. Zaczynamy od zainstalowania pakietu alsa-utils-init:

$ poldek -i alsa-utils-init

Teraz musimy postarać się o dodanie koniecznych alias�w do pliku /etc/modprobe.conf, kt�re posłużą do załadowania koniecznych modułï¿½w, przez zainstalowany przed chwilą rc-skrypt. Możemy wykonać to na dwa sposoby:

  • samodzielnie - za pomocą dowolnego edytora tekstu; wpisy możemy skopiować z opisu Driver & Docs, urządzenia odnalezionego na liście obsługiwanego sprzętu

  • za pomocą programu alsaconf, kt�ry wykryje urządzenie i dokona koniecznych wpis�w

Pierwsza z metod jest tak oczywista, że zajmiemy się tylko drugą z wymienionych. Na początek musimy się upewnić, że mamy pakiet pciutils™ i uruchamiamy program:

# /usr/sbin/alsaconf

Po ukazaniu się ekranu z napisem "Searching sound cards" czekamy ok. 10 sekund i wciskamy ctrl-c (konfigurator szybko znajduje naszą właściwą kartę - a ponieważ szuka r�wnież kart starego typu oraz r�żnych egzotycznych, co zajmuje mu bardzo dużo czasu dlatego przerywamy wyszukiwanie). Następne okno pokazuje nam listę znalezionych kart muzycznych (zwykle jedną). Zatwierdzamy wyświetloną kartę i na pytanie:

Do you want to modify /etc/modprobe.conf?

Odpowiadamy twierdząco, spowoduje to dopisanie odpowiednich alias�w modułï¿½w do pliku konfigurującego. Kiedy progam zakończy działanie, uruchamiamy rc-skrypt:

# /etc/init.d/alsasound start

Teraz pozostaje nam ustawić głośność w mikserze oraz wyłączyć wyciszenie.

Ustawienie miksera i testowanie

Domyślnie wszystkie "suwaki" miksera są ustawione na zero i dodatkowo włączone jest wyciszenie (mute), aby to zmienić musimy uruchomić program alsamixer lub amixer:

# /usr/bin/alsamixer

Wyłączmy mute (klawisz m) i przesuwamy "suwaki" (strzałkami) kanału Master i PCM. Teraz możemy przetestować ustawienia z poziomu root-a, możemy to zrobić odsłuchując dowolny plik wav (np. z pakietu gnome-audio):

# /usr/bin/aplay test.wav

lub plik mp3 (wymagany pakiet "alsaplayer" oraz "alsaplayer-input-mad"):

# /usr/bin/alsaplayer -o alsa test.mp3

To już praktycznie koniec instalacji. Pamiętać należy, że do niekt�rych program�w należy doczytać odpowiednie wtyczki, kt�re umożliwią prace z ALSA™-ą. Wtyczki te łatwo rozpoznać po dopisce "alsa" w nazwie pakietu.

Na koniec pozostaje nam nadać uprawnienia wybranym użytkownikom, do obsługi dźwięku. Musimy zapisać użytkownik�w do grupy audio np.:

# usermod -A jkowalski audio

Więcej o uprawnieniach w „Grupy”.

Zaawansowana obsługa miksera

W wielu przypadkach okazuje się, że posiadamy kartę muzyczną, kt�ra nie potrafi miksować dźwięku sprzętowo - co powoduje m.in., że jednocześnie może z karty korzystać jeden program lub proces. Zdarza się także, że niekt�re programy na sztywno pr�bują połączyć się np. z OSS w celu obsługi dźwięku (np. Skype™). W takim przypadku możemy skorzystać z wtyczki ALSA™-y o nazwie dmix. Wbrew nazwie nie musimy niczego dogrywać - wszystko odbywa się w plikach tekstowych: /etc/asound (gdy chcemy ustawień globalnych) lub ~/.asoundrc (czyli indywidualnych ustawień dla każdego użytkownika). Przykładowy wpis przedstawimy poniżej - po więcej szczeg�łï¿½w odsyłamy na strony projektu ALSA (www.alsa-project.org):

# definiujemy urządzenie wirtualne nazwane przez nas demixer
# do kt�rego p�źniej będziemy się odwoływać:
pcm.demixer	
	{
	type dmix 		# typ urządzenia, tutaj "dmix"
	ipc_key 1024 		# numer musi być unikalny
	slave	{
	pcm "hw:0,0" 		# you cannot use a "plug" device here,  darn. 
	period_time	0
	buffer_time	0
	period_size	1024	# must be power of 2 and much smoother 
				# than 1024/8192!
	buffer_size	8196	# must be power of 2 and for Audiophile
				# card (ICE1712 chip) or a VIA VT82xx
				# (snd-via82xx) must be less 6652
	#format	"S32_LE"
	periods	128
	rate	44100		# with rate 44100 Hz you *will* hear,
				# if demixer is used
		}
# bindings are cool. This says, that only the first
# two channels are to be used by dmix, which is enough for
# (most) oss apps and also lets multichannel chios work 
# much faster:
#
# Wskazujemy że tylko dwa pierwsze kanały bedą używane 
# przez demixer (czyli tutaj dmix)

	bindings	{
	0 0	# from 0 => to 0
	1 1	# from 1 => to 1
			}
	} # koniec konfiguracji wirtualnego urządzenia demixer
	
# następnie ustawiamy przekierowanie z wybranych
# urządzeń do wirtualnego urządzenia demixer:
# możemy przekierowywać z następujących urządzeń OSS:
#   /dev/audio
#   /dev/dsp
#   /dev/dspW
#   /dev/midi
#   /dev/mixer
#   /dev/music
#   /dev/sequencer (recording doesn't work yet)
#   /dev/sequencer2

# dla /dev/dsp0
pcm.dsp0	{
	type plug
        slave.pcm "demixer"
                }
# dla /dev/dsp
pcm.dsp		{
	type plug
	slave.pcm "demixer"
		}

# Software mixing for all aplications 
# uses ALSA "default" device
#
# Wszystkie aplikacje korzystające z urządzenia
# default ALSA-y przekierowujemy do miksera 
# czyli wszystko przechodzi przez dmix

pcm.!default	{
	type plug
	slave.pcm "demixer"
		}
		
# OSS device /dev/mixer0 use hardware
# Urządzenie OSS /dev/mixer0 bez zmian
# obsługuje pierwszą (0) kartę audio bezpośrednio

ctl.mixer0	{
	type hw
	card 0
	}

Jeśli chcemy jedynie przekierować dźwięk z program�w obsługujących tylko OSS™ do ALSA™, bez programowego miksowania (czyli bez używania dmix) wystarczy że wpiszemy tylko:

# from /dev/dsp0 to ALSA 
pcm.dsp0 {
	type plug
	slave.pcm "hw:0"
	}
# lub: 
#  pcm.dsp0 pcm.default
# jeśli "default" nie było redefiniowane

ctl.mixer0 {
	type hw
	card 0
	}

Natomiast najprostsze przekierowanie z /dev/dsp0 do dmix wygląda tak:

pcm.dsp0 {
    type plug
    slave.pcm "dmix"
    }

Dla chipset�w nvidia nforce(2) (intel8x0) oraz C-media konfiguracja powinna wyglądać na przykład tak:

pcm.nforce-hw {
        type hw
        card 0
}
pcm.!default {
        type plug
        slave.pcm "nforce"
}
pcm.nforce {
        type dmix
        ipc_key 1234
        slave {
                pcm "hw:0,0"
                period_time 0
                period_size 1024
                buffer_size 4096
                #rate 44100
                rate 48000
        }
}
ctl.nforce-hw {
		type hw
		card 0
		}

Następnie możemy przetestować nasz "dmix" czyli urządzenie demixer

alsaplayer -o alsa -d demixer test.mp3

ponieważ wcześniej zdefiniowaliśmy urządzenie "default", ALSA™ kieruje wszystko na urządzenie "demixer" - co jest r�wnoważne:

alsaplayer -o alsa test.mp3

To tylko podstawowe przykłady działania jakie daje nam ALSA™, a dzięki olbrzymim możliwościom definiowania dowolnych urządzeń wirtualnych i przekierowywania dźwięku, możemy uzyskać ciekawe i r�żnorodne efekty. Więcej o konfiguracji urządzeń PCM znajdziemy tutaj: www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html.

Przy pracy z pluginem "dmix" nie należy zapomnieć o wyłączeniu demon�w ARTs i ESD gdyż w przeciwnym razie mogą pojawić się op�źnienie w odtwarzaniu dźwięk�w i zakłï¿½cenia w niekt�rych programach, gdyż wiele z nich pr�buje najpierw korzystać z w/w demon�w dźwięku.

Uwagi

Więcej o dźwięku pod Linuksem na stronie linux-muzyka.ixion.pl/.

Apache - Serwer stron internetowych

Wstęp

Każdy, nawet początkujący użytkownik sieci internet zetknął się z apaczem świadomie lub nie. Apache jest oprogramowaniem, kt�re można powiedzieć zdominowało w pewnym stopniu rynek aplikacji serwerowych. Do działania wykorzystuje on protok�ł HTTP (RFC2616). Jak sama nazwa wskazuje Apache (a patche server) składa się z wielu modułï¿½w. Można to zauważyć już na pierwszy rzut oka. W tym rozdziale zostanie opisana autoryzacja, obsługa języka PHP, CGI, virtualhosts oraz og�lna jego konfiguracja. Przedstawiona poniżej oparta została o apache z serii 2.x.

Instalacja

Apache w PLD jest podzielony na wiele małych pakiet�w, możemy dzięki instalować tylko potrzebne moduły. Jeśli nie możemy się połapać w tym gąszczu to możemy posłużyć się metapakietem apache, kt�ry za pośrednictwem mechanizmu zależności zainstaluje najważniejsze pakiety.

# poldek -i apache

Kiedy będziemy mieli zainstalowane wymagane pakiety, będziemy mogli wstępnie przetestować serwer, zatem uruchomimy usługę:

# service httpd start

W katalogu /home/services/httpd umieszczamy jakąś testową stronę WWW kt�rą nazwiemy np. test.html i sprawdzamy za pomocą przeglądarki czy się prawidłowo wyświetla:

$ elinks localhost/test.html

Jeśli wszystko jest w porządku, to możemy przejść do właściwej konfiguracji serwera.

Pliki konfiguracji

Tytułem wstępu pragnę powiedzieć, że niniejszy dokument nie może być traktowany jako dokumentacja do Apache. Ma on na celu ułatwienie użytkownikowi zapoznania się z usługą oraz kilkoma jej możliwościami. Po bardziej szczeg�łowe informacje odsyłam do stron podręcznika systemowego (man) oraz dokumentacji on-line

  • /etc/httpd/httpd.conf - w tym katalogu przechowywane są pliki konfiguracyjne demona. Po instalacji poszczeg�lnych składnik�w Apache, właśnie w tym miejscu należy szukać plik�w konfiguracyjnych od nich.

  • /home/services/httpd - pliki domyślnej strony Apache, katalog z komunikatami o błędach oraz katalog przeznaczony dla skrypt�w cgi.

  • /usr/lib/apache - moduły potrzebne do działania Apache oraz poszczeg�lnych jego składnik�w. Warto o tym pamiętać w przypadku problem�w z uruchomieniem usługi.

  • /usr/sbin - jest to katalog należący stricte do Apache, jednak warto o nim wspomnieć ze względu na to iż przechowywane są w nim jego binaria. Aby się dowiedzieć kt�re należą do niego wydaj następujące polecenie

    # rpm -ql apache |grep ^\/usr\/sbin

Aby nasz serwer obsługiwał dodatkowe funkcje musimy zainstalować odpowiednie moduły, wraz z modułami dostarczane, są pliki konfiguracji z dyrektywami konfiguracyjnymi dla tego modułu.

Apache domyślnie działa z uprawnieniami zwykłego użytkownika (http), dlatego trzeba zadbać o to by demon miał prawo do odczytu plik�w ze stronami WWW.

Bardzo pożyteczną cechą Apache jest możliwość tworzenia lokalnych plik�w konfiguracji, dzięki kt�rym możemy modyfikować niekt�re opcje konfiguracji. Pliki te mają nazwę .htaccess i może ich używać każdy, kto ma tylko dostęp do katalogu ze stroną WWW. Wygoda w ich używaniu polega na tym, że nie ma potrzeby restartowania demona po każdorazowej ich modyfikacji.

Podstawowa konfiguracja

Głï¿½wnym plikiem konfiguracyjnym jest /etc/httpd/apache.conf. Spośr�d wielu opcji w tym pliku zajmiemy się dwiema podstawowymi:

ServerAdmin [email protected]

Powinieneś tutaj wpisać kontaktowy adres e-mail do siebie jako administratora tego serwera.

Poniżej znajduje się opcja ServerName. Powinna ona wyglądać tak jak w poniższym przykładzie.

ServerName example.net:80

Dosłownie jest to nazwa tego serwera. A dokładniej nazwa domenowa skonfigurowana na serwerze nazw opiekującym się Twoją domeną. Jeżeli nie posiadasz zarejestrowanej domeny, powinieneś wpisać tutaj adres IP.

Teraz zajmiemy się opcją DocumentRoot, kt�rą odnajdziemy w /etc/httpd/conf.d/10_common.conf Określa ona domyślny katalog w kt�rym będzie przechowywana strona internetowa. Wpisując nazwę lub adres IP określony przez ServerName właśnie z tego katalogu zostaną pobrane i wczytane przez przeglądarkę pliki strony.

DocumentRoot "/home/services/httpd/html"

Domyślnie wszystkie żądania są tutaj skierowane. Ta lokalizacja nie jest obligatoryjna, więc nie musisz się jej trzymać. Może zostać zmieniona przy użyciu dowiązań symbolicznych lub alias�w wskazujących w inne miejsca.

Zgodnie z obecnym standardem tworzenia stron internetowych, domyślnym plikiem kt�ry jest automatycznie wczytywany po wpisaniu w przeglądarce adresu jest index, kt�ry w zależności od konstrukcji strony może mieć r�żne rozszerzenia. A więc skąd Apache wie, co ma zostać wczytane jako pierwsze? Do tego właśnie służy pakiet apache-mod_dir. Jego plikiem konfiguracyjnym jest /etc/httpd/httpd.conf/59_mod_dir.conf

Poprzez dyrektywę DirectoryIndex określa się czego i w jakiej kolejności ma szukać przeglądarka.

DirectoryIndex index.html index.html.var index.htm index.shtml \
    index.cgi index.php

Oczywiście możemy podawać tutaj r�żne nazwy plik�w startowych stron w zależności od naszych potrzeb.

Strony użytkownik�w

Swobodne publikowanie stron internetowych przez użytkownik�w jest możliwe dzięki pakietowi apache-mod_userdir. Opcja UserDir w pliku 16_mod_userdir.conf definiuje nazwę katalogu przechowującego strony użytkownik�w wewnątrz ich katalog�w domowych.

UserDir public_html

Przykład: Użytkownik Jan Kowalski posiada konto o nazwie: jan. W /home/users/jan jest jego katalog domowy. Swoją stronę internetową umieszcza w katalogu /home/users/jan/public_html, zaś dostęp do nie uzyskuje za pomocą adresu http://example.net/~jan.

Aby strona się wyświetliła należy ustawić odpowiednie prawa dostępu - tak by Apache (domyślnie z prawami użytkownika http) miał prawo do odczytu. Katalog domowy jan powinien mieć ustawione prawa 711. Katalog przechowujący jego stronę czyli public_html powinien mieć 755. Każdy katalog zawierający elementy strony powinien mieć r�wnież uprawnienia 755. Pliki strony natomiast 644.

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ęd�w dużo bardziej popularna jest druga z metod i właśnie ją będziemy opisywać.

Obsługa host�w wirtualnych jest związana z odpowiednią konfiguracją domen w systemie DNS - wymaga wpis�w typu IN A wskazujących na nasz serwer WWW. Konfigurację serwera DNS opisano w „BIND - Serwer Nazw” i będzie docelowo konieczna, jednak dla potrzeb testowych wystarczą nam wpisy w pliku /etc/hosts, kt�ry z kolei został opisany w „Podstawowa konfiguracja sieci”.

W naszym przykładzie dodamy obsługę domeny moja-strona.com, na początku należy stworzyć dodatkowy plik konfiguracji (dla porządku) o nazwie np. vhosts.conf, kt�ry umieścimy w katalogu /etc/httpd/httpd.conf/. Zakładamy, że wszystkie vhosty będziemy trzymać w katalogu /home/services/httpd/vhosts/. Plik będzie się zaczynał od następującego zestawu opcji:

NameVirtualHost *
<Directory /home/services/httpd/vhosts>
        Order allow,deny
        Allow from all
</Directory>
<VirtualHost _default_>
        DocumentRoot /home/services/httpd/html/
</VirtualHost>

Opcja NameVirtualHost wskazuje, kt�re adresy IP serwera mają być używane do obsługi host�w witrualnych, w tym wypadku wszystkie, co jest najczęściej spotykaną konfiguracją. Sekcja Directory zezwala na dostęp do plik�w ze wskazanego katalogu. Pierwszy zdefiniowany virtualhost (_default_) ma za zadanie wskazanie serwerowi domyślnej strony, wyświetlanej w wypadku jeśli jakiś vhost nie jest skonfigurowany na naszym serwerze, w przeciwnym razie wyświetli się strona pierwszego w kolejności vhosta. Teraz możemy dodawać vhosty, wg. przykładu:

<VirtualHost *>
        ServerName moja-strona.com
        DocumentRoot /home/services/httpd/vhosts/moja_strona
</VirtualHost>

Wewnątrz sekcji VirtualHost znajduje się opcja ServerName, m�wiąca o nazwie domenowej vhosta, a poniżej wskazanie są ścieżki do katalogu z plikami strony. Po uruchomieniu mechanizmu host�w wirtualnych całkowicie bezużyteczne staną się globalne opcje ServerName czy DocumentRoot, od tej pory konfiguracja w całości opiera się o vhosty. W konfiguracji host�w wirtualnych możemy umieszczać wiele opcji używanych w głï¿½wnym serwerze (np.: ServerAdmin, ErrorLog), tak zdefiniowane opcje przesłonią globalne wartości.

Istnieje możliwość masowego konfigurowania vhost�w, bez konieczności tworzenia wpis�w dla każdego po kolei, służy do tego moduł vhost-alias dostarczany wraz z pakietem apache-mod_vhost_alias. Jego opis wykracza poza ramy tego rozdziału, więcej na jego temat odnajdziemy w dokumentacji serwera.

Ograniczanie dostępu na podstawie adresu

Czasami chcemy ograniczyć możliwość przeglądania stron dla konkretnych adres�w lub klas adresowych. W tym celu użyjemy modułu apache-mod_authz_host, dzięki niemu będziemy mogli chronić przed dostępem do wskazanych katalog�w. Jeżeli potrzebujesz chronić jedynie jeden lub kilka plik�w, stw�rz w obrębie strony katalog o dowolnej nazwie i umieść je w nim. Oczywiście musisz pamiętać o przekonstruowaniu link�w na stronie.

Do konfiguracji Apache dodajemy podobną konstrukcję konstrukcję:

<Directory "/home/users/jan/public_html/intra">
	Order allow,deny
	Allow from 123.45.0.0/255.255.0.0
	Allow from 56.67.9.34
</Directory>

Dostęp do katalogu intra mają wszystkie komputery z określonej w przykładzie sieci oraz jeden komputer (bądź urządzenie udostępniające NAT) o wymienionym adresie. Wszystkie połączenia nie pasujące do tych kryteri�w traktowane są jako deny, zgodnie z porządkiem wyznaczonym przez dyrektywę Order.

Ograniczenie dostępu za pomocą loginu i hasła

Apache udostępnia mechanizm autoryzacji, kt�ry używany jest do wyodrębnienia z serwisu pewnej części przeznaczonej dla upoważnionych użytkownik�w. Ograniczenie działa na poziomie katalog�w i podobnie jak w ograniczeniu dla adresu (opisanego powyżej) nie można w ten spos�b chronić poszczeg�lnych plik�w.

Apache wspiera wiele rodzaj�w źr�deł uwierzytelniających: pliki tekstowe, konta systemowe, bazy LDAP i inne. My będziemy zajmować się autoryzacją za pomocą plik�w tekstowych, ze względu na popularność i prostotę tego rozwiązania. Istnieją dwa protokoły przesyłania hasła Basic i Digest (w postaci skr�tu). Metoda Digest jest bezpieczniejsza jednak praktycznie nie jest obsługiwana przez przeglądarki WWW, tak więc pozostaje nam używanie metody Basic.

Zaczynamy od instalacji metapakietu apache-mod_auth oraz pakietu htpasswd-apache. Teraz dodajemy do kt�regoś z plik�w konfiguracji regułkę chroniącą katalog :

<Directory "/home/users/jan/public_html/private">
        AuthType Basic
	AuthBasicProvider file
	AuthName "Witaj Janie, zaloguj sie."
	AuthUserFile /home/services/httpd/.htpasswd
        Require valid-user
</Directory>

Opcja AuthUserFile wskazuje plik z loginami i hasłami użytkownik�w, jak widać ścieżka ta jest inna niż chroniony katalog ze względ�w bezpieczeństwa. Opcja Require określa jacy użytkownicy są akceptowani - tutaj każdy autoryzowany.

Teraz tworzymy plik z hasłami, poprzez dodanie pierwszego konta:

# htpasswd -c /home/services/httpd/.htpasswd jan
New password:
Re-type new password:
Adding password for user jan

Plikowi ustawiamy odpowiednie uprawnienia i własność, aby dostęp do niego miał wyłącznie użytkownik http:

# chmod 600 /home/services/httpd/.htpasswd
# chown http.http /home/services/httpd/.htpasswd

Po restarcie każde odwołanie do katalogu będzie wymagało podania loginu jan i hasła. Istnieje także możliwość dodania obsługi grup - mechanizmu zbliżonego działaniem do uniksowych grup systemowych.

W wielu wypadkach będziemy chcieli dać możliwość użytkownikom tworzenia plik�w z hasłami z wraz z plikami .htaccess w katalogu określonym przez DocumentRoot. Stanowi to zagrożenie bezpieczeństwa, ze względu na możliwość wyświetlenia zawartości tych plik�w. Możemy się zabezpieczyć przed tym instalując pakiet apache-mod_authz_host, dzięki kt�remu m.in. nie zostaną wysłane do przeglądarki pliki .ht*

Obsługa skrypt�w PHP

Ze względu na dużą funkcjonalność język PHP stał się już w zasadzie pewnym standardem w tworzeniu interaktywnych stron internetowych. Wsp�łczesne serwisy wykorzystują m. in. bazy danych, dlatego zostanie r�wnież opisane jak taką obsługę zapewnić. Przeglądając listę dostępnych do zainstalowania pakiet�w z PHP na pierwszy rzut oka widać nacisk tw�rc�w dystrybucji jaki został nałożony na modularność. Daje to niesamowitą wolność w wyborze tego co jest Ci dokładnie potrzebne.

Zaczynamy od instalacji pakietu apache-mod_php, w ten spos�b otrzymamy podstawową wersję PHP, dodatkowe pakiety instalujemy wtedy gdy potrzebna nam jest jakaś funkcjonalność. Najlepszą metodą sprawdzenia czy PHP działa jest użycie funkcji phpinfo(), aby z niej skorzystać stw�rz plik z zawartością taką jak poniżej:

<? phpinfo(); ?>

następnie należy go umieść w katalogu /home/services/httpd/html, pod nazwą np. info.php. Teraz wpisujemy w przeglądarce adres http://example.net/info.php, powinieneś uzyskać informacje m. in. na temat wersji PHP, konfiguracji serwera oraz obsługiwanych modułï¿½w.

Obsługa r�żnego typu system�w bazodanowych rozbita jest na osobne pakiety zawierające definicje funkcji PHP kt�re ją zapewniają. Poniżej w tabeli znajduje się lista kt�ra to odzwierciedla.

Tabela 16.1. Obsługa baz danych

Nazwa pakietuBaza Danych
php-dbaModuł dla PHP dodający obsługę dla baz danych opartych na plikach (DBA).
php-dbaseModuł PHP ze wsparciem dla DBase.
php-fileproModuł PHP dodający możliwość dostępu (tylko do odczytu) do baz danych filePro.
php-interbaseModuł PHP umożliwiający dostęp do baz danych InterBase i Firebird.
php-mssqlModuł PHP dodający obsługę baz danych MS SQL poprzez bibliotekę FreeTDS.
php-mysqlModuł PHP umożliwiający dostęp do bazy danych MySQL.
php-odbcModuł PHP ze wsparciem dla ODBC.
php-pgsqlModuł PHP umożliwiający dostęp do bazy danych PostgreSQL.
php-sybaseModuł PHP dodający obsługę baz danych Sybase oraz MS SQL poprzez bibliotekę SYBDB.
php-sybase-ctModuł PHP dodający obsługę baz danych Sybase oraz MS SQL poprzez CT-lib.

Aby skorzystać z kt�rego kolwiek modułu wystarczy go po prostu zainstalować. Przeprowadzając instalację w trybie wsadowym pamiętaj o zrestartowaniu usługi apache, o czym zostaniesz przez poldka poinformowany. Dystrybucja nie posiada niestety pakiet�w do obsługi bazy danych Oracle. Jeżeli jest Ci ona potrzebna musisz zbudować PHP włączając obsługę oracla z serwera CVS, instalując uprzednio Oracla kt�rego posiadasz.

Warto jeszcze wspomnieć o narzędziach wspomagających zarządzanie bazami danych. Do obsługi bazy MySQL służy pakiet phpMyAdmin natomiast do PostgreSQL zainstaluj phpPgAdmin. Szerzej o tych aplikacjach w dokumentacji do tych system�w.

CGI

Aby nasz Apache obsługiwał programy CGI wystarczy zainstalować pakiet apache-mod_cgi. Po przeładowaniu demona programy CGI obsługiwane będa w katalogu /home/services/httpd/cgi-bin, zgodnie z ustawieniami w pliku /etc/httpd/apache.conf.

Żeby przetestować CGI wystarczy że utworzymy plik o następującej treści:

#!/bin/sh
echo "Content-type: text/html\n\n"
echo "Hello, World."

a następnie umieścimy go w odpowiednim katalogu z nazwą np. cgi.sh, nadamy mu prawo wykonywalności i w przeglądarce podamy adres http://example.net/cgi-bin/cgi.sh. Możemy do tego użyć r�wnież testowych skrypt�w przychodzących z pakietem apache-cgi_test.

Jeśli zechcemy wskazać więcej katalog�w w kt�rych pozwolimy uruchamiać aplikacje CGI (np. dla host�w wirtualnych) wystarczy, że do kt�regoś z plik�w konfiguracji dodamy odpowiednio skonfigurowaną opcję ScriptAlias np.:

ScriptAlias /cgi-bin/ "/home/users/jan/cgi-bin/"

Ze względ�w bezpieczeństwa autorzy Apache zalecają by taki katalog leżał poza ścieżką wskazaną w opcji DocumentRoot.

Security Socket Layer (SSL)

Mechanizm ten wykorzystuje się w serwisach wymagających od użytkownika autoryzacji. Najbardziej typowymi aplikacjami tego typu są r�żnego rodzaju klienci poczty. SSL zapewnia szyfrowany kanał dla informacji przepływającej od użytkownika do serwera. Dzięki temu niemożliwe jest podsłuchanie hasła. UWAGA! Jeden certyfikat SSL może zostać przypisany tylko dla jednego adresu IP.

Konfigurację zaczynamy od zainstalowania pakietu apache-mod_ssl. W wyniku instalacji utworzony zostanie plik /etc/httpd/httpd.conf/40_mod_ssl.conf. Zanim zaczniemy go konfigurować należy wygenerować certyfikaty. Służy do tego polecenie openssl. Program ten znajduje się w pakiecie openssl-tools.

# openssl genrsa -out /etc/httpd/ssl/apache.key 1024

W wyniku tego polecenia zostanie utworzony plik apache.key kt�ry posłuży do tworzenia certyfikatu. Robimy to w następujacy spos�b.

# openssl req -new -x509 -days 365 -key /etc/httpd/ssl/apache.key \
     -out /etc/httpd/ssl/apache.crt

Proces tworzenia certyfikatu będzie wymagał podania kilku informacji. Zostaniesz o nie poproszony trakcie jego trwania.

Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Wojew�dztwo
Locality Name (eg, city) []:Miasto
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Firma
Organizational Unit Name (eg, section) []:Web Server
Common Name (eg, YOUR name) []:example.net
Email Address []:[email protected]

Pola, kt�re widzisz w powyższym przykładzie należy wypełnić zgodnie z tym jak zostało to przedstawione. W przypadku kiedy serwer jest prywatną własnością i nie należy do żadnej firmy, w polu Organization Name możesz wpisać imię i nazwisko. Para plik�w: klucz oraz certyfikat powinny mieć takie uprawnienia, aby użytkownik http m�gł je odczytywać.

Możemy teraz wyedytować plik /etc/httpd/httpd.conf/40_mod_ssl.conf. Pośr�d szeregu opcji interesuje nas w zasadzie tylko konfiguracja katalogu, do kt�rego połączenie będzie szyfrowane oraz ścieżki do plik�w z kluczem oraz certyfikatem. Musimy odnaleźć początek sekcji o nazwie VirtualHost.

<VirtualHost _default_:443>
	DocumentRoot "/home/services/httpd/html/webmail"
	ServerName mail.example.net:443
	ServerAdmin [email protected]
	ErrorLog /var/log/httpd/error_log
	TransferLog /var/log/httpd/access_log

Jak widać jej początek nie r�żni się niczym od konfiguracji VirtualHosts. Zwr�ć uwagę na opcję ServerName. Powinna ona kończyć się ciągiem :443 kt�ry oznacza port na kt�rym ma nasłuchiwać demon. Przechodzimy dalej i zmieniamy takie opcje jak SSLCertificateFile oraz SSLCertificateKeyFile.

SSLCertificateFile /etc/httpd/ssl/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl/apache.key

Podajemy tutaj ścieżki do plik�w kt�re wygenerowaliśmy w poprzednim etapie.

Po zapisaniu i zakończeniu edycji pliku restartujemy Apache, aby nasze zmiany odniosły skutek. Aby nawiązać połączenie szyfrowane z webmailem należy w przeglądarce wpisać adres https://example.net/webmail. Aby ustanowić połączenie szyfrowane i za każdym razem nie wpisywać https://, powinieneś użyć mechanizmu vhosts. Stw�rz katalog /home/services/httpd/html/mail dla kt�rego zrobisz wpis w pliku 20_mod_vhost_alias.conf. Czyli zgodnie z tym czego już się dowiedziałeś, robisz wpis w pliku strefy domeny oraz konfigurujesz apache. Natomiast w katalogu /home/services/httpd/html/mail tworzysz plik o nazwie index.php z zawartością taką jak w przykładzie.

<?php
                                                                                                     
/**
* index.php -- Displays the main frameset
*
* Copyright (c) 1999-2002 The SquirrelMail Project Team
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
* Redirects to the login page.
*
* $Id: index.php,v 1.13 2002/02/19 15:05:03 philippe_mingo Exp $
*/
                                                                                                     
 header("Location: https://poczta.example.net\n\n");
 exit();
                                                                                                     
?>

Oczywiście domena, kt�ra jest podana na listingu musi odnosić się do vhosta z opcją DocumentRoot ustawioną na /home/services/httpd/html/mail.

Indeksowana zawartość katalogu

Jest to bardzo przydatna funkcja, pozwalająca w łatwy spos�b udostępnić zawartość katalogu na serwerze. Aby umożliwić indeksowanie musimy zainstalować moduł apache-mod_autoindex.

poldek -i apache-mod_autoindex

Aby uruchomić indeksy musimy włączyć opcję Indexes. W domyślnej konfiguracji, Apache ma włączone indeksy dla wszystkich podkatalog�w wewnątrz /home/services/httpd/html (w pliku 10_common.conf). Jeśli ustawiliśmy inaczej to musimy włączać tą opcję dla każdego z katalog�w osobno np.:

<Directory /home/services/httpd/html/katalog>
	Options Indexes
</Directory>

Opcja nie zadziała wtedy, kiedy zainstalowaliśmy moduł apache-mod_dir i w katalogu znajduje się plik określony przez DirectoryIndex.

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ędziemy modyfikować konfigurację działającego serwera produkcyjnego, to dobrą praktyką jest wcześniejsze użycie programu apachectl z pakietu apache-tools do sprawdzenia poprawności składni plik�w konfiguracji:

# apachectl configtest
Syntax OK

Na szczeg�lną uwagę zasługują parametry rc-skryptu: reload|force-reload|graceful np.:

# service httpd reload

Użycie kt�regoś z nich wywołuje "łagodny" restart serwera (graceful restart), kt�ry pozwala dokończyć wykonywane prace przez procesy. Dzięki temu restart nie jest odczuwalny przez klient�w. Parametry te mają jeszcze jedną ważną zaletę, wywołanie ich powoduje sprawdzenie konfiguracji serwera przed rozpoczęciem restartu, dzięki czemu nie musimy do tego używać programu apachectl.

BIND - Serwer Nazw

DNS - Domain Name System

DNS jest systemem hierarchicznym. Na samym szczycie owej hierarchii stoją tzw. TLD (Top Level Domains), czyli domeny najwyższego rzędu. Zaliczają się do nich takie domeny jak .com (komercyjne), .pl (krajowe), .net (sieci) i inne. Są to domeny powstałe na podstawie odpowiednich postanowień, opisane w specjalnych dokumentach. Każda z wymienionych (lub też nie wymienionych) tutaj TLD's posiada swoje subdomeny, np. pld-linux.org. Z kolei każda powstała w wyniku rejestracji danej nazwy domena może mieć swoje poddomeny, np. www.pld-linux.org. W ten spos�b można tworzyć bardzo zagęszczone hierarchie w obrębie danej domeny. Niniejszy rozdział dotyczy implementacji Bind™ określanego czasem jako named™ - jednego z najpopularniejszych serwer�w DNS.

Każda domena (zwana r�wnież strefą) musi mieć co najmniej dwa serwery DNS, jest to wym�g registrar�w, czyli instytucji oferujących możliwość rejestracji domen. Jeden z serwer�w określa się jako podstawowy (r�wnież master lub primary) a drugi jako zapasowy (slave lub secondary).

Wstęp

Bind w PLD dziala w środowisku chroot, w katalogu /var/lib/named, musimy o tym pamiętać, przy niekt�rych operacjach diagnostycznych. Głï¿½wnym plikiem konfiguracyjnym jest /etc/named.conf, kt�ry jest symlinkiem do /var/lib/named/etc/named.conf. Struktura katalogu /var/lib/named wygląda następująco:

dev/
etc/
M/
S/
named.pid
root.hint

Podobnie jak w normalnym środowisku, jest obecny tutaj katalog /dev, w kt�rym znajdują się urządzenia konieczne do działania demona: /dev/null oraz /dev/urandom. Katalog /etc jak zapewne się domyślasz, przechowuje pliki konfiguracyjne. U nas znajduje się w nim jedynie named.conf. Kolejne katalogi: M oraz S zostały przeznaczone do przechowywania plik�w stref, odpowiednio master i slave. Plik named.pid przechowuje numer procesu systemowego. Ostatni plik na liście - root.hint zawiera wpisy z adresami tzw. root serwer�w, czyli głï¿½wnych serwer�w DNS. Jest on konieczny do przeszukiwania serwer�w DNS w poszukiwaniu żądanych nazw, kt�rych nie utrzymuje nasz serwer.

Dodawanie stref DNS polega na definiowaniu obsługiwanych domen w pliku /etc/named.conf, oraz tworzenia plik�w konfiguracji stref.

Podstawowa konfiguracja

Głï¿½wnym plikiem konfiguracyjnym serwera Bind jest /etc/named.conf. Znajdują się w nim podstawowe opcje usługi oraz informacje na temat obsługiwanych stref. Poniżej zamieszczono domyślne wpisy, kt�re znajdują się w tym pliku

options {
	directory "/";
        pid-file "named.pid";
        auth-nxdomain yes;
        datasize default;
};                                                       
zone "localhost" IN {
        type master;
        file "M/localhost.zone";
        allow-update { none; };
        allow-transfer { any; };
};
zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "M/127.0.0.zone";
        allow-update { none; };
        allow-transfer { any; };
};
zone "." IN {
        type hint;
        file "root.hint";
};

Na samym początku pliku konfiguracyjnego znajduje się sekcja options. Najbardziej istotną opcją jest tutaj directory. Wskazuje ona na głï¿½wny katalog przechowywania plik�w stref. Być może zdziwi Cię nieco parametr powyższej opcji. Jak już wcześniej wspominałem Bind w PLD posiada własne chrootowane środowisko, dlatego można taki zapis zastosować.

Zanim przejdę do omawiania pozostałych wpis�w, należy się jeszcze słowo wyjaśnienia na temat konstrukcji samego pliku. Na pierwszy rzut oka poszczeg�lne wpisy są podzielone na sekcje. Te z kolei ograniczone są klamrami. Znak ; r�wnież pełni tutaj rolę ogranicznika dla poszczeg�lnych opcji jak i całych sekcji ujętych w klamry. Warto o tym wiedzieć ze względu na ewentualne szukanie błęd�w powstałych na skutek edycji tego pliku.

Poniżej mamy zdefiniowane trzy sekcje stref zaczynających się słowem kluczowym zone. W powyższym przykładzie przedstawione są wpisy określające localhosta. Są one typu master. Plik strefy w każdej z nich wskazany jest opcją file. Strefa nie musi być aktualizowana, ani synchronizowana z serwerem slave, więc dwie pozostałe opcje mają parametr none oraz any. Ostatnia strefa służy do komunikacji naszego binda z Root serwerami o kt�rych była mowa we wstępie. Bez tej strefy nie m�głby on wyszukiwać nazw w internecie. M�wiąc w przenośni byłby ślepy.

Każdorazowe odpytywanie Root Servers może się okazać mało wydajne, ze względu na duże czasy odpowiedzi. Dlatego, jeżeli chcemy przyspieszyć ten proces powinniśmy sekcję option zmodyfikować o wpis taki jak poniżej

options {
forwarders { 194.204.159.1; 194.204.152.34; };
}

Oczywiście nie musimy posługiwać się takimi adresami jak w przykładzie. Możemy sobie wybrać takie serwery DNS, kt�re będą nam odpowiadały najszybciej np. serwery naszego ISP.

W PLD zaleca się, aby wszystkie pliki stref w zależności od typu domeny były przechowywane w katalogach /var/lib/named/M oraz /var/lib/named/S. Tak naprawdę o ścieżce do tych katalog�w decydują wpisy w named.conf. Struktura plik�w stref dla obu typ�w domen jest taka sama.

Przykładowa konfiguracja strefy typu primary

Zaczniemy od konfiguracji /etc/named.conf, budowa tego pliku była wyjaśniona w poprzedniej części tego rozdziału. Poniżej został zamieszczony przykładowy wpis dla strefy na serwerze podstawowym:

zone "example.net" {
	type master;
	file "M/example.net";
	allow-transfer { 123.45.67.89; };
	notify yes;
};

Poszczeg�lne opcje tej sekcji zostały om�wione już na początku tego rozdziału. Podsumujmy więc dostępne informacje skupiając się na powyższym przykładzie:

  • zone "example.net" - nazwa strefy

  • type master - rodzaj serwera

  • file "M/example.net" - nazwa pliku z konfiguracją strefy

  • allow-transfer { 123.45.67.89; } - adres serwera, kt�ry ma możliwość transferu całej strefy, Jeżeli posiadasz więcej niż jeden taki DNS, możesz je wpisać pomiędzy klamry pamiętając o tym, aby rozdzielić poszczeg�lne adresy IP, znakiem ';'.

  • notify yes - opcja ta włącza powiadamianie zapasowego serwera DNS o zmianach w naszej domenie.

Musimy teraz utworzyć plik strefy dla domeny example.net wskazany przez opcję file. Poniżej zamieszczam treść przykładowego pliku strefy:

$TTL 86400
$ORIGIN example.net.
@       IN      SOA     ns1.example.net. root.example.net. (
	2004022300 ;; serial
        1200	   ;; refresh
	1200	   ;; retry
        2419200    ;; expire
	86400	   ;; TTL
        )
@               IN      NS      ns1.example.net.
@               IN      NS      ns2.example.net.
@               IN      MX      10    mail.example.net.
@               IN      A       123.45.67.8
ns1             IN      A       123.45.67.8
ns2             IN      A       90.12.34.237
mail            IN      A       123.45.67.8
www             IN      A       34.5.6.78
ftp             IN      CNAME   www

Plik strefy można podzielić na trzy odrębne sekcje. Pierwsza określa nazwę domeny oraz okres ważności wpis�w. Druga, kto tą domeną zarządza. W trzeciej znajduje się cała jej zawartość. Bardziej szczeg�łowy opis znajduje się w poniższym wykazie. Kilka zdań o wyrażeniach stosowanych w plikach stref. Warto o nich pamiętać. Wszystkie wpisy poprzedzone ;; będą ignorowane i traktowane jak komentarz. Kolejnym ważnym znakiem jest znak kropki. Jego znaczenie om�wię poniżej w przykładzie.

@               IN      NS      ns1.example.net.

Jeżeli w powyższym wpisie pominęlibyśmy końcowy znak kropki, w�wczas Bind dokleiłby na końcu nazwę domeny. W�wczas z ns1.example.net zrobiłby się wpis ns1.example.net.example.net, co oczywiście nie jest pożądane. następnym znakiem specjalnym na kt�ry warto zwr�cić uwagę jest @. Ot�ż można go potraktować jako pewnego rodzaju zmienną, kt�ra przechowuje nazwę example.net. Jednym słowem, example.net i @ to to samo.

  • $TTL 86400 - czas ważności rekord�w w domenie wyrażony w sekundach; 86400 s. to jedna doba

  • $ORIGIN example.net. - domena jaką będzie opisywał bieżący plik strefy.

  • @ IN SOA ns1.example.net. root.example.net. - Rekord typu SOA czyli Start Of Authority. Możemy się z niego dowiedzieć, kto zarządza domeną ([email protected]), jaki jest adres serwera primary DNS. Zwr�ć uwagę, że w adresie [email protected] zamiast znaku @ użyta została kropka. Rekord SOA posiada swoją własną strukturę o kt�rej poniżej. Zawarta jest ona pomiędzy znakami ( ).

  • 2004022300 ;; serial - numer seryjny domeny. Powinien on być zwiększany wraz z każdą jej modyfikacją. W dobrym tonie jest utrzymywanie go w formacie YYYYMMDDnn czyli rok, miesiąc, dzień oraz numer modyfikacji w danym dniu.

  • 1200 ;; refresh - To pole rekordu SOA definiuje jak często serwery slave mają sprawdzać czy dane o domenie nie zmieniły się na masterze. Według RFC 1035 wartość ta powinna się zawierać pomiędzy 1200 a 43200 (czyli od dwudziestu minut do dwunastu godzin). W praktyce najlepsza wartość zawiera się między 3600 a 7200 sekund.

  • 1200 ;; retry - Czas po jakim secondary ma ponowić pr�bę kontaktu z masterem, gdy taka się nie powiedzie. Zalecana wartość pomiędzy 120 a 7200 sekund.

  • 2419200 ;; expire - Ta wartość określa czas po jakim dane domeny mają zostać uznane za nieaktualne gdy serwer secondary nie będzie m�gł się skontaktować z primary. Zalecana wartość zawiera się pomiędzy 1209600 a 2419200 sekund, czyli od dw�ch do czterech tygodni.

  • 86400 ;; TTL - Time To Live. Określa ile czasu informacja o danym rekordzie ma być ważna. Jest to okres przez jaki informacja o naszej domenie będzie przechowywana przez serwer DNS, kt�ry ją pobrał. Zalecana wartość zawiera się między 86400 a 432000 sekund, czyli przez okres od jednego do pięciu dni.

Bezpośrednio pod rekordem SOA definiujemy, kt�re serwery DNS będą obsługiwały naszą domenę. Jeszcze raz przypominam aby właściwie zamknąć ten rekord. Bez tego nasza domena nie będzie działać. Do definiowania serwer�w DNS służą wpisy typu IN NS.

@               IN      NS      ns1.example.net.
@               IN      NS      ns2.example.net.

Powyższy wpis m�wi, że domenę example.net obsługuje serwer DNS ns1.example.net oraz ns2.example.net. Jeżeli obie nazwy dotyczą komputer�w, kt�re wcześniej nie pełniły roli serwer�w DNS, powienieś dodać wpisy takie jak poniżej.

ns1             IN      A       123.45.67.8
ns2             IN      A       90.12.34.237

ns1 oczywiście może wskazywać na adres serwera DNS kt�ry zapewne konfigurujesz; ns2 powinien wskazywać na Twojego secondary. Zrobiliśmy to posługując się wpisami typu IN A. Jak zapewne pamiętasz, brak końcowej kropki powoduje doklejenie do wpisanej nazwy tego co znajduje się w zmiennej $ORIGIN. Możemy więc uznać to co widzisz w powyższym przykładzie za postać skr�coną poniższego wpisu.

ns1.example.net.             IN      A       123.45.67.8
ns2.example.net.             IN      A       90.12.34.237

Wpisy typu IN A służą do określania, że właśnie ten adres IP ma przypisaną taką a nie inną nazwę. Oczywiście do jednego adresu IP możesz stworzyć kilka takich wpis�w. Jeżeli posiadasz serwer poczty, powinieneś zrobić wpis m�wiący o tym, że będzie on obsługiwał pocztę dla domeny example.net.

@               IN      MX      10    mail.example.net

Dokładnie tak jak wcześniej wspomniałem, poczta, dla domeny example.net kierowana jest do serwera mail.example.net o priorytecie 10. Jest on tzw. MX'em. Rekord typu IN MX służy właśnie do definiowania w DNS serwera poczty. Priorytet przydaje się wtedy, kiedy posiadasz kilka serwer�w poczty w swojej domenie. Służy on do ustalenia porządku; do kt�rego serwera poczta ma trafić w pierwszej kolejności. Mniejszy priorytet zapewnia pierwszeństwo.

Pozostałe wpisy dotyczą takich standardowych usług jak www czy ftp. Umieszczanie ich w pliku strefy nie jest obowiązkowe. Jednak domenę rejestruje się zazwyczaj na potrzeby www, ftp czy poczty, dlatego zostały one wymienione w przykładzie.

ftp             IN      CNAME   www

Powyżej umieszczono przykład rekordu typu IN CNAME, tworzy on dodatkową subdomenę dla hosta przypisanego już do innej nazwy. Specjaliści radzą by tego rodzaju rekordy wskazywały wyłącznie na rekordy typu IN A.

Po zakończeniu konfiguracji musimy jeszcze uruchomić usługę.

# /etc/rc.d/init.d/named start

Przykładowa konfiguracja strefy typu secondary

Konfiguracja serwera secondary sprowadza się do dokonania poniższego wpisu w pliku /etc/named.conf.

zone "example.net" IN {
	type slave;
	file "S/example.net";
	masters { 123.45.67.8; };
};

Jak widać wpis wygląda podobnie jak w przypadku serwera primary. Opcja type tym razem ma wartość slave. Musimy też wskazać serwer primary. Robimy to używając opcji masters, kt�rej wartość zawiera adres serwera primary DNS.

Obsługa protokołu IPv6

Podobnie jak większość usług w dystrybucji BIND posiada wsparcie dla protokołu IPv6 (IPng). Oczywiście wcześniej komputer musi być podłączony do tej sieci. W tej części rozdziału zostanie om�wiona konfiguracja dla stref IN A oraz strefy odwrotnej. Narzędziem wspomagającym konfigurację będzie ipv6calc znajdujący się w pakiecie o tej samej nazwie. Jak sama nazwa wskazuje jest to kalkulator adres�w IPv6.

  • IN AAAA

    Odpowiednikiem w IPv6 strefy IN A jest wpis IN AAAA. Każda z dotychczasowych stref stworzona do tej pory dla protokołu IPv4 może mieć sw�j odpowiednik w sieci IPv6. Możemy r�wnież stworzyć zupełnie nowe wpisy, kt�re będą widoczne jedynie w tej sieci.

    moja		IN  AAAA	3ffe:1a:2b:3c::1

    Umieszczenie powyższego wpisu w pliku strefy /var/lib/named/M/example.net spowoduje przypisanie nazwy moja.example.net adresowi 3ffe:1a:2b:3c::1. Aby wpis zaczął obowiązywać należy zrestartować usługę.

  • IN PTR

    Konfigurację strefy odwrotnej zaczniemy od stworzenia odpowiedniego wpisu w pliku /etc/named.conf. Jak sama nazwa wskazuje będzie on przypominał lustrzane odbicie adresu w zwykłej postaci. Aby mieć pewność, że nasza strefa będzie poprawnie zapisana posłużymy się wspomnianym we wstępie narzędziem ipv6calc.

    $ ipv6calc -r 3ffe:1a:2b:3c::/64
    No input type specified, try autodetection...found type: ipv6addr
    c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3.ip6.int.

    Uzyskaliśmy w ten spos�b informacje, że dla sieci o adresie 3ffe:1a:2b:3c::/64, strefa odwrotna posiada postać taką jak na powyższym listingu. Wystarczy teraz to zapisać w pliku konfiguracyjnym BIND'a.

    zone "c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3.ip6.int" IN {
    	type master;
    	file "M/ipv6";
    	allow-transfer {
            	90.12.34.237;
           	};
    };

    Jak widać na pierwszy rzut oka, konfiguracja niczym się praktycznie nie r�żni od konfiguracji strefy dla IPv4. Jako nazwę strefy podaliśmy to co nam zwr�cił ipv6calc. Przyjrzyjmy się teraz jak powinien wyglądać plik dla tej strefy wskazany dyrektywą file.

    $TTL    86400
    $ORIGIN 0.1.0.0.e.2.0.0.c.0.0.4.e.f.f.3.ip6.int.

    Pierwszy parametr to omawiany już wcześniej okres ważności rekord�w. Jak widać na listingu wynosi on jeden dzień. Drugi z nich to de facto nazwa tej strefy. Sama opcja $ORIGIN to swojego rodzaju zmienna, kt�rej wartość jest podstawiana w miejsce @ oraz doklejana do tych nazw kt�re nie posiadają na końcu specjalnego znaku kropki.

    @               IN      SOA ns1.example.net. root.example.net. (
    	        2004050600
                    3H
                    15M
    		1W
    		1D )

    Jak widać rekord IN SOA nie r�żni się niczym od tego dla domeny IPv4.

    @                               IN      NS      ns1.example.net.
    @                               IN      NS      ns2.example.net.

    Określamy kt�re serwery przechowują naszą domenę odwrotną. R�wnież tutaj wszystko wygląda identycznie jak dla protokołu IPv4. Możemy teraz przystąpić do konfigurowania strefy odwrotnej.

    1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 	IN PTR 	moja.example.net.

    Dlaczego tyle zer? Odpowiedź na to znajdziesz obliczając przy użyciu programu ipv6calc adres odwrotny dla 3ffe:1a:2b:3c::1. Robimy to w spos�b identyczny do poprzedniego przykładu jego użycia. W wyniku obliczeń będzie on wyglądał tak: 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3. Jak łatwo zauważyć, po ostatnim zerze w listingu nie postawiliśmy kropki, a więc zostanie doklejona po nim zawartość $ORIGIN.

    Narzędziem pomocnym w odpytywaniu serwer�w DNS, jest program host. Można nim r�wnież odpytywać o nazwy skonfigurowane dla protokołu IPv6. Jak by wyglądało zapytanie o nazwę moja.example.net?

    $ host -n -i 3ffe:1a:2b:3c::1
    1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.c.3.0.0.b.2.0.0.a.1.0.0.e.f.f.3.\
        ip6.int domain name pointer moja.example.net

    Przełącznik -n oznacza, że będziemy odpytywali strefę odwrotną, natomiast -i, że jest to adres typu int. Domyślnie host szuka nazw typu arpa.

Rejestracja

Zanim zarejestrujemy domenę musimy mieć skonfigurowany podstawowy i zapasowy serwer nazw. Mamy możliwość zarejestrowania własnej domeny, bądź skorzystać z usług darmowego oddelegowania nam subdomeny zarejestrowanej już domeny. Ceny rejestracji domen spadły w ostatnich latach tak bardzo, że używanie "obcej" domeny stało się mało profesjonalne i warto zarejestrować własną.

Jeżeli nie posiadasz serwera secondary, możesz poszukać firmy lub organizacji, kt�ra za darmo utrzymuje zapasowe DNS-y. Możemy też um�wić się z administratorem innej firmy na wzajemne prowadzenie serwer�w secondary.

Diagnostyka

Jeśli chcemy przetestować poprawność składni pliku strefy, powinniśmy skorzystać z narzędzia named-checkzone. Program sprawdzi poprawność pliku strefy i poda w kt�rej linii wystąpił błąd np.:

# /usr/sbin/named-checkzone example.net /var/lib/named/M/example.net

Named™ generuje logi typu daemon, domyślnie syslogd umieszcza takie wpisy w pliku /var/log/daemon. Jeśli jednak nastąpił problem z uruchomieniem demona, uniemożliwiający mu pisanie do log�w, to możemy sprawdzić co się dzieje uruchamiając go bez przejścia w tło i z wypisaniem komunikat�w na standardowe wyjście:

/usr/sbin/named -g -t /var/lib/named

Aby ostatecznie sprawdzić poprawność konfiguracji możemy odpytać nasz serwer za pomocą protokołu DNS. Użyjemy do tego programu host™ z pakietu bind-utils np.:

# /usr/sbin/host -t mx example.net

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ętlenia zapytań. Wyjątek stanowią usługi pracujące w osobnych środowiskach chroot/vserver. Więcej o konfiguracji resolwera nazw znajdziemy w „Podstawowa konfiguracja sieci”.

CRON - 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 vixie-cron™, kt�ry opr�cz standardowych usług posiada dodatkowe opcje konfiguracyjne i zwiększone bezpieczeństwo

Instalacja

Program instalujemy za pomocą poldka:

# poldek -i vixie-cron

Po zainstalowaniu program jest praktycznie gotowy do użycia. Można więc od razu uruchomić demona korzystając z polecenia:

# /etc/rc.d/init.d/crond start

Od tej pory demon może działać nieprzerwane - nie wymaga restart�w po rekonfiguracji.

Budowa tabel

W cronie istnieje podział na zadania systemowe i zadania użytkownik�w. Pierwszych zwykle używa się do prac administracyjnych, z drugich korzystają użytkownicy wedle własnych potrzeb (o ile mają do tego prawo). Głï¿½wna konfiguracja demona (systemowa) umieszczona jest w pliku /etc/cron.d/crontab, konfiguracje lokalne użytkownik�w przechowywane są w plikach /var/spool/cron/{$login}. O ile /etc/cron.d/crontab może być swobodnie modyfikowany za pomocą edytora tekstu, o tyle użytkownicy powinni używać w tym celu odpowiedniego narzędzia (opisanego w dalszej części).

Pliki konfiguracji crona nazywane są tabelami, zar�wno głï¿½wny plik konfiguracji jak i konfiguracje użytkownik�w mają bardzo podobną budowę. Są to pliki tekstowe o ściśle ustalonej składni, w kt�rych jeden wiersz odpowiada jednemu zadaniu. Wiersz tabeli systemowej ma następującą składnię:

{$data-czas} {$użytkownik} {$zadanie}

Nieco prostszą budowę mają tabele użytkownik�w:

{$data-czas} {$zadanie}

Pierwsze pole określa jak często wykonywane jest zadanie, pole {$użytkownik} występuje jedynie w konfiguracji globalnej (w /etc/cron.d/crontab) i wskazuje z jakimi prawami uruchamiane ma być zadanie. Trzecie pole to operacja kt�ra ma być wykonywana. W tabelach użytkownik�w nie podaje się nazwy użytkownika, gdyż polecenia tam zawarte są automatycznie wykonywane z prawami ich właściciela.

Przykładowe zadania w /etc/cron.d/crontab:

02 01 * * *    root    find /home -size +100M > /root/duze_pliki.txt

Przykładowa konfiguracja zwykłego użytkownika:

30 * * * *    backup.sh

W tabelach opr�cz zadań możemy definiować zmienne środowiskowe np.:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=jakis_user
NICE=15

Pierwsza zmienna wskazuje powłokę (zamiast domyślnej /bin/sh), kt�ra ma być używana do wywoływania zadań, druga to ścieżka do plik�w wykonywalnych. Trzecie pole to konto użytkownika do kt�rego będą wysyłane powiadomienia pocztą elektroniczną lub pełny adres e-mail, ostatnia zmienna to priorytet wykonywanych zadań (liczba nice).

Format daty i czasu

Sekcja {$użytkownik} i {$zadanie} nie wymagają komentarza więc opisane zostanie jedynie pole {$data-czas}. Pole to składa się z pięciu kolumn:

  • 1-sza kolumna (zakres 0-59) oznacza minuty.

  • 2-ga kolumna (zakres 0-23) oznacza godzinę.

  • 3-cia kolumna (zakres 0-31) oznacza dzień miesiąca.

  • 4-ta kolumna (zakres 0-12) oznacza miesiąc. (0 i 1 to styczeń)

  • 5-ta kolumna (zakres 0-7) oznacza dzień tygodnia (0 i 7 to niedziela)

  • 6-ta kolumna określa komendę jaka powinna zostać wykonana dla danego wiersza.

Gwiazdka "*" oznacza cały zakres z możliwego przedziału. Same zakresy w pierwszych pięciu kolumnach mogą być reprezentowane w r�żny spos�b. Więcej szczeg�łï¿½w na ten temat dowiemy się wywołując polecenie man 5 crontab

Program vixie-cron™ posiada także mało udokumentowany format wykonywania poleceń

Nazwa          Działanie
------         -------
@reboot        Uruchom jeden raz przy starcie systemu
@yearly        Uruchom jeden raz w roku, "0 0 1 1 *"
@annually      To samo co @yearly
@monthly       Uruchom jeden raz w miesiącu, "0 0 1 * *"
@weekly        Uruchom jeden raz w tygodniu, "0 0 * * 0"
@daily         Uruchom jeden raz dziennie, "0 0 * * *"
@midnight      To samo co @daily
@hourly        Uruchom raz na godzinę, "0 * * * *"

Przykład:

@reboot        /usr/bin/rdate -s ntp.task.gda.pl

Tabele systemowe

Głï¿½wną konfigurację systemu tworzymy za pomocą naszego ulubionego edytora tekstu, poprzez modyfikację pliku /etc/cron.d/crontab. Jego zawartość będzie podobna do poniżej przedstawionego przykładu:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
[email protected]
NICE=15

# run-parts
01 * * * *       root  /bin/run-parts /etc/cron.hourly
02 1 * * *       root  /bin/run-parts /etc/cron.daily
02 2 * * 0       root  /bin/run-parts /etc/cron.weekly
02 3 1 * *       root  /bin/run-parts /etc/cron.monthly
0-59/10 * * * *  root  /bin/run-parts /etc/cron.10min		
15 18 * * 1-5    root  /bin/run-parts /etc/cron.gielda

Poniżej napisu # run-parts umieszczone są konfiguracje zadań, pierwsze cztery linijki stanowią domyślną konfigurację demona. Program run-parts służy do uruchamiania o jednej porze wszystkich program�w we wskazanym katalogu. Dzięki takim opcjom możemy dodawać programy lub skrypty do odpowiednich katalog�w bez konieczności pisania regułek cron-a. Poniżej umieszczono opisy powyższych przykład�w:

Wykonanie poleceń zawartych w pliku (plikach) katalogu /etc/cron.hourly codziennie, co godzinę - zaczynając od pełnej pierwszej minuty (np. 02:01, 03:01 itd.):

01 * * * *      /bin/run-parts /etc/cron.hourly

Wykonanie poleceń zawartch w pliku (plikach) katalogu /etc/cron.daily raz dzienie (o godz. 01:02):

02 1 * * *      /bin/run-parts /etc/cron.daily

Wykonanie poleceń zawartych w pliku (plikach) katalogu /etc/cron.weekly raz w tygodniu (w niedziele o godz. 02:02):

02 2 * * 0      /bin/run-parts /etc/cron.weekly

Wykonanie poleceń zawartych w pliku (plikach) katalogu /etc/cron.monthly raz na miesiąc (w pierwszy dzień miesiąca o godz. 03:02):

02 3 1 * *      /bin/run-parts /etc/cron.monthly

Wykonanie poleceń zawartych w pliku (plikach) katalogu /etc/cron.gielda raz dziennie w dni robocze (od poniedziałku do piątku o godz. 18:15):

15 18 * * 1-5   /bin/run-parts /etc/cron.gielda

Wykonanie poleceń zawartych w pliku (plikach) katalogu /etc/cron.10min co 10 minut (każdego dnia, zaczynając od pełnej godziny - czyli np. 01:00, 01:10, 01:20 itd.):

0-59/10 * * * * /bin/run-parts /etc/cron.10min

Tabele użytkownik�w

Domyślnie użytkownicy nie mogą tworzyć własnych zadań cron-a, aby im na to zezwolić każdy nich musi zostać dopisany do pliku /etc/cron/cron.allow.

Użytkownicy powinni używać narzędzia crontab, program ten pozwala na bardzo łatwe zarządzanie tabelą użytkownika. Przyjmuje parametry określające rodzaj działania, kt�re ma być wykonane na tabeli. Polecenie crontab -l wyświetla listę zdefiniowanych zadań, wywołanie crontab -e otworzy plik konfiguracji do edycji, zaś crontab -r usunie całą zawartość konfiguracji użytkownika.

Wybranie opcji edycji tabeli spowoduje otworzenie edytora tekstu określonego zmienną środowiskową EDITOR, po skończonej edycji plik zostanie automatycznie poddany kontroli poprawności i zapisany jako /var/spool/cron/{$login}. Najczęściej popełniane błędy przez użytkownik�w to zły format daty/czasu lub brak znaku nowej linii po ostatnim wierszu.

Root ma dodatkowo do dyspozycji możliwość zarządzania zadaniami dowolnego użytkownika, w tym celu stosuje się opcję -u z podaną nazwą użytkownika.

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 mają docierać informacje o wystąpieniu błęd�w w wykonywaniu zadań. Jeśli nie zdefiniuje zmiennej MAILTO w tabeli to poczta zostanie wysłana na lokalne konto właściciela tej tabeli. Poczta elektroniczna jest jedyną formą informowania zwykłych użytkownik�w o ewentualnych błędach zadań, gdyż nie mają oni dostępu do log�w.

Wysyłanie poczty elektronicznej zar�wno do użytkownik�w lokalnych jak i zewnętrznych będzie wymagało instalacji lokalnego serwera poczty MTA. Może to być niemal dowolny demon pocztowy, np.: Exim (opis w „Exim - Transport poczty elektronicznej (MTA)”) lub Postfix (opis w „Postfix - Transport poczty elektronicznej (MTA)”).

Aby łatwiej było analizować problemy, do wiadomości wysyłanej przez demon, dodawane są nagłï¿½wki X-Cron-Env, zawierające dane środowiska np.:

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <NICE=15>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>

CUPS - Popularny system druku dla Uniksa

Wstęp

CUPS™ jest nowoczesnym i uniwersalnym systemem druku dla system�w uniksowych. Może być stosowany zar�wno do drukowania lokalnego jak i do drukowania w sieci - obsługuje domyślnie protok�ł IPP. Po poprawnym skonfigurowaniu urządzenia będziemy mogli drukować z niemal każdego programu, CUPS akceptuje wywołania poleceń drukowania w stylu klasycznego systemu LPD.

System CUPS może być zar�wno serwerem jak i klientem, o tym jaką funkcję będzie pełnić zainstalowane "urządzenie" decyduje wyb�r specjalnego sterownika interfejsu: backendu(poza IPP) i konfiguracji.

Instalacja

Podstawowa część CUPS:

$ poldek -i cups cups-clients

Następnie instalujemy jeden lub więcej kontroler�w interfejs�w drukarki (protok�ł IPP nie wymaga backendu):

  • cups-backend-parallel - port r�wnoległy (parallel port)

  • cups-backend-serial - port szeregowy RS-232 (serial port)

  • cups-backend-usb - port szeregowy USB (usb printer)

  • cups-backend-smb - drukowanie zdalne w sieci SMB

W przypadku drukarek nie obsługujących PostScriptu konieczne będą dodatkowe pakiety:

$ poldek -i cups-filter-pstoraster ghostscript-esp

Do zdalnej administracji (za pomocą HTTPS), konieczny będzie program openssl:

$ poldek -i openssl-tools

Czas uruchomić demona:

$ /etc/rc.d/init.d/cups start

Zarządzanie drukarkami

Operacje takie jak dodawanie, czy konfigurowanie drukarek mogą być dokonywane na kilka sposob�w:

  • HTTP

    Popularnym sposobem jest konfiguracja przy pomocy przeglądarki internetowej, CUPS posiada wbudowany niewielki serwer WWW, z kt�rym łączymy się dowolną przeglądarką na adres serwera i port 631 np.:

    $ lynx localhost:631

    Z poziomu tej strony mamy dostęp do wielu opcji administracyjnych: konfiguracji drukarek, zarządzania klasami, zadaniami druku i innymi. Ten spos�b zarządzania systemem CUPS w niniejszej publikacji jest traktowany jako domyślny.

  • lpadmin

    lpadmin jest programem administracyjnym dostarczanym z CUPS-em, obsługiwany jest całkowicie z linii wiersza poleceń. Jest to narzędzie zaawansowane, przez co stosunkowo trudne w obsłudze, jego dokładny opis zawarto w dokumentacji.

  • Inne

    Dla CUPS powstały wygodne programy zarządzające przeznaczone działające w środowiskach GNOME i KDE. Szczeg�lnie pozytywnie przedstawia się system-config-printer™ - wygodna aplikacja, kt�rej układ opcji przypomina konfigurację przez WWW.

Dodanie drukarki

W tym rozdziale przedstawiono og�lny opis instalacji urządzenia, szczeg�łowe informacje umieszczono w rozdziałach: Szczeg�ły dodawania drukarki lokalnej i Szczeg�ły dodawania drukarki zdalnej.

Możemy użyć programu system-config-printer™ lub narzędzia dostępnego przez stronę WWW:

$ lynx localhost:631

następnie przechodzimy do opcji Managle Printers -> Add Printer.

Określamy nazwę drukarki oraz opcjonalnie komentarz i lokalizację, następnie wybieramy jeden z dostępnych na liście kontroler�w interfejs�w drukarki (backend). Na koniec wybieramy producenta i model drukarki.

System CUPS jest dostarczany z niewielką ilością sterownik�w drukarek, jednak nie należy się jednak martwić jeśli na liście nie odnajdziemy szukanego urządzenia. Coraz więcej producent�w dostarcza ze sprzętem pliki PPD (w CUPS są używane r�wnież dla drukarek niepostcriptowych), możemy także skorzystać z bazy Foomatic™ zawierającej ogromną liczbę sterownik�w.

Sterowniki Foomatic możemy zainstalować w postaci zbiorczego pakietu sterownik�w danego producenta. Przykładowo jeśli chcemy zainstalować sterowniki drukarek firmy Samsung to instalujemy pakiet cups-foomatic-db-Samsung. Możemy r�wnież pobrać pojedyncze pliki PPD z z witryny http://www.linuxprinting.org, po wyszukaniu modelu drukarki (Driver Listings) należy kliknąć link download PPD w celu pobrania sterownika. Plik wskazujemy przy dodawaniu drukarki lub kopiujemy go do katalogu /usr/share/cups/model i uruchamiamy na nowo demona cupsd:

# /etc/rc.d/init.d/cups restart

Po tej operacji przeprowadzamy normalną instalację drukarki. Możemy ich wiele zainstalować, to do kt�rej będą trafiać dokumenty zależy od tego, kt�rą z nich ustawimy jako domyślną.

Szczeg�ły dodawania drukarki lokalnej

Dodanie drukarki lokalnej dotyczy drukarek podłączonych bezpośrednio podłączonych do komputera, na kt�rym zainstalowany jest CUPS, w tym wypadku interesują nas interfejsy: Parallel, Serial i USB. Zanim zaczniemy proces konfiguracji, musimy sie upewnić, że są załadowane odpowiednie moduły jądra (w przeciwnym wypadku dany backend może być nieaktywny).

Drukarka podłączona do portu r�wnoległego będzie wymagała modułï¿½w lp, parport i parport_pc. Moduł lp dopisujemy do pliku /etc/modules, jeśli nie używamy udeva to pozostałe moduły także. Drukarki podłączane pod port LPT są dostępne za pomocą urządzeń /dev/lp*. W przypadku drukarek USB konieczny będzie moduł usblp oraz rzecz jasna moduł kontrolera USB, urządzenia te będą dostępne za pomocą /dev/usb/lp*. Więcej o modułach jądra i ich zarządzaniu odnajdziemy w „Moduły jądra”.

CUPS od wersji 1.3 wymaga zdefiniowania opcji Group w pliku /etc/cups/cupsd.conf, kt�ra wskazuje jaki użytkownik ma być używany dla uruchamiania zewnętrznych program�w - w tym backend�w. Jako że urządzenia w katalogu /dev mają grupę ustawioną na lp, taką też podamy jako wartość parametru:

Group lp

Dalszą instalację przeprowadzamy zgodnie z zaprezentowanym wcześniej opisem Dodanie drukarki.

Szczeg�ły dodawania drukarki zdalnej

  • IPP

    Aby CUPS było klientem IPP musimy dodać drukarkę z backendem IPP oraz podać prawidłowy URI zasobu, jako producenta wybieramy Raw, zaś jako model Raw Queue. URI powinno mieć następującą postać:

    ipp://{$serwer}/printers/{$drukarka}

    ($serwer to nazwa lub IP serwera druku, zaś $drukarka to nazwa drukarki). Adres taki może wyglądać następująco:

    ipp://10.0.0.3/printers/laserowa
  • SMB

    Jedyne co musimy zrobić to dodać drukarkę z użyciem odpowiedniego backendu - Windows Printer via SAMBA i podać prawidłowy URI, na koniec musimy wskazać sterownik danej drukarki. W przypadku system�w MS z serii 95/98/Me URI powinno mieć następującą postać:

    smb://{$serwer}/{$drukarka}

    ($serwer to nazwa lub IP serwera druku, zaś $drukarka to nazwa drukarki). Adres taki może wyglądać następująco:

    smb://wodzu/laserowa

    W przypadku system�w z serii NT (NT4, 2000, XP Professional) może być konieczne podanie konta użytkownika i hasła:

    smb://{$użytkownik}:{$hasło}@{$serwer}/{$drukarka}

    np.:

    smb://jasio:mojehasło@wodzu/laserowa

Konfiguracja serwera

Aby udostępnić w sieci zainstalowaną drukarkę, musimy odpowiednio skonfigurować demona cupsd, jego konfiguracja jest przechowywana w pliku /etc/cups/cupsd.conf.

Domyślnie CUPS pozwala jedynie na drukowanie lokalne, aby uzyskać dostęp z sieci musimy dokonać zmian w pliku konfiguracji. Należy odszukać sekcję oznaczoną znacznikami <Location /></Location>. Dostęp z innych maszyn konfigurujemy za pomocą opcji Allow From {$klient} ($klient to nazwa lub adres IP lub klasa adres�w, kt�rym udostępniamy drukarkę). Poniższy przykład przedstawia udostępnienie drukarek dla lokalnego interfejsu i maszyny o adresie 10.0.0.12.

<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 10.0.0.12
</Location>

Jeśli chcemy mieć możliwość zdalnej administracji za pośrednictwem HTTP/HTTPS powinniśmy dodatkowo ustawić dostęp (zgodnie z powyższymi wskaz�wkami) dla sekcji: /admin, /admin/conf.

  • IPP

    Protok�ł IPP jest używany domyślnie przez CUPS i nie wymaga żadnych dodatkowych przygotowań.

  • SMB

    W systemie musi być zainstalowany i działający pakiet Samba™. Aby systemy Microsoftu mogły "widzieć" drukarki CUPS należy dokonać modyfikacji w głï¿½wnym pliku konfiguracji Samby - /etc/samba/smb.conf. Należy usunąć z niego wszystkie opcje dotyczące druku z sekcji [global], zaś w ich miejsce wstawić poniższe linijki:

    printing = cups
    printcap name = cups

    Na koniec należy przygotować sekcję drukarek. Prosty przykład pliku konfiguracji pakietu Samba może wyglądać następująco:

    [global]
       netbios name = shilka
       workgroup = pod_cisami
       security = share
    
       printing = cups
       printcap name = cups
    
    [printers]
       comment = Drukarki
       printable = yes
       path = /var/spool/samba

    Jako, że Windows pre-formatuje dokumenty zanim wyśle je przez sieć do drukarki, musimy nauczyć CUPS'a odpowiednio takie pre-formatowane dokumenty obsługiwać. W tym celu musimy wyedytować plik /etc/cups/mime.convs i odkomentować w nim linijkę

    application/octet-stream        application/vnd.cups-raw        0       -
    

    w pliku /etc/cups/mime.types zaś, należy odkomentować linijkę

    application/octet-stream
    

    Po tych operacjach wymagany jest oczywiście restart usługi CUPS.

    # /etc/rc.d/init.d/cups restart

Przy tak skonfigurowanym serwerze drukarkę w MS Windows dodajemy standardowo, musimy jedynie samemu dostarczyć odpowiedni sterownik. Istnieje możliwość umieszczenia takiego sterownika na serwerze Samba™, wymaga to jednak dodatkowych operacji konfiguracyjnych. Więcej na ten temat odnajdziemy w dokumentacji Samby.

Zarządzanie kolejką druku

Zarządzanie wydrukami jest możliwe z poziomu przeglądarki internetowej, program�w dla X-Window oraz z poziomu linii wiersza poleceń. Z pośr�d tych ostatnich mamy do dyspozycji: lpstat, lpmove, cancel, lpq oraz lprm. Programy te znajdują się w pakiecie cups-clients.

Test drukarki i rozwiązywanie problem�w

Drukarka powinna działać od razu po zainstalowaniu, można to przetestować z poziomu panelu konfiguracji drukarki drukując stronę testową. W razie problem�w pierwszą rzeczą jaką należy zrobić to przejrzeć plik rejestrowania błęd�w (log): /var/log/cups/error_log. Jeśli ciągle nie możemy odnaleźć źr�dła problemu możemy spr�bować włączyć wysoki poziom raportowania błęd�w. Dokonujemy to przez edycję w pliku /etc/cups/cupsd.conf i przestawienie ustawienia opcji "LogLevel" z "info " na "debug" lub " debug2" np.:

LogLevel debug2

Kiedy rozwiążemy problem należy przywr�cić poprzedni poziom raportowania ze względu na szybki przyrost objętości log�w. Po każdej modyfikacji pliku konfiguracji należy przeładować demona:

# /etc/rc.d/init.d/cups restart

DHCPD - Dynamic Host Configuration Protocol Daemon

DHCP™ to protok�ł pozwalający urządzeniom pracującym w sieci LAN na pobieranie ich konfiguracji IP (adresu, maski podsieci, adresu rozgłoszeniowego itp.) z serwera. Ułatwia on administrację dużych i średnich sieci.

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, pozwalająca uruchomić usługę po zmianie zaledwie kilku wartości. Przedstawiona poniżej sekcja zawiera parametry dla określonej podsieci. Dla większej jasności w poniższym przykładzie użyto skr�conej wersji konfiguracji.

ddns-update-style               ad-hoc;
# Sekcja konfiguracji host�w z podsieci o podanym adresie i masce
subnet 192.168.0.0 netmask 255.255.255.0 {
 
        # domyślna brama sieciowa
        option routers                  192.168.0.1;

        # maska
        option subnet-mask              255.255.255.0;

        # nazwa domeny (FQDN)
        option domain-name              "domain.org";

        # adres serwera DNS (kolejne dodajemy po przecinku)
        option domain-name-servers      192.168.1.1;

        # zakres dzierżawionych adres�w IP (z włączoną obsługą protokołu BOOTP)
        range dynamic-bootp 192.168.0.128 192.168.0.255;
        
        # domyślny czas dzierżawy (w sekundach)
        default-lease-time 21600;
        
        # maksymalny czas dzierżawy (w sekundach)
        max-lease-time 43200;
}

Wewnątrz przedstawionej sekcji (ograniczonej nawiasami klamrowymi) umieszczane są opcje jakie zwykle podajemy przy statycznej konfiguracji interfejsu sieci. Powyższa konfiguracja będzie przydzielać komputerom dynamiczne adresy IP z zakresu 192.168.0.128 - 192.168.0.255 na okres 21600 sekund, jednak nie większy niż 43200 sekund.

I to już prawie koniec, teraz zostaje nam sprawdzenie pliku /etc/sysconfig/dhcpd . Znajdujemy w nim linijki:

# The  names of the network interfaces on which dhcpd should
# listen for broadcasts (separated by space)
DHCPD_INTERFACES=""

W cudzysłï¿½w wpisujemy nazwy interfejs�w na kt�rych będzie nasłuchiwał dhcpd (np. eth1). Po tej operacji wystarczy uruchomić lub zrestartować usługę.

Statyczne przypisanie konfiguracji

Aby komputery mogły za każdym razem uzyskać taką samą konfigurację, musimy dla każdego z nich dodać odpowiednie wpisy w pliku konfiguracji. Konfiguracje host�w umieszczamy wewnątrz przedstawionej powyżej sekcji konfiguracji podsieci (uwaga na nawiasy klamrowe).

host nazwa_hosta {
hardware ethernet 12:34:56:78:AB:CD;
fixed-address 192.168.0.20;
}

Poszczeg�lne komputery identyfikujemy za pomocą adres�w sprzętowych kart sieciowych (MAC). Powyższy przykład wymusza przydzielenie adresu IP 192.168.0.20 maszynie o MAC-u 12:34:56:78:AB:CD. Adresy MAC odczytamy za pomocą programu ip, lub iconfig, szczeg�ły na ten temat odnajdziemy w „Narzędzia sieciowe”.

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ęzła NetBIOS
option netbios-node-type 2;

Adres serwera czasu NTP:

option ntp-servers              192.168.1.1;

Uruchomienie

Serwer uruchamiamy następująco:

# /etc/rc.d/init.d/dhcpd start

Konfiguracja klienta

Szczeg�łowy opis konfiguracji klienta DHCP umieszczono w „Ethernet”. Jeśli zechcemy sprawdzić poprawność konfiguracji przydzielonej hostowi to wystarczy użyć programu ip, lub iconfig, szczeg�ły odnajdziemy w „Narzędzia sieciowe”.

Uwagi

W większości wypadk�w najlepszym wyborem będzie przypisywanie niezmiennych adres�w IP dla każdej z maszyn, pozwoli to zachować porządek i lepszą kontrolę nad siecią. Jest to absolutnie konieczne w wypadku serwer�w oraz router�w, jednak przy tego typu maszynach zaleca się zrezygnowanie z DHCP na korzyść statycznej konfiguracji.

Domyślnie logi demona są rejestrowane przez syslog-a z ustawionym źr�dłem (facility) na "daemon". Tego rodzaju komunikaty zwykle są zapisywane do pliku /var/log/daemon , dlatego tam właśnie powinniśmy szukać informacji jeśli wystąpią jakieś problemy.

Exim - Transport poczty elektronicznej (MTA)

Usługa MTA (ang. message transfer agent) jest odpowiedzialna za przesył m.in. e-mail między serwerami. Najpopularniejszymi przedstawicielami tego typu usług są: Sendmail™, Postfix™ czy opisany przez nas Exim™. Oto zalety jakie przemawiają za wybraniem Exim™-a jako naszego MTA:

  • Ponieważ Sendmail™ nie posiada nawet połowy jego funkcji

  • Autoryzacja w Exim™-ie zaimplementowana jest domyślnie

  • Wsp�łpracuje z bazami MySQL™ i z Postgres™-em, a także ze zwykłymi plikami tekstowymi

  • Tom Kistner napisał do Exim™ użyteczna łatkę, rozbudowywującą Exim™ o obsługę program�w antywirusowych, demona SpamAssasin™ (skanera antyspamowego) oraz wykrywania błęd�w MIME - dzięki temu nie potrzebujemy wielkich i zasobożernych program�w w perlu

  • Za to Tomasz Kojm napisał bardzo dobry program antywirusowy: Clam AntiVirus™ - darmowy, w dodatku rewelacyjnie wsp�łpracujący z Exiscanem

Podsumowując - Exim™ jest rewelacyjnym MTA. Jego możliwości konfiguracji pozwoliły mi na zbudowanie dosyć rozbudowanego serwera poczty obsługującego zar�wno konta lokalne jak i konta zapisane w bazie danych MySQL™. Dodatkowe możliwości to np. przeszukiwanie plik�w konfiguracyjnych serwera cvs™ w poszukiwaniu adres�w docelowych dla alias�w w domenie cvs.rulez.pl. O rzeczach takich jak klasyfikowanie maili czy są spamem czy nie już nawet nie wspomnę. W dodatku Exim™ jest całkiem bezpiecznym MTA (wersja 4.x wg. securityfocus jak narazie dorobiła się jednego błędu - w końcu jakaś cena musi być za te wodotryski). Zresztą konstrukcja omawianego MTA na początku doprowadzała mnie do szału, gdyż Exim™ nie może sobie poradzić z smtp-auth via PAM™ z racji braku uruchamiania autoryzacji z własnego uid/gid zamiast root ;-)

Instalacja

Instalacja pakietu jest prosta. Uruchamiamy program: poldek i wykonujemy:

poldek -i exim

Oczywiście zanim wykonamy zalecenie startu demona powinniśmy dokonać konfiguracji, kt�rą opisuje następny rozdział.

Budowa pliku konfiguracji

Wszelkich zmian w konfiguracji dokonujemy w pliku /etc/mail/exim.conf. Na początek wyjaśnimy jak zorganizowany jest plik konfiguracyjny, wygląda to mniej więcej tak:

# głï¿½wna sekcja ...

opcje i dyrektywy sekcji głï¿½wnej

begin sekcja1

opcje i dyrektywy sekcji1

begin sekcja3

...

Tak więc plik ten jest zbudowany z sekcji, kt�re rozpoczynają się słowem begin nazwa, z wyjątkiem sekcji głï¿½wnej, kt�ra jest na samym początku pliku i nie posiada swojego begina. Sekcje r�wnież nie mają żadnych słï¿½w kluczowych, kt�re by je zamykały - po prostu początek begin nowej sekcji oznacza zakończenie poprzedniej. I tak, standardowo mamy następujące sekcje:

  • głï¿½wna - odpowiedzialna za podstawowe ustawienia Exim

  • acl - listy kontroli dostępu, filtrowania, odrzucania i akceptowania poczty

  • routers - hm, najprościej jest to przetłumaczyć jako routery, czyli reguły kierowania wiadomości do odpowiednich transporter�w

  • transports - tutaj tworzymy sposoby doręczenia poczty

  • retry - ustawienia ponowień

  • rewrite - reguły do przepisywania nagłï¿½wk�w

  • authenticators - reguły do autoryzacji

Co to są te całe 'transportery' i 'routery'? Właściwie to serce Exima. Jeżeli Exim dostaje jakiegoś maila to najpierw puszcza go przez routery, kt�re można por�wnać do reguł ipchains/iptables - jeżeli mail załapie się na jakąś regułę (router) to jest przekazywany do transportu określonego przez ten router. Inaczej m�wiąc router w Eximie kieruje maila do odpowiedniego transportera. Transporter natomiast robi już z mailem co należy - doręcza go lokalnie, albo przekierowywuje gdzieś indziej albo odsyła do innego serwera. Wiem, że w tym momencie może wydawać się to skomplikowane, ale nie przejmujcie się, to tylko wiedza teoretyczna kt�ra na początku nie będzie wam potrzebna. Musiałem natomiast wam wytłumaczyć, że są sekcje i że musicie nauczyć się tego, iż jak napiszę 'dopisać w sekcji głï¿½wnej' to należy coś dopisać na początku pliku.

Podstawowa konfiguracja

Zanim zaczniemy konfigurację demona SMTP, musimy koniecznie dodać rekord MX do każdej strefy DNS obsługiwanej przez nasz serwer. Informacje na ten temat zawarto w „BIND - Serwer Nazw”.

Domeny lokalne to takie, kt�re Exim™ ma traktować jako 'swoje' domeny. Mail zaadresowany @jakas.domena.lokalna kt�ry dotrze do Exim™ zostanie dostarczony lokalnie. Domeny takie definiuje w dyrektywie domainlist local_domains. Standardowo, przyjmowana jest poczta wysyłana do domeny identycznej jak hostname serwera:

domainlist local_domains = @

Znak @ oznacza właśnie 'moja nazwa'. Aby dopisać kolejne domeny wystarczy dodać je do tej listy rozdzielając je dwukropkami:

domainlist local_domains = @ : domena.pl : baseciq.org : \
    /etc/mail/local_domains

Poza domena.pl, baseciq.org, Exim będzie teraz także akceptował domeny wypisane w pliku /etc/mail/local_domains. Domeny tam należy wpisywać w oddzielnych linijkach. Exim™ o tyle fajnie działa, że po dopisaniu ścieżki do pliku, wystarczy go raz zrestartować. Jakiekolwiek kombinacje w /etc/mail/local_domains nie będą wymagały restartu. Tak więc najwygodniej będzie dopisać do pliku konfiguracyjnego:

domainlist local_domains = @ : /etc/mail/local_domains

I po prostu powpisywać wszystkie domeny do /etc/mail/local_domains.

Domeny dla kt�rych mamy być zapasowym MX'em tworzy się bardzo łatwo. Linijkę pod domainlist local_domains jest domainlist relay_to_domain. Działa to w taki sam spos�b jak konfiguracja domen lokalnych, czyli, piszemy:

domainlist relay_to_domains = /etc/mail/relay_to_domains

Od teraz, Exim™ będzie akceptował każdą pocztę zaadresowaną do domen zawartych w pliku /etc/mail/relay_to_domains. A co z nią zrobi? Jak wiadomo, jeżeli domena ma kilka MX'�w, to Exim™ będzie starał się ją dostarczyć do serwera o najniższym priorytecie MX. Chyba że on ma najniższy, to wygeneruje błąd.

Relaying, czyli określenie kto może przez nasz serwer wysyłać pocztę. I tutaj, listę adres�w i host�w buduje się w podobny spos�b do local_domains i relay_to_domains. Wystarczy stworzyć listę o nazwie relay_from_hosts:

hostlist   relay_from_hosts = 127.0.0.1 : 192.168.0.0/16

Uwaga! Już w tym momencie możemy sprawdzić działania serwera. Wystarczy że przeładujemy demona i wyślemy e-mail do istniejącego konta użytkownika. Przy takiej konfiguracji poczta będzie docierała do skrzynek typu mbox.

Skrzynki pocztowe

Exim potrafi umieszczać pocztę zar�wno w skrzynkach typu mbox (pliki tekstowe w /var/mail/) jak i coraz popularniejszych skrzynkach typu Maildir (pliki przechowywanie w katalogu umieszczonym w katalogu domowym użytkownika). Ze względu na wsteczną zgodność Exim domyślnie używa tych pierwszych, aby używać Maildir-a wykonujemy następujące czynności:

W sekcji konfiguracji transporter�w odszukujemy opcję "local_delivery", tam wstawiamy znak komentarza przed opcją "file =" i dodajemy linijki:

  maildir_format = true
  directory=${home}/Mail/Maildir

Jak się łatwo domyślić druga z opcji wskazuje miejsce przechowywanie skrzynek. Po modyfikacji omawiana sekcja może wyglądać następująco:

local_delivery:
  driver = appendfile
#  file = /var/mail/$local_part
  delivery_date_add
  envelope_to_add
  return_path_add
  group = mail
  mode = 0660
  maildir_format = true
  directory=${home}/Mail/Maildir

Exim samodzielnie tworzy skrzynki pocztowe (oba rodzaje), wystarczy jedynie wysłać e-mail na konto użytkownika.

Możemy przekazać dostarczanie poczty do skrzynek programowi Procmail™. Wystarczy, że w sekcji router�w usuniemy znaki komentarza z kolejnych wierszy zaczynających się od "procmail:", podobnie postępujemy w sekcji transporter�w w miejscu zaczynającym się od wiersza "procmail_pipe:". Na koniec musimy jeszcze tylko umieścić plik konfiguracji Procmaila: .procmailrc w katalogu domowym użytkownika.

R�żne opcje

Czasami (czytaj: gdy mamy sieczkę w /etc/hosts) Exim™ zgłasza się nie jako serwer.domena.pl a jako sam 'serwer'. Jeżeli zmiana wpis�w w /etc/hosts nie pomaga, albo gdy chcemy aby nasze MTA przedstawiało się inaczej niż hostname maszyny na kt�rym stoi wystarczy ustawić (bądź dodać gdy jej nie ma) opcję primary_hostname w głï¿½wnej sekcji:

primary_hostname = serwer.domena.pl

W czasach zabawy z Sendmail™-em podawałem także spos�b na ograniczenie bannera, kt�ry się pojawiał po telnecie na port 25. W Exim™-ie nie jest to skomplikowane i służy do tego opcja smtp_banner w sekcji głï¿½wnej:

smtp_banner = $primary_hostname ESMTP $tod_full

Spowoduje to wyświetlanie następującego tekstu jako bannera:

220 serwer.domena.pl ESMTP Wed, 23 Jul 2003 15:18:04
			+0200

Chyba nie muszę tłumaczyć, że aby usunąć datę należy wywalić $tod_full?

Teraz zajmiemy się aliasami. Plik z aliasami powinien znajdować się w /etc/mail/aliases. Jest to czysty plik tekstowy, wprowadzone w nim zmiany wymagają wydania polecenia newaliases. Restart demona nie jest konieczny. Jeżeli jednak nie macie pewności czy tam powinien być plik z aliasami, w sekcji routers odszukajcie ciąg system_aliases: - jest to definicja routera odpowiedzialnego za rozwiązywanie alias�w. Tam też, w linijce data widać ścieżkę do pliku z aliasami:

system_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup{$local_part}lsearch{/etc/mail/aliases}}
  file_transport = address_file
  pipe_transport = address_pipe

Autoryzacja SMTP

Jeżeli z naszego SMTP korzystają użytkownicy spoza sieci lokalnej przyda nam się autoryzacja. Sprawa w Exim™-ie jest dosyć zawiła. Ot�ż Exim™ zbyt wcześnie zrzuca uprawnienia root, tak że opisywany na wielu stronach opis zrobienia autoryzacji via PAM najczęściej nie działa. Z pomocą przyjdzie nam pakiet cyrus-sasl™, a dokładniej pwcheck daemon™ (w PLD cyrus-sasl-saslauthd™). W sekcji AUTHENTICATORS wpisujemy następujące linijki (lub kasujemy komentarze #)

plain:
  driver = plaintext
  public_name = PLAIN
  server_prompts = :
  server_condition = ${if saslauthd{{$1}{$3}}{1}{0}}
  # powyższy wpis zadziała przy saslauthd -a shadow, jeżeli
  # uruchomicie saslauthd -a pam (np. PLD) wpiszcie wtedy:
  # server_condition = ${if saslauthd{{$1}{$3}{smtp}}{1}{0}}
  server_set_id = $2
      
login:
  driver = plaintext
  public_name = LOGIN
  server_prompts = "Username:: : Password::"
  server_condition = ${if saslauthd{{$1}{$2}}{1}{0}}
  # powyższy wpis zadziała przy saslauthd -a shadow, jeżeli
  # uruchomicie saslauthd -a pam (np. PLD) wpiszcie wtedy:
  # server_condition = ${if saslauthd{{$1}{$2}{smtp}}{1}{0}}
  server_set_id = $1

Ostatnią rzeczą przy saslauthd™ (uruchomionym z opcją -a pam) jaką trzeba stworzyć (lub sprawdzić czy jest) to plik /etc/pam.d/smtp:

#%PAM-1.0
#
# example PAM file for saslauthd - place it as /etc/pam.d/
# (e.g. /etc/pam.d/smtp if you want to use saslauthd for SMTP
# AUTH)
#
auth	required	/lib/security/pam_listfile.so
item=user sense=deny file=/etc/security/blacklist
onerr=succeed
auth	required	/lib/security/pam_unix.so
auth	required	/lib/security/pam_tally.so
file=/var/log/faillog onerr=succeed no_magic_root
auth	required	/lib/security/pam_nologin.so
account	required	/lib/security/pam_tally.so deny=0
file=/var/log/faillog onerr=succeed no_magic_root
account	required	/lib/security/pam_unix.so
session	required	/lib/security/pam_unix.so

Pozostaje mi tylko wam przypomnieć, że przed sprawdzaniem autoryzacji należy także uruchomić pwcheck saslauthd

# echo 'pwcheck_method:saslauthd' > /etc/sasl/smtpd.conf

Syfrowanie SSL

Exim™ sobie bardzo dobrze radzi z połączeniami szyfrowanymi przy użyciu protokołu SSL (wspiera metodę STARTTLS). Wystarczy wygenerować odpowiednie certyfikaty:

$ openssl genrsa -out /etc/mail/exim.key 1024
Generating RSA private key, 1024 bit long modulus
.......++++++
..............................++++++
e is 65537 (0x10001)
$ openssl req -new -x509 -days 365 -key /etc/mail/exim.key -out \
    /etc/mail/exim.crt
Using configuration from /var/lib/openssl/openssl.cnf
You are about to be asked to enter information that will be
incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Mazowsze
Locality Name (eg, city) []:Warsaw
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Baseciq Ltd.
Organizational Unit Name (eg, section) []:Baseciq's Mail Server
Common Name (eg, YOUR name) []:viper.baseciq.org
Email Address []:[email protected]

Oczywiście na pytania odpowiadajcie podając swoje dane... Po takim zabiegu do sekcji głï¿½wnej Exim™ należy dopisać:

tls_certificate = /etc/mail/exim.crt
tls_privatekey = /etc/mail/exim.key
tls_advertise_hosts = *

Po tym zabiegu i restarcie Exim™ powinien bez problemu komunikować się po SSL, co zresztą widać w logach:

2003-09-07 01:48:36 19vmnC-0006EG-27 <=	[email protected] H=plug.atn.pl
[217.8.186.28] U=exim P=esmtp X=TLSv1:DES-CBC3-SHA:168 S=2909
id=ebb601c374e2$80dace00$cab00a12@fv

Dawniej Exim™ m�gł nasłuchiwać porcie 465 jedynie przy użyciu inetd, w nowszych wersjach wystraczy że ustawimy odpowiednie opcje:

daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465

Warto by było, żeby także pop3d™ obsługiwał SSL natywnie ssl (bez jakichś stunneli i innych wynalazk�w). Ja osobiście polecam demonik tpop3d™, kt�rego konfiguracja jest bardzo prosta. Instalujemy tpop3d:

# poldek -i tpop3d

a następnie wystarczy że standardowe listen-address w pliku /etc/tpop3d.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ędzie obsługiwał SSL po wykonaniu komendy STLS (np. TheBat™ potrafi tak zacząć sesję SSL) a na porcie 995 będzie od razu używał SSL (TheBat™, Outlook Express™).

Quota

Generalnie nie ma sensu męczyć kernela i filesystemu żeby pilnował quoty na pocztę. Szczeg�lnie gdy MTA samo sobie może z tym poradzić. Służy do tego parametr quota w konfiguracji transport�w. I tak, w najprostszy spos�b można lokalną quotę per user ustawić w konfiguracji transportu local_delivery (odpowiedzialnego za lokalne dostarczanie poczty):

local_delivery:
	driver = appendfile
	file = /var/mail/$local_part
	delivery_date_add
	envelope_to_add
	return_path_add
	# A tutaj dodajemy quotę w wysokości 20MB:
	quota = 20M

Proste, prawda? Tak naprawdę ma to zastosowanie w systemach poczty wirtualnej gdzie możemy w bazie danych przechowywać quotę użytkownika i można skonstruować zapytanie SQL do odpytania ile miejsca ma dany użytkownik. Ale jeżeli nie możecie sobie poradzić z quotą systemową, możecie zamiast quota = 20M dopisać coś takiego:

quota =	${lookup{$local_part}lsearch{/etc/mail/quota.conf}{$value}{0M}}

Od tego momentu w pliku /etc/mail/quota.conf możesz trzymać wielkości skrzynek dla poszczeg�lnych użytkownik�w. Jeżeli ktoś nie zostanie tam wymieniony, to nie będzie miał żadnych limit�w na swoją skrzynkę pocztową. Plik taki powinien wyglądać mniej więcej tak:

lukasz:	100M
kflis:	5M
ania:	20M

I tak oto ja mam 100mb na pocztę, kubuś tylko 5, a siostra 20 MB ;) Podobnym parametrem każdego transportera jest message_size_limit. Wystarczy wpisać:

message_size_limit = 10M

Podobnie jak powyżej, można zrobić to na bazie pliku - wystarczy zamiast /etc/mail/quota.conf użyć np. /etc/mail/size_limits.conf ;-) BTW. na końcu linijki z quotą, gdzie mamy '0M' możemy wstawić np. '20M'. Wtedy, osoby nie dopisane do /etc/mail/quota.conf będą miały 20MB limitu (limit domyślny).

Oczywiście jak na Exim™ przystało, od quoty jest więcej bajerk�w. Chyba najbardziej pożądanym będzie opcja quota_warn_message. Jest to nic innego jak mail ostrzegający usera o tym, że skrzynka jest zapchana po same brzegi. Zanim jednak polecisz to wdrażać, zainteresuj się jak to działa. Ot�ż po dostarczeniu każdego maila Exim™ będzie sprawdzał czy został przekroczony konkretny pr�g (podany w megabajtach lub w procentowo). Jeżeli tak, wygeneruje on odpowiednią wiadomość. I tak, dodajemy do molestowanego przez nas local_delivery następujące opcje:

quota_warn_message = "\
Content-Type: text/plain; charset=ISO-8859-2\n\
To: $local_part@$domain\n\
Reply-to: Administratorzy sieci <[email protected]>\n\
Subject: Informacja o Twoim koncie pocztowym\n\
\n\
*** Ta wiadomość została wygenerowana automatycznie ***\n\
\n\
Uprzejmie informujemy, iż skrzynka pocztowa została zapełniona w 90%\n\
swojej pojemności. W przypadku 100% nie będą dostarczane\n\
do Ciebie nowe wiadomości. Opr�żnij skrzynkę pocztową ze starych\n\
wiadomości.\n"
	quota_warn_threshold = 90%

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ęc Clamav

# poldek -i clamav clamav-database

Po zainstalowaniu Clamav™ musimy zmodyfikować plik konfiguracyjny /etc/mail/exim.conf w sekcji głï¿½wnej ustawiamy typ antywirusa:

av_scanner = clamd:/var/lib/clamav/clamd.socket

Po dwukropku ustawiamy ścieżkę do socketu antywirusa (w przypadku clamav™ - zajrzyj do pliku /etc/clamav.conf). W miejscu gdzie wpisaliśmy clamd, możemy wpisać także i inny typ skanera. Niestety, żaden z innych obsługiwanych (sophie™, kavdaemon™, drweb™) skaner�w nie jest darmowy. Jeżeli natomiast wolicie mks™, to możecie użyć takiej opcji:

av_scanner = mksd

Kolejnym etapem, jest stworzenie reguł do filtrowania maili z wirusami. W tym celu, dopisujemy do sekcji głï¿½wnej pliku konfiguracyjnego Exim™:

acl_smtp_data = exiscan

Teraz zaczynamy grzebanie w sekcji acl, gdzie dopisujemy (najlepiej na samym początku):

exiscan:
deny	message = Znaleziono wirusa. \n\
	Virus or other harmful content found: $malware_name
	delay = 1s
	malware = *

warn	message = X-MIME-Warning: Serious MIME defect detected ($demime_reason)
	demime = *
	condition = ${if >{$demime_errorlevel}{2}{1}{0}}

warn	message = Message-ID: <E$message_id@$primary_hostname>
	condition = ${if !def:h_Message-ID: {1}}
accept

Pierwszy wpis odpowiednio skanuje cały e-mail i jeśli zostanie znaleziony wirus lub inna zawartość uznana za szkodliwą przez skaner antywirusowy to taki mail jest odrzucany oraz informacja o znalezionym wirusie zostaje wyświetlona z jednosekudnowym op�źnieniem. Te op�źnienie ma na celu unikniecia ewentualnego zapchania serwera poczty poprzez uciążliwego użytkownika co chwila pr�bujacego wysłać pocztę uznaną za szkodliwą. Kolejny warunek spowoduje iż maile z uszkodzonymi nagłï¿½wkami MIME zostaną odpowiednio oznaczone (czyli, także, duże maile podzielone na części, o czym niestety autor exiscana (aut. łatki dla Exim™-a) nie wspomina, dlatego ich nie odrzucamy). Ostatni warunek ma na celu wyeliminowanie sytuacji gdy jakaś wiadomość, kt�ra dotarła do naszego serwera poczty nie posiada unikalnego identyfikatora. W takim przypadku generujemy i dopisujemy własny Message-ID.

Aby skaner av m�gł sprawdzać pocztę Exima musi zostać dodany do grupy exim. Dokonujemy tego poleceniem groupadd albo edytując po prostu plik /etc/group:

[...]
			
exim:x:79:clamav,mail

[...]

Kolejny feature jaki daje exiscan to odrzucanie plik�w z załącznikiem o określonym rozszerzeniu. W tym celu dopisujemy zaraz po exiscan: następujące linijki:

deny	message = Niedozwolone zalaczniki. \n\
	Blacklisted file extension ($found_extension) detected.
	condition = ${if match \
		{${lc:$mime_filename}} \
		{\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.vbs)$\N} \
		{1}{0}}
		delay = 1s
	log_message = Blacklisted file extension ($found_extension) detected.

Powyższa reg�łka ma na celu zablokowanie możliwości wysyłanie wiadomości, kt�rych załącznikami są pliki: *.exe, *.pif, *.bat, *.scr, *.lnk oraz *.vbs. Teraz, jeżeli nie chcemy aby skanowane były maile pochodzące od danych adres�w ip dopisujemy (jeżeli chcemy aby Ci ludzie też nie mogli wysyłać plik�w *.com, to po poprzedniej regułce, jeżeli oni będą mogli, to przed):

accept	hosts = /etc/mail/dontscan

Teraz, w pliku /etc/mail/dontscan umieszczamy adresy IP bądź klasy adresowe z kt�rych poczta ma nie być skanowana.

Jeżeli natomiast chcecie, by poczta przeskanowana u was w przypadku gdy wr�ci w jakiś spos�b z powrotem do naszego serwera (np. poprzez alias na innym serwerze) nie była ponownie skanowana, możecie zacząć oznaczać pocztę odpowiednimi znacznikami oraz przyjąć że poczta z tym znacznikiem nie była ponownie skanowana. Tak więc, przed końcowym accept dodajemy:

warn	message = X-Scan-Signature: ${hmac{md5}{atutajwpiszhaslo} \
		{$body_linecount}}

Exim™ spowoduje dodanie zaszyfrowanego ciągu znak�w składającego się z hasła i wielkości maila. Dzięki temu ktoś kto nie pozna waszego hasła nie będzie m�gł sfałszować informacji o tym że mail został już zeskanowany. Teraz, aby taka poczta przechodziła bez skanowania, na samym początku po exiscan: dopisujemy:

accept	condition = ${if eq {${hmac{md5}{atutajwpiszhaslo} \
	{$body_linecount}}}{$h_X-Scan-Signature:} {1}{0}}

Ustawienie takich regułek z tym samym hasłem na kilku serwerach spowoduje że gdy mail będzie przechodził przez kilka z nich, tylko jeden będzie musiał go przeskanować.

Walka ze spamem

Zjawisko spamu jest niezwykle uciążliwe. W niekt�rych Stanach w USA traktowane jest w kategoriach kryminalnych. Zapewne znasz jego definicję lub przynajmniej wiesz jak spam wygląda. W skr�cie jest to wiadomość e-mail, kt�rej nie chciałeś otrzymać. Exim posiada wbudowaną obsługę filtra antyspamowego opartego na technice dnsbl, może wykorzystwać zar�wno czarne listy jak i białe listy nadawc�w oraz adres�w serwer�w.

Kolejnym bardzo prostym ale niezwykle skutecznym w walce ze spamem jest maksymalne op�źnianie procesu komunikacji pomiedzy klientem wysyłającym poczte a serwerem MTA. Nie tylko odcina to część robot�w spamerskich ale także zmiejsza ryzyko przeciążenia serwera.

Przejdźmy do konfiguracji. Wszystkie te wpisy powinny znaleść się w sekcji ACL CONFIGURATION w obrębie acl_check_rcpt:.

Wymuszamy helo/ehlo

deny	message = Wymagane RFC HELO/EHLO zanim wyslesz wiadomosc. \n\
	RFCs mandate HELO/EHLO before mail can be sent.
	condition = ${if or{{!def:sender_helo_name}{eq{$sender_helo_name}{}}}{yes}{no}}
	delay = 5s
	log_message = No HELO/EHLO.

Definujemy własne białe listy. Jeśli nasz zestaw reg�ł okazałby się zbyt restrycyjny możemy oznaczyć aby pewne domeny były traktowane "ulgowo".

accept	domain = +local_domains
	condition = /etc/mail/whitelist	

Sprawdzamy czy serwer nadawcy figuruje na listach RBL

deny	message = Serwer nadawcy figuruje na liscie RBL \n\
	Server $sender_host_address is at RBL: \
	$dnslist_domain\n$dnslist_text
	delay = 5s
	dnslists = blackholes.mail-abuse.org : \
	dialup.mail-abuse.org : \
	dnsbl.njabl.org : \
	sbl.spamhaus.org : \
	list.dsbl.org : \
	cbl.abuseat.org : \
	relays.ordb.org : \
	bl.spamcop.net
	hosts = ! +relay_from_hosts
	log_message = Listed at RBL list: $dnslist_domain\n$dnslist_text.

deny	message = Serwer nadawcy figuruje na liscie RBL \n\
	Server $sender_host_address is at RBL: $dnslist_domain.
	hosts = ! +relay_from_hosts
	dnslists = bogusmx.frc-ignorant.org/$sender_host_name : \
	dns.rfc-ignorant.org/$sender_host_name
	delay = 5s
	log_message = Listed at RFC-Ignorant.

Teraz dokonujemy weryfikacji podanego HELO

HELO nie może być postaci localhost.localhomain

deny	message = Niepoprawne HELO. \n\
	$sender_helo_name is a stupid HELO.
	hosts = !+relay_from_hosts
	condition = ${if match {$sender_helo_name}{\N^(127\.0\.0\.1|localhost(\.localdomain)?)$\N}{yes}{no}}
	delay = 5s
	log_message = Stupid localhost HELO.

HELO musi być nazwą domenową (hostname)

deny	message = HELO musi byc nazwa domenowa. \n\
	HELO must be hostname.
	hosts = !+relay_from_hosts
	condition = ${if !match {$sender_helo_name}\
		{\N.*[A-Za-z].*\N}{yes}{no}}
	delay = 5s
	log_message = Helo must be hostname.

Według RFC821 HELO musi być pełną nazwą domenową (Fully Qualifield Domain Name).

deny	message = HELO nie wyglada poprawnie. Zobacz RFC 821. \n\
	HELO must contain a Fully Qualifield Domain Name. See RFC821.
	hosts = !+relay_from_hosts
	condition = ${if !match{$sender_helo_name} \
		{\N.*[A-Za-z].*\..*[A-Za-z].*\N}{yes}{no}}
	delay = 5s
	log_message = HELO is not a FQDN.

Eliminujemy sytuację gdy nadawca jako HELO podaje serwer z naszej domeny np. domena.pl

deny	message = Wykryto zafalszowane RFC HELO. \n\
	Fake HELO detected: $sender_helo_name.
	condition = ${if eq{$sender_helo_name}\
		{\N^(.*\.)?domena\.pl$\N}{yes}{no}}
	hosts = !+relay_from_hosts
	delay = 5s
	log_message = Fake HELO from host $sender_helo_name.

Kolejne dwa warunki są bardzo restrycyjnymi testami. Formalnie przez RFC nie jest wymagane aby domena miała zdefiniowany rekord MX. Lecz każdy szanujący się administrator poważnej domeny zawsze zadba aby odpowiednie serwery figurowaly jako MX. RFC zaleca aby jeśli już jest zdefiniowany rekord MX dla domeny, to aby był on postaci FQDN

deny	message = Brak zdefiniowanego rekordu MX dla domeny. \n\
	No MX envelope sender domain $sender_address_domain.
	hosts = ! : !+relay_from_hosts
	senders = ! :
	condition = ${if eq{${lookup dnsdb{mx=$sender_address_domain}{$value}fail}}{fail}{yes}{no}}
	delay = 5s
	log_message = No MX record in DNS.

deny	message = Rekord MX w DNS musi byc postaci FQDN. \n\
	MX for transport sender domain $sender_address_domain must be FQDN.
	hosts = ! : !+relay_from_hosts
	senders = ! :
	condition = ${if !match {${lookup dnsdb{mx=$sender_address_domain}{$value}fail}}\
		{\N.*[A-Za-z].*\..*[A-Za-z].*\N}{yes}{no}}
	delay = 5s
	log_message = MX record is not a FQDN.

Kr�tkie wyjaśnienie wykorzystanych opcji

  • deny message

    Określamy jaka informacja zwrotna pojawi się u nadawcy.

  • delay

    Op�źnienie po jakim komunikat określnony jako message zostanie zwr�cony nadawcy.

  • dnslist

    Lista system�w z bazami blokującymi serwery open relay. Wymienione tutaj powinny skutecznie powstrzymać spam. Jeżeli nadal dostajesz niechciane maile, wykonaj następujące czynności. Sprawdź w nagłï¿½wku wiadomości adres IP serwera, kt�ry przekazał Twojemu MTA pocztę. Wejdź na stronę: www.ordb.org/lookup/ i wpisz adres IP do sprawdzenia. Jeżeli wyszukiwanie w bazie ordb.org nie przyniesie rezultat�w, wejdź tutaj: http://www.ordb.org/lookup/rbls/?host=w.x.y.z, gdzie zamiast symbolicznego zapisu podajemy adres IP. Skonstruowane w ten spos�b zapytanie dokona sprawdzenia, czy dany adres IP figuruje na innych czarnych listach. Pozytywny rezultat testu powinien zwr�cić w odpowiedzi listę system�w RBL (Relay Black List). Można ją wykorzystać dopisując do naszej regułki. Uważaj na system block.blars.org figuruje w nim smtp.wp.pl.

  • hosts

    Podana lista serwer�w. W powyższym przykładzie jest to !+relay_from_hosts co oznacza, że cała reg�łka dotyczy połączeń z wszystkich serwer�w za wyjątkiem tych zdefiniowanych jako relay_from_hosts.

  • log_message

    Informacja jaka zostanie zapisana w dzienniku systemowym exima czyli /var/log/exim/main.log

Teraz należałoby włączyć wszystkie usługi jakie zainstalowaliśmy

# /etc/rc.d/init.d/exim start
# /etc/rc.d/init.d/saslauthd start
# /etc/rc.d/init.d/clamd start
# /etc/rc.d/init.d/tpop3d start
# /etc/rc.d/init.d/rc-inetd restart

Na koniec przykładowy zapis z dziennika systemowego Exima

2004-03-04 21:05:24 H=(sina.com) [218.79.119.92] F=< [email protected] > \
    rejected RCPT < [email protected] >: \
    Serwer 218.79.119.92 figuruje na czarnej liście dnsbl.sorbs.net

Obsługa wielu domen w Eximie

Jeżeli czytasz tą część opisu konfiguracji exima stanąłeś przed problemem obsługi przez niego więcej niż jednej domeny. Exim jest jak najbardziej do tego przystosowany. Poniżej zamieszczam listing z pliku /etc/mail/exim.conf

virtusertable_alias:
   driver = redirect
   allow_fail
   allow_defer
   data = ${lookup{$local_part@$domain}lsearch{/etc/mail/virtusertable}}
   file_transport = address_file
   pipe_transport = address_pipe
virtusertable_defaultalias:
   driver = redirect
   allow_fail
   allow_defer
   data = ${lookup{@$domain}lsearch{/etc/mail/virtusertable}}
   file_transport = address_file
   pipe_transport = address_pipe

Powyższy przykład umieść umieść na początku sekcji routers. Dla przypomnienia dodam, że początek sekcji oznacza się słowem kluczowym begin.

Jak słusznie zauważyłeś, wpisy z virtusertable do złudzenia przypominają te z system_aliases. Działa to właściwie w ten sam spos�b. Podczas odbierania przesyłki exim czyta linijkę data. Ma w niej zdefiniowane, że ma szukać na podstawie local_partczyli to co jest przed znakiem @ oraz domain czyli części domenowej adresu. Wartości kt�re zostaną podstawione zamiast tych zmiennych zostaną por�wnane z plikiem /etc/mail/virtusertable. Jeżeli wynik por�wnania wypadnie pomyślnie poczta zostanie dostarczona do odpowiedniego użytkownika, jeżeli zaś nie, odpytane zostaną aliasy systemowe. Jeżeli i tam użytkownik nie zostanie odnaleziony, zostanie wysłana wiadomość z odpowiednią informacją do nadawcy z komunikatem błędu. Część defaultalias jest prawie identyczna. R�żnica tkwi jedynie w opcji data. Sprawdzana jest jedynie część domenowa. Poniżej zamieszczam listing z pliku /etc/mail/virtusertable

[email protected]		user
[email protected]	user2
@jakasdomena.pl		user3

Jak widać budowa pliku jest prosta i czytelna. User3 będzie otrzymywał całą pocztę z domeny jakasdomena.pl. Po tych zabiegach exim powinien być już przygotowany do obsługi wielu domen. Musisz pamiętać aby go zrestartować po dokonaniu modyfikacji jego pliku konfiguracyjnego.

# /etc/rc.d/init.d/exim restart

Automatyczna odpowiedź - Vacations

W przypadku, gdy masz zamiar gdzieś wyjechać na dłużej i nie będziesz miał dostępu do poczty, dobrym pomysłem jest ustawienie automagicznej odpowiedzi dla ludzi, kt�rzy do Ciebie piszą. Tu z pomocą przychodzi nam opcja w Eximie™.

Na początku edytujemy plik /etc/mail/exim.conf i w sekcji routers przed localuser router dodajemy następujące linijki:

user_vacation:
     driver = accept
     check_local_user
     # nie odpisujemy na błędy bądź listy dyskusyjne
     condition = "${if or {{match {$h_precedence:} {(?i)junk|bulk|list}} {eq {$sender_address} {}}} {no} {yes}}"
     no_expn
     require_files = /var/mail/vacation/${local_part}/vacation.msg  
     # nie odpisujemy na maile od list dyskusyjnych oraz na powiadomienia o błędach
     senders = " ! ^.*-request@.*:\
		 ! ^.*@list*.*:\ 
                 ! ^owner-.*@.*:\
                 ! ^postmaster@.*:\
                 ! ^listmaster@.*:\
                 ! ^mailer-daemon@.*\
                 ! ^root@.*"
     transport = vacation_reply
     unseen
     user = ${local_part}
     no_verify

Następnie tworzymy katalog /var/mail/vacation , w kt�rym będą się znajdować katalogi zawierające nazwę użytkownika oraz pliki z informacjami o powodzie jego nieobecności. Pow�d taki wpisujemy do pliku vacation.msg znajdującego się w /var/mail/vacation/NAZWA_UŻYTKOWNIKA/. Gdy już mamy te ustawienia za sobą w sekcji transport dodajemy następujące linijki:

vacation_reply:
     driver = autoreply
     file = /var/mail/vacation/$local_part/vacation.msg
     file_expand
     from = System Automatycznej Odpowiedzi <$original_local_part@$original_domain>
     log = /var/mail/vacation/$local_part/vacation.log
     once = /var/mail/vacation/$local_part/vacation.db
     once_repeat = 7d
     subject = ${if def:h_Subject: {Re: ${quote:${escape:${length_50:$h_Subject:}}} (autoreply)} {Informacja} }
     text = "\
     Witaj $h_from\n\n\
     Ta wiadomość została wygenerowana automatycznie\n\
     Tekst poniżej zawiera informację od użytkownika:\n\
     ====================================================\n\n\
     "
     to = "$sender_address"

Ważną częścią tutaj jest opcja once_repeat, kt�ra sprawdza jak często nadawcy będą otrzymywać odpowiedzi. W tej konfiguracji jest to co 7dni.

To wszystko, teraz musimy jeszcze zrestartować Exima™ i możemy jechać na urlop.

# /etc/rc.d/init.d/exim restart

Heimdal - Implementacja protokołu Kerberos

Heimdal jest implementacją nowoczesnego sieciowego protokołu uwierzytelniania użytkownik�w Kerberos. Użytkownik po standardowym zalogowaniu za pomocą hasła na czas trwania sesji otrzymuje specjalny unikalny klucz (w terminologii kerberos'a nazywany biletem (ang. ticket)) za pomocą kt�rego może uzyskać dostęp do innych usług w sieci już bez konieczności dodatkowego podawania hasła.

Każda sieć posiada wydzielony serwer Kerberos, zwany KDC (Key Distibution Center) kt�rego zadaniem jest zarządzanie centralną bazą kluczy (m.in. wydawanie nowych kluczy oraz odpowiadanie na pytania dotyczące ich autentyczności).

Uwaga:Kerberos nie zapewnia dystrybucji bazy użytkownik�w w sieci - do tego celu najlepiej użyć usługi NIS.

Instalacja i konfiguracja KDC

Za pomocą poldka instalujemy serwer i narzędzia heimdal'a:

# poldek -i heimdal heimdal-server

Edytujemy plik konfiguracyjny /etc/heimdal/krb5.conf. Plik ten używany jest przez biblioteki heimdal'a i powinien być obecny na wszystkich maszynach, na kt�rych będziemy używali kerberos'a (na serwerze i klientach)

[libdefaults]
    default_realm = FOO.PL
    clockskew = 300
    v4_instance_resolve = false

[realms]
    FOO.PL = {
        kdc = kdc.foo.pl
        kpasswd_server = kdc.foo.pl
        admin_server = kdc.foo.pl
    }
[domain_realm]
    .foo.pl = FOO.PL
    foo.pl = FOO.PL

default_realm określa domyślną domenę kerberos'a. Zamiast FOO.PL wpisujemy wybraną nazwę domeny, typowo jest to pisana wielkimi literami nazwa naszej domeny dns. kdc.foo.pl zastępujemy adresem serwera, na kt�rym uruchomiony jest serwer KDC heimdal'a.

clockskew określa maksymalną r�żnicę czasu (w sekundach) pomiędzy serwerem a klientami (jeżeli r�żnica czasu będzie większa niż podana, kerberos odm�wi wsp�łpracy) dlatego dobrze w sieci uruchomić także usługę synchronizacji czasu ntp.

Sekcja [realms] definiuje domeny kerberosa. Można tu wymienić kilka niezależnych domen, określając dla nich lokalizację serwer�w kerberosa. kdc.foo.pl zastępujemy oczywiście nazwą hosta na kt�rym będzie uruchomiona usługa kdc.

Ostatnia sekcja [domain_realm]określa mapowanie nazw dns na domeny kerberosa. Na tej podstawie heimdal wie na podstawie nazwy dns hosta w jakiej domenie kerberos'a się znajduje. Nazwa dns zaczynająca się od kropki pasuje do dowolnej poddomeny podanej domeny.

uruchamiamy usługę dystrybucji kluczy KDC:

# service heimdal start

Do zarządzania domeną kerberos'a używamy narzędzia kadmin. Inicjalizujemy domenę i dodajemy użytkownika, w tym przypadku mrk (zostawiając domyślnie proponowane wartości):

# kadmin -l
kadmin>init FOO.PL
kadmin>add mrk

Opcja -l uruchamia kadmin w trybie lokalnym, program musi być uruchomiony z konta root. Możemy także dopisać do pliku /etc/heimdal/krb5.acl:

[email protected] all

dając użytkownikowi [email protected] prawo do administracji kerberosem - w tym przypadku kadmin wołamy z parametrem -p użytkownik

Logujemy się w systemie na koncie zwykłego użytkownika (w naszym przykładzie mrk) i pr�bujemy się zalogować do domeny kerberosa:

$ kinit

kinit domyślnie pr�buje uzyskać bilet dla zalogowanego użytkownika, można to zmienić podając użytkownika jako parametr.

Sprawdzamy, czy kerberos wystawił nam bilet (ticket):

$ klist
Credentials cache: FILE:/tmp/krb5cc_1000_pSN1Vv
        Principal: [email protected]

  Issued           Expires          Principal         
Apr 13 11:02:40  Apr 13 21:02:40  krbtgt/[email protected]

Logowanie do systemu

Instalujemy moduł pam-pam_krb5.

# poldek -i pam-pam_krb5

Zmieniamy wybrane pliki /etc/pam.d/*, dodając dodatkowo sprawdzanie hasła za pomocą nowego modułu:

Przykładowo /etc/pam.d/login wykorzystywany przez program login poprawiamy tak:

#zmieniamy linijkę

auth    required    pam_unix.so

na:

auth    sufficient  pam_unix.so
auth    required    pam_krb5.so use_first_pass

i dodajemy:

session optional pam_krb5.so

W ten spos�b możemy się zalogować przy użyciu standardowej metody sprawdzania haseł w /etc/shadow (pam_unix.so) lub w domenie kerberos'a (pam_krb5.so)

Analogicznie poprawiamy inne pliki, np. /etc/pam.d/gdm, /etc/pam.d/xscreensaver

Po tych poprawkach powinniśmy m�c zalogować się już podając hasło kerberos'a. Po zalogowaniu możemy jeszcze za pomocą polecenia klist sprawdzić czy kerberos wystawił nam bilet:

$ klist

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ępowania w przypadku innych usług obsługujących uwierzytelnianie kerberos jest podobny, Każda skerberyzowana usługa musi mieć utworzone własne konto w domenie Kerberos'a (tzw. service account). Z kontem tym związany jest klucz, kt�ry musi być znany zar�wno kdc i usłudze. Konto usługi przeważnie jest w postaci: nazwa_usługi/hostname, przy czym hostname musi być pełną nazwą hosta wraz z domeną, czyli tym, co zwraca hostname:

$ hostname --fqdn

Ponadto należy zadbać o poprawne odwzorowanie tej nazwy w DNS - opis jak właściwie ustawić hostname znajduje się podstawach konfiguracji sieci

SSH

Tworzymy konto dla daemona sshd. Konto musi miec nazwę w postaci: host/hostname

# kadmin -l
kadmin> add -r host/host.foo.pl

Parametr -r powoduje, że do konta zostanie przypisany losowy klucz (hasło). Klucz ten jest zapisany jako jeden z atrybut�w użytkownika w bazie użytkownik�w domeny Kerberos'a (dokładnie w /var/lib/heimdal/heimdal.db). By sshd miał także dostęp do tego klucza robimy:

kadmin> ext_keytab host/host.foo.pl

Powyższe polecenie zapisuje klucz związany z kontem usługi do tzw. tablicy kluczy (keytab), z kt�rej to tablicy sshd może go pobrać. Klucz zostaje zapisany w domyślnej tablicy kluczy znajdującej się w pliku /etc/heimdal/krb5.keytab. Z tej tablicy kluczy domyślnie korzystają usługi używające kerberos'a.

By sshd uwierzytelniał użytkownik�w za pomocą kerberos'a do pliku /etc/ssh/sshd_config dodajemy jeszcze linijki:

GSSAPIAuthentication yes

do pliku konfiguracyjnego klienta /etc/ssh/ssh_config dopisujemy:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

Opcja GSSAPIDelegateCredentials określa, czy bilet kerberosa ma być przekazany na maszynę, na kt�rą się logujemy.

Po restarcie sshd, jeżeli mamy wystawiony bilet kerberosa powinniśmy m�c zalogować się przez ssh na nasz serwer bez pytania o hasło.

Powyższy opis dotyczy sytuacji, gdy serwer sshd znajduje się na tej samej maszynie co kdc. Jeżeli sshd jest na innej maszynie w sieci, musimy wyeksportować klucz do innej tablicy kluczy:

kadmin> ext_keytab host/host.foo.pl sshd.keytab

a następnie przenieść plik sshd.keytab na maszynę na kt�rej mamy uruchomione sshd. Trzeba jeszcze poinformować sshd, że ma szukać klucza w innej lokalizacji niż standardowe krb5.keytab. W pliku /etc/sysconfig/sshd dopisujemy:

export KRB5_KTNAME=/etc/heimdal/sshd.keytab

Cyrus IMAP

Doinstalowujemy plugin gssapi do sasl'a

# poldek -i cyrus-sasl-gssapi

Tworzymy konto dla cyrrus'a. Konto ma mieć nazwę w postaci imap/hostname:

kadmin> add -r imap/host.foo.pl

exportujemy klucz do tablicy kluczy:

kadmin> ext_keytab /etc/heimdal/cyrus.keytab

Wybieramy inną niż domyślna tablicę kluczy, ponieważ cyrus imap pracuje z uprawnieniami użytkownika 'cyrus' i jako taki nie ma prawa czytania domyślnej tablicy /etc/heimdal/krb5.keytab.

Dajemy dostęp do tablicy kluczy użytkownikowi cyrus:

chown cyrus.root /etc/heimdal/cyrus.keytab
chmod 660 /etc/heimdal/cyrus.keytab

Na koniec musimy jeszcze poinformować cyrus'a gdzie ma szukać klucza. W pliku /etc/sysconfig/cyrus-imapd dodajemy:

export KRB5_KTNAME=/etc/heimdal/cyrus.keytab

Przykładowe programy klienckie, kt�re potrafią użyć protokołu kerberos do uwierzytelnienia użytkownika to evolution i mutt

Apache

Doinstalowujemy moduł apache'a obsługujący uwierzytelnianie za pomocą kerberos'a:

# poldek -i apache-mod_auth_kerb

Dodajemy konto usługi w domenie kerberos'a:

kadmin> add -r HTTP/hostname

hostname zastępując nazwą hosta na kt�rym uruchomiony jest apache.

Exportujemy klucz, zmieniamy uprawnienia:

kadmin> ext HTTP/hostname /etc/heimdal/httpd.keytab
# chown http.root /etc/heimdal/httpd.keytab
# chmod 660 /etc/heimdal/httpd.keytab

lokalizację tablicy kluczy możemy tak jak wcześniej podać apache'owi globalnie przez zmienną środowiskową, dopisując do /etc/sysconfig/apache:

export KRB5_KTNAME=/etc/heimdal/httpd.keytab

Można to także zrobić za pomocą dyrektywy Krb5Keytab w pliku konfiguracyjnym apache'a

Przykładowa konfiguracja dostępu może wyglądać następująco:

<Directory "/home/users/mrk/public_html/kerberos">
        AuthType Kerberos
        AuthName "Kerberos Login"
        KrbMethodNegotiate on
        KrbMethodK5Passwd on
        KrbAuthRealms FOO.PL
        Krb5Keytab /etc/heimdal/httpd.keytab
        require user [email protected]
</Directory>

Pr�ba dostępu z prawdopodobnie zakończy się pytaniem o hasło. Naszym celem jest jednak dostęp do serwisu www'a za pomocą biletu kerberos'a, bez zbędnego podawania hasła. W firefox'ie wpisujemy url: about:config, i szukamy pozycji:

network.negotiate-auth.delegation-uris
network.negotiate-auth.trusted-uris

Określają one url'e, dla kt�rych przeglądarka ma zastosować rozszerzenie negotiate. Wpisujemy tam nazwy dns naszego serwisu www oddzielone przecinkami. Teraz, jeśli mamy aktualny bilet (sprawdzamy przez klist), powinniśmy zostać wpuszczeni bez pytania o hasło. Rozszerzenie negotiate opr�cz firefox'a powinny obsługiwać także mozilla i epiphany - o innych mi nie wiadomo.

Jabber 2 - Serwer typu Instant Messaging

Wstęp

Protok�ł jabber służy głï¿½wnie do przesyłania wiadomości typu Instant Messaging (czyli działa podobnie jak inne znane komunikatory np. icq, tlen, gadu-gadu itp.). Zaletą jabbera jest to, że jest otwarty, zapewnia darmową i pełną infrastrukturę (serwery, a także klienty) dla os�b prywatnych i użytkownik�w komercyjnych. Charakteryzuje się także dużym bezpieczeństwem - rozmowy, a także komunikacja między serwerami może być szyfrowana.

W PLD jest kilka serwer�w obsługujących komunikację protokołu XMPP, kt�ry jest fundamentem Jabbera - zatwierdzonym przez IETF w formie RFC (RFC od 3920 do 3923). Używany przez wielu ISP jabberd™ w wersji 1.4, zdobywający popularność ejaberd™ czy opisywany poniżej jabberd™ w wersji 2.0.

Opisana zostanie podstawowa konfiguracja, umożliwiająca połączenia szyfrowane, a do składowania danych przez jabberd2™ wykorzystamy silnik SQL Postgresql™.

Instalacja

Pakiet jabberd2™ instalujemy za pomocą poldka:

poldek> install jabber-common jabberd

Oczywiście, jeżeli do tej pory nie mamy zainstalowanego Postgresql™ należy zainstalować go także. Należy pamiętać, że jabberd2™ może wsp�łpracować także z MySQL™, sqlite3™, a także znacznie prostrzą wersją bazy db™.

Konfiguracja DNS i rekord�w SRV

Zanim zaczniemy, musimy stworzyć domenę, kt�ra jednoznacznie będzie wskazywała na maszynę Jabbera. Dodamy także rekordy SRV, kt�re służą do zapytań domenowych przez demony Jabbera.

Przykład konfiguracji zostanie przedstawiony dla serwera nazw Bind™. Zmian dokonujemy w odpowiednim pliku stref w katalogu /var/lib/named/M.

; Jabber
jabber                  IN      A       10.1.1.1 ;Tu wpisujemy IP naszej domeny
_jabber._tcp.jabber             IN SRV 20 0 5269 domena.org.
_xmpp-server._tcp.jabber        IN SRV 20 0 5269 domena.org.
_xmpp-client._tcp.jabber        IN SRV 20 0 5222 domena.org.

Oczywiście nie możemy zapomnieć o zmianie rekordu serial w strefie domeny i restarcie demona named

Konfiguracja port�w (jeżeli korzystamy z firewall-a)

W przypadku wykorzystwania zap�r ogniowych w systemie powinniśmy otworzyć porty tcp dla następujących port�w:

  • 5222 - Dla komunikacji klienckiej (połączenie nieszyfrowane)

  • 5223 - Dla komunikacji klienckiej (połączenie szyfrowane SSL)

  • 5269 - Dla komunikacji między serwerami Jabbera

  • 5347 - Dla komunikacji między serwerami Jabbera, wykorzystany przez dodatkowe transporty (np. transport GG)

Pamiętać należy, że powyższe porty są ustalone umownie i w plikach konfiguracyjnych demona Jabber, a także rekordach SRV możemy je zmienić (np. dla portu klienckiego ustalić port 80) - jednak zaleca się pozostawić proponowane wyżej porty.

Oczywiście, jeżeli nie chcemy aby nasz serwer był widoczny na zewnątrz naszej sieci (np. jest przeznaczony tylko dla wewnętrzej sieci intranetowej) nie otwieramy portu przeznaczonego do komunikacji między serwerami (u nas to porty 5269 i 5347).

Podstawowa konfiguracja Jabberd2

Możemy wreszcie skonfigurować wstępnie usługę jabberd2™. Wszystkie pliki konfiguracyjne znajdują się w katalogu /etc/jabber.

W pliku /etc/jabber/c2s.xml w okolicy tagu "local" dodajemy naszą domenę:

<!-- Local network configuration -->
  <local>
  <!-- Who we identify ourselves as. This should correspond
       to the ID (host) that the session manager thinks it is. You can
       specify more than one to support virtual hosts, as long as you
       have additional session manager instances on the network to
       handle those hosts. The realm attribute specifies the auth/reg
       or SASL authentication realm for the host. If the attribute is
       not specified, the realm will be selected by the SASL
       mechanism, or will be the same as the ID itself. Be aware that
       users are assigned to a realm, not a host, so two hosts in the
       same realm will have the same users.
       If no realm is specified, it will be set to be the same as the
       ID. -->
   <id>jabber.domena.org</id>

W pliku /etc/jabber/sm.xml w pierwszych linijkach także dodajemy naszą domenę:

<sm>
  <!-- Our ID on the network. Users will have this as the domain part of
       their JID. If you want your server to be accessible from other
       Jabber servers, this ID must be resolvable by DNS.s
       (default: localhost) -->
   <id>jabber.domena.org</id>

Jeżeli chcemy, aby nasz serwer komunikował się z innymi serwerami w pliku /etc/jabber/jabberd.cfg kasujemy "#" w linijce z "s2s":

# After sm and c2s are configured to use a fully qualified domain name
# and proper SRV records are set in DNS uncoment this to enable
# communication
# with other Jabber servers
s2s         /etc/jabber/s2s.xml

Podstawowa konfiguracja jest już zrobiona. Domyślne ustawienie tzw. "storage" czyli sposobu trzymania przez jabbera informacji o użytkownikach jest zrobione w PLD w db™. Przy małej ilości użytkownik�w jest to wystarczający spos�b. Jednak przy większej ich ilości, bardziej praktyczne jest trzymanie tych danych w bazie SQL.

Konfiguracja dla SQL (Postgresql)

Przy poprawnie działającym postgresie, z uprawnionego dla niego użytkownika tworzymy bazę jabberd2

$ createdb -U postgres jabberd2

Następnie przypisujemy do tej bazy użytkownika jabberd2 i ustalamy dla niego hasło i opcje dostępu do bazy:

$ createuser -P -U postgres jabberd2
Enter password for user "jabberd2":
Enter it again:
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER

Teraz musimy wypełnić nowoutworzoną bazę odpowiednimi tabelami i polami. Z katalogu /usr/share/doc/jabberd-2* należy rozpakować (najlepiej do katalogu użytkownika, kt�ry może działać na bazie postgresa) plik db-setup.pgsql.gz. Po rozpakowaniu przechodzimy do katalogu, gdzie został rozpakowany plik db-setup.pgsql i wykonujemy:

$ psql -U jabberd2 jabberd2
jabberd2=>\i db-setup.pgsql

Baza postgresa jest gotowa. Połączenie z bazą będzie odbywać się po localhost, tak więc musimy zadbać o to, żeby postgres umożliwiał takie połączenie

Została nam jeszcze konfiguracja w plikach jabbera.

W pliku /etc/jabber/sm.xml szukamy sekcji "storage" i zmieniamy na:

  <!-- Storage database configuration -->
  <storage>
  <!-- By default, we use the MySQL driver for all storage -->
  <driver>pgsql</driver>

Dla porządku dodamy, że zamiast pgsql, możemy także wykorzytać: mysql, ldap, sqlite (w zależności od mechanizmu jaki wybraliśmy).

W tym samym pliku szukamy następnie sekcji "pgsql" aby w odpowiednim miejscu wpisać hasło dostępu do bazy jabberd2. Możemy tam także zmienić spos�b dostępu:

    <!-- PostgreSQL driver configuration -->
    <pgsql>
      <!-- Database server host and port -->
      <host>localhost</host>
      <port>5432</port>
     
      <!-- Database name -->
      <dbname>jabberd2</dbname>

      <!-- Database username and password -->
      <user>jabberd2</user>
      <pass>tu_wpisujemy_hasło_do_bazy</pass>

Podobne zmiany wykonujemy w pliku /etc/jabber/c2s.xml. Umożliwiają one autentykacje użytkownik�w jabbera:

  <!-- Authentication/registration database configuration -->
  <authreg>
   <!-- Backend module to use -->
   <module>pgsql</module>

I dalej w tym samym pliku (sekcja "pgsql")

    <!-- PostgreSQL module configuration -->
    <pgsql>
      <!-- Database server host and port -->
      <host>localhost</host>
      <port>5432</port>

      <!-- Database name -->
      <dbname>jabberd2</dbname>

      <!-- Database username and password -->
      <user>jabberd2</user>
      <pass>tu_wpisujemy_hasło_do_bazy</pass>
      </pgsql>

Po zrestartowaniu demona jabberd możemy się już cieszyć bardziej zaawansowaną funkcjonalnością naszego komunikatora.

Szyfrowanie

Przed konfiguracją samego jabbera, musimy sprawdzić czy mamy pakiet openssl™ i wygenerować klucz:

# openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem

sam parametr -days 3650 możemy ustawić na kr�tszy lub dłuższy (oznacza on długość ważności certyfikatu - w naszym przypadku 10 lat).

Po wykonaniu powyższego polecenia i wpisaniu odpowiedzi na zadane pytania (zwr�ćmy tylko uwagę, abyśmy w polu Common Name wpisali naszą domenę, obsługiwaną przez serwer jabbera) usuniemy hasło z klucza prywatnego:

# openssl rsa -in privkey.pem -out privkey.pem

Następnie połączymy oba klucze w jeden plik i skasujemy klucz prywatny:

# cat privkey.pem >> server.pem
# rm privkey.pem

Zmieniamy nazwę naszego certyfikatu (dla porządku), przenosimy w odpowiednie miejsce i nadajemy prawa:

# mv server.pem /var/lib/openssl/certs/jabber.pem
# chown root:jabber /var/lib/openssl/certs/jabber.pem
# chmod 640 /var/lib/openssl/certs/jabber.pem

Została nam jeszcze konfiguracja Jabbera. W pliku /etc/jabber/c2s.xml znajdujemy tag "ssl-port" i odkomentujemy go:

    <!-- Older versions of jabberd support encrypted client connections
    via an additional listening socket on port 5223. If you want
    this (required to allow pre-STARTTLS clients to do SSL),
    uncomment this -->
  <ssl-port>5223</ssl-port>
		 </local>

Zdejmujemy komentarz także z tagu "require-starttls" (kilka linijek wyżej):

    <!-- Require STARTTLS. If this is enabled, clients must do STARTTLS
    before they can authenticate. Until the stream is encrypted,
    all packets will be dropped. -->
  <require-starttls/>

Teraz w każdym z pięciu plik�w konfiguracyjnych znajdujących się w /etc/jabber tj. router.xml, sm.xml, resolver.xml, s2s.xml, c2s.xml znajdujemy zakomentowany ciąg wskazujący na nasz certyfikat:

<!--
<pemfile>/etc/jabber/server.pem</pemfile>
-->

Kasujemy komentarze (czyli <!-- i -->) i wpisujemy odpowiednią scieżkę do naszego certyfikatu:

<pemfile>/var/lib/openssl/certs/jabber.pem</pemfile>

Kolejny restart demona jabber i możemy cieszyć się połączeniami szyfrowanymi.

Zakończenie

Opisane powyżej sposoby konfiguracji nie wyczerpują oczywiście wszystkich aspekt�w. Zachęcamy do odwiedzenia strony z oryginalną dokumentacją jabbera. Mimo, że niekt�rym może sprawić problem język angielski, to podane przykłady w jasny spos�b omawiają także zaawansowane zagadnienia.

MySQL - System Zarządzania Relacyjnymi Bazami Danych (ang. RDBMS)

Co to jest MySQL™?

MySQL™ jest Systemem Zarządzania Relacyjnymi Bazami Danych. Znany i ceniony jest przede wszystkim ze względu na swoją niebywałą wydajność i szybkość działania. Świetnie nadaje się do obsługi projekt�w internetowych, ale nie tylko - z powodzeniem używany jest r�wnież w wielkich projektach informatycznych organizacji, takich jak chociażby NASA. Przeciwnicy MySQL'a często m�wią, jak to bardzo brakuje mu wielu ficzer�w, kt�re posiadają prawdziwe, duże systemy baz danych. Ze swojego doświadczenia wiem, że część z tych ludzi nawet nie rozr�żnia wersji systemu, kt�re oferuje nam firma MySQL AB (producent MySQL).

Og�lne cechy MySQL

  • Napisany w C i C++ (wydajność!).

  • API dla wielu język�w programowania: C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, Tcl.

  • Pełna wielowątkowość, korzystająca z wątk�w kernela. Oznacza to, że MySQL będzie pracował na maszynie wieloprocesorowej, jeśli tylko taką posiadasz.

  • Opcjonalna obsługa transakcji.

  • B-drzewa z kompresowanymi indeksami. To wam się przyda, jakbyście mieli wieeeelkie bazy ;) Wystarczy powiedzieć, że znacząco wpływa na czas wyszukiwania i pobierania danych (wierszy) z bazy.

  • Istnieje możliwość "osadzenia" (ang. embed) serwera MySQL w aplikacji, kt�rą piszemy. Jeśli ktoś potrzebuje funkcjonalności systemu baz danych, a niekoniecznie chce się bawić w klient-serwer, to czemu nie?

  • Duża liczba typ�w danych w kolumnach. Liczby, ciągi znakowe, obiekty binarne (BLOB), data & czas, typy wyliczeniowe, zestawy. Na uwagę zasługuje fakt, że w MySQL możemy daną kolumnę dostosować do pewnej wielkości danych, kt�re zamierzamy w niej przechowywać (np. TINYINT, a nie INT), tym samym uzyskujemy większą wydajność i mniejsze zużycie pamięci (r�wnież dyskowej). Istnieje możliwość definiowania niekt�rych typ�w danych jako narodowych (r�żne standardy kodowania chociażby).

  • Obsługa klauzul agregujących i grupujących SQL.

  • Złączenia zewnętrzne (LEFT & RIGHT).

  • Komenda SHOW pozwalająca przeglądać informacje na temat baz, tabel i indeks�w. Komenda EXPLAIN opisująca pracę optymalizatora zapytań.

  • Bardzo prosty (z punktu widzenia administratora) system zabezpieczeń. Wszystkie hasła są szyfrowane.

  • Połączenia z serwerem przez: TCP/IP, ODBC, JDBC.

  • Lokalizacja (w sensie językowym) serwera. Komunikaty m.in. po polsku.

Instalacja

Instalację oprogramowania przeprowadzimy oczywiście z pomocą naszego poldka. Logujemy się jako root, bądź używamy polecenia sudo, jeżeli mieliśmy je skonfigurowane do tego celu. Pierwszą rzeczą, kt�rą będziemy musieli zrobić, jest ściągnięcie i zainstalowanie odpowiednich pakiet�w z repozytorium PLD. Można zrobić to używając zar�wno trybu wsadowego, jak i interaktywnego. Podam oba sposoby, wybierz sobie ten, kt�ry bardziej Ci odpowiada :) (osobiście wolę tryb interaktywny, ze względu na tab-completion).

Najpierw uruchamiamy poldka. Można podać mu flagę -n, kt�ra oznacza źr�dło, z kt�rego zamierzamy ściągać pakiety. Jeśli nie podamy tej flagi, w�wczas poldek skorzysta z pierwszego źr�dła wpisanego do pliku /etc/poldek.conf. Ja korzystam ze słowackiego serwera firmy Bentel Ltd., ale to nie ma znaczenia.

Instalacja w trybie wsadowym

W trybie wsadowym poldka, instalacja wygląda następująco:

# poldek -n bentel -i mysql mysql-client mysql-libs

Instalacja w trybie interaktywnym

W trybie interaktywnym poldka, instalacja wygląda tak:

# poldek -n bentel
Wczytywanie ftp://spirit.bentel.sk/mirrors/PLD/[...]/packages.dir.gz...
Przeczytano 5116 pakiet�w
Wczytywanie /root/.poldek-cache/packages.dir.dbcache.var.lib.rpm.gz...
Przeczytano 450 pakiet�w

Witaj w poldkowym trybie interaktywnym. Wpisz "help" aby otrzymać pomoc.

poldek>

Teraz przystępujemy do instalacji pakiet�w MySQL:

poldek> install mysql mysql-client mysql-libs

poldek sam zadba o spełnienie wymaganych zależności.

Konfiguracja MySQL

Żeby m�c sprawnie (i bezpiecznie) używać naszego świeżo zainstalowanego serwera, musimy go odpowiedno skonfigurować.

Otworzymy naszym ulubionym edytorem tekstu plik konfiguracyjny demona MySQL. W przypadku użycia edytora Vim wydajemy następującą komendę:

# vim /etc/mysql/clusters.conf

Jeżeli nie zamierzamy zmieniać lokacji, w kt�rej będzie u nas pracował MySQL, to po prostu odkomentujmy linijkę z MYSQL_DB_CLUSTERS, a jeżeli zamierzamy umieścić serwer MySQL w innym miejscu, to należy tą linijkę odkomentować, ale dodatkowo zmienić ścieżkę.

# standard setting
MYSQL_DB_CLUSTERS="/var/lib/mysql"

Upewniamy się, że jesteśmy zalogowani na konsoli jako root i wydajemy polecenie:

# /etc/rc.d/init.d/mysql init

Polecenie to będzie nam potrzebne tylko przy pierwszym uruchomieniu serwera - służy ono zainicjalizowaniu klastra baz danych. Powiedzmy, że nasz katalog jest "formatowany", ok? ;) Jeżeli pojawiłby wam się błąd, m�wiący o duplikacie wpisu localhost-mysql dla klucza 1 - możecie go zignorować.j

Teraz możemy przystąpić już do edycji właściwiego pliku konfiguracyjnego RDBMS. Używając naszego ulubionego edytora otwieramy plik /var/lib/mysql/mysqld.conf

# vim /var/lib/mysql/mysqld.conf

Teraz możemy przystąpić do jego edycji. Pierwszą grupą opcji, na jaką trafiamy jest:

# This section must be the first!
[mysqld]
datadir     = /var/lib/mysql/mysqldb/db
pid-file    = /var/lib/mysql/mysqldb/mysql.pid
port        = 3306
socket      = /var/lib/mysql/mysqldb/mysql.sock
user        = mysql

datadir to oczywiście katalog, w kt�rym składowane będą nasze bazy. Można zostawić tak jak jest.

user to użytkownik "pod kt�rym" będzie działał nasz serwer, w sensie - uruchomienie serwera wygląda tak, jakby to ten użytkownik, reprezentowany przez zmienną user go uruchomił (proces należy do niego). Można zmienić, chociaż nie polecam. Nie zalecane jest wykorzystanie do tego użytkownika root!

To co nas natomiast bardzo interesuje, z dw�ch względ�w, to opcja port. Chodzi o dwa przypadki:

  • Chcemy umożliwić dostęp do naszego serwera baz danych z zewnątrz, a admin naszej sieci "łaskawie" przekierował nam jakiś port z bramki na nasz komputer, ale niestety nie jest to port 3306, z kt�rego standardowo korzysta MySQL. Edytujemy sobie opcje port w ten spos�b, żeby wskazywała na ten, kt�ry mamy dostępny.

  • Mamy maszynę z zewnętrznym IP (taką, do kt�rej można się podłączyć z Internetu), nie blokowaliśmy jednak dostępu do MySQL, ale chcielibyśmy podnieść choć troszeczkę poziom bezpieczeństwa i udostępnić serwer MySQL na innym porcie. Wybieramy i jakiś i wpisujemy go jako wartość opcji port.

# Don't allow connections over the network by default
skip-networking	

Jeżeli chcemy zablokować dostęp do serwera MySQL z zewnątrz (z sieci), to... nie robimy nic. A jeśli chcemy umożliwić innym komputerom łączenie się z naszym serwerem, to należy wykomentować (dodać #) linijkę z skip-networking.

Gdyby nam się kiedyś coś popsuło (zapomnieliśmy hasła, nie możemy dostać się do bazy), to przyda się odkomentowanie tej opcji:

# Emergency option. Use only if you really need this.
#skip-grant-tables

Przydatną rzeczą (ale w sumie tylko, jeśli zamierzamy udostępniać bazy na zewnątrz), będzie włączenie logowania połączeń i zapytań (zwalnia pracę serwera). Dodam, że można oczywiście zmienić standardową ścieżkę, do kt�rej zapisywane są logi.

# Log connections and queries. It slows down MySQL so 
# it's disabled by default
# log        = /var/log/mysql/log

Opcje z grupy set-variable wpływają bezpośrednio na pracę i wydajność serwera, nie będę się więc w nie zagłębiał. To trochę trudniejszy temat. Jak ktoś chce bardzo zoptymalizować pracę swojego serwera, to polecam lekturę dokumentacji MySQL. Przydatna jest r�wnież znajomość zagadnień relacyjnych baz danych i SQL'a. Przykładowo zerkniemy na jedną zmienną:

#set-variable = max_connections=100

Odkomentowanie tej linijki pozwoli nam na ustawienie maksymalnej liczby połączeń, kt�re nasz MySQL będzie m�gł przyjąć i obsłużyć w danej chwili. Wszystko zależy od tego, w jakim celu używamy naszego RDBMS - należy postawić sobie pytanie - "ile os�b może chcieć podłączyć się do mojego serwera w jednej chwili i ile takich połączeń przypada średnio na jedną osobę?". Odpowiedź wpisujemy w zmienną max_connections. Innym pytaniem mogłoby być "czy skrypty obsługujące moje strony www korzystają ze stałych (persistent) połączeń?"

Ponieważ "Polacy nie gęsi i sw�j język mają" odkomentujemy jeszcze jedną linijkę w pliku konfiguracyjnym, aby włączyć polskie komunikaty:

# Language
language   = polish

W tej chwili nasz serwer powinien być już skonfigurowany do pracy. Upewniamy się, że jesteśmy zalogowani na konsoli jako root i wydajemy polecenie:

# /etc/rc.d/init.d/mysql start

Wywołanie tego skryptu startowego spowoduje uruchomienie demona MySQL w systemie. Upewnijmy się jeszcze, że nasz serwer baz danych rzeczywiście "wstał":

# /etc/rc.d/init.d/mysql status
MySQL cluster /var/lib/mysql: running

Jak widać na załączonym obrazku serwer działa. Ponieważ w tej chwili jest zainstalowany w spos�b domyślny i dlatego mało bezpieczny, należy ustawić jakieś hasło dla użytkownika mysql:

# mysqladmin -u mysql -S /var/lib/mysql/mysqldb/mysql.sock password 'naszehaslo'

Po opcji -S podajemy scieżkę do pliku mysql.sock, kt�ry powinien znajdować się w katalogu, w kt�rym umieściliśmy MySQL.

Demon MySQL

Demon MySQL standardowo startuje wraz z systemem, ale przydaje się znać dwie komendy. Aby włączyć lub wyłączyć serwer, będąc zalogowanym jako root, bądź używając komendy sudo, wydajemy polecenie:

# /etc/rc.d/init.d/mysql start | stop

wstawiając oczywiście opcje start lub stop, w zależności od tego, co chcemy zrobić.

mysqladmin

mysqladmin jest narzędziem, za pomocą kt�rego możemy tworzyć i usuwać bazy oraz przeładowywać konfigurację. Nie będziemy go używać do wyłączania serwera, bo od tego jest skrypt om�wiony powyżej. Narzędzie wywołuje się poleceniem mysqladmin, a flagi i argumenty (opcje) polecenia służą do wykonywania określonych zadań. Ponieważ wcześniej zmieniliśmy hasło dla użytkownika mysql, winniśmy przy każdym poleceniu dodać -u mysql i -p na końcu (aby klient zapytał nas o hasło), np tak dla komendy status:

# mysqladmin -u mysql status -p
Enter password:
Uptime: 6720  Threads: 1  Questions: 1  Slow queries: 0  Opens: 6 \
Flush tables: 1 Open tables: 0  Queries per second avg: 0.000

Kilka przydatnych komend:

  • create nazwabazy - tworzy nową bazę danych o nazwie nazwabazy.

  • drop nazwabazy - usuwa bazę danych o nazwie nazwabazy

  • flush-privileges albo reload - obie opcje robią to samo - przeładowują tablice uprawnień. Powinniśmy wykonać przeładowanie zawsze, gdy dodamy np nowego użytkownika do jakiejś bazy, ponieważ do czasu przeładowania takie konto jest nieaktywne.

mysqldump

mysqldump to program, służący do "zrzucania" danych - czyli do robienia kopii zapasowych. Polecenie to jest przydatne w przypadku wykonywania kopii zapasowych podczas aktualizacji MySQL czy też przenoszenia danych na inny serwer.

Kilka przydatnych opcji:

  • --databases baza1 baza2... - zrzuca dane z baz, kt�rych nazwy podaliśmy w liście oddzielonymi spacjami.

  • --all-databases - to samo co wyżej ale dla wszystkich bazy.

  • --add-drop-table - dodaje DROP TABLE do skrypt�w tworzących tabele z backup-u (jak będziemy przywracać dane). Przydatne, kiedy np chcemy przywr�cić już istniejącą tabelę. Spowoduje to najpierw jej usunięcie, a następnie utworzenie od nowa z danych, kt�re mieliśmy w kopii zapasowej. Og�lnie, żeby uniknąć ewentualnych problem�w z duplikatami wierszy, itp. warto tą opcję włączyć.

  • --no-create-info - w kopii nie zostanie zawarta informacja o tworzeniu tabel (nazwy tabel, typy p�l, indeksy itp.). Przydatne, jeżeli chcemy zrobić kopię tylko danych, a nie całej struktury bazy.

  • --no-data - Ta opcja pozwala zapisać samą informację o strukturze bazy i tabel, nie zapisuje natomiast danych.

  • --opt nazwabazy - tworzy kopię bazy nazwabazy wraz z rozszerzonymi informacjami MySQL, blokowaniem tabel, itd. Chyba najczęściej stosowana opcja przy robieniu kopii zapasowych.

Należy pamiętać, że wynik polecenia mysqldump należy przekierować (>) do jakiegoś pliku. Podam może kilka przykład�w użycia tego programu. Zrzucenie zawartości bazy baza1 do pliku baza1_bkp.sql:

# mysqldump -u mysql --databases baza1 > baza1_bkp.sql -p

Stworzenie kopii zapasowej struktury bazy (bez danych) baza2 i zapisanie jej w pliku baza2_str.sql:

# mysqldump -u mysql --databases --no-data baza2 > baza2_str.sql -p

Niezwykle przydatną opcją jest --opt om�wiona wcześniej. Polecam jej stosowanie do wykonywania kopii całej bazy, włącznie ze strukturą tabel i samymi danymi. Aby stworzyć pełną kopię zapasową bazy baza1 i zapisać ją w pliku baza1_kopia.sql:

# mysqldump -u mysql --opt baza1 > baza1_kopia.sql -p

Przywracanie baz wykonanych poleceniem mysqldump wygląda tak:

# mysql -u mysql baza1 < baza1_kopia.sql -p

Inna metoda (w sumie r�żniąca się zapisem):

# mysql -u mysql -e 'source /sciezka_do_pliku/baza1_kopia.sql' baza1 -p

phpMyAdmin

TODO

NFS - Network File System

NFS™ jest to usługa pozwalająca udostępniać zasoby dyskowe komputerom w sieci. Serwer udostępnia katalog(i) klientom, kt�rzy mogą je podmontować i działać jak na lokalnym systemie plik�w. Ponadto można z niego uruchamiać stacje bezdyskowe lub tworzyć rozproszone systemy plik�w.

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ę portmap, a następnie nfs (dokładnie w tej kolejności). Teraz możemy przejść do konfiguracji udziałï¿½w sieciowych. Do podstawowej pracy serwera nie ma potrzeby konfigurowania czegokolwiek, w pozostałych wypadkach należy przyjrzeć się plikowi /etc/sysconfig/nfsd, kt�ry może wyglądać następująco:

SERVICE_RUN_NICE_LEVEL="+0"

#RPCMOUNTOPTIONS="--no-nfs-version 3"

RPCNFSDCOUNT=8

NFSDTYPE=K
  • SERVICE_RUN_NICE_LEVEL - ustala priorytet serwera

  • #RPCMOUNTOPTIONS="--no-nfs-version 3" - opcja dla jąder z serii 2.2, dla wsp�łczesnych kerneli powinna być zakomentowana

  • RPCNFSDCOUNT - podaje liczbę instancji serwera, czyli ilu klient�w może obsłużyć jednocześnie

  • NFSDTYPE - podaje czy serwer ma pracować jako oddzielny demon (U), czy w trybie jądra (K). Zalecane jest to drugie z rozwiązań, gdyż zapewnia większą wydajność.

Modyfikacja pliku konfiguracji wymaga restartu uslugi.

Udostępnianie

Uruchomiliśmy serwer, teraz przyszedł czas na udostępnienie zasob�w. W pliku /etc/exports definiuje się udostępniane katalogi, ich listę podajemy w postaci wierszy, kt�re mają następującą składnię:

$katalog  $klient1($opcja1,$opcja2,...)  $klient2($opcja1,$opcja2,...)
  • $katalog - udostępniony katalog. Warto tutaj wspomnieć, że jeżeli udostępniamy dany katalog to nie możemy udostępnić w nowej regułce katalogu będącego jego ojcem jak i synem, jeżeli leżą na tym samym systemie plik�w. Udostępnianie partycji FAT, itp. też nie jest dobrym rozwiązaniem.

  • $klient - IP lub nazwa komputera, kt�remu udostępniamy katalog. Można podać także całą sieć, wtedy zezwolimy wszystkim komputerom w sieci na przeglądanie i/lub zapisywanie do katalogu.

  • $opcje - tutaj możemy ustalić m.in. czy zas�b ma być udostępniony tylko do odczytu, czy także do zapisu, oraz nałożyć inne ograniczenia. Wszystkie opcje opisane są w manualu (man exports).

Oto przykładowe wpisy do /etc/exports:

/srv/pub   192.168.0.1(ro) 192.168.0.2(rw)
/home        192.168.0.0/255.255.255.0(rw)

Pomijając sensowność wpis�w, pierwszy wiersz daje prawo odczytu katalogu /srv/pub komputerowi 192.168.0.1 i prawo odczytu i zapisu komputerowi 192.168.0.2. Drugi z kolei daje prawo zapisu do katalogu /home komputerom z podsieci 192.168.0.0/24. Jeżeli modyfikujemy /etc/exports w trakcie pracy serwera to musimy poinformować demona, żeby ponownie odczytał plik konfiguracji. Przed tym możemy sprawdzić czy nasze wpisy są poprawne:

# exportfs -v

Polecenie to wyświetli listę katalog�w gotowych do wyeksportowania, jeśli kt�ryś z udziałï¿½w nie jest wyświetlony, to prawdopodobnie popełniliśmy jakiś błąd w składni. Gdy jesteśmy pewni, że chcemy udostępnić udziały NFS, to wydajemy polecenie:

# exportfs -rv

W PLD stworzono grupę systemową fileshare, kt�ra ma prawo do modyfikowania konfiguracji udziałï¿½w sieciowych (NFS i SMB), bez konieczności posiadania praw root-a. Aby nadać użytkownikowi takie prawo wystarczy zapisać go do tej grupy, opis zarządzania grupami użytkownik�w opisano w „Grupy”.

Klient

Konfigurację klienta rozpoczynamy od zainstalowania i uruchomienia usługi portmap. Jeśli chcemy, aby zasoby NFS były montowane w trakcie startu systemu, instalujemy pakiet nfs-utils-clients, dostarczający wymagany rc-skrypt: /etc/rc.d/init.d/nfsfs.

Teraz przyszedł czas na połączenie się z zasobem NFS, w tym celu musimy go zamontować np.:

# mount serwer.net:/srv/pub /mnt/net -t nfs

serwer.net to IP bądź nazwa naszego serwera, /srv/pub jest przykładowym udostępnionym katalogiem na serwerze (wpisaliśmy go wcześniej do /etc/exports). Katalog /mnt/net to przykładowe miejsce podmontowania zasobu. Można użyć dodatkowo flagi -o a po niej podać potrzebne nam opcje montowania. Pełną listę opcji znajdziemy w podręczniku systemowym: man 5 nfs.

Jeśli nic nie stoi na przeszkodzie abyśmy podłączali zas�b przy starcie systemu, to dodajemy wpis do /etc/fstab:

192.168.0.1:/srv/pub  /mnt/net   nfs      rw,hard,intr  0     0

Wpis wygląda znajomo, ale uwagę zwracają opcje hard i intr. Ot�ż hard oznacza, że programy korzystające z zasob�w NFS w momencie awarii serwera zostaną zawieszone w oczekiwaniu na dostęp do danych i nie będzie możliwości ich odwieszenia w postaci polecenia kill, chyba, że dodamy opcję intr dzięki czemu będziemy mogli zabić dany proces. Zamiast hard możemy użyć opcji soft, jednak w przypadku awarii serwera NFS sygnalizuje błąd programom korzystającym z zasob�w. Wadą tego rozwiązania jest to, że nie wszystkie programy potrafią poradzić sobie z takim komunikatem i może dojść do utraty danych.

Bezpieczeństwo serwera

Musimy zadbać o bezpieczeństwo naszego serwera, podstawowym sposobem zabezpieczania zasobu jest ograniczenie dostępu. Możemy go ograniczać za pomocą ustawień w pliku /etc/exports, za pomocą filtra pakiet�w lub plik�w /etc/tcpd/hosts.allow i /etc/tcpd/hosts.deny, co zostało przedstawione poniżej.

Najpierw blokujemy wszystkim dostęp do naszych usług wpisując do pliku pliku /etc/tcpd/hosts.deny:

portmap:ALL                                                                     
lockd:ALL                                                                       
mountd:ALL                                                                      
rquotad:ALL                                                                     
statd:ALL

Następnie w /etc/tcpd/hosts.allow wpisujemy komputery, kt�rym zezwalamy na korzystanie z wymienionych usług. Możemy zar�wno wpisać adresy IP komputer�w jak i całą podsieć.

portmap: 192.168.0.0/255.255.255.0                                              
lockd: 192.168.0.0/255.255.255.0                                                
rquotad: 192.168.0.0/255.255.255.0                                              
mountd: 192.168.0.0/255.255.255.0                                               
statd: 192.168.0.0/255.255.255.0

NFS nie obsługuje autoryzacji na poziomie użytkownika, a jedynie na poziomie hosta. Z tego względu nie bardzo nadaje się do udostępniania w Internecie, jeśli to tylko możliwe lepiej użyć protokołu FTP lub WebDAV.

Dostrajanie wydajności

Wolne działanie protokołu NFS wskazuje przeważnie na brak odpowiedniego dostrojenia połączenia, wystarczy ustawić kilka opcji by uzyskać zaskakująco duży wzrost wydajności. Podane poniżej zalecenia dotyczą konfiguracji klienta.

Na początek zajmiemy się opcjami rsize i wsize. Dzięki nim możemy zwiększyć szybkość odczytu i zapisu plik�w na serwer. Manual systemowy radzi by ustawić im na wartości: rsize=8192 i wsize=8192. Linijka w pliku /etc/fstab będzie wyglądać teraz następująco:

192.168.0.1:/usr/local  /usr/local   nfs      rw,hard,intr,rsize=8192,wsize=8192  0     0

Domyślnie NFS działa w oparciu o protok�ł UDP, doświadczenie pokazuje jednak, że przełączenie w tryb TCP może w niekt�rych wypadkach zwiększyć szybkość przesyłu danych. Niestety nie każdy serwer NFS obsługuje połączenia TCP, więc nie wszędzie możemy użyć tej opcji. Na szczęście PLD zawiera demona pozwalającego na używanie TCP. Aby włączyć tą opcję do linijki w pliku /etc/fstab dodajemy wpis tcp np.:

192.168.0.1:/usr/local  /usr/local   nfs      rw,hard,intr,tcp  0     0

W przypadku protokołu NFS należy trochę eksperymentować z ustawieniami, na początek dobrym pomysłem może być użycie obu powyższych wskaz�wek. Więcej o dostrajaniu NFS-a można odnaleźć w podręczniku systemowym.

PDNS (Power DNS) - Serwer Nazw

Power DNS zwany w dalszej części tego dokumentu jako PDNS™ jest zaawansowanym i bardzo efektywnym serwerem nazw. Jego możliwości wsp�łpracy z LDAP lub bazami SQL (Mysql i Postgresql) dają szerokie możliwości tworzenia skrypt�w lub interface zarządzających. Sam PDNS jest uważany za zdecydowanie bezpieczniejszy niż Bind™, a także od niego szybszy - zwłaszcza przy większej ilości obsługiwanych domen.

Wstęp

W tym rozdziale zostanie om�wiona podstawowa instalacja, konfiguracja z bazą Postgresql™, a także wstępna konfiguracja przykładowej domeny. Oczywiście więcej szczeg�łï¿½w możemy znaleźć w oryginalnej dokumentacji.

Instalacja

Instalacja przebiega standardowo za pomocą poldka.

poldek> install pdns

Do poprawnego działania naszej bazy potrzebujemy także postgresql™ (możemy także wykorzystać mysql lub ldap, a nawet pliki konfiguracyjne Bind-a). Tak więc jeżeli nie mamy Postgresql to instalujemy go i poprawnie konfigurujemy.

Konfiguracja Postgresql dla PDNS

Następnym krokiem będzie stworzenie bazy obsługiwanej przez PDNS w Postgresql. W tym celu możemy wykorzystać klienta dostarczanego razem z Postgresql - psql™. Możemy także do tego celu użyć innych wygodnych narzędzi np. phpPgAdmin

Najpierw z konta użytkownika uprawnionego do operacji na bazie tworzymy bazę:

$ createdb -U postgres powerdns

Tworzymy także użytkownika dla w/w bazy:

$ createuser -P -U postgres pdns
Enter password for user "pdns":
Enter it again:
Shall the new user be allowed to create databases?
(y/n) n
Shall the new user be allowed to create more new
users? (y/n) n
CREATE USER

Teraz za pomocą swojego ulubionego klienta Postgresql wykonujemy poniższe polecenia SQL w celu stworzenia szkieletu bazy:

create table domains (
id		 SERIAL PRIMARY KEY,
name		 VARCHAR(255) NOT NULL,
master		 VARCHAR(20) DEFAULT NULL,
last_check	 INT DEFAULT NULL,
type		 VARCHAR(6) NOT NULL,
notified_serial	INT DEFAULT NULL, 
account         VARCHAR(40) DEFAULT NULL
);
CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id              SERIAL PRIMARY KEY,
domain_id       INT DEFAULT NULL,
name            VARCHAR(255) DEFAULT NULL,
type            VARCHAR(6) DEFAULT NULL,
content         VARCHAR(255) DEFAULT NULL,
ttl             INT DEFAULT NULL,
prio            INT DEFAULT NULL,
change_date	INT DEFAULT NULL, 
CONSTRAINT	domain_exists 
FOREIGN		KEY(domain_id) REFERENCES domains(id)
ON DELETE CASCADE
);

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

create table supermasters (
ip VARCHAR(25) NOT NULL, 
nameserver VARCHAR(255) NOT NULL, 
account VARCHAR(40) DEFAULT NULL
);

GRANT SELECT ON supermasters TO pdns;
GRANT ALL ON domains TO pdns;
GRANT ALL ON domains_id_seq TO pdns;
GRANT ALL ON records TO pdns;
GRANT ALL ON records_id_seq TO pdns;

Konfiguracja PDNS

W /etc/pdns/pdns.conf konfigurujemy działanie programu PDNS. Przykładowa konfiguracja PDNSa wsp�łpracującego z bazą Postgresql może wyglądać następująco:

#chroot=/some/where	# If set, chroot to this directory for more security
config-dir=/etc/pdns/      # Location of configuration directory (pdns.conf)
launch=gpgsql              # Launch this backend 

#gpgsql-socket=/var/lib/pgsql/postmaster.pid
gpgsql-dbname=powerdns     # Nazwa bazy danych w psql
gpgsql-user=pdns	   # Użytkownik bazy w psql
gpgsql-password=hasło_do_bazy_pdns

module-dir=/usr/lib/pdns   # Default directory for modules
#load-modules=             # Load this module - supply absolute or relative path
#local-address=0.0.0.0     # Local IPv4 address to which we bind
#local-ipv6=::               # Local IPv6 address to which we bind
#use-logfile=no            # Use a log file or syslog
#logfile=var/log/pdns.log  # Logfile to use
allow-recursion=IP_ZEWN_DNS/maska,IP_ZEWN_DNS/maska	   # Tu podajemy adresy zewn. serwer�w DNS np.
# allow-recursion=194.204.152.34/24,194.204.159.1/24
# nameserver
setgid=djbdns              # If set, change group id to this gid for more security
setuid=pdns                # If set, change user id to this uid for more security
#slave=no                  # Act as a slave (Ustawiamy na YES w przypadku
			   # pracy serwera PDNS jako SLAVE)
			   
socket-dir=/var/run        # Where the controlsocket will live
webserver=yes              # Włączenie usługi monitorowania pracy PDNS przez WWW
webserver-address=10.1.1.1 # Adres IP strony monitorującej pracę PDNS
webserver-password=hasło_do_strony_monitorującej
webserver-port=8088	   # port strony monitorującej

Krzyżyk "#" na początku oznacza komentarz bądź wyłączenie danej opcji. Oryginalne teksty komentarzy są na tyle czytelne, że tylko niekt�re opcje skomentowalismy po polsku.

Domeny

Praktycznie PDNS jest gotowy do pracy. Musimy jeszcze wypełnić treścią bazę - czyli dodać domenę (domeny). Przykładową domenę zaprezentujemy w formie tzw. "dump-a" bazy. Jest to na tyle czytelne, że skomentowane zostaną tylko niekt�re aspekty.

--
-- PostgreSQL database dump
--

SET client_encoding = 'UNICODE';
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

--
-- Name: domains_id_seq; Type: SEQUENCE SET; Schema: public; Owner: pdns
--

SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('domains', 'id'), 1, true);

--
-- Name: records_id_seq; Type: SEQUENCE SET; Schema: public; Owner: pdns
--

SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('records', 'id'), 16, true);

--
-- Data for Name: domains; Type: TABLE DATA; Schema: public; Owner: pdns
--

INSERT INTO domains VALUES (1, 'foo.com', NULL,	NULL, 'NATIVE', NULL, NULL); 
INSERT INTO domains VALUES (2, '1.1.10.in-addr.arpa', NULL, NULL, 'NATIVE', NULL, NULL);
-- W pierwszym ID podajemy domenę 'foo.com'
-- W drugim ID definiujemy domenę odwrotną dla danego IP

--
-- Data for Name: records; Type: TABLE DATA; Schema: public; Owner: pdns
--
-- Poniżej zgodnie z określonymi ID definiowane są kolejno strefy

INSERT INTO records VALUES (2, 1, 'localhost.foo.com', 'A', '127.0.0.1', 120, NULL, NULL);
INSERT INTO records VALUES (3, 1, 'www.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (5, 1, 'dns.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (6, 1, 'ftp.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (7, 1, 'poczta.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (8, 1, 'pop3.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (9, 1, 'smtp.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (10, 1, 'ssh.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (11, 1, 'jabber.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (1, 1, 'foo.com', 'SOA', 'localhost user.foo.com 1', 86400, NULL, NULL);
INSERT INTO records VALUES (16, 1, 'foo.com', 'TXT', 'Serwer PDNS', 300, NULL, NULL);
INSERT INTO records VALUES (17, 1, 'foo.com', 'NS', 'ns.foo.com', 300, NULL, NULL);
INSERT INTO records VALUES (4, 1, 'mail.foo.com', 'A', '10.1.1.1', 120, NULL, NULL);
INSERT INTO records VALUES (18, 1, 'foo.com', 'MX', 'mail.foo.com', 300, 5, NULL);
INSERT INTO records VALUES (19, 1, 'foo.com', 'A', '10.1.1.1', 300, 0, NULL);

-- Poniżej definiujemy rekordy SRV dla serwera Jabber 
INSERT INTO records VALUES (12, 1, '_jabber._tcp.jabber.foo.com', 
	'SRV', '0 5269 foo.com', 300, 10, NULL);
INSERT INTO records VALUES (13, 1, '_xmpp-server._tcp.jabber.foo.com', 
	'SRV', '0 5269 foo.com', 300, 10, NULL);
INSERT INTO records VALUES (14, 1, '_xmpp-client._tcp.jabber.foo.com', 
	'SRV', '0 5222 foo.com', 300, 10, NULL);

-- Domena odwrotna
INSERT INTO records VALUES (15, 2, '1.1.1.10.in-addr.arpa', 'PTR', 'foo.com', 86400, NULL, NULL);
INSERT INTO records VALUES (20, 2, '1.1.10.in-addr.arpa', 
	'SOA', 'localhost root.localhost', 86400, NULL, NULL);
INSERT INTO records VALUES (21, 2, '1.1.10.in-addr.arpa', 'NS', 'nc.foo.com', 86400, NULL, NULL);

--
-- Data for Name: supermasters; Type: TABLE DATA; Schema: public; Owner: pdns
--

--
-- PostgreSQL database dump complete
--

Wszelkie zmiany lub dodawanie nowych domen możemy wykonywać na bazie danych lub wykorzystując do tego odpowiednie skrypty. Teraz możemy uruchomić demona PDNS wykorzystując skrypt:

# /etc/init.d/pdns start

Należy pamiętać, że jeżeli wcześniej używalismy BINDa bądź innnego demona do obsługi nazw domenowych, należy go przed uruchomieniem PDNS wyłączyć.

Po uruchomieniu serwisu możemy za pomocą przeglądarki http wejść na stronę monitorującą pracę PDNS (odpowiednie opcje dotyczące tej usługi znajdziemy w /etc/pdns/pdns.conf). Wywołanie zgodne z przykładowym wpisem w pdns.conf to http://10.1.1.1:8088. Na stronie tej możemy odnaleźć wiele cennych informacji dotyczących pracy naszego serwera nazw.

Postfix™ - Transport poczty elektronicznej (MTA)

Postfix™ jest MTU czyli w wielkim skr�cie demonem poczty elektronicznej. No tak, w sumie powiecie ściągamy poldkiem instalujemy i działa... działa ale chcemy coś więcej... chcemy by nasz smtpd był ładnie skonfigurowany.

Zaczynamy

Ściągamy to co nam będzie potrzebne. Wiadomo... postfix i dodatki, kt�re mu są potrzebne:

poldek -i postfix cyrus-sasl cyrus-sasl-plain cyrus-sasl-saslauthd \
    cyrus-sasl-login

A tutaj coś co będzie nam potrzebne do tworzenia certyfikat�w.

poldek -i openssl-tools

A tutaj coś żebyśmy mogli pobrać pocztę z serwera.

poldek -i tpop3d inetd rc-inetd

Konfiguracja

Przyszedł czas na konfigurację postfix™-a.

# echo 'pwcheck_method:saslauthd' > /etc/sasl/smtpd.conf

Należy jeszcze sprawdzić czy w /etc/pam.d/ znajduje się plik smtp, jeżeli nie to należy przegrać na to miejsce przykładowy konfig z /usr/share/doc/cyrus-sasl-saslauthd-*/cyrus.pam.gz , rozpakować i nazwać plik smtp.

Uruchom saslauthd™:

# /etc/rc.d/init.d/saslauthd start

Uruchom postfix™-a:

# /etc/rc.d/init.d/postfix start

Teraz chcemy, żeby postfix™ wymagał autentykacji:

# postconf -e smtpd_sasl_auth_enable=yes
# postconf -e smtpd_recipient_restrictions=permit_mynetworks, \
    reject_sender_login_mismatch,permit_sasl_authenticated, \
    reject_unauth_destination

Teraz linijka dla popsutych Outlook™-�w.

# postconf -e broken_sasl_auth_clients=yes
# postconf -e mynetworks=127.0.0.0/8,192.168.1.1/32

Restart postfix™-a:

# /etc/rc.d/init.d/postfix restart

No i to wszystko razem powinno wyglądać tak:

# postconf -n
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
biff = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/mail
daemon_directory = /usr/lib/postfix
debug_peer_level = 2
default_privs = nobody
mail_owner = postfix
mail_spool_directory = /var/mail
myhostname = networking.ee
mynetworks = 127.0.0.0/8, 192.168.1.1/32, 192.168.1.1/32
myorigin = $myhostname
queue_directory = /var/spool/postfix
setgid_group = maildrop
smtpd_recipient_restrictions = permit_mynetworks, \
    reject_sender_login_mismatch,permit_sasl_authenticated, \
    reject_unauth_destination
smtpd_sasl_auth_enable = yes

Szyfrowanie

Włączamy teraz szyfrowanie wysyłania poczty oraz transmisji między MX-ami dla r�żnych domen

Następnie generujemy certyfikat SSL. Podczas generowania certyfikatu będziesz musiał odpowiedzieć na kilka prostych pytań.

Robimy to w spos�b następujący:

# openssl genrsa -out key.pem 1024
# openssl req -new -x509 -key key.pem -out cert.pem
# cat cert.pem >> key.pem; mv -f key.pem cert.pem
# cp cert.pem /var/lib/openssl/certs/nasza.domena.pl.pem

Do pliku /etc/mail/main.cf należy dodać 4 linijki, takie jak poniżej:

smtpd_tls_cert_file = /var/lib/openssl/certs/nasza.domena.pl.pem
smtpd_tls_key_file = $smtpd_tls_cert_file
smtpd_use_tls = yes
smtp_use_tls = yes

W pliku /etc/mail/master.cf należy zastąpić aktualną linijkę czyli tą z domyślnej instalacji:

#smtps inet  n  -  n  -    -    smtpd
na naszą aktualną:
 smtps inet  n  -  y  -    -    smtpd -o smtpd_tls_wrappermode=yes \
    -o smtpd_sasl_auth_enable=yes

Domeny

Jeżeli posiadamy więcej niż jedną domenę na serwerze to w /etc/mail/main.cf dopisujemy:

mydestination = $myhostname, jakas.domena.pl, \
    costam.gdziestam.pl, PLD.biz.pl

Jeżeli chcemy aby nasz postfix obsługiwał wirtualne domeny (przyznawał się do nich) dopisujemy w /etc/mail/main.cf takie trzy linijki:

relay_domains = hash:/etc/mail/domains
virtual_maps = hash:/etc/mail/virtual
smtpd_sender_login_maps = hash:/etc/mail/virtual

Tworzymy /etc/mail/domains i robimy nastepujące wpisy:

# plik domains, w nim wpisane domeny dla kt�rych nasz serwer 
#pocztę będzie przyjmował.
pld-linux.org    		relay
81.0.225.27			relay

Do /etc/mail/virtual dopisujemy na przykład coś takiego:

# plik virtual, w nim wpisane są konta w domenach kt�re obsługujemy
# schemat wpisu
# [email protected]    konto_w_systemie
[email protected]           grifter
[email protected]         grifter
[email protected]	grifter
[email protected]		grifter
[email protected]		grifter
# to ostatnie będzie nam p�źniej do amavisa potrzebne :)

Teraz musimy wklepać

# postmap /etc/mail/domains
# postmap /etc/mail/virtual

No i restart postfixa

# /etc/rc.d/init.d/postfix restart

Usprawnienia

Dodatkowe wpisy kt�re poprawią pracę naszego postfix™-a Edytujemy /etc/mail/main.cf i dodajemy następujące wpisy:

disable_vrfy_command = yes
# liczba odbiorc�w max 100 dla jednego maila
smtpd_recipient_limit = 100
smtpd_error_sleep_time = 5
smtpd_hard_error_limit = 10
smtpd_helo_required = yes
# ogranicz do 2 mega [2000000] wielkość przesyłki, właściwie mając \
# dobre łącze można
# wpisać 10 mega [10000000]
message_size_limit = 2000000
# spam fight! :>
header_checks = regexp:/etc/mail/header_checks
mail_name = PLD - $myhostname
smtpd_banner = $myhostname ESMTP $mail_name. We block/report all spam.
smtpd_soft_error_limit = 60
default_process_limit = 3
maps_rbl_domains = relays.ordb.org
smtpd_client_restrictions = reject_maps_rbl

Tworzymy /etc/mail/header_checks i dopisujemy:

/^To: .*friend@public/    REJECT Header-To address revoked \
    due to too much spam.
/^Subject: ADV\W/         REJECT Header-Subject beginning with \
    "spam" ADV tag rejected.

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  -     -  smtpd
smtps     inet  n  -  y  -     -  smtpd -o smtpd_tls_wrappermode=yes \
    -o smtpd_sasl_auth_enable=yes
pickup    fifo  n  -  n  60    1  pickup
cleanup   unix  n  -  n  -     0  cleanup
qmgr      fifo  n  -  n  300   1  qmgr
rewrite   unix  -  -  n  -     -  trivial-rewrite
bounce    unix  -  -  n  -     0  bounce
defer     unix  -  -  n  -     0  bounce
flush     unix  n  -  n  1000? 0  flush
smtp      unix  -  -  n  -     -  smtp
showq     unix  n  -  n  -     -  showq
error     unix  -  -  n  -     -  error
local     unix  -  n  n  -     -  local
virtual   unix  -  n  n  -     -  virtual
lmtp      unix  -  -  n  -     -  lmtp
cyrus     unix  -  n  n  -     -  pipe flags=R user=cyrus \
    argv=/usr/lib/cyrus/deliver -e -m ${extension} ${user}
uucp      unix  -  n  n  -     -  pipe flags=Fqhu user=uucp \
    argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail    unix  -  n  n  -     -  pipe flags=F user=ftn \
    argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp     unix  -  n  n  -     -  pipe flags=Fq. user=foo \
    argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient

tpop3d

tpop3d™, czyli coś dzięki czemu będziemy mogli pobrać pocztę z serwera.

No i włączamy tpop3d™-a

# /etc/rc.d/init.d/tpop3d start

amavis + mks

Przystępujemy do instalacji i konfiguracji amavisa™ + mks™ :)

Instalujemy poldkiem mks™, serwer mksd™, bazy, oraz skrypt aktualizujący bazy

poldek -i mks mksd mks-bases mks-updater mksd-clients

Teraz ściągamy jakiegoś wirusa i sprawdzamy czy mks32 działa...

# wget http://www.eicar.org/download/eicar.com
# mks32 eicar.com
mks_vir: init...  1.9.0 for Linux i386, 2003.07.02
mks_vir: database version 2003 7 11  13 23
mks_vir: init OK, scan mode
mks_vir: check file(s)
mks_vir: file: eicar.com
mks_vir:        --heuristic for virus Eicar.Test
mks_vir:        --heuristic for virus Eicar.Test
mks_vir: status: virus found: eicar.com
mks_vir: exit code: 0x01

Jeśli dostaliście coś takiego, tzn. że wszystko jest ok ;)

Teraz przetestujemy czy mksd działa poprawnie.

# /etc/rc.d/init.d/mksd  start
# mkschk /root/skaner/eicar.com
VIR Eicar.Test /root/skaner/eicar.com

Jeśli dostałeś coś takiego, tzn. że wszystko jest okej. mksd przyśpiesza znacznie pracę na słabych maszynach... wtedy znacznie odczujesz.

Instalujemy teraz amavisa

poldek -i amavisd-new

No i teraz najgorsze ;)

Edytujemy /etc/amavisd.conf

Odkomentuj linię:

@bypass_spam_checks_maps  = (1);  # uncomment to DISABLE anti-spam code

Pozmieniaj odpowiednie linie

$mydomain = 'twoja.domena.pl';      # (no useful default)
$daemon_user  = 'amavis';	# (no default;  customary: vscan or amavis)
$daemon_group = 'amavis';	# (no default;  customary: vscan or amavis)

Możemy tutaj ustawić użytkownika amavis. Dodatkowo należy dopisać mksd do grupy amavis, dzięki czemu będzie on m�gł korzystać z katalog�w z częściami maili amavisa.

# grep amavis /etc/group
amavis:x:116:mksd

Zakomentuj linię:

#$unix_socketname = "$MYHOME/amavisd.sock"; # amavis helper protocol socket

Jeśli nie chcesz żeby amavis używał pewnych paker�w to zakomentuj odpowiednie linie, np.

#$unrar  =  'unrar';

Usuń wszystkie wpisy na temat antywirus�w (@av_scanners = ) i zastąp to wpisem z pliku README z archiwum mksd:

['MkS_Vir daemon',
'mksscan', '-s -Q {}',
[0], [1..7],
qr/^... (\S+)/
 ],

Usuń wpisy z @av_scanners_backup =

W swoim systemie pocztowym (postfix) utw�rz użytkownika (lub alias) "virusalert" lub pozmieniaj wpisy:

$mailfrom_notify_admin
$mailfrom_notify_recip
$virus_admin

My zrobiliśmy wcześniej aliasa dla virusalert ;)

Ja sobie jeszcze dopisałem:

$hdrfrom_notify_sender = $mailfrom_notify_admin;

Jeśli nie chcesz aby nadawcy list�w oraz admini dostawali informacje o wirusach w domyślnym języku (English) to odkomentuj linie i zr�b własne wpisy w /var/amavis/*.txt

# $notify_sender_templ      = read_text('/var/amavis/notify_sender.txt');
# $notify_virus_sender_templ=read_text('/var/amavis/notify_virus_sender.txt');
# $notify_virus_admin_templ = read_text('/var/amavis/notify_virus_admin.txt');
# $notify_virus_recips_templ=read_text('/var/amavis/notify_virus_recips.txt');

i zmień 

#$bdy_encoding = 'iso-8859-1';  # (default: 'iso-8859-1')

na

$bdy_encoding = 'iso-8859-2';  # (default: 'iso-8859-1')

Według licencji powinieneś umieścić w notify_sender.txt reklamę http://www.mks.com.pl gdyż jest do warunek licencji na używanie mks™. Na końcu pliku /usr/sbin/amavisd znajdują się przykładowe szablony.

W pliku /etc/mail/master.cf dopisujemy nową linię:

localhost:10025 inet n  -       n       -       -       smtpd

No i restart postfix™-a, amavisd™-a i mks

# /etc/rc.d/init.d/postfix restart
# /etc/rc.d/init.d/mksd restart
# /etc/rc.d/init.d/amavisd restart

Teraz testujemy amavis™-a:

# telnet 127.0.0.1 10024
Trying 127.0.0.1.10024...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
MAIL FROM: <root>
250 2.1.0 Sender root OK
RCPT TO: <root>
250 2.1.5 Recipient root OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test bez wirusa
test
.

250 2.6.0 Ok, id=29569-01, from MTA: 250 Ok: queued as A1017FD1E

Dostałeś 250? To znaczy, ze amavisd™ sprawdził przesyłkę :) nie wierzysz? tail -n 100 -f /var/log/maillog

A teraz sprawdzimy jak reaguje na przesyłkę z wirusem:

# telnet 127.0.0.1 10024
Trying 127.0.0.1.10024...
Connected to localhost.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
MAIL FROM: <root>
250 2.1.0 Sender root OK
RCPT TO: <root>
250 2.1.5 Recipient root OK
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: test z wirusem

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
.
250 2.5.0 Ok, but 1 BOUNCE

No i znalazł wirusa :) w logach mamy:

Jul 14 04:17:43 networking amavis[29569]: (29569-02) INFECTED (Eicar.Test), 
<root> -> <root>, quarantine virus-20030714-041716-29569-02, \
    Message-ID: , Hits: -

Teraz jeszcze mała obr�bka plik�w cf od postfix™-a ;)

Edytujemy /etc/mail/master.cf

Linijkę:
smtp      inet  n  -   n    -    -    smtpd

zamieniamy na:

smtp      inet  n  -   n    -    -    smtpd -o \
    content_filter=smtp-amavis:[127.0.0.1]:10024
	

oraz dodajemy jeszcze:

smtp-amavis unix -      -       n       -       2       smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes

Restart postfix™-a:

# /etc/rc.d/init.d/postfix restart

i powinno wszystko nam pięknie latać:)

Wyślij sobie eicar.com w załączniku a zobaczysz, że smtp odrzuci i dostaniesz maila z alertem :]

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 zarządzania bazą danych na świecie typu OpenSource - w taki oto spos�b grupa rozwijająca SZBD PostgreSQL reklamuje sw�j produkt. SZBD PostgreSQL jest implementacją języka SQL, kt�ra zawiera w sobie bardzo wiele jego element�w, a na dodatek wprowadza wiele własnych rozszerzeń. Por�wnywany z mySQL oddaje mu pola przy małych instalacjach, kt�re w prosty, a szybki spos�b mają obsługiwać bazę danych - typu małe portale internetowe, proste bazy, i tym podobne. Jednakże SZBD PostgreSQL dostaje skrzydeł w większych projektach, jest często por�wnywany do bardzo rozbudowanego SZBD Oracle. Cechy SZBD PostgreSQL to między innymi:

  • osadzane języki proceduralne wykonywane przez bazę danych (plperl, pl/perlu, plpgsql, plpython, pltcl, pl/tcl)

  • możliwość tworzenia funkcji w PostgreSQLu w języku C, kompilowanych do bibliotek dynamicznych

  • sterowniki dostępu do bazy z język�w C, C++, python, perl, czy Java (poprzez JDBC), ODBC

  • wysoce zaawansowana implementacja standardu SQL, obejmująca SQL/92

  • obsługa BLOB (Binary Large OBjects) -- dużych obiekt�w binarnych, takich jak pliki graficzne, itp.

  • obsługa p�l typu AUTOINCREMENT jako SERIAL lub SEQUENCE

  • licencję BSD, kt�ra umożliwia zamykanie kodu SZBD PostgreSQL przy dokonywaniu modyfikacji, co jest istotne w rozwiązaniach biznesowych

Instalacja pakiet�w

Uruchamiamy program poldek™:

# poldek

Wykonujemy:

poldek>ls -l postgresql-*

Przykładowy wynik to:

poldek> ls -l postgresql-*
package                                build date                 size
postgresql-7.4-0.8                     2003/12/16 20:45        8.8 MB
postgresql-backend-devel-7.4-0.8       2003/12/16 20:45        1.4 MB
postgresql-clients-7.4-0.8             2003/12/16 20:45        1.5 MB
postgresql-devel-7.4-0.8               2003/12/16 20:45       93.0 KB
postgresql-doc-7.4-0.8                 2003/12/16 20:45        5.3 MB
postgresql-ecpg-7.4-0.8                2003/12/16 20:45      479.0 KB
postgresql-ecpg-devel-7.4-0.8          2003/12/16 20:45       17.0 KB
postgresql-libs-7.4-0.8                2003/12/16 20:45      252.0 KB
postgresql-module-pgcrypto-7.4-0.8     2003/12/16 20:45       91.0 KB
postgresql-module-plperl-7.4-0.8       2003/12/16 20:45       30.0 KB
postgresql-module-plpgsql-7.4-0.8      2003/12/16 20:45      100.0 KB
postgresql-module-plpython-7.4-0.8     2003/12/16 20:45       35.0 KB
postgresql-module-pltcl-7.4-0.8        2003/12/16 20:45       44.0 KB
postgresql-static-7.4-0.8              2003/12/16 20:45      303.0 KB
postgresql-tcl-7.4-0.8                 2003/12/16 20:45       38.0 KB
postgresql-tcl-devel-7.4-0.8           2003/12/16 20:45        0.0 KB
postgresql-tcl-static-7.4-0.8          2003/12/16 20:45       36.0 KB
17 packages, 18.6 MB
poldek>

Do poprawnego działania SZBD PostgreSQL konieczne są następujące pakiety:

  • postgresql

  • postgresql-clients

  • postgresql-libs

Zatem można przystąpić do ich instalacji, wpisując następujące polecenie:

# poldek -i postgresql postgresql-clients postgresql-libs

Aby SZBD PostgreSQL skorzystał z wewnętrznych język�w plpgsql czy też plphpython należy doinstalować pakiety postgresql-module-plpgsql

# poldek -i postgresql-module-plpgsql

oraz

root# poldek -i postgresql-module-plpython

Konfiguracja PostgreSQLa w PLD

Wstępna 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ę edycja plik�w ${PG_DB_CLUSTERS}/{postgresql.conf,pg_hba.conf}:

# vim /var/lib/pgsql/{postgresql.conf,pg_hba.conf}

Przydatna opcja to tcpip_socket = true w pliku /var/lib/pgsql/postgresql.conf.

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ędzie miał możliwość tworzenia baz danych (za pomocą createdb lub CREATE DATABASE z poziomu psql) jak i dodawania użytkownik�w (createuser lub CREATE USER z poziomu psql).

Ostatni test

$ psql -h 127.0.0.1 template1
template-1=# SELECT count(*) FROM pg_database;
 count 
-------
     2
(1 row)

Dodatki

Warto włączyć obsługę PostgreSQLa w PHP™, instalując pakiet php-pgsql™, r�wnież w perl™-u perl-DBD-Pg™ lub perl-Pg™, oraz w python™-ie python-postgresql™. Pakiet postgresql-devel™ jest przydatny przy pisaniu aplikacji w C/C++™ korzystających z PostgreSQLa. Dokumentacja do PostgreSQLa znajduje się, a jakże, w pakiecie postgresql-doc™.

# poldek -i php-pgsql
# poldek -i perl-DBD-Pg
# poldek -i perl-Pg
# poldek -i python-postgresql
# poldek -i postgresql-devel
# poldek -i postgresql-doc

Odnośniki

ProFTPD - serwer FTP

Wstęp

Dużą zaletą ProFTPD™ jest jego prostota. Plik konfiguracyjny demona do złudzenia przypomina ten od Apache™. Jego zrozumienie nie powinno sprawiać trudności.

Instalacja

Zanim przystąpisz do instalacji powinieneś zdecydować w jakim trybie ma pracować usługa. Jako demon, czy ma być uruchamiana poprzez superserwer inetd™. Tryb inetd polega na tym, że proces proftpd zostanie uruchomiony dopiero po odebraniu przez inetd żądania o tę usługę. Natomiast w trybie daemon ProFTPD jest uruchomiony cały czas i pracuje niezależnie od inetd. Tak więc, jeżeli Tw�j komputer, kt�ry przeznaczysz na serwer nie jest zbyt szybki, powinieneś wybrać ProFTPD uruchamianego poprzez inetd. Dystrybucja udostępnia obie te możliwości. Pakiet proftpd-inetd zapewnia uruchamianie poprzez inetd, natomiast po zainstalowaniu usługi z pakietu proftpd-standalone uruchamiana ona będzie w trybie daemon. W opisie posłużymy się wersją daemon. Instalujemy pakiet proftpd-standalone

Podstawowa konfiguracja demona

Jak już wspomniałem we wstępie, ProFTPD jest jednym z prostszych w konfiguracji program�w serwerowych. Wszystkie pliki potrzebne do jego skonfigurowania znajdują się w katalogu /etc/ftpd.

# ls -1 /etc/ftpd
ftpusers
proftpd.conf

W pliku ftpusers znajduje się lista użytkownik�w, kt�rym odebrana została możliwość logowania się do serwera ftp. Poszczeg�lne pozycje z tej listy zakończone są znakiem nowej linii, tak więc każda pozycja jest rozmieszczona jedna pod drugą. Natomiast plik proftpd.conf zawiera właściwą konfigurację usługi.

ServerName                      "ProFTPD"
ServerIdent                     off
ServerType                      standalone
DeferWelcome                    off
DefaultServer                   on
DefaultRoot                     ~
  • ServerName określa nazwę serwera wyświetlaną łączącym się z nim użytkownikom.

  • ServerIdent pozwala na wyświetlenie wiadomości powitalnej podczas połączenia, np. zawartości pliku .message. Domyślnie wyłączona.

  • ServerType ustawia tryb pracy demona ProFTPD

  • DeferWelcome Nie pokazuje wiadomości powitalnej dop�ki użytkownik się nie zautoryzuje.

  • DefaultServer Określamy konfigurację jako domyślną

  • DefaultRoot Wyznaczamy nadrzędny dla każdego użytkownika katalog spoza kt�rego nie będzie m�gł wyjść. W listingu powyżej będzie to katalog domowy.

Poniżej znajduje się szereg zakomentowanych opcji pozwalających na konfigurację połączeń bezpieczną metodą przy użyciu SSL. Jeżeli jesteś zainteresowany ich użyciem powinieneś zapoznać się z dokumentacją on line serwera ProFTPD. Przechodzimy teraz do dalszej konfiguracji.

Port                            21
Umask                           022
User                            ftp
Group                           ftp
AuthPAMAuthoritative            on
  • Port Definiujemy tutaj port na kt�rym serwer będzie oczekiwał nadchodzących połączeń

  • Umask Tryb umask 022 jest typowym standardem dla ogolnie dostępnych plik�w i katalog�w

  • User Konto użytkownika na kt�rego uprawnieniach pracuje usługa

  • Group Grupa do kt�rej należy konto użytkownika usługi

  • AuthPAMAuthoritative Dajemy możliwość autoryzacji użytkownik�w poprzez moduł PAM jeśli jest to możliwe.

Przedstawione tutaj wartości poszczeg�lnych opcji są domyślnie ustawiane w pliku konfiguracyjnym w trakcie instalacji pakietu. Jak najbardziej możesz z nich korzystać. Na pewno nie powinieneś zmieniać takich ustawień jak użytkownik czy grupa, port oraz spos�b autoryzacji.

Konfiguracja dostępu

<Directory />
	AllowOverwrite          on
</Directory>

Zezwalamy na nadpisywanie plik�w w obrębie katalogu do kt�rego użytkownik się zaloguje. Poniżej w pliku znajduje się przykładowa konfiguracja dla użytkownika anonimowego. Sekcja mieści się wewnątrz znacznika <Anonymous ~ftp></Anonymous>. Poniższy wykaz omawia najczęściej wykorzystywane dyrektywy w tej sekcji.

User			ftp
Group			ftp
AnonRequirePassword	off
RequireValidShell	off
  • User - konto użytkownika kt�rego prawa będzie uzyskiwała osoba logująca się do serwera

  • Group - grupa do kt�rej należy powyższe konto.

  • AnonRequirePassword - w powyższym przykładzie wyłączona. Umożliwia użytkownikom anonimowym logowanie się bez hasła.

  • RequireValidShell - opcja ta powoduje, że ProFTPD nie sprawdza czy dany użytkownik, kt�ry się loguje posiada przypisaną w /etc/shells powłokę.

UserAlias		anonymous ftp
MaxClients		10
DisplayLogin		welcome.msg
DisplayFirstChdir	.message
AllowStoreRestart 	on
  • UserAlias - przyporządkowuje nazwę użytkownika do systemowego konta. W przykładzie anonymous został przypisany kontu ftp.

  • MaxClients - ilość jednoczesnych połączeń anonimowych kt�re będą realizowane przez serwer.

  • DisplayLogin - określamy plik kt�rego zawartość będzie wyświetlana po starcie.

  • DisplayFirstChdir - plik kt�rego zawartość będzie wyświetlana po pierwszym wejściu do katalogu.

  • AllowStoreRestart - pozwala klientom wznawiać upload.

<Limit WRITE>
	DenyAll
</Limit>

Zabraniamy klientom pisania do katalogu /home/services/ftp/pub.

<Directory /home/services/ftp/pub/Incoming>
	<Limit READ>
		DenyAll
	</Limit>
	<Limit WRITE>
		AllowAll
	</Limit>
	<Limit STOR>
		AllowAll
	</Limit>
</Directory>

Katalogowi Incoming zostały precyzyjnie określone prawa dostępu. W powyższym przykładzie każdy ma dostęp do zapisu w tym katalogu natomiast nikt nie posiada prawa do jego odczytywania.

Zakończenie

Dostęp do serwera ftp możemy ograniczać na kilka sposob�w. Można limitować ilość jednoczesnych połączeń, stworzyć listę adres�w IP, kt�re będą miały prawo do zapisu czy odczytu określonych katalog�w.

Na tym zakończymy podstawową konfigurację serwera ProFTPD. Więcej informacji na jego temat znajdziesz na stronach z jego dokumentacją.

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ędą pakiety: samba™ i samba-clients™. Znaczenie poszczeg�lnych pakiet�w:

  • samba™ - pakiet ten zawiera serwer samby

  • samba-clients™ - zestaw narzędzi przydatnych w poruszaniu się w środowisku Microsoft Networks.

Proces instalacji pakiet�w przedstawiony został w dziale Zarządzanie pakietami.

Konfiguracja

Przy użyciu dowolnego edytora otwieramy plik /etc/samba/smb.conf. Całą konfigurację należy wykonać w sekcji [global]. Przyjęta w nim została następująca konwencja: <opcja> = <wartość>. Jeżeli dana opcja ma kilka wartości, oddziela się je znakiem spacji. Poszczeg�lne opcje umieszczane są w osobnych liniach. Komentarze w pliku rozpoczynają się znakiem "#" lub ";". Poniżej znajduje się wykaz najważniejszych opcji kt�re należy ustawić podczas realizacji zadania.

workgroup = DOM
server string = File Server
announce as = NT Server	

Ustawiamy nazwę domeny kt�rej członkiem będzie nasz serwer oraz opcjonalnie komentarz (opis) komputera i typ serwera (opcjonalnie).

domain logons = yes
domain master = yes
preferred master = yes
local master = yes
wins support = yes
os level = 255

Ustawiamy logowanie do domeny oraz bycie kontrolerem domeny Windows NT4 i głï¿½wną przegladarką komputer�w w sieci.

security = user

Określamy poziom bezpieczeństwa. Nasza konfiguracja wymaga ustawień zabezpieczeń na poziomie użytkownika.

nt acl support = yes
nt pipe support = yes

Ustawiamy

time server = yes

Ustawiamy bycie serwerem czasu (opcjonalnie).

Następnie restartujemy SAMBĘ i przystępujemy do dalszej konfiguracji. W bazie użytkownik�w Samby musi znaleźć się konto administratora. Będzie ono wymagane przy dołączaniu stacji klienckich do domeny.

# smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root.

Hasło roota Samby nie powinno być identyczne z hasłem administratora systemu! następnie tworzymy konta użytkownik�w - podobnie jak przy zwykłym serwowaniu plik�w, tak i tutaj potrzebujemy nie tylko wpisu w bazie Samby, ale i konta uniksowego.

# useradd -g users jurek

Pamiętajmy też o utworzeniu wpisu w bazie użytkownik�w Samby:

# smbpasswd -a jurek

następnie ustawiamy mapowanie grup w linux na odpowiednie grupy windows-a, poleceniem net groupmap. Domyślne ustawienia Samby (mapowanie na uniksową grupę -1) wymaga zmiany, kt�rą wprowadzi polecenie net groupmap add:

# net groupmap add ntgroup="Domain Admins" unixgroup=domadmin type=d
Updated mapping entry for Domain Admins

Podobnie modyfikujemy wpisy dla grup Domain Users - decydując się na wyb�r grupy users oraz Domain Guests - nobody: net groupmap.

# net groupmap add ntgroup="Domain Users" unixgroup=users type=d
Updated mapping entry for Domain Users
# net groupmap add ntgroup="Domain Guests" unixgroup=nobody type=d
Updated mapping entry for Domain Guests
# net groupmap add ntgroup="Users" unixgroup=users type=d
Add mapping entry for Users

Sprawdźmy, czy zmiany będą widoczne:

# net groupmap list
...
Domain Admins (S-1-5-21-353545269-2518139598-3611003224-512) -> domadmin
Domain Users (S-1-5-21-353545269-2518139598-3611003224-513) -> users
Domain Admins (S-1-5-21-353545269-2518139598-3611003224-514) -> nobody
Users (S-1-5-21-353545269-2518139598-3611003224-3001) -> users
.. 

Praca komputera w domenie wymaga założenia mu konta - tzw. Machine Trust Account. Jest to specyficzne konto, gdyż jego hasło ustalane jest przy podłączaniu komputera do domeny i znane tylko parze klient-serwer. Dzięki temu istnieje możliwość sprawdzenia tożsamości pr�bującego się logować komputera - nawet gdy ktoś dołączy maszynę o tej samej nazwie, to nie powinien uzyskać możliwości dostępu do domeny. Nazwy kont odpowiadają nazwom NetBIOS komputer�w, ale z dołączonym na końcu symbolem dolara. Dla stacji biuro będzie to więc biuro$. Konto to powinno być zablokowane, by niemożliwe było uzyskanie dostępu poprzez ssh, czy też inne usługi systemu operacyjnego. Nie jest także konieczny katalog domowy, w zamian za to zdecydujemy się na umieszczenie kont w grupie machines - pozwoli to w jakimś stopniu ogarnąć szybko zwiększającą się liczbę użytkownik�w systemu serwera.

# groupadd machines
# useradd -c "Komputer biurowy" -g machines -d /dev/null -s /bin/false biuro$
# passwd -S biuro$
Password locked.

Wydaje się, że powinniśmy teraz utworzyć odpowiedni wpis w bazie haseł Samby - nie jest to jednak konieczne. Przy pr�bie podłączenia komputera do domeny czynność ta zostanie wykonana automatycznie. Gdy jednak zajdzie potrzeba ręcznego utworzenia wpisu, do wywołania smbpasswd dodać musimy parametr -m (machine):

# smbpasswd -a -m ksiegowosc

W tym przypadku nie podajemy symbolu $. Oczywiście cały proces dodawania kont maszyn można zautomatyzować w tym celu należy dodać do /etc/samba/smb.conf:

add machine script = /usr/sbin/useradd -d /var/lib/nobody -g machines -c 'Konto Maszyny %I' -s /bin/false %u 
passwd chat debug = no
passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*
passwd program = /usr/bin/smbpasswd -L -a %u

i oczywiście utworzyć katalog /var/lib/nobody

# mkdir /var/lib/nobody
 

należy sie też upewnić czy nie mamy w smb.conf wpisu

# kto nie moze sie logowac do samby
invalid users = root
 

Aby dodać Windows XP Profesional lub Microsoft Windows NT Server 4.0 Standard Edition (wersja Home nie obsługuje modelu domenowego w żaden spos�b) należy w rejestrze zmienić:

REGEDIT4

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\netlogon\parameters

"RequireSignOrSeal"=dword:00000000

lub z poziomu Local Group Policy wyłączając (Disabled) Security Options | Domain Member | Digitally encrypt or sign secure channel data (always)

wiecej:

/usr/share/doc/samba-doc/Registry/WinXP_SignOrSeal.reg

Brian Getsinger (Apple Corp). Mac OS X Server Samba Primary Domain Controller Configuration http://www.afp548.com/Articles/system/sambapdc.html Sherlock Error logging a Win XP machine into a domain running Samba.

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. Zaletą takiej konfiguracji jest możliwość budowania polityki praw dostępu do zasob�w zgromadzonych na serwerze w oparciu o konta użytkownik�w lokalnego serwera PDC.

Instalacja

Do realizacji tego zadania potrzebne będą trzy pakiety: samba™, samba-clients™ oraz samba-winbindd™. Znaczenie poszczeg�lnych pakiet�w:

  • samba™ - pakiet ten zawiera serwer samby

  • samba-clients™ - zestaw narzędzi przydatnych w poruszaniu się w środowisku Microsoft Networks.

  • samba-winbindd™ - demon pozwalający na pobieranie uprawnień z serwera PDC.

Proces instalacji pakiet�w przedstawiony został w dziale Zarządzanie pakietami.

Konfiguracja

Przy użyciu dowolnego edytora otwieramy plik /etc/samba/smb.conf. Całą konfigurację z kt�rej będzie r�wnież korzystał demon winbindd™ należy wykonać w sekcji [global]. Przyjęta w nim została następująca konwencja: <opcja> = <wartość>. Jeżeli dana opcja ma kilka wartości, oddziela się je znakiem spacji. Poszczeg�lne opcje umieszczane są w osobnych liniach. Komentarze w pliku rozpoczynają się znakiem "#" lub ";". Poniżej znajduje się wykaz najważniejszych opcji kt�re należy ustawić podczas realizacji zadania. Wykraczają one nieco poza czystą konfigurację winbindd™ ale są konieczne do jego prawidłowego działania.

workgroup = DOM
server string = File Server

Ustawiamy nazwę domeny kt�rej członkiem będzie nasz serwer oraz opcjonalnie komentarz (opis) komputera.

security = domain

Określamy poziom bezpieczeństwa. Nasza konfiguracja wymaga ustawień zabezpieczeń typu domenowego.

password server = PDC

Nazwa netbiosowa serwera PDC. To z tego właśnie serwera demon winbind będzie pobierał uprawnienia.

To tyle, jeżeli chodzi o og�lną konfigurację samby. Teraz czas na dodanie kilku opcji potrzebnych winbindowi.

winbind separator = +
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
client signing = yes
  • winbind separator - znak, kt�rym oddzielana będzie nazwa użytkownika bądź grupy od nazwy domeny. Np. "DOM+jan"

  • idmap uid - zakres uid�w w systemie zarezerwowanych na użytkownik�w domenowych

  • idmap gid - zakres gid�w w systemie przeznaczonych na grupy domenowe

Na tym możemy zakończyć edycję pliku konfiguracyjnego samby. Aby nasza konfiguracja stała się aktywna musimy przerestartować usługę.

/etc/rc.d/init.d/smb restart

W ślad za usługą smb™ zostaną przerestartowane także nmbd™ oraz interesujący nas winbindd™. Czynnością kt�rą musimy bezwzględnie wykonać jest podłączenie naszego serwera do domeny. Aby to uczynić wykonujemy poniższe polecenie:

# net rpc join -S PDC -U Administrator%hasło
Joined the domain DOM

Jeżeli w tym momencie miałbyś problemy ze skomunikowaniem się z serwerem domeny możesz dodać do polecenia opcję -I a po niej adres IP serwera PDC. Po pomyślnej operacji podłączenia możemy sprawdzić działanie winbinda.

# wbinfo -g
DOM+Administrator
DOM+Basia
DOM+Darek
...
# wbinfo -g
DOM+Domain Admins
DOM+Domain Users
...

Opcja -u pokazuje listę użytkownik�w, natomiast -g listę grup.

Jeżeli wynik obu poleceń wygląda podobnie jak na listingu oznacza to, że winbind pracuje poprawnie.

Zakończenie

Jakie korzyści płyną z takiej konfiguracji samby? Ot�ż sprawdza się ona w środowisku sieciowym w kt�rym zasoby udostępniają zar�wno serwery pracujące pod kontrolą Windows jak i linuksa. Pozwala to na budowanie sp�jnej polityki bezpieczeństwa w oparciu o uwierzytelnianie użytkownika na poziomie domeny. Drugą z zalet jest prostota w implementacji. Dzięki winbindd™ dostęp do grup oraz użytkownik�w domenowych odbywa się w taki sam spos�b jak do ich odpowiednik�w lokalnych.

# chown DOM+Administrator.DOM+Domain\ Users plik.txt

Snort - Sieciowy System Wykrywania Włamań

Snort to bardzo silny sieciowy system wykrywania atak�w (ang. Network Intrusion Detection System, NIDS), kt�ry daje szeroki zakres mechanizm�w detekcji, mogących w czasie rzeczywistym dokonywać analizy ruchu i rejestrowania pakiet�w w sieciach opartych na protokołach IP/TCP/UDP/ICMP. Potrafi przeprowadzać analizę strumieni pakiet�w, wyszukiwać i dopasowywać podejrzane treści, a także wykrywać wiele atak�w i anomalii, takich jak przepełnienia bufora, skanowanie port�w typu stealth, ataki na usługi WWW, SMB, pr�by wykrywania systemu operacyjnego i wiele innych.

Wymagania

Przed instalacją Snorta warto zaopatrzyć się w bazę danych (w opisie wykorzystano MySQL™) i serwer Apache™ z obsługą PHP™. W bazie będą składowane logi, a za wygodny interfejs do przeglądania alarm�w posłuży ACID™ (ang. Analysis Console for Intrusion Databases).

Instalacja Snorta i ACID

Gdy mamy już bazę danych i serwer WWW z PHP, instalujemy następujące pakiety.

# poldek -i snort acid

Przed konfiguracja środowiska NIDS zakładamy dwie bazy, dla Snorta i dla archiwum alarm�w.

# mysql -u mysql -p
Enter password:
mysql> create database snort_log;
Query OK, 1 row affected (0.01 sec)
mysql> create database snort_archive;
Query OK, 1 row affected (0.01 sec)
mysql> quit

Dodajemy tabele w taki sam spos�b dla obu baz.

# gzip -d /usr/share/doc/snort-{wersja}/create_mysql.gz
# mysql -D snort_log -u mysql -p < \
    /usr/share/doc/snort-{wersja}/create_mysql
# gzip -d /usr/share/doc/acid-{wersja}/create_acid_tbls_mysql.sql.gz
# mysql -D snort_log -u mysql -p < \
    /usr/share/doc/acid-{wersja}/create_acid_tbls_mysql.sql

# mysql -D snort_archive -u mysql -p < \
    /usr/share/doc/snort-{wersja}/create_mysql
# mysql -D snort_archive -u mysql -p < \
    /usr/share/doc/acid-{wersja}/create_acid_tbls_mysql.sql

Następnie (najprościej przy użyciu popularnego narzędzia phpMyAdmin™) tworzymy użytkownika i nadajemy mu prawa dla stworzonych baz.

Przechodzimy do edycji pliku /etc/acid_conf.php, w kt�rym dodajemy parametry dla połączenia się z bazami.

[...]
/* Alert DB connection parameters */
[...]
$alert_dbname   = "snort_log";
$alert_host     = "localhost";
$alert_port     = "3306";
$alert_user     = "login";
$alert_password = "haslo";

/* Archive DB connection parameters */
$archive_dbname   = "snort_archive";
$archive_host     = "localhost";
$archive_port     = "3306";
$archive_user     = "login.;
$archive_password = "haslo";
[...]

Teraz strona z interfejsem jest dostępna pod adresem http://twoje_ip/acid. Oczywiście dla bezpieczeństwa zalecane jest zastosowanie protokołu SSL do komunikacji z zasobem i autoryzacji poprzez pakiet apache-mod_auth.

Snort zależnie od środowiska w jakim działa może generować dużą ilość zbędnych alert�w, te bardziej istotne można przenosić do drugiej bazy za pomocą ACID, dla przejrzystości og�łu.

Konfiguracja Snorta

Do działania jako sieciowy system wykrywania włamań, Snort potrzebuję sprecyzowania zasad funkcjonowania całości w głï¿½wnym pliku konfiguracyjnym snort.conf. W starszych wersjach systemu, wszystkie opcje, łącznie z regułami atak�w znajdowały się w jednym pliku. Ciągła rozbudowa Snorta, rosnąca liczba sygnatur i og�lna funkcjonalność, wymusiła rozdzielenie niekt�rych części konfiguracyjnych, w tym reguł atak�w. Przejrzystość i sp�jność snort.conf została przywr�cona przy użyciu polecenia include, kt�rym dołącza się odpowiednie zestawy sygnatur i inne części konfiguracyjne, np.:

include: ścieżka_do_pliku/nazwa

Bazy reguł charakteryzują się nazwą pliku z końc�wką .rules, pierwszy człon nazwy zawiera rodzaj usługi lub typ ataku, kt�rego dotyczy dany zestaw.

Pozostałymi plikami konfiguracyjnymi są:

  • classification.config - zawierający klasyfikatory rodzaj�w atak�w z nadanym priorytetem zagrożenia, tak jak poniżej:

    config classification: web-application-attack,Web Application Attack,1
  • reference.config - posiadający skr�ty adres�w do stron organizacji z bazą opis�w atak�w, np.:

    config reference: bugtraq http://www.securityfocus.com/bid/
  • threshold.conf - metody łagodzenia licznych, fałszywych alarm�w,

  • unicode.map - zestaw kodowanych znak�w unicode, na potrzeby preprocesora http_inspect.

Głï¿½wny plik konfiguracyjny można podzielić na cztery sekcje. Pierwsza, odpowiedzialna jest za ustalanie zmiennych var, wykorzystywanych w składni reguł atak�w.

Przyjmijmy że docelowo Snort ma monitorować dwie podsieci o adresach 192.168.1.0/24 i 192.168.2.0/24, jego pliki konfiguracyjne znajdują się bezpośrednio w katalogu /etc/snort, a regułki w /etc/snort/rules.

# Adres sieci lokalnej
var HOME_NET [192.168.1.0/24,192.168.2.0/24]
# Adres sieci zewnetrznej
var EXTERNAL_NET !$HOME_NET
# Lista adresow serwerow znajdujacych sie w strefie chronionej
var DNS_SERVERS $HOME_NET
var SMTP_SERVERS $HOME_NET
var HTTP_SERVERS $HOME_NET
var SQL_SERVERS $HOME_NET
var TELNET_SERVERS $HOME_NET
var SNMP_SERVERS $HOME_NET
# Lista portow
var HTTP_PORTS 80
var SHELLCODE_PORTS !80
var ORACLE_PORTS 1521
# Lista serwerow czat, komunikatorow
var AIM_SERVERS [64.12.24.0/24,64.12.25.0/24,64.12.26.14/24,64.12.28.0/24,]
# Scieżka do katalogu z regulami atakow
var RULE_PATH /etc/snort/rules

W tej samej sekcji znajduje się zestaw parametr�w uruchomieniowych, zaczynających się od wyrażenia config (pełna ich lista znajduję się w dokumentacji):

# wybor interfejsu do nasłuchu (jeden demon Snorta moze 
# obslugiwac tylko jeden interfejs sieciowy) 
config interface: eth0

Druga część głï¿½wnego pliku konfiguracyjnego, zawiera ustawienia preprocesor�w. Parametry domyślne nie będą przedstawione w poniższym opisie. Kompletną listę opcji, można znaleźć w dokumentacji Snorta. Oto przykłady ustawień preprocesor�w:

Frag2:

# detect_state_problems . zwraca alarm przy pokrywaniu sie fragmentow.
preprocessor frag2: detect_state_problems

Stream4, Stream4_reassemble:

# disable_evasion_alerts - brak alarmow przy nakladaniu sie 
#pakietow TCP, detect_scans - detektor prob cichego skanowania,
# detect_state_problems - detektor nienaturalnego zachowania
# pakietow.
preprocessor stream4: disable_evasion_alerts \
    detect_scans detect_state_problems
# both - skladanie sesji TCP w obu kierunkach pomiedzy 
# klientem i serwerem,
# ports - lista portow, na ktorych ma dzialac reasemblacja.
preprocessor stream4_reassemble: both ports [ 21 25 80 143 110 ]

Http_inspect:

# iis_unicode_map - wskazuje plik z kodowaniem unicode i wybiera standardowe.
preprocessor http_inspect: global is_unicode_map unicode.map 1252
# profile - wybor profilu ustawien dla serwerow typu iis, apacze i all.
preprocessor http_inspect_server: server adres_IP_serwera_MS_IIS \
	profile iis \
	ports { 80 }
preprocessor http_inspect_server: server adres_IP_serwera_Apache \
	profile apache \
	ports { 80 }

Powyższy przykład przedstawia możliwość profilowania ustawień dla poszczeg�lnych serwer�w, kt�re podlegają ochronie. Serwery IIS i Apache, pracują w odmienny spos�b, a zarazem posiadają inne słabe punkty wykorzystywane podczas atak�w. Operacja dostosowania ustawień skupia mechanizmy ochronne na odpowiednich metodach atak�w dla danego typu serwera bądź ich grupy w danej sieci objętej ochroną.

RPC_decode, Back Orfice, Telnet_decode, Arpspoof, Performance Monito:

# alert_fragments . wlacza alarm, przy fragmentowaniu pakietow RPC,
# Domyślne porty: 111 i 32771.
preprocessor rpc_decode: 111 32771 alert_fragments
preprocessor bo
preprocessor telnet_decode
preprocessor arpspoof
preprocessor arpspoof_detect_host: adresy_IP \
    przypisane_do_nich_adresy_MAC
# console . wyswietlanie statystyk na ekranie,
# flow i events . statystyki badanego ruchu i ilosci dopasowanych
# regul,
# time . aktualizacja danych co 10s.
preprocessor perfmonitor: console flow events time 10

Flow i Flow-portscan:

# stats_interval . zapisywanie statystyk, 0 - wylaczone,
# hash . wybor metody mieszania.
preprocessor flow: stats_interval 0 hash 2
# server-watchnet . adresy IP, na ktorych flow bedzie
# prowadzic badania,
# server-learning-time . czas utrzymania punktow dla danego adresu IP,
# server-scanner-limit . ilosc zapytan decydujacych o przyznaniu
# statusu
#                        skanowania z danego adresu,
# src-ignore-net, dst-ignore-net . lista ignorowanych adresow docelowych
#                                  i zrodlowych.
preprocessor flow-portscan: \
	server-watchnet [xxx.xxx.xxx.xxx/xx] \
	server-learning-time 14400 \
	server-scanner-limit 10 \
	src-ignore-net [xxx.xxx.xxx.xxx/xx, xxx.xxx.xxx.xxx/xx] \
	dst-ignore-net [xxx.xxx.xxx.xxx/xx]

Trzecia sekcja snort.conf, zawiera metody konfiguracji modułï¿½w wyjściowych, czyli r�żnych sposob�w logowania wynik�w i tzw. akcji reguł. Na potrzeby tego opisu wymieniony będzie tylko przykład logowania do bazy MySQL.

output database: alert, mysql, user=login password=haslo \ 
dbname=snort_log host=127.0.0.1

Za pomocą reguł akcji można tworzyć własne rodzaje reakcji na wykryte zdarzenie, np.:

ruletype czerwony_alarm
 {
	type log
	# zapis do demona syslogd, lokalnie
	output alert_syslog: LOG_ALER
 }
# Przykladowa regula:
czerwony_alarm $HOME_NET any -> $HOME_NET 6667 (msg:"Internal \
    IRC Server";)

Czwarta, ostatnia część, głï¿½wnego pliku konfiguracyjnego, zawiera odniesienia do zestaw�w reguł i wcześniej już opisanych plik�w, classification.config, reference.config, threshold.conf (przykład poniżej).

include classification.config
include reference.config

include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/rpc.rules
include $RULE_PATH/dos.rules
(...)
# dodatkowy zestaw regul Bleeding Snort - 
# http://www.bleedingsnort.com
include $RULE_PATH/bleeding.rules
include threshold.conf

Dostosowanie Snorta do swoich potrzeb obejmuje, obok konfiguracji preprocesor�w przede wszystkim decyzje, jakie zbiory reguł mają być brane pod uwagę (czyli jakie pliki z regułami mają być dołączane za pomocą polecenia include). W środowisku, w kt�rym wszystkie serwery WWW to Apache, reguły chroniące serwer IIS będą generowały zupełnie niepotrzebne alarmy. Jeśli nie udostępniamy FTP, reguły opisujące ataki na tę usługę będą tylko spowalniały pracę całego systemu. To sprawy oczywiste, jednak właściwe dostosowanie NIDS do swoich potrzeb wymaga wiele pracy. Dobranie odpowiednich dla danego środowiska reguł jest kluczowe dla działania całego systemu, duża ilość fałszywych alarm�w nie tylko zużywa zasoby (każda z reguł musi być przecież przeanalizowana), ale może r�wnież bardzo skutecznie "zaciemnić" obraz, sprawiając, że prawdziwy atak może przejść niezauważony w zalewie informacji mało istotnych. Obecna baza sygnatur liczy sobie około 2500 reguł i jest praktycznie każdego dnia wzbogacana o nowe opisy atak�w. Dla przybliżenia występujących w bazie kategorii sygnatur, opiszę jakiego rodzaju ataki wykrywają:

  • attack-responses - odpowiedzi usług na pr�bę ataku;

  • backdoor - działalność tzw. tylnych drzwi, trojan�w, rootkit�w;

  • bad-traffic - nieprawidłowy ruch, np. na port 0;

  • chat - aktywność r�żnego rodzaju komunikator�w;

  • ddod, dos - zmasowane ataki Distributed Denial of Service (rozproszony atak typu - blokada usługi);

  • deleted - reguły przestarzałe, wykasowane;

  • dns - ataki na usługę Domain Name System;

  • experimental - zestaw eksperymentalnych reguł;

  • exploit - programy mające na celu wykorzystywanie błęd�w w oprogramowaniu;

  • icmp-info, icmp - komunikaty ICMP z r�żnych program�w, testujących ruch;

  • imap, pop2, pop3, smtp - ataki na systemy pocztowe;

  • info - pr�by logowania na usługi Telnet, Ftp;

  • local - zestaw własnych reguł;

  • misc - r�żne, dotyczące usług CVS, MS Terminal, BOOT, UPnP itd.;

  • multimedia - strumienie audio, wideo;

  • mysql, sql, oracle - ataki na znane serwer baz danych;

  • netbios - anomalia związane z protokołem Netbios/SMB;

  • nntp - ataki na serwer grup dyskusyjnych;

  • other-ids - działalność innych system�w IDS;

  • p2p - aktywność program�w Peer to Peer;

  • policy - pr�by atak�w na usługi policy ftp itp.

  • porn - aktywność stron pornograficznych;

  • rpc - ataki na usługi Remote Procedure Call;

  • finger, rservices, telnet - ataki na dość słabo zabezpieczone usługi uniksowe: finger, rlogin, rsh, rexec, telnet;

  • scan - r�żnego rodzaju techniki skanowania port�w;

  • shellcode - wykorzystanie nieprawidłowego kodu do pr�b przepełnienia bufora;

  • snmp - ataki na usługi SNMP;

  • tftp, ftp - zdarzenia związane z przesyłaniem plik�w poprzez serwer ftp;

  • virus - transfer poczty z podejrzanym załącznikiem;

  • web-attacks, web-misc, web-client, web-cgi, web-php, web-coldfusion, web-frontpage, web-iis - ataki na r�żnego typu serwery WWW, przeważnie z wykorzystaniem błęd�w w skryptach cgi, php;

  • x11 - aktywności sesji serwera XFree86.

Aktualizacja reguł

Do aktualizacji sygnatur posłuży nam perlowy skrypt Oinkmaster. Ma on duże możliwości kt�re pozwalają w prosty spos�b zarządzać regułami Snorta. Wymagane pakiety do uruchomienia to: perl, perl-base, perl-modules i vixie-cron albo hc-cron .

Instalacja Oinkmaster

Ściągamy archiwum tar, rozpakowujemy, skrypt wgrywamy do katalogu /usr/local/bin, a konfig do /etc:

# wget --passive-ftp \
ftp://ftp.it.su.se/pub/users/andreas/oinkmaster/oinkmaster-1.0.tar.gz
# tar -zxvpf oinkmaster-1.0.tar.gz
# cp oinkmaster-1.0/oinkmaster.pl /usr/local/bin/
# cp oinkmaster-1.0/oinkmaster.conf /etc/

Operacja aktualizacji odbywa się po następującej sekwencji komend:

# /usr/local/bin/oinkmaster.pl -o /etc/snort/rules/

Dodanie innego źr�dła reguł:

# /usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ -q -u \
http://www.bleedingsnort.com/bleeding.rules.tar.gz

Aby aktualizacja odbywała się automatycznie, w katalogu /etc/cron.daily tworzymy plik uprules.

# touch /etc/cron.daily/uprules
# chmod 700 /etc/cron.daily/uprules

I dodajemy do niego następującą zawartość, podając adres e-mail na kt�ry ma zostać wysłany raport z codziennej aktualizacji jeśli pojawia się coś nowego:

TMP=`mktemp /tmp/oinkmaster.XXXXXXXX` &&
(/usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ \
    -q > $TMP 2>&1;
if [ -s $TMP ]; then mail -s "Update Snort Rules" root@twoja_domena < $TMP; fi;
rm $TMP)

# dodatkowy zestaw regul Bleeding Snort - http://www.bleedingsnort.com
TMP=`mktemp /tmp/oinkmaster.XXXXXXXX` &&
(/usr/local/bin/oinkmaster.pl -o /etc/snort/rules/ -q -u \
http://www.bleedingsnort.com/bleeding.rules.tar.gz > $TMP 2>&1;
if [ -s $TMP ]; then mail -s "Update Bleeding Rules" \
    root@twoja_domena < $TMP; fi; rm $TMP)

/etc/rc.d/init.d/snort restart

Warto przyjżeć się bliżej ciekawym funkcjonalnościom oinkmastera. W pliku konfiguracyjnym mamy możliwość wyłączania poszczeg�lnych regułek po nr sid, dodawania do nich własnych modyfikacji itp. Wtedy jest pewność że po aktualizacji, nasze zmiany w plikach reguł nie będą nadpisywane.

Architektura Snorta

Snort jest logicznie podzielony na kilka komponent�w, kt�re wsp�łpracują ze sobą by wykrywać ataki i generować wyniki w odpowiednim formacie. Głï¿½wnymi składnikami systemu są: dekoder pakiet�w (sniffer), preprocesory, silnik detekcji i moduł wyjściowy.

W swej najprostszej formie Snort może działać jako sniffer. Przechwytuje pakiety z warstwy łącza danych za pomocą biblioteki pcap. Rozpoznaje r�żne protokoły modelu OSI - Ethernet, 802.11, Token Ring oraz wiele protokołï¿½w działających w wyższych warstwach jak: IP, TCP, UDP i ICMP. Surowe pakiety z warstwy łącza danych (np. ramki Ethernetowe) po zdekodowaniu wądrują do preprocesor�w (warstwa transportowa), gdzie są testowane i w razie konieczności obrabiane na potrzeby silnika detekcji (warstwa sesji). Tam dokonywana jest analiza pakiet�w pod kątem zbioru zadanych reguł. Następnie po wykryciu pr�by ataku bądź anomalii sieciowych, system przekazuje odpowiednie dane do modułu wyjściowego, kt�ry to decyduje o zapisaniu wyniku wykrycia w logach lub wszczęciu alarmu.

Tryby pracy

Snort umożliwia dużą swobodę konfiguracji, za pomocą wielu parametr�w, kt�re pozwalają kontrolować trzy podstawowe tryby pracy programu: sniffer, packet logger i network intrusion detection.

  • Sniffer Mode - wychwytuje wszystkie pakiety w danym segmencie sieci i przedstawia ich zawartość na ekranie. Najprostszym sposobem użycia tego trybu jest uruchomienie programu z parametrem -v w wyniku, czego Snort będzie wyświetlać informacje o nagłï¿½wkach IP, TCP/UDP/ICMP. Do uzyskania bardziej szczeg�łowych danych o wychwyconych pakietach, służą parametry -d (aby monitorować ładunek pakiet�w) i -e (dodatkowe nagłï¿½wki warstwy łącza danych). Parametry można łączyć razem, bez znaczenia jest ich kolejność (np. snort -ved). Aby zakończyć pracę w tym trybie należy użyć sekwencji klawiszy CTRL+C.

  • Packet Logger Mode - logowanie pakiet�w poprzez zapis na dysku. Czynność ta odbywa się po użyciu opcji -l, kt�rą wskazujemy katalog, gdzie Snort będzie zapisywać w odpowiednio nazwanych podkatalogach i plikach, zawartość zebranych pakiet�w. Program potrafi także zapisywać dane w formie binarnej tak jak robi to znany sniffer tcpdump™. Służy do tego opcja -b, po jej użyciu nie trzeba stosować dodatkowych kombinacji parametr�w -ved, ponieważ format tcpdump, określa to, co ma być logowane (np. snort -b -l ./log). Uzyskane w ten spos�b informacje, można wykorzystać do p�źniejszej analizy za pomocą program�w rozpoznających format binarny tcpdump (np. Ethereal™). Oczywiście można tą samą czynność wykonać z wykorzystaniem Snorta, używając opcji -r, po czym przetworzyć sczytane pakiety dostępnymi trybami. Snort czytając swoje dzienniki (tak samo działając w trybie sniffera) przyjmuje parametry w formacie BPF (Berkeley Packet Filter), dzięki kt�rym możemy sprecyzować (na podstawie nagłï¿½wk�w), jakie konkretnie pakiety chcemy obserwować (np. określić adres hosta, protok�ł, port). Jeśli np. interesuje nas tylko ruch na porcie 80 można uruchomić Snorta poleceniem: snort -r /var/log/snort/snort.log port www, jeśli chcemy wyświetlić tylko odpowiedzi serwera www: snort -vde src port www. Aby ignorować cały ruch z sieci np. 192.168.1.0 na port 80: snort -vde not ( src net 192.168.1 and dst port 80). Połączenie Snorta z filtrami BPF znacznie zwiększa wydajność całego systemu, gdyż filtrowanie BPF odbywa się w warstwie łącza danych (a więc na poziomie biblioteki pcap). Określając w ten spos�b, jakie pakiety nas interesują (lub jakie chcemy zignorować) można dość dokładnie "zawęzić" obszar poszukiwań. Filtry BPF można r�wnież zapisać w oddzielnym pliku i załadować w trakcie uruchamiania Snorta parametrem -F: snort -r snort.log -F plik_z_bdf. Więcej na temat możliwości oferowanych przez BPF można poczytać na stronach podręcznika zar�wno Snorta, jak i Tcpdump.

  • Network Intrusion Detection Mode - sieciowy system wykrywania włamań. Jest najbardziej skomplikowanym trybem działania programu. Za pomocą parametru -c, wskazujemy plik konfiguracyjny, w kt�rym określane są zasady badania przechwyconego ruchu sieciowego, ustawienia preprocesor�w, a także zestaw sygnatur atak�w. Aby program działał w tle jako demon, należy użyć opcji -D (np. snort -d -D -c snort.conf). Reszta operator�w i ich opisy, jakie można wykorzystać przy starcie programu, przedstawia parametr -h.

Preprocesory

Preprocesory zostały wprowadzone do Snorta w wersji 1.5. Pozwalają użytkownikom i programistom w prosty spos�b na rozbudowę funkcjonalności całego systemu poprzez pisanie dodatkowych modułï¿½w (ang. plugins).

Preprocesory analizują pakiety przed wykorzystaniem ich przez silnik detekcji. W ten spos�b zwiększają możliwości całego procesu wykrywania atak�w sieciowych, wzbogacając go o zdolność składania (reasemblacji) pakiet�w, wykonywania specyficznych dla poszczeg�lnych protokołï¿½w operacji (np. konwersja na ASCII znak�w z URI zakodowanych szesnastkowo, usuwanie ciąg�w binarnych z sesji FTP czy Telnet, normalizacja żądań RPC), jak i wykrywania niezgodności z tymi protokołami.

Poniżej pokr�tce opiszemy standardowy zestaw preprocesor�w wchodzących w skład darmowej dystrybucji Snorta w wersji 2.1.3.

  • Frag2 - defragmentuje i normalizuje dane przychodzące w postaci fragment�w, co utrudnia ukrywanie atak�w prowadzonych za pomocą nieprawidłowo sfragmentowanych pakiet�w IP. W tym celu wykorzystuje ustalony przez użytkownika bufor pamięci, w kt�rej przez określony czas przetrzymuje do badania pakiety z tablicy stan�w połączeń. Im większa liczba sfragmentowanych pakiet�w tym wymagany jest większy bufor. Defragmentacja, układając datagramy IP w jedną całość, ułatwia dalszą analizę danych poprzez pozostałe preprocesory i silnik detekcji. Frag2 umożliwia wychwytywanie znanych atak�w wykorzystujących zniekształcenia fragment�w pakiet�w np. teardrop, fragroute.

  • Stream4 - rozwija model detekcji oparty na testowaniu pojedynczych pakiet�w umożliwiając śledzenie sesji (stanu połączenia) TCP i składanie (reasemblacji) strumieni TCP, co nie byłoby możliwe w mechanizmie opartym na wyszukiwaniu wzorc�w. Na tym poziomie działa także wykrywanie niekt�rych pr�b skanowania port�w, gdzie wymagane jest notowanie pr�b łączenia się z poszczeg�lnymi usługami w określonych odstępach czasu oraz wykrywanie pr�b oszukania Snorta za pomocą narzędzi takich, jak np. Stick lub Snot, kt�re generują pojedyncze (niewchodzące w skład poprawnych sesji TCP) pakiety mające za zadanie zalać mechanizm detekcji masą fałszywych alarm�w (są to pakiety budowane na losowo wybranych sygnaturach). Snort broni się przed takimi technikami wykorzystując stream4 preprocesor - losowe pakiety są dość łatwo identyfikowane (i ignorowane), ponieważ nie należą do prawidłowej sesji TCP. Stream4 wychwytuje pr�by skanowania technikami: stealth, null, xmas, fin; wykrywanie systemu operacyjnego - fingerprint i inne anomalia związane z protokołem TCP.

  • Flow i Flow-Portscan - posiada mechanizm śledzenia połączeń, zapisując całość do tablicy stan�w w celu dalszego przetwarzania. Na tej podstawie flow-portscan wykrywa pr�by skanowania w bardziej wyrafinowany spos�b niż preprocesory stream4 i portscan. Celem wykrywania, są skany z jednego hosta do wielu i z jednego hosta na wiele port�w. Flow-portscan prowadzi statystyki na podstawie punktacji r�żnych rodzaj�w połączeń, np. jeśli jakaś usługa jest popularna i na jej port przychodzi dużo zapytań, jednocześnie dostaje najmniej punkt�w w og�lnej skali. Preprocesor posiada bardzo wiele opcji za pomocą, kt�rych reguluje się skale punktacji, rozmiary tablicy wynik�w, tolerancję niepowtarzalności zdarzeń itp.

  • HTTP Inspect - jest og�lnym dekoderem protokołu HTTP na poziomie warstwy aplikacyjnej. Za pomocą ustalonego bufora wynajduje odpowiednią składnie HTTP i ją normalizuje. HTTP Inspekt działa w obydwu trybach jednocześnie: client requests (pol. zapytania klienta) i server responses (pol. odpowiedzi serwera). Mnoga liczba dostępnych opcji w konfiguracji preprocesora, umożliwia dostosowanie ustawień do konkretnego typu serwera WWW. Głï¿½wnymi zadaniami http_inspect jest przetwarzanie adres�w URI, konwertując na ASCII znaki zakodowane w postaci szesnastkowej. Utrudnia to ukrycie ataku przed modułem wykrywającym sygnatury atak�w przez zakodowanie typowych sekwencji. Dekoduje także znaki zakodowane jako Unicode, oraz wykrywa nielegalne kodowania, wykorzystywane m.in. w ostatnich dziurach MS IIS.

  • Portscan Detector - wykrywa pr�by skanowania port�w, polegające na przekroczeniu pewnej progowej liczby pr�b połączeń z r�żnymi portami w określonym przedziale czasu. Ze względu na brak możliwości uniknięcia fałszywych alarm�w w typowych przypadkach (np. obciążony serwer DNS), istnieje możliwość wyłączenia alarm�w wzbudzanych przez określone adresy IP używając dodatkowego procesora portscan-ignorehosts. Pozwala także, zapisać wyniki w oddzielnym pliku dziennika.

  • Telnet Decode - usuwa z sesji TELNET i FTP binarne ciągi mogące utrudnić wyszukiwanie z udziałem sygnatur atak�w.

  • RPC Decode - normalizuje żądania po protokole RPC, utrudniając ukrywanie podejrzanych pakiet�w za pomocą mniejszych operacji.

  • Back Orifice detektor - wyszukuje w pakietach UDP pr�by połączeń konia trojańskiego Back Orifice i pr�buje złamać zabezpieczające je słabe kodowanie.

  • Arpspoof - wykrywa podejrzane pakiety ARP, mogące sygnalizować pr�by ARP spoofingu.

  • Performance Monitor - udostępnia wszelkiego rodzaju statystyki liczbowe, odnośnie ilości przeanalizowanych pakiet�w, zużycia procesora itp. Całość wyświetlana jest na ekranie konsoli lub zapisywana do pliku, wg ustalonych wcześniej wartości.

Zar�wno preprocesory, jak i mechanizm detekcji mogą zareagować w określony spos�b. Po wychwyceniu pakiet�w, spełniających warunki nadane konfiguracją preprocesor�w lub regułami, podejmowane jest odpowiednie działanie (np. zapisanie pakiet�w bądź alarm).

Moduł sygnatur

Głï¿½wny mechanizm systemu detekcji zagrożeń polega na dopasowaniu przetworzonych pakiet�w i ich zrekonstruowanych strumieni z bazą sygnatur. System detekcji por�wnuje cechy pakietu ze zbiorem reguł. Po dopasowaniu, zostaje podjęta odpowiednia akcja. Do por�wnywalnych cech należą atrybuty głï¿½wne - adresy, porty źr�dłowe i docelowe oraz opcje pomocnicze: flagi TCP identyfikujące np. żądania związane z WWW, r�żne typy pakiet�w ICMP, opcje IP czy wreszcie sama treść pakietu. Na razie w głï¿½wnej części reguł możliwe jest śledzenie protokołï¿½w IP, ICMP, TCP i UDP. Autorzy przewidują rozszerzenie Snorta o następne protokoły sieciowe, m.in. IPX, GRE, czy protokoły wymiany informacji między routerami - RIP, OSPF oraz IGRP.

Reguły identyfikowania ataku pozwalają na podjęcie pięciu rodzaj�w akcji: przepuszczenia pakietu (pass), zapisania informacji do dziennika (log), ogłoszenia alarmu (alert), alarmowania i podjęcia do działania innej dynamicznej reguły (activate) i pozostanie w spoczynku do czasu aktywowania przez regułę activate, po czym działanie jako reguła log (dynamic).

Sygnatury Snorta zazwyczaj składają się z dw�ch głï¿½wnych sekcji - nagłï¿½wka i ciała (treści). Nagłï¿½wek określa m.in., jaką akcję należy podjąć po przypasowaniu reguły, informacje o wykorzystanym protokole, adresy bądź porty źr�dłowe i docelowe. Ciało reguły pozwala rozwinąć informacje zawarte w nagłï¿½wku, tu także podaje sią treść wzbudzanych alarm�w i r�żnego rodzaju informacje dodatkowe (np. odniesienia do bazy z opisami danego naruszenia, tzw. referencje - Bugtraq, CERT czy CVE).

Najprostsze sygnatury obejmują wskazanie akcji, protokołu, kierunku, adres�w i port�w będących przedmiotem obserwacji, jak np. poniższa reguła, stanowiąca reakcję na pr�bę skorzystania z usługi pop3 (port 110):

log tcp any any -> 192.168.1.0/24 110

W sygnaturach można umieszczać zmienne zdefiniowane jako adresy sieci (wg CIDR) lub porty zapisane w pliku konfiguracyjnym snort.conf:

log tcp $EXTERNAL_NET -> $HOME_NET 110

W podanych powyżej regułach wykorzystany był jednokierunkowy operator "->". Język sygnatur umożliwia zadeklarowanie reguły, kt�ry dopasuje pakiety poruszające się w obu stronach operatorem dwukierunkowym "<>", np.:

alert tcp any any <> $HOME_NET 23

Do zasadniczej części reguły można dodać ograniczone okrągłymi nawiasami pole opcjonalne (tzw. ciało), zawierające definicję bardziej złożonych i wyrafinowanych działań związanych z przejęciem danego pakietu. Użytkownik może także sformułować własny komunikat, np.:

log tcp $EXTERNAL_NET -> $HOME_NET 110 \
    ("msg: Proba polaczenia z pop3";)

Podjęte działania nie muszą być ograniczone do pojedynczej czynności. Średnik separuje deklaracje poszczeg�lnych działań, jak w poniższym przykładzie, w kt�rym opcją content testowana jest treść przesyłanego strumienia TCP, a w razie odnotowania podejrzanego ciągu znak�w generowany jest odpowiedni komunikat:

alert tcp any any -> 192.168.1.0/24 80 (content: "/cgi-bin/phf"; \
    msg: "PHF probe!";)

Opcji content można użyć nawet kilka razy w jednej regule. Pozwala to na wyszukiwanie wielu r�żnych ciąg�w znak�w w obrębie przesyłanych treści.

Warto nadmienić, iż do przeszukania treści pakiet�w i reasemblowanych strumieni używany jest obecnie najbardziej efektywny algorytm - Boyera-Moore'a, kt�rego wydajność rośnie wraz z długością poszukiwanych ciąg�w. Możliwość rekonstrukcji całych strumieni transmisji TCP, wglądu w warstwę aplikacyjną i efektywne wyszukiwanie treści pozwala na walkę przy użyciu Snorta r�wnież z zainfekowanymi załącznikami elektronicznych list�w. Opr�cz przeszukiwania treści pakiet�w możemy badać pod r�żnymi kątami ich nagłï¿½wki, m.in. pola i kody ICMP, pole TTL, rozmiary fragmentacji czy numery sekwencji.

Bardzo silną konstrukcją w regułach Snorta jest możliwość aktywowania kolejnych reguł po pierwszym dopasowaniu. Konstrukcja ta nosi nazwę activate/dynamic rules i wygląda w następujący spos�b:

activate tcp any any -> $HOME_NET 143 (flags: PA; content: \
"|E8C0FFFFFF|bin|;activates: 1; msg: "IMAP buffer overflow!";)
dynamic tcp any any -> $HOME_NET 143 (activated_by: 1; count: 50;)

Opcje activates i activated_by wiążą reguły activate i dynamic. W powyższym przykładzie wykrycie ataku typu buffer overflow na serwer IMAP powoduje uruchomienie kolejnej, dynamicznej reguły, kt�ra zbiera treść następnych 50 pakiet�w (opcja count) w celu p�źniejszej analizy. Druga opcja w reguły dynamicznej jest obligatoryjna - reguła zawierająca wyłącznie opcję dowiązania do innej, macierzystej konstrukcji jest bezużyteczna.

Następne godne uwagi parametry, to resp i react wspierają mechanizm elastycznego reagowania na atak. Opcja resp może doprowadzić do zerwania połączenia, np. poprzez wysłanie do atakującego komunikatu ICMP o niedostępności trasy do zaatakowanego komputera, natomiast react służy do blokowania dostępu do usług związanych z WWW.

Ciekawe projekty

  • Nessus - sieciowy tester bezpieczeństwa, przydatny do określania skuteczności skonfigurowanego przez nas Snorta.

  • SnortALog - skrypt Perlowy pozwalający na generowanie r�żnego rodzaju raport�w, graf�w i statystyk. Korzystając z log�w Snorta, format wygenerowanych raport�w może stanowić plik tekstowy, HTML, a nawet PDF.

  • Snort Inline - poprawka dla Snorta, umożliwiająca wsp�łprace z regułami firewalla IPtables, stosowanego w systemach opartych na jądrze Linux. Specjalnie sformułowane sygnatury Snorta, reagują na atak i blokują bądź przekierowują za pomocą ściany ogniowej drogę pakiet�w pochodzących od intruza.

  • SnortSam - jest to zestaw plugin�w do Snorta pełniących podobną funkcje jak Snort Inline, ale wspomagająca większą liczbę r�żnego rodzaju zap�r ogniowych (m.in. Checkpoint Firewall-1, Cisco PIX, Cisco Routers z ACL, Netscreen, IP Filter dla *BSD, Linux IPchains, Linux IPtables, WatchGuard Firebox).

  • FLoP - projekt ma na celu, przyspieszenie logowania w procesie wykrywania włamań. Do tego wykorzystuje odpowiednie bufory i możliwość szybkiego zapisu przez gniazdo unixowe do baz danych MySQL i PostgreSQL. Bardzo przydatne narzędzie przy pracy w sieciach o dużej przepustowości.

Syslog-ng

Wstęp

W PLD™ domyślnie instalowanym systemem magazynowania zdarzeń systemowych (log�w) jest syslog-ng™ (syslog - new generation), zajął on miejsce klasycznego tandemu syslogd™ i kalogd™. Jest to program o bogatych opcjach konfiguracji, zapewniający większą pewność działania, a co za tym idzie większe bezpieczeństwo log�w.

Większe bezpieczeństwo zapewnia możliwość użycia protokołu TCP w komunikacji z tzw. loghostem, aby jednak korzystać z dobrodziejstw tego protokołu na obu maszynach musi być użyty demon "nowej generacji". Możliwa jest także komunikacja z klasycznym syslogiem, w tym wypadku musimy użyć protokołu UDP i portu 514 (wartość domyślna dla syslog-ng™).

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ępnie połączenie ich ze sobą w reguły. Mamy trzy rodzaje obiekt�w: źr�dła, filtry i cele. Źr�dła wskazują miejsca pochodzenia komunikat�w, filtry pozwalają selekcjonować dane, cele zaś wskazują spos�b i miejsce magazynowania log�w (zwyczajowo jako pliki tekstowe w katalogu /var/log). Całą konfigurację umieszczamy w jednym pliku: /etc/syslog-ng/syslog-ng.conf.

  • Źr�dła - definiujemy je następująco:

    source $nazwa { $źr�dło($opcje); };

    najpopularniejsze źr�dła komunikat�w to:

    • internal - komunikaty demona syslog-ng

    • tcp - komunikaty od innych komputer�w w sieci (TCP)

    • udp - komunikaty od innych komputer�w w sieci (UDP)

    • pipe - nazwane potoki

    • unix-stream - gniazda uniksowe

    przykłady:

    source  src  { internal(); };
    source  udp  { udp(); };
    source  tcp  { tcp(ip(192.168.1.5) port(1999) max-connections(20)); };

    Pierwszy z przykład�w jest źr�dłem komunikat�w syslog-a. Drugi tworzy źr�dło komunikat�w wysyłanych z dowolnej maszyny w sieci - nasłuch na domyślnym porcie (514 UDP). Trzeci oczekuje komunikat�w od komputera 192.168.1.5 na porcie 1999 z ograniczeniem do 20 połączeń.

  • Filtry:

    filter $nazwa { $rodzaj($wartość); };

    rodzaje:

    • facility - pochodzenie zdarzenia: cron, daemon, mail, ... - szczeg�ły w dodatku

    • level - priorytet: emerg, alert, crit, ... - szczeg�ły w dodatku

    • host - filtrowane po nazwie hosta z użyciem wyrażeń regularnych

    • program - filtrowane po nazwie programu z użyciem wyrażeń regularnych

    przykłady:

    filter f_emergency { level(emerg); };
    filter f_daemon    { facility(daemon); };
    filter f_foo       { host("foo"); };
    filter f_su_sudo   { program("^su|sudo$"); };

    Pierwszy przykładowy filtr przepuszcza jedynie powiadomienia o najpoważniejszych błędach. Drugi zdarzenia pochodzące od demon�w, trzeci wybiera zdarzenia pochodzące od komputera mającego w nazwie ciąg "foo". Ostatni odfiltrowuje zdarzenia wywoływane w skutek działania program�w su i sudo - użycie wyrażeń regularnych.

    W filtrach możemy używać operator�w logicznych (and, or, not):

    filter f_syslog  { not facility(authpriv, cron, lpr, mail, news); };
    filter f_ppp     { facility(daemon) and program(pppd) or program(chat); };

  • Cele - og�lna definicja:

    destination $nazwa { $cel($miejsce); };

    najpopularniejsze cele:

    • file - plik tekstowy / urządzenie znakowe (/dev/)

    • usertty - ekran terminala wskazanego użytkownika

    • tcp - komunikaty do loghosta (TCP)

    • udp - komunikaty do loghosta (UDP)

    przykłady:

    destination  kernel       { file("/var/log/kernel"); };		
    destination  console_all  { file("/dev/tty12"); };		
    destination  root         { usertty("root"); };			
    destination  loghost      { udp("10.0.0.1"); };

    W pierwszym przykładnie komunikaty są kierowane do pliku /var/log/kernel, w drugim będą wyświetlane na dwunastym wirtualnym terminalu. Trzeci cel spowoduje wyświetlanie komunikatu na ekranie terminala użytkownika root. Czwarty obiekt pozwoli na wysyłanie komunikat�w do loghosta o adresie IP 10.0.0.1 (uwaga na zgodność protokołï¿½w TCP/UDP u nadawcy i odbiorcy).

  • Regułki - budujemy je na samym końcu, kiedy mamy już zdefiniowane źr�dła, filtry i cele:

    log { source($źr�dło); destination($cel); };

    log { source($źr�dło); filter($filtr1); filter($filtr2); destination($cel); };

    np.:

    log { source(src);  destination(console_all); };
    log { source(src);  filter(f_emergency);  destination(loghost); };

Aby zmiany weszły w życie oraz utworzone zostały nowe pliki dziennik�w, należy ponownie uruchomić demona:

# service syslog-ng reload

Test konfiguracji

Najlepszą metodą sprawdzenia konfiguracji sysloga jest wysłanie własnych komunik�w systemowych. Posłużymy się w tym celu programem logger, pozwalającym wysyłać dowolne komunikaty z wiersza poleceń. Dla naszych potrzeb wywołujemy program następująco:

logger -p {$źr�dło}.{$poziom} {$komunikat} np.:

# logger -p mail.warning Test ostrzeżenia

Uwagi

  • Podobnie jak poprzednik nie kontroluje objętości log�w, tak więc nie można zapomnieć o programie rotującym np. logrotate™.

  • Domyślnie demon nie nasłuchuje komunikat�w z sieci, definicja źr�dła za to odpowiedzialna jest wykomentowana.

  • W ramach ochrony przed atakami DoS syslog-ng obsługuje domyślnie do 10 połączeń sieciowych, aby to zmienić należy użyć parametru "max-connections" w opcjach źr�dła (patrz przykłady).

Dodatek

System operacyjny posiada wewnętrzny, niezależny od demona log�w, schemat klasyfikowania zdarzeń, dzielą się one na dwie grupy:

Pochodzenie komunikat�w (facility):

Tabela 16.2.

NazwaOpis
userr�żnorodne programy zwykłych użytkownik�w
mailkomunikaty podsystemu poczty elektronicznej
daemonr�żne demony systemowe
auth, authprivbezpieczeństwo (autoryzacja użytkownik�w)
syslogsyslog
lprdrukarka
newssystem grup dyskusyjnych (Usenet)
uucppodsystem UUCP
crondemony zegarowe: AT, CRON
ftpserwer FTP
local0 - local7uniwersalne źr�dła lokalne, możliwe do dowolnego zastosowania przez administratora

Priorytety (level):

Tabela 16.3.

NazwaOpis
emergsystem już nie nadaje się do użytku
alertpoważna awaria - należy podjąć natychmiastową akcję
critzdarzenie krytyczne
errbłędy
warningostrzeżenia
noticeważne zdarzenia
infoinformacje
debugdodatkowe informacje - przydatne przy odpluskwianiu

Rozdział 17. X-Window

Rozdział opisuje konfigurację środowiska graficznego.

Wstęp

W rozdziale tym postaramy pom�c w stworzeniu systemu "biurkowego", czyli systemu z X-Window. Będziemy tu opisywać implementację X.Org™, więcej na jej temat można znaleźć na witrynie projektu http://www.x.org/wiki/. Sam proces tworzenia desktopu możemy podzielić na dwa etapy:

  • Instalacja i konfiguracja serwera protokołu X11

  • Instalacja i konfiguracja menedżera okienek dla X.org (przedstawimy tutaj KDE™ i GNOME™)

Od razu należy przestrzec, że środowisko graficzne jest obsługiwane przez skończoną liczbę urządzeń (dotyczy to zwłaszcza kart graficznych) i może się niestety zdarzyć, że posiadamy kartę graficzną, kt�ra nie jest obsługiwana. Dotyczy to głï¿½wnie najnowszego sprzętu, starsze modele mają dosyć dobre wsparcie.

W przypadku kart firm firm ATI i NVIDIA, mamy dostępne zar�wno sterowniki będące częścią X.Org jak i sterowniki zamknięte, tworzone przez samych producent�w. Nielicznymi zaletami tych drugich jest bardzo dobra wydajność i pełne wsparcie dla akceleracji grafiki tr�jwymiarowej.

X-Server

Instalacja

Na początku, korzystając z programu poldek™ instalujemy konieczne pakiety. W przypadku Ac™ będą to:

$ poldek -i X11 X11-modules X11-fonts-100dpi-ISO8859-2 X11-setup \
X11-imake X11-libs X11-Xserver X11-OpenGL-libs X11-fonts \
X11-common X11-fonts-base X11-xauth X11-fonts \
X11-fonts-75dpi-ISO8859-2 X11-OpenGL-core X11-fonts-100dpi \
X11-fonts-ISO8859-2 X11-sessreg

W Th™ zmieniły się nazwy pakiet�w i są o wiele bardziej rozdrobnione, zaczynamy od instalacji rdzenia X-Serwera i podstawowych sterownik�w:

$ poldek -i  xorg-xserver-server \
xorg-driver-input-keyboard \
xorg-driver-input-mouse

Teraz powinniśmy zainstalować sterownik karty graficznej, możemy zainstalować wszystkie dostępne (jeśli nie mamy pewności) lub ten właściwy. W ustaleniu, kt�ry sterownik będzie najbardziej odpowiedni pomoże nam zestawienie w dokumentacji X.Org. Nazwy pakiet�w ze sterownikami zaczynają sie od X11-driver- (w Ac™) i od xorg-driver-video- (W Th™). W przypadku kart firmy nVidia instalujemy otwarty sterownik:

$ poldek -i xorg-driver-video-nv

Jeśli mamy kartę ATI to wybieramy pakiet:

$ poldek -i xorg-driver-video-ati

Sterownikami z pełną obsługą 3D będziemy mogli się zająć p�źniej. Jeśli ciągle nie wiemy jaki wybrać, to możemy zainstalować uniwersalny sterownik dla kart zgodnych z VESA:

$ poldek -i xorg-driver-video-vesa

W Ac ten sterownik znajduje się w pakiecie X11-modules

Zanim zaczniemy konfigurację

Użytkownicy myszek PS/2 lub USB, kt�rzy nie korzystają z dobrodziejstw udeva™ muszą załadować opr�cz modułu huba USB moduły:

# modprobe psmouse
# modprobe usbhid

Aby moduły ładowały się za każdym razem, gdy uruchamiamy system, należy dodać ich nazwy do pliku /etc/modules. Więcej o zarządzaniu modułami w „Statyczne zarządzanie modułami”.

Pierwsze uruchomienie

X.Org™ nie wymaga pliku konfiguracji do podstawowego działania, po uruchomieniu automatycznie pr�buje wykryć dołączony sprzęt. X-Serwer uruchamiamy następująco:

# X

Jeśli naszym oczom ukaże się drobna, szara kratka z kursorem myszy w kształcie krzyżyka (kt�rym możemy poruszać), to oznacza, że aplikacja działa: wykryła sprzęt i załadowała prawidłowe sterowniki. Oznacza to też, że zainstalowaliśmy wszystkie potrzebne komponenty do działania serwera. Aby wyjść z tego dosyć surowego środowiska korzystamy ze skr�tu Ctrl+Alt+Backspace

Teraz możemy przejść do konfiguracji X-Servera lub do uruchomienia środowiska graficznego. Warto przeprowadzić przynajmniej podstawową konfigurację, by uzyskać większą ergonomię pracy, ustawić układ klawiatury dla danego języka, czy obsłużyć dodatkowe możliwości sprzętu.

Konfiguracja

Generujemy wstępną konfigurację serwera X11:

# X -configure

W wyniku działania w/w polecenia w katalogu domowym użytkownika (w tym wypadku /root/) powstanie plik xorg.conf.new. X-Server stara się rozpoznać używany przez nas sprzęt i ustawia właściwe parametry w pliku konfiguracji.

Przenosimy plik we właściwe miejsce:

# mv ~/xorg.conf.new /etc/X11/xorg.conf

Teraz możemy spr�bować, czy serwer nam się uruchamia:

# X

dokładnie jak to wcześniej opisaliśmy.

W ten oto spos�b mamy wstępnie skonfigurowany X-Server i możemy rozpocząć pracę w środowisku graficznym. Wskaz�wki bardziej wyrafinowanej konfiguracji odnajdziemy w „Zaawansowane”. Część z nich będziemy mogli dokonać za pomocą poniżej opisanych program�w (np. xorgcfg -textmode), bardziej zaawansowane opcje ustawimy wyłącznie edytując plik konfiguracji.

Inne sposoby konfiguracji

Z aplikacją dostarczane są dodatkowo dwa programy do konfiguracji, obydwie można użyć do generowania pliku konfiguracji zamiast operacji X -configure, pozwalają na precyzyjnie ustawianie parametr�w X-Servera X -configure, jednak wymagają też więcej wiedzy i pracy.

  • xorgcfg - program kt�ry może działać w dw�ch trybach: graficznym i tekstowym (z użyciem parametru -textmode). Program ma tą zaletę, że może modyfikować istniejący plik konfiguracji. O ile wygodę trybu graficznego można uznać za dyskusyjną, o tyle tryb tekstowy nie powinien sprawiać nikomu problem�w.

  • xorgconfig - jest to konsolowe narzędzie, kt�re prowadzi krok po kroku przez kolejne etapy konfiguracji. W zasadzie to przydaje się do generowania pliku konfiguracji po raz pierwszy (zamiast X -configure), jeśli chce się dokonać jakiejkolwiek zmiany trzeba przechodzić przez wszystkie kroki na nowo. Program ten dodatkowo dodaje do pliku liczne komentarze, co nie wszystkim odpowiada.

Rozwiązywanie problem�w

Jeżeli pojawi się jakiś problem musimy przeanalizować komunikaty wypisywane na ekran i do pliku /var/log/Xorg.0.log. Błędy są oznaczane dwoma literkami EE np.:

(EE) Failed to load module "ati" (module does not exist, 0)

Powyższy komunikat informuje o brakującym sterowniku do karty graficznej, najprawdopodobniej nie jest zainstalowany konieczny pakiet.

Środowisko graficzne (GUI)

Do wyboru mamy dwa potężne, zintegrowane środowiska: KDE™ i Gnome™, nieco mniejsze XFCE4™, czy całkiem proste np. : blackbox™, fluxbox™ będące jedynie zarządcami okien i pulpitu. środowiska opisaliśmy w dalszych rozdziałach. Opr�cz środowiska musimy wybrać spos�b jego uruchamiania. Możemy uruchamiać je z wiersza poleceń za pomocą skryptu startx lub demon�w GDM™/KDM™. Zagadnienia te szczeg�łowo om�wiliśmy w „Uruchamianie środowiska graficznego”.

Zaawansowane

W tym miejscu zajmiemy się bardziej zaawansowaną konfiguracją X-Servera. Zakładam, że istnieje wstępnie skonfigurowany plik /etc/X11/xorg.conf, za pomocą polecenia X -configure. Wiele opisanych tu czynności konfiguracyjnych dla konkretnych podsystem�w, wykonujemy za pomocą programu xorgcfg, uruchamiamy go w trybie tekstowym :

# xorgcfg -textmode

Po uruchomieniu zobaczymy listę dostępnych kategorii, odpowiadają one dalszym opisom. Przykładowo, aby skonfigurować myszkę, wybieramy z listy opcję: Configure mouse a następnie Edit Mouse0 itd. Po ustawieniu wszystkich interesujących nas opcji, wybieramy Write xorg.conf and quit

Bardziej zaawansowane będą wymagały ingerencji za pomocą edytora tekstu, przypominam, że "obrabiamy" plik # /etc/X11/xorg.conf.

Mysz

Zakładam, że w programie wybraliśmy sekcję konfiguracji myszki. Dla wsp�łczesnych myszek, w konfiguracji protokołu wybieramy Auto, dla myszek szeregowych wybierzemy Microsoft. Następnie konfigurator spyta o to, czy dla myszek dwuprzyciskowych włączyć emulację trzeciego klawisza, w przypadku myszek o większej ilości przycisk�w odpowiadamy negatywnie. Jako urządzenie wybieramy /dev/input/mice. Po zapisaniu wybranej konfiguracji, otrzymamy w sekcji ustawień myszy w pliku /etc/X11/xorg.conf fragment o zbliżonej konstrukcji:

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "Auto"
        Option      "Device" "/dev/input/mice"
        Option      "ZAxisMapping" "4 5 6 7"
EndSection

Jeśli posiadamy myszkę z wieloma klawiszami i rolkami, a standardowy sterownik nie radzi sobie z obsługą wszystkich zdarzeń, to możemy wybrać bardziej nowoczesny i elegancki spos�b na uruchomienie naszego sprzętu - evdev. Przykładowa instalacja i konfiguracja zostanie przedstawiona dla popularnej myszki Logitech MX500. Pierwszym krokiem jest załadowanie modułu jądra modprobe evdev oraz instalacja pakietu xorg-driver-input-evdev (X11-driver-evdev dla Ac). Następnie odszukujemy w /proc/bus/input/devices numer urządzenia eventX naszej myszki i wpisujemy do konfiga X.Org™ poniższą sekcję:

Section "InputDevice"
    Identifier "Mouse1"
    Driver     "evdev"
    Option     "Device"   "/dev/input/event1"
    Option     "Buttons"  "10"
EndSection

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ępującą konfigurację klawiatury:

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "kbd"
        Option      "XkbModel" "pc104"
        Option      "XkbLayout" "pl"
EndSection

W przypadku starszych wersji X.Org (w Ac™) X -configure ustawiany jest zły sterownik klawiatury, należy go zmienić na kbd, jak na powyższym fragmencie. Możemy to wykonać za pomocą dowolnego edytora tekstu.

Jeśli posiadamy klawiaturę multimedialną i chcemy wykorzystywać jej dodatkowe klawisze, to musimy wybrać odpowiedni model klawiatury. Nasz wyb�r będzie dotyczył wartości parametru XkbModel, następnie musimy sprawdzić za pomocą programu xev czy wszystkie zdarzenia z klawiszy multimedialnych są prawidłowo obsługiwane przez X-serwer.

Monitor

Właściciele monitor�w LCD/Plasma są na uprzywilejowanej pozycji, jeśli sterownik karty graficznej potrafi "porozumieć się" z monitorem (za pomocą DDC), to nie są wymagane żadne czynności konfiguracyjne. Aby detekcja następowała automatycznie musimy w pliku konfiguracji postawić znak komentarza ("#") przed opcjami HorizSync, VertRefresh.

W pozostałych przypadkach musimy określić parametry monitora. Wybierając opcje programu Configure monitor, będziemy będziemy mogli wybrać jakiś monitor z listy lub podać parametru własnego urządzenia: Enter your own horizontal sync range. Tu podajemy wartości HorizSync (w kHz) i VertRefresh w (Hz) zgodne ze specyfikacją naszego urządzenia. Po zapisaniu pliku konfiguracji otrzymamy:

Section "Monitor"
        Identifier  "Monitor0"
        HorizSync   31.5 - 96.0
        VertRefresh 50 - 100
        Option "DPMS"
EndSection

O ile HorizSync jest opcją ściśle zależną od możliwości monitora i pod żadnym pozorem nie powinniśmy jej dowolnie zmieniać, o tyle VertRefresh daje więcej swobody. Za jej pomocą ustawiamy odświeżanie obrazu, Nie możemy oczywiście przekroczyć parametr�w monitora, ale możemy ustawić minimalne odświeżanie, np. 85 - 85 wymusi częstotliwość 85Hz. (oczywiście pod warunkiem, że nasz monitor, przy danej rozdzielczości pozwala na wyświetlanie z taką wartością).

Rozdzielczość obrazu

Wstępnie plik konfiguracji nie zawiera żadnych definicji rozdzielczości i będzie ona ustalana automatycznie, co jest wskazane przy monitorach LCD/Plasma. W przypadku monitor�w CRT, zapewne będziemy chcieli użyć najbardziej ergonomicznej. Mamy tu dwa wyjścia, możemy nic nie ustawiać w X.Org, ale za to ustawić ją w aplikacjach konfiguracyjnych środowisk Gnome/KDE, lub ustawić ją na stałe w konfiguracji X-serwera. Możliwości ustawień konfigurator�w w środowiskach graficznych są dosyć skromne, dlatego niekt�rzy pokuszą się zapewne o ustawienie odpowiednich wartości na stałe.

Po wybraniu Configure screen w programie, zostaniemy zapytani o ilość dostępnych kolor�w, dla wsp�łczesnego sprzętu bez zastanowienia możemy wybrać 24bity na piksel a następnie wybieramy listę rozdzielczości, kt�re mają być dostępne. W większości wypadk�w wystarczy nam jedna rozdzielczość. Oczywiście musi być obsługiwana przez monitor. Zapisana konfiguracja może wyglądać następująco:

Section "Screen"                                                                                                              
        Identifier "Screen0"                                                                                                  
        Device     "Card0"                                                                                                    
        Monitor    "Monitor0"                                                                                                 
        SubSection "Display"                                                                                                  
                Viewport   0 0                                                                                                
                Depth     24                                                                                                  
		Modes "1024x768"
        EndSubSection                                                                                                         
EndSection

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 pomocą DDC odczytywany jest rozmiar obszaru wyświetlania, by automatycznie określić DPI. Dla monitor�w, kt�re nie posiadają takiej możliwości lub podają ją nieprawidłowo, będziemy mogli sami ten parametr ustawić. Wartość DPI można też ustawić bezpośrednio w konfiguracji środowiska (np. w Gnome) my jednak pokażemy jak zrobić do w X-serwerze. W sekcji Monitor pliku konfiguracji należy dodać opcję:

DisplaySize $x $y

gdzie parametry $x i $y są wymiarami w milimetrach, odczytanymi z dokumentacji urządzenia lub po prostu zmierzonymi linijką. Sekcja konfiguracji monitora może wyglądać następująco:

Section "Monitor"
        Identifier  "Monitor0"
        HorizSync   31.5 - 96.0
        VertRefresh 50 - 100
	DisplaySize 269 201
EndSection

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ędziemy korzystać z serwera czcionek X11-xfs™, kt�ry uruchamiamy poleceniem /etc/init.d/xfs start. Dlatego też sekcja dotycząca czcionek w pliku xorg.conf.new powinna wyglądać podobnie do podanego niżej przykładu:

Section "Files"
	RgbPath     "/usr/X11R6/lib/X11/rgb"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/local/"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"
	#    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/"
	FontPath    "unix/:7100"
	#    ModulePath "/usr/X11R6/lib/modules"

EndSection

Czyli komentujemy wszystkie wywołania bezpośrednie do czcionek i przekazujemy obsługę zarządzania czcionkami serwerowi xfs™.

Uwagi

Parametry monitora mogą być odczytywane za pomocą modułu DDC, o ile monitor jest włączony. Powinniśmy zatem włączać monitor przed uruchomieniem X-Servera lub ustawić "na sztywno" jego parametry, inaczej w skrajnym wypadku obraz będzie miał rozdzielczość 640x480, przy odświeżaniu 60Hz.

Środowisko GNOME

Instalacja

GNOME™ jest rozbudowanym środowiskiem, dodatkowo filozofia mikropakiet�w w PLD nie ułatwia jego instalacji początkującym. Aby temu zaradzić stworzone zostały metapakiety, kt�re oszczędzą nam sporej ilości pracy, oto ich zestawienie:

  • metapackage-gnome™ - głï¿½wna część środowiska

  • metapackage-gnome-extras™ - dodatki

  • metapackage-gnome-extras-accessibility™ - narzędzie ułatwień dostępu

  • metapackage-gnome-office™ - pakiet aplikacji biurowych

Na początku powinien nam wystarczyć podstawowy metapakiet:

poldek> install metapackage-gnome

Teraz wystarczy uzbroić się w cierpliwość, po instalacji wymagań metapakietu, możemy już samodzielnie doinstalować te kilka pakiet�w, albo od razu uruchomić środowisko. Filozofię metapakiet�w om�wiliśmy w „Cechy pakiet�w w PLD”.

Jeśli jednak jesteśmy zwolennikami instalacji tylko tego co jest potrzebne, musimy instalować każdy pakiet z osobna:

poldek> install gnome-desktop gnome-session nautilus xscreensaver-gnome2 gnome-themes \
gnome-icon-theme gnome-panel gnome-splash-gnome metacity \
gnome-applets

Lista komponent�w i aplikacji dla GNOME jest w PLD imponująca, aby łatwiej było się odnaleźć w tym gąszczu, zachęcamy do zapoznania się z zestawieniem aplikacji w dalszej części rozdziału.

Internacjonalizacja

Aby GNOME i GDM obsługiwały język inny niż angielski, należy ustawić tzw. Locale, co zostało opisane w „Internacjonalizacja”, a następnie wybrać preferowany język: Language z menu GDM-a.

Dźwięk

Zakładam, że już została skonfigurowana już ALSA, zgodnie ze wskaz�wkami opisanymi w „ALSA - Dźwięk w Linuksie”. Od GNOME 2.26 dźwięk jest obsługiwany przez aplikację pulseaudio, zapewniającą programowe miksowanie dźwięku z wielu źr�deł, czy też przesyłanie strumienia za pośrednictwem sieci. Instalujemy:

$ poldek -i pulseaudio pulseaudio-gconf pulseaudio-alsa gstreamer gstreamer-audiosink-esd

instalujemy pakiety z pluginami dekodującymi formaty wav,au oraz mp3:

$ poldek -i  gstreamer-audio-formats gstreamer-mad

instalujemy gnome-media, aplet do sterowania głośnością, odtwarzacz Totem™ i opcjonalnie pakiet dźwięk�w zdarzeń:

$ poldek -i gnome-media gnome-applets-mixer totem gnome-audio

Uruchomienie

Zanim uruchomimy środowisko, musimy się upewnić, czy nazwa hosta (opcja HOSTNAME z pliku /etc/sysconfig/network) jest przypisana do adresu IP. Aby to ustawić, należy dodać odpowiedni wpis do pliku /etc/hosts, zgodnie ze wskaz�wkami zawartymi w „Podstawowa konfiguracja sieci”, np.:

127.0.0.1       pldmachine

Szczeg�ły uruchamiania środowiska opisaliśmy w „Uruchamianie środowiska graficznego”.

Administracja - GNOME System Tools

GST™ to zestaw wygodnych narzędzi administracyjnych, obsługujących PolicyKit. Pozwala na zarządzanie m.in. usługami, użytkownikami oraz siecią. Instalacja:

$ poldek -i gnome-system-tools system-tools-backends

Uruchamiamy demona system-tools-backends:

# /etc/init.d/system-tools-backends start

Dodajemy użytkownika do grupy adm:

# groupmod -A jkowalski adm

Aplikacje administracyjne będziemy mogli używać po ponownym zalogowaniu.

Przydatne drobiazgi

O wygodzie pracy w środowisku czasami decydują drobiazgi, oto lista takich niewielkich narzędzi, przydatnych w codziennej pracy:

  • gnome-volume-manager™ - narzędzie do zarządzania woluminami wymiennymi: montowaniem nośnikow, odtwarzaniem muzyki i innymi

  • gnome-utils-screenshot™ - program do szybkiego wykonywania zrzut�w ekranu.

  • nautilus-cd-burner™ - rozszerzenie do nautilusa służące do nagrywania płyt CD/DVD

  • gnome-system-monitor™ - monitor zasob�w i proces�w

  • gnome-utils-search-tool™ - wyszukiwarka plik�w

Opr�cz tego mamy dostęp do wielu applet�w, temat�w graficznych i innych.

Godne polecenia aplikacje

Zaletą złożonych środowisk takich jak GNOME czy KDE jest duża liczba program�w, kt�re dobrze integrują się ze środowiskiem, poniżej została zamieszczona lista użytecznych program�w.

  • gnome-terminal™ - rozbudowany emulator terminala z obsługą zakładek

  • gcalctool™ - wielofunkcyjny kalkulator

  • totem™ - odtwarzacz audio i video.

  • Exaile™, Quod Libet™ i Rhythmbox™ - wygodne odtwarzacze audio z dobrą obsługą dużych bibliotek muzyki, wszystkie obsługują gstreamera.

  • eog™ - Eye of GNOME - narzędzie do przeglądania obrazk�w

  • evince™ - program służący do przeglądania dokument�w w formatach pdf, postscript i wielu innych.

  • gedit2™ - edytor tekstu z obsługą kolorowania składni język�w programowania i wtyczek.

  • epiphany™ - przeglądarka WWW z silnikiem renderującym Gecko

  • evolution™ - rozbudowany klient poczty i narzędzie do planowania zadań

  • gajim™ - klient Jabbera

  • file-roller™ - zarządca archiw�w - jest graficznym interfejsem dla własciwych narzędzi archiwizacji danych

  • Brasero™ (dawniej Bonfire) - komfortowe narzędzie do nagrywania płyt CD/DVD.

Więcej na stronie www.gnome.org/projects/, warto też odwiedzić stronę www.gnomefiles.org, będącej bogatym zestawieniem aplikacji bardziej lub mniej związanych ze środowiskiem.

Pomoc i rozwiązywanie problem�w

GNOME jest dostarczane z pokaźną dokumentacją - niestety brak jest polskiego tłumaczenia. Jest dostępna dla aktywnego okna po wciśnięciu przycisku F1 lub po wywołaniu programu yelp™ - przeglądarki dokumentacji. Musimy tylko doinstalować konieczne pakiety:

$ poldek -i gnome-user-docs yelp

Jeśli natkniemy się na jakieś problemy z działaniem aplikacji, na początek powinniśmy zajrzeć do specjalnego dziennika błęd�w:

$ cat ~/.xsession-errors

Możemy też spr�bować uruchomić daną aplikację w wirtualnym terminalu (np. w programie gnome-terminal), w celu odczytania komunikat�w programu.

Środowisko KDE

Poniżej przedstawiamy listę zalecanych pakiet�w dla KDE™:

kdeaddons-ark kdeadmin-kpackage kdebase-desktop kdebase-kate \
kdebase-konsole kdebase-kwrite kdegraphics-kfile \
kdegraphics-kghostview kdegraphics-kpdf kdemultimedia-akode \
kdemultimedia-juk kdemultimedia-kaboodle kdemultimedia-kfile \
kdemultimedia-kmid kdemultimedia-kmix kdemultimedia-kscd \
kdemultimedia-mpeglib kdenetwork-kget kdesdk-kfile \
kdeutils-ark kdeutils-kcalc kdeutils-kedit kdeutils-kfloppy \
kdeutils-kwalletmanager konqueror

Aby m�c uruchomić KDE™ dla danego użytkownika, w jego katalogu domowym wykonujemy polecenie:

$ echo "kde" >.desktop

Od tej chwili, domyślnym środowiskiem graficznym dla tego użytkownika jest KDE™, kt�re możemy uruchomić za pomocą polecenia startx.

Blackbox - Szybki i lekki zarządca okien

Wstęp

Blackbox™ jest lekkim menedżerem okien dla XFree86™. Jest napisany w C++, a jego projekt zakładał wydajność, niskie użycie pamięci oraz brak zależności od zewnętrznych bibliotek. Blackbox™ zabiera bardzo niewiele miejsca na ekranie na dekoracje okien. Mimo swojego minimalizmu, jest bardzo wygodny i funkcjonalny. Zawiera wszystko, czego oczekuje się od menedżera okien - obsługę wirtualnych pulpit�w, okna typu sticky, zwijanie okien, okna pozbawione dekoracji. Posiada też pasek dokowania, zwany slitem, na kt�rym mogą umieszczać się aplety w stylu NEXTstep™ (np. Window Maker, AfterStep) oraz okna w trybie withdrawn (np. gkrellm). Te cechy sprawiły, że Blackbox™ stał się całkiem popularny wśr�d os�b nie lubiących przeładowania towarzyszącego środowiskom KDE™ i GNOME

Dzięki swoim zaletom Blackbox stał się na tyle znany, że wypączkowało z niego kilka odmian z nowymi cechami. Należą do nich Fluxbox™, Openbox™ i Kahakai™. Blackbox™ i jego pochodne są doskonałym wyborem, jeśli pożądane jest oszczędzanie pamięci i niskie wykorzystanie procesora. Są też dobre dla tych, kt�rzy wolą elegancję ponad nadmiar element�w, jaki występuje w popularnych środowiskach. My w tym opisie zajmiemy się instalacją Blackbox™.

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 wymagający 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 pomocą przyjdzie nam program vfmg™, kt�ry już wcześniej zainstalowaliśmy. Komendy kt�re są poniżej należy wykonywać w katalogu domowym ~/

# mkdir ~/.blackbox
# vfmg blackbox > .blackbox/menu

Mamy już gotowe menu, ale nie ma w nim opcji "Wyjście", kt�ra jest niewątpliwie przydatną opcją.

W ~/.blackbox/menu należy pod sam koniec dopisać "Wyjście" tak, aby 3 ostatnie linijki wyglądały następująco:

# tail -3 ~/.blackbox/menu
[end]
        [exit] (Wyjście)
[end]

Dodatkowo należy edytować plik ~/.blackboxrc i zmienić w nim linijkę session.menuFile na:

# grep menu .blackboxrc
session.menuFile:       .blackbox/menu

Mając już menu Blackbox możemy go wreszcie uruchomić:

# startx

Aby wszystko poprawnie funkcjonowało należy zapoznać się z działem "Konfiguracja środowiska graficznego", kt�ry znajduje się w dokumentacji PLD.

Fluxbox - Następca BlackBoxa

Wstęp

Młodszym bratem BlackBoxa™ jest Fluxbox™, bazujący na kodzie Blackboxa™. Fluxbox™ wygląda tak samo jak Blackbox™, kt�ry korzysta z tych samych styli, kolor�w, położenia okien i generalnie jest zachowana pełna kompatybilność z Blackboxem™.

Jakie są więc r�żnice? Odpowiedź brzmi: DUŻE. Np:

  • Konfigurowalne taby okien

  • Pasek ikon (do zminimalizowanych okien)

  • Scroll myszki używany do zmiany obszar�w roboczych.

  • Wsparcie dla KDE i GNOME, a także rozszerzone wsparcie dla WindowMakera.

  • i jeszcze wiele innych udogodnień.

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ę ułatwia konfiguracje.

Konfiguracja

Aby fluxbox™ był naszym domyślnym menadżerem okien w .Xclients dajemy wpis.

exec fluxbox

wygląd menu można zmieniać edytując plik ~/.fluxbox/menu

Przykładowy wpis:

[begin] (Fluxbox)
	[exec]    (aterm) {aterm -tr}
	[exec] (Run) {fbrun }
	[submenu] (Net)
        	[exec] (PSI) {psi}
	[end]
[end]

Możemy także automatycznie wygenerować menu korzystając z programu vfmg™. Instalujemy go poleceniem:

# poldek -i vfmg

Następnie wydajemy polecenia:

# mkdir ~/.fluxbox
# vfmg blackbox > ~/.fluxbox/menu

Mamy już gotowe menu, ale nie ma w nim opcji "Wyjście", kt�ra jest niewątpliwie przydatną opcją.

W ~/.fluxbox/menu należy pod sam koniec dopisać "Wyjście" tak, aby 3 ostatnie linijki wyglądały następująco:

# tail -3 ~/.blackbox/menu
[end]
        [exit] (Wyjście)
[end]

Chcąc dodać tło pulpitu możemy się posłużyć np. programem dispalay z pakietu ImageMagik™. Instalujemy go:

# poldek -i ImageMagick

dodatkowo konieczne jest doinstalowanie modułï¿½w kodera dla plik�w np. jpeg, png i tiff

# poldek -i ImageMagick-coder-jpeg-5.5.7.12-2 ImageMagick-coder-png-5.5.7.12-2 ImageMagick-coder-tiff-5.5.7.12-2

następnie w pliki ~/.fluxbox/init odszukujemy wpis:

session.screen0.rootCommand: i dodajemy: display -size ROZDZIELCOZŚĆ -window root NAZWA_PLIKU_Z_GRAFIKA

u mnie wpis ten wygląda następująco:

session.screen0.rootCommand:    display -size 1024x768 \
    -window root  ~/DREAMVISIONS.jpg

I to by było właściwie już tyle, można już uruchomić naszego menagera okien poleceniem

# startx

Uruchamianie środowiska graficznego

Istnieją dwie metody uruchamiania środowiska, pierwszą jest uruchamianie systemu na trzecim poziomie pracy (domyślnie) i autoryzowaniu się w terminalu tekstowym. Po zalogowaniu uruchamiamy program startx. Drugą możliwością jest instalacja jednego ze specjalnych demon�w: gdm™ (dla Gnome™) kdm™ (dla KDE™) lub xdm i dokonywanie autoryzacji za ich pośrednictwem. Demony te działają na piątym poziomie pracy, dlatego musimy skonfigurować system by domyślnie startował na tym poziomie. Estetyka i wygoda to nie jedyne zalety demon�w, są one silnie zintegrowane ze swoimi środowiskami, dzięki czemu zapewniają wiele dodatkowych funkcji.

Skrypt startx

W tej metodzie po zalogowaniu się w terminalu, użytkownik wydaje polecenie startx. Na podstawie wpisu w pliku .xinitrc (w katalogu użytkownika) uruchamiane jest wskazane tam środowisko. Aby używać tej metody, musimy doinstalować potrzebne pakiety, w przypadku Ac™ wykonujemy polecenie:

$ poldek -i xinitrc-ng

W Th™:

$ poldek -i xinitrc-ng xorg-app-xinit

Konfiguracja polega na umieszczeniu nazwy programu startowego środowiska w pliku .xinitrc. Plik ten jest pełnoprawnym skryptem powłoki i obowiązuje w nim jej składnia, wpis w nim można wykonać następująco:

$ echo "gnome-session" >~/.xinitrc

lub

$ echo "exec gnome-session" >~/.xinitrc

Aby uruchomić środowisko wykonujemy polecenie:

$ startx

Poniżej przedstawilimy listę program�w startowych dla wybranych środowisk:

  • Gnome: gnome-session

  • KDE: startkde

  • XFCE: startxfce4

  • fluxbox: fluxbox

  • icewm: icewm

Jedynie w wyjątkowych sytuacjach powinniśmy używać tej metody do uruchamiania środowisk takich Gnome czy KDE, dla nich najlepiej korzytstać z opisanych poniżej GDM lub KDM.

GDM

Zaczynamy od instalacji demona GDM:

poldek> install gdm gdm-init

i już możemy go uruchomić:

# service gdm start

Powinniśmy m�c się teraz zalogować i uruchomić środowisko, jeśli wszystko działa prawidłowo to możemy ustawić by system uruchamiał się ma piątem poziomie pracy, zgodnie ze wskaz�wkami pod koniec rozdziału.

KDM

Instalujemy KDM

# poldek -i kdm

Dla lokalnej pracy nie trzeba nic specjalnie konfigurować, więc od razu możemy uruchomić demona poleceniem:

# /etc/init.d/kdm start

Pozostało nam jeszcze poinformować nasz system, że chcemy, aby nasz zarządca uruchamiał się po starcie systemu (na piątym poziomie).

Ustawienie poziomu pracy

W przypadku demon�w GDM/KDM powinniśmy jeszcze skonfigurować system tak, by domyślnie uruchamiał się na piątym poziomie. pracy. Owe usługi uruchamiają się tylko na tym poziomie, poza tym jest to domyślny poziom dla aplikacji X-Window. Powinniśmy zmodyfikować plik /etc/inittab, zgodnie ze wskaz�wkami przedstawionymi w „Zmiana poziomu pracy systemu”. Wiersz z opcją initdefault powinien wyglądać następująco:

id:5:initdefault:

Aby sprawdzić poprawność operacji, możemy zrestartować system.

Porady

Należy za wszelką cenę unikać logowania się jako administrator (root), jeśli chcemy używać aplikacji wymagających wysokich uprawnień, powinniśmy je uruchamiać za pomocą 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 pomocą programu poldek™ zainstalować pakiety:

# X11-driver-nvidia kernel-video-nvidia

Następnie w wygenerowanym pliku konfiguracyjnym serwera X11 dokonujemy zmian w sekcji Device Card0:

Identifier  "Card0"
Driver      "nvidia"
VendorName  "nVidia Corporation"
BoardName   "NV5M64 [RIVA TNT2 Model 64/Model 64 Pro]"
BusID       "PCI:1:0:0"
Option      "HWCursor"      "on"
Option      "CursorShadow"  "on"
Option      "DPMS"          "on"
Option      "noDCC"         "on"
Option      "NoLogo"        "on"

Czyli praktycznie zamieniamy ciąg znak�w w linijce Driver z nv na nvidia.

Teraz wracamy do serwera X11 i jego testowego uruchomienia. W przypadku problem�w standardowo zaglądamy w logi.

Karty firmy ATI

Do zainstalowania kart graficznych firmy ATI zalecamy wykorzystać firmowe sterowniki firegl™. Z serwerem X11™ dostarczane są także otwarte sterowniki X11-driver-ati™ - jednak nie wykorzystują one wszystkich możliwości jakie dają sterowniki firegl™ i dopiero przy dużych problemach z nimi możemy jako awaryjne skonfigurować serwer X11 z otwartymi sterownikami ATI.

Instalacja i konfiguracja

Aby wczytać firegl™, należy za pomocą programu poldek™ zainstalować pakiety:

# X11-driver-firegl kernel-video-firegl

Następnie za pomocą programu fglrxconfig™ generujemy plik konfiguracyjny dla serwera X11. Opr�cz pytań związanych z serwerem odpowiemy na szereg pytań dotyczących karty graficznej i monitora (możemy np. zdecydować o tym czy chcemy pracować w systemie jedno-monitorowym, czy też z monitorem i odbiornikiem TV).

Wygenerowany plik, tak jak przedstawiono to w rozdziale dotyczącym instalacji X11 należy z katalogu domowego użytkownika root do katalogu /etc/X11/ i dokonać ewentualnych korekt dotyczących myszy i obsługi czcionek

Aby karta graficzna została poprawnie zainicjowana musimy wczytać odpowiednie moduły kernela. Na początku musi to być moduł, kt�ry umożliwi nam prace karty z AGP - moduł ten jest zależny od posiadanej płyty głï¿½wnej. Przykładowo dla płyt z chipsetem nforce2™ jest to moduł:

# modprobe nvidia-agp

Następnie wczytujemy moduł kernela obsługujący karty ATI:

# modprobe fglrx

Aby zmiany były trwałe, dopiszmy oba moduły do pliku /etc/modules i wykonajmy polecenie depmod -a

Na koniec musimy się upewnić, że mamy zamontowany pseudo-system plik�w shm używany do obsługi dzielonej pamięci POSIX. Wymagany wpis w /etc/fstab wygląda następująco:

none   /dev/shm   tmpfs  defaults  0 0

Test konfiguracji

Teraz możemy wr�cić do konfigurowania serwera X11 i jego testowego uruchomienia. Kiedy uruchomimy X-Window możemy sprawdzić poprawność konfiguracji pomocą program�w glxinfo™ oraz glxgears™ uruchamianych z emulatora terminala (np. xterm-a). Pierwszy z nich wyświetla dokładne informacje o naszej karcie i sterowniku, zaś drugi to program do testowania wydajności. Dobrze skonfigurowana karta graficzna pozwala osiągnąć wydajność kilku tysięcy klatek na sekundę. W przypadku problem�w standardowo zaglądamy w logi.

Część�V.�Tworzenie PLD - Praktyczny poradnik

Rozdział 18. Możliwa droga do zostania szeregowym developerem PLD

Co jest potrzebne

Każdego użytkownika Linuxa pracującego na swojej maszynie nachodziła refleksja na tematy filozoficzne - kto to wymyślił? kto to zrobił? i jak to zrobił? Pytania ciekawe - Prezentując spos�b pracy przy PLD możemy częściowo zrozumieć mechanizmy tworzenia takich projekt�w.

Naszym miejscem pracy będzie samo PLD i dodatki, kt�re poniżej spr�buje opisać. W chwili pisania tego tekstu była to wersja 1.0 ''Ra''. P�źniej jest już z g�rki - instalujemy parę pakiet�w - sam proces instalacji w praktycznie zostanie pominięty, gdyż użytkownicy już powinni wiedzieć co to jest poldek i jak się go używa.

# rpm -qa |grep rpm
rpm-4.0.2-106
rpm-build-tools-4.0.2-106
rpm-utils-4.0.2-106
rpm-perlprov-4.0.2-106
rpm-build-4.0.2-106
rpm-devel-4.0.2-106
rpm-pythonprov-4.0.2-106 

# rpm -qa |grep cvs
cvs-1.11.5-2

# rpm -qa |grep mc
mc-4.5.55-10

Zwr�cę uwagę tylko na CVS. Spos�b instalacji środowiska bardzo dobrze opisuje Baseciq - ten krok należy wykonać ze szczeg�lną starannością

Innym ważnym pakietem jest rpm plus dodatki. Głï¿½wnym zajęciem szeregowego developera jest tworzenie lub modyfikacja plik�w .spec, kt�re są głï¿½wnym czynnikiem budowania pakiet�w RPM. Są jeszcze potrzebne r�żne inne pakiety i źr�dła� - ale to już w zależności od tego co będziemy budować.

Źr�dła wiedzy

Największą skarbnicą wiedzy o RPMie i budowaniu pakiet�w możemy znaleźć w publikacji Maximum RPM - opis jest w języku angielskim i nie jest mi znane tłumaczenie na nasz język. Na szczęście są jeszcze inne źr�dełka, a także i niniejszy opis - więc powinno nam być lżej przyswajać wiedzę. Szczeg�lnie polecam stronę Grzegorza Niewęgłowskiego (lub lokalną kopię) gdzie dużo teorii i praktycznych rad może nam rozjaśnić w naszych głowach czym jest praca ze "specami".

Jest dostępny także opis stworzony przez Developera PLD lecz z tego co się dowiedziałem jest już trochę leciwy i niekt�re dane mogą być nieścisłe.

Po tej bombie teorii jaką niestety musimy przejść, czeka nas przestudiowanie jeszcze jednego dokumentu, kt�rego najnowszą wersję możemy ściągnąć z CVS PLD. Będzie to nasze pierwsze ćwiczenie.

Uruchamiamy terminal (czy to zwykły, czy też np. przez SSH) i wykonujemy kroki:

$ cd rpm
$ cvs get PLD-doc/devel-hints-pl.txt
U PLD-doc/devel-hints-pl.txt
$

Jak widać kroki wykonujemy jako zwykły użytkownik (nie root) i tej zasady będziemy się konsekwentnie trzymali.

Do katalogu ~/rpm/PLD-doc/ ściągneliśmy z repozytorium PLD dokument tekstowy devel-hints-pl.txt. W tym dokumencie zawarte są zalecenia i ustalenia jakich powinniśmy się trzymać aby tworzyć właściwe dla PLD pakiety RPM.

Przykład budowania

Teraz spr�bujemy ściągnąć jakiś .spec z CVS PLD i zbudujemy sobie jakąś paczkę - np. pakiet tar (przykład budowania 'ekg' mogliśmy obejrzeć także podczas instalacji CVS na stronie Baseciq):

$ cd rpm
$ cvs get SPECS/tar.spec
U SPECS/tar.spec
$ cd SPECS/
$ rpmbuild -ba tar.spec
błąd: File /home/users/marekc/rpm/SOURCES/tar-1.13.25.tar.gz: \
    Nie ma takiego pliku ani katalogu
$ ./getsrc tar.spec
Trying to download sources for tar-1.13.25-7
Searching for file: tar-1.13.25.tar.gz
Trying CVS... OK
Searching for file: tar-non-english-man-pages.tar.bz2
Trying CVS... OK
Searching for file: tar-man_from_debian_tar_1.13.25-2.patch
Trying CVS... OK
Searching for file: tar-info.patch
Trying CVS... OK
Searching for file: tar-pipe.patch
Trying CVS... OK
Searching for file: tar-namecache.patch
Trying CVS... OK
Searching for file: tar-error.patch
Trying CVS... OK
Searching for file: tar-sock.patch
Trying CVS... OK
Searching for file: tar-nolibrt.patch
Trying CVS... OK
Searching for file: tar-man.patch
Trying CVS... OK
Searching for file: tar-ac25x.patch
Trying CVS... OK
Searching for file: tar-dots.patch
Trying CVS... OK
Searching for file: tar-pl.po-fix.patch
Trying CVS... OK
Download opreation completed: all files retrieved successfully

W przykładzie, za szybko chcieliśmy zbudować pakiet - zaraz po ściągnięciu ''tar.spec''.

Sam .spec bez źr�deł jest jak karabin bez amunicji... Można wykorzystać skrypt 'builder' (i p�źniej nawet zalecam go używać) w katalogu SPECS, kt�ry to sam przeanalizuje potrzeby i ściągnie odpowiedniego .speca (oczywiście jeżeli tylko zawiera go repozytorium CVS), źr�dła i wykona paczki rpm i srpms - ale my nie będziemy tutaj sobie za bardzo ułatwiać pracy :-)

Po ściągnięciu plik�w dobrze jest obejrzeć danego .speca aby zobaczyć, co jest jeszcze potrzebne do zbudowania - można to zrobić zwykłym edytorem tekstowym lub wykonać:

$ cat tar.spec |grep BuildReq
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: bison
BuildRequires: gettext-devel

Wiemy już co nam jest potrzebne - Teraz sprawdzimy czy mamy te pakiety w naszym PLD:

$ rpm -q autoconf
autoconf-2.53a-1
$ rpm -q automake
automake-1.6.3-1
$ rpm -q bison
pakiet bison nie jest zainstalowany
$ rpm -q gettext-devel
pakiet gettext-devel nie jest zainstalowany
$

Czyli dw�ch, potrzebnych pakiet�w brak. A więc 'poldek' rusza do boju (tutaj już lepiej użyć konta 'root' - chyba że mamy poldka skonfigurowanego do pracy 'sudo'):

# poldek
Wczytywanie ftp://ftp.pld-linux.org/dists/[...]/RPMS/packages.dir.gz...
Wczytywanie ftp://ftp.pld-linux.org/dists/ra/[...]/packages.dir.gz...
Wczytywanie ftp://ftp.pld-linux.org/dists/ra/[...]/packages.dir.gz...
Wczytywanie ftp://ep09.kernel.pl/pub/People/[...]/packages.dir.gz...
Wczytywanie ftp://ftp.pld-linux.org/dists/[...]/packages.dir.gz...
Wczytywanie http://pld.mysza.eu.org/Ra/i686/packages.dir.gz...
Przeczytano 6814 pakiet�w
	        
Usunięto 16 zdublowanych pakiet�w z listy dostępnych
Wczytywanie /root/.poldek-cache/packages.dir.dbcache.var.lib.rpm.gz...
Przeczytano 559 pakiet�w
		   
Witaj w poldekowym trybie interaktywnym. Wpisz "help" aby otrzymać pomoc.
	    
poldek> install bison gettext-devel
Przetwarzanie zależności...
Zaznaczono 1 pakiet do instalacji:
I bison-1.35-5
Pobieranie ftp://ftp.pld-linux.org/dists/[...]/bison-1.35-5.i686.rpm...
.................................................. 100.0% [196.5K]
Uruchamianie rpm --upgrade -vh --root / --noorder...
Preparing... ########################################### [100%]
1:bison ########################################### [100%]
Installing set #2
Przetwarzanie zależności...
Zaznaczono 1 pakiet do instalacji:
I gettext-devel-0.10.40-4
Pobieranie ftp://[...]/gettext-devel-0.10.40-4.i686.rpm...
.................................................. 100.0% [295.6K]
Uruchamianie rpm --upgrade -vh --root / --noorder...
Preparing... ########################################### [100%]
1:gettext-devel ########################################### [100%]
poldek>

I jak tu nie kochać Poldka? :-)

Mamy już teoretycznie wszystko aby zbudować pakiet 'tar'. Wracamy więc do naszego zwykłego konta i:

$ rpmbuild -ba tar.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.22007
Patch #0 (tar-man_from_debian_tar_1.13.25-2.patch):
Patch #1 (tar-info.patch):
Patch #2 (tar-pipe.patch):
Patch #3 (tar-namecache.patch):
Patch #4 (tar-error.patch):
Patch #5 (tar-sock.patch):
Patch #6 (tar-nolibrt.patch):
Patch #7 (tar-man.patch):
Patch #8 (tar-ac25x.patch):
Patch #9 (tar-dots.patch):
Patch #10 (tar-pl.po-fix.patch):
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.97619
		      
[...]
		       
Zapisano: /home/users/marekc/rpm/SRPMS/tar-1.13.25-7.src.rpm
Zapisano: /home/users/marekc/rpm/RPMS/tar-1.13.25-7.i686.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.54009
+ umask 022
+ cd /home/users/marekc/rpm/BUILD
+ _autoreqprov=n
+ [ n = y ]
+ cd tar-1.13.25
+ rm -rf /home/users/marekc/tmp/tar-1.13.25-root-marekc
+ exit 0
$

[...] oznacza, wycięte przeze mnie komunikaty jakie generuje kompilowany 'tar'.

Polecenie 'rpmbuild -ba ' każe nam zbudować ze speca kompletny pakiet - ale to już wiemy z teoretycznych szkoleń ;-)

Wszelkie komunikaty w razie jakiegoś błędu podczas budowania możemy odnaleźć w pliku: '/var/tmp/rpm-tmp.22007'

Widzimy, że gotowe pakiety mamy w określonych katalogach i możemy je spokojnie zainstalować. A komunikat 'exit 0' oznacza brak błęd�w podczas budowania.

Nasz pierwszy pakiet został zbudowany.

Pozostaje jednak niedosyt - ciągle czujemy, że jak na razie korzystamy z czyjeś pracy, a w końcu pragniemy także coś zrobić dla potomności i sami chcemy stworzyć plik .spec

Pierwszy spec

No to zaczynamy. Naszym pierwszym (a właściwie moim) wykonanym specem będzie Mantis czyli system kontroli błęd�w oparty o stronę WWW (PHP) i bazę SQL Mysql.

Tutaj mała dygresja - większość pakiet�w powstaje dlatego, że danemu Developerowi był on akurat potrzebny; oznacza to że nie ma sensu pisanie na listę dyskusyjną z prośbą o stworzenie określonego pakietu bo można otrzymać parę przykrych komentarzy (w najlepszym razie).

Pierwszą czynnością jest zainstalowanie pakietu ze źr�deł. Potem notujemy sobie co należy zrobić aby dany pakiet zaczął działać - wszystko po to aby przewidzieć co dany .spec powinien zrobić aby pakiet pracował w miarę bezproblemowo po instalacji RPMa - Można to zanotować np. na kartce papieru - ale od czego mamy komputery?

Moje notatki wyglądały tak:

// MANTIS
	 
// Mysql init
# cd /etc/rc.d/init.d
# ./mysql init
# /usr/bin/mysqladmin -u mysql password 'password'
	     
// Tworzenie bazy w mysql
# mysqladmin -umysql -p create bugtracker
# cd /mantis/sql
# mysql -umysql -p bugtracker < db_generate.sql
		 
// Plik config_inc.php
	  
// Sprawdzenie i poprawka
http:/mantis/admin/check.php
		    
// Pierwsze logowanie
u: administrator
p: root
Dodać nowe i skasować stare :-)
		        
// co potrzebne do uruchomienia
- mysql
- mysql-client
- php
- php-common
- php-pcre
- php-mysql
- apache
			        
// do rpma (zmiany w związku z językiem)
plik: config_defaults_inc.php
$g_default_language = 'english';
$g_default_language = 'polish'; 
// Zamiana łańcucha w config_defaults_inc.php
sed -e s/$g_default_language = 'english';/$g_default_language = 'polish';/g
config_defaults_inc.php
      
// Zamiana usera z root na mysql
w config_inc.php

Do każdego pakietu należy podchodzić indywidualnie - dlatego parę słï¿½w o samym mantisie. System jest oparty o gotowe pliki składające się na stronę WWW, dokumentacje i plik potrzebny do stworzenia odpowiedniej bazy Mysql. Nie będziemy dokonywali żadnych kompilacji - więc uprości to nasz proces budowania i testowania pakietu.

Łącząc informacje zawarte w dostarczonej dokumentacji i własnych notatek wiemy już że głï¿½wnym zadaniem naszego RPMa będzie takie zaprojektowanie go, aby odpowiednie pliki PHP zostały przekopiowane w odpowiednie miejsce, dokonać niezbędnych poprawek w plikach konfiguracyjnych lub innych poprawek, kt�re naszym zdaniem mogą ułatwić pracę przyszłym użytkownikom. Pamiętajmy jednak żeby nie przedobrzyć.

Niestety nie wszystko uda nam się zautomatyzować - dlatego stworzymy dwa pliki tekstowe (w dw�ch wersjach językowych PL i EN) z kr�tkim opisem, co należy wykonać aby system zadziałał.

Wydaje mi się także, że dobrym zwyczajem jest po zainstalowaniu źr�deł przewidzieć właściwe zależności, aby nasz pakiet działał bez problemu na innym komputerze. Na przykład w instrukcji do instalacji mantisa w wymaganiach jest wymieniony m.in. pakiet PHP - W PLD po instalacji samego PHP, mantis będzie wyświetlał błędy. Okazuje się że pakiety w PLD są maksymalnie ''rozdrobnione'' i do działania potrzebny jest jeszcze pakiet 'php-pcre' - a do tego, żeby strony PHP odpowiednio komunikowały się z bazą 'mysql' jest potrzeba zainstalowania 'php-mysql'. Zależności może być wiele i moim skromnym zdaniem lepiej żebyśmy umieścili jakiś nadmiarowy pakiet w zależnościach niż żeby jakiegoś brakowało.

W naszym przypadku po zainstalowaniu i uruchomieniu pakietu Mantis ze źr�deł, wystarczy wykonać np. 'rpm -qa |grep php' aby wybrać odpowiednie pliki. To samo robimy z 'mysql' i 'apache'.

Zaczynamy od stworzenia pliku (możemy użyć polecenia 'touch') lub korzystamy z innego pliku .spec w celu modyfikacji do naszych potrzeb (np. 'cvs get SPECS/template.spec' spowoduje ściągnięcie szkieletu z CVS PLD). Otwieramy go w naszym ulubionym edytorze tekstowym (vim, emacs, pico, mcedit itp.)

Summary: The Mantis Bug Tracker
Summary(pl): Mantis - System Kontroli Błęd�w
Name: mantis
Version: 0.18.0a4
# define _alpha a4
Release: 1
License: GPL
Group: Development/Tools 

[...]

Zaczynamy wypełniać tzw. preambułę, czyli wstęp w kt�rym opisujemy nasz pakiet - myślę, że wyjaśnianie powyższego nie jest specjalnie potrzebne. Zwr�cę tylko uwagę na linię 'Version' i 'Ralease' - zgodnie z devel-hints-pl.txt powinno ono raczej wyglądać tak (ponieważ ta wersja mantis'a jest określona jako alpha):

Version: 0.18.0 %define alpha a4 Release: 0.%{_alpha}.1

ale u mnie powodowało to błąd przy budowaniu, gdyż jak dalej zobaczymy nazwa źr�deł korzysta z pola 'Version' i każda manipulacja na nim powoduje potrzebę przebudowania .speca lub zmianę nazwy archiwum w kt�rym są źr�dła (co jest bardzo złym nawykiem i karygodnym błędem!). Tak więc w końcu zostawiłem tak jak jest i nikt specjalnie nie zwr�cił mi na to uwagi :-) (przyp. autora: jednak p�źniejsza praktyka pokaże nam, że zmiany takie są jednak chlebem powszednim więc nie b�jmy się ich dokonywać)

[...]
	 
Source0: http://dl.sourceforge.net/mantisbt/%{name}-%{version}.tar.gz
# Source0-md5: 4c730c1ecf7a2449ef915387d85c1952
Source1: %{name}-doc-PLD.tar.gz
URL: http://mantisbt.sourceforge.net/
	     
[...]

Dalej mamy opis źr�dełek - w PLD podaje się go najczęściej w formie linku plus fraza %{name}-%{version}.tar.gz i tak naprawdę ta fraza jest najważniejsza do zbudowania pakietu, ponieważ URL (w naszym przypadku http://dl.sourceforge.net/mantisbt/) jest ignorowany. Tak więc z makra %name i %version budowana jest nazwa pakietu i taka nazwa jest wyszukiwana w ~/rpm/SOURCES/

Źr�deł programu może być kilka. U nas występuje jeszcze Source1 - jest to dodatkowa dokumentacja składająca się z dw�ch plik�w tekstowych zawierająca dodatkowe wskaz�wki po instalacyjne. Pierwotnie pr�bowałem zrobić to korzystając z mechanizmu Patch i polecenia:

diff -urN katalog_z_oryginałem katalog_z_poprawionym_oryginałem > źr�dła-pow�d.patch

opisanego w devel-manual (rozdział 1.2.2), ale mechanizm ten nie pozwala tworzyć nowych plik�w więc pozostało tylko wykonać dodatkowe źr�dła.

Pamiętajmy także aby w żadnym przypadku nie modyfikować ręcznie źr�deł programu. Prawidłowy .spec powinien wykorzystywać natywne źr�dła, a wszelkie zmiany dokonujemy w %build, %install lub za pomocą patch'�w.

Sygnatura md5 po # jest wynikiem wykorzystania tzw. distfiles i na razie to musi nam wystarczyć. Distfiles om�wimy gdy będziemy zapisywać do CVS PLD - czyli nieprędko ;-)

[...]
	 
Requires: apache >= 1.3.27-4
Requires: apache-mod_dir >= 1.3.27-4
Requires: php >= 4.0.3
Requires: php-mysql >= 4.0.3
Requires: php-pcre >= 4.3.1-4
Requires: php-common >= 4.3.1-4
Requires: mysql >= 3.23.2
Requires: mysql-client >= 3.23.56-1
Requires: sed
BuildArch: noarch
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
		    
[...]

W 'Requires' podajemy zależności, czyli co musi być zainstalowane aby dany pakiet działał lub żeby wykonały się poprawnie polecenia wykonywane przez .spec (np. sekcja %post)

W 'BuildArch' architekturę pod kt�ry przeznaczony jest RPM - u nas jest to 'noarch' czyli bez żadnej konkretnej architektury - z moich obserwacji wynika że developerzy PLD omijają to pole - chyba że jest to właśnie 'noarch'.

'BuildRoot' jest bardzo ważnym tagiem - na szczęście występuje zawsze w takiej postaci jak u nas - a oznacza katalog w kt�rym rpm będzie budował pakiet z sekcji %install naszego .speca.

[...] 
	
%define _mantisdir /home/services/httpd/mantis
# define _mantisdir /home/httpd/html/mantis
	  
%description
Mantis is a web-based bugtracking system.
	    
%description -l pl
Mantis jest systemem kontroli błęd�w opartym na interfejsie \
    WWW i MySQL. 

[...]

W tej części wykorzystujemy przydatną właściwość RPMa czyli definiowanie stałych. W naszym przykładzie '_mantisdir' jest katalogiem w kt�rym będą zainstalowane pliki dla serwera WEB. Tutaj mała uwaga dotycząca komentarza '#' - Gdy definiujemy makro wtedy komentarz nie działa, dlatego usunęliśmy '%' przed słowem 'define' (możemy także użyć frazy '%%') czyli gdybyśmy napisali:

%define _mantisdir /home/services/httpd/mantis

# %define _mantisdir /home/httpd/html/mantis

To wtedy stała '_mantisdir' miała by wartość /home/httpd/html/mantis, mimo że nie taka jest nasz intencja - Nie muszę chyba wyjaśniać jakie to może spowodować problemy?

W '%description' opisujemy kr�tko charakterystykę pakietu, a niżej widzimy jak to zrobić dla opisu w języku polskim - p�źniej RPM wykorzystując zmienne locale wyświetla odpowiednią wersję językową 'description' gdy sobie tego od RPMa życzymy.

[...]
	 
%prep
%setup -q -a1
	   
[...] 

Od tego momentu skończyliśmy wypełniać dane preambuły. Sekcja %prep może wykonać skrypt potrzebny przed instalacją plik�w. My akurat nic przed instalacją robić nie musimy dlatego sekcja ta jest pusta.

Dalej jest '%setup -q -a1' - czyli rozpakowanie źr�deł do katalogu zdefiniowanego wcześniej przez 'BuildRoot'. Dodatkowe parametry tego tagu wyłączają komunikaty przy rozpakowaniu '-q', a parametr '-a1' określa kt�re źr�dła należy rozpakować. Po '%setup' możemy także korzystać z makra '%patch' kt�ry nakłada łatki na źr�dła. Umożliwia to taką modyfikację źr�deł jakie tylko chcemy bez potrzeby zmian w samych źr�dłach (o czym pisaliśmy wcześniej).

[...]
	 
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT%{_mantisdir}
	    
cp -af *.php admin core css graphs images lang sql \
    $RPM_BUILD_ROOT%{_mantisdir}
	     
sed -e 's/root/mysql/g' config_inc.php.sample > \
    $RPM_BUILD_ROOT%{_mantisdir}/config_inc.php
      
[...]

Tak naprawdę w większości pakiet�w przed '%install' wykonywane jest makro '%build', kt�re kompiluje nam źr�dła, a w najprostszej postaci wygląda tak:

%build %configure make

U nas nie ma potrzeby wykonywania żadnych kompilacji więc od razu wykonywana jest sekcja '%install'. Na początku czyścimy sobie katalog w kt�rym będziemy instalowali nasz program (czyli 'fake root') - mimo że prawdopodobnie jest pusty - ale lepiej dmuchać na zimne. Potem dokonujemy instalacji pakietu przekazując mu w parametrze '-d' że docelowo ma być zainstalowany w 'fake root', ale same pliki pojawią się w naszym katalogu tymczasowym (TMPDIR), dlatego p�źniej za pomocą polecenia 'cp' kopiujemy pliki, jakie są potrzebne, do właściwego 'fake root' - zauważmy że pominęliśmy np. katalog 'doc'.

Następnie jeszcze za pomocą komendy 'SED' dokonujemy drobnej poprawki w pliku konfiguracyjnym mantisa - zamieniając domyślnego użytkownika MYSQL z 'root' na 'mysql'. Taką poprawkę mogliśmy wykonać wcześniej w sekcji '%prep' i tagu '%patch' ale przy tak małych poprawkach bardziej efektywniej jest to zrobić tutaj.

[...]
	 
%clean
rm -rf $RPM_BUILD_ROOT
	   
[...]

Tag '%clean' jest w .specach tworzonych dla PLD obowiązkowy i określa co należy zrobić gdy cały pakiet zostanie zbudowany. Tutaj mała uwaga - ten tag w tym miejscu nie oznacza że jest w tej chwili wykonany - jeżeli by tak było, to występujący p�źniej tag '%files' miałby niejakie problemy z nieistniejącymi już plikami. Czyli po poprawnym zbudowaniu pakietu, wykonywane jest makro '%clean', a w przypadku jakiegokolwiek błędu, nie jest - czyli rozpakowane i zainstalowane źr�dła pozostają. Umożliwia nam to np. diagnostykę w przypadku błęd�w podczas budowania pakietu.

[...]
	 
%post
if [ "$LANG" = "pl_PL" ]; then
#sed -e "s/= 'english';/= 'polish';/g" \
    %{_mantisdir}/config_defaults_inc.php > \
    #%{_mantisdir}/config_defaults_inc_PLD.php
#mv -f %{_mantisdir}/config_defaults_inc_PLD.php \
    %{_mantisdir}/config_defaults_inc.php
echo
echo "Mantis zapisany..."
echo "Więcej: /usr/share/doc/mantis-%{version}/PLD_Install_PL.txt.gz"
echo
else
echo
echo "Mantis loaded..."
echo "More: /usr/share/doc/mantis-%{version}/PLD_Install_EN.txt.gz"
echo
fi
		       
[...]

Tutaj mamy przykład co możemy zrobić z plikami, kt�re będą instalowane po zbudowaniu pakietu. Makro '%post' wykonywane jest przez RPM podczas instalacji pakietu. Zakomentowane polecenia umożliwiają zmianę w zainstalowanym pliku 'config_defaults_inc.php' zgodnie z zawartością zmiennej locale 'LANG'. P�źniej w zależności od tej zmiennej wyświetlany jest komunikat w języku PL lub EN.

Zadacie pytanie dlaczego część tych poleceń jest ''wyłączona" - ot�ż, p�źniej gdy dany .spec chcemy już udostępnić og�łowi zostanie on sprawdzony pod względem ''czystości rasowej'' :-) - W tym przypadku okazało się, że taka zmiana w plikach konfiguracyjnych, może spowodować kłopoty podczas np. zmiany użytkownika. Programy korzystające z 'locale' powinny odpowiednio reagować na zmiany 'locale' - np. po modyfikacji LANG na 'EN_en' zacząć pracować po angielsku - W naszym przypadku strona PHP nie zacznie pracować po angielsku, dlatego dodany został w/w komentarz, a w pliku 'PLD_Install_PL.txt.gz', kt�ry jest dodatkową instrukcją, co należy zrobić po instalacji pakietu RPM aby 'mantis' po uruchomieniu rozmawiał z nami po polsku.

[...]
	 
%files
%defattr(644,root,root,755)
%doc doc/* PLD_Install_PL.txt PLD_Install_EN.txt config_inc.php.sample
%dir %{_mantisdir}
%{_mantisdir}/admin/
%{_mantisdir}/core/
%{_mantisdir}/css/
%{_mantisdir}/graphs/
%{_mantisdir}/images/
%{_mantisdir}/lang/
%{_mantisdir}/sql/
%{_mantisdir}/account*
%{_mantisdir}/bug*
%{_mantisdir}/core.*
%{_mantisdir}/csv*
%{_mantisdir}/docum*
%{_mantisdir}/file*
%{_mantisdir}/history*
%{_mantisdir}/index*
%{_mantisdir}/jump*
%{_mantisdir}/log*
%{_mantisdir}/ma*
%{_mantisdir}/me*
%{_mantisdir}/news*
%{_mantisdir}/print*
%{_mantisdir}/proj*
%{_mantisdir}/set*
%{_mantisdir}/sig*
%{_mantisdir}/sum*
%{_mantisdir}/view*
				       
%config(noreplace) %{_mantisdir}/config_inc.php
%config(noreplace) %{_mantisdir}/config_defaults_inc.php
%exclude %{_mantisdir}/core/.cvsignore
				  
[...]

Dochodzimy powoli do finału :-). W sekcji tej określamy co, gdzie i jak ma zostać zainstalowane u użytkownika instalującego naszego RPMa. Tag %files jest bardzo ważny gdyż błędy spowodowane tutaj mogą uniemożliwić działanie pakietu u końcowego użytkownika. W 'podtagu':

%defattr(644,root,root,755)

określamy domyślne atrybuty instalowanych plik�w - możemy oczywiście określać atrybuty dla każdego pliku osobno.

Następnie w:

%doc doc/* PLD_Install_PL.txt PLD_Install_EN.txt config_inc.php.sample

określamy nasze pliki, kt�re znajdą się w dokumentacji. Czyli katalog 'doc/' z katalogu 'TMPDIR' i pliki z 'SOURCE1' oraz 'config_inc.php.sample' zostaną spakowane i przy instalacji pakietu RPM umieszczone w domyślnym katalogu dokumentacji - w PLD jest to /usr/share/doc/...

I wreszcie w:

%dir %{_mantisdir}

nakazujemy podczas instalacji RPM'a stworzenie katalogu zgodnie ze stałą '%{_mantisdir}' i kopiujemy pliki jakie są poniżej tego tagu. Na początku nie wypisywałem wszystkich tych katalog�w i plik�w indywidualnie, a po prostu użyłem frazy:

%{_mantisdir}

Jednak przy takiej konstrukcji i wykorzystaniu makra %config(noreplace), pojawi się błąd podczas budowania pakietu:

[...]
	 
RPM build errors:
File listed twice: /home/services/httpd/mantis/config_defaults_inc.php
File listed twice: /home/services/httpd/mantis/config_inc.php

Czyli dwa pliki miały podw�jne znaczenie - występowały na liście do skopiowania i jako pliki konfiguracyjne. Dlatego trzeba niestety zrobić listę plik�w jak to my zrobiliśmy minus pliki, kt�re znajdą się w makro '%config'. Samo makro '%config' pozwala szczeg�lnie traktować pliki konfiguracyjnie podczas kasowania RPMa lub jego aktualizacji.

Ostatnie makro:

'%exclude %{_mantisdir}/core/.cvsignore'

nakazuje wyłączenie pliku z pakietu RPM - w tym przypadku jest to pozostałość po CVS mantisa.

I to już koniec naszej pracy. Po wykonaniu polecenia 'rpmbuild -ba mantis.spec' powinien nam zbudować się pakiet rpm i srpm. Zostaje jeszcze przetestowanie czy wszystkie pliki są tam gdzie chcieliśmy, czy mają odpowiednie prawa i czy pakiet działa tak jak powinien. Jeszcze ewentualne poprawki i musimy przepuścić naszą pracę przez zestaw adaptujący 'adapter.awk'.

Ściągamy go z CVSu:

$ cvs get SPECS/adapter.awk
U SPECS/adapter.awk
$

następnie zmieniamy nazwę pliku .speca dodając na końcu np. org i wykonujemy:

$ ./adapter.awk mantis.spec.org > mantis.spec
$

W wyniku tej operacji otrzymamy 'mantis.spec' kt�ry zostaje przystosowany do wymagań PLD. Zainteresowanych zmianami, zapraszam do przestudiowania 'nowego' .speca.

Teraz możemy szukać kogoś, kto umieści naszego .speca i źr�dła w repozytorium CVS PLD. Mamy do dyspozycji listę developer�w: w mailu umieszczając załącznik z naszym .specem (oczywiście bez źr�deł - lub jeżeli mamy jakieś własne źr�dła to umieszczamy je na jakieś stronie WWW lub innym ftp. i podajemy linka - źr�dła natywne powinny dać się ściągnąć z lokacji jaką umieściliśmy w naszym .specu.). Załącznik powinien być typu plain-text.

Można także spr�bować na grupie IRC #PLD znaleźć ofiarę, kt�ra umieści naszą pracę w repozytorium.

Dobrze też w czasie nauki robienia .spec�w podglądać jak to robią inni - W repozytorium CVS jest naprawdę z czego wybierać. A my nabywając umiejętność czytania plik�w .spec możemy skupić się już tylko na odpowiednim ich napisaniu.

W końcu otrzymamy możliwość zapisu do CVS i wtedy czytamy następną część poradnika ''W krainie CVS''

Rozdział 19. W krainie CVS - czyli wielki kocioł

Wstęp

Umiemy już w miarę klecić nowe spece, naprawiać stare - chcemy dołączyć do drużyny PLD... Musimy mieć więc możliwość pogrania na boisku, a nie tylko zasiadać na trybunach jako widz. Naszym boiskiem będzie CVS a możliwość czytania i pisania do niego (Read-Write) naszym sposobem na grę :)

Jak to życiu, aby coś dostać musimy najpierw się postarać i wykonać parę czynności.

Żeby otrzymać własne konto CVS należy uzyskać poparcie już aktywnych deweloper�w. Zwykle osoby wykazujące się aktywnością na listach dyskusyjnych (podsyłające patche, itp.) prędzej czy p�źniej są wręcz proszone o zgłoszenie się po konto. W typowym przypadku wystarczy, że trzech deweloper�w wyrazi poparcie kandydata na dewelopera (trzeci z nich powinien wskazać mu dokąd powinien się zgłosić po konto). Osoba popierająca kandydata jednocześnie staje się jego opiekunem i nadzoruje jego działania w początkowej fazie. W przypadku gdyby, mimo poparcia przez niekt�rych, osoba kandydata wywoływała kontrowersje, decyzja o jego przyjęciu (lub nie) będzie podjęta zgodnie z obowiązującą procedurą rozwiązywania konflikt�w.

Kiedy już zostaniemy przyjęci, musimy wymyśleć sobie ksywkę i hasło. Potem z linii poleceń wykonujemy jednolinijkowe polecenie - wstawiając za login i haslo odpowiednie dane:

perl -e 'print "login:" . crypt("haslo", join "", (".", "/", 0..9, "A".."Z", "a".."z")[rand 64, rand 64]) . "\n"'

w wyniku kt�rego otrzymamy ciąg znak�w podobny do:

login:/APGG.cfeqPpk

Ciąg ten kopiujemy do listu e-mail z prośbą o możliwość RW na CVS PLD i wysyłamy na adres [email protected]

To na razie wszystko co możemy zrobić - trzeba czekać na odpowiedź od władzy CVS. Po kilku, kilkunastu lub kilkudziesięciu dniach przyjdzie mail z odpowiedzią. U mnie była to wiadomość podobna do:

Quoting Marek Ciesielski <[email protected]>: 

> Prosze o dostep RW do CVS PLD.
> dane do <login>:/APGG.cfeqPpk // oczywiście tej linii 
    // w mailu nie ma - dodałem ją dla przykładu :)

Witam, 

twoje konto zostało założone, proszę dopisz się do CVSROOT/users

-- 
Admin CVS <imię i nazwisko> :)

Czyli pierwsze formalności mamy za sobą. Możemy już działać na CVS. Jednak proponuję znowu trochę teorii - tym razem zdecydowana większość dokumentacji jest w języku angielskim. Mamy więc bardzo dobry, oficjalny podręcznik CVS (uwaga ponad 800KB), książkę kucharską CVS (uwaga ponad 600KB) - jest także opis po polsku - stworzony przez developer�w PLD, a także książka z cyklu leksykon kieszonkowy "CVS" Gregor N. Purdy (koszt ok. 10PLN) - tak więc jest w czym wybierać.

Jeszcze raz zwr�ćmy uwagę na maila kt�rego otrzymaliśmy. Jest tam coś o dopisaniu "users". Musimy wykonać zalecenie. Aby to zrobić musimy znowu przygotować sobie środowisko CVS - albo modyfikując istniejące, dotychczasowe konto "anonymous" albo tworząc od początku środowsko w nowym katalogu. Ja wybrałem pierwszy spos�b (trochę wbrew zaleceniom z dokumentacji - ale za to szybszy), polega on na modyfikacji każdego pliku "Root" w podkatalogach "CVS" - należy tam wpisać frazę:

:pserver:<nasz_login>@cvs.pld-linux.org:/cvsroot

Czyli w naszym przypadku wchodzimy do katalogu ./rpm i wchodzimy do każdego podkatalogu "CVS" i zmieniamy ręcznie plik "Root" - nie ma w tej chwili tych katalog�w wiele, więc nie powinno to sprawić kłopotu.

Proponuję także poustawiać sobie zmienne CVS np. CVSEDITOR itp. (szczeg�ły - oczywiście dokumentacja).

Następnie możemy już spr�bować zalogować się do CVS PLD:

$ cvs login
Logging in to :pserver:<nasz_login>@cvs.pld-linux.org:2401/cvsroot
CVS password:
$

Wpisujemy hasło kt�re wymyśleliśmy i jesteśmy zalogowani. Każdy komunikat błędu oznacza że coś wcześniej źle wykonaliśmy, albo że np. nie działa sieć. Login wykonujemy praktycznie raz i dop�ki nie wykonamy polecenia "cvs logout" jesteśmy ciągle gotowi do pracy.

Czas już zabrać się za plik "users"

$ cvs get CVSROOT/users
U CVSROOT/users
$

Do naszego lokalnego repozytorium, do katalogu CVSROOT ściągneliśmy plik users, kt�ry służy w PLD do wpisania aliasu pocztowego - przy okazji możemy zobaczyć w jakim towarzystwie przyjdzie nam pracować :)

nasz_login:użytkownik_mail@domena_naszego_email:Imię i Nazwisko:[email protected]

Ostatnie pole jest opcjonalne - wypełniamy je tylko jeśli posiadamy sw�j własny JID (o ile go posiadamy). Jeśli z r�żnych przyczyn nie korzystamy z Jabbera - omijamy tę część i zatrzymujemy się na imieniu i nazwisku. Dla zainteresowanych - istnieje oficjalny serwer Jabbera projektu PLD Linux - konta na nim zakłada Mariusz Mazur.

Edytujemy odpowiednio więc plik users (pamiętajmy, żeby zachować alfabetyczną kolejność wpis�w) - wystarczy tylko drobna znajomość alfabetu i robimy nasz pierwszy commit - czyli potwierdzamy zmiany.

$ cvs ci CVSROOT/users // po tym poleceniu edytujemy log
Checking in CVSROOT/users;
/cvsroot/CVSROOT/users,v <-- users
new revision: 1.40; previous revision: 1.39
done
cvs server: Rebuilding administrative file database
Mailing the commit message
$

Po wydaniu polecenia cvs ci CVSROOT/users otworzy się nasz ulubiony edytor i pojawi się coś podobnego do:

- added nasz_login // tu wpisujemy komentarz z kreseczką i po angielsku!!!
CVS: ---------------------------------------------------------------------
CVS: Enter Log. Lines beginning with `CVS:` are removed automatically
CVS:
CVS: Committing in .
CVS:
CVS: Updated Files:
CVS: CVSROOT/users
CVS: ---------------------------------------------------------------------

Właśnie dokonaliśmy pierwszej zmiany w repozytorium PLD. Od tej chwili każdy mail adresowany na <nasz_login>@pld-linux.org trafi na naszą skrzynkę pocztową.

Dalsza część naszych rozważań będzie już w formie konkretnych przykład�w, ponieważ to co chcemy zrobić w repozytorium CVS PLD zależy od konkretnych potrzeb. Od tej chwili nikt już nas za rączkę nie będzie prowadził, a czekają nas pot, krew, łzy i pierwsze "recenzje" naszych poczynań - np. na grupie PLD-devel czy kanale #PLD - a jedynymi nagrodami będzie brak tych recenzji, zdobyta wiedza, satysfakcja i działające paczki, kt�rych przez chwilę nikt na świecie nie będzie miał :)

Dodawanie plik�w do CVS PLD

Każdy nowy plik, kt�ry chcemy umieścić w repozytorium należy dodać za pomocą polecenia "cvs add"

$ cvs add nasz_nowy_pakiet.spec
cvs server: scheduling file `nasz_nowy_pakiet.spec' for addition
cvs server: use 'cvs commit' to add this file permanently
$

Jak widać z komentarza, aby zakończyć dodanie pliku należy zatwierdzić zmianę za pomocą polecenia "cvs ci" (polecenia podaję w formie skr�conej) - Samo zatwierdzanie (commit) robiliśmy już wcześniej przy okazji pliku "users".

Aktualizacja plik�w

Pliki możemy zaktualizować względem CVS - jeżeli nasz plik jest nowszy nie zostanie dokonana żadna zmiana na naszym lokalnym repozytorium. Aktualizacją nie dokonujemy zmian na zdalnym repozytorium.

Jeżeli w danym katalogu mamy już zdefiniowaną kartotekę (czyli mamy już odpowiedni podkatalog CVS) to aktualizacją możemy ściągnąć nowy plik.

$ cvs up python.spec
P python.spec
$

W powyższym przykładzie dokonaliśmy aktualizacji pliku "python.spec". Literka "P" określa stan aktualizacji. Poniżej przedstawię możlwe kody:

  • "A" - Plik dodany. Oznacza że na pliku dokonano operacji "ADD" (czyli dodanie do repozytorium) ale nie wykonano commitu (zatwierdzenia)

  • "C" - Plik aktualizowany jest w konflikcie ze zdalnym repozytorium. Czyli np. dokonaliśmy zmian na lokalnym repozytorium i nasz plik jest "nowszy" względem zdalnego repozytorium.

  • "M" - Plik został zmodyfikowany w zdalnym repozytorium ale nie było żadnych konflikt�w.

  • "P" - Plik był "łatany" przez serwer (kod podobny do "U")

  • "R" - Plik usunięty ale nie zatwierdzony. Czyli dokonano operacji "cvs remove" ale nie zatwierdzono zmian (poleceniem "cvs ci")

  • "U" - Plik został zaktualizowany

  • "?" - Plik jest w naszym repozytorium lokalnym ale nie ma go w zdalnym repozytorium CVS

Zatwierdzanie zmian i Distfiles

Sam przykład zatwierdzania zmian mogliśmy poznać wcześniej. Jest to najczęściej wykonywana operacja na CVS.

Jednak chciałbym zwr�cić uwagę na inny spos�b składowania źr�deł natywnych. W pewnym momencie okazuje się, że składowanie wszystkich plik�w w repozytorium CVS jest mało efektywne i powoduje zbyt duże obciążenia serwer�w. Dlatego też w PLD zastosowano mechanizm Distfiles kt�rego kr�tki opis możemy odszukać tu. W wielkim skr�cie oznacza to że preparując odpowiednio spec (pamiętacie tajemnicze md5?) i korzystając z odpowiednich opcji programu ./builder możemy sterować ściąganiem plik�w do distfiles. Tak naprawdę najczęściej wykorzystane są dwie opcje ./builder - "5" i "U". Jest to także pow�d używania programu ./builder (a nie frazy "rpmbuild -ba"), kt�rego kopię najlepiej ściągnąć z CVS. Pamiętajmy także o tym, że w systemie istnieje inny builder, kt�ry jest dostarczany z narzędziami rpm ale oczywiście nie ma on możliwości pracy z distfiles. I jeszcze jedna uwaga: Distfiles jest przeznaczony tylko dla źr�deł natywnych - wszelkie patche i nasze pliki dodajemy normalnie do CVS (najczęściej do katalogu SOURCES).

Oto przykłady użycia ./builder z odpowiednimi opcjami:

$ ./builder -5 mantis.spec
# $Revision: 12145 $, $Date: 2004-09-26 17:31:14 +0200 (nie, 26 wrz 2004) $
--20:32:59-- http://dl.sourceforge.net/mantisbt/mantis-0.18.0a4.tar.gz
=> `mantis-0.18.0a4.tar.gz'
Translacja dl.sourceforge.net... zrobiono.
Łączenie się z dl.sourceforge.net[193.1.219.87]:80... połączono się.
Żądanie HTTP wysłano, oczekiwanie na odpowiedź... 200 OK
Długość: 485,797 [application/x-tar] 

100%[====================================>] 485,797 17.99K/s ETA 00:00        

20:33:25 (17.99 KB/s) - zapisano `mantis-0.18.0a4.tar.gz' [485797/485797]

Updating source-0 md5.
$

Opcje "5" i "U" są podobne, z tym że "5" pr�buje poprawić md5 korzystając z istniejącego sources w lokalnym repozytorium. Natomiast "U" pr�buje zawsze ściągnąć źr�dła z podanego przez spec URL. Taka jest teoria. Ja praktycznie używam opcji "U" kasując wcześniej źr�dła z lokalnego repozytorium, ponieważ w innym przypadku wyskakują dziwne błędy o konflikcie z parametrem -nd

$ ./builder -U mantis.spec
# $Revision: 12145 $, $Date: 2004-09-26 17:31:14 +0200 (nie, 26 wrz 2004) $
--20:44:39-- http://dl.sourceforge.net/mantisbt/mantis-0.18.0a4.tar.gz
=> `mantis-0.18.0a4.tar.gz'
Translacja dl.sourceforge.net... zrobiono.
Łączenie się z dl.sourceforge.net[193.190.198.97]:80... połączono się.
Żądanie HTTP wysłano, oczekiwanie na odpowiedź... 200 OK
Długość: 485,797 [application/x-gzip] 

100%[====================================>] 485,797 18.80K/s ETA 00:00
20:45:04 (18.80 KB/s) - zapisano `mantis-0.18.0a4.tar.gz' [485797/485797]

Updating source-0 md5.
$

Odnogi (Branche) i Etykiety (Tag)

W każdym większym CVSie, projekty głï¿½wne rozgałęziają się tworząc tzw. branche - W przypadku PLD np. istnieje stabilny, lecz już troche leciwy branch "RA-branch", kt�ry wywodzi się z brancha głï¿½wnego HEAD. W pewnym momencie RA-branch został "zamrożony" i dokonywane są na nim tylko zmiany zawierające poprawki poważnych błęd�w lub aktualizacje związane z bezpieczeństwem. Branch HEAD "żyje" dalej i są w nim dokonywane zmiany i powstają nowe pakiety. Odgałęzień może być (i jest) wiele, co na początku troche gmatwa spojrzenie na CVS ale p�źniej doceniamy zalety tego rozwiązania. Dane odnogi mają przydzielone odpowiednie etykiety "lepkie" (ang. sticky tag) - czyli etykieta jest przekazywana każdej następnej wersji w danej odnodze. Zwykłe etykiety (ang. tag) możemy użyć np. do okreslenia indywidualnego stanu danego pliku - określając np. tag STABLE, UNSTABLE lub DEVELOP.

Jeżeli chodzi o etykietowanie to trzeba zachować rozwagę. Musimy być pewni że wiemy co chcemy osiągnąć, bo możemy popsuć pracę komuś innemu (dotyczy to także zmian w cudzych specach).

Praktycznie najczęściej wykorzystywane są następujące opcje związane z odnogami i etykietami:

$ cvs status -v mldonkey.spec // Statystyka odn�g i etykiet
===================================================================
File: mldonkey.spec Status: Up-to-date 

Working revision: 1.14.2.8 // Rewizja (wersja) robocza na lokalnym CVS 
Repository revision: 1.14.2.8 /cvsroot/SPECS/mldonkey.spec,v 
    // Rewizja na zdalnym CVS
Sticky Tag: RA-branch (branch: 1.14.2)
    // Dane dotyczące lepkiej etykiety - związanej z branchem (odnogą)
Sticky Date: (none)
Sticky Options: (none)

Existing Tags: // Istniejące etykiety zwykłe
mldonkey-2_5_3-2 (revision: 1.14.2.7)
STABLE (revision: 1.14.2.7)
mldonkey-2_5-1 (revision: 1.14.2.2)
RA-branch (branch: 1.14.2)
		   
$

Sam spos�b robienia odn�g pozostawiam innym - lepiej poczytać np. opis CVS PLD bo sam tego jeszcze nie robiłem :). Etykietowanie możemy wykonać np.: mając plik w naszym lokalnym repozytorium wydajemy polecenie:

cvs tag UNSTABLE plik.spec

czyli plik.spec otrzymał etykietę UNSTABLE.

Ostatnim przykładem będzie przenoszenie zmian między odnogami (branchami). Robiąc jakiś spec w głï¿½wnej odnodze HEAD doszliśmy do wniosku, że zmiany można ogłosić w odnodze RA-branch. Można spr�bować wykonać polecenie:

cvs update -r RA-branch -j HEAD mldonkey.init

ale najczęściej r�żnice między wersjami w odnogach są tak duże, że otrzymamy komunikat o braku automatycznej możliwości przeniesienia zmian. Wtedy można rozwiązać ten problem innym sposobem. Tworzymy np. w podkatalogu "SPECS" katalog "RA-branch" (nazwa katalogu jest nieistotna, ale pomocna). W podkatalogu "RA-branch" wykonujemy:

$ cvs get -A SPECS/plik.spec // parametr "A" usuwa tag
$ cd SPECS
$ cvs tag -b RA-branch plik.spec // nowy tag dla odnogi RA-branch
$ cp z_HEAD_plik.spec // podmieniamy plik na właściwy z HEAD
$ cvs commit -r RA-branch plik.spec // zatwierdzamy zmiany jako RA-branch
$

Myślę że komentarze są czytelne. Gdy zrobimy co najmniej jedną taką operację, to istniejący katalog RA-branch może nam służyć do p�źniejszych operacji kopiowania zmian między odnogami (np. korzystając z opcji "cvs up".

Zlecenia dla builder�w

Zdarza się często, że chcemy dać sygnał iż dany pakiet powinien zostać przebudowany przez buildery PLD (czyli takie zdalne komputery-muły robocze, kt�re przygotowują pakiety) - wtedy podczas wpisywania komentarza po wydaniu polecenia "cvs ci" należy napisać np.

- updated to version 2.5.3. Release 1 STBR for RA update general

STBR jest skr�tem od "Send To Builder Request"

Zakończenie

Zbliżamy się do końca naszego praktycznego poradnika. Nie zostało poruszonych wiele kwestii, kt�re wyjdą w codziennej pracy. Dlatego mamy do pomocy dokumentację, listy dyskusyjne, IRC, zasoby CVS i przeglądarkę GOOGLE ;). Praca ta miała na celu wprowadzić w świat pracy developerskiej i pokazać praktyczne rozwiązania niekt�rych problem�w - reszta zależy od naszej wiedzy i pracowitości - i pamiętajmy, że najważniejsze to rozwijać swoje zdolności, bo od tego zależy nasza przyszłość i przyszłość projektu dla kt�rego pracujemy :)

Część�VI.�O podręczniku

Rozdział 20. O podręczniku

Autorzy dokumentacji PLD

W tworzeniu tej pracy pośrednio lub bezpośrednio udział wzieli (w kolejności alfabetycznej):

Rozdział 21. 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ęzyku angielskim możemy odnaleźć na stronie GNU Free Documentation License. Tłumaczenie starszej wersji 1.1 zostanie tutaj przytoczone i znajduje się na stronie GNU.org.pl. R�żnice między wersją 1.1 a 1.2 niniejszej licencji w wersji angielskiej możemy przeczytać korzystając z tego odnośnika

Wersja 1.1, marzec 2000

Copyright (c) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Zezwala się na kopiowanie i rozpowszechnianie wiernych kopii niniejszego dokumentu licencyjnego, jednak bez prawa wprowadzania zmian.

0. Preambuła

Celem niniejszej licencji jest zagwarantowanie wolnego dostępu do podręcznika, treści książki i wszelkiej dokumentacji w formie pisanej oraz zapewnienie każdemu użytkownikowi swobody kopiowania i rozpowszechniania wyżej wymienionych, z dokonywaniem modyfikacji lub bez, zar�wno w celach komercyjnych, jak i nie komercyjnych. Ponad to Licencja ta pozwala przyznać zasługi autorowi i wydawcy przy jednoczesnym ich zwolnieniu z odpowiedzialności za modyfikacje dokonywane przez innych.

Niniejsza Licencja zastrzega też, że wszelkie prace powstałe na podstawie tego dokumentu muszą nosić cechę wolnego dostępu w tym samym sensie co produkt oryginalny. Licencja stanowi uzupełnienie Powszechnej Licencji Publicznej GNU (GNU General Public License), kt�ra jest licencją dotyczącą wolnego oprogramowania.

Niniejsza Licencja została opracowana z zamiarem zastosowania jej do podręcznik�w do wolnego oprogramowania, ponieważ wolne oprogramowanie wymaga wolnej dokumentacji: wolny program powinien być rozpowszechniany z podręcznikami, kt�rych dotyczą te same prawa, kt�re wiążą się z oprogramowaniem. Licencja ta nie ogranicza się jednak do podręcznik�w oprogramowania. Można ją stosować do r�żnych dokument�w tekstowych, bez względu na ich przedmiot oraz niezależnie od tego, czy zostały opublikowane w postaci książki drukowanej. Stosowanie tej Licencji zalecane jest głï¿½wnie w przypadku prac, kt�rych celem jest instruktaż lub pomoc podręczna.

1. Zastosowanie i definicje

Niniejsza Licencja stosuje się do podręcznik�w i innych prac, na kt�rych umieszczona jest pochodząca od właściciela praw autorskich informacja, że dana praca może być rozpowszechniana wyłącznie na warunkach niniejszej Licencji. Używane poniżej słowo "Dokument" odnosić się będzie do wszelkich tego typu publikacji. Ich odbiorcy nazywani będą licencjobiorcami.

"Zmodyfikowana wersja" Dokumentu oznacza wszelkie prace zawierające Dokument lub jego część w postaci dosłownej bądź zmodyfikowanej i/lub przełożonej na inny język.

"Sekcją drugorzędną" nazywa się dodatek opatrzony odrębnym tytułem lub sekcję początkową Dokumentu, kt�ra dotyczy wyłącznie związku wydawc�w lub autor�w Dokumentu z og�lną tematyką Dokumentu (lub zagadnieniami z nią związanymi) i nie zawiera żadnych treści bezpośrednio związanych z og�lną tematyką (na przykład, jeżeli Dokument stanowi w części podręcznik matematyki, Sekcja drugorzędna nie może wyjaśniać zagadnień matematycznych). Wyżej wyjaśniany związek może się natomiast wyrażać w aspektach historycznym, prawnym, komercyjnym, filozoficznym, etycznym lub politycznym.

"Sekcje niezmienne" to takie Sekcje drugorzędne, kt�rych tytuły są ustalone jako tytuły Sekcji niezmiennych w nocie informującej, że Dokument został opublikowany na warunkach Licencji.

"Treść okładki" to pewne kr�tkie fragmenty tekstu, kt�re w nocie informującej, że Dokument został opublikowany na warunkach Licencji, są opisywane jako "do umieszczenia na przedniej okładce" lub "do umieszczenia na tylnej okładce".

"Jawna" kopia Dokumentu oznacza kopię czytelną dla komputera, zapisaną w formacie, kt�rego specyfikacja jest publicznie dostępna. Zawartość tej kopii może być oglądana i edytowana bezpośrednio za pomocą typowego edytora tekstu lub (w przypadku obraz�w złożonych z pikseli) za pomocą typowego programu graficznego lub (w przypadku rysunk�w) za pomocą og�lnie dostępnego edytora rysunk�w. Ponadto kopia ta stanowi odpowiednie dane wejściowe dla program�w formatujących tekst lub dla program�w konwertujących do r�żnych format�w odpowiednich dla program�w formatujących tekst. Kopia spełniająca powyższe warunki, w kt�rej jednak zostały wstawione znaczniki mające na celu utrudnienie dalszych modyfikacji przez czytelnik�w, nie jest Jawna. Kopię, kt�ra nie jest "Jawna", nazywa się "Niejawną".

Przykładowe formaty kopii Jawnych to: czysty tekst ASCII bez znacznik�w, format wejściowy Texinfo, format wejściowy LaTeX, SGML lub XML wykorzystujące publicznie dostępne DTD, standardowy prosty HTML przeznaczony do ręcznej modyfikacji. Formaty niejawne to na przykład PostScript, PDF, formaty własne, kt�re mogą być odczytywane i edytowane jedynie przez własne edytory tekstu, SGML lub XML, dla kt�rych DTD i/lub narzędzia przetwarzające nie są og�lnie dostępne, oraz HTML wygenerowany maszynowo przez niekt�re procesory tekstu jedynie w celu uzyskania danych wynikowych.

"Strona tytułowa" oznacza, w przypadku książki drukowanej, samą stronę tytułową oraz kolejne strony zawierające informacje, kt�re zgodnie z tą Licencją muszą pojawić się na stronie tytułowej. W przypadku prac w formatach nieposiadających strony tytułowej "Strona tytułowa" oznacza tekst pojawiający się najbliżej tytułu pracy, poprzedzający początek tekstu głï¿½wnego.

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�wiącej, że do Dokumentu ma zastosowanie niniejsza Licencja, a także pod warunkiem nie umieszczania żadnych dodatkowych ograniczeń, kt�re nie wynikają z Licencji. Licencjobiorca nie ma prawa używać żadnych technicznych metod pomiarowych utrudniających lub kontrolujących czytanie lub dalsze kopiowanie utworzonych i rozpowszechnianych przez siebie kopii. Może jednak pobierać opłaty za udostępnianie kopii. W przypadku dystrybucji dużej liczby kopii Licencjobiorca jest zobowiązany przestrzegać warunk�w wymienionych w punkcie 3.

Licencjobiorca może także wypożyczać kopie na warunkach opisanych powyżej, a także wystawiać je publicznie.

3. Kopiowanie ilościowe

Jeżeli Licencjobiorca publikuje drukowane kopie Dokumentu w liczbie większej niż 100, a licencja Dokumentu wymaga umieszczenia Treści okładki, należy dołączyć kopie okładek, kt�re zawierają całą wyraźną i czytelną Treść okładki: treść przedniej okładki, na przedniej okładce, a treść tylnej okładki, na tylnej okładce. Obie okładki muszą też jasno i czytelnie informować o Licencjobiorcy jako wydawcy tych kopii. Okładka przednia musi przedstawiać pełny tytuł; wszystkie słowa muszą być r�wnie dobrze widoczne i czytelne. Licencjobiorca może na okładkach umieszczać także inne informacje dodatkowe. Kopiowanie ze zmianami ograniczonymi do okładek, dop�ki nie narusza tytułu Dokumentu i spełnia opisane warunki, może być traktowane pod innymi względami jako kopiowanie dosłowne.

Jeżeli napisy wymagane na kt�rejś z okładek są zbyt obszerne, by mogły pozostać czytelne po ich umieszczeniu, Licencjobiorca powinien umieścić ich początek(taką ilość, jaka wydaje się rozsądna) na rzeczywistej okładce, a pozostałą część na sąsiednich stronach.

W przypadku publikowania lub rozpowszechniania Niejawnych kopii Dokumentu w liczbie większej niż 100, Licencjobiorca zobowiązany jest albo dołączyć do każdej z nich Jawną kopię czytelną dla komputera, albo wymienić w lub przy każdej kopii Niejawnej publicznie dostępną w sieci komputerowej lokalizację pełnej kopii Jawnej Dokumentu, bez żadnych informacji dodanych -- lokalizację, do kt�rej każdy użytkownik sieci miałby bezpłatny anonimowy dostęp za pomocą standardowych publicznych protokołï¿½w sieciowych. W przypadku drugim Licencjobiorca musi podjąć odpowiednie środki ostrożności, by wymieniona kopia Jawna pozostała dostępna we wskazanej lokalizacji przynajmniej przez rok od momentu rozpowszechnienia ostatniej kopii Niejawnej (bezpośredniego lub przez agent�w albo sprzedawc�w) danego wydania.

Zaleca się, choć nie wymaga, aby przed rozpoczęciem rozpowszechniania dużej liczby kopii Dokumentu, Licencjobiorca skontaktował się z jego autorami celem uzyskania uaktualnionej wersji Dokumentu.

4. Modyfikacje

Licencjobiorca może kopiować i rozpowszechniać Zmodyfikowaną wersję Dokumentu na zasadach wymienionych powyżej w punkcie 2 i 3 pod warunkiem ścisłego przestrzegania niniejszej Licencji. Zmodyfikowana wersja pełni wtedy rolę Dokumentu, a więc Licencja dotycząca modyfikacji i rozpowszechniania Zmodyfikowanej wersji przenoszona jest na każdego, kto posiada jej kopię. Ponadto Licencjobiorca musi w stosunku do Zmodyfikowanej wersji spełnić następujące wymogi:

  • A. Użyć na Stronie tytułowej (i na okładkach, o ile istnieją) tytułu innego niż tytuł Dokumentu i innego niż tytuły poprzednich wersji (kt�re, o ile istniały, powinny zostać wymienione w Dokumencie, w sekcji Historia). Tytułu jednej z ostatnich wersji Licencjobiorca może użyć, jeżeli jej wydawca wyrazi na to zgodę.

  • B. Wymienić na Stronie tytułowej, jako autor�w, jedną lub kilka os�b albo jednostek odpowiedzialnych za autorstwo modyfikacji Zmodyfikowanej wersji, a także przynajmniej pięciu spośr�d pierwotnych autor�w Dokumentu (wszystkich, jeśli było ich mniej niż pięciu).

  • C. Umieścić na Stronie tytułowej nazwę wydawcy Zmodyfikowanej wersji.

  • D. Zachować wszelkie noty o prawach autorskich zawarte w Dokumencie.

  • E. Dodać odpowiednią notę o prawach autorskich dotyczących modyfikacji obok innych not o prawach autorskich.

  • F. Bezpośrednio po notach o prawach autorskich, zamieścić notę licencyjną zezwalającą na publiczne użytkowanie Zmodyfikowanej wersji na zasadach niniejszej Licencji w postaci podanej w Załączniku poniżej.

  • G. Zachować w nocie licencyjnej pełną listę Sekcji niezmiennych i wymaganych Treści okładki podanych w nocie licencyjnej Dokumentu.

  • H. Dołączyć niezmienioną kopię niniejszej Licencji.

  • I. Zachować sekcję zatytułowaną "Historia" oraz jej tytuł i dodać do niej informację dotyczącą przynajmniej tytułu, roku publikacji, nowych autor�w i wydawcy Zmodyfikowanej wersji zgodnie z danymi zamieszczonymi na Stronie tytułowej. Jeżeli w Dokumencie nie istnieje sekcja pod tytułem "Historia", należy ją utworzyć, podając tytuł, rok, autor�w i wydawcę Dokumentu zgodnie z danymi zamieszczonymi na stronie tytułowej, a następnie dodając informację dotyczącą Zmodyfikowanej wersji, jak opisano w poprzednim zdaniu.

  • J. Zachować wymienioną w Dokumencie (jeśli taka istniała) informację o lokalizacji sieciowej, publicznie dostępnej Jawnej kopii Dokumentu, a także o podanych w Dokumencie lokalizacjach sieciowych poprzednich wersji, na kt�rych został on oparty. Informacje te mogą się znajdować w sekcji "Historia". Zezwala się na pominięcie lokalizacji sieciowej prac, kt�re zostały wydane przynajmniej cztery lata przed samym Dokumentem, a także tych, kt�rych pierwotny wydawca wyraża na to zgodę.

  • K. W każdej sekcji zatytułowanej "Podziękowania" lub "Dedykacje" zachować tytuł i treść, oddając r�wnież ton każdego z podziękowań i dedykacji.

  • L. Zachować wszelkie Sekcje niezmienne Dokumentu w niezmienionej postaci (dotyczy zar�wno treści, jak i tytułu). Numery sekcji i r�wnoważne im oznaczenia nie są traktowane jako należące do tytułï¿½w sekcji.

  • M. Usunąć wszelkie sekcje zatytułowane "Adnotacje". Nie muszą one być załączane w Zmodyfikowanej wersji.

  • N. Nie nadawać żadnej z istniejących sekcji tytułu "Adnotacje" ani tytułu pokrywającego się z jakąkolwiek Sekcją niezmienną.

Jeżeli Zmodyfikowana wersja zawiera nowe sekcje początkowe lub dodatki stanowiące Sekcje drugorzędne i nie zawierające materiału skopiowanego z Dokumentu, Licencjobiorca może je lub ich część oznaczyć jako sekcje niezmienne. W tym celu musi on dodać ich tytuły do listy Sekcji niezmiennych zawartej w nocie licencyjnej Zmodyfikowanej wersji. Tytuły te muszą być r�żne od tytułï¿½w pozostałych sekcji.

Licencjobiorca może dodać sekcję "Adnotacje", pod warunkiem, że nie zawiera ona żadnych treści innych niż adnotacje dotyczące Zmodyfikowanej wersji -- mogą to być na przykład stwierdzenia o recenzji koleżeńskiej albo o akceptacji tekstu przez organizację jako autorytatywnej definicji standardu.

Na końcu listy Treści okładki w Zmodyfikowanej wersji, Licencjobiorca może dodać fragment "do umieszczenia na przedniej okładce" o długości nie przekraczającej pięciu słï¿½w, a także fragment o długości do 25 słï¿½w "do umieszczenia na tylnej okładce". Przez każdą jednostkę (lub na mocy ustaleń przez nią poczynionych) może zostać dodany tylko jeden fragment z przeznaczeniem na przednią okładkę i jeden z przeznaczeniem na tylną. Jeżeli Dokument zawiera już treść okładki dla danej okładki, dodaną uprzednio przez Licencjobiorcę lub w ramach ustaleń z jednostką, w imieniu kt�rej działa Licencjobiorca, nowa treść okładki nie może zostać dodana. Dopuszcza się jednak zastąpienie poprzedniej treści okładki nową pod warunkiem wyraźnej zgody poprzedniego wydawcy, od kt�rego stara treść pochodzi.

Niniejsza Licencja nie oznacza, iż autor (autorzy) i wydawca (wydawcy) wyrażają zgodę na publiczne używanie ich nazwisk w celu zapewnienia autorytetu jakiejkolwiek Zmodyfikowanej wersji.

5. Łączenie dokument�w

Licencjobiorca może łączyć Dokument z innymi dokumentami wydanymi na warunkach niniejszej Licencji, na warunkach podanych dla wersji zmodyfikowanych w części 4 powyżej, jednak tylko wtedy, gdy w połączeniu zostaną zawarte wszystkie Sekcje niezmienne wszystkich oryginalnych dokument�w w postaci niezmodyfikowanej i gdy będą one wymienione jako Sekcje niezmienne połączenia w jego nocie licencyjnej.

Połączenie wymaga tylko jednej kopii niniejszej Licencji, a kilka identycznych Sekcji niezmiennych może zostać zastąpionych jedną. Jeżeli istnieje kilka Sekcji niezmiennych o tym samym tytule, ale r�żnej zawartości, Licencjobiorca jest zobowiązany uczynić tytuł każdej z nich unikalnym poprzez dodanie na jego końcu, w nawiasach, nazwy oryginalnego autora lub wydawcy danej sekcji, o ile jest znany, lub unikalnego numeru. Podobne poprawki wymagane są w tytułach sekcji na liście Sekcji niezmiennych w nocie licencyjnej połączenia.

W połączeniu Licencjobiorca musi zawrzeć wszystkie sekcje zatytułowane "Historia" z dokument�w oryginalnych, tworząc jedną sekcję "Historia". Podobnie ma postąpić z sekcjami "Podziękowania" i "Dedykacje". Wszystkie sekcje zatytułowane "Adnotacje" należy usunąć.

6. Zbiory dokument�w

Licencjobiorca może utworzyć zbi�r składający się z Dokumentu i innych dokument�w wydanych zgodnie z niniejszą Licencją i zastąpić poszczeg�lne kopie Licencji pochodzące z tych dokument�w jedną kopią dołączoną do zbioru, pod warunkiem zachowania zasad Licencji dotyczących kopii dosłownych we wszelkich innych aspektach każdego z dokument�w.

Z takiego zbioru Licencjobiorca może wyodrębnić pojedynczy dokument i rozpowszechniać go niezależnie na zasadach niniejszej Licencji, pod warunkiem zamieszczenia w wyodrębnionym dokumencie kopii niniejszej Licencji oraz zachowania zasad Licencji we wszystkich aspektach dotyczących dosłownej kopii tego dokumentu.

7. Zestawienia z pracami niezależnymi

Kompilacja Dokumentu lub jego pochodnych z innymi oddzielnymi i niezależnymi dokumentami lub pracami nie jest uznawana za Zmodyfikowaną wersję Dokumentu, chyba że odnoszą się do niej jako do całości prawa autorskie. Taka kompilacja jest nazywana zestawieniem, a niniejsza Licencja nie dotyczy samodzielnych prac skompilowanych z Dokumentem, jeśli nie są to pochodne Dokumentu.

Jeżeli do kopii Dokumentu odnoszą się wymagania dotyczące Treści okładki wymienione w części 3 i jeżeli Dokument stanowi mniej niż jedną czwartą całości zestawienia, Treść okładki Dokumentu może być umieszczona na okładkach zamykających Dokument w obrębie zestawienia. W przeciwnym razie Treść okładki musi się pojawić na okładkach całego zestawienia.

8. Tłumaczenie

Tłumaczenie jest uznawane za rodzaj modyfikacji, a więc Licencjobiorca może rozpowszechniać tłumaczenia Dokumentu na zasadach wymienionych w punkcie 4. Zastąpienie Sekcji niezmiennych ich tłumaczeniem wymaga specjalnej zgody właścicieli prawa autorskiego. Dopuszcza się jednak zamieszczanie tłumaczeń wybranych lub wszystkich Sekcji niezmiennych obok ich wersji oryginalnych. Podanie tłumaczenia niniejszej Licencji możliwe jest pod warunkiem zamieszczenia także jej oryginalnej wersji angielskiej. W przypadku niezgodności pomiędzy zamieszczonym tłumaczeniem a oryginalną wersją angielską niniejszej Licencji moc prawną ma oryginalna wersja angielska.

9. Wygaśnięcie

Poza przypadkami jednoznacznie dopuszczonymi na warunkach niniejszej Licencji nie zezwala się Licencjobiorcy na kopiowanie, modyfikowanie, czy rozpowszechnianie Dokumentu ani też na cedowanie praw licencyjnych. We wszystkich pozostałych wypadkach każda pr�ba kopiowania, modyfikowania lub rozpowszechniania Dokumentu albo cedowania praw licencyjnych jest nieważna i powoduje automatyczne wygaśnięcie praw, kt�re licencjobiorca nabył z tytułu Licencji. Niemniej jednak w odniesieniu do stron, kt�re już otrzymały od Licencjobiorcy kopie albo prawa w ramach niniejszej Licencji, licencje nie zostaną anulowane, dop�ki strony te w pełni się do nich stosują.

10. Przyszłe wersje Licencji

W miarę potrzeby Free Software Foundation może publikować nowe poprawione wersje GNU Free Documenation License. Wersje te muszą pozostawać w duchu podobnym do wersji obecnej, choć mogą się r�żnić w szczeg�łach dotyczących nowych problem�w czy zagadnień. Patrz http://www.gnu.org/copyleft/. Każdej wersji niniejszej Licencji nadaje się wyr�żniający ją numer. Jeżeli w Dokumencie podaje się numer wersji Licencji, oznaczający, iż odnosi się do niego podana "lub jakakolwiek p�źniejsza" wersja licencji, Licencjobiorca ma do wyboru stosować się do postanowień i warunk�w albo tej wersji, albo kt�rejkolwiek wersji p�źniejszej opublikowanej oficjalnie (nie jako propozycja) przez Free Software Foundation. Jeśli Dokument nie podaje numeru wersji niniejszej Licencji, Licencjobiorca może wybrać dowolną wersję kiedykolwiek opublikowaną (nie jako propozycja) przez Free Software Foundation.

Załącznik: Jak zastosować tę Licencję dla swojego dokumentu.

Aby zastosować tę Licencję w stosunku do dokumentu swojego autorstwa, dołącz kopię Licencji do dokumentu i zamieść następującą informację o prawach autorskich i uwagi o licencji bezpośrednio po stronie tytułowej.

Copyright (c) ROK TWOJE IMIE I NAZWISKO Udziela się zezwolenia do kopiowania rozpowszechniania i/lub modyfikację tego dokumentu zgodnie z zasadami Licencji GNU Wolnej Dokumentacji w wersji 1.1 lub dowolnej p�źniejszej opublikowanej przez Free Software Foundation; wraz z zawartymi Sekcjami Niezmiennymi LISTA TYTUŁï¿½W SEKCJI, wraz z Tekstem na Przedniej Okładce LISTA i z Tekstem na Tylnej Okładce LISTA. Kopia licencji załączona jest w sekcji zatytułowanej "GNU Free Documentation License"

Jeśli nie zamieszczasz Sekcji Niezmiennych, napisz "nie zawiera Sekcji Niezmiennych" zamiast spisu sekcji niezmiennych. Jeśli nie umieszczasz Teksu na Przedniej Okładce wpisz "bez Tekstu na Okładce" w miejsce "wraz z Tekstem na Przedniej Okładce LISTA", analogicznie postąp z "Tekstem na Tylnej Okładce"

Jeśli w twoim dokumencie zawarte są nieszablonowe przykłady kodu programu, zalecamy abyś także uwolnił te przykłady wybierając licencję wolnego oprogramowania, taką jak Powszechna Licencja Publiczna GNU, w celu zapewnienia możliwości ich użycia w wolnym oprogramowaniu.