In Sync Hacks, we spotlight cool uses of Sync from the creative minds of our users. Sync is our free, unlimited, and secure file-syncing application. If you have an interesting use or how-to, shoot us an email at sync[at]bittorrent.com. Can’t wait to hear what you guys cook up.
In this week’s Sync Hacks, Gemma Lynn gives us the how-to for setting up Sync on an Ubuntu server. Sync + Ubuntu = not having to worry about whether a third party is keeping your files safe in the cloud. Give it a shot, son. Read on for the full tutorial.
On BitTorrent Sync
Oh my word, people. I can’t even tell you. It’s amazing.
You hand it a folder to sync, it hands you a 21-character key (password). The key uniquely identifies your sync folder. Any other btsync
peer (computer running the syncing client) with the key can sync from the folder, and no peer without the key can even see it. The actual content transmission is just like regular BitTorrent, except with 256-bit AES encryption (based, again, on the folder key).
If you’re running behind a LAN, that’s all you need. Just btsync
peers and a shared key, no external servers necessary.
If you’re outside a LAN, you can enable MAGICAL THINGS: btsync
can send a one-way hash (SHA-2) of your key up to a BitTorrent tracker, and match up peers by matching up hashes. It’s brilliant. The hashes can’t be forged (at least until somebody breaks SHA-2), and the original keys are needed for decryption. There are millions of hashed keys hanging out on the trackers right now, looking for matching peers, completely secure. Once the tracker matches up some peers, it’s done; it never sees the synced data, encrypted or otherwise, because the peers talk to each other directly.
As a bonus, the btsync
client does local backups by default. It’ll automatically keep 30 days worth of version history. I just replaced my KeePass triggers, my cron job and my Android rsync with one tool, without handing any of my data to a third party.
Install
Per usual, setting up the Windows and Android clients is a fairly brainless process; setting up a Linux client is a little more exciting. Here’s what I did on my Ubuntu 13.04 server:
Set Up: We don’t set things up manually in Ubuntu, son!
Use the PPA:
$ sudo add-apt-repository ppa:tuxpoldo/btsync
$ sudo aptitude update
$ sudo aptitude install btsync
(If you’re on a version of Ubuntu that didn’t come with add-apt-repository
, you can grab it from the software-properties-common
package. I mention this only because when I was on 12.04, it took way too long to find.)
Configure
apt
will throw some preliminary config options at you and start the btsync
client in daemon mode; you can configure more things after the install is complete (check the main Debian/Ubuntu instructions and the user guide for details):
$ sudo dpkg-reconfigure btsync
dpkg-reconfigure
saves your settings to a read-only configuration file at /etc/btsync/debconf-default.conf
. You can create as many syncing profiles as you want; just stick them all in /etc/btsync
. I ended up copying the defaults to a new profile specific to my user (/etc/btsync/gemma.conf
), borrowing more settings from the /etc/btsync/user-new.conf
sample:
//!/usr/lib/btsync/btsync-daemon --config
//
// in this profile, btsync will run as my user ID
// DAEMON_UID=gemma
//
{
"device_name": "my server",
"storage_path" : "/home/gemma/.btsync",
"listening_port" : 12345,
"check_for_updates" : false,
"use_upnp" : false,
"download_limit" : 0,
"upload_limit" : 0,
"disk_low_priority" : true,
"lan_encrypt_data" : true,
"lan_use_tcp" : false,
"rate_limit_local_peers" : false,
"folder_rescan_interval" : 600,
"webui" :
{
},
"shared_folders" :
[
{
"secret" : "my folder key",
"dir" : "/path/to/my/synced/folder",
"use_relay_server" : true,
"use_dht" : false,
"search_lan" : false,
"use_sync_trash" : true
}
]
}
Most of that’s pretty boring, except:
- I disable upnp and set a specific listening port so I can easily control access with my firewall (
ufw
). - I disable the built-in web UI, because no.
- This client is running on my remote server, so I enable LAN encryption and the relay server, and disable LAN searching.
Once you’ve got your profile(s) set, you can control which one(s) btsync
loads with the /etc/default/btsync
config file. By default it loads all the profiles in /etc/btsync
, but I want it to only load profiles I specifically request:
# just load gemma.conf, nothing else
AUTOSTART="gemma"
Wait wait wait
Make sure your profiles are readable by the user in DAEMON_UID
! The btsync
client is still pretty young, there’s not much (read: any) logging, and if it can’t read the configuration file, it’ll just fail silently.
$ sudo chown gemma:gemma /etc/btsync/gemma.conf
At the same time, the profile has your folder key in it, so protect it:
$ chmod 600 /etc/btsync/gemma.conf
Let ‘er rip
The btsync
package is automatically hooked into upstart
, so this part’s easy:
$ sudo service btsync start
* Starting P2P file synchronisation daemon(s)...
* Autostarting btsync instance 'gemma'
$ service btsync status
* BTSYNC 'gemma' is running
That’s it. The sync folder(s) listed in the gemma.conf
profile will now sync with any and every matching peer (in my case, a desktop, a laptop and a smartphone).
Happy syncing!
…
Gemma Lynn (@ellotheth) is a software engineer currently developing web applications for Social & Scientific Systems in Maryland. She’s a violinist and sci-fi geek who loves Linux, Halo and every score John Williams ever wrote. She blogs at www.ramblinations.com.