Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
Nejprve se pojďme podívat, jak se vlastně dnes zavádí takový typický linuxový systém. Předpokládáme, že používá init systém odvozený z Unix System V, čili
sysvinit. Po startu počítače, init ramdisku a jádra je prvním spuštěným procesem /sbin/init
. Ten otevře rouru /dev/initctl
, která slouží pro komunikaci s démonem, a hlavně zpracuje soubor /etc/inittab
.
Zjistí výchozí úroveň běhu
# The default runlevel. id:2:initdefault:
Jméno skriptu spouštěného pouze jednou na úplném začátku zavádění
# Boot-time system configuration/initialization script. # This is run first except when booting in emergency (-b) mode. si::sysinit:/etc/init.d/rcS
Co spustit při přechodu na jinou úroveň běhu
l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 ...
Co dělat při stisku Ctrl Alt Delete
# What to do when CTRL-ALT-DEL is pressed. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
Definice virtuálních terminálů
1:2345:respawn:/sbin/getty 38400 tty1 2:23:respawn:/sbin/getty 38400 tty2 3:23:respawn:/sbin/getty 38400 tty3 ...
A jiné akce, například reakce na zprávu od systému napájení.
Syntaxe záznamů je docela jednoduchá
id:runlevels:action:process
kde id
je až čtyřznakový unikátní identifikátor daného záznamu. Nijak nezbytná
položka, ale některé prastaré programy mohou očekávat stejné id
jako číslo
virtuálního terminálu, takže záznam pro tty8
by měl mít id
8.
runlevels - úrovně běhu - definuje, pro které úrovně běhu má být daný řádek
vykonáván. Může být uvedena žádná (pro rc.S
), jedna, nebo více.
action specifikuje akci, která má být vykonána. Podporované jsou respawn
-
opětovné spuštění procesu, pokud skončí, wait
- spuštěn jednou při vstupu do
dané úrovně, init počká na jeho dokončení, once
- značí spuštění bez čekání a
podobně. Podrobnosti jsou v man 5 inittabs
.
process určuje spustitelný soubor, který má být spuštěn.
A to je vše, co sysvinit dělá - spouští procesy na základě zadaných podmínek,
kterými mohou být změna úrovně běhu, ukončení procesu (v případě respawn
) a
podobně. Vlastní logika zavádění je potom povětšinou vtělena do shellových
skriptů, typicky v adresáři /etc/init.d
.
Pořadí spouštění init skriptů je důležité - například prakticky jakýkoli démon
potřebuje spuštěný syslog
, je dobré připojit /usr
dříve, než se z něj něco
hodlá spustit a podobně.
System V init to řeší adresáři /etc/rc$úroveň.d/
, které obsahují symbolické
odkazy init skriptů. Jejich jméno odpovídá vzoru
[SK][pořadí]název
První znak S
značí, že se má daná služba nastartovat (/etc/init.d/foo
start
), znak K
označuje zabití (/etc/init.d/foo stop
). Část pořadí je
dvojciferné číslo označující kdy se daný skript spustí. A následuje samotné
jméno skriptu, které nenese žádnou informaci, ale trochu zlepšuje čitelnost
výpisu adresáře.Tak například S10sysklogd
znamená startuj syslogd
s pořadím
10, což znamená, že pouze skripty S09xxx
a nižší by se spustily před
syslogd
.
Otázkou je, jak vlastně čísla zjistit? V pradávných dobách, kdy muži byli muži a
počet démonů spouštěný na takovém typickém unixovém systému byl nepatrný, stačila
statická alokace (podrobnost se statickým /dev
není náhodná). V dnešních
dobách, kdy muži pravděpodobně vyhynuli a počet démonů narostl (podobnost čistě
náhodná), stejně jako závislosti mezi nimi, si se statickou alokací nevystačíme.
Standard LSB definuje hlavičku init skriptu, který obsahuje i systém závislostí. Hlavička má podobu komentáře na začátku každého init skriptu:
### BEGIN INIT INFO # Provides: foo # Required-Start: $syslog $remote_fs # Required-Stop: $syslog $remote_fs # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start foo daemons ### END INIT INFO
Příklad hypotetického démona foo
, který vyžaduje mít spuštěný syslogd
a
připojené vzdálené souborové systémy. Což může být i /usr
, pokud provozujeme
vzdálenou instalaci přes nfs. Jako volitelnou závislost vyžaduje named
démona.
Pokud totiž není v systému nainstalován syslogd
, instalace init skriptu skončí
chybou. Pokud chybí named
, chyba se nevyvolá a skript se nainstaluje (vytvoří
se příslušné odkazy v rc.d
adresářích).
Init systém BSD byl koncipován jinak. Hlavní slovo měl jeden velký /etc/rc
skript. Výhodou byla jednoduchost a přehlednost, kterou adresáře rc.d
System V
unixu nemají. Nicméně křehkost tohoto řešení nakonec vedla k rozdělení na
jednotlivé init skripty a dokonce byl přidán příkaz rcorder
řešící pořadí
spouštění. Některé linuxové distribuce (Gentoo, Arch Linux) používají init
systém odvozený z BSD.
Klasický init systém trpí mnoha problémy. Ve snaze vyřešit alespoň ty, které
považovali tvůrci alternativního systému za nejvíce palčivé, bylo vytvořeno
mnoho náhrad od initng
, přes upstart
až po poměrně ezoterický twsinit
částečně napsaný v assembleru.
Náhrada klasického systému sysvinit. Hlavním rozdílem je fakt, že tento systém spouští služby paralelně hned, jak jsou splněny jejich závislosti, tudíž zabraňuje zbytečným prodlevám sériového spouštění úloh. Ovšem žádná z hlavních distribucí jej nikdy neadaptovala, ačkoli existuje jako alternativa pro mnoho distribucí.
Další alternativa k sysvinit - podporuje několik unixových platforem, podporuje
řešení závislostí. Odstraňuje koncept runlevelů a zavádí pojem stage - první je
bootovací fáze (obdoba rc.S
), druhá startuje uživatelské procesy a poslední je
ukončovací. Existuje jako alternativa pro mnoho distribucí, nicméně podobně jako initng
nebylo žádnou významnou adaptováno.
Princip fungování systému upstart je zcela odlišný od sysvinit i všech alternativ (které jsou obvykle sysvinit a něco navíc). Hlavní odlišností je systém založený na událostech. Upstart sleduje mnoho událostí - jako spuštění, ukončení procesu, nastavení síťového rozhraní, připojení, odpojení disku a podobně.
Pořadí spouštění je definováno těmito událostmi: pokud se objeví událost
syslog-started
, spouští se ostatní démoni, kteří potom emitují
vlastní události démon-started
, na které pak reagují další jednotky.
Mezi další zajímavosti patří deklarativní zápis "init skrptů" a zpětná
kompatibilita se skripty sysvinit. Z principu jeho fungování plyne, že dokáže
sledovat stav procesu a dokonce by měl umět nahradit i letité unixové služby
jako cron
. Jako jediná z alternativ se významněji rozšířil i do ostatních
distribucí - z mateřského Ubuntu se propracoval přes Fedoru do RHEL 6, do WebOS,
Maemo/Moblin/Meego nebo ChromeOS.
Zásadní výhoda takového systému je jednoduchost.
Ačkoli zrovna s tím by vývojáři BSD nesouhlasili, tak klasický init je velice
jednoduchý - na mém systému má binárka /sbin/init
velikost 32 kB. Pro
zajímavost /sbin/udevd
má 48 kB, /bin/true
12 kB. Navíc, většina logiky init
systému je zabudována ve skriptech, protože init systém jako takový reaguje na
události výhradně spuštěním nějakého procesu. Právě používání skriptů dává
systému netušenou flexibilitu, protože programem je možné vyjádřit více, nežli
deklarativním zápisem.
Unixový démon se chová jinak než klasická aplikace, která běží na popředí terminálu a ukončení rodičovského procesu vede k jeho smrti. Naproti tomu démon běží jako by na pozadí a ukončení procesu, který jej spustil, na něj nemá vliv. To značí, že programování démona se musí lišit od klasické aplikace, což vývoj démonu poměrně komplikuje, a proto má většina možnost být spuštěn na popředí - tedy ne v režimu démona, což je velice užitečné pro ladění.
Proč je to nevýhoda sysvinit? Protože nijak nepomáhá psaní takových aplikací a namísto toho spoléhá na to, že autoři budou používat magii jako double-forking a podobně.
Ačkoli na jedné straně dává používání skriptů celému systému značnou flexibilitu, na straně druhé je právě tento přístup koulí na noze. Init skripty se, jak jejich název napovídá, píší v shellu. Jejich úloha je ve většine případů stejná - zkontrolovat parametr, s ním je skript spuštěn a provést zadanou akci - spuštění, restart, zastavení, či zjistit stav příslušného démona. Rovněž se starají o vytváření pid souborů s PID spuštěného démona a podobně.
Nevýhoda tohto přístupu - duplikace kódu - ačkoli drtivá většina skriptů dělá to stejné, jejich tvorba začíná kopií šablony, do níž se dopíší cesta k binárnímu souboru a jméno a skupina, pod kterou má být démon spuštěn. Tento postup je nepřehledný, náchylný k chybám a navíc jsou skripty pro každou distribuci trošku jiné - pro upstream je prakticky nemožné napsat dobrý init skript.
Klasický init spouští skripty jeden po druhém. To pochopitelně zjednodušuje celý proces z hlediska implementace, na druhou stranu způsobuje, že systém většinu času čeká. Paralelní spouštění umožňuje využívat systém na maximum a odstraňuje čekání.
Jediným způsobem, kterak v sysvinit spustit službu, je spustit příslušný init
skript. Služba se spouští, přestože v danou chvíli neexistuje žádost, kterou by
mohla zpracovat. Jako řešení tohoto problému byl vytvořen démon (x)inetd
,
který dokáže spouštět služby až v okamžiku, kdy existuje žádost o její použití.
Přestože samotný init umí sledovat procesy, dělá to pouze u procesů z
/etc/inittab
. Ovšem dobrý init systém by měl umět reagovat i na jednotlivé
služby a v nejlepším případě i na události v systému.
V dávných dobách, kdy unixové stroje byly výhradně dlouhodobě běžící servery, častokrát zazdívané při stavebních úpravách do zdí, nebyla doba spouštění nijak významným parametrem. V současné době, kdy se distribuce Linuxu objevují na všem od Top500 serverů, přes chytré telefony až po běžné desktopy, je doba startu takové distribuce parametrem významným.
Většina zrychlování doby zavádění implementuje paralelní spouštění, někde se
nahrazuje /bin/bash
za odlehčenější dash
, jinde dokonce mají deklarativní
syntaxi a většinou se uživatelům doporučuje vypínat služby, které nezbytně
nepotřebuje.
Přestože určitá část komunity zůstává k podobným snahám skeptická a poukazují buď na fakt, že doba startu je zlomkem doby strávené samotnou prací, či na rychlost probouzení po uspávání, skutečností je, že doba startu je významným generátorem blogpostů, článků na Phoronixu, Twitter zpráv a podobně. A typickou první otázkou u každého nového init systému je - o kolik startuje systém rychleji než se sysvinit.
V tomto článku jsme si rozebrali klasický sysvinit, jak funguje, co
je /etc/inittab
. Také známe jeho výhody, nevýhody, populární (linuxové, jinak
by sem patřil i launchd
a SMF
pro Solaris) alternativy k němu, a taky fakt,
že lidé zbožňují měření čísel a jejich následné porovnávání, a to v libovolné
oblasti.
V příští části si představíme myšlenky Lennarta Poetteringa, autora démona systemd. Dozvíme se o tom, proč paralelní spouštění služeb nefunguje a co všechno by měl ideální init démon umět.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
System V init je jenom /sbin/init, který projde /etc/inittab a podle jeho obsahu spustí skripty (případně je znovu nastartuje, když umřou). Tím veškerá práce initu končí (vyjma sledování signálů nebo /dev/initctl).
Dále popisovaný systém skriptů v /etc/init.d/* a /etc/rc* s jejich krkolomným pojmenováním je již čistě linuxová konvence. Init se o tohle vůbec nezajímá.
V Gentoo, mám dojem, je stále výchozí System V init, pouze systém skriptů a jejich konfigurace jsou inspirovány (Free?)BSD. Ostatně si stačí vypsat soubory, které sys-apps/sysvinit vlastní.
Nicméně Gentoo s novým sys-apps/baselayout-2 směřuje k jinému systému OpenRC, který je skutečně vyvíjen a používán i na FreeBSD a NetBSD a který nabízí interpreter vlastních init skriptů /sbin/runscript, nabízí řízení podle událostí (například připojení síťového zařízení) a tak dále.
Jednotlivé úkoly jsou ale stále odděleny od /sbin/init (35 040 B na x86), takže když se něco rozbije, tak se jedná jen o omezenou oblast, kterou je snadno možné najít. To se bohužel nedá říci o SystemD, který se snaží řešit vše na jednom místě, ale nic z toho (zatím) nedělá pořádně.
Na to ze ma jit o ciste linuxovou konveci je zvlastni ze se s tim clovek setkava i u Solarisu, resp. SunOSu, ktery ma klasicky SysV init a nerekl bych ze kopiroval od Linuxu.Dále popisovaný systém skriptů v /etc/init.d/* a /etc/rc* s jejich krkolomným pojmenováním je již čistě linuxová konvence. Init se o tohle vůbec nezajímá.
Tohle zcela určitě linuxová konvence není. S tímto jsem se setkával už na SVR před dvaceti lety.Dále popisovaný systém skriptů v /etc/init.d/* a /etc/rc* s jejich krkolomným pojmenováním je již čistě linuxová konvence. Init se o tohle vůbec nezajímá.
Gentoo je založené na BSD init? Bez ironie či jiných postranních úmyslů.No měl jsem zmínit, že se jedná spíše o layout skriptů a adresářů, který je systémem BSD inspirován.
podporuje řešení závislostíŠlo by othle nějak rozvést? Pokud vím, tak jediná podpora závislostí, kterou má runit, je "spouštěcí skript služby si sám zkontroluje, jestli jsou všechny závislosti dostupné"
U alternativ naprosto chybí jakákoliv zmínka o SMF.
<rejp> žádného démona neznám , vale jen "daemony" </rejp>