Portál AbcLinuxu, 16. května 2024 13:37

Syncthing

23. 5. 2017 | Bystroushaak
Články - Syncthing  

Syncthing je nástroj pro synchronizaci dat mezi vícero počítači podobným způsobem, jaký dovoluje například Dropbox. Stačí pouze nakopírovat data do synchronizované složky a automaticky dojde k propsání na všechny ostatní stroje. Na rozdíl od Dropboxu se však jedná o open source a na rozdíl od OwnCloudu funguje decentralizovaně, bez potřeby serveru.

Syncthing používám přibližně půl roku na synchronizaci mezi čtyřmi zařízeními: domácím počítačem, notebookem, serverem doma a VPS, na které mi běží osobní stránky a IRC klient. Za tu dobu jsem nenarazil na žádný problém. Naopak, všechno funguje, jak má.

Věc, kterou na Syncthingu nejvíce oceňuji, je rychlost synchronizace. Na rozdíl od Dropboxu, který jsem používal předtím, umožňuje synchronizaci takovou rychlostí, jakou vám dovolí připojení. V mém případě není problém synchronizovat gigabajty změn během pár minut.

Instalace

Z domovské stránky https://syncthing.net/ je možné stáhnout balíčky pro různé distribuce a operační systémy. Kromě klasické trojice Windows / Mac OS X / Linux se zde nachází i balíčky pro různé odrůdy BSD a Solaris. V případě Debianu a Ubuntu je možné také nainstalovat software po přidání oficiálního repositáře Syncthing zadáním následující sekvence příkazů:

# Add the release PGP keys:
curl -s https://syncthing.net/release-key.txt | sudo apt-key add -

# Add the "stable" channel to your APT sources:
echo "deb https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list

# Update and install syncthing:
sudo apt-get update
sudo apt-get install syncthing

To má svou výhodu v distribuci aktualizací, které se budou stahovat automaticky přes správce balíčků.

Po instalaci je možné Syncthing spustit zadáním příkazu syncthing na příkazové řádce. To vypíše několik řádek textu, mezi kterými se nachází dvě důležité informace:

[monitor] 18:36:29 INFO: Starting syncthing
[start] 18:36:29 INFO: Generating ECDSA key and certificate for syncthing...
[LQ3CH] 18:36:30 INFO: syncthing v0.14.27 "Dysprosium Dragonfly" (go1.8.1 linux-amd64) deb@build.syncthing.net 2017-04-15 07:38:23 UTC [noupgrade]
[LQ3CH] 18:36:30 INFO: My ID: LQ3CH5N-JV5LJRW-GA4E533-BXZZQBA-KONHJB6-7SZQDRL-WHWSCE6-AVBTLQJ
[LQ3CH] 18:36:30 INFO: Single thread SHA256 performance is 330 MB/s using minio/sha256-simd (203 MB/s using crypto/sha256).
[LQ3CH] 18:36:31 INFO: Hashing performance with weak hash is 282.27 MB/s
[LQ3CH] 18:36:32 INFO: Hashing performance without weak hash is 326.05 MB/s
[LQ3CH] 18:36:32 INFO: Default folder created and/or linked to new config
[LQ3CH] 18:36:32 INFO: Defaults saved. Edit /home/b/.config/syncthing/config.xml to taste or use the GUI
[LQ3CH] 18:36:32 INFO: Weak hash enabled, as it has an acceptable performance impact.
[LQ3CH] 18:36:32 INFO: Ready to synchronize "Default Folder" (default) (readwrite)
[LQ3CH] 18:36:32 INFO: Send rate is unlimited, receive rate is unlimited
[LQ3CH] 18:36:32 INFO: Rate limits do not apply to LAN connections
[LQ3CH] 18:36:32 INFO: Using discovery server https://discovery-v4-2.syncthing.net/v2/?id=DVU36WY-H3LVZHW-E6LLFRE-YAFN5EL-HILWRYP-OC2M47J-Z4PE62Y-ADIBDQC
[LQ3CH] 18:36:32 INFO: Using discovery server https://discovery-v4-3.syncthing.net/v2/?id=VK6HNJ3-VVMM66S-HRVWSCR-IXEHL2H-U4AQ4MW-UCPQBWX-J2L2UBK-NVZRDQZ
[LQ3CH] 18:36:32 INFO: Using discovery server https://discovery-v4-4.syncthing.net/v2/?id=LYXKCHX-VI3NYZR-ALCJBHF-WMZYSPK-QG6QJA3-MPFYMSO-U56GTUK-NA2MIAW
[LQ3CH] 18:36:32 INFO: Using discovery server https://discovery-v6-2.syncthing.net/v2/?id=DVU36WY-H3LVZHW-E6LLFRE-YAFN5EL-HILWRYP-OC2M47J-Z4PE62Y-ADIBDQC
[LQ3CH] 18:36:32 INFO: Using discovery server https://discovery-v6-3.syncthing.net/v2/?id=VK6HNJ3-VVMM66S-HRVWSCR-IXEHL2H-U4AQ4MW-UCPQBWX-J2L2UBK-NVZRDQZ
[LQ3CH] 18:36:32 INFO: Using discovery server https://discovery-v6-4.syncthing.net/v2/?id=LYXKCHX-VI3NYZR-ALCJBHF-WMZYSPK-QG6QJA3-MPFYMSO-U56GTUK-NA2MIAW
[LQ3CH] 18:36:32 INFO: TCP listener ([::]:22000) starting
[LQ3CH] 18:36:32 INFO: Completed initial scan (rw) of "Default Folder" (default)
[LQ3CH] 18:36:32 INFO: Loading HTTPS certificate: open /home/b/.config/syncthing/https-cert.pem: no such file or directory
[LQ3CH] 18:36:32 INFO: Creating new HTTPS certificate
[LQ3CH] 18:36:32 INFO: GUI and API listening on 127.0.0.1:8384
[LQ3CH] 18:36:32 INFO: Access the GUI via the following URL: http://127.0.0.1:8384/
[LQ3CH] 18:36:32 INFO: Device LQ3CH5N-JV5LJRW-GA4E533-BXZZQBA-KONHJB6-7SZQDRL-WHWSCE6-AVBTLQJ is "b" at [dynamic]
[LQ3CH] 18:36:43 INFO: Detected 0 NAT devices
[LQ3CH] 18:36:43 INFO: Joined relay relay://185.147.34.123:22067

