• Stars
    star
    141
  • Rank 259,971 (Top 6 %)
  • Language
    C
  • Created over 13 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

C rewrite of sharebox

I am no longer developing this project. For a promising alternative, see https://bazil.org/


Here is sharebox, a project of a distributed synchronizing filesystem.

The problem

We want a filesystem that will synchronize arbitrary data between several machines. This filesystem has to be simple, and to provide as efficiently as possible a set of minimum features:

  • Offline access: it should be possible to modify data while not being connected to the internet, and get the data synchronized when the connection is restored.
  • Conflict handling: if the same document is modified in several places, the system should keep both versions and yet provide a simple way to choose between the two versions. Ideally the remote conflicting version should be shown as a hidden file. Removing this file should resolve the conflict in favor of the local version. Moving this file as the new version should resolve the conflict in favor of the remote version. True merges should be avoided as they could be both confusing and difficult to handle. Solved conflicts should propagate: if the conflict between A and B is solved on A, B should follow the same choice.
  • Versioning: It should be able to automatically keep several versions of document.
  • Efficient storage: Versioning must not induce a forever growing size. It should provide tools to automatically clean the filesystem.
  • Useability: Users should not have to be aware of the internals. Preferably, we should avoid creating special commands. Browsing the history should be done through regular 'ls' and 'cd' commands. Cleaning old versions of deleting snapshot should be doable through 'rm'. Moving content between machines should be doable through 'mv'.
  • Battery friendliness: The filesystem should not force the user to run updates every time a file is modified. Instead, it should let the user schedule the synchronizations. Still, callbacks have to be provided in for those who wish to have these instant updates.

Planned interface

Here is how the user should see the filesystem:

mnt/
   |-regular files
   |-.sharebox/
              |-history/
              |-peers/

The test suite gives a sequence of use cases that may be interesting to browse if you want to understand how sharebox should be used in the end.

Internal storage

Storage should be done through git-annex. Default for each file should be to be versioned through git-annex. Transfers should happen only when files are actually opened (through the open() syscall). In order to allow the user to use git inside the filesystem, the .git directory of sharebox has to be removed from the tree. This is achieved easily by moving the files in a subtree:

fs/
  |-.git/
  |-files/-regular files (links handled through git-annex)

More Repositories

1

resume

Mirror of https://git.chmd.fr/?p=resume.git
TeX
127
star
2

sharebox

a distributed FUSE filesystem with offline operations support
Python
86
star
3

rollinghash

Implementation of some rolling hashes in go
Go
63
star
4

wg-ip

automatic ip addresses for wireguard peers
Shell
41
star
5

diceware-fr

Listes de mots ร  utiliser avec la mรฉthode diceware. Mirroir de http://git.chmd.fr/?p=diceware-intl.git
22
star
6

quickviz

Visualize a pandas dataframe in a few clicks
Jupyter Notebook
20
star
7

michel

A command line tool providing bidirectionnal synchronization of google tasks with flat text files
Python
16
star
8

resume.chmd.fr

My resume
HTML
11
star
9

dotfiles

config
Shell
8
star
10

python-drawio

A library to draw networkx graphs with diagrams.net
Python
7
star
11

plowbot

A minimalist jabber bot for plowshare
Python
6
star
12

nosync

Selectively dismiss sync/fsync/fdatasync calls
C
5
star
13

uv5r-ffvl

Configuring the baofeng uv5r radio for paragliding in France
5
star
14

lighttpd-external-auth

Oauth on static content via a magnet script
PHP
4
star
15

ansible-iptables-persistent

Ansible role for iptables-persistent on Debian-like systems
3
star
16

ansible-wireguard

Ansible role to manage wireguard configuration
Python
3
star
17

blog

Just my blog...
HTML
2
star
18

netmon

Lightweight tray icon to display network status.
Python
2
star
19

xmppipe

This program allows to pipe data through an xmpp tunnel
C
2
star
20

gpg-workflow

Making gpg maintenance more bearable
Makefile
2
star
21

lazylpsolverlibs

Automatically exported from code.google.com/p/lazylpsolverlibs
C
2
star
22

fleetassignment_instances

Instances for the Fleet Assignment problem
Python
2
star
23

lazylpsolverlibs-debian

Debian packaging for lazylpsolverlibs
Shell
2
star
24

ansible-hostapd

Ansible role for hostapd
1
star
25

server_alloc

Jupyter Notebook
1
star
26

androidrules

Automatically exported from code.google.com/p/androidrules
Java
1
star
27

chmd.fr

https://chmd.fr
CSS
1
star
28

emotion_induction

Music files needed for a psychological study (using github as a host for limesurvey)
1
star
29

persistentdicts

Python dict-like interfaces for various databases
Python
1
star
30

minibackup

Mirror of http://git.chmd.fr/?p=minibackup.git
PHP
1
star
31

dates

A tool that prints dates
Python
1
star