Dystrybucje Linuxa

Marcin Pilipczuk, Piotr Tabor

W tej prezentacji będzie:

Definicja, tak na początek

Dawno dawno temu, za górami za lasami, na początku lat 90., powstał Linux, a tak naprawdę jego jądro. Linus Torvalds na samym początku rozprowadzał samo jądro Linuxa wraz z kilkoma prostymi prostymi narzędziami GNU. Zainstalowanie sobie Linuxa wymagało wiele pracy i jeszcze więcej wiedzy i zrozumienia - tak naprawdę potrafili to zrobić tylko współdeweloperzy Linuxa. W związku z tym trzeba było wzbogacić Linuxa o coś, by każdy (lub każdy choć trochę zaawansowany w tajnikach komputerów) mógł sobie Linuxa zainstalować i z niego korzystać.

Powstała idea dystrybucji. Dystrybucja, to, w skrócie:

  1. Jądro Linuxa, być może z jakimiś zmianiami.
  2. Instalator lub jakiś opisany sposób instalacji
  3. Zestaw programów i narzędzi dołączanych wraz z jądrem, zazwyczaj na licencji GNU/GPL, ale nie tylko.

Dokładny opis, z czego składają się współczesne dystrybucje, zostanie zamieszczony później.

Skrótem przez historię: pierwszymi dystrybucjami, powstałymi w 1992, były: MCC Interim Linux (University of Manchester), TAMU (Texas A&M University) oraz SLS (Softlanding Linux System). Niestety, wszystkie te dystrybucje szybko przestały być aktualizowane. Wówczas, na podstawie SLSa, Patrick Volkerding stworzył, do dziś aktualizowaną i bardzo popularną, dystrybucję Slackware.

Chcemy zrobić dystrybucję... i co dalej?

Przez pierwszą częśc referatu zajmijmy się następującym problemem: chcemy zrobić dystrybucję. Czy na pewno z sensem jest, abyśmy ją robili? Co musimy w niej zawrzeć? Jakie decyzje przy projektowaniu podjąć? ...

Tak więc teraz stopniowo będziemy sobie zadawali różne pytania. Za pomocą tych pytań będziemy mogli określić, co my tak naprawdę musimy zrobić robiąc dystrybucję. Również zrobimy później od końca, czyli ocenimy, jakie decyzje projektowe podjeli twórcy znanych dystrybucji i dzięki temu porównamy te dystrybucje.

Na poniższy wywód można też patrzeć nie jak Co muszę zrobić by mieć dystrybucję? ale też Co zapewne od dystrybucji mogę oczekiwać?

Pytanie 1: Dlaczego chcemy robić dystrybucję?

Na to pytanie już powinniśmy znać odpowiedź. Tak naprawdę są trzy różne motywacje, które będą miały istotny wpływ na dalszą część projektu:

  1. Chcemy zarobić, zakładamy firmę robiącą komercyjną dystrybucję Linuxa.
  2. Jesteśmy zapaleńcami i chcemy zrobić nową, fajną, otwartą, darmową dystrybucję Linuxa, z której rzesze ludzi na świecie będą z radością korzystać.
  3. Mamy sprecyzowaną potrzebę dla dystrybucji, całkiem prawdopowobne, że zostanie ona zainstalowana tylko na kilku komputerach, np. jesteśmy administratorami laboratorium i potrzebujemy na każdym pracowniczym stanowisku postawić dość specyficznego Linuxa. Albo potrzebujemy Linuxa na maszynie z 16 procesorami do obróbki danych z doświadczeń biologicznych.

Całkiem prawdopodobne, że istnieje już dystrybucja (lub inny system operacyjny), który spełnia nasze wymagania czy wizje dystrybucji. Sprecyzujmy teraz nasze żądania.

