Instalace
Coda se skládá ze čtyř balíčků, které dostanete v některém z mirrorů. Jako první se musí nainstalovat knihovna lwp, kterou potřebují dvě další knihovny rpc2 a rvm. Dílo dovršíte přeložením vlastního balíku coda + následnou instalací client a/nebo server součásti. Mezi podporované operační systémy patří pouze Linux a NetBSD a zčásti Cygwin. Ostatním budete muset mírně domluvit; FreeBSD potřebuje pro úspěšnou kompilaci několik mnou přiložených patchů. Platformy podporované knihovnou lwp jsou v různém stádiu použitelnosti, funguje jen i386 a alpha. Podpora pro 64bitové platformy chybí úplně.
Kernel podpora
Tím však instalační trable nekončí. Coda client potřebuje i podporu v kernelu. Tato podpora by měla již být součástí kernelů výše zmíněných OS. Protože Coda6 potřebuje jinou kernel podporu než Coda5, najdete v balíku i jakési postarší patche pro netbsd 1.6, linux 2.4, freebsd4.8, na které bych moc nesázel. Lepší je upgradovat OS, a s tím získat i kernel level podporu pro Coda6 klienta.
Konfigurace serveru
Konfigurace distribuovaných filesystémů nebývá snadná. Většinou je navíc potřeba zprovoznit ještě kerbera. Coda však naštěstí Kerbera nevyžaduje, ačkoliv ho podporuje. Pro snadnější prvotní konfiguraci Cody vytvořili autoři několik shell scriptů, které mohu jen doporučit.
Hlavní konfigurační script se jmenuje vice-setup a hezky vás provede původní konfigurací serveru. Je to konfigurační wizard. Nevýhodou tohoto scriptu je, že neumí poupravovat stávající konfiguraci. Pokud si budete chtít server znovu nakonfigurovat, smažte předtím adresáře/vice a /vicep[a-z], aby se stará a nová konfigurace nepomíchaly. Server to nemá moc rád. Jedinou věcí, kterou budete chtít v /usr/local/etc/coda/server.conf doupravit, bude nastavení mapprivate=1.
Start serveru
Server se skládá z několika procesů, které je potřeba všechny spustit. V BSDlike OS je to bezproblémové, stačí spustit /usr/local/etc/rc.d/rc.vice start.
U systémů používajících init.d je potřeba spustit init.d scripty auth2.init update.init codasrv.init. Pokud nepůjde spustit update.init, je třeba vytvořit adresář /var/lock/subsys.
Pokud máte více než jeden server, je potřeba mít na všech serverech co nejpřesnější čas. Vlastně přesný být nemusí – shodný zcela postačí. Update client je na to velmi citlivý. Coda není AFS, kde vám může čas lítat až o pět minut a nic se neděje.
Vytvoření root svazku
První věcí, kterou je potřeba po startu serveru udělat, je vytvoření root svazku. Tento svazek není ničím zvláštní – pouze je jeho jméno zapsáno v souboru /vice/db/ROOTVOLUME. Svazek vytvoříme příkazemcreatevol_rep cat /vice/db/ROOTVOLUME
hostname -f
.
Konfigurace klienta
Konfigurace klienta je ještě jednodušší. Slouží k tomu script venus-setup, kterému zadáte jméno serveru a velikost cache jako parametry. Podobně jako u serveru můžete i u klienta aktivovat private mmap, což se provádí v /usr/local/etc/coda/venus.conf. Na rozdíl od serveru není tato změna tak znatelná, protože velikost RVM paměti klienta je zhruba o dva řády menší.
Konfigurace kernelu
Před spuštěním klienta je potřeba naládovat Coda modul do kernelu. Nepředpokládám, že by se vyskytovaly kernely s natvrdo zabudovanou podporou pro Codu. Dále je potřeba mít vytvořené device zařízení /dev/cfs0, čehož dosáhneme u systémů nepoužívajících devfs spuštěním ./MAKEDEV cfs v adresáři /etc. Ve FreeBSD 5 není potřeba s devfs nic dělat; Linux s devfs jsem netestoval, nikde totiž devfs kvůli problémovosti nepoužívám. Tím jsme s kernelem hotovi a můžeme začít.
Akce
Klient se spustí příkazem venus. Výsledek úspěšného startu by se měl projevit namountováním coda filesystému na /coda. V tomto adresáři nic neuvidíme, ale pokud máme vše správně nakonfigurováni, měli bychom se po provedení cd naše hostname dostat do root svazku.
Tento svazek je prázdný a nelze do něj nic zapisovat. Coda podporuje podobně jako AFS i anonymní klienty. Pokud chceme něco zapsat, je nutné se přihlásit. To se provádí příkazem clogin user@masina. Pokud nezvoráme heslo changeme, obdržíme od serveru token s platností 25 hodin. Nahamouněné tokeny vypisuje příkaz ctokens.
(hsn@ttyv2):/coda% ctokens Tokens held by the Cache Manager for hsn: @brave.dharma Coda user id: 1001 Expiration time: Sun Nov 21 19:42:47 2004 @sanatana.dharma Coda user id: 1001 Expiration time: Sun Nov 21 19:34:00 2004
I v případě, že nepoužíváte Kerberos, není nutné přihlašování na více strojů v jednom realmu. Odhlašování se provádí příkazem cunlog.
Správa uživatelů
Dalším krokem je vytváření uživatelských účtů v Coda databázi. Vzdálená administrace uživatelů se provádí pomocí příkazu au. Přesněji řečeno měla by se provádět, kdyby au fungovalo. Definice uživatelů a uživatelských skupin se nachází v souboru /vice/db/prot_users.cdb. Tento soubor je binární a edituje se na master serveru pomocí pdbtool. pdbtool funguje skvěle.
Problém je, že hesla nejsou v tomto souboru uložena. Jsou zašifrována v /vice/db/auth2.pw a vypadají takto:
1001 071a120b12161e45 admin user
1002 121d1f0044404120 # By 1001 at Sat Nov 20 19:58:34 2004
Po vytvoření uživatele příkazem pdbtool si zapamatujeme jeho id a vložíme další řádek do auth2.pw s nějakým zašifrovaným heslem. Pak již příkaz au cp zafunguje a heslo můžeme změnit.
brave:/# au cp Your Vice name: hsn Your password: RPC2_Bind() --> RPC2_SUCCESS User name: radim New password: vole132 AuthChangePasswd() --> AUTH_SUCCESS
Běžný uživatel si nemůže heslo měnit příkazem cpasswd, jelikož cpasswd také nefunguje. Stejně by to nikdo nedělal, protože Coda nepodporuje u hesel expiraci.
Přístupová práva
Coda nepoužívá unixová přístupová práva. V coda stromu si můžeme chmodovat a chownovat dle libosti, ale na funkci se to neprojeví. Coda navíc neimplementuje přístupová práva k souborům, práva lze přiřazovat pouze adresářům. Tato práva se přidělují příkazem cfs s argumentemsa – set attribute a la – list attribute.
Coda podporuje tato práva:
- r – Read – čtení libovolného souboru v adresáři
- l – Lookup – výpis adresáře
- i – Insert – vytváření souborů/adresářů
- d – Delete – mazání souborů/adresářů
- w – Write – zápis do souborů
- a – Administer – správa přístupových práv
Práva mohou být jak pozitivní, tak i negativní.
Mountování svazků
Svazky se v Coda filesystému mountují podobně jako svazky v Unixu. Narozdíl od Unixu cílový adresář nesmí existovat. Vlastní operace se provádí příkazem cfs mkmount adresář svazek. Tyto mounty si server zapamatuje, a není je proto třeba opakovat při opětovném spuštění klienta. Mountovat lze pochopitelně jen do stromu /coda/realm.
Na rozdíl od Unixu CODA server opravdu nemá rád, pokud mountujete jeden svazek na více míst. Lze to udělat, ale dějí se pak velmi divné věci.
Přidání dalšího serveru
Nic těžkého. Nainstalujte binárky na nový server obvyklým způsobem. Na master serveru přidejte hostname a pořadové číslo nového serveru do /vice/db/servers. Spusťe vice-setup, zadejte jméno master serveru a jeho update heslo. Po stažení systémové databáze nakonfigurujte ještě RVM a partition podobně jako na master serveru a vše je připraveno k provozu. Spusťe server a můžete začít vytvářet nebo replikovat svazky.
Replikace
Nejzajímavější věcí z Cody je server – server replikace. Vytvářet svazky již umíme. Replikované svazky se vytváří createvol_rep – uvedete jen více serverů a je to.
Již existující svazek zreplikujeme následujícím postupem:
- Pomocí příkazu volutil info jméno svazku zjistíme replicated groupId. To poznáme podle toho, že začíná 7f.
-
Na cílovém serveru vytvoříme svazek jméno.číslo repliky a se zjištěným replicated-volid.
volutil /vicep[a-z] jmeno.N zjistene cislo
- Zjistíme id nově vytvořeného svazku pomocí výpisu volutil getvolumelist. Bude začínat I
- Vydumpujeme si replikační tabulku do souboru pomocí volutil dumpvrdb /soubor.
-
Tabulka vypadá nějak takto
root 7f000000 1 1000001 0 0 0 0 0 0 0 0 repvol 7f000001 2 1000002 2000004 0 0 0 0 0 0 0
V našem případě chceme replikovat root svazek, takže přidáme do jeho seznamu místo další nuly id námi vytvořeného svazku 2000005 a zvýšíme počítadlo z 1 na 2.
- Tabulku odešleme na server pomocí volutil makevrdb /soubor
- Vygenerujeme nový adresář svazků pomocí bldvldb.sh
- Námi provedené změny se za pár minut zreplikují na ostatní uzly.
Zde bych poznamenal, že Coda provádí tzv. lazy replikaci. Data se budou kopírovat na druhý server, jen pokud k nim bude chtít někdo přistupovat. Pokud chcete vynutit překopírování celého svazku na nově přidaný server, udělejte v příslušném svazku ls -lR.