Bejelentkezés





További lehetőségek

Syncthing - Valósidejű mappaszinkronizáció rejtett trükkök nélkül

DeepComp ekkor 2019-09-06 18:02:26

Az adatok szinkronizálása és biztonságban tartása mindig is egy fogós kérdés, különösen azoknak, akik vesztettek már el fontos információkat tartalmazó fájlokat. Rengeteg felhős megoldás van a problémára. Ilyenkor redundáns szervereken tárolják az adatainkat, ingyen általában nem túl nagy tárkapacitáson, ami jópénzért persze növelhető. De mi van akkor, ha van valakinek egy jó otthoni szervere, esetleg egy VPS-e? Lehet-e egy felhőhöz hasonlatos saját helyen tárolni az adatainkat? A válasz igen.
A probléma megoldására mutattam már egy programot. A Resilio Sync valósidejű mappaszinkronizációt tesz lehetővé közvetlen eszközeink közt. Nincs tehát adattároló szerver, az adatok ponttól pontig utaznak. Van lehetőség megosztásra, igaz, csak a programon belül. Sima HTTP(s) linket tehát nem lehet gyártani mint a Google Drive-on, One Drive-on és társain, ráadásul a Resilio féle megoldást sem tudja a Syncthing, de a saját fájloknak mindenesetre remek terep.

A mai cikk alanya, a Syncthing is hasonló. Felmerül a kérdés, hogy mi értelme egy újabb ugyanolyan programot kielemezni?
A válasz, hogy a Resilio-val szemben, ami nagyon elment a profitszerzés és adatgyűjtés irányába, a Syncthing egy teljesen ingyenes, biztonságosabb, nyílt forráskódú és remekül paraméterezhető, multiplatformos alternatíva.

Az alkalmazással eszközöket és azok mappáit köthetjük össze, melyek közt valósidejű a szinkronizáció online állapotban. Nem kell tehát kézzel szinkronizálgatni, feltöltögetni, beállítás után már tükröz is.

Az alkalmazás beszerzése


A Syncthing-et a syncthing.net oldalon találjuk. Van GitHub oldal is.
A beszerzés mindkét helyről történhet. A hivatalos oldalon a latest is részen találjuk egy listában a letöltési lehetőségeket.

Beüzemelés Windows-on


Windows esetén az alkalmazásnak nincs telepítője, egy sima binárist lehet hozzá leszedni. Elérhető 32 és 64 bitre is. Leszedni úgy a legegyszerűbb, ha a GitHub releases oldalon megkeressük a megfelelő Windows kiadást, és letöltjük.
Leszedés után szokásos kitömörítés, majd érdemes egy olyan helyre másolni a mappát, ahonnan véletlenül sem töröljük ki. Ha megvan, a syncthing.exe indítja a programot. Érdemes figyelembevenni, hogy ez egy folyamatosan látható CMD ablakkal örvendeztet meg minket. Ha valakit ez zavar, a háttérben futáshoz hozzon létre egy új fájlt a Syncthing mappájában, syncthing.bat néven, az alábbi tartalommal:
start "Syncthing" syncthing.exe -no-console -no-browser
Ha kész, az elkészült fájllal indítva a programot nem lesz ablaka.

Ezután a webfelület a http://localhost:8384 oldalon érhető el. Jelszóval nincs ugyan levédve, de alap esetben úgy is csak a localhost-ra figyel, a hálózaton tehát más a gépünk címének ismeretében sem éri el a magyarul is tudó kezelőfelületet.

Ha a programot automatikusan szeretnénk indítani a Windows-zal, azt szintén magunknak kell megoldani. A Resilio-val és a felhőszolgáltatókkal ellentétben nem épül be az operációsrendszerbe, így kevesebb a virtuális lábnyoma.
A létrehozott BAT fájlra SHIFT+jobbgomb (SHIFT+menügomb), és másolás elérési útként. Eztán lépjünk az indítópultba. A futtatásba írjuk be, hogy shell:startup, majd enter. Ha bennt vagyunk az indítópultban, készítsünk egy parancsikont aminek az elérési útjában az előbbi BAT fájl van. Ha ügyesek voltunk, ez a vágólapon is van.

A program frissítése faék egyszerű. Alap esetben konkrétan semmi teendő nincs, önmagát frissíti. A gyakorlaton természetesen van lehetőség változtatni.

