Plan 9

A Unix/Linux szerverek üzemeltetése wikiből

A Plan 9 from Bell Labs - röviden Plan 9 - kezdetben egy kísérleti operációs rendszer volt, melyet a UNIX folytatásának szántak. A Unix alapvető filozófiáját viszi tovább utópisztikus szintekre. Nevét Ed Wood Plan 9 from Outer Space című sci-fi filmjéről kapta. A Plan 9 kabalafigurája, Glenda is egy Ed Wood filmből származik. A rendszert kutatók és önkéntesek máig fejlesztik, rendszeresen jönnek ki új verziók. Naprakészségét mi sem támasztja alá jobban annál, hogy már a népszerű Raspberry PI platformot is támogatja. Unix és Linux kompatibilitási modulokat írnak hozzá, fejlesztik a hardvertámogatását, illetve folyamatosan kerülnek át belőle ötletek népszerűbb operációs rendszerekbe.

Tartalomjegyzék

1 Története

Ugyanaz a Computing Science Research Center at Bell Labs nevű csoport fejlesztette eredetileg, akik a Unixot és a C-t kifejlesztették, többek között Ken Thompson, Dennis Ritchie, Brian Kernighan és Bjarne Stroustrup. A fejlesztés a 80-as évek közepén kezdődött, és 92-re készült el az első kiadás egyetemek számára. Később megélt egy kereskedelmi kiadást, a további verziókat pedig nyílt forrással adták ki. Az utolsó verziót 2002-ben adták ki, de azóta is fejlesztik, és jönnek hozzá frissítések.

2 Alapvető irányelvek

A Plan 9-et úgy tervezték, hogy legyen “unixabb a Unixnál”, tehát a Unix elveit fejlesztették tovább. A visszafelé kompatibilitást nem tartották szem előtt, sem a korábbi konvenciókat, csak az elveik alapján folyt a tervezés. A következőben az Eric S Raymond - The Art of Unix Programming című könyvében található alapvető Unix filozófiai szabályai közül hozok néhány példát.

2.1 Minden objektum fájl vagy fájlrendszer

  • Rule of Separation: Separate policy from mechanism; separate interfaces from engines.
  • Rule of Simplicity: Design for simplicity; add complexity only where you must.
  • Rule of Transparency: Design for visibility to make inspection and debugging easier.

Plan 9-ben fájlokon keresztül lehet elérni a rendszer összes funkcióját, jelenthetnek ablakokat, hálózati kapcsolatokat, processzeket és bármi mást, amit a rendszerben el lehet érni. A fájlokat névtereken keresztül lehet elérni. Egy névtérbe több helyről lehet fájlokat gyűjteni, létre lehet hozni mappák unióját(union directory). A processzeknek saját névtereik vannak, melyekben átlátszóan történik a távoli és helyi erőforrások elérése. A kernel processzenként külön mount táblát is tarthat fenn, így minden processz saját névtérrel/fájlrendszerrel dolgozhat. A felhasználó így egyszerre dolgozhat olyan programokkal, melyek más fájlrendszert látnak, így akár chroot szerű sandboxokat is létre lehet hozni a processzeknek.

2.2 9P (9P2000)

  • Rule of Modularity: Write simple parts connected by clean interfaces.
  • Rule of Clarity: Clarity is better than cleverness.
  • Rule of Composition: Design programs to be connected to other programs.
  • Rule of Least Surprise: In interface design, always do the least surprising thing.
  • Rule of Representation: Fold knowledge into data so program logic can be stupid and robust.[4]

A 9P - és az újabb verziója a 9P2000 - hálózati protokoll, melyet a Plan 9 komponenseinek összekapcsolására hoztak létre. Ezzel csökkentették a Plan 9-ben az API-k számát, mivel a Plan 9 összes lehetséges interfészt 9P-ben implementálták. A protokoll szerver-kliens alapon működik, processzeket, programokat és adatot köt össze, illetve a így kötődnek a programok a felhasználói felülethez is. Mivel hálózati protokoll, transzparensen lehet a szerver és a kliens más gépen, így téve a Plan 9-t grid operációs rendszerré. A programok nem használhatnak socketeket és ioctl hívásokat. Az eszközmeghajtóknak is fájlként van implementálva az interfészük, így a 9P protokollon keresztül elérhetők, és megoszthatók, akár a hálózatban is. Ezen irányelvek következményeként a rendszerben szinte mindent el lehet végezni ls, cat, grep, cp, rm és a shell műveleteivel, anélkül, hogy tudnánk az adott erőforrásról, hogy melyik gépen van.

