Met Sparkleshare realiseer je een Dropbox-alternatief voor Linux-, OS X- en Windows-systemen. De centrale server die voor de synchronisatie van de bestanden zorgt, beheer je zelf. Hiervoor gebruiken wij een Raspberry Pi.

 

 Wanneer je diverse computers gebruikt, ontstaat al snel de situatie dat je graag je bestanden gesynchroniseerd houdt. Dropbox is in dit gat gesprongen en biedt een synchronisatiedienst aan. Vooral bij mensen die wat minder met de techniek bezig zijn, is dit bijzonder goed aangeslagen. Het grote nadeel van Dropbox is dat je geen idee hebt waar je bestanden staan en wie deze bestanden kan bekijken. Je privacy is niet gewaarborgd en veel mensen en organisaties gebruiken Dropbox om die reden niet.

 

Het open source-project Sparkleshare biedt een beter alternatief. Het idee om Sparkleshare te bouwen is in 2010 ontstaan tijdens het GNOME 3 Usability Hackfest in Londen. Daar miste men een samenwerkingstool waarmee projectbestanden konden worden gedeeld. Uiteindelijk leidde dit tot Sparkleshare, dat is ontwikkeld door de Nederlander Hylke Bons.

Projecten
Er zijn clients beschikbaar voor Linux-, OS X- en Windows-systemen. Je hoeft geen whizzkid te zijn om ermee te werken. Tijdens de installatie van Sparkleshare op je werkstation wordt een directory Sparkleshare in je werkgebied aangemaakt. Hierin komen één of meer subdirectories. Elke subdirectory is een ‘project’ op de Sparkleshare-server. Bestanden die je in zo’n subdirectory zet of sleept, worden automatisch gesynchroniseerd met de server. Even later vind je deze terug op alle andere machines die ook dit project via Sparkleshare delen. Wijzigingen aan bestanden worden ook vlotjes gesynchroniseerd.

 

 

1 Het menu

 

Git
Sparkleshare gebruikt op de achtergrond Git, in samenwerking met ssh. Je kunt daardoor diensten als GitHUb of Gitorious voor de opslag gebruiken. Je hoeft dan zelf geen beheer te doen, maar je geeft de data wel uit handen. Een andere oplossing is om de data op je eigen server te plaatsen, waardoor je volledige controle houdt over wie waarbij kan. Het inrichten van een Sparkleshare-server is niet erg ingewikkeld; deze hoeft slechts Git en sshd te draaien.

 

Raspberry Pi
Het is erg handig wanneer je Sparkleshare-server 24 uur per dag beschikbaar is. Om het energieverbruik zo laag mogelijk te houden kozen wij voor een Raspberry Pi met Raspbian als Sparkleshare-server. Een Raspberry Pi is al tevreden met een 5 volt USB-voeding die circa 1100 mA kan leveren. Onze lokale elektronicawinkel bleek alle benodigdheden op voorraad te hebben. De Raspberry Pi, USB-kabel en voeding gingen in totaal voor zeventig euro over de toonbank.

 

Een Raspberry Pi heeft een SD-kaartje nodig om vanaf te booten. Hiervoor gebruikten wij een 4 GB SD-kaartje dat nog in de bureaula lag. Aangezien de totale installatie onder de 1 Gb blijft, hebben we dan ruim 2 Gb voor de opslag van de data. Tegenwoordig zijn 8 Gb SD-kaartjes heel betaalbaar; daarmee kun je prima vooruit. Tijdens de installatie heb je een HDMI-monitor en een USB-toetsenbord nodig. Zodra je via ssh kunt inloggen, doe je de rest comfortabel vanaf je desktop of laptop.

Raspbian is een specifiek voor de Raspberry Pi geoptimaliseerde Debian-distributie. Wij doen een standaardinstallatie van Raspbian op de Raspberry Pi. Bij de selectie van het type systeem kiezen wij voor SSH-server en standaard systeem-utilities. Na de installatie hebben wij op ons SD-kaartje een boot-partitie van circa 75 Mb, een partitie voor het root-filesystem van 3,4 Gb waarvan 581 Mb daadwerkelijk in gebruik is en een swap-partitie ter grootte van zo’n 250 Mb. Wat opvalt is dat voor tmp en /var/log niet apart is gemount. Flashgeheugen zoals dat voor USB-sticks en SD-kaartjes wordt gebruikt, ‘slijt’ door schrijfacties. De installer heeft /run en /run/lock in tmpfs gezet. Zelf zetten we ook nog even /tmp en /var/log in tmpfs, door hiervoor twee regeltjes aan /etc/fstab toe te voegen.

Hierna installeren we curl. Hiermee downloaden we dazzle.sh. Dit is een handig shell-script dat de resterende installatiewerkzaamheden voor je uit handen neemt. Ook na het installeren verricht dazzle.sh nog goede diensten; om die reden installeer je het in /usr/bin. Dit script maakt een speciale user aan (storage) en installeert git en rscync. Verder zet het script in de passwd-file de git-shell als shell voor de speciale user en voegt aan sshd.config een paar regels toe om ervoor te zorgen dat deze user over ssh uitsluitend met keys kan inloggen. Nu is op de Raspberry alle software geïnstalleerd. Het root-filesystem is inmiddels aangegroeid tot 638 Mb.

