Konfigurácia a kompilácia vlastného jadra linuxu

Úloha

Nakonfigurujte, skompilujte a nainštalujte svoje linuxové jadro.

Postup

  1. Nainštalujte balík linux-source
  2. Preskúmajte adresár /usr/src
  3. Aká je verzia jadra? Aký je veľký súbor s príponou tar.xz
  4. Súbor s príponou tar.xz je predchodca toho čo poznáte z windowsu s príponou zip. Spustite si mc a preskúmajte jeho obsah. Preskúmať sa to dá tak že klávesou Enter "otvoríte" súbor ako vo windowse (mimochodom túto vlastnosť otvárania komprimovaných súborov mal mc skôr ako to urobili vo windows). Pozor po stisnutí klávesy treba počkať - je to veľký súbor ktorý treba načítať do pamäte a dekomprimovať. Všimnite si ako sa zmenila cesta v ráme okna ktorá informuje o mieste kde sa nachádzate. Vystúpiť späť sa dá návratom prostredníctvom "adresára" s názvom ..
  5. Zistite koľko slovákov je spomenutých v súbore CREDITS
  6. Zistite koľko čechov je spomenutých v súbore CREDITS
  7. Ukončite mc a príkazom tar ???? treba zistit rozbalte súbor do aktuálneho adresára. V minulosti tar nevedel obsluhovať kompresiu xz, dnes už vie.
  8. Zistite čo pribudlo a koľko to zaberá miesta na disku
  9. Chodte do podadresára Documentation/admin-guide a otvorte si súbor README.rst Nájdite kapitolu Installing the kernel source Na konci je veta Make sure you have no stale .o files and dependencies lying around:: Klávesou Ctrl + O presunte mc na pozadie a prejdite do adresára kde sa súbory rozbalili (linux-source.....). príkaz cd teda treba upraviť . Vyčistite prípadané už existujúce skompilované súbory. Po inštalácii by to malo byť čisté ale príkaz sa hodí ak budte chcieť niekedy začať znova a s čistým stolom.
  10. Vráttde sa na súbor README.rst Nájdite kapitolu Configuring the kernel Vyskúšajte prvý alternatívny príkaz pre konfiguráciu kernelu. Nič tam nemente len to odosielajte klávesou Enter Sledujte čo sa dá všetko konfigurovať. Keď vás to prestane baviť ukončite konfiguráciu predčasne klávesou Ctrl + C Tento spôsob konfigurácie bol používaný v začiatkoch OS linux a je veľmi nepraktický.
  11. Vyskúšajte druhý spôsob konfigurácie kernelu. predpokladám že dostanete chybu. Tejto chyby sa zbavíte tak že si naištaľujete balik libncurses-dev Knižnica ncurses je jedna z opbľúbených na vytvátanie textových okienkových aplikácií (aj mc ju používa). V prípade kompilácie kernelu ale potrebujeme vývojové prostredie z ktorého sa toto okienkové rozhranie skompiluje. Preto pá prípona -dev od slova develop - vyvíjať.
  12. Opakované spustenie už bude bez chyby a ak to robíte na konzole sytému tak bude aj všetko pekne vyzerať. V prípade že to ale budete púštať v emulátore terminála putty tak orámikovanie nebude asi funkčné. Ukončite prokram príkazom exit bez ukladania konfigurácie. Potom v meny programu putty (ikona v ľavom hornom rohu okna), dajte príkaz Change Settings... Následne výberte možnosť Window > Translation. Teraz už len zakliknite posledné okienko. Enable VT100 line drawwing even in UTF-8 mode.
  13. Opakovane spustite konfiguráciu kernelu pomocou druhej možnosti. Teraz by to malo byť pekne oprámované, a hore je aj slušne napísané ako sa to ovláda. Sú tam dva kurzory. Jeden sa posúva šipkami ↑ ↓ a vybrerá sa tak za ponuky konfiguračných možností. Druhý kurzor je dolu a vyberá operácie. Týmto sa pohubuje šípkami ← →. Sevect vyberá vstup do položky ktorá má hlbšie submenu Exit sa vracia o jednu úroveň dozadu, prípadne úplne ukončuje konfiguráciu. Ďalšou špeciálnou klávesou je Enter Ten aktivuje daný príkaz. Poslednou používanou klávesou je medzerník Ten prepína možnosti pri voľkách ktoré ich majú. Poznáte ich tak že sú buď v hranatých zátvorkách [*] alebo v zložených zátvorkách {*} Ak je tam znak * tak to znamená že daná voľba sa bude kompilovať do jadra. Ak je tam znak M tak sa voľba nekompiluje priamo do jadra, ale sa skompiluje modul ktorý je možné v prípade potreby do jadra načítať (alebo zase v prípade že nie je potreba tak odstrániť z jadra). Ak tam nie je nič, znamená to že táto možnosť nebude v jadre nijako dostupná.

    Niečo si popozeráme ale ani tu neskončíme pretože táto metóda konfugurácie je asi tak 20rokov stará. Po chvíli slúmania teda aj toto rozhranie ukončíme a konfiguráciu neuložíme.

  14. Použijeme tretiu možnosť konfigurácie, ak budem v konzole, alebo v putty. Štvrtá a priato možnosť je vhodná ak konfigurujete z grafickej konzoly.
  15. A teraz si naozaj aj niečo nakonfigurujeme. Cvičenie som robil podľa tohoto videa takže ako prvé si nastavte v časti
    General setup --->
    položku označnú ako
    () Local version - append to kernel release
    Tam zadajte text -xx Kde xx sú vaše iniciálky