2.3 /proc

A proc fájlrendszeren a korábban említett elvek érvényesülnek. A processzek mappaként jelennek meg, ezekben vezérlő és információt hordozó fájlok vannak, melyeket egyszerű fájlműveletekkel lehet vezérelni. Ezzel a módszerrel nagyon megkönnyíti a processzek menedzselését, és még egy API-t megspórol. A módszer annyira bevált, hogy innen vette át később a módszert a BSD, a Solaris és a Linux is, bár nem ilyen mélységben. Jó példa a fájl szintű hozzáférésre, hogy a Plan 9 rendszerben a kill parancs nem öli meg a processzt, mivel szignált fájlműveletekkel kell küldeni. A kill parancs régi Unix felhasználók segítségére van, és csak kiírja, hogy mit kell beírni a parancssorba, hogy az általunk kijelölt szogláltatások megkapják a szignált.

2.4 /net

Rendszerhívások és ioctls-ek nélkül a hálózati réteg is fájlrendszer alapon működik, a /net fájlrendszer használatával. Vezérlő fájlokba lehet írni és olvasni, így valósul meg a hálózati kommunikáció. Külön tcp és udp mappák vannak a kapcsolatok protokoll szerinti szétválasztására. A rendszer hálózati információit az ndb nevű fájl alapú adatbázisban tárolja.

2.5 Unicode

Hogy tovább csökkentsék a rendszer komplikáltságát, a teljes rendszerben bevezették az Unicode karakterkódolást. Ken Thompson dolgozta ki az UTF-8-at, és ez lett a natív karakterkódolást a teljes rendszerben. Innen terjedt el az UTF-8 a többi operációs rendszerre is.

“Plan 9 failed simply because it fell short of being a compelling enough improvement on Unix to displace its ancestor. Compared to Plan 9, Unix creaks and clanks and has obvious rust spots, but it gets the job done well enough to hold its position. There is a lesson here for ambitious system architects: the most dangerous enemy of a better solution is an existing codebase that is just good enough.” —Eric S. Raymond

2.6 Az alapelvek felhasználása

Az említett alapelvek betartása nem feltétlenül jelent korlátozást, hiszen egyszerűbb, atomibb elemekből sokkal könnyebben építhetünk bonyolultabb dolgokat, illetve bonyolultabb dolgok valósíthatók meg így egyszerűbben. Ha például egy Plan 9-et futtató gépnek van internet elérése, más gépekkel pedig egy hálózatban van, akkor azokon a gépeken 9P protokoll segítségével union directory-t csinálunk a /net fájlrendszereikből, így lehetőség nyílik új kapcsolatokat nyitni arról a gépről az internet felé. Ezzel a megoldással NAT-tal ekvivalens működést valósítunk meg. Nagyon különleges, hogy a hálózati rétegek kapcsolata itt is fájl szintű, és transzparensen működik, így olyan a NAT-oló gépen kapcsolatot nyitni, mintha lokális gépen lenne. Ha például az interneten keresztül több gépet kapcsolunk össze a biztonságossá tett 9P protokollal, és a /net fájlrendszereket Union fájlrendszerként összevonjuk, akkor VPN szerű működést valósítunk meg. A /proc fájlrendszer közösítésével elosztott számítási felhőt lehet létrehozni. A lehetőségek száma korlátlan.

2.7 Elosztott rendszer

A Plan 9 erőssége abban rejlik, hogy a 9P protokoll használata miatt könnyen tudunk belőle elosztott rendszert készíteni. A tervezéskor már elosztott rendszerben gondolkodtak a fejlesztők, így 3 alapvető szerepkört tud egy gép felvenni, lehet CPU szerver, autentikációs szerver és terminál. Több CPU szerver is lehet, és több terminál is csatlakozhat.

