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)
• Folyamata:
Bootolás
– 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 GRUB2EFI • 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
BIOS
• Nem csak POST • Szolgáltatásai is vannak • 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
MBR, stage 1 boot loader
Futtatható kód és hiba üzenetek
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
Kernel boot
• File eleje egy program – – – –
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-8fed5ce0c040365d)File(\EFI\fedora\grubx64.efi) Boot0003* opensuse HD(1,800,61800,6d98f360-cb3e-4727-8fed5ce0c040365d)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 0 1
Cél
Leállított állapot, ki lehet kapcsolni
Rendszer adminisztrációs állapot, egy felhasználó!!!
S vagy s Single-user mód 2 3
4,7,8,9 5 6
Q, q, a, b, ...
Multi-user mód, Unix-tól függően
Távoli filerendszer állapota: szervereknek az alapvető futási szintje Adminisztrátor adja meg
Mint a 3. szint, de grafikus felület is elindul
Újraindítás, 0. szint és egy újabb szint elindítása Pseudo állapotok
A rendszer állapotai
$ who -r . 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/
/etc/rc0.d/K -> ../init.d/ /etc/rc2.d/S -> ../init.d/
/etc/inittab
• Szöveges file • 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/
• A számozás a sorrendet adja meg
stop
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 ...
cron nfs
init.d inittab
/etc rcS.d
rcS rc2.d rc2
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 • • • •
• Párhuzamos • Függőségek hatékony kezelése Shell scriptek, runlevel • Deklaratív nyelv, • unit, target • Manager és több „Csak” manager implicit daemon Text log • Binary log • Kritika, „Not UnixKritika, idejétmúlt, like” lassú
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