summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2011-12-09 13:31:23 -0400
committerGravatar Joey Hess <joey@kitenet.net>2011-12-09 13:31:23 -0400
commit7b72524ebdcff735b3d6f2bdcefbc155a716460b (patch)
treeb570a43e0c27eb4d2b098c4aaa8aa3768d74eb8c
parent14e9b87d44831fe0b6510422ffb4266f253496d7 (diff)
parente664af5d8cf310ac3dcb7e27a5a6846360917fbf (diff)
Merge remote-tracking branch 'origin/master'
-rw-r--r--doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.mdwn72
1 files changed, 72 insertions, 0 deletions
diff --git a/doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.mdwn b/doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.mdwn
new file mode 100644
index 000000000..8fb2bf9db
--- /dev/null
+++ b/doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.mdwn
@@ -0,0 +1,72 @@
+## Intro
+
+This tip is based on my (Matt Ford) experience of using `git annex` with my out-and-about netbook which hits many different wifi networks and has no fixed home or address.
+
+I'm not using a bare repository that allows pushing (an alternative solution) nor do I fancy allowing `git push` to run against my desktop checked out repository (perhaps I worry over nothing?)
+
+None of this is really `git annex` specific but I think it is useful to know...
+
+## Dealing with no fixed hostname
+
+Essentially set up two repos as per the [[walkthrough]].
+
+Desktop as follows:
+
+ cd ~/annex
+ git init
+ git annex init "desktop"
+
+And the laptop like this
+
+ git clone ssh://desktop/annex
+ git init
+ git annex init "laptop"
+
+Now we want to add the the repos as remotes of each other.
+
+For the laptop it is easy:
+
+ git remote add desktop ssh://desktop/~/annex
+
+However for the desktop to add an ever changing laptops hostname it's a little tricky. We make use of remote SSH tunnels to do this. Essentially we have the laptop (which always knows it's own name and address and knows the address of the desktop) create a tunnel starting on an arbitrary port at the desktop and heads back to the laptop on it's own SSH server port (22).
+
+To do this make part of your laptop's SSH config look like this:
+
+ Host desktop
+ User matt
+ HostName desktop.example.org
+ RemoteForward 2222 localhost:22
+
+Now on the desktop to connect over the tunnel to the laptop's SSH port you need this:
+
+ Host laptop
+ User matt
+ HostName localhost
+ port 2222
+
+So to add the desktop's remote:
+
+a) From the laptop ensure the tunnel is up
+
+ ssh desktop
+
+b) From the desktop add the remote
+
+ git remote add laptop ssh://laptop/~/annex
+
+So now you can work on the train, pop on the wifi at work upon arrival, and sync up with a `git pull && git annex get`.
+
+An alternative solution may be to use direct tunnels over Openvpn.
+
+## Optimising SSH
+
+Running a `git annex get .`, at least in the version I have, creates a new SSH connection for every file transfer (maybe this should be a feature request?)
+
+Lot's of new small files in an _annex_ cause lot's of connections to be made quickly: this is an relatively expensive overhead and is enough for connection limiting to start in my case. The process can be made much faster by using SSH's connection sharing capabilities. An SSH config like this should do it:
+
+ # Global Settings
+ ControlMaster auto
+ ControlPersist 30
+ ControlPath ~/.ssh/master-%r@%h:%p
+
+This will create a master connection for sharing if one isn't present, maintain it for 30 seconds after closing down the connection (just-in-cases') and automatically use the master connection for subsequent connections. Wins all round!