NetInfo (dokončení z minulého čísla)
O síti po síti podruhé
Seznámení se síťovou datbází NetInfo z minulého čísla Chipu dnes dokončujeme popisem některých standardních klíčů a adresářů NetInfa. Do NetInfa můžeme ukládat libovolné adresáře a v nich mohou být libovolné klíče podle potřeby. Řadu standardních hodnot však definuje a využívá sám systém NetInfo a některé standardní servery a aplikace Mac OS X; na některé z nich se podíváme blíž.

Klíč name
Každý adresář vyjma kořenového má klíč name; jeho hodnota je chápána jako jméno adresáře. Dobře je to vidět na obr. 2. Je vhodné si uvědomit, že sice každý adresář musí mít jméno, nic však nebrání tomu, aby měl jmen více: má-li hodnota name více hodnot, můžeme  prostě na jeden a tentýž adresář odkazovat více různými jmény.
Jméno adresáře samozřejmě má značný význam, protože slouží ke specifikaci adresáře pomocí cesty. V principu je možné pojmenovat více adresářů (jež jsou podřízeny společnému adresáři) stejně, takže cesta pak nebude jednoznačná: samozřejmě, rozhodně to nelze doporučovat, ale databázi NetInfo to nikterak nevadí. Pokud bychom to však udělali, budeme muset pro výběr takovýchto adresářů používat čísla ID.

Klíč master
Kořenový adresář každé domény sice nemá klíč name, namísto toho je však v něm klíč master, jehož hodnota odpovídá doméně, které adresář patří. Její forma je <jméno počítače>/<tag domény>.
NetInfo tento údaj využívá nejen pro orientaci v hierarchické struktuře domén, ale také pro určení hlavní domény a jejích případných klonů: jestliže doména leží na jiném počítači, než je <jméno počítače> z hodnoty master  kořenového adresáře, je považována za klon. Hodnoty v takové doméně jsou automaticky udržovány jako kopie hodnot z hlavní domény, klon je tedy vlastně jakými jejím “zrcadlem".
Klony v NetInfu slouží dvěma účelům. Za normálních okolností snižují provoz v síti, protože mohou údaje z domény předat počítačům, jež jsou k nim fyzicky blíž (z hlediska technické struktury sítě), snáze, než kdyby se počítače musely obracet přímo na hlavní doménu. Klony tedy zvyšují efektivitu sítě. (Jistě, platí se za to složitějšími změnami, protože každá změna hlavní domény musí proběhnout i ve všech jejích klonech; databáze se však mění poměrně málokdy, zato údaje se z ní čtou každou chvilku.)
Kromě toho může klon při výpadku počítače obsluhujícího hlavní doménu okamžitě přebrat jeho roli. Klony tak zároveň slouží jako automaticky udržované záložní kopie domén, a tak zvyšují spolehlivost sítě.

