diff --git a/Makefile b/Makefile index 24b9a2f289..b63714c124 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,10 @@ CFLAGS=-Wall GIT_ANNEX_TMP_BUILD_DIR?=tmp IGNORE=-ignore-package monads-fd -ignore-package monads-tf BASEFLAGS=-threaded -Wall $(IGNORE) -outputdir $(GIT_ANNEX_TMP_BUILD_DIR) -IUtility -FEATURES=-DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_OLD_YESOD + +# If you get build failures due to missing haskell libraries, +# you can turn off some of these features. +FEATURES=-DWITH_ASSISTANT -DWITH_S3 -DWITH_WEBAPP -DWITH_OLD_YESOD -DWITH_MULTICAST bins=git-annex mans=git-annex.1 git-annex-shell.1 diff --git a/debian/control b/debian/control index 89ca892834..da7ab1e701 100644 --- a/debian/control +++ b/debian/control @@ -38,6 +38,7 @@ Build-Depends: libghc-crypto-api-dev, libghc-hamlet-dev, libghc-clientsession-dev, + libghc-network-multicast-dev, ikiwiki, perlmagick, git, diff --git a/doc/design/assistant/pairing.mdwn b/doc/design/assistant/pairing.mdwn index f33c5e11de..32815698c8 100644 --- a/doc/design/assistant/pairing.mdwn +++ b/doc/design/assistant/pairing.mdwn @@ -3,11 +3,23 @@ have some way of pairing devices. It could work like this: -1. Prompt for the hostname (or do avahi local machine discovery). -2. Enable the two hosts to ssh to one-another and run git-annex shell. - (A tricky problem, if ssh keys need to be added to do that.) -3. Push over a clone of the repository. (Using git-annex-shell?) -4. Start [[syncing]]. +1. Prompt for the hostname, or do avahi local machine discovery, or use + ZeroMQ with IP multicast, or use haskell's `network-multicast`. That + last option seems to work best! +2. Let user pick host to pair with. Somehow authenticate that this is + the host they expected to pair with, and not an imposter. Probably + have the users enter a shared secret and use it to HMAC the ssh public + keys. +3. Exchange a hostname or IP address with the pair. Ideally, + use `.local`, as it'll work as long as both are on the same subnet. + If mDNS is not available, regular DNS or IP addresses might have + to be used, but will result in a more fragile pairing. Or perhaps + the assistant could broadcast itself queries for current IP addresses, + if connecting to a paired host fails. +4. Enable the two hosts to ssh to one-another and run git-annex shell. + (Set up per-host ssh keys.) +5. Pull over a clone of the repository. +6. Start [[syncing]]. Also look into the method used by diff --git a/doc/install.mdwn b/doc/install.mdwn index 31a5b15d3e..92b0897f41 100644 --- a/doc/install.mdwn +++ b/doc/install.mdwn @@ -65,6 +65,7 @@ libraries. To build and use git-annex by hand, you will need: * [crypto-api](http://hackage.haskell.org/package/crypto-api) * [hamlet](http://hackage.haskell.org/package/hamlet) * [clientsession](http://hackage.haskell.org/package/clientsession) + * [network-multicast](http://hackage.haskell.org/package/network-multicast) * Shell commands * [git](http://git-scm.com/) * [uuid](http://www.ossp.org/pkg/lib/uuid/) diff --git a/git-annex.cabal b/git-annex.cabal index dbe1806570..4407be3c9e 100644 --- a/git-annex.cabal +++ b/git-annex.cabal @@ -40,6 +40,9 @@ Flag Assistant Flag Webapp Description: Enable git-annex webapp +Flag Multicast + Description: Enable multicast pairing + Executable git-annex Main-Is: git-annex.hs Build-Depends: MissingH, hslogger, directory, filepath, @@ -75,13 +78,17 @@ Executable git-annex Build-Depends: dbus CPP-Options: -DWITH_DBUS - if flag(Webapp) + if flag(Webapp) && flag(Assistant) Build-Depends: yesod, yesod-static, case-insensitive, http-types, transformers, wai, wai-logger, warp, blaze-builder, blaze-html, crypto-api, hamlet, clientsession, template-haskell, yesod-default (>= 1.1.0), data-default CPP-Options: -DWITH_WEBAPP + if flag(Multicast) && flag(Webapp) + Build-Depends: network-multicast + CPP-Options: -DWITH_MULTICAST + if os(darwin) CPP-Options: -DOSX