Teoretický rozbor

Popis systému systemd v Linuxe

systemd je moderný init systém a správca služieb používaný v Linuxe. Je to prvý proces, ktorý sa spustí po načítaní jadra (má PID 1), a stará sa o spúšťanie všetkých ostatných procesov, služieb a systémových funkcií.

1. Spustenie systemd

Po načítaní jadra Linuxu sa vykoná:

/sbin/init → symlink → /lib/systemd/systemd

Tým sa spustí proces systemd ako PID 1.

2. Načítanie konfigurácie

Systemd načítava jednotky (units) z týchto priečinkov:

3. Jednotky (Units)

Každá služba, mount alebo cieľ je definovaný v súbore s príponou .service, .target, .mount, .socket, .timer atď.

    # /lib/systemd/system/sshd.service
    [Unit]
    Description=OpenSSH server daemon
    After=network.target
    
    [Service]
    ExecStart=/usr/sbin/sshd -D
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

4. Ciele (Targets)

Systemd používa tzv. targets namiesto starých "runlevelov".

Runlevelsystemd TargetPopis
1rescue.targetJednouchý režim (single user)
3multi-user.targetBežný textový režim
5graphical.targetGrafické prostredie
0poweroff.targetVypnutie systému
6reboot.targetReštart systému

5. Paralelné spúšťanie

Systemd dokáže spúšťať služby paralelne podľa ich závislostí (After=, Requires=), čo výrazne zrýchľuje štart systému.

6. Správa služieb

Na správu služieb sa používa príkaz systemctl:

    systemctl status sshd.service      # stav služby
    systemctl start sshd.service       # spustiť
    systemctl stop sshd.service        # zastaviť
    systemctl restart sshd.service     # reštartovať
    systemctl enable sshd.service      # spúšťať pri štarte
    systemctl disable sshd.service     # nespúšťať pri štarte
    

7. Logovanie – journald

Systemd má vlastný systém logovania (journald):

    journalctl             # všetky logy
    journalctl -b          # logy od posledného bootu
    journalctl -u sshd     # logy konkrétnej služby
    

8. Analýza bootu

Na analýzu rýchlosti štartu systému:

    systemd-analyze
    systemd-analyze blame
    systemd-analyze critical-chain
    

9. Zhrnutie komponentov

FunkciaKomponent
Init proces/lib/systemd/systemd
Správa služiebsystemctl
Logovaniejournald
Čas a dátumtimedated
Sieťnetworkd
Používatelialogind
Automatické úlohysystemd-timer
Poznámka: Systemd spúšťa služby paralelne a sleduje ich stav počas celého behu systému. Ak služba zlyhá, môže ju automaticky reštartovať.

Postup