Adresář /machines a jeho podadresáře
Podadresáře v adresáři machines specifikují všechny počítače v síti; zde právě vzniká vazba mezi jménem počítače a jeho IP adresou (a dalšími atributy). Obvykle (ale ne nutně) obsahuje adresář machines záznamy pro všechny podřízené počítače – informace o nadřízených jsou uloženy v nadřízené doméně.
Záznamy navíc určují jména podřízených počítačů a domén. Adresář machines obvykle neměníme přímo v NetInfu, protože bývá pohodlnější použít služby specializované aplikace NetworkManager. Ty samozřejmě také nedělají nic jiného než změny údajů v adresáří machines, ale jsou pohodlnější a jsou lépe zabezpečeny proti chybě administrátora, než kdybychom přímo ručně nastavovali jednotlivé hodnoty.
Každý podadresář odpovídá počítači, který je podřízen dané doméně. Jméno adresáře je jménem počítače; má-li mít počítač více jmen, je prostě u klíče name uloženo víc hodnot – takový případ zrovna ilustruje obr. 3. Počítač next zároveň slouží jako mail server; proto je šikovné mu přidělit alias mailhost. Všechny obslužné scripty na všech počítačích v celé síti pak snadno mohou používat právě jméno mailhost a nebude zapotřebí je nijak měnit v případě, že konfiguaci sítě změníme a služby mail serveru přebere jiný počítač.
Zatímco klíč name určuje jméno počítače, klíč serves určuje jméno domény. Pro každou doménu, již daný počítač spravuje, je zde záznam ve formátu <jméno domény>/<tag domény> (je zřejmé, že pro určení domény stačí uvést tag – identifikace počítače je zbytečná, protože celý adresář právě identifikuje některý počítač). Jména domén se mohou lišit od jmen odpovídajících počítačů; pokud se však administrátor chce ve své síti vyznat, vřele mu to nedoporučuji.
Na první pohled může vypadat divně, že jméno domény (a počítače) není uloženo v ní, ale je určeno nadřízenou doménou. Připomeneme-li si však hierarchickou strukturu NetInfa a její vztah ke struktuře sítě, stane se to samozřejmým: jména všech počítačů podřízených dané doméně musejí být k dispozici všem ostatním počítačům téže domény – právě v ní tedy musí být definována. Například jméno počítače /praha/centrum/management/g4 musí být definováno v doméně management (nebo v některé z domén nadřízených); pokud by bylo určeno až v listové doméně local počítače g4, znal by toto jméno jen on sám (jak hned uvidíme, je tato možnost využita pro skutečně lokální jména localhost a broadcasthost).
Na místě jména domény může stát i "." nebo ".." – tím odkazujeme na aktuální nebo nadřízenou doménu (vzhledem k doméně, ve které je daný záznam /machines/xxx). Jména takových domén pak budou určena z domén nadřízených nebo implicitně jako "/" pro kořenovou doménu. Konkrétně tedy jméno domény s tagem network na počítači next není určeno: pokud by existovala nadřízená doména (na libovolném počítači), byl by v ní pro počítač next záznam serves s hodnotou <jméno>/network; tak by bylo této doméně přiřazeno jméno. Pokud nadřízená doména neexistuje, je tato doména kořenová a má standardní jméno "/". Podobně doména next s tagem local je podřízená doména domény na obrázku; v ní bude záznam serves obsahující ./local. Pokud by doména local na počítači next obsahovala i adresář reprezentující nadřízený počítač, byl by v něm záznam serves obsahující ../network.
Další klíče určují atributy daného počítače: klíč ip_address obsahuje internetovou adresu, jež je počítači přidělena, en_address obsahuje adresu ethernetové karty počítače a umožňuje tak identifikaci počítače po jeho připojení k síti (ethernetové adresy všech karet jsou unikátní).
Listové domény s tagy local, reprezentující konkrétní počítače, by teoreticky nemusely obsahovat adresář /machines vůbec. Z technických příčin však v nich tyto adresáře jsou a vždy obsahují dva standardní záznamy:
- localhost je alias daného počítače (protože je hodnotou serves=”./local" připojen k téže doméně, v níž je záznam). Určuje vždy pro počítač alternativní IP adresu 127.0.0.1. Je vhodné si uvědomit, že jelikož doména local je listovou doménou, jejíž údaje jsou při vyhledávání k dispozici jen tomu kterému počítači, bude pro každý počítač jméno localhost a adresa 127.0.0.1 znamenat něco jiného – totiž sebe samé. To je samozřejmě přesně to, co jsme potřebovali;
- broadcasthost je díky hodnotě serves="../network" aliasem nadřízeného počítače. Kromě jména je mu přidělena alternativní IP adresa 255.255.255.255; je tedy zřejmé, že jeho účelem je umožnit rozesílání paketů po celé subsíti.

Adresáře /users, /groups a jejich podadresáře
V adresáři users jsou uloženy záznamy o uživatelských kontech. Každý z jeho podadresářů reprezentuje jedno konto; jeho klíče a jejich hodnoty určují konkrétní atributy toho kterého uživatele. Příklad vidíme na obr. 4, který ukazuje obsah adresáře /users/ocs.
Snad právě na uživatelských kontech v adresářích users je nejlépe vidět výhoda hierarchické organizace databáze NetInfo: v praxi je zcela běžné, že potřebujeme řadu uživatelských kont s různým rozsahem: některá konta musí být k dispozici prostřednictvím kteréhokoli počítače v síti, jiná by měla být dosažitelná přes kterýkoli počítač v rámci nějaké subsítě (třeba management), ale už ne ze subsítí ostatních. Jindy naopak pro některé specifické účely potřebujeme uživatelská konta vázaná na jediný konkrétní počítač.
V rámci hierarchie domén NetInfa není nic jednoduššího: uživatelské konto definované v kořenové doméně bude samozřejmě přístupné kdekoli v celé síti. Konta určená pro subsítě definujeme v odpovídajících mezilehlých doménách. Cheme-li konto lokální na tom kterém počítači, prostě jej definujeme v adresáři users jeho lokální domény. Takové konto pak nebude viditelné nikde jinde (nebo může mít třeba každý počítač stejně pojmenované lokální konto s odlišnými atributy, pokud bychom něco takového potřebovali – stejně jako každý počítač zná stroj localhost, ale pokaždé to je někdo jiný).
Využíváme-li síťové uživatele, je třeba se také postarat o to, aby jejich domovský adresář byl k dispozici všude, kde je přístupné samo konto. K tomu slouží systém sdílení souborů NFS (pro Mac OS X je příznačné, že jde o standard, ne o proprietární řešení) a adresáře exports a mounts, na které se podíváme za chvilku.
Analogicky jako uživatelská konta v adresářích users jsou definovány skupiny v adresářích groups; součástí definice skupiny je také seznam všech uživatelů, kteří do ní patří (naopak položka gid v adresáři reprezentujícím uživatelské konto určuje defaultní skupinu, přidělovanou nově vytvořeným složkám a souborům, nevyžádá-li si uživatel změnu).
Podobně jako u adresáře machines i pro práci s adresáři users a groups bývá pohodlnější použít služby specializované aplikace NetworkManager.

Adresáře /exports a /mounts a jejich podadresáře
Poslední ze standardních adresářů, o nichž se zmíním, jsou adresáře exports a mounts. Ty jsou oba využívány systémem NFS pro sdílení souborů; zatímco adresář exports obsahuje záznamy o adresářích, jež mají být k dispozici ostatním počítačům, v adresáři mounts naopak nalezneme údaje o tom, který z adresářů dostupných v síti se má zpřístupnit a na které místo v systému souborů se má “namontovat" (Mac OS X a jeho NFS samozřejmě umožňují umístit vzdálený adresář kamkoli v systému souborů, nejen na speciální místo, jako je tomu v systémech typu Windows).
Pozornému čtenáři již bude zřejmé, že záznamy exports bývají v lokálních doménách konkrétních počítačů: samozřejmě, obvykle chceme exportovat konkrétní adresář z konkrétního stroje, a ne “adresář /xyz ze všech počítačů v subsíti". Naopak, záznamy mounts bývají spíše v doménách na vyšší úrovni: adresáře obvykle chceme zpřístupnit všem počítačům v subsíti, nejen jednomu konkrétnímu.
Adresáře mounts a exports umějí opět s vysokým uživatelským luxusem editovat aplikace NetworkManager; je proto šikovnější využít jejich služeb, a ne údaje v těchto adresářích měnit přímo.

Práce s databází NetInfo
Implicitně pracuje s databází NetInfo spousta aplikací a programů: měníme-li například atributy sítě prostřednictvím odpovídajícího řídicího panelu, ukládáme data do NetInfa; řada služeb a programů čte z NetInfa údaje (např. ovladače NFS právě v něm vyhledají seznamy importovaných a exportovaných adresářů). Navíc je k dispozici několik prostředků právě pro editaci NetInfa.
Specializované aplikace
Součástí Mac OS X je několik specializovaných aplikací, jež sice jsou de facto editory databáze NetInfo, ale jejich uživatelské rozhraní je formováno pro pohodlné řešení konkrétního problému. Typickým příkladem je již zmíněný NetworkManager, který nabízí velmi pohodlné rozhraní mj. pro
- definování uživatelských kont a skupin;
- přidávání a odebírání počítačů;
- specifikaci sdílení souborů.
Administrátor přitom nepotřebuje vědět prakticky nic o nějakých adresářích users, groups, machines či exports nebo mounts ani o jejich hodnotách. Stačí mu základní povědomí o doménách NetInfa (protože NetworkManager umožňuje specifikovat doménu, v jejímž rámci změny provede), a vše ostatní je již zcela intuitivní.
Jinou podobnou aplikací je Assistant, který provede administrátora kompletním nastavením systému, nebo PrintManager, který se specializuje na editaci dat NetInfa popisujících sdílené tiskárny.
Pokud je pro daný úkol k dispozici specializovaná aplikace, vždy se ji vyplatí využít: je to pohodlnější, šetří to čas, a navíc je to bezpečnější – specializované aplikace automaticky brání tomu, aby v NetInfu vznikla významná nekonzistence.
NetInfoManager
Samozřejmě že někdy skutečně potřebujeme NetInfo editovat přímo. K tomu slouží aplikace NetInfoManager, již nalezneme ve standardní složce /System/Administration nebo v Apple menu ve skupině Server Administration. V této aplikaci si můžeme vyžádat otevření kterékoli domény v okně, obdobném těm, jež jsme viděli na minulých obrázcích; doménu přitom můžeme určit kterýmkoli způsobem (pomocí cesty nebo adresy počítače a tagu). Uvnitř oken je k dispozici hierarchický pohled na všechny adresáře v doméně, a zvolíme-li kterýkoli z nich, můžeme v dolní části okna editovat jeho klíče a hodnoty.
Pro běžné práce s databází NetInfo si NetInfoManager sám vyžádá vložení hesel podle potřeby. Pokud jej však rovnou spustíme v rámci administrátorského konta, nabídne navíc silnou (a potenciálně, samozřejmě, nebezpečnou) sadu služeb pro úpravy samotné hiearchie domén NetInfa. Využití těchto služeb je pochopitelně opět mnohem pohodlnější a bezpečnější než přímá editace údajů serves v adresářích /machines jednotlivých domén.
Řádkové programy
Cheme-li NetInfo upravovat ručně, je ideální využít buď specializované aplikace, nebo NetInfoManager. Administrátor však může občas potřebovat některé práce s databází automatizovat; k tomu se ideálně hodí skripty. Abychom z nich mohli pracovat s NetInfem, potřebujeme řádkové programy, jež nabízejí obdobné služby jako NetInfoManager.
Mac OS X je rozumně navržený systém, a proto zcela samozřejmě takové programy nabízí. Jejich podrobný popis by přesáhl možnosti tohoto článku, alespoň stručně se s nimi ale seznámíme:
- nifind dokáže vyhledat v hiearachii domén požadovaný adresář;
- nigrep umí hledat dokonce regulární výrazy v libovolném textu v NetInfu;
- nireport vypisuje obsah tabulek;
- nidump a niload vypíše/změní obsah NetInfa; oba jsou určeny například pro spolupráci s jinými adresářovými službami, kdy je zapotřebí automaticky přenášet údaje mezi NetInfem a třeba Novellem;
- niutil dokáže vše ostatní.
Ondřej Čada