32 Home
Franco Masotti edited this page 2017-05-05 01:42:59 +02:00


A fully free, highly customizable and very efficient shell wrapper for git and SSH, which imitates Dropbox.

Purpose of this project

Lots of us using Dropbox (or similar) like its functionalities. However these services have some defects:

  • Your data could be anywhere in the world.
    • This means you don't have full control over your own files.
  • Size limits
    • Usually of a few Gigabytes.
  • Clients used to access these servces are usually proprietary.
  • These programs are also non-trivial in terms of disk, memory and processor usage.
  • What are you going to do if those owners discontinue those services?

The aim of this project is to have a completely free (as in freedom) replacement for Dropbox (and also similar services) that runs exclusively in our computers. All of this is done following the K-I-S-S (Keep It Simple, Stupid) principal.

Why the name GNUpot

  • GNU because of the freedom associated to this program.
  • pot because it gives the idea of some type of container.

What is GNUpot really?

GNUpot is a wrapper that enables you to use git via SSH. without repeating tedious jobs. GNUpot will take care of creating the repository, generating cryptographical keys, doing automatic commits, pushes and pulls when files are changed, etc...

Why GNUpot and not OwnClowd?

OwnClowd is a nice web interface that does lots of other things as well as handling files. I wanted something simple I could setup and start to use right away. That's why GNUpot was born.

Ideas behind the project

Using very well tested utilities as a base for GNUpot is a guarantee for its stability and reliability.

The following is a list of how the programs called by GNUpot are used as well as some interesting ideas which are (or will be) implemented:

  • Simple

    • Use of bash as scripting language makes the program Overall very integrated with a GNU/Linux system (as well as other UNIX-like systems). Programming and manteinance should also be trivial this way.
    • No root privileges required.
    • Runs in background.
  • When some kind of change is made, this is sent automatically to the server (or to the client(s)).

    • This is possible with inotify which looks for changes inside the watched directories both on client and server.
  • Encrypted and password-less communication between client and server.

    • ssh is very suitable and malleable for this job.
  • Minimal bandwidth usage.

    • If we are setting up a server at home it is unlikely to have fast upload speed. We have to avoid to use all available upload (and even download bandwidth) on server side (especially). This is achieved using trickle.
  • Desktop notifications.

    • When an event is originated (either on client or on server) user must be notified. The command notify-send is perfect for this because of its simplicity.
  • Solid file and syncing agent.

    • git is designed for collaboration and has an excellent SSH support.
  • Automatic file conflict detection and resolution. BASIC FUNCTIONALITY IMPLEMENTED

  • Automatic backup to a maximum user defined number of backups. BASIC FUNCTIONALITY IMPLEMENTED

  • Easily shareable directories.

    • User and groups are managed by simple text files on the server. TODO
    • Support for nested git repositories.
      • If you copy git repositories inside the watch directory, then these are handled correctly. TODO
  • Multiple server support.

    • A single client can handle multiple watch directories and remote servers at the same time. This can be implemented with lists of servers, usernames, SSH certificates and all that is necessary for GNUpot to work. Obviously this implies a major rewrite of the software. TODO
  • No server-side program running.

    • Only programs like inotify, git and ssh needs to be installed on the server.
  • Very simple setup.

    • Stupid setup, using dialog, which initializes local and remote repositories.
    • User configuration file is also written locally.
  • Not cross OS, but more or less cross distro.

    • It works both on system with a GUI as well as headless ones (servers, embedded, etc...). In the second case notifications are not shown.

Why is GNUpot different from most libre solutions

Sync events are generated both on client and on server. Other programs use asynchronous events based on timeouts, while GNUpot uses synchronous events generated on the sever.

Interesting facts about GNUpot

GNUpot is based on git so you can use the usual git commands. For example to see all the commit history you can use git log. To see the differences from the last commit: git show.

License notice


All the wiki content is provided under the GFDLv1.3. For futher information clone this repository (as described in the Download page) and read the License page.