Je maakt nu op de Raspberry Pi een nieuw project aan met behulp van de opdracht dazzle create <projectnaam>. Hierdoor wordt een nieuwe Git-repository aangemaakt in het homegebied van de speciale user.

Clients
Installeer nu de client-software op elk systeem waarop je Sparkleshare wilt gebruiken. Wanneer een gebruiker op een systeem Sparkleshare voor het eerst opstart, dan wordt in zijn werkgebied een Sparkleshare-directory aangemaakt en wordt een unieke key gegenereerd. De key vind je terug hetzij in het Sparkleshare-menu, hetzij in een tekstbestandje in de Sparkleshare-directory, afhankelijk van de Sparkleshare-versie. Je kopieert deze key naar de server en voegt die toe aan het bestand authorized_keys in de .ssh-directory van de speciale user. Je kunt hierna in de client aangeven welke projecten je wilt synchroniseren.

 

De Linux-client is gebouwd op basis van mono, een open source-implementatie van .NET en de taal C#. Dit betekent dat je wat extra libraries moet installeren voordat je ermee aan de slag kunt. Je kunt dan Sparkleshare zelf vanaf source bouwen, waardoor je de nieuwste versie kunt draaien. In een aantal distributies wordt Sparkleshare als package geleverd; dan hoef je dat niet te doen. Debian heeft een Sparkleshare-package, dus op Debian- en Ubuntu-systemen is het een kwestie van apt-get install en je kunt aan de slag.

Trayer
Wanneer je op een Linux-werkstation Sparkleshare opstart, dan wordt een icoontje in de tray geplaatst. Door met je muis op dit icoontje te klikken kun je invoeren met welke server je wilt synchroniseren en om welke projecten het gaat. Dat wordt lastig wanneer je een window manager gebruikt die geen tray heeft. Op één van onze werkstations draait Fvwm2 als window manager. Om toch met Sparkleshare te kunnen werken, hebben wij trayer geïnstalleerd. Na het opstarten verschijnt er een kleine balk onder in beeld. Wanneer je hierna Sparkleshare start, verschijnt het icoontje in deze balk.

 

Windows
Voor Windows-systemen kun je via Sparkleshare.org een msi-bestand downloaden. Hiermee installeer je Sparkleshare. Wij hebben het bestand sparkleshare-windows-1.0.0.msi gedownload op een Windows 7-werkstation. Nadat we hiermee Sparkleshare hadden geïnstalleerd, konden we dit probleemloos opstarten. Ook hiermee krijg je in je werkgebied een Sparkleshare-directory en een icoontje in je tray. In de Sparkleshare-directory is weer een tekstbestandje met key te vinden. Nadat we deze op de server hadden toegevoegd en via het icoontje de gegevens van de server en de naam van het project hadden ingevoerd, duurde het niet lang voordat ook hier onze bestanden verschenen.

 

Gitolite
Met Dazzle kun je snel en makkelijk projecten aanmaken en gebruikers toevoegen. Elke gebruiker die je op deze manier toevoegt, heeft toegang tot alle met Dazzle aangemaakte projecten. Voor een verfijndere toegangscontrole kun je in plaats van Dazzle Gitolite gebruiken. Gitolite is een toegangscontrolelaag over Git die gebruikers via ssh toegang geeft tot git-repositories. Deze gebruikers worden op de server geen echte gebruikers en zij krijgen ook geen shell-toegang. Je kunt eenvoudig gebruikers in groepen opnemen. Per git-repository geef je per groep en/of per gebruiker toegangsrechten, hetzij alleen leesrechten, hetzij lees- en schrijfrechten. Het systeembeheer van Gitolite doe je op afstand vanaf je desktop met behulp van ssh en git.

 

Gitolite is op de Raspberry Pi eenvoudig te installeren via apt-get install gitolite. Maak op je desktop een ssh-key aan en scp het publieke deel naar de Raspberry Pi. Op de Raspberry doe je vervolgens dpkg-reconfigure gitolite. Je kunt nu het pad naar je key opgeven. Het systeem maakt een user gitolite aan met /var/lib/gitolite als $HOME. Hierna ga je weer terug naar je eigen desktop waar je de beheeromgeving voor gitolite opzet:

 

git clone gitolite@ipnummer-raspberry:gitolite-admin

Er is nu een directory gitolite-admin aangemaakt. Je kunt in deze directory nog even je git-credentials aanmaken met behulp van git config:

 

git config user.email “matto@hub.nl”

git config user.name “Matto”

In de gitolite-admin-directory heb je twee subdirectories, conf en keydir. In de conf-directory moesten wij in de file gitolite.conf de regel repo gitolite-admin aanpassen (deze moet zonder hoofdletters). Wellicht is dit in nieuwere versies opgelost.

 