Pytanie 2: Dla kogo jest to dystrybucja, kto będzie korzystał?

  1. Lokalnie, my, lub kilku naszych znajomych.
  2. Wszyscy użytkownicy firmy, większa grupa.
  3. Będzie to rozwiązanie biznesowe, na jednym lub kilku serwerach.
  4. Będzie to rozwiązanie biznesowe do użycia w wielu miejscach.
  5. Będzie to publiczna dystrybucja, bardzo dużo ludzi ją ściągnie i będzie używać.

Pytanie 3: Jaką architekturę ma obsługiwać?

Jeśli jest to dystrybucja dla nas, dla naszych znajomych, lub na określony, niewielki zbiór komputerów, architekturę mamy ściśle określoną. Robiąc dystrybucję dla mas zapewne będziemy chcieli więcej architektur obsługiwać. Dystrybucja np. do obliczeń w biologii pewnie będzie musiała obsługiwać kilka dziwnych architektur, wieloprocesorowych.

Pytanie 4: Co będzie robione na komputerach z naszym Linuxem? Do czego będzie używana dystrybucja?

  1. Będzie to dystrybucja biurkowa, z edytorem tekstu, arkuszem kalkulacyjnym, itd.
  2. Będzie to dystrybucja dla programistów i developerów.
  3. Będzie to serwer.
  4. Będzie to komputer, na którym będą wykonywane obliczenia.
  5. Będzie to serwer bazy danych.
  6. Jakiś inny specjalistyczny cel...
  7. Do wszystkiego - studiujemy i próbujemy wszystkiego ;)

Po odpowiedzeniu sobie na poprzednie trzy pytania, tak naprawdę bardzo z grubsza wiemy, jak nasza dystrybucja powinna wyglądać, jakie programy powinna zawierać i w wersji dla jakich architektur. Teraz nadchodzi bardzo ważne pytanie...

Pytanie 5: Na pewno jest potrzeba i sens tworzyć nową dystrybucję? Może już istnieje jakaś, która jest taka, jak my chcemy stworzyć? A może jakiś inny system operacyjny tak dobrze działa, jak nasza planowana dystrybucja?

To pytanie jest ważne dla każdej odpowiedzi na pytanie pierwsze: jeśli istnieje dystrybucja, pokrywająca się z naszą wizją, to albo zaoszczędzono nam dużo pracy (odp. 2 i 3) albo nisza rynkowa jest już wypełniona.

Patrząc tutaj, nie tylko inne Linuxy (których jest bardzo dużo) się liczą. Może, jeśli mamy zamiar postawić biurkową dystrybucję, Windows pokrywa naszę potrzeby? A może któryś Unix będzie bardzo dobry do naszych celów? Ktoś przed nami mógł mieć takie myśli jak my.

Po tych meta-pytaniach, czas zabrać się za bardziej techniczne aspekty dystrybucji Linuxa.

Trzy słowa o BSD

Jednym z prawdopodobnych wyborów może być któraś otwarta odmiana BSD, np. FreeBSD lub OpenBSD. BSD (Berkeley Software Distribution) jest odmianą Unix-a, rozwijaną na Uniwersytecie Kalifornijskim od lat siedemdziesiątych. Dość znane są jego dwie najpopularniejsze otwarte odmiany: FreeBSD i OpenBSD.

Większość dystrybucji BSD jest opartych na licencji BSD, będącej na pograniczu kompatybilności z GPL.

Wnioski z pytań 1-5.

Na podstawie pytań 1-5 powinniśmy wysnuć kilka wniosków bardziej technicznych na temat naszej dystrybucji:

Pytanie 6.1: Jaki oczekujemy stopień niezawodności?

