GNUpot
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.
- Use of
-
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.
- This is possible with
-
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
.
- 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
-
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.
- When an event is originated (either on client or on server)
user must be notified. The command
-
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
andssh
needs to be installed on the server.
- Only programs like
-
Very simple setup.
- Stupid setup, using
dialog
, which initializes local and remote repositories. - User configuration file is also written locally.
- Stupid setup, using
-
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.