A felhasználóspecifikus beállítások az appdatában kerülnek tárolásra, szóval nem érdemes az alkalmazás mappájában keresni.

A további teendők kifejtése a Debian-os telepítési rész után folytatódik, révén a lépések szinte azonosak.

Beszerzés Debian-ra


Nem rég érkezett a Debian Buster, de a disztró továbbra sem jeleskedik a csomagok frissességének tekintetében. Cserébe a biztonsági javítások mindig megvannak, szóval félnivaló nincs, de ha az új verziók kellenek, érdemes harmadik fél tárolójához nyúlni. A program fejlesztője hosztol is ilyet, szóval nem egy nagy kaland beállítani.

A tároló hozzáadásához root joggal kell rendelkeznünk, a parancsokat tehát vagy sudo-val, vagy root-ként adjuk ki (sudo su):
#Ez veszi fel a GPG kulcsot a tároló hitelességének ellenőrzéséhez.
wget -O - https://syncthing.net/release-key.txt | sudo apt-key add -
#Ez pedig maga a repo-t adja a sources.list.d mappában egy új fájlhoz.
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list

Mivel a fejlesztő csak HTTPS-en keresztüli letöltést tesz lehetővé, a Debian stretch és régebbi kiadásokban szükségünk lesz az apt-transport-https csomagra. A telepítése az alábbi paranccsal történik:
sudo apt install apt-transport-https

Ha hozzáadtuk, és a HTTPS is működik, már tolható a szokásos
sudo apt-get update
Majd a telepítésre szolgáló
sudo apt-get install syncthing
parancs.

Alternatív megoldásként szedhető bináris is, de szerintem kényelmetlenebb mint a saját tároló.

A program alapesetben itt is csak a localhost-ra figyel. Ha egy SSH-n át elért szerverre akarjuk felrakni, akkor értelemszerűen elérhetővé kell tennünk a webfelületet kívülről. Ezért az első indítást ezzel a paranccsal érdemes csinálni. A parancs egyszeri alkalommal teszi láthatóvá a programot, a webfelületen tehát módosítani kell véglegesre a vonatkozó beállítást (ld. lenntebb).
syncthing --gui-address="0.0.0.0:8384"
Ez az aktuális felhasználó nevében futtatja a programot, és tárolja a beállításokat. A konfigurálást tehát annak a nevében érdemes elkezdeni, akinél futni fog a program.
Alternatív lehetőségként lehet turkálni kézzel a konfigfájlban, nem egy agysebészet, de ami megoldható két lépéssel könnyebben, nem érdemes az önszivatás.

Ha módosítottuk a figyelő cím beállítását, a CTRL+c-vel lehet megállítani a progit. Érdemes is, érdemes a háttérben, rendszerfolyamatként futtatni a Systemd segítségével.

A külön folyamatként futtatáshoz első lépésként a /etc/systemd/system/syncthing.service fájlt kell létrehozni.
sudo nano /etc/systemd/system/syncthing.service
Majd az alábbi tartalommal feltölteni:
[Unit]
Description=Syncthing - Open Source Continuous File Synchronization for %I
Documentation=man:syncthing(1)
After=network.target

[Service]
User=root
ExecStart=/usr/bin/syncthing -no-browser -no-restart -logflags=0
Restart=on-failure
SuccessExitStatus=3 4
RestartForceExitStatus=3 4

# Hardening
ProtectSystem=full
PrivateTmp=true
SystemCallArchitectures=native
MemoryDenyWriteExecute=true
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

A felhasználót (user) érdemes átírni, rootként finomanszólva sem biztonságos futtatni, csak elrettentő példa, meg root felhasználó általában van minden gépen...

A program belső frissítője csomagtárolóból telepítés esetén nem működik, ilyenkor az apt-vel lehet végrehajtani a műveletet.

Az első lépések


Ha elértük a webfelületet, rögvest felugrik egy anonim adatgyűjtéssel kapcsolatos kérdés. Itt kiválasztható a telemetria beállítása. Később módosítható.
Ezt követően érdemes megnyomni a műveletek gombot. Ez egy felugró menü. Nyitott állapotban elérhetjük a beállításokat, másolhatjuk az eszközkódunkat (ez kell túloldalon a párosításhoz), és újra is indíthatjuk a programot.

