Systemd – bootujte rychleji a čistěji v openSUSE 12.1

opensuse_12.1_3d_171px.pngJednou z novinek operačního systému openSUSE 12.1 je právě systemd, který nahradil System V init a umožnil nám využít vylepšeného bootování a správy služeb. Tento nový systemd přichází s celou řadou novinek jako je aktivace dbus a socket, použití cgroups (kontrolních skupin) a agresivní paralelizace schopností, což vede k rychlejšímu bootování systému. systemd přináší i celou řadu novinek a nástrojů do sysadmins. Tento článek vám vysvětlí, co systemd dělá, jak to dělá a jak využít možností, které nabízí.

Bootování systému a služeb

V openSUSE 12.1 systemd spouští a dohlíží na správný chod operačního systému a jeho služeb. To obvykle představuje několik základních kroků, kterými jsou:

  1. Namountovování vašich disků a kontrola chyb (v případě potřeby)
  1. Spuštění firewallu a dalších bezpečnostních nástrojů
  1. Spuštění služeb jako například mailu, databází nebo třeba webových serverů
  1. Připojení se k síti a síťovým systémovým souborům
  1. Spuštění grafického rozhraní a přihlašovacího manageru

Když systém běží, tak systemd dohlíží na spuštěné služby a zavádí nové, když je to třeba (například tisknutí).

Jako za starých časů (SysV init)

Starý SysV init systém byl v podstatě volnou sbírkou shell skriptů v /etc/init.d (někdy v jiných distribucích v /etc/rc.d). Tyto skripty byly volány na základě závislostí na ''runlevel'' systému, což bylo založené na symbolických odkazech na skripty samotné v adresářích /etc/init.d/rcX. V této struktuře každý adresář zastupoval číslo runlevelu včetně jejich řádu a závislostí. Čísla se využívala od 00 do 99. V praxi to znamenalo, že po nabootování systém přešel do určitého runlevelu, ve kterém se spustily všechny skripty, které byly s tímto runlevelem propojené. Přestože byl tento princip trochu křehký, tak byl dostatečně přehledný a jasný a to i přes to, že skripty byly obvykle rozsáhlé a komplikované.

Nový a vylepšený systemd

Namísto využití shell skriptů se v systemd používají soubory ''.service'', které definují různé funkce, které poskytuje systemd, takže trochu něco podobného jako staré SysV init skripty, ale s jednoduššími a deklarativními syntaxemi, než je tomu u bash.

Závislosti a události

Namísto spouštění skriptů na základě předem stanoveného počtu runlevelů systemd využívá závislosti a události, pomocí kterých se rozhoduje, kdy se má služba spustit. Nejlépe se to vysvětluje na příkladu, takže si vezmeme třeba síťové služby. Ty systemd spustí, jakmile je inicializováno síťové zařízení a ve chvíli, kdy se vaše síťové zařízení připojí k síti, tak systemd může spustit další služby, které závisí na připojení k síti, takže například Sambu nebo NFS. Z toho vyplývá, že pokud se k síti nepřipojíme, tak systemd nemá zapotřebí se s těmito službami zabývat, stejně jako nemusí spouštět CUPS v případě, že nemáte připojenou tiskárnu.

systemd využívá ke spouštění služeb sockety a dbus, což umožňuje on-demand startování deamon procesů a sledování socketů kvůli požadavkům aplikací. V praxi to znamená, že služba pro tisk bude spuštěna až tehdy, kdy budete tisknout.

Spouštění a zastavování služeb

systemd může spustit ve stejné době tolik služeb, kolik jen bude potřebovat, ale s ohledem na závislosti a potřeby systému. To spolu se skutečností, že není nutné spustit tlumočníka shell pro jednotlivé skripty, má za následek, že systém bootuje rychleji.

Služby v systemd mohou být zakázány, povoleny, spuštěny, zastaveny, restartovány a znovu spuštěny stejně jako skripty SysV, ale na rozdíl od SysV jsou aplikace ovládány skripty pečlivě sledovány a kontrolovány. Tam, kde si SysV nevšiml, že služba nejede (např kvůli spadnutí), se systemd pokusí dané služby znovu spustit a když systemd zastaví nějaký proces, tak si můžete být opravdu jisti, že tento proces je zastaven a to díky použití novinky jádra, která se jmenuje cgroup.

Standardizace

systemd usiluje o standardizaci init skriptů, které jsou používány i u jiných distribucí. To by mělo snížit náročnost údržby, protože se bude sdílet práce více lidí, ale to nejprve vyžaduje určitou standardizaci. To znamená využívat standard ''systemctl'' k ovládání služeb místo /etc/rc* souborů. V současné době openSUSE stále podporuje soubory rc-style (za předpokladu využití symbolických odkazů v /etc/rc.d), takže stále můžete spouštět služby ručně. systemd je také zpětně kompatibilní se starým stylem init skriptům, tedy ''ne'' standardní (nejsou zahrnuty v systemd) skripty stále poběží. Více informací a seznam omezení týkající se této problematiky naleznete zde.