Oczywiście, fajnie by było jakby nasz system zawsze działał poprawnie, jednak jest to po prostu niemożliwe.

  1. Jeśli chcemy naszego Linuxa zastosować do biznesowych rozwiązań, jako serwer, bazę danych, czy do obliczeń, prawdopodobnie zależy nam na bardzo wysokiej niezawodności. Wówczas będziemy wybierać wersje programów raczej starsze, dobrze przetestowane, i będziemy starali się mniej lub bardziej automatycznie aktualizować wszystkie łaty.
  2. Jeśli nasz Linux ma być Linuxem biurkowym lub dla programistów, niezawodność, choć ważna, nie jest już tak krytyczna. Tutaj zapewne bardziej postawimy na nowinki programistyczne, nowe wersje programów, które mogą częściej zawierać błędy, ale za to dostarczają więcej funkcjonalności niż starsze, stabilniejsze wersje.
Pytanie 6.2: Jaki oczekujemy stopień bezpieczeństwa?

To pytanie jest tak naprawdę bardzo pokrewne do poprzedniego. Chcielibyśmy, aby nasz system był zawsze bezpieczny, choć dobrze wiemy, że nie jest to możliwe.

  1. Podobnie jak poprzednio, starsze, stabilne i dobrze przetestowane wersje programów wraz z każdą wypuszczoną łatką, gwarantują wysoki poziom bezpieczeństwa, jakiego wymagają serwery stojące w sieci.
  2. Nowsze wersje programów dostarczają więcej funkcjonalności, nieraz niestety kosztem bezpieczeństwa. Jednak, np. na biurkowych komputerach, stojących w firmie w sieci wewnętrznej za firewallem, zazwyczaj możemy sobie na to pozwolić.
Pytanie 6.3: Jaki oczekujemy stopień bycia user-friendly?
  1. Z serwerem, bazą danych, bezpośrednią styczność ma tylko administrator. Choć narzędzia administratorskie są ważne i ułatwiają życie, wystarczą (i zazwyczaj administrator będzie szczęśliwszy ;) ) z narzędziami tekstowymi, często dostępnymi z GNU. Serwer zazwyczaj będzie ręcznie konfigurowalny (bez wyszukanych konfiguratorów), bez Xów i innych programów dla mniej zaawansowanych użytkowników.
  2. Jeśli nasz system, choć nie jest to serwer, gdzie dostęp będzie miało kilku administratorów, planujemy dla bardziej zaawansowanych użytkowników, np. programistów, pewnie też nie chcemy dołączać programów dla początkujących, jak np. okienkowych konfiguratorów.
  3. System biurkowy i dla początkujących pewnie będzie wymagał całej rzeszy programów automagicznych: auto-konfiguratorów, rozpoznających urządzenia itd., nie wymagających od użytkownika wiedzy.
Pytanie 6.4: Jaki oczekujemy stopień efektywności?
  1. Jeśli nasz Linux ma stać na słabych, starszych komputerach, będzie nam zależało na efektywności. Na biurkowym czy programistycznym Linuxie, na starym komputerze, zapewne damy XWindow, a nie KDE. Na browny trzeba dać jądro 2.2. Będziemy omijać wszelkie uprzyjemniacze dla programistów i użytkowników, które powodują powstanie dodatkowej warstwy systemu, czyli czegoś, co będzie powodować narzut na system operacyjny.
  2. Na serwerze czy bazie danych, a w szczególności przy maszynie do obliczeń, nawet jak mamy nowszą maszynę, będziemy się starali nie dodawać niepotrzebnych obciążników.
  3. Mając specyficzną architekturę, np. maszynę wektorową, będziemy projektowali naszego Linuxa, by maksymalnie wykorzystać własności maszyny.
  4. Na nowszych maszynach, szczególnie na maszynie na biurko i dla programisty, nie będziemy się tym przejmowali. Pewnie dodamy jakiegoś dużego X-a, np. KDE czy Gnome, oraz parę innych bajerów uprzyjemniających życie.

Właściwie, to co musimy zrobić?

Po zadaniu sobie powyższych pytań, pora na formalniejszą definicję dystrybucji, czyli co tak naprawdę potrzebujemy zrobić.