A beállítások általános részén váltható eszköznév, és állítható be az alapértelmezett mappa. Itt egy ~ (tilde) jel látható.
A ~ jel a saját könyvtárunkat jelenti. Windows-on a C:\users\ mappát, míg Debian-nál a /home/ könyvtárat.
A mappákat, és a főmappa útvonalát is lehet ehhez képest beállítani (~/syncthing), illetve a szokásos abszolút elérési úttal is.

Ha távoli hoszton fut a program, vagy távolról elérnénk,a beállítások grafikus felület részén érdemes lehetővé tenni a külső kapcsolódást.
Legegyszerűbb, ha a grafikus felület címéhez 0.0.0.0:8384-et írunk (ahol a : baloldalán van a figyelő IP, jobbra a port). Így eszközünk bármely - IPv4-es vagy IPv6-os - bejövő címén elérhető lesz a felület, ha szűkíteni akarjuk a kört, érdemes tűzfalat használni.
Erősen ajánlott felhasználónevet és jelszót is beállítani, nehogy valaki - kizárólag ártatlan tévedésből - az adataink felől érdeklődjön.

Linuxon a távoli elérés újabb alternatívája, ha egy Nginx vagy Apache HTTPD proxy mögé rakjuk. Ilyenkor a webszerver csatlakozik fel, de ennek a beállítása körülményes, és nem is okvetlen szükséges. Akkor lehet fontos, ha egységesen akarjuk az SSL tanusítványokat (HTTPS) beállítani több szolgáltatásunkra (pl. ha torrent mellett fut).

A beállítások többi részének módosítása alap esetben szükségtelen, a módosításokat a mentés gombbal léptethetjük érvénybe. Ha újraindítást kíván az adott módosítás, a Syncthing figyelmeztet.

Eszközök párosítása


Ahhoz, hogy mappákat tudjunk megosztani, szükség lesz az eszközök összekapcsolására. A Resilio-val ellentétben tehát nem elég egy szimpla kód, a mappák eléréséhez az eszközöknek ismerniük kell egymást, és a mappát is mindkét oldalon el kell fogadni. Felhasználói jóváhagyás nélkül tehát közel esélytelen az illetéktelen csatlakozás egy szinkronhoz.
Szóval most következik az, hogy ha még nem történt meg, a programot egy második eszközre is fel kell rakni.

A hozzáadás elkezdéséhez nyomjuk meg az eszköz hozzáadása gombot. Meg kell adni a távoli eszköz kódját.
Az eszközazonosító a műveletek legördülő eszközazonosító részen érhető el.
A kódot nem mindig kell megadni, azonos LAN-on le is lehet kattintani a javaslatok közül. Eztán meg kell adni az eszköz nevét, ilyen néven fog megjelenni a listában.

Ha megnyomjuk a mentés gombot,a túloldalon felugrik némi idő elteltével egy ablak a kapcsolódási kérelemmel. Ha elfogadjuk, és mentjük, a kapcsolat kész az eszközök közt. Ezt követően lehet mappát megosztani. Eszközökből akármennyi össze lehet kötve.
Ha netán nem ugrana fel, vagy nem akarjuk kivárni, akkor a fogadó oldalon simán fel is vehetjük a küldő eszközt a kulcs megadásával. A lépések ugyanazok, csak az irányt kell megfordítani.

Mappa létrehozása és megosztása


Mielőtt mappát hoznánk létre, érdemes a default foldert (alapértelmezett mappa) törölni. Rákattintással kibontja, majd a szerkesztés gomb után a törléssel száműzhető.

A létrehozáshoz nyomjuk meg a mappa hozzáadása gombot.
A mappacímke a neve a mappának, a kulcs az egyedi azonosító, az elérési út pedig az első lépések részen szemléltetett módon tölthető ki. Én a példa kedvéért a ~/sync/music elérési utat adtam meg. A kulcs egy random generált sztring új mappa esetében.
Most kattintsunk a megosztás fülre. Itt lehet bejelölni a már párosított eszközök közül egyet vagy többet, így a mentés gomb után felugrós módszerrel hagyható jóvá a mappa a másik oldalon.
A másik eszközön ha felugrik az új mappa felirat, és megnyomjuk a hozzáadást, látható is, hogy a kulcsot nem lehet módosítani, csak a mappacímkét és az elérési utat.

