Hlavní navigace

Nebojte se systemd: další komponenty

25. 7. 2016
Doba čtení: 5 minut

Sdílet

 Autor: Shutterstock.com
V dnešním posledním článku o správě systému se systemd si představíme další komponenty: především čtení logů, ale také přihlašování uživatelů, správu času a sítě.

Journal – konfigurace

Pro logování slouží v systemd program journal. Informace si na rozdíl od původního syslogu ukládá binárně, což bývá často kritizováno odpůrci systemd. Obecně ukládá více metadat než syslog a podporuje pokročilejší správu logů. Informace o něm jsou v manuálové stránce systemd-journald. Jako konfigurační soubor slouží /etc/systemd/journald.conf. Konfigurační soubor je opět stejného formátu, s jakými jsme se doposud setkali. Veškerá konfigurace se provádí v sekci Journal.

Protože journal uchovává více dat, je nutné pečlivěji nastavit práci s pamětí. Pro některá zařízení může být zápis na disk příliš náročný, a proto existuje parametr Storage. Pokud jej nastavíme na hodnotu volatile, veškerá data se budou ukládat v adresáři /run/log/journal a tedy budou pouze v paměti RAM. Jako následek budou samozřejmě po restartu počítače vymazána. Nastavíme-li hodnotu persisent, data budou naopak uchovávána v /var/log/journal  a budou tak přístupná i po restartu počítače. Výchozí hodnotou je auto, která, pokud existuje /var/log/journal, je ekvivalentní persistent, v opačném případě volatile. Poslední možností je none, kdy journal jednoduše logy nikam neukládá. Může se hodit, pokud například budeme všechna data přesměrovávat syslogu.

Pro ušetření místa nám může pomoc Compress=true. Journal při tomto nastavení bude automaticky data komprimovat. Kromě toho journal také nabízí možnosti automatického mazání starých záznamů. Všechny parametry mají dvě varianty. Ty, které začínají na System, se uplatní ve chvíli, kdy se data zapisují do adresáře /var/log/journal. Jinak se použijí limity začínající na Runtime.

Nejjednodušší variantou je SystemMaxUse (a samozřejmě RuntimeMaxUse, dále budeme uvádět je variantu se System), kterému jako hodnotu nastavíme maximální velikost souboru v bytech na disku (samozřejmě fungují přípony K, M a G). Journal pak automaticky maže nejstarší data tak, aby se zbylá data vešla do limitu. Místo velikosti je také možné použít relativní v procentech, pak se dosadí poměrná část z velikosti oddílu.

Doplňkem k předchozímu parametru je SystemKeepFree, který má stejné hodnoty, jen se maximální velikosti logu vypočte tak, aby zbylo volné místo na oddílu definované tímto parametrem. Ostatní parametry je možné nalézt v  man journald.conf

Čtení logů

Část logu dané jednotky zobrazuje při výpisu příkazu systemctl status. Pro kompletní výpis logů slouží příkaz journalctl, který vypíše obsah celého logu od nejstarších položek. Které přesně položky logu budou vypsány, můžeme ovlivňovat parametry sepsanými níže. Pokud jich uvedeme více, zobrazí se jen ty záznamy, které splňují všechny podmínky.

-f, –follow
Vypíše pouze několik nejnovějších logů a zároveň do výstupu postupně připisuje všechny nové záznamy
-n, –lines=číslo
Vypiš jen tolik nejnovějších záznamů, kolik je hodnota tohoto parametru
-u, –unit=jméno
Vypíše pouze záznamy týkající se dané jednotky, tento parametr je možné předat vícekrát. V tom případě se vypíší záznamy o každé jednotce.
--user-unit=jméno
Analogie předchozího parametru v uživatelském režimu
-S, –since=čas
Zobrazí se pouze záznamy, které jsou novější než zadaný čas. Formát je stejný jako v případě časovačů, můžeme tedy použít standardní zápis 2016–07–20 17:41:25, či kupříkladu hodnotu yesterday.
-U, –until=čas
Funguje stejně jako předchozí parametr, pouze vynucuje zobrazení starších záznamů.