Współczesna dystrybucja składa się z:

  1. jądra Linuxa
  2. instalatora, systemu instalacji
  3. systemu pakietów
  4. systemu rozprowadzania pakietów oraz mniej lub bardziej automatycznego aktualizatora
  5. programów rozprowadzanych wraz z jądrem, głównie na licencji otwartej, ale nie tylko
  6. infrastruktury sieciowej, czyli serwerów, skąd można pobrać dystrybucję, aktualizację itd
  7. dokumentacji
  8. różnych bajerów lokalizacyjnych (fonty lokalne) i nie tylko (tapety, dźwięki)

Teraz, przeanalizujemy składowe dystrybucji, patrząc na dostępne już rozwiązania i zapotrzebowania użytkowników. Wpierw jednak, dowiedzmy się, co musimy zrobić, by można było nazwać naszą dystrybucję Linuxem.


Standardy: POSIX/Single Unix System, Linux Standard Base oraz Filesystem Hierarchy Standard

FHS - Gdzie wgrać ten program by nie zrobić bałaganu?

Filesystem Hierarchy Standard (Standard Hierarchi systemu plików) jest standardem precyzującym logiczne rozmieszczenie poszczególnych rodzajów plików i katalogów dla różnych UNIXowych systemów plików. Aktualnie obowiązujący FHS jest w wersji 2.3 ogłoszonej 29 stycznia 2004.

FHS stawia sobie za cel:

Dokument ten porusza kwestie:

Istotne cechy plików:
Standard próbuje pogrupować pliki zewzględu na ich:
Główny system plików (root - nie /root)

FHS zaleca by główny system (korzeń) znajdował się na osobnej partycji, możliwie małej, ale żeby zawierał wszystko co jest wymagane aby: bootować, odzystkiwać i reperować system.

Motywuje to następująco:

Katalogi obowiązkowe na ścieżce /:

Ścieżka Zawartość
/boot Statyczne pliki bootloadera
/dev Pliki urządzeń
/etc Lokalna konfiguracja
/lib Kluczowe biblioteki współdzielone i moduły jądra
/media Punkt montowania nośników wymiennych
/mnt Punkt montowania tymczasowego
/opt Dodatkowe pakiety oprogramowania
/bin Kluczowe systemowe pliki wykonywalne poleceń
/sbin Kluczowe systemowe pliki binarne
/srv Dane usług świadczonych przez system
/tmp Dane tymczasowe
/usr Druga hierarchia plików
/var Dane "zmieniające się"

Katalogi opcjonalne:

Ścieżka Zawartość
/home Katalogi prywatne użytkowników
/lib{dodatek} Alternatywny zestaw bibliotek
/root Katalog domowy użytkownika root
/bin - pliki wykonywalne poleceń
W katalogu /bin muszą wystąpić pliki wykonujące następujące polecenia lub linki na lokalnym systemie plików:

Polecenia te powinny być (choć w większości dystrybucji linuxa niesą) dostępne nawet wtedy gdy ich funkcjonalność jest realizowalna przez powłokę systemową (shell).

Ponadto, jeśli w systemie są zainstalowane odpowiednie aplikacje, to w /bin muszą znajdować się następujące programy: csh, ed, tar, cpio, gzip, gunzip, zcat, netstat,ping

/boot - z czego startujemy

Katalog zawiera wszystkie pliki konieczne do przeprowadzenia procesu bootowania. Tam też znajduje się jądro (choć w wyjątkowych sytuacja dopuszczalne jest by jądro było bezpośrednio w katalogu /).

Pliki konfiguracyjne wymagane w procesie bootowania powinny (menu.lst dla grub'a) powinny być linkowane symbolicznie do /etc (/etc/grub/menu.lst).

/dev - urządzenia
Katalog /dev zawiera pliki urządzeń i inne pliki specjalny. Jeśli jest prawdopodobnym, że urządzenia w /dev będą tworzone ręcznie, to /dev musi zawieać polecenie "MAKEDEV" tworzące urządzenie.

HFS dla Linuxa wymaga dodatkowo istnienienia następujących urządzeń specjalnych: