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.