Použití systemd

Nyní si pojďme představit pár novinek, které jsou důležité pro ''normální'' uživatele, stejně jako pro správce systému.

Správa služeb a (automatické) mountování zařízení

Zařízení označená pomocí udev jsou brána jako jednotky v systemd a jejich udev vlastnosti mohou být využity jako konfigurační zdroj k nastavení závislostí jednotek zařízení. systemd také udržuje připojení a automaticky mountuje body a v případě potřeby rovněž odmountovává zařízení. Pro každý automatický mountovací bod je připraven odpovídající přípojný bod. Chcete-li umožnit systemd automatické mountování zařízení přidejte ''comment=systemd.automount'' na řádek fstab a mountovací bod se vám automaticky nastaví na možnost automatický mountovací bod. Toto nastavení může být použito na síťové souborové systémy nfs a cifs. /etc/fstab se využívá jako další konfigurace mountovacích bodů. systemd také podporuje cíl jednotek, jenž jsou logicky seskupeny a díky tomu se tyto skupiny dají řídit společně.

Nové systémové nástroje

Správci systému jistě přivítají nový systémový nástroj jako je systemctl pro administraci systému. Například když chcete zkontrolovat stav mysql.service, tak spusťte následující příkaz:

$ systemctl status mysql.service
mysql.service - LSB: Start the MySQL database server
Loaded: loaded (/etc/init.d/mysql)
Active: active (running) since Wed, 02 Nov 2011 10:53:34 +0100; 24h ago
Process: 3242 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/mysql.service
├ 3578 /bin/sh /usr/bin/mysqld_safe --mysqld=mysqld --user=mysql --pid-file=/var/run/mysql/mysqld.pid --socket=/var/ru...
└ 4191 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --lo...

To, co je opravdu skvělé na systemctl, je karta Dokončení. Na první úrovni příkaz typu systemctl vám ukáže, které akce můžete spustit. Na druhé úrovni se ukáže, jaké jméno služby můžete použít ke startu mysql.service.

Vypnutí/zapnutí služby

systemctl disable mysql.service
systemctl enable mysql.service

Všimněte si, že chkconfig vám ukáže, kdy je služba pro systemd nativní či ne.

Lokace
Soubory služeb systemd jsou většinou uloženy v /lib/systemd/system

Start stop your computer
systemctl reboot
systemctl halt
systemctl poweroff
systemctl emergency
systemctl rescue

Informujte se

 systemd-analyse --time: give your boot time of your system
systemd-analyse --blame: find which service took too much time to boot
systemd-analyse --plot > bootchart.svg : see your boot, in a graphical chart
systemctl dot : Use a command line like systemctl dot --order | dot -Tsvg >systemd-order.svg to generate a graphical dependency tree

Ladění
Pokud si přejete aktivovat ladící mód po spuštění systému, přidejte následující příkaz na bootovací řádek:

systemd.log_target=kmsg systemd.log_level=debug

Cesta zpět

Přestože se nikomu nedoporučuje využívat SysV init na openSUSE 12.1, tak lidé, kteří přesto chtějí mít SysV init jako výchozí, potřebují nainstalovat sysvinit-init balíček (ten odinstaluje systemd-sysvinit balíček) nebo změnit grub možnosti. Dokonce i když nebudete používat systemd, tak neodinstalovávejte jeho balíčky, mohlo by totiž dojít k poškození systému. Balíček systemd-sysvinit nemusíte odstraňovat ani v případu nouze. Pokud necháte nainstalovaný sysvinit balíček, můžete pomocí něj bootovat, když přidáte na bootovací řádek init=/sbin/sysvinit a je to.

Autor: VojTEKK

Komentáře

mhavrda odpověděl -

Odkaz zde v tomto článku v sekci Standardizace odkazuje na tento článek.
Kam má odkazovat?

Míla

mhavrda odpověděl -

Chci se zeptat, jestli je již vyřešen problém s rychlostí bootu verze 12.1.
Recenzenti vesměs psali, že verze 12.1 bootuje pomaleji než verze 11.4.

Je to jeden z důvodů, proč jsem ještě na 12.1 nepřešel.

Můj dotaz tedy zní, jestli tento stav nějak opravili aktualizace.

Přidat komentář

Filtered HTML

  • Povolené HTML značky: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <pre>
  • Řádky a odstavce se zalomí automaticky.
  • Webové a e-mailové adresy jsou automaticky převedeny na odkazy.

Plain text

  • Nejsou povoleny HTML značky.
  • Webové a e-mailové adresy jsou automaticky převedeny na odkazy.
  • Řádky a odstavce se zalomí automaticky.