Zajímavé jsou řádky:

[LQ3CH] 18:36:30 INFO: My ID: LQ3CH5N-JV5LJRW-GA4E533-BXZZQBA-KONHJB6-7SZQDRL-WHWSCE6-AVBTLQJ

kde je možné vidět ID instalace a

[LQ3CH] 18:36:32 INFO: Access the GUI via the following URL: http://127.0.0.1:8384/

kde je možné vidět IP adresu a port, na kterém naslouchá webové rozhraní. Standardně také Syncthing ihned otevře prohlížeč s touto adresou.

Automatické spouštění na serveru

Automatické spuštění jsem na Ubuntu serveru vyřešil podle návodu pomocí systemd:

mkdir -p ~/.config/systemd/user/
cp /usr/lib/systemd/user/syncthing.service ~/.config/systemd/user/
systemctl --user enable syncthing.service
systemctl --user start syncthing.service

V grafickém rozhraní toto není nutné řešit, neboť je možné Syncthing ve variantě s GTK nakonfigurovat tak, aby se služba spouštěla na pozadí automaticky.

Základní konfigurace

Ihned po otevření webového rozhraní se zobrazí stránka, na které je možné vidět základní přehled sdílených adresářů a přístrojů, se kterými jsou sdíleny:

Syncthing

V nabídce akce je možné nechat si zobrazit ID přístroje a také provést nastavení chování

Syncthing Syncthing

Zde je možné upravit chování webového rozhraní, zda má být dostupné jen z localhostu, nebo i zvenčí (změňte Adresu naslouchání z 127.0.0.1:8384 na 0.0.0.0:8384), jaké má být přihlašovací jméno a heslo, zda používat HTTPS a tak podobně.

Pokud rozkliknete konkrétní adresář (Default Folder), je možné nastavovat detaily jako jeho jmenovku, cestu k němu, jak často má být kontrolován na nové soubory, druh přístupu (čtení i zápis, nebo pouze čtení), zda se má přenášet oprávnění, jaké má být pořadí stahování souborů (doporučuji od nejmenšího) a jestli má Syncthing provádět nějaký druh verzování.

Syncthing Syncthing Syncthing Syncthing

Přidání přístroje

Jakmile Syncthing nainstalujete na dvou (či více) počítačích, přijde čas je všechny propojit. To se dělá vybráním jednoho počítače jako zavaděče (například váš domácí počítač) a zkopírováním jeho ID do ostatních zařízení.

Na následujícím obrázku jsem v druhém virtuálním počítači přidal ID prvního. Ve vašem případě byste na notebooku přidali ID svého domácího počítače. Pořadí je důležité. Proč? Vysvětlím za chvíli:

Syncthing

Všimněte si, že kromě vyplnění ID přístroje, Jména přístroje a adresářů ke sdílení jsem zaškrtl položku Zavaděč. Ta Syncthingu říká, že toto zařízení (ve vašem případě domácí počítač) má být považováno za Zavaděč (anglicky Introducer), který ostatním zařízením může přidávat další kontakty. To se hodí, abyste s každým přidaným zařízením nemuseli obíhat všechny ostatní a schvalovat je tam. Pokud přidáte zařízení na Zavaděči, ostatní zařízení si ho převezmou automaticky.

Nyní ještě zbývá potvrdit na druhém zařízení (domácím počítači), že toto zařízení skutečně chcete přidat:

Syncthing

Syncthing-GTK