3 Felhasználói felület

A Unix-al ellentétben a Plan 9 grafikus felületre van tervezve. Rendelkezik csak szöveges terminállal is, de a funkcionalitása lényegesen gyengébb. A grafikus felület a rio nevű ablakkezelőt használja. Az ablakok kezdetben az rc nevű shell-t futtatják, a később itt futtatott grafikus programok átveszik az ablakot.

rc
A Plan 9 parancssora, a UNIX 10-es verziójából származik. Hasonlít a bourne shellre, de egyszerűbb szintaxissal.
rio
A Plan 9 ablakkezelője. Jellegzetessége, az alkalmazások számára teljesen átlátszó. Minden ablak saját namespace-ben fut, és a rio és csak egy namespace-t kap az operációs rendszertől, így nincs akadálya, hogy rio-kat ágyazzunk egymásba. Mivel a 9P protokollt használja, hálózaton keresztül is teljesen átlátszóan működtethető. Az ablakok is szövegesek, és minden sorukba lehet írni.
plumb és plumber
A plumbing mechanizmus a Plan 9 rendszerben a processzek közti kommunikációban az üzenetek kezelését és továbbítását jelenti. Természetesen az üzenetek 9P formátumúak, így a plumber egy 9P fájlszerver. A szoftverek a plumb program segítségével üzennek a plumbernek, aki továbbítja az üzeneteket.

3.1 Felhasználói programok

Számos olyan programmal és parancssori elemmel rendelkezik, amikkel a UNIX is, grafikus felületén azonban egészen másképp működnek a dolgok. A rio sajátosságai miatt nagyon érdekes felhasználói szoftverek alakultak ki. A programok a 9P protokollon kommunikálnak, gombok nem léteznek, a menük csak szövegesek lehetnek, az ablakok minden részébe lehet írni. Ezek miatt egészen másképp működik egy ilyen rendszer, mint azt megszokhattuk.

sam
Egy többfájlos strukturális reguláris kifejezés alapú szövegszerkesztő program. Használata megköveteli az aktív háromgombos egérhasználatot. Rendelkezik egy egyszerű ám erőteljes, részben az ed nevű szövegszerkesztőtől örökölt parancsnyelvvel, ami nagyban épít a reguláris kifejezésekre.
acme
Egy szövegszerkesztő, egy fájlkezelő és egy ablakkezelő program együttvéve. A program ablakán belül egy belső ablakkezelő működik, és fájlrendszer és fájltartalom böngésző ablakokat lehet nyitni, és menedzselni őket. Ahogy a többi Plan 9 alkalmazás, ez is igényli a 3 gombos egér aktív használatát. Például a menügombok itt a középső gombbal működnek. Mivel azonban nincsenek felületi elemek, úgy van megoldva, hogy bármilyen futtatható kifejezésre lehet a középső gombbal kattintani, az le fog futni, akkor is ha egy fájl tartalma. A jobb gombbal pedig meg lehet nyitni egy fájlt, akkor is ha egy fájlban szerepelt a fájlnév, vagy akár bárhová leírtuk, hiszen bárhova lehet írni az ablakokban.

4 Tárolás

Fossil
A Plan 9 fájlrendszere. Természetesen 9P protokollon keresztül lehet elérni a fájlrendszer tartalmát, és így a gépek számára átlátszó, hogy helyi vagy távoli tárat érnek el éppen. Emiatt a Fossil hálózati fájlrendszer(NAS). A Fossil daemonként fut a userspace-ben. A fájlrendszerben lehetséges pillanatképeket készíteni, és saját fájljaikról a felhasználók is készíthetnek snapshotot, és vissza is tölthetik azt.
Venti
A Venti blokk alapú tárolórendszer a Plan 9 operációs rendszerhez. 160 bites SHA-1 hasheli a tartalmat blokkonként, és ez alapján helyezi el a táron. Ezzel csökkenti a töredezettséget, és a duplikációt is. Ha a Fossil fájlszintű rendszert a Venti blockszintű megoldása felett használjuk, akkor lehetőség nyílik permanens snapshotok készítésére. A Venti nem 9P protokollon működik, hiszen az fájl alapú. Egy TCP alapú RPC megoldást használ, így a Venti egy hálózati tárolórendszer(SAN).
replica
Egy 9P alapú adatreplikációs rendszer. A Fossil fájlrendszer logjai alapján képes szinkronba hozni a fájlrendszereket.

