Projekt Gnome prešiel dlhou a turbulentnou cestou v open-source svete, plnou forkov, zásadných zmien a kontroverzie. Gnome je postavený na GTK widget toolkite. Widget toolkit je softvérová knižnica na tvorbu grafického rozhrania (GUI). GTK vznikol ako otvorenejšia alternatíva ku Qt, ktoré malo v tej dobe proprietárnu licenciu. Qt je ďalší widget toolkit, ktorý poháňa desktopové prostredie KDE (DE). Desktopové prostredie je súbor softvéru bežiaceho nad operačným systémom so spoločným GUI. GTK a Qt spolu tvoria stavebné bloky reprezentujúce väčšinu linuxových desktopových prostredí. Okrem Gnome existuje mnoho ďalších GTK prostredí. Gnome je však zďaleka najpoužívanejšie.

Teraz, keď máme nudné formality za sebou, poďme sa pustiť do toho zaujímavého. Dovolím si podeliť sa s tebou o kúsok svojej skúsenosti. Počas života som vyskúšal mnoho desktopových prostredí, začínajúc KDE na vtedy populárnom Mandriva Linuxe niekedy v roku 2001. Bol veľmi kompaktný, lebo som ho mal vypálený na mini CD, ktoré som mohol nosiť všade so sebou (USB kľúče sa na bootovanie Linuxu vtedy nepoužívali). Kdekoľvek bol počítač, bežal na ňom Windows 98, ME, 2000 alebo XP. Všetky vyžadovali heslo na prihlásenie. Otcovia samozrejme heslá s nami, deťmi, nezdieľali. Súbory však neboli zašifrované, takže na ich získanie stačilo vložiť CD, nabootovať a skopírovať, čo bolo treba. Naším najcennejším úlovkom z tejto vysoko nekalej aktivity bolo kopírovanie hier. Na zdĺhavé kopírovanie hry pri obmedzenom čase pri počítači, keď ťa otec pustí, nie je čas. Chceš hrať, keď môžeš. Kopírovať môžeš, kým sú otcovia ešte v práci a heslo majú so sebou.

Vtipná vec bola, že Mandriva nabootovaný z CD mal v sebe zabudovaný spaľovací softvér k3b, ale väčšina počítačov mala len jednu optickú mechaniku. Mal som 10 rokov a veľmi som sa bál vytiahnuť CD, kým bol systém nabootovaný z neho, až kým som to prvýkrát neskúsil. Naozaj sme chceli hrať Medal of Honor na inom počítači. Bol som skutočne prekvapený, keď systém nespadol, keď som vytiahol mini CD, aby som vložil prázdne CD na vypálenie hry. Život je pekný, keď si dieťa.

Rýchly presun do súčasnosti – KDE stále príležitostne rád používam, no momentálne mi ako každodenný systém slúži Gnome. Mám silný zmysel pre automatizáciu vecí a nastavovanie systému po čistej inštalácii je jedným zo spôsobov, ako túto vlastnosť uplatniť. Jedným zo spôsobov ukladania nastavení desktopového prostredia a programov na ňom je ukladanie tzv. dotfiles. Dotfiles sú ľudsky čitateľné konfiguračné súbory uložené v domovskom adresári. Začínajú znakom bodky, čo ich robí skrytými – odtiaľ aj názov.

Správca dotfiles #

Ako pri takmer každom softvéri, aj tu existuje viacero spôsobov, ako problém vyriešiť. Viem, že tuto vetu opakujem príliš často, ale je pravdivá. Vlastne verím, že je oveľa lepšie poznať viacero spôsobov riešenia problému, pretože ti to dáva možnosť overiť správnosť svojho riešenia.

Jedným populárnym spôsobom spravovania dotfiles je použiť bare repozitár. Je to veľmi dobré riešenie, na ktoré prisahá mnoho ľudí, pretože na fungovanie nepotrebuje nič iné len git a znalosť gitu.

Riešenie, ku ktorému sa dostanem, je v podstate ten istý bare repozitár, ale obalený niekoľkými vylepšeniami. Balíček sa jednoducho volá Yet Another Dotfiles Manager, yadm.

YADM tiež vyžaduje len znalosť gitu, stačí nahradiť príkaz git príkazom yadm:

yadm init
yadm add <important file>
yadm commit

Pozrime sa, ako spravovať konfiguračné súbory Gnome pomocou yadm.

Prístup ku konfigurácii Gnome #

Každý, kto tvorí softvér a chce, aby jeho konfiguračné súbory mohli používatelia upravovať, dbá na to, aby boli v ľudsky čitateľnom formáte. Bohužiaľ, v prípade Gnome dotfiles to tak z istých nešťastných dôvodov nie je. Nie sú uložené na vopred definovanom mieste, kde by sa dali priamo editovať. Najprv ich treba exportovať, alebo presnejšie vysypať (dump), až potom ich možno čítať a prípadne uložiť akoukoľvek technikou na správu dotfiles.

Slovo dump sa v softvérovom svete používa pre proces extrakcie všetkých informácií z jedného zdroja, zvyčajne nejakého pamäťového buffera. Na získanie dumpu všetkých nastavení Gnome spusti príkaz:

dconf dump / > gnome-settings.ini

