A GoboLinux egy rendkívül egyedi, alternatív Linux-disztribúció, amely alapjaiban definiálja újra a hagyományos Unix-szerű rendszerekben megszokott fájlrendszer-hierarchiát. A disztribúció legfőbb megkülönböztető jegye, hogy szakít a Filesystem Hierarchy Standard (FHS) konvencióival, és minden programot a saját, izolált könyvtárába telepít. Ennek a forradalmi megközelítésnek köszönhetően a GoboLinuxban nincs szükség a hagyományos értelemben vett csomagkezelő adatbázisra, mivel maga a fájlrendszer tölti be ezt a szerepet: a telepített programok listája, verziója és a hozzájuk tartozó fájlok egyszerűen a /Programs
könyvtár tartalmának listázásával áttekinthetők.
Fejlesztők
A GoboLinux-projekt alapötlete Hisham Hashem Muhammad nevéhez fűződik, aki André Detsch-csel közösen hozta létre a disztribúció első, korai verzióját. A projekt születésének körülményeit Hisham Muhammad a következőképpen foglalta össze:
„Az egész úgy kezdődött, hogy egyszerűen programokat kellett telepítenem közönséges felhasználóként az egyetemen, ahol nem rendelkeztem root jogosultságokkal a hagyományos Linux könyvtárszerkezet módosításához. Ez kiváló alkalmat teremtett a fájlrendszer újragondolására. Egy nap, miután a számítógépemen bekövetkezett a „Nagy Fájlrendszer Pusztulása”, az egész rendszert újra kellett telepítenem. Ekkor döntöttünk úgy, hogy az alternatív könyvtárstruktúra ötletét teljes mértékben megvalósítjuk az új rendszeren. André szintén a Linux-rendszerének újratelepítését fontolgatta, így egy hétvégén összegyűltünk a házában, és végigcsináltuk a teljes Linux From Scratch folyamatot, miközben azt a mi elképzeléseink szerint módosítottuk. Az eredményt tréfásan GoboLinuxnak neveztük el, és ahogy az lenni szokott, a név végül rajtamaradt.”
– Hisham Hashem Muhammad
A kezdeti időszakot követően a projekt egy nemzetközi fejlesztői közösséggé nőtte ki magát, amely folyamatosan karbantartja és bővíti a rendszert.
Leírása
A GoboLinux egy moduláris felépítésű Linux-disztribúció, amely a telepített szoftvereket egy forradalmian új, logikus és átlátható módon szervezi. Ahelyett, hogy egy program komponenseit szétszórná a rendszer különböző pontjain – például a futtatható állományokat a /usr/bin
, a konfigurációs fájlokat az /etc
, az egyéb erőforrásokat pedig a /usr/share
alá –, minden egyes alkalmazás a saját, dedikált könyvtárába kerül. Ez a megoldás nemcsak a programok közötti tiszta elkülönítést biztosítja, hanem rendkívül egyszerűvé és magától értetődővé teszi annak megállapítását, hogy mely szoftverek vannak telepítve, és az egyes fájlok melyik alkalmazáshoz tartoznak.
Annak érdekében, hogy a rendszer a széttagolt programfájlokat mégis megtalálja, a GoboLinux egy logikai csoportosítást alkalmaz szimbolikus linkek segítségével. A különböző típusú fájlok (futtatható állományok, könyvtárak, fejlécfájlok stb.) kategóriák szerint vannak rendezve a /System/Links
könyvtár alatt. Például a /System/Links/Executables
könyvtárban szimbolikus linkek mutatnak a /Programs
alatt található összes végrehajtható állományra.
A hagyományos Unix/Linux alkalmazásokkal való teljes körű kompatibilitás fenntartása érdekében a rendszer olyan szimbolikus linkeket is tartalmaz, amelyek a szabványos Unix-könyvtárakat emulálják. Például a /usr/bin
és a /sbin
egyaránt a /System/Links/Executables
könyvtárra mutat. Ez a megoldás kiküszöböli az azonos kategóriájú fájlok közötti önkényes megkülönböztetéseket, amelyek gyakran inkonzisztenciához vezetnek más disztribúciókban.
A GoboLinux rendszer gyökérkönyvtárának struktúrája a következőképpen néz ki:
~] cd /
/] ls
Depot
Files
Mount
Programs
System
Users
A /Programs
könyvtár tartalmazza az összes telepített programot, kivétel nélkül. A telepített alkalmazások listázása egyszerűen egy parancs kiadásával lehetséges:
/] cd /Programs
/Programs] ls
Minden programbejegyzés egy alkönyvtár, amelyen belül további, verziószámmal ellátott alkönyvtárak találhatók. Ez lehetővé teszi, hogy egy program több különböző verziója is egyszerre jelen legyen a rendszeren.
/Programs] find Bash
Bash
Bash/5.1
Bash/5.1/bin
Bash/5.1/bin/sh
Bash/5.1/bin/bash
Bash/5.1/bin/bashbug
Bash/5.1/info
Bash/5.1/info/bash.info
Bash/5.1/man
Bash/5.1/man/man1
Bash/5.1/man/man1/bash.1
…
A rendszer rugalmasságát jól mutatja, hogy ugyanazon szoftver több verziója is telepíthető párhuzamosan, és a felhasználó könnyedén válthat közöttük, vagy akár egyszerre is használhatja őket. A `Current` szimbolikus link mindig az aktívnak kijelölt verzióra mutat.
/Programs] ls -l LibreOffice
total 8
drwxr-xr-x 9 root root 4096 2023-10-21 01:07 7.5.2
drwxr-xr-x 3 root root 4096 2023-11-15 04:36 7.6.1
lrwxrwxrwx 1 root root 5 2023-11-15 04:36 Current → 7.6.1
/Programs] ls -l GTK3
total 12
drwxr-xr-x 10 root root 4096 2023-09-02 01:39 3.24.30
drwxr-xr-x 9 root root 4096 2023-10-21 05:48 3.24.38
lrwxrwxrwx 1 root root 7 2023-10-21 05:48 Current → 3.24.38
drwxr-xr-x 4 root root 4096 2023-10-21 01:39 Settings
Működése
Ahelyett, hogy a rendszer egy központi adatbázisban tartaná nyilván a telepített csomagokat és a hozzájuk tartozó fájlokat, a GoboLinux magát a fájlrendszert használja erre a célra. A fájlokat kategóriák szerint indexeli szimbolikus linkek segítségével, hogy a rendszer gyorsan és hatékonyan megtalálhassa őket anélkül, hogy végig kellene keresnie az összes programkönyvtárat. Ez a megközelítés elegáns megoldást kínál a „Melyik csomaghoz tartozik az XYZ fájl?” klasszikus problémájára is: a link céljából egyértelműen kiderül a fájl eredete.
A rendszer úgy van konfigurálva, hogy a fájlok keresésekor ezeket a linkelt könyvtárakat használja. A rendszerben minden fájltípushoz létezik egy megfelelő kategória: futtatható állományok, programkönyvtárak (library), fejlécfájlok, megosztott adatfájlok, kézikönyvoldalak (man pages) és így tovább.
A link-alapú indexelés másik fontos előnye, hogy a rendszer integritása könnyen ellenőrizhető. Ha egy programot eltávolítanak, a rá mutató szimbolikus linkek automatikusan „törötté” (broken link) válnak, és ezáltal inaktívvá lesznek. Ez a mechanizmus nagyban leegyszerűsíti a hibák felderítését, és biztosítja, hogy a rendszer állapota mindig szinkronban legyen a valósággal. Így elkerülhetők azok a helyzetek, amikor egy csomagkezelő egy hiányzó függőségre panaszkodik, holott a felhasználó biztos benne, hogy az telepítve van. A GoboLinuxban ha egy link él, akkor a fájl létezik – és fordítva.
Unix-kompatibilitás
A GoboLinux könyvtárstruktúrája első pillantásra radikális eltérésnek tűnhet a Unix hagyományaitól. Felmerülhet a kérdés, hogy ez azt jelenti-e, hogy minden programot módosítani kell az új hierarchiával való együttműködéshez. Szerencsére a válasz egyértelműen nem. A hagyományos elérési utakat a GoboLinux-struktúrára mutató szimbolikus linkekkel oldják meg, így a kompatibilitás a Unix-örökséggel transzparens módon megmarad.
A gyakorlatban ez azt jelenti, hogy a /bin
, a /usr/bin
és a /usr/sbin
mind a /System/Links/Executables
könyvtárra mutatnak. Az összes futtatható állományt tartalmazó hagyományos könyvtár ugyanarra a központi helyre van irányítva. Ez meglepő módon a GoboLinuxot bizonyos esetekben még a hagyományosabb disztribúcióknál is kompatibilisebbé teszi, mivel kiküszöböli azokat a problémákat, amikor egy szkript azért nem fut, mert például egy fájlra az /usr/bin/foo
helyen hivatkozik, miközben az valójában az /usr/local/bin/foo
útvonalon található.
A szabványos Unix-útvonalak alapértelmezés szerint nem láthatók a gyökérkönyvtárban. Valójában ott vannak, de a GoboHide nevű, opcionális kernel patch elrejti őket a felhasználó elől. Ez a funkció elsősorban esztétikai célokat szolgál, és használata nem kötelező. A GoboLinux működéséhez nincs szükség sem a kernel, sem más rendszerkomponensek módosítására, de a GoboHide egy letisztultabb és rendezettebb felhasználói élményt nyújt.
A leggyakoribb kifogás a GoboLinux ellen
A GoboLinux ellen leggyakrabban felhozott kritika az, hogy könyvtárszerkezete nem POSIX-kompatibilis. Ez azonban egy tudatos tervezési döntés eredménye. Az okokról a rendszer megalkotója, Hisham Muhammad adja a legpontosabb magyarázatot:
"Mindennek oka van. A /
, /usr
és /usr/local
, illetve a /bin
és /sbin
közötti hagyományos megkülönböztetés történelmi okokra vezethető vissza. Én is értem ezeket a különbségeket. Azért szüntettem meg ezt a többszintű elkülönítést, mert hiszek abban, hogy a mögöttes problémákra léteznek modernebb megoldások. Egy GoboLinux rendszerben nincs szükség külön /usr
és /usr/local
könyvtárakra azért, hogy elkülönítsük a disztribúció által biztosított programokat a felhasználó által fordítottaktól. Itt minden program természetes módon, a saját könyvtárában van izolálva – ez volt a GoboLinux létrehozásának egyik legfőbb mozgatórugója.
A történelmi ok, amiért egyes Unix-könyvtárak (/bin
, /lib
, /sbin
) közvetlenül a gyökérből erednek, az az volt, hogy egyfelhasználós módban, a /usr
csatolása nélkül is lehessen a rendszert javítani. Ez mára már inkább egy dogmatikus elv. Ha ma rendszermentésre van szükségem, egy teljes értékű grafikus környezetet biztosító LiveCD-t használok, amellyel böngészhetek az interneten megoldások után kutatva. A régi módszernek évtizedekkel ezelőtt volt értelme, de ma már sokkal hatékonyabb eszközök állnak rendelkezésünkre.
A bin
és sbin
megkülönböztetése a mai kontextusban szintén elvesztette jelentőségét. A történelmi evolúció olyan önkényes besorolásokhoz vezetett, mint a ping és a traceroute külön könyvtárba helyezése. Egy Unix-rendszer a jogosultságokon alapul. Ha egy parancsot csak a rendszergazda futtathat, arra a chmod 700
parancs a megoldás.
Végül, ami a partíciók szétválasztását és a távoli menedzsmentet illeti: a kritikusok legjogosabb aggodalma a hálózaton megosztott programkönyvtárak kezelése. A leggyakoribb érv erre az, hogy „a merevlemezek ma már olcsók”. Bár ezzel egyetértek, megértem a központosítás iránti igényt is. Szerencsére a technológiai fejlődés erre is kínál megoldást: az „union mount” és az „overlay filesystem” (rétegelt fájlrendszer). Az ötlet lényege, hogy több partíciót is felcsatolhatunk ugyanabba a könyvtárba. Így a /Programs
megőrzi azt a jelentését, hogy „a rendszerben elérhető összes program gyűjteménye”, függetlenül azok fizikai helyétől. Az operációs rendszerek, mint a Plan 9, már régóta alkalmaznak hasonló elveket."
A GoboLinux projekt célja
A fejlesztők elsődleges célja egy olyan rendszer létrehozása, amelyet ők maguk is szívesen használnak, és amely nem próbálja meg helyettük adminisztrálni a gépet. Míg a legtöbb Linux-disztribúció igyekszik leegyszerűsíteni a kezdő felhasználók dolgát, ez gyakran a tapasztaltabb felhasználók számára jelent korlátokat. A GoboLinux nem állítja magáról, hogy könnyebb, csupán azt, hogy logikusabb és átláthatóbb. A felhasználói visszajelzések szerint a rendszer adminisztrációja valóban egyszerűbb, mivel a felépítése lehetőséget ad a mélyebb megértésre – feltéve, hogy a felhasználó hajlandó időt szánni erre.
A /Depot
és a /Files
könyvtárak
A /Depot
egy szabadon felhasználható terület a felhasználói adatok, például dokumentumok, médiafájlok vagy letöltött anyagok tárolására. Tekinthetünk rá egyfajta „közösségi területként”, amely minden felhasználó számára elérhető (hasonlóan a régebbi Unix rendszerek /pub
könyvtárához). A GoboLinux rendszer maga nem használja a /Depot
tartalmát; a könyvtár célja, hogy ösztönözze a felhasználókat az adatok rendezett tárolására, és tisztán tartsa a rendszer többi részét.
A /Files
ezzel szemben egy szabványos GoboLinux könyvtár, amely programok által közösen használt, de egyikhez sem szorosan tartozó adatokat tartalmaz. Ilyenek például a betűtípusok (Fonts), bővítmények (Plugins) vagy kodekek. Az alkalmazások itt saját alkönyvtárakat is létrehozhatnak helyspecifikus adatok tárolására.
A GoboLinux könyvtárszerkezetének részletesebb bemutatása
A GoboLinux kialakítását olyan korábbi operációs rendszerek is inspirálták, mint a NeXT, az AtheOS és a BeOS, amelyek szintén újszerű könyvtárszerkezeteket vezettek be, miközben megőrizték a Unix-kompatibilitást. A GoboLinux gyökérkönyvtára hat fő könyvtárból áll.
/Programs/
– Ez a könyvtár tartalmazza az összes telepített programot, mindegyiket egy külön alkönyvtárban. Minden programkönyvtáron belül verziószámmal ellátott alkönyvtárak találhatók (pl. /Programs/GCC/13.2.0
), valamint opcionálisan egy Settings
és egy Variable
alkönyvtár a konfigurációs, illetve a változó adatok számára.
/Users/
– Ebben a könyvtárban találhatók a felhasználók saját (home) könyvtárai. Például a "bob" nevű felhasználó könyvtára az /Users/bob
útvonalon érhető el.
/System/
– A kritikus rendszerfájlok helye. Ezt leginkább a rendszeralkalmazások (pl. /System/Settings/passwd
) és a GoboLinux saját szkriptjei használják.
* Links/
– Olyan könyvtárakat tartalmaz, amelyek szimbolikus linkek segítségével indexelik a /Programs
alatt található fájlokat.
* Executables/
– Linkek a programok végrehajtható állományaihoz.
* Libraries/
– Linkek a programok `lib` könyvtáraiban található megosztott könyvtárakra.
* Headers/
– Linkek a programok `include` könyvtáraiban található fejlécfájlokra.
* Shared/
– Linkek a programok `share` könyvtáraiban található adatokra.
* Manuals/
– A `man` és `info` oldalak linkjeit tartalmazza.
* Settings/
– Rendszerszintű konfigurációs fájlok és linkek a programok `Settings` könyvtáraira.
* BootScripts/
– A rendszerindítás során használt szkriptek.
* Variable/
– Változó adatokat tartalmazó könyvtárak: ideiglenes állományok, naplófájlok (log) és egyéb dinamikus adatok.
* tmp/
– Ideiglenes fájlok.
* Kernel/
– A rendszermaghoz (kernel) kapcsolódó könyvtárak.
* Boot/
– A rendszerindításhoz szükséges programok és konfigurációs fájlok, beleértve a rendszermagot és a rendszerbetöltő beállításait.
* Devices/
– Eszközfájlok, amelyeket az `udev` rendszer kezel.
* Modules/
– A kernelverziókhoz tartozó modulok.
* Objects/
– A kernel-eszközökről nyújt információt (a `sysfs` fájlrendszeren keresztül).
/Files/
– Olyan strukturált adatokat tartalmaz, amelyeket több alkalmazás is használhat, de nem képezik szerves részét egyiknek sem (pl. betűtípusok, témák, ikonok).
/Mount/
– További helyi vagy hálózati fájlrendszerek csatolási pontja (pl. CD-ROM, Pendrive).
/Depot/
– A felhasználók által közösen használt fájlok tárolóhelye.
Csomagkezelés a GoboLinux alatt
A GoboLinux csomagkezelési filozófiája alapvetően eltér a többi Linux-disztribúcióban megszokottól. A rendszer forráskód-alapú, ami azt jelenti, hogy a programok telepítése elsősorban a fejlesztők által közzétett eredeti forráskódokból történik, automatizált fordítási folyamattal.
Ez a folyamat az úgynevezett „recepteken” (recipes) alapul. Egy recept egy egyszerű szkript, amely leírja, hogyan kell egy adott programot letölteni, kicsomagolni, konfigurálni, lefordítani és telepíteni a GoboLinux-struktúrába. A GoboLinux központi recepttárolója több ezer programhoz tartalmaz ilyen szkripteket. A `Compile` nevű eszköz a csomagkezelés központi parancsa.
Lássuk a programok telepítésének főbb módjait:
Telepítés forráskódból recepttel
Ez a leggyakoribb és leginkább ajánlott módszer. Root jogosultságokkal a következő parancsot kell kiadni:
Ez a parancs letölti az XY program legfrissebb verziójához tartozó receptet, majd annak alapján automatikusan letölti a forráskódot a fejlesztő hivatalos oldaláról, és elvégzi a teljes fordítási és telepítési folyamatot. Ha egy konkrét verzióra van szükség:
Bináris csomag telepítése
Bár a GoboLinux elsősorban forrásalapú, léteznek előre lefordított bináris csomagok is a gyorsabb telepítés érdekében.
Ez a parancs letölti és telepíti az XY program legfrissebb elérhető bináris csomagját.
Telepítés forráskódból recept nélkül
Ez a módszer haladó felhasználóknak ajánlott, és teljes kontrollt biztosít a fordítási folyamat felett. A lépések a következők:
1. A forráskód letöltése és kicsomagolása.
2. PrepareProgram -t XY 2.0.1
– Létrehozza a programkönyvtárakat.
3. PrepareProgram XY 2.0.1
– Futtatja a konfigurációs szkriptet a megfelelő paraméterekkel.
4. make
– Lefordítja a programot.
5. SandboxInstall XY 2.0.1
– A lefordított fájlokat a megfelelő helyre másolja.
6. SymlinkProgram XY
– Létrehozza a szükséges szimbolikus linkeket a /System/Links
alatt.
Programok kezelése
- Program letiltása: A
DisableProgram XY verziószám
parancs törli a program szimbolikus linkjeit, így az „láthatatlanná” válik a rendszer számára, de a fájljai megmaradnak.
- Program engedélyezése: A letiltott program a
SymlinkProgram XY verziószám
paranccsal újra aktiválható.
- Program eltávolítása: A
RemoveProgram XY verziószám
parancs véglegesen törli a program összes fájlját a /Programs
könyvtárból.
- Törött linkek eltávolítása: A
find /System/Links -type l -xtype l -exec rm {} +
vagy a disztribúció-specifikus `RemoveBroken` parancs segítségével a már nem létező fájlokra mutató linkek eltávolíthatók.
Bár léteztek kísérletek grafikus csomagkezelő felületek, mint például a `Manager` létrehozására, a GoboLinux csomagkezelésének legstabilabb és leginkább támogatott módja továbbra is a parancssori eszközök használata.
A GoboLinux kritikája
A GoboLinux egyedi felépítése miatt gyakran éri kritika, hogy eltér a bevett Unix-szabványoktól. Emellett a projektet egy viszonylag kis, de elkötelezett közösség tartja életben. Ez a tény hatással van a fejlesztés ütemére: a stabil kiadások ritkábban jelennek meg, és a hivatalos recepttároló mérete elmaradhat a nagyobb disztribúciók (pl. Debian, Arch Linux) csomagválasztékától. Ugyanakkor a receptek egyszerűsége lehetővé teszi a felhasználók számára, hogy viszonylag könnyen készítsenek saját szkripteket a hiányzó programokhoz.
Honosítás / Magyarítás
A projekt nemzetközi jellegéből adódóan a GoboLinux, más modern Linux-disztribúciókhoz hasonlóan, teljes mértékben támogatja a honosítást. A telepítés alapértelmezett nyelve az angol, de a rendszer teljes egészében magyarítható a szabványos lokalizációs csomagok telepítésével és a rendszerbeállítások megfelelő konfigurálásával. A modern verziók teljes körű UTF-8 támogatással rendelkeznek, így a magyar karakterek helyes megjelenítése mind a grafikus felületen, mind a parancssorban biztosított. A népszerű asztali környezetek (mint a KDE vagy az Xfce) és alkalmazások (mint a LibreOffice vagy a Mozilla Firefox) magyar nyelvi csomagjai a `Compile` rendszeren keresztül egyszerűen telepíthetők.
Források
Kapcsolódó cikkek