Následující neupravují, které záznamy jsou vypsány, ale usnadňují práci s logem:

-e, –pager-end
Automaticky odskroluje na konec
-r, –reverse
Přehodí pořadí, tedy nejnovější záznamy budou na začátku

Journal je obsluhován službou systemd-journald. O rotaci souborů se stará logrotate.service. O pravidelné spouštění se stará logrotate.timer, který je ve výchozím nastavení pouštěn denně.

Uživatelská sezení

Sezení uživatelů spravuje v systemd služba se jménem systemd-logind. Tu je možné nakonfigurovat v souboru /etc/systemd/logind.conf, kde je možné především různá omezení, jako např. maximální počet sezení najednou. Pro správu terminálů existuje šablony getty@.service, tedy např. první terminál je služba getty@tty1.service. Hezkou ukázkou, jak funguje přepis konfigurace, je nastavení automatického přihlášení nějakého uživatele. Stačí vytvořit následující soubor:

/etc/systemd/system/getty@tty1­.service.d/override.conf

[Service]
Restart=no
ExecStart=
ExecStart=-/usr/bin/agetty --autologin knezi --noclear %I $TERM

Jak už víme, tento soubor přepisuje konfiguraci, proto služba getty@tty1.service místo původního příkazu bude spouštět ExecStart=-/usr/bin/agetty --autologin knezi --noclear %I $TERM. Navíc ještě zakážeme restartování, což se může hodit v případě vzniku nějaké chyby, kteoru pak snadno můžeme opravit z jiného terminálu jiným uživatelem.

Další komponenty

Spíše pro přehled si uvedeme další čtyřikomponenty systemd. První je systemd-udevd. Kernel při změně stavu nějakého hardwaru (např. připojení, či jeho odpojení) vytvoří událost, kterou právě obsluhuje systemd-udevd. Obsluhu můžeme snadno vytvořit novou pomocí tzv. udev pravidel. Více v manuálových stránkách systemd-udevd a udev.

Systemd-networkd má za úkol sledovat rozhraní pro připojení k síti a případně je konfigurovat.

Pro analýzu startu počítače jeho potenciální zrychlení slouží komponenta systemd-analyze. Příkaz systemd-analyze blame vypíše, kdy byly spuštění jednotky a můžeme tak objevit ty, které se startovaly nejdéle. Přestože systemd se snaží spouštění jednotek paralelizovat, jak jen je to možné, v některých fázích se čeká na pouze jedinou jednotku. Pro nalezení takových slouží příkaz  systemd-analyze critical-chain.

Poslední komponentou, kterou si představíme, je systemd-timedated. Pomocí této služby můžeme měnit aktuální čas, časovou zónu a povolit/zakázat NTP. Ke změně nastavení slouží příkaz timedatectl. Příkazem timedatectl set-ntp true můžeme nastavit automatickou synchronizaci pomocí protokolu NTP. Příkazem timedatectl set-time "2016-07-21 14:30" pak nastavíme aktuální čas na 21. července půl třetí odpoledne.

Dva tipy na závěr

V některém z předchozích dílů jsme si říkali, že je možné přepisovat konfiguraci služeb pomocí vytvoření souborů ve složce jmeno.d. Pro tuto činnost slouží příkaz systemctl edit jméno editované jednotky, který automaticky otevře soubor /etc/systemd/system/jmeno.d/override.conf, čímž nám ušetří trochu psaní.

root_podpora

Mezi administrátory se pravděpodobně nenajde moc těch, kteří raději klikací konfiguraci, ale i tak systemd nabízí jednoduché klikátko (které ale rozhodně neumí vše) pro administraci. Jmenuje se systemadm a mělo by být v balíčku systemd-ui.

V tomto seriálu jsme postupně prošli všechny základní části systemd a řekli si o dalších komponentách. Samozřejmě jsme většinu brali spíše povrchně pro první seznámení. Další informace může čtenář najít v manuálových stránkách.

Byl pro vás článek přínosný?

Autor článku

Autor studuje na Matematicko-fyzikální fakultě. Ve svém volném čase se kromě Linuxu věnuje také vlastní 3D tiskárně.