Podotknem, že toto nie je dump v pôvodnom zmysle, pretože dconf je dostatočne inteligentný na to, aby vrátil len non-default, teda zmenené hodnoty. Môžeš tiež zadať len podmnožinu hodnôt, napríklad /org/gnome/desktop namiesto len /. Nás zaujíma uloženie všetkých nastavení na jednoduché načítanie na čerstvo nainštalovanom systéme, preto je vhodnejšie zostať pri /, teda roote. Pre úplnosť, takto aplikuješ nastavenia späť do systému:

dconf load / < gnome-settings.ini

Na to, aby yadm sledoval tvoje nastavenia, spusti nasledovné:

dconf dump / > gnome-settings.ini
yadm add gnome-settings.ini
yadm commit

Problémom tohto prístupu je, že to musíš urobiť pred každou aktualizáciou dotfiles manuálne. Tu prichádzajú vhod pokročilé funkcie yadm.

Git hooks #

Ak používaš git dostatočne dlho, pravdepodobne si narazil na funkciu nazývanú hooks. Hooks nie sú výsadou gitu, v skutočnosti sa tento termín bežne používa na označenie rutiny, ktorá sa automaticky vykoná pri splnení určitých podmienok. Git definuje dva prefixy pre hooks: pre-* a post-*, ktoré sa vykonajú pred danou udalosťou, resp. po nej. Dajú sa kombinovať s názvami git príkazov a tvoriť výstižné názvy hookov ako pre-commit alebo post-merge.

Jedným užitočným využitím git hookov je automatizácia. Keď raz hook nastavíš, nemusíš na neho myslieť. Náš problém s nastaveniami Gnome spočíva v tom, že vyžaduje tri manuálne kroky, aby si aktuálne nastavenia Gnome dostal do repozitára dotfiles, kde sú uložené a dostupné pre ďalšie stroje.

Prečo by som potreboval pokročilé funkcie správcu dotfiles, keď samotný git túto funkcionalitu už poskytuje, môžeš sa spýtať? Je to určite možné urobiť aj bez yadm alebo iného wrappera. Zdá sa, že príkazy hookov bare repozitára by vyžadovali premennú prostredia nazývanú GIT_WORK_TREE. Neskúšal som to, pretože som nenašiel žiadnu dobrú dokumentáciu na kľúčové slovo git bare repo hook. Pokojne to preskúmaj alebo zdokumentuj sám.

Pokročilé funkcie yadm #

Yadm na druhej strane má hooks ako plnohodnotnú funkciu. Dokumentácia yadm sa od dokumentácie git hookov líši v oddeľovači. Kým git používa pomlčku za prefixom, yadm používa podčiarkovník. Konkrétne, v gite definuješ hook pre-commit, zatiaľ čo v yadm ho píšeš ako pre_commit. Toto je dôležité mať na pamäti. Ak zistíš, že na žiadnom z nástrojov na tom nezáleží, daj mi vedieť.

Na automatizáciu procesu commitu nastavení Gnome vytvor súbor ~/.config/yadm/hooks/pre_commit a nezabudni ho urobiť spustiteľným:

#!/bin/bash

dconfFile="$HOME/.config/dconf/settings.ini"

dconf dump / > "$dconfFile"
yadm add "$dconfFile"

Umiestnenie dconfFile môžeš zmeniť podľa vlastného vkusu, ale ja ho rád nechávam niekde relevantnom, kde ho nevidím. Priame editovanie tohto súboru ti aj tak nijako nepomôže – pred každým commitom sa prepíše. Teraz manuálne zmeň nejaké nastavenia Gnome, napríklad klávesové skratky, a spusti yadm commit:

yadm commit

V staged zmenách uvidíš súbor s nastaveniami:

# Changes to be committed:
#   modified:   .config/dconf/settings.ini

Nič ti nebráni pridať ďalšie súbory pred commitom. Ak si nejaké už pridal, môžeš presunúť všetky sledované do staged pomocou

yadm add -u

Šikovný trik je pridať tento príkaz do nášho súboru pre_commit, čím sa všetky sledované súbory automaticky staged pred každým commitom. Takto môžeš dokonca spúšťať commit ako cron job, pričom tvojou jedinou zodpovednosťou bude pridávanie alebo odoberanie súborov zo sledovania! Pokojne si tieto dva riadky ukradni a vlož ich do svojho ~/.config/yadm/hooks/pre_commit:

#!/bin/bash

dconf dump / > "$HOME/.config/dconf/settings.ini"
yadm add -u

Nastavovanie systému #

Teraz, keď máme commitovanie vyriešené, zostáva už len zabezpečiť, aby sa nastavenia načítali do systému, keď bude treba. Na to využijeme ďalšiu pokročilú funkciu yadm nazývanú bootstrapping.

Bootstrapping je len iný, ozdobnejší názov pre ďalší spustiteľný skript. Keď yadm naklonuje tvoje dotfiles do čerstvého systému a nájde tvoj bootstrap skript, opýta sa, či ho chceš spustiť. To je všetko. Aby sme splnili náš cieľ, skript musí počas nastavovania načítať nastavenia Gnome späť do systému. Skript sa nachádza na ~/.config/yadm/bootstrap:

#!/bin/bash

dconf load / < "$HOME/.config/dconf/settings.ini"

Sem môžeš doplniť aj ďalšie príkazy podľa svojich potrieb. Veľa zábavy!