Nebojte se systemd: zbývající konfigurace

Jan Knížek 18. 7. 2016

Další článek ze série odhalující vnitřnosti systemd. Dnes dokončíme povídání o jádru systemd, představíme si generátory, obecnou konfiguraci a nakonec ještě dodatečné možnosti některých typů jednotek.

Generátory

Minule jsme zmínili generátory, které mají v systemd široké použítí. Nejčastěji slouží ke čtení konfiguračních souborů. Pokud používáme rozdělení disků GPT, můžeme jednotlivé oddíly označit jejich funkcí (pole GUID). Systemd je pak automaticky najde a připojí bez nutnosti konfigurace, např. nalezne oddíl pro domovský adresář a připojí jej do /home. Další podporované jsou boot oddíl, root, swap a serverová data určená k připojení do  /srv.

Další použití je pro aktualizace, které se nainstalují při dalším startu. Pokud existuje složka /system-update, Generátor systemd-system-update-generator spustí místo cíle default.target cíl system-update.target. Podobně generátor systemd-hibernate-resume-generator v případě nastavení parametru jádra resume=cesta k uložené hibernaci spustí službu systemd-hiberante-resume@.service, která po hibernaci uvede systém do původního stavu.

Pokud bychom chtěli jednotky vygenerovat znovu (např. po úpravě generátoru), stačí spustit systemctl daemon-reload, který mimo jiné spustí generátory znovu. Samozřejmě v případě disků se změny neprojeví na připojených discích, ale pouze u jednotek. Pokud bychom kupříkladu změnili připojení na pouze ke čtení, musíme oddíl odpojit a připojit, aby se změny projevily.

Obecná konfigurace systemd

Výchozí konfiguraci systemd mohou změnit nainstalované programy umístěním konfiguračního souboru do /usr/lib/systemd/system.conf.d/. Mechanismus přepisování funguje stejně jako v případě přepisu konfigurace jednotek v adresáři jmeno.d. Ještě vyšší prioritu pro konfiguraci má soubor /etc/systemd/system.conf, který je určen pro administrátora. Pokud chceme měnit konfiguraci uživatelského režimu (uživatelský režim je přepnut přepínačem --user), můžeme použít soubor /etc/systemd/user.conf. Možných umístění konfiguračních souborů je ještě více, podrobný popis může čtenář nalézt v  man systemd-system.conf.

Formát konfiguračního souboru je stejný jako ten u jednotek. Parametry nastavujeme v sekci Manager ve formátu na jednu řádku název=hodnota. Ukázkový soubor  /etc/systemd/system.conf:

[Manager]
DefaultTimeoutStartSec=10s
DefaultTimeoutStopSec=10s
DefaultEnvironment=machine=desktop

Níže je popis několika nejdůležitějších parametrů, ostatní jsou opět v manuálové stránce.

DefaultTimeoutStartSec, DefaultTimeoutStopSec
Nastavení maximální doby, po kterou se může jednotka aktivovat/deaktivovat. Poté bude příslušná činnost ukončena. Toto nastavení je možné změnit pro konkrétní službu volbou TimeoutStartSec, resp. TimeoutStopSec. Výchozí hodnota je 90s.
DefaultRestartSec
Prodleva mezi deaktivací a následnou aktivací při restartu jednotky. Výchozí 100ms.
DefaultEnvironment
Nastavení proměnných, které budou mít všechny jednotky. Hodnotou je seznam oddělený mezerami ve tvaru jmeno=promenna. Tedy např.  DefaultEnvironment="PROMENNA1=hodnota s mezerou" PR2=hodnota2
RuntimeWatchdogSec
Při použití této volby se při startu hardwarový watchdog (pokud je k dispozici na daném stroji) nastaví na stanovený interval. Systemd pak alespoň jednou za polovinu této doby watchdog kontaktuje. Pokud během intervalu ke kontaktu nedojde, watchdog restartuje počítače.
LogLevel
Nastavení úrovně logování. Hodnota může být buď číslo nebo jedna z hodnot: emerg, alert, crit, err, warning, notice, info, debug. Logovány budou všechny události, které mají alespoň takovou prioritu, jako je hodnota tohoto nastavení. Výchozí je info.

Doplňující konfigurace typů služba, socket, mount, swap