5 A Plan 9 kipróbálása

A projekt weboldaláról letölthető cd indítható live cd és install üzemmódban is. A tesztet az nyílt forrású kvm virtualizációs szoftverrel végeztem, de ennek használatára nem térek ki, mert nem állítottam be semmi specifikusat rajta. Más virtualizációs szoftverrel is jól működik.

5.1 Installálás

A Plan 9 legfrissebb iso-ja letölthető a projekt weboldaláról: http://plan9.bell-labs.com/plan9/download.html

A projekt weboldalán található leírás alapján nagyon egyszerűen fel lehet installálni a rendszert. A telepítő közöl minden lényeges információt, és csak néhány olyan opció van, ahol nem felel meg az alapbeállítás a céljainknak.

5.1.1 A telepítő elindítása

A telepítés kiválasztása után megkérdezi a telepítő futtatásához szükséges beállításokat. Nekem problémáim akadtak a grafikus vezérlő beállításával kvm alatt, ezért az egyszerűbb vesa vezérlőt állítottam be xga helyett.

Ha bejött a grafikus felület, 3 ablakot látunk. A felső nagy konzolban fogunk dolgozni. A fel le nyilakkal egyszerű görgetni az ablakban. Az ablakban bárhova lehet írni, ami elsőre nagyon szokatlan érzés. Mindig az aktív sorra kell állítani a kurzort, ami többnyire az utolsó sor, így a lefelé nyíllal elérhetjük.

Egy enter megnyomása elkezdhetjük a telepítés első fázisát. Az első ahol nincs alapbeállítás, az installálás célját kérdezi. Csak be kell írni az eszköz nevét a leírása alapján a listából, nálam sdC0. A második kérdés, hogy MBR-t is kérek rá.

Ezután a particionálás következik, mivel üres virtuális lemezt használok, megfelelnek az alapbeállítások, ez a telepítő szövege alapján w, majd q parancsokkal tehető meg. A Plan 9 x86-on úgy oldotta meg a particionálást, hogy egy hagyományos DOS particióba kerül telepítésre, és itt létrehozza a saját particiós tábláját(a Solarishoz hasonlóan). Mindkét particionálásnál az alapbeállításokat használom. A lokális médiáról telepítem. Később lesz szó a rendszer frissítéséről. Kiválasztom a cdromot, mint adatforrást. Kapunk egy shell-t, hogy megtaláljuk a telepítés forrását. Ha az install cd-ről telepítjük, akkor elég kilépni egy exit-tel. A rendszerbetöltő típusának a plan9-t érdemes használni.

5.1.2 Az első indítás

A rendszer indításkor megkérdezi, melyik médiáról akarunk rendszert betölteni, alapbeállításon megfelel. Lépjünk be glenda felhasználói névvel. Ez a kabalafigurájuk neve, ezért kitüntetett szerepet képvisel: egy előre telepített felhasználó, és bejelentkezés után hasznos programokat és readme-ket tesz a kijelzőre, a könnyebb kezdet érdekében. Ezeket érdemes elolvasni, mert a Plan 9 GUI kezelése annyira szokatlan, hogy rendszeresen olyan érzés, mintha hibásan működne, pedig csak nagyon különleges. A GUI használatát nem mutatom be, ezért is érdemes legalább a grafikus konzol használatát elolvasni.

5.1.3 Grafikai beállítások

Ezen a ponton beállítjuk a rendszer felbontását. A vesa drivernél maradok, de szeretném tudni hogy milyen felbontások állnak rendelkezésemre. Az aux/vga parancs lesz segítségemre:

http://man.cat-v.org/plan_9/8/vga

aux/vga -m vesa -p
aux/vga -l 1280x1024x16

