Kiszolgálók üzemeltetése Iványi Péter
Bootolás és leállítás Bár viszonylag egyszerű és csak ritkán van rá szükség, minden adminisztrátornak tudnia kell hogyan zajlik!
Bootstrap Bootolás A számítógépnek kell az operációs rendszer hogy valamit csinálhasunk, de az operációs rendszert is el kell valahogy indítani anélkül hogy már lenne futó operációs rendszer A folyamat nagyjából ugyanaz minden Unix-on Indíthatjuk automatikusan vagy manuálisan Gép bekapcsolásnál (cold boot) Újra bootolás esetén (warm boot)
Bootolás Folyamata: Hardware elemek érzékelése Firmware programok automatikus futtatása Megkeresni és futtatni a boot programot (általában a diszk egy meghatározott helyén van) Megkeresni és futtatni a kernel-t (a first stage boot program futtatja) Kernel inicializálja magát, magas szintű hardware ellenőrzés, device driverek betöltése Kernel indítása, az init processz futtatása ami az alrendszereket fogja indítani
UEFI vs. BIOS áttekintés Legacy boot stub bzimage, 2.5.64-től, azóta sok változás Cmdline? Initramfs? Bootloader, -manager LiLo, Syslinux, ma leginkább GRUB Képességek: FS, editor, initrd, cmdline, UEFI boot stub UEFI app(pe), 3.3-tól EFI vars Képességek: FS, editor, manager, TCP/IP, framebuffer, stb Secure Boot Bootloader, -manager Ma leginkább GRUB2- EFI Mit tesz hozzá?
UEFI vs. BIOS áttekintés Disk kontextus MBR part. séma Több lépcsős bootloader, Magic space Címzési problémák, üzemmódváltások File kontextus GPT part. séma Egylépcsős, Portable Executable betöltés Teljes címtér Nincs üzemmódváltás, bitness egyezés
Boot áttekintése
Bootolás Először a BIOS kapja meg a vezérlést POST (POwer on Self Test) Ellenőrzi a hardware-t Megszámolja a device-okat és inicializálja őket Hibákat a hangszórón keresztül hangjelzéssel jelzi Csipogások száma alap laponként változik (dokumentációt meg kell nézni) képernyőn is jelezheti
Nem csak POST Szolgáltatásai is vannak BIOS Bootolás után a POST-ot nem használjuk tovább, de a szolgáltatások maradnak
Bootolás BIOS megkeresi honnan lehet bootolni floppy CD-ROM merev lemez CMOS tárolja a bootolási sorendet
Bootolás merev lemezről Merev lemez esetén Betölti az MBR-t a memóriába (RAM) és átadja a vezérlést MBR = program + partíciós tábla
Futtatható kód és hiba üzenetek MBR, stage 1 boot loader 0xAA55 ellenőrzésra
Bootolás merev lemezről MBR program megkeresi az aktív, (bootolható) partíciót a táblában majd a lemezen A partíció első szektorát betölti a memóriába Ez a boot szektor, boot record Ez egy boot programot tartalmaz (bootstrap code) Stage 2 bootloader Az MBR átadja a vezérlést a Stage 2 boot programnak
Boot szektor? Partíciók ismét
Stage 2 boot loader Tulajdonképpen ez a kernel loader Feladat most: A kernel betöltése Esetleg egy RAM diszk betöltése
Linux boot loader Stage 1 + Stage 2 boot loader LILO (Linux Loader) vagy Szektorokkal dolgozik GRUB (GRand Unified Bootloader) Ismeri a file rendszert Igazából 3 fázisú a bootolás Stage 1 Stage 1.5, ami érti a file rendszert, (ext2, ext3) Stage 2, file kezeléssel betöltés
Stage 2 Linux boot loader /boot/grub/grub.cfg Elérhető kernelek listája Beállításokat lehet végezni, paramétereket lehet megadni Betölti a kernelt és a RAM diszket (initrd) Átadja a vezérlést a kernel-nek
kernel A rendszer magja, a kernel mindvégig fut amíg az op rsz Egy futtatható file AIX FreeBSD HP-UX Linux Tru64 Solaris /unix /kernel /stand/vmunix /boot/vmlinuz /vmunix /kernel/genunix
Kernel betöltés A kernel igazából egy összetömörített kép zimage (< 512 kb) bzimage (> 512 kb) Igazából problémás a betöltés valós módban (real mode) csak 1 MB RAM érhető el 20 bites címzés Régebbi BIOS csak 16 MB-ot tud kezelni
bzimage http://blog.lse.epita.fr/articles/68-uefi-boot-stub-in-linux.html
Kernel betöltés, 1. Tömörítetlen kernel (< 512 kb) 64k -ról a 4K-s címre másolja Felülírja a BIOS kódot, nem gond, Linux nem használja Védett módba lép (protected mode) Teljes memória elérhető
Kernel betöltés, 2.
Kernel betöltés
File eleje egy program Kernel boot Minimális hardware inicializálás Kitömöríti a kernelt a memóriába Ha van RAM diszk, azt is memóriába tölti Elindítja a a kernelt
Kernel boot - Megszakítások - Memória beállítás - init felhasználói processzus indítása (kernel_thread) - idle processzus indítás - scheduler indítás
Kernel + initrd Kernel kicsi lehet, mivel a modulok és kiegészítő programok az initrd-ben találhatók A root file rendszer mountolása előtti környezetét biztosítja dracut, mkinitramfs, mkinitrd
Kernel + initrd Boot loader betölti a kernelt és /dev/initrd tartalmát a memóriába Kernel induláskor kitömöríti az /dev/initrd tartalmát a /dev/ram0 device-ra Be-mountolja /dev/ram0 -t mint kezdeti root file rendszer Végrehajtja a /linuxrc file-t Az igazi root file rendszert betölti
UEFI boot manager Firmware UI, userspace NVRAM bejegyzések Filerendszer PE applikációk Permanently Installed bejegyzések Hotplug, removable media, fallback bejegyzések Secure Boot
UEFI userspace: efivar, efibootmgr uefivars efitools [root@system directory]# efibootmgr -v BootCurrent: 0002 Timeout: 3 seconds BootOrder: 0003,0002,0000,0004 Boot0000* CD/DVD Drive BIOS(3,0,00) Boot0001* Hard Drive HD(2,0,00) Boot0002* Fedora HD(1,800,61800,6d98f360-cb3e-4727-8fed- 5ce0c040365d)File(\EFI\fedora\grubx64.efi) Boot0003* opensuse HD(1,800,61800,6d98f360-cb3e-4727-8fed- 5ce0c040365d)File(\EFI\opensuse\grubx64.efi) Boot0004* Hard Drive BIOS(2,0,00)P0: ST1500DM003-9YN16G [root@system directory]#
Secure Boot Aszimmetrikus kriptográfia Signature database, revoked s. DB (DB, DBx) Key Enrollment Key DB (KEK) Platform Key (PK) Fizikailag jelenlévő user jelentősége Kitérő: Shim
init A kernel 1-es processz azonosítóval (PID) elindítja az /sbin/init processzust Minden processzus őse Első felhasználói szintű alkalmazás A szabványos C könyvtárral van összefordítva
init feladatai Filerendszer ellenőrzés Filerendszerek betöltése (mount) Lapozó területek inicializálása Filerendszer takarítás, pl. /tmp törlése Rendszer processzusok indítása Daemon-ok Levelezési Nyilvántartási Log cron
init feladatai Hálózat indítása Felhasználói bejelentkezés biztosítása getty processzus indítása
Inicializálás Parancs script-ekkel történik Szöveges file-ok /etc könyvtárban találhatók A rendszer állapotai Kikapcsolva Single-user mód Multi-user mód
A rendszer állapotai System V további működési szinteket állapít meg Szint Cél 0 Leállított állapot, ki lehet kapcsolni 1 Rendszer adminisztrációs állapot, egy felhasználó!!! S vagy s Single-user mód 2 Multi-user mód, Unix-tól függően 3 Távoli filerendszer állapota: szervereknek az alapvető futási szintje 4,7,8,9 Adminisztrátor adja meg 5 Mint a 3. szint, de grafikus felület is elindul 6 Újraindítás, 0. szint és egy újabb szint elindítása Q, q, a, b,... Pseudo állapotok
$ who -r A rendszer állapotai. run level 3 Mar 14 11:14 3 0 S $ runlevel Megadja hogy mely szinten fut a rendszer Linux-ban a 3-as szint az alap futási szint
Inicializáló scriptek /etc/inittab /etc/rc0 /etc/rc2... /etc/init.d/<alrendszer> /etc/rc0.d/k<n><alrsz> ->../init.d/<alrsz> /etc/rc2.d/s<n><alrsz> ->../init.d/<alrsz>
Szöveges file /etc/inittab Az alap szintet is tartalmazza id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1... l6:6:wait:/etc/rc.d/rc 6 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2
/etc/inittab 1:2345:respawn:/sbin/getty 9600 tty1 2, 3, 4, 5 futási szinteken mindig fut Megjeleníti a login sort a console-on (tty1) 2:234:respawn:/sbin/getty 9600 tty2 2, 3, 4 futási szinteken mindig fut (újraindítja, ha leáll) Megjeleníti a login sort a console-on (tty2) l3:3:wait:/etc/init.d/rc 3 Egyszer fut le, amikor 3. szintre váltunk ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now Akkor fut amikor control-alt-delete-t megnyomják
K és S file-ok Szimbólikus linkek az /etc/init.d/ könyvtárban található file-okra Parancs scriptek K file: /etc/init.d/<command> stop A számozás a sorrendet adja meg
rc3.d file-ok K05innd ->../init.d/innd K05saslauthd ->../init.d/saslauthd K10psacct ->../init.d/psacct K12cWnn ->../init.d/cwnn K12FreeWnn ->../init.d/freewnn K12kWnn ->../init.d/kwnn K12mysqld ->../init.d/mysqld K12tWnn ->../init.d/twnn... K55routed ->../init.d/routed K61ldap ->../init.d/ldap
rc3.d file-ok... S08ip6tables ->../init.d/ip6tables S08ipchains ->../init.d/ipchains S08iptables ->../init.d/iptables S09isdn ->../init.d/isdn S10network ->../init.d/network S12syslog ->../init.d/syslog S13portmap ->../init.d/portmap S14nfslock ->../init.d/nfslock...
/etc init.d rcs.d rc2.d inittab rcs rc2 cron nfs tcp K75cron K85nfs K90tcp K30tcp K40nfs S30tcp S40nfs
init után Miután az rc könyvtárban levő file-okat feldolgoztuk az inittab elindít /sbin/mingetty processzus(oka)t Virtuális terminálok tty eszközökhöz való hozzáférést biztosít
Összefoglalva
Bootolás vizuálisan Megszakítások kezelése bootloader
systemd vs. init Szekvenciális Sorrendiség Shell scriptek, runlevel Csak manager Text log Kritika, idejétmúlt, lassú Párhuzamos Függőségek hatékony kezelése Deklaratív nyelv, unit, target Manager és több implicit daemon Binary log Kritika, Not Unixlike
systemd Dbus, cgroups, SELinux, cryptoluks integráció, unix domain sockets Letisztult API, egyszerű syntax, nem nehéz kezelni, karbantartani Auto. függőségi fa építés, párhuzamosítás Szolgáltatásonkénti resource limit Kb. 225000 C sor (init kb. 15000) Job scheduling, calendar timer Udevd merge journald, journalctl logind consoled
systemd and ancillaries http://www.pcworld.com/article/2841873/meet-systemd-the-controversial-project-taking-overa-linux-distro-near-you.html