Továbbosztás, szerkesztés


Ha megvan a megosztott mappa, és az eszközpárosítás, látható a főoldalon a mappák és eszközök listája. Bármelyikre rákattintunk, ki lehet nyitni. Nyitás után láthatunk pár információt az adott elemről, és a szerkesztés gomb megnyomása után a hozzáadáskori műveleteket lehet elvégezni. Tovább lehet osztani mappá(ka)t, akár egy mappát egy adott eszközzel, akár egy adott eszközzel mappá(ka)t.
A megosztás természetesen meg is szűntethető, bármikor törölhető eszköz és mappa is. Ilyenkor persze a fájlok nem tűnnek el, csak az újakat nem kapja meg. Érdemes figyelembe venni azt is, hogy egy másik eszköz még áttolhatja a fájlokat a nálunk levett eszközre.

A szinkronizáció, ha lehet, direktben (PeerToPeer módszerrel) történik, de ha ez nem lehetséges (például a tűzfal vagy a NAT akadályozza), akkor a Syncthing közvetítőszerverekhez nyúl. Ez szintén konfigurálható globálisan, és megadott eszközökön is. Így ha valaki VPS-t tart, vagy otthoni szervert, ahol a portok rendesen nyithatóak a netre, esetleg olyan szerencsés, hogy az IPv6 elérhető szerver és kliens oldalon, akkor nincs szüksége közvetítőkre (relay). Érdemes figyelni, hogy a közvetítés nem ekvivalens a globális felfedezéssel, utóbbi abban segít, hogy az eszközök megtalálják egymás címét. Relay esetében tehát átmennek az adatok egy harmadik fél szerverén, felfedezésnél nem.

Hálózat


Az alkalmazásnak alap esetben a 22000-es TCP portot érdemes kinyitni. Itt is érvényes, hogy minél több aktív eszköz, annál jobb. Nekem a szerveremen van nyitva a port, így bárhol vagyok a gépemmel, az mindig tud hozzá csatlakozni relay-k nélkül.
Amennyiben ettől eltérő portot használnánk, a beállítások, kapcsolatok részen kell a szinkronizációs protokoll címét beírni. 50000-es port esetében például tcp://0.0.0.0:50000 - itt tehát bármilyen címről figyeli az 50000-es portot. Érdemes a dynamic elem után vesszővel fűzni. Az eredmény nálam így néz ki:
dynamic, tcp://0.0.0.0:50000

Végszó


Elsőre kicsit bonyolult beállítani az alkalmazást, de utána abszolút stabil, szóval megéri a befektetett energia. A Resilio Sync-cel szemben számos előnyt tud felmutatni. Jobb a testreszabhatóság, tiltható az adatgyűjtés, felháborítóan jó a dokumentációja, csak a szükséges mértékben épül bele a rendszerbe, kevésbé terheli a gépet és még sok más.
Hátrányként annyit lehet megemlíteni, hogy bonyolultabb beállítani kezdőként, illetve egyoldalú kommunikációnál (ha csak terjeszteni akarunk valamit) is párosodni kell minden eszközzel, illetve egy az egyben olvasási mód nincs, mindenkinek a becsületén múlik, hogy egy közös mappára csak fogadást állítson, és ne tolja tele adott esetben vírussal az egészet. Tehát nehezebben jóval illetéktelenül bejutni egy szinkronra, viszont egy élő szinkron nagyobb bizalmat kíván.

Az alkalmazás elérhető Androidra, iOS verzió nincs, és a fejlesztő állítása szerint nem is várható. Androidon QR kóddal is lehet párosodni, így például zenét rakni a telefonra tényleg faék egyszerűségű.

A program nem véd meg a vírusoktól, tényleg bármilyen tartalmat szinkronizál, a külön hardverre történő biztonsági mentést tehát ezzel sem lehet elkerülni.

A bemutatóval nem volt célom a teljes alkalmazást bemutatni, csupán egy ízelítőt akartam adni hozzá. A felhasználói interfész tele van súgóelemekkel és linkekkel, így aki mélyebben beleásná magát, annak adott a lehetőség.


Kulcsszavak

DeepComp lábrész