Pokud se rozhodnete používat Syncthing na počítači či notebooku, určitě doporučuji program Syncthing-GTK, který poskytuje „nativní“ rozhraní pro práci se Syncthingem.

Instalace je v Ubuntu jednoduchá, k dispozici je PPA:

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt install syncthing-gtk syncthing-inotify

Poté se vám otevře program, přes který můžete Syncthing spravovat stejně jako přes webové rozhraní.

Pokládám za důležité zdůraznit, že se jedná o dva rozdílné programy a Syncthing-GTK je závislý na běhu démona Syncthing. Sám si ho taky umí pustit a kontrolovat jeho běh.

Syncthing Syncthing

Možnosti nastavení jsou podobné jako ve webovém rozhraní:

Syncthing Syncthing

Určitě doporučuji zapnout volbu „Spustit Syncthing-GTK po přihlášení“ (to je důvod, proč nepotřebujete skript SystemD) a také „Minimalizovat do lišty při startu“. Dále pak v záložce Integrace vybrat integraci s vaším souborovým managerem. Díky tomu se bude Syncthing-GTK chovat podobně jako Dropbox a měnit ikony u synchronizované složky podle toho, který soubor je aktualizován a který ne.

Poslední volba, kterou vřele doporučuji, je konfigurace adresáře, položka „Sledovat změny v souborovém systému“, což způsobí, že Syncthing nebude skenovat sdílený adresář jen jednou za N (v základu 60) sekund, ale bude přes inotify přímo registrovat změny v samotných souborech a provádět aktualizace okamžitě.

Syncthing

Caja/Nautilus Script

Dropbox měl až do března jednu killer feature, kvůli které jsem ho používal, a tou je sdílení souboru přes HTTP. Jednoduše stačilo umístit soubor do složky „Dropbox/Public/“, pak na něj kliknout pravým tlačítkem a vybrat volbu „Copy Dropbox Link“. Tím se vám ve schránce ocitl odkaz na soubor, který jste mohli okamžitě poslat kamarádům a známým.

Jelikož mi tahle funkcionalita v Syncthingu chyběla, rozhodl jsem se ji naemulovat. Toho jsem dosáhl instalací Syncthingu na VPS, kde mi běží webové stránky. Ve složce synchronizované Syncthing jsem poté vytvořil adresář public/ a na VPS ve veřejné části webu symlink směřující na tento adresář.

Všechno co nyní nakopíruji do adresáře Syncthing/public/ se automaticky zpřístupní na webu na adrese „http://kitakitsune.org/sync/<jméno souboru>“.

K tomu jsem navíc napsal krátký skript, který po umístění do složky ~/.config/caja/scripts/ přidá do správce souborů caja funkci copy_sync_link.py:

#! /usr/bin/env python2
import os
import urllib
import os.path

import tkMessageBox

import sh


PUBLIC_SYNC_DIR = "/home/bystrousak/Plocha/Syncthing/public/"
HTTP_PATH = "http://kitakitsune.org/sync/%s"


def replace_sync_path(fn):
    if PUBLIC_SYNC_DIR in fn:
        return fn.replace(PUBLIC_SYNC_DIR, "")

    return os.path.basename(fn)


def url_encode_parts(fn):
    return "/".join(
        urllib.quote(x)
        for x in fn.split("/")
    )


if __name__ == '__main__':
    files = os.environ.get("CAJA_SCRIPT_SELECTED_FILE_PATHS", "").strip()

    if not files:
        tkMessageBox.showerror(
            "Error!",
            "You have to select at least one file!"
        )

    for fn in files.splitlines():
        fn = replace_sync_path(fn)

        link = HTTP_PATH % url_encode_parts(fn)
        sh.xclip(sh.echo("-n", link), "-selection", "clipboard")
        sh.notify_send("Link for %s copied to clipboard." % link)

Tento skript ke svému běhu vyžaduje balíčky, které můžete doinstalovat příkazem:

sudo pip2 install -U sh
sudi apt-get install xclip python-tk notify-osd

Poté již stačí soubor zkopírovat do Syncthing/public, kliknout na něj pravým tlačítkem, vybrat z podnabídky Scripty položku copy_sync_link.py a ve schránce se vám objeví odkaz na soubor, který poté můžete poslat například na IRC.

Závěr

Syncthing je výborný open-source synchronizační nástroj, se kterým jsem během přibližně půl roku, co ho používám, neměl jediný problém, přestože ho provozuji na asi pěti počítačích.

Jedná „vada“, která mi u něj chybí, je absence mobilního klienta na iOS, který by byl zdarma. Jinak funguje přesně tak, jak potřebuji.

Pokud sháníte nástroj k synchronizaci souborů mezi více zařízeními, momentálně nevím o ničem lepším.

Další články z této rubriky

VDR a DVB-T2, část 2.
VDR a DVB-T2, část 1.
Šifrovaný Proxmox VE 6: ZFS, LUKS, systemd_boot a Dropbear
MapTiler – proměňte obrázek v zoomovatelnou mapu
Syncthing

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.