( hyperborg | 2024. 04. 03., sze – 08:40 )

Mivel többször is megkaptam, hogy az 1000+1. NextCloud klónt írom, egy kicsit összefoglalnám azt, hogy mi is az álláspontom:

A projektet elsődlegesen azért írom, hogy fejlődjek. Másodsorban pedig azért mert a jelenleg elérhető rendszerekkel nem nagyon vagyok megelégedve. Tisztában vagyok a https://xkcd.com/927/ által sugallt dolgokkal, de :

- Minden nagyobb projekt kicsiben kezdi (l. Linux kernel). Ha van technikai létjogosultsága, akkor lesz saját felhasználói és fejlesztői köre.
- Az OwnCloud/NextCloud és így tovább - szerintem - alapvető architekturális problémával küzd: a szerver rész a webszerver köré van hajtogatva. Ez rengeteg limitációt hoz be a képbe, többek között azt, hogy a webböngészők sandboxja miatt ugyanúgy kell natív klienst létrehozni (pl: https://nextcloud.com/install/  Download for desktop) , illetve a szerver oldalon lévő stack nem egy stabil fajta (pl: https://community.home-assistant.io/t/core-2024-2-0-update-fail/686426)

- A webszerver centralizáltság miatt nagyon sok esetben performancia probléma fordul elő, amikor egy teljesen alap NextCloud telepítés is jelentősen lassú és különféle beállításokkal kell játszani, hogy valamennyire vállalható legyen (l. https://help.nextcloud.com/t/web-interface-very-slow-bad-performance/15… )

- Ha a webszerver ennyi problémát és limitációt okoz, miért is ne dobjuk el? Erre természetesen rengetegen felhorkannak, hogy nem fognak minden egyes eszközre valamit telepiteni, csak hogy használhassák!!!444!!! Nem is kell, mert a WebAssembly miatt a C++ alkalmazás vígan elfut valamely decens böngészőben. Szóval telepíteni nem kell!

- De akkor mégiscsak szükség van valamilyen webszerverre, hogy az az ÖT fájl a böngészőbe kerüljön - kekeckednek tovább az emberek. Maga a HTTP 1.1 eléggé egyszerű formátum, azt a legalapabb C++ alkalmazás is tudja emulálni. A projekt esetében sem kell több, mivel azt az 5 fájlt kell eljuttatni a böngészőhöz, utána a böngészőben futó C++ alkalmazás más porton websocketen kapcsolódik a többihez és onnantó kezdve a webszerverre nincs szükség.

Mit is kapunk ebben a pillanatban, úgy hogy még nem indítottunk egy szolgáltatást sem? Egy Amoeba OS szerű képződményt, ahol nem az a fontos, hogy hol lesz elvégezve az adott feladat, hanem hogy el legyen végezve, illetve az egyes erőforrások szinte mindenhonnan elérhetőek, bárhol is legyenek hozzáaadva a rendszerhez. Ráadásul minden egyes node ugyanazt a C++ alkalmazást futtatja, legyen szó konzolos, grafikus vagy webböngészős felületről. 

Az egyes node-ok (platformtól függően) pluginokat tölthetnek be maguk alá, így a rendszer rugalmasan bővíthető. Illetve további tecnhikai magyarázat nélkül, a grafikus felület és a logika erősen elválik egymástól.

A teljes rendszer folyamatainak konfigurálására egy NodeRed jellegű felület szolgál. 

Pár use case:

> Szerver felügyelet
Minden szerveren fut egy node, amely maga alá betölt egy nagyon szimpla plugint. Ez a plugin meghatározott időközönként olvassa a releváns fájlokat (pl. /proc/mdstat) és/vagy futtat egy lokális processt aminek a standard outputját gyűjti. Ezeket a raw adatokat filterezni lehet, 1-2 kattintással kijelölhető hogy adatbázisba mentse (s ha az adatbázis nem érhető el, akkor lokálisan cache-lje ameddig online-ba nem kerül). Onnan meg grafikonon megjeleníthető, illetve treshold átlépése esetén figyelmeztetést küld (akár szóban is -> textToSpeech)

> Backup
Mivel minden node hozzáfér a lokális fájlrendszerhez, ezért a helyi plugin időközönként átnézheti a regisztrált könyvtárakat (vagy hookolhat könyvtárra, hogy mi történik ott és akkor azonnal menti a fájlt) és a rendszer többi részével egyetemben csak azokat a fájlokat (illetve azok deltáit) küldi át, amelyek megváltoztak. Itt a "burp" mentési rendszer a példakép. A mentésről ugyancsak mindenféle infó, grafikon és treshold elérhető. Ha van mentés, akkor onnan már nem egy nagy lépés az, hogy ha valaki a megfelelő gépre fizikailag csatlakoztat egy diszket, akkor oda szépen kimásoljon mindent (ahogyan ezt fentebb valaki megemlítette)

A rendszer prototípusa jelenleg is üzemel és folyamatosan fejlődik. Ha nem lesz belőle semmi, akkor is elfér valamelyik kicsi merevlemezen a sarokban :)

Ami segítség jöhetne az az, hogy olyan 2-3 hónap múlva elér egy olyan státuszba a rendszer, hogy lehet tesztelni. Ha valaki szeretne nagyon early-adopter lenni, akkor ne fogja vissza magát! :D