W ostatnich latach zauważalne jest coraz większe rozpowszechnienie systemówUNIXowych i im pokrewnych. Szeroką popularność zdobywają systemy z rodziny BSD, Linux, czy Solaris. Celem mojego artykułu będzie przedstawienie Państwu systemów BSD oraz ich obiektywne porównanie z nieco szerzej znanym -- szczególnie w środowisku małych serwerów -- Linuxem.
Łyk historiiPoczątki systemów z rodziny BSD sięgają roku 1971, kiedy to 3 listopada pierwsza edycja, napisana w assemblerze dla komputerów DEC PDP-11/20 ujrzała światło dzienne. Dwa lata później kod źródłowy systemu został przepisany do języka C i pod tą postacią został opublikowany jako czwarta edycja. Kolejnym krokiem ewolucji było powstanie systemu 1BSD w oparciu o szóstą edycję; miało to miejsce w 1977 roku, natomiast rok później istniała już wersja 2BSD. W następnej wersji (3BSD, 1979 r.) wprowadzono poważne udoskonalenia -- m.in. obsługę pamięci wirtualnej, a także stronicowanie pamięci. Gałąź 4BSD była ostatnią rozwijaną na UC Berkeley. Właśnie wtedy, w latach 1980-1994 powstało najwięcej udoskonaleń systemu, zastosowanych również przez wielu innych producentów oprogramowania.
Pierwsze wersje systemu FreeBSD były faktycznie zestawem łat dla 386BSD, jednakże bardzo szybko grupa deweloperów usamodzielniła się. W ten sposób powstał system FreeBSD 1.0 (1993 r.), którego rozwój został jednak bardzo szybko zahamowany restrykcjami licencyjnymi. Programistów zmuszono do usunięcia licencjonowanego kodu i oparcia się na zubożonej dystrybucji 4.4BSD Lite2. Powstały system nazwano FreeBSD 2.0 (1995 r.) i rozwijano niezależnie pod szyldem FreeBSD Inc i Walnut Creek CDROM.
W międzyczasie system zyskiwał coraz większą popularność. Na FreeBSD decydowały się duże firmy, wymagające pełnej niezawodności, ponadprzeciętnej wydajności i bezpieczeństwa; doskonałymi przykładami są serwisy yahoo.com, cdrom.com, qwest.net, a do niedawna także hotmail.com. To oczywiście jedynie bardzo niewielka część listy korporacji, które funkcjonują w oparciu o systemy z rodziny BSD.
System NetBSD również pochodzi od 4.4BSD Lite2 (pierwsza edycja w 1994 roku), jednakże w tym wypadku celem programistów było uzyskanie zgodności z jak największą liczbą platform sprzętowych. W chwili obecnej NetBSD pracuje na 30 różnych platformach, od VAX do Atari.
Celem przyświecającym programistom OpenBSD było zapewnienie dużego bezpieczeństwa systemu, nie tracąc wieloplatformowości, dlatego też pierwsza wersja (1996 r.) została oparta na NetBSD 1.1, a obsługiwała 9 platform sprzętowych. Od tego czasu autorzy audytują każdy fragment kodu pod kątem jakichkolwiek zagrożeń bezpieczeństwa. OpenBSD jest też pierwszym systemem, w którym znalazła się tak szeroka obsługa kryptografii. Jako, że system nie jest rozwijany w USA, autorzy nie musieli dbać o restrykcje eksportowe.
CharakterystykaFreeBSD jest wydajnym i bezpiecznym systemem operacyjnym, rozprowadzanym na licencji BSD dla platform IA32 (również SMP) oraz DEC Alpha. W trakcie rozwoju są porty dla platform IA64, Sparc64 i PPC. Jądro systemu zapewnia pełną zgodność binarną z Linuxem, SCO Unixem, NetBSD i BSD/OS, co pozwala na bezproblemowe uruchamianie aplikacji działających w innych środowiskach, jednocześnie nie powodując ich spowolnienia działania. Natywnym systemem plików jest FFS z rozszerzeniami softupdates, pozwalającymi na kilkukrotne przyspieszenie operacji na metadanych. Podsystem wirtualnej pamięci jest uznawany w chwili obecnej za jedną z najlepszych implemetacji, czego dowodem jest przeniesienie znacznej części jego kodu do jądra Linuxa 2.4. Również stos TCP/IP (z rozszerzeniami T/TCP) jest uznawany za wzorcową implementację, głównie ze względu na wydajność (zero copy sockets, jednoprzejściowe generowanie sumy kontrolnej) oraz przejrzystość kodu. Wbudowany system pakietów i portów pozwala na wygodne i bezproblemowe instalowanie zewnętrznych aplikacji, zarówno w postaci binarnych paczek, przygotowywanych razem z dystrybucją, jak i ściąganych oraz kompilowanych na żądanie.
Porównanie z LinuxemPierwszym elementem, na który chciałbym zwrócić Państwa uwagę jest fakt, że pod nazwą Linux kryje się samo jądro systemu, bez towarzyszących aplikacji, które są rozprowadzane osobno. Natomiast w przypadku systemów z rodziny BSD -- dostarczony system zawiera komplet potrzebnego oprogramowania systemowego. Z takim sposobem organizacji dystrybucji wiąże się jeszcze jedna zaleta -- całość jest zarządzana przez jeden coreteam i znajduje się we wspólnym repozytorium. Należy podkreślić, że programiści używają systemu CVS do synchronizacji źródeł, natomiast w przypadku Linuxa, najczęściej synchronizacja jest wykonywana ręcznie, przy pomocy plików-łat. Użytkownik otrzymuje razem z systemem pełne źródła, które może uaktualniać przy pomocy aplikacji CVS lub CVSup, a po aktualizacji przebudować cały system ze źródeł. Wszystkie kroki uaktualnienia można wykonać bez przerywania pracy serwera. Różnica tkwi również w sposobie licencjonowania kodu źródłowego. W przypadku Linuxa jest to GNU Public License, natomiast rodzina BSD rozprowadzane jest na mocy własnej licencji, która jest bardziej liberalna niż GPL -- pozwala na dowolne modyfikacje kodu, bez konieczności umieszczania informacji o autorze oryginału.
Kolejne różnice można zauważyć w strukturze systemu. Większość dystrybucji Linuxa łączy w sobie elementy SysV i BSD. Uwidacznia się to w wyglądzie systemu plików, skryptów startowych, a także sposobu wywoływania niektórych poleceń (np. init, ifconfig, ps). Należy dodać, że pod tym względem najbardziej zbliżona do rodziny systemów BSD jest dystrybucja Slackware Linux.
| Ścieżka | Zastosowanie |
| /bin/ | Podstawowe aplikacje dla trybu single- i multiuser |
| /boot/ | Programy i pliki konfiguracyjne wykorzystywane podczas startu systemu. |
| /boot/defaults/ | Domyślne wartości plików konfiguracyjnych wykorzystywanych podczas startu |
| /dev/ | Pliki urządzeń |
| /dev/MAKEDEV | Skrypt tworzący pliki urządzeń |
| /dev/fd/ | Reprezentacja deskryptorów plików |
| /etc/ | Pliki konfiguracyjne i skrypty |
| /etc/defaults/ | Domyślne wartości plików konfiguracyjnych |
| /etc/gnats/ | Konfiguracja systemu raportowania błędów |
| /etc/isdn/ | Konfiguracja obsługi urządzeń ISDN |
| /etc/kerberosIV/ | Konfiguracja Kerberos IV |
| /etc/localtime | Konfiguracja strefy czasowej |
| /etc/mail/ | Konfiguracja MTA |
| /etc/mtree/ | Wzorcowe drzewa katalogów |
| /etc/namedb/ | Konfiguracja i strefy dla BINDa |
| /etc/periodic/ | Skrypty uruchamiane cyklicznie |
| /etc/ppp/ | Konfiguracja protokołu PPP |
| /etc/ssl/ | Konfiguracja OpenSSL |
| /etc/uucp/ | Konfiguracja podsystemu UUCP |
| /kernel | Jądro systemu |
| /modules/ | Moduły jądra |
| /proc/ | System plików informacji o procesach |
| /root/ | Katalog domowy administratora |
| /sbin/ | Aplikacje administratora |
| /stand/ | Środowisko instalatora |
| /tmp/ | Katalog tymczasowy |
| /usr/bin/ | Aplikacje dla użytkowników |
| /usr/games/ | Gry tekstowe |
| /usr/include/ | Pliki nagłówkowe |
| /usr/lib/ | Biblioteki systemowe |
| /usr/libdata/ | Dane dla niektórych aplikacji |
| /usr/libexec/ | Demony wykonywane przez inne aplikacje |
| /usr/local/ | Binaria, dane i pliki konfiguracyjne aplikacji zewnętrznych |
| /usr/obj/ | Katalog tymczasowy do kompilacji systemu ze źródeł |
| /usr/ports/ | Kolekcja portów |
| /usr/sbin/ | Samodzielne demony i aplikacje systemowe |
| /usr/share/ | Pliki danych niezależne od architektury |
| /usr/src/ | Źródła systemu |
| /usr/X11R6/ | Dystrybucja X11R6 |
| /var/account | Dzienniki aktywności użytkowników |
| /var/at/ | Kolejka dla poleceń wykonywanych o określonej porze |
| /var/backups/ | Kopie zapasowe najważniejszych plików konfiguracyjnych |
| /var/crash/ | Obrazy pamięci jądra w przypadku błędu fatalnego |
| /var/cron/ | Pliki konfiguracyjne cron'a |
| /var/db/ | Systemowe bazy danych |
| /var/games/ | Pliki tymczasowe gier |
| /var/log/ | Dzienniki systemowe |
| /var/mail/ | Skrzynki pocztowe użytkowników |
| /var/preserve/ | Miejsce składowania edytowanych plików, w przypadku błędu edytora |
| /var/msgs/ | Wiadomości systemowe |
| /var/quotas/ | Ograniczenia ilości zajmowanego miejsca przez użytkowników |
| /var/rwho/ | Pliki danych demona rwho |
| /var/spool/ | Kolejki wydruku i poczty |
| /var/tmp/ | Katalog tymczasowy nie czyszczony podczas startu systemu |
| /var/yp/ | Konfiguracja dla systemu NIS |
Oprócz struktury katalogów, różnice występują także w nazewnictwie większości plików specjalnych urządzeń. Szczególnie jest to widoczne w przypadku dysków, których wzór nazewnictwa jest bardzo przejrzysty, np. /dev/ad0s1a, co oznacza pierwszy dysk ATA, pierwszą partycję i root filesystem na niej. Wprowadzenie takiego schematu nazw znacznie ułatwiło pracę administratora, szczególnie biorąc pod uwagę fakt, że FFS pozwala na istnienie wielu systemów plików na jednej partycji. W odróżnieniu od Linuxa, systemowe sterowniki hierarchizowane są według nazwy, a nie typu obsługiwanego urządzenia, np. za obsługę karty NE2000 odpowiada sterownik ed, a Intel EtherExpress -- fxp.
Osobnym zagadnieniem są skrypty startowe i pliki konfiguracyjne systemu. Na *BSD za start systemu odpowiadają skrypty /etc/rc*, odczytujące konfigurację z /etc/rc.conf. Zewnętrzne programy zainstalowane z pakietów i portów uruchamiane są najczęściej zestawem skryptów w katalogu /usr/local/etc/rc.d/, chociaż ten element może się różnić w poszczególnych rodzajach BSD. Taka centralizacja ułatwia zarządzanie i zmiany w konfiguracji.
Zarządzanie użytkownikami jest jednym z elementów, różniących się w znacznym stopniu od dystrybucji Linuxa. Baza użytkowników znajduje się w plikach /etc/passwd, /etc/master.passwd, /etc/pwd.db, /etc/spwd.db. Hasła są przechowywane w postaci jednokierunkowych haszy MD5, a po każdej zmianie zawartości pliku passwd przebudowywane są bazy danych (s)pwd.db. Taka organizacja pozwala na szybszy dostęp do informacji przy dużej liczbie użytkowników. Na FreeBSD zarządzanie kontami realizowane jest poprzez bardzo rozbudowaną aplikację /usr/sbin/pw lub bezpośrednią edycję plików passwd, koniecznie przy pomocy programu /usr/sbin/vipw. Skrypty Perl adduser i rmuser ułatwiają administrowanie kontami, a same korzystają z opisanego wcześniej /usr/sbin/pw.
Znany z Linuxa filtr pakietów również został zastąpiony innymi rozwiązaniami: ipfw oraz ipf, natomiast ograniczanie pasma realizowane jest przy pomocy dummynet lub ALTQ. Możliwości obu pakietów są bardzo rozbudowane, a ich opis nie należy do zakresu zagadnień poruszanych w artykule.
Mam nadzieję, że ta krótka charakterystyka zainteresuje Państwa rodziną systemów BSD i pozwoli na szybsze przyswojenie zasad administracji takimi systemami. Dziękuję za lekturę i zapraszam do odwiedzenia stron internetowych poświęconych opisywanym systemom.
|
FreeBSD
| |
|
OpenBSD
| |
|
NetBSD
| |
|
Windriver - aktualny właściciel FreeBSD i BSD/OS
| |
|
Portal informacyjny o systemach BSD
| |
|
Portal informacyjny o systemach BSD
| |
| Portal poświęcony OpenBSD |

Wszystkie materiały na mojej stronie dostępne są na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Na tych samych warunkach 2.5 Polska.