In de directory keydir neem je de publieke sleutels van de gebruikers op. Sparkleshare-gebruikers hebben die key in hun Sparkleshare-directory staan (piet’s link code.txt). Kopieer die key naar je keydir-directory en geef deze een bruikbare naam (piet.pub). Via Git brengen we dit over naar de server:

 

git add piet.pub

git commit -m “Key piet toegevoegd”

In het bestand conf/gitolite.conf kunnen we nu een groep aanmaken en een nieuwe repository opnemen:

 

hub = piet klaas

repo NieuweRepo

 rw+ = @hub

In dit voorbeeld hebben we een groep hub aangemaakt met de gebruikers piet en klaas. Verder hebben we een nieuwe repository NieuweRepo opgenomen en de groep hub hierop lees- en schrijfrechten gegeven. Via Git brengen we dit over naar de server:

git commit -m “hub en NieuweRepo toegevoegd”

git push

Op de Raspberry Pi zorgt Gitolite er nu voor dat de repository NieuweRepo wordt aangemaakt en dat Piet en Klaas deze mogen gebruiken. Hiermee kunnen Piet en Klaas in Sparkleshare NieuweRepo als project toevoegen en hierin bestanden met elkaar synchroniseren. Dit doe je door via het Sparkleshare-icoon te kiezen voor Add Hosted Project waarbij je als adres gitolite@ipnummer opneemt en als remote path NieuweRepo.git invult. Nadat je op Add hebt geklikt, voegt Sparkleshare op de machine van de betreffende gebruiker de directory NieuweRepo toe. De gebruiker kan nu bestanden hier naartoe slepen of kopiëren en Sparkleshare zorgt er weer voor dat alles netjes gesynchroniseerd blijft.

 

Gitolite is een krachtige tool. We hebben hier slechts een tipje van de sluier opgelicht. Meer informatie vind je in de uitgebreide documentatie van Gitolite.


2 Toevoegen van een project

 

 

Client-side encryptie
Sparkleshare biedt de optie om bestanden eerst op de client met AES-256-CBC te laten versleutelen voordat ze met de server worden gesynchroniseerd. De bestandsnamen blijven dan overigens wel in cleartext. Je doet dit eenvoudig door met Dazzle of met Gitolite een repository aan te maken waarvan de naam -crypto bevat. Wanneer je op de client via Sparkleshare het project toevoegt, wordt een wachtwoord gevraagd. Hiermee worden de bestanden versleuteld.

Versiebeheer
Het gebruik van Git heeft voor- en nadelen. Een voordeel is het versiebeheer waardoor je desgewenst een eerdere versie van een bestand kunt opvragen. Bij platte tekstbestanden zoals programmabroncode kan Git prima met diffs uit de voeten, maar bij wijzigingen in binaire bestanden zal zowel de oude als de nieuwe versie worden opgeslagen. Nu zul je niet zo snel verschillende versies van mp3’tjes hebben, maar bij Office-documenten is dit een ander verhaal. Natuurlijk is het prettig wanneer je van je spreadsheets en tekstdocumenten oudere versies kunt opvragen, maar houd in dat geval wel je dataomvang op de Sparkleshare-server in de gaten.

 

Een ander aandachtspunt is het geheugengebruik. Bij grotere bestanden gaat Git nogal wat geheugen gebruiken. Een Raspberry Pi heeft zo’n 500 Mb geheugen aan boord. Dus ben je van plan om met veel grote en/of binaire bestanden te werken, dan is het wellicht beter om voor andere hardware te kiezen.

Wie al gewend is om met versiebeheersystemen zoals Subversion, Mercural of Git te werken, zal misschien weinig meerwaarde in Sparkleshare zien. Voor de doorsnee gebruiker kan Sparkleshare juist heel handig zijn. De automatische synchronisatie van de bestanden op de achtergrond zit je niet in de weg en is op zich al een heel goede back-upmethode. Met een grafische filemanager zoals Nautilus is het mogelijk om met behulp van een paar muisklikken oudere versies van bestanden op te vragen. Ook dit kan een waardevolle optie zijn voor gebruikers die niet met een versiebeheertool zoals Git overweg kunnen.

Je client controleert voortdurend de actualiteit van de bestanden. Wijzigingen op de server worden binnengehaald en lokale wijzigingen worden naar de server geschreven. Wanneer je diverse werkplekken hebt, bijvoorbeeld een vaste computer en een laptop of meerdere laptops, dan zorgt Sparkleshare ervoor dat alles up-to-date blijft. Dit is een mooie manier om met verschillende mensen samen te werken of samen bestanden te delen. Jammer is dat clients voor Android en iOS ontbreken. Het voordeel van Sparkleshare is dat je data veilig via ssh en je eigen server worden gesynchroniseerd. Gebruik je Sparkleshare vooral voor de synchronisatie van platte tekstbestanden zoals programmabroncode, HTML en CSS of bijvoorbeeld teksten in Markdown of Latex, dan kun je met een Raspberry Pi en een SD-kaartje jaren vooruit.

 Links:

Sparkleshare
www.sparkleshare.org

GitHUb-pagina’s van Hylke Bons
https://github.com/hbons

Gitolite
http://gitolite.com/gitolite

 

Raspbian
www.raspbian.org