Ha ez így megfelel, be is állíthatjuk, hogy a gép így bootoljon a továbbiakban. Ezt a plan9.ini-ben tehetjük. Indítsunk egy parancssort, például úgy, hogy az asztalon jobb egérgombot lenyomva tartjuk, rávisszük a “new” -ra és felengedjük. Ezután a jobb egérgombbal húzunk egy területet az asztalon. Ott fog megjelenni a parancssor. A következő kód futtatásával tudjuk szerkeszteni a fájlt. Ez a fat fájlrendszeren van, mert bootáshoz kell. Emiatt át is kell váltanunk arra a particióra.

9fat:
sam /n/9fat/plan9.ini

Megjelenik a szövegszerkesztő ami két részből áll. jobb egérgomb nyomva tartásával megjelenik egy menü, a gombot felengedjük a fájl nevén, ezzel kijelöljük a szerkesztendő fájlt, és jobb egérgombbal belekattintjuk az alsó ablakba. Így fent a szövegszerkesztő parancssora lesz, lent pedig a szöveg amit szerkesztünk.

A w parancs írja ki a fájl-t, a q kilép. Ha nem akarjuk menteni a változásokat, akkor kétszer kell q parancsot kiadni. Ne felejtsük el, hogy a konzol(itt a felső ablak) utolsó sorában fogad el csak parancsokat.

5.2 Hálózat beállítása

Számos hálózati beállítása van, de ezeket most nem fogjuk használni. A Plan 9 igényli, hogy a dhcp szerver a megfelelő dhcp-domain és domain-search attribútumokat küldjön, tehát hogy a kliens tudja a saját fqdn-jét.. Engedélyezzük a /rc/bin/termrc nevű fájlban. Ez a Linuxban található rc-nek felel meg, csak a Plan 9 szellemiségével összangban sokkal egyszerűbben. A termrc akkor fut le, ha az operációs rendszert terminál üzemmódban indítunk. Ha cpu szervert indítanánk, akkor a cpurc futna le. Ki kell venni a kommenteket a megfelelő sorok elől:

if(! test -e /net/ipifc/0/ctl)
ip/ipconfig

A dhcp resolver elindítását magától elvégzi majd a termrc, ez látszik a későbbi soraiban. Indítsuk újra a rendszert és ellenőrízzük le a ip/ping parancs használatával. Terminálban futó folyamatot a del gombbal tudunk megszakítani(a Linuxban ez ctl+c lenne). Az újraindításhoz az fshalt parancs segítségével állítsuk le a fájlrendszert majd a virtuális gépet indítsuk újra.

5.2.1 Rendszer frissítése

Nagyon egyszerűen zajlik, a következő parancs kiadására a Plan 9 az aktuális legfrissebb rendszert tartalmazó szerverrel szinkronizál.

replica/pull -v /dist/replica/network

5.2.2 Webböngészés

A webböngészést is természetesen a 9p alapon oldották meg, ezért létezik egy webcookies nevű cookie kezelő szolgáltatás, egy webfs nevű szolgáltatás, ami fájlokként böngészhetővé teszi a webet, elrejtve a http protokollt. Ezt 9p-n érik el a böngészők, és emiatt nagyon kevés kódból lehet böngészőket írni. Természetesen nem lehet találni firefox szintű böngészőket, de az általam használt is meglepően használható. Szerencsére részét képezi az alapvető telepítésnek. A következőképpen indítottam el az abaco nevű böngészőt:

webcookies
webfs
abaco

5.3 Felhasználó hozzáadása

1. Hozzáadjuk a felhasználót a fájlszerveren 2. Hozzáadjuk a felhasználót az autentikációs szerveren(egy gépnél nem kell) 3. Amikor a felhasználó bejelentkezik először, futtatnia kell ezt: /sys/lib/newuser, mert kezdetben GUI-t sem kap, amíg ezt nem futtatja.

Lépjünk be a Fossil konzoljára

con -l /srv/fscons

adjuk hozzá, és adjuk hozzá a felhasználót a sys csoporthoz:


uname <user> <user>
uname sys +<user>


A konzolbol kilépni a ctl-\ + q kombóval lehet. (Mivel nincs magyar keymap, ezért angol keymapon magyar keyboardal ctl+shift+ű)

--Zilahi Dávid 2012. december 10., 05:47 (UTC)

Személyes eszközök