Pro tyto typy existuje ještě další konfigurace týkající se spouštění jednotek (uvedená v man systemd.exec). První je parametr WorkingDirectory. Hodnotou je absolutní cesta, popř. vlnka (~), která zastupuje domovský adresář uživatele, s jehož právy jednotka běží. S tím souvisí User a Group . Jejichž hodnotou je buď jméno, nebo ID. Pokud není určena skupina, použije se výchozí daného uživatele.

Volbou StandardInput můžeme nastavit, kam bude připojen file deskriptor 0 spuštěného procesu. Možné hodnoty jsou null, v tomto případě bude přesměrován do /dev/null. Pokud je služba spouštěna socketem a je nastaven právě jeden socket, můžeme nastavit StandardInput=socket a na stdin bude přesměrován tento socket. Příklad služby move2tmp.service z minula bychom tedy mohli napsat následovně:

move2tmp.service

[Service]
ExecStart=/bin/sh -c "cat >> /tmp/ab"
StandardInput=socket

move2tmp.socket

ListenFIFO=/tmp/socket

Pokud nastavíme parametr TTYPath, kde hodnotu je terminál. Můžeme standardní vstup nastavit na tty, tty-force, tty-fail, které v různých obměnách nastaví terminál z TTYPath jako stdin.

Co se týče StandardOutput a StandardError mimo výše zmíněných jsou možné hodnoty inherit, který jen přesměruje stdin na stdout. Hodnotami journal, syslog, kmsg můžeme nastavit výstup do logů journalctl, syslog, kmsg. Analogicky funguje i parametr StandardError.

Dalším zajímavým nastavením je parametr PrivateTmp. Když je nastavený na true, jednotka dostane připojený vlastní /tmp a /var/tmp, což se může hodit například při riziku kolize dočasných souborů. Pomocí parametrů ReadOnlyDirectories a InaccessibleDirectories můžeme specifikovat, které složky bude mít jednotka pouze pro čtení a které jí budou nedostupné. Nastavením ReadOnlyDirectories=/home/knezi tak zabráníme změně dat uživatele knezi.

widgety

Také je možné omezovat systémové zdroje jednotek. Např. parametrem MemoryLimit=2G nastavíme, že jednotka může alokovat maximálně 2 GB paměti RAM. Podobně CPUQuota=20% říká, že daná jednotka bude mít k dispozici maximálně dvacet procent procesorového času. Další typy omezení jsou v man systemd.resource-control  a jsou společné pro typy slice, scope, služba, socket, mount a swap.

Tím jsme probrali celou konfiguraci systemd. Příště si představíme některé nástroje (jako např. journal), které jsou součástí systemd.

Našli jste v článku chybu?
Lupa.cz: Cimrman má hry na YouTube i vlastní doodle

Cimrman má hry na YouTube i vlastní doodle

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

120na80.cz: Hrbatá prsa aneb mýty o implantátech

Hrbatá prsa aneb mýty o implantátech

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

Vitalia.cz: Tohle všechno se dá usušit

Tohle všechno se dá usušit

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

Vitalia.cz: Tradiční čínská medicína a rakovina

Tradiční čínská medicína a rakovina

Lupa.cz: Jak levné procesory změnily svět?

Jak levné procesory změnily svět?

DigiZone.cz: Regionální tele­vize CZ vysílá "Mapu úspěchu"

Regionální tele­vize CZ vysílá "Mapu úspěchu"

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Vitalia.cz: Vodárny varují: Ve vodě z kohoutku jsou bakterie

Vodárny varují: Ve vodě z kohoutku jsou bakterie

Podnikatel.cz: Vytvořte si web sami. Redakční systém Tumblr

Vytvořte si web sami. Redakční systém Tumblr

120na80.cz: Nejsilnější alergeny jsou pryč

Nejsilnější alergeny jsou pryč

Vitalia.cz: dTest odhalil ten nejlepší kečup

dTest odhalil ten nejlepší kečup

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: Nová vakcína proti chřipce se aplikuje nosem

Nová vakcína proti chřipce se aplikuje nosem

120na80.cz: Galerie: Čínští policisté testují českou minerálku

Galerie: Čínští policisté testují českou minerálku

DigiZone.cz: Budoucnost TV vysílání ve Visegrádu

Budoucnost TV vysílání ve Visegrádu