kernel opracowanie do slajdow

Transkrypt

kernel opracowanie do slajdow
1
Zajęcia 3
dr inż. Anna Zatwarnicka
Kernel; Kompilacja jądra systemu
Plan zajęć:
1. Co to jest jądro systemu operacyjnego
2. Zadania (co robi – co musi robić) i funkcje (co jeszcze może robić)
3. Różne kernele do różnych zastosowań
4. Po co kompilacja jądra systemu?
5. Kompilowanie jądra systemu
1. Co to jest jądro systemu operacyjnego
Jądro systemu operacyjnego jest rozpowszechniane na licencji GNU General Public
License (GPL) – określonej przez konsorcjum Free Software Foundation (FSF) jako
oprogramowanie w tw. wolnym obiegu (free software).
Cechy:
Zakaz prywatyzacji produktów powstałych z wykorzystaniem Linuksa lub
pochodnych systemu (tzn. odmian zachowujących standardy Linuksa).
Oprogramowanie nie może być redystrybuowane w formie czysto binarnej
– wraz z każdą dystrybucją binarną musi być udostępniony kod źródłowy.
Dystrybucje Linuksa:
Standardowe, prekompilowane zbiory pakietów, zwane dystrybucjami,
zawierają podstawowy system Linux, narzędzia do instalowania systemu i
zarządzania nim oraz gotowe do instalowania pakiety typowych narzędzi
systemu UNIX.
Pierwsze dystrybucje zarządzały pakietami jedynie przez dostarczanie
środków do rozpakowywania wszystkich plików w odpowiednie miejsca;
współczesne dystrybucje zawierają zawansowane zarządzanie pakietami.
Większość obecnych dystrybucji stosuje lub przynajmniej rozpoznaje pakiety
plików RPM – ułatwiające instalację, rozbudowę i usuwanie oprogramowania.
Wczesne dystrybucje: SLS, Slackware.
Popularne dystrybucje: RedHat->Fedora, Debian, SuSE, Mandrake >Mandriva, itd.
2. Linux – budowa (w skrócie)
Programy
zarządzania
systemem
Procesy
użytkowe
Pomocnicze
programu
użytkowe
Wspólne biblioteki systemu
Jądro systemu Linux
Ładowalne moduły jądra
Składowe systemu Linux
Kompilatory
Zajęcia 3
dr inż. Anna Zatwarnicka
2
System Linux składa się z trzech głównych fragmentów kodu:
• Jądro: jest odpowiedzialne za realizację wszystkich istotnych abstrakcji systemu
operacyjnego (pamięć wirtualna, procesy itd.).
Kod jądra jest wykonywany w trybie jądra (kernel mode) z pełnym dostępem do
wszystkich fizycznych zasobów komputera.
Cały kod jądra ze wszystkimi strukturami danych przebywa w tej samej pojedynczej
przestrzeni adresowej
• Biblioteki systemowe: Definiują standardowy zbiór funkcji, za pomocą których
aplikacje mogą współpracować z jądrem i które realizują wiele właściwości
systemu operacyjnego nie wymagających pełnych przywilejów kodu jądra.
• Pomoce systemowe: wykonują osobne, specjalizowane zadania administracyjne.
Moduły jądra
• Moduły jądra są to części kodu jądra, które mogą być
kompilowane, ładowane i usuwane niezależnie od reszty jądra.
• Moduł jądra zazwyczaj steruje pracą urządzenia, systemem plików
lub protokołem sieciowym.
• Moduły jądra są przydatne z następujących powodów:
W celu dodania nowych właściwości do jądra wystarczy napisać nowy
moduł jądra i korzystać z niego bez przebudowy całego jądra.
Interfejs modułów jądra umożliwia osobom postronnym pisanie i
rozpowszechnianie na własnych zasadach modułów sterujących urządzeń
lub systemów plików, których nie można rozpowszechniać na zasadach
licencji GPL.
Moduły jądra pozwalają na zestawianie systemu Linux z minimalnym,
standardowym jądrem bez wbudowywania w nie jakichkolwiek
dodatkowych modułów sterujących urządzeń.
• Moduły jądra są wspomagane przez trzy następujące składowe:
Zarządzanie modułami (module management);
Rejestracja modułów sterujących (driver registration);
Mechanizm rozwiązywania konfliktów (conflict resolution).
Zarządzanie modułami
• Umożliwia wprowadzenie modułów do pamięci i ich kontakt z
resztą jądra.
• Zadanie ładowania modułu jądra podzielone jest na dwie sekcje:
Zarządzanie częściami kodu modułu w pamięci jądra;
Manipulowanie symbolami, do których modułom wolno się odwoływać.
• Ładowanie modułu przebiega w dwu etapach:
− Ładowacz modułu (module loader) zgłasza zapotrzebowanie na ciągły obszar
pamięci wirtualnej jądra potrzebny dla modułu, a jądro zwraca adres przydzielonej
pamięci.
− Specjalne wywołanie systemowe przekazuje moduł do jądra wraz niezbędną
tablicą symboli, które chce on eksportować (moduł jest słowo po słowie
kopiowany do zarezerwowanego obszaru, a tablica symboli jądra jest
aktualizowana za pomocą nowych symboli).
• Ostatnią składową zarządzania modułem jest procedura zamawiania modułu
(module requestor). Zarządza ładowaniem zamawianych modułów, których aktualnie
nie ma w pamięci. Regularnie odpytuje jądro, sprawdzając, czy dynamicznie
Zajęcia 3
dr inż. Anna Zatwarnicka
3
załadowany moduł jest ciągle w użyciu, a gdy nie jest już potrzebny, usuwa go z
pamięci.
Rejestrowanie modułu sterującego
• Umożliwia modułowi poinformowanie reszty jądra o udostępnieniu
nowego modułu sterującego.
• Jądro utrzymuje dynamiczne tablice wszystkich znanych modułów
sterujących (programów obsługi urządzeń, ang. device drivers) i
dostarcza zestawu procedur umożliwiających dodawanie do tych
tablic lub usuwanie z nich modułów sterujących w dowolnej chwili.
• Tablice rejestracyjne zwierają następujące elementy:
− Moduły sterujące urządzeń: znakowych (terminale, myszki drukarki itp.),
blokowych (programy obsługi dysków) oraz interfejsów sieciowych.
− Systemy plików: oprogramowanie realizujące procedury wywołań wirtualnego
systemu plików Linuksa, zarówno lokalnego, jak i sieciowego.
− Protokoły sieciowe: cały protokół sieciowy, np. IPX, lub nowy zbiór reguł
filtrowania pakietów przez zaporę ogniową.
− Format binarny: określa zasady rozpoznawania i ładowania pliku wykonywalnego
nowego typu.
• Ponadto moduł może zarejestrować nowy zbiór wpisów w tablicach
sysctl i /proc, aby umożliwić jego konfigurowanie dynamiczne.
Rozwiązywanie konfliktów
• System Linux pracuje na sprzęcie występującym w różnych i
zmieniających się konfiguracjach, mogą się więc pojawiać
problemy konfliktów między modułami sterującymi urządzeń przy
dostępie do tych samych zasobów.
• Linux posiada centralny mechanizm rozwiązywania konfliktów,
który pozwala rozstrzygać o dostępie do zasobów sprzętowych.
• Do głównych celów tego mechanizmu należą:
− Ochrona modułów przed kolizjami przy dostępie do zasobów sprzętowych;
− Zapobieganie zaburzaniu działania istniejących modułów sterujących przez
autosondy (autoprobes), tj. testy inicjowane przez moduły sterujące w celu
automatycznego wykrycia konfiguracji sprzętu;
− Rozwiązywanie konfliktów między wieloma modułami sterującymi usiłującymi
skorzystać z tego samego sprzętu (np. portu).
• Aby osiągnąć te cele, jądro utrzymuje wykazy przydzielonych
zasobów sprzętowych – jeżeli jakiś moduł sterujący urządzenia
chce sięgnąć po zasób, musi go najpierw zarezerwować w bazie
danych jądra (w przypadku niepowodzenia rezerwacji moduł może
zażądać swego usunięcia lub skorzystać z zasobów zastępczych)
Planowanie
• Planowanie (scheduling) – przydzielanie czasu procesora różnym zadaniom
systemu operacyjnego.
• Oprócz normalnego uruchamiania i przerywania procesów, planowanie w systemie
Linux obejmuje także wykonywanie różnych zadań jądra, zarówno zlecanych przez
działający proces, jak też wykonywanych wewnętrznie na zlecenia modułu
sterującego jakiegoś urządzenia.
Zajęcia 3
dr inż. Anna Zatwarnicka
4
Synchronizacja jądra
• Zamówienie na działanie w trybie jądra można wykonać na dwa sposoby:
1. Wykonywany program może zamówić usługę systemu operacyjnego jawnie
(za pomocą wywołania systemowego) albo niejawnie, np. przez brak strony.
2. Moduł sterujący urządzenia może wysłać przerwanie, które spowoduje, że
procesor zacznie wykonywać kod jądrowej procedury obsługi przerwania.
• Synchronizacja jądra wymaga regulacji pozwalających na wykonywanie sekcji
krytycznych jądra w sposób wzajemnie nie kolidujący – aby nie uszkodzić lub nie
doprowadzić do niespójności
Linux używa dwóch technik do ochrony sekcji krytycznych jądra:
1. Zwykły kod jądra jest niewywłaszczalny – gdy przerwanie czasomierza
zostanie odebrane w czasie kiedy proces wykonuje jądrową, systemową
procedurę obsługi, ustawiany jest jądrowy znacznik need_resched, który
informuje jądro o zapotrzebowaniu na pracę planisty po zakończeniu
wywołania systemowego.
2. Technika do ochrony sekcji krytycznych występujących w procedurach obsługi
przerwań – przez użycie sprzętu nadzorującego przerwania procesora w celu
zakazu przerwań w trakcie wykonywania sekcji krytycznej; jądro gwarantuje,
że jej wykonanie przebiegnie bez ryzyka współbieżnego dostępu do
dzielonych struktur danych.
Aby uniknąć pogorszenia wydajności systemu na skutek wyłączania przerwań, w
jądrze zastosowano architekturę synchronizacji umożliwiającą wykonywanie
długich sekcji krytycznych bez wyłączania przerwań na czas trwania całej sekcji.
W procedurach obsługi przerwań wyodrębnione są dwie części:
1. Górna połowa (top half) – zwykła procedura obsługi przerwań; przebiega z
wyłączonymi rekurencyjnymi przerwaniami (może być przerwana tylko przez
przerwania o wyższym priorytecie, a przerwania o ≤ priorytecie są
zablokowane).
2. Dolna połowa (bottom half) – procedura przebiega z włączonymi wszystkimi
przerwaniami i jest nadzorowana przez miniaturowego planistę, który
zapewnia, że dolne połowy nigdy nie przerywają się wzajemnie.
Ta architektura jest uzupełniana przez mechanizm wyłączania wybranych dolnych
połów podczas wykonywania zwykłego, pierwszoplanowego kodu jądra.
Poziomy ochrony przed przerwaniami
Zajęcia 3
dr inż. Anna Zatwarnicka
5
Górne połowy procedur obsługi przerwań
Dolne połowy procedur obsługi przerwań
Systemowe procedury jądra
(niewywłaszczalne)
Programy trybu uzytkownika
(wywłaszczalne)
− Każdy poziom może być przerwany przez kod wykowywany na
wyższym poziomie, ale nigdy nie będzie przerwany przez kod
wykonywany na tym samym lub niższym poziomie.
− Procesy trybu użytkownika mogą być zawsze wywłaszczane przez inne
procesy w chwilach określonych przerwaniami zegarowymi służącymi
do realizacji podziału czasu.
3. Różne kernele do różnych zastosowań
Dfvb
4. Po co kompilacja jądra systemu?
Wbrew pozorom – to jedna z częściej wykonywanych czynności administracyjnych.
Niektóre z powodów:
nowsza wersja jądra = większe bezpieczeństwo (nowsza wersja zawiera
poprawki i jest bardziej bezpieczna)
nowsza wersja = większa stabilność systemu (bo ma poprawione i bardziej
optymalne wersje sterowników urządzeń)
bieżąca wersja jądra nie obsługuje jakiegoś potrzebnego mechanizmu – a
nowsza obsługuje (np. mechanizmy kolejkowania, obliczania udziałów w
dysku itp.)
bieżąca wersja nie jest przystosowana do zmian wprowadzonych do systemu
(np. zmiana karty sieciowej)
bieżąca wersja nie przewiduje obsługi jakiegoś urządzenia -> bo urządzenia
nie było w momencie powstawania tej wersji jądra
standardowa wersja jądra nie jest zoptymalizowana -> zbyt wiele sterowników
do urządzeń
(jeżeli któryś z punktów => zastanowić się nad rekompilacją jądra w wersji takiej
samej lub nowszej)
5. Kompilowanie jądra systemu
Źródła jądra systemu
By przeprowadzić kompilację potrzebne są:
Zajęcia 3
dr inż. Anna Zatwarnicka
6
- źródła jądra systemu
- kompilator języka C w odpowiedniej wersji (gcc 2.95.3 lub wyższa) + zestaw
bibliotek
Zopatrzeć się w źródła jądra systemu można z:
1) płyty instalacyjnej
WADA: mamy jądro systemu, ale w takiej wersji, jaką mieliśmy (nie
najnowsza)
2) z Internetu
WADA: często bardzo długo ciągniemy źródła poprzez sieć (dużo „ważą”!)
Czym są pakiety?
Najprościej tłumacząc, pakiety to skompilowane źródła, których instalacja to chwila.
Właśnie w takiej formie znajduje się oprogramowanie w naszej dystrybucji. Pakiety
mogą mieć różną postać, w zależności od naszej dystrybucji i sposobu zarządzania
nimi. Trzy główne typy:
RPM - Red Hat Package - jak sama nazwa wskazuje, występują w rodzinie Red
Hata.
DEB - Pakiety występujące w Debianie; nazwa pochodzi od trzech pierwszych liter
nazwy dystrybucji
TGZ - archiwa tara; pakiety obecne w Slackware
Pomimo, że pakiety znacząco różnią się sposobem zarządzania nimi, łączy je
wspólna cecha - pakiety są kompresowane, a podczas instalacji rozpakowywane.
KOMPILOWANIE JĄDRA OD PELCA
Najlepiej – źródła instalacji zamontować w momencie instalacji samego systemu –
każda dystrybucja Linux’a posiada wydzieloną kategorię instalacyjną zawierającą:
źródła systemu operacyjnego oraz zestaw narzędzi do kompilacji.
Przykłady:
Fedora – w dystrybucji Fedora Core 3 ma kategorię Departament Tools (kompilatory
i biblioteki) a źródła można zamontowac po zainstalowaniu systemu ze źródłowego
pakietu .rpm (*.src.rpm)
Slackware – to kategorie: Linux Kernel Source (źródła jądra systemu) oraz Program
Development (narzędzia umożliwiające kompilację jądra systemu).
Ale… gdy źródla nie zostaną zainstalowane z systemem, a trzeba rekompilować
jądro systemu – to najłatwiej pobrać jądro systemu z płyty instalacyjnej. By je
zainstalować na komputerze – zamontować płytę CD zawierającą źródła, a potem je
zainstalować.
Źródła jądra systemu dostępne na płycie instalacyjnej są w wersji:
1. *.rpm (gotowy pakiet instalacyjny),
2. albo skompresowane archiwum *.tar.gz, *.tgz, *.tar.bz2
7
Zajęcia 3
dr inż. Anna Zatwarnicka
Ad. 1. Jeśli źródła są w pakiecie – instalujemy je za pomocą polecenia
rpm – instalacja pakietu
Wywołanie: rpm [opcja] plik_rpm
Opcje:
-i – instalacja pakietu
-e – odinstalowanie pakietu (modyfikator - - nodeps wykorzystywany z opcją -e:
pozwala na odinstalowanie pakietu bez względu na to, czy będą odkryte jego
powiązania w innymi pakietami)
-U – aktualizacja (ang. Upgrade) pakietu.
Ad. 2. Jeśli źródła są w skompresowanym archiwum:
Wywołanie: tar [opcja] [nazwa archiwum] plik/katalog
Tar to program rozpakowujący. Zawarte w nim opcje to kolejno:
-c – utworzenie archiwum,
-x – wydobywanie z archiwum,
-r – dodanie plików na koniec archiwum,
-u – aktualizacja plików w archiwum (będą dodane tylko nowsze wersje)
-z - kompresja/dekompresja przez gzip (końcówka ".gz")
-x - rozpakowanie plików z archiwum
-v - wyświetla szczegóły związane z przetwarzanym plikiem – tzw. tryb pracy jawnej
(ang. verbose)
-f - określa, który plik ma użyć
-t – wypisanie zawartości archiwum
Aby rozpakować pliki tar.bz2, opcję -z zastępujemy opcją -j.
Możemy także rozpakowywać źródła tylko do tara. W tym celu dla plików *.gz
wpisujemy:
# gunzip plik.tar.gz
W wyniku otrzymamy czyste archiwum tar. Jest to także przydatne, kiedy mamy plik
skompresowany samym gzipem.
Aby w ten sam sposób rozpakować pliki *.bz2 wykonujemy:
# bunzip2 plik.tar.bz2
Instalacja z płyty dystrybucji
1. Szukamy dodatkowych źródeł na płytach dystrybucji:
pliki kernel-2.6.x-xxx.src.rmp
2. Plik znajduje się w katalogu, gdzie go zamontujemy
3. Instalujemy źródła pakietu:
# pwd
# ls -l
# rpm –ivh kernel-2.6.x-xxx.src.rmp
gdzie jesteśmy w katalogu
listing katalogów
rozpakowywanie paczki – będzie z
8
Zajęcia 3
dr inż. Anna Zatwarnicka
# mv /usr/src/redhat/SURCES/
2.6.18.2-34.tar.bz2 /usr/src
# cd /usr/src
# tar –xjf linux-2.6.18.2-34.tar.bz2
# ls -l
# cd linux-2.6.18.2-34
# ls
#
ostrzeżeniem
linux- kopiujemy w odpowiednie miejsce
Idziemy do tego katalogu
Rozpakowujemy archiwum
Wyświetlamy zawartosć
Idziemy do podkatalogu
Bardzo często są błędy kompilacji – wynikające z tego, że wiele mechanizmów
systemowych (wymagających wsparcia ze strony jądra, np. filtrowanie pakietów,
kolejkowanie zadań) zakłada, że bieżące źródła jądra znajdują się w katalog
/urs/src/linux – a np. mogą być gdzie indziej – w innym podkatalogu.
ROZWIĄZANIE: tworzymi linka (dowiązanie symboliczne)
o nazwie /usr/src/linux do katalogu /usr/src/linux-2.6.18.2-34
# ln –s linux-2.6.18.2-34 linux
gdzie opcja -s oznacza dowiązanie symboliczne (link miękki) i potem można
traktować już jak katalog, czyli:
#cd /usr/src/linux
PROCES KOMPILACJI JĄDRA
Powinien odbywać się z katalogu ze źródłami, czyli: /usr/src/ linux-2.6.18.2-34 i
składa się z kilku etapów. Kolejne etapy to polecenie make z odpowiednim
parametrem:
1
#make help
2
#make mrproper
3
#make menuconfig/
make xconfig
#make
#make modules
#make modules_install
#make install
4
5
6
7
Ad 2. #make mrproper
Wyświetla pomoc – zestaw parametrów
make potrzebnych do kompilacji
Usuwa niepotrzebne pozostałości po
poprzedniej kompilacji (np. obiekty)
Etap konfiguracji jądra w trybie
tekstowym/graficznym
Właściwa kompilacja jądra
Etap kompilacji modułów
Etap instalacji modułów
Etap instalacji skompilowanego jądra
Zajęcia 3
dr inż. Anna Zatwarnicka
Ad 3. #make menuconfig / make xconfig
albo YaST graficzny – najprościej (albo ręczne dłubanie w plikach dla maniaków)
9
10
Zajęcia 3
dr inż. Anna Zatwarnicka
Konfiguracja jądra jest podzielona na kategorie konfiguracyjne.
Najczęściej używane:
Code maturity Level options
General setup
Loadable module suport
Procesor type and features
Power menagement options…
Bus options…
Executable file formats
Device drivers
File systems
Profiling suport
Kernel hacking
Security options
Cryptographic options
Library routines
- opcje związane z elementami źródeł kodu jądra systemu
operacyjnego, nad którymi trwają prace
- opcje związane z konfiguracją ogólną systemu, m.in. obsługa
partycji SWAP, wsparcie dla komunikacji międzyprocesowe itp.,
- opcje dotyczące wsparcia dla obsługi urządzeń w modułach
- opcje związane z konfiguracją procesora, m.in. rodzaj
procesora, wieloprocesorowość itp.
- opcje związane z zarządzaniem energią
- opcje związane ze wsparciem różnych typów magistral
systemowych
- opcje związane ze wsparciem dla uruchamialnych plików
binarnych
- zestaw opcji związanych z konfiguracją urządzeń I sterowników:
kart sieciowych, urządzeń SCSI, RAID itp – b. rozbudowane!
- opcje związane ze wsparciem dla róznych systemów plików
- opcje dot. wsparcia tzw. Mechanizmu profilowania (analiza
wydajnościowa i diagnostyka) jądra
- opcje związane z jądrem systemu – m.in. dotyczące sposobu
jego kompilacji
- opcje związane z bezpieczeństwem systemy, m.in. można
ustawić zabezpieczenia na poziomie gniazd
- opcje dotyczące wsparcia API dla algorytmów szyfrowania (np.
MD4, MD5)
- zaawansowane mechanizmu dotyczące zgodności modułów –
mechanism CRC (Cycling Redundancy Check)
11
Zajęcia 3
dr inż. Anna Zatwarnicka
Load an Alternate
Configuration File
Save Configuration to an
Alternate File
- odczyt konfiguracji jądra z innego pliku niż domyślny (.config)
- zapis konfiguracji jądra do innego pliku niż domyślny (.config)
Zalecenia:
- zmieniamy to, co konieczne! (najlepiej w obrębie kategorii konfiguracyjnej)
- pewne oczywistości: nie ma Bluetooth’a – to można nie instalować ☺
- przykład: właczenie sterowników karty sieciowej: w Device Drivers – sprawdzamy,
jaki moduł jest odpowiedzialny za obsługę kart w systemie: polecenia lsmod – np.
pcnet32, szukamy go w nowej konfiguracji – i ew. włączany opcję
Opcje oznaczone są:
Przy głównych opcjach konfiguracyjnych (np. obsługa kart ISA czy PCI):
[ ] - brak obsługi
[*] - obsługa mechanizmu/urządzenia włączona w jądro
Opcje szczegółowe (konkretna karta ISA lub PCI):
< > - obsługa opcji wbudowana w jądro systemu
< > - brak obsługi
<M> - obsługa opcji w module jądra – ładowalnym ręcznie lub dynamicznie przez
jądro jeśli jest taka potrzeba – mechanizm działa tylko wtedy, gdy odpowiedni moduł
znajduje się w pamięci.
Włączenie opcji w jądro => zwiększenie jego rozmiaru => mniej wydajna praca!
czyli – ile się da ładować poprzez moduły ☺
Domyślne ustawienia opisane w pliku: /boot/config_2.6.18… -default
My sobie możemy BlueTooth’a i IRDĘ wyłączyć
O ładowaniu modułów:
urządzenie obsługiwane przez moduły działa tylko wtedy, gdy moduł znajduje się w
pamięci,
Załadowanie modułu do pamięci możliwe jest na 3 sposoby:
1. poleceniem ismod – to bezwzględne ładowanie modułu podanego jako argument
– i nie zawsze uruchomi obsługę urządzenia – bo często moduły ze sobą
współpracują i do obsługi jednego potrzebne są inne…
2. polecenie modprobe – POLECANY! Bo modprobe sprawdzi, czy do poprawnej
pracy urządzenia obsługiwanego przez ładowalny moduł nie jest konieczne
uruchomienie dodatkowych modułów, jeśli tak: to zostaną one automatycznie
uruchomione wraz z żądanym modułem
3. najlepiej -> gdy moduł jest ładowany do pamięci dopiero wtedy, gdy urządzenie
jest faktycznie wykorzystywane: można to zrealizować poleceniem
/etc/modules.conf, w którym można zapisać, jaki moduł powinien być uruchamiany
przy wykorzystaniu danego urządzenia zgodnie ze składnią:
alias nazwa_urządzenia nazwa_modułu
np. alias eth0 pcnet32
Zajęcia 3
dr inż. Anna Zatwarnicka
12
Ad 4. #make
Kompilacja jądra
Po wybraniu składników – zachować konfigurację i przejść do etapu właściwej
kompilacji i instalacji jądra i modułów (kompilacja dłuuuugo trwa…).
Ad 5. #make modules
#make modules_install
Utworzone jądro nie będzie pracowało poprawnie – zacznie gdy zostaną utworzone
moduły do obsługi urządzeń przewidzianych do obsługi w modułach.
Potrzebne jest: make modules (spowoduje skompilowanie modułów) i make
module_install (spowoduje instalację modułów).
Ad 6. #make install
Instalacja jądra
Proces instalacji składa się z 2 etapów:
a) utworzenia obrazu jądra (pliku: vmlinuz w /boot)
b) aktualizacji konfiguracji programu ładującego system (GRUB ew. LILO kiedyś
LInux LOad)
Ad a)
polecenie #make install – w katalogu /boot tworzy obraz jądra o nazwie
vmlinuz-2.6.18…. i do tego katalogu zostanie przeniesiony plik
/usr/src/linux-2.6.18…../system.map
Potem można sobie pooglądać, co jest w /boot – polecenie ls –l
Ad b)
teraz – już po wykonaniu make install, można zmodyfikować plik konfiguracyjny
GRUB tak, by mógł uruchomić system z wykorzystaniem nowego jądra.
automatycznie modyfikowany jest plik /etc/grub.conf
standardową zawartość można zmodyfikować zgodnie w wytycznymi –
wykomentowane na początku pliku
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Instalacja ze źródeł: configure i makefile
Aby zrozumieć i zapamiętać instalację ze źródeł, musisz najpierw poznać istotę
dwóch plików: configure i makefile. Ten pierwszy sprawdza, czy w systemie
zainstalowane są wymagane biblioteki lub programy, co ustrzeże Cię przed błędami
kompilacji. Innym ważnym plikiem jest wspomniany makefile. To on przeprowadza
cały proces kompilacji programu. Dzieli się przeważnie na trzy części:
make - sekcja kompilująca źródła
install - sekcja instalująca skompilowane pliki
uninstall - sekcja odinstalowująca pliki zainstalowane
Zajęcia 3
dr inż. Anna Zatwarnicka
13
Tak więc, jeśli w katalogu znajduje się plik configure, to od niego powinniśmy zacząć
proces instalacji. Dostępne jego opcje, widoczne są po uruchomieniu go z
argumentem -h lub —help. Przed instalacją możemy więc określić interesujące nas
opcje.
Po pomyślnym wykonaniu się skryptu configure, możemy przejść do etapu
kompilacji, wydajemy więc polecenie make. Gdy i to wykona się pomyślnie, możemy
zainstalować skompilowany już program poleceniem make install. Po chwili mamy go
na dysku. Abyś w przyszłości mógł odinstalować oprogramowanie, musisz zachować
jego źródła… Make bowiem zapisuje informacje co zostało przekompilowane i gdzie
skopiowane. Katalog możesz spokojnie jednak spakować i wrzucić na płytę, a gdy
stwierdzisz, że program nie jest Ci już potrzebny, wystarczy, że rozpakujesz
zachowane źródła i wpiszesz:
make uninstall
Gdy brakuje pliku configure, tzn. nie zamieszczono go, bardzo prawdopodobne jest,
że ściągnięte archiwum, to nie źródła, lecz plik binarne. Jeżeli jest makefile,
wystarczy, że wpiszemy make lub make install, a pliki skopiują się do odpowiednich
katalogów.
Inną sytuacją jest całkowity brak configure i makefile. Jest to typowe dla dużych
programów zajmujących po kilkadziesiąt, kilkaset MB. Przykładem może być tu
świetny pakiet biurowy OpenOffice.org. Nieopłacalne byłoby jego kompilowanie, więc
autorzy stwierdzili, że lepiej będzie rozprowadzanie go domyślnie w formie binarnej
(oczywiście kod źródłowy dostępny jest na oficjalnej stronie projektu). Dołączają
jednak plik instalacyjny setup, który po prostu uruchamiamy, tak jak już wcześniej to
omawiałem.
Często do tego typu programów dołączany jest także skrypt Basha, będący
zazwyczaj pod nazwą install.sh. Sposób instalacji jest identyczny jak w wyżej
wymienionym OpenOffice.org.
Instalacje pakietów dla poszczególnych dystrybucji jest wiele prostsza, niż instalacja
programów ze źródeł. Ja jednak nie będę opisywał dokładnie tego procesu.
Wszystkie dostępne opcje możemy uzyskać uruchamiając program zarządzający
pakietami z argumentem -h lub -help.
RPM:
rpm -i nazwa_pakietu.rpm - instalacja
rpm -q nazwa_pakietu.rpm- wyświetla informacje o pakiecie
rpm -r nazwa_pakiety.rpm - usunięcie
DEB:
dpkg -i nazwa_pakietu.deb - instalacja
apt-get remove nazwa_pakietu.deb - usunięcie
dpkg —info nazwa_pakietu.deb - wyświetla informacje o pakiecie
dpkg —reconfigure nazwa_pakietu.deb - ponowna konfiguracja pakietu
dpkg —list nazwa_pakietu.deb - wyświatlenie listy pakietów o podanym wzorcu
nazwy
dpkg —unpack nazwa_pakietu - rozpakowanie pakietu
Zajęcia 3
dr inż. Anna Zatwarnicka
14
TGZ:
installpkg nazwa_pakietu.tgz - instalacja
removepkg nazwa_pakietu.tgz - usunięcie
Jak wcześniej wspomniałem - aby uzyskać wszystkie dostępne opcje, uruchom
program zarządzający z argumentem -h lub -help. Alternatywnym rozwiązaniem jest
zajrzenie do podręcznika systemowego, gdzie znajdziemy szczegółowy opis każdej
funkcji (czytaj na końcu dokumentu).
Nie każdy jednak na początku chce instalować programy przy pomocy powłoki.
Dlatego też istnieją graficzne programy, które ułatwią nam to zadanie. Chyba
najlepszym wyborem na początek będzie kpackage.
Kpackage to narzędzie dostępne wraz ze środowiskiem KDE. Służy do instalowana
pakietów RPM, DEB TGZ Slackwara, a nawet pakiety rodziny BSD. Zaraz po starcie
programu ujrzymy dwa okna - listę pakietów oraz okno informacji o danym pakiecie.
Na bocznym pasku znajdziemy takie przyciski, jak Znajdź pakiet, Znajdź plik, Rozwiń
drzewo i Zwiń drzewo. Dodatkowo okno z listą podzielone jest na zakładki, dzięki
czemu szybko sprawdzimy, jakie pakiety są zainstalowane, jakie nowe, a jakie
aktualizowane.
By zainstalować pakiet należy po prostu na niego kliknąć. W oknie obok pokaże się
informacja o pakiecie a niżej podświetli się przycisk instalacji. Po jego wciśnięciu
zostaniemy oczywiście zapytani o hasło roota.
Kpackage daje nam możliwość instalowania także wielu pakietów na raz. W tym cely
należy klikać na pola obok pakietów. Na ich miejscu ujrzymy "V", co oznacza, że
pakiet jest zaznaczony. Teraz wystarczy nacisnąć Zainstaluj zaznaczone, pod listą
pakietów.
Kpackage to wygodne narzędzie, które idealnie nadaje się dla osób początkujących.
Istnieją także inne programy, które są pisane wraz z systemem pakietów, i tak w
Debianie mamy APT oraz Dsececta, a w Slackware PKGTool.
http://newbie.linux.pl/?id=article&show=108
Wykonywanie
(Executable Protections)
Randomized PIDs (CONFIG_GRKERNSEC_RANDPID) Ta opcja powoduje, że nowe
procesy otrzymują pseudo-losowe identyfikatory (normalnie, po prostu kolejne). Zapobiega to
przed "odgadnięciem" PIDa określonej aplikacji (np demona), przez włamywacza. Polecane
jest używanie tej opcji razem z Proc restrictions.

Podobne dokumenty