X-Git-Url: https://git.cworth.org/git?p=notmuch-wiki;a=blobdiff_plain;f=remoteusage-old.mdwn;fp=remoteusage-old.mdwn;h=e54d155327cf4481957c10534d4353985f44eba6;hp=0000000000000000000000000000000000000000;hb=10fa1f4d654b5ea021b28e27d50bd156431c3060;hpb=d38c66d73f4da53ebe05379e5078c7573bd50e75 diff --git a/remoteusage-old.mdwn b/remoteusage-old.mdwn new file mode 100644 index 0000000..e54d155 --- /dev/null +++ b/remoteusage-old.mdwn @@ -0,0 +1,129 @@ +[[!img notmuch-logo.png alt="Notmuch logo" class="left"]] +#Using notmuch remotely# + +##Why?## +It is hard to keep nomuch tags in sync across multiple instances of +notmuch, on multiple computers. Though you can do this with "notmuch +dump" and "notmuch restore", it is often preferable to be able to use +notmuch on a remote computer as if it were present on a local +computer. + +The following guidelines show how I have accomplished this. It isn't +perfect, but it works pretty well, and allows me to access notmuch on +my home computer, using only an emacs client on my netbook or work +computer, a trivial shell script, a few settings in my .emacs, and a +couple of common unix utilities (ssh and dtach). + +##What you will need## +You will need to have the following items in place: + +1. a working notmuch on one computer (let's call that computer +"server"). + +2. a working notmuch emacs interface on another computer (let's call +that computer "client") + +3. `ssh` and `dtach` on your client computer. (TODO: Make dtach +optional, or allow screen or tmux to be used instead. +[[Here|remotewrapper]] is a version that does not require dtach.) + +4. password-free login (public key authentication) from client to +server. [Here](http://www.debian-administration.org/articles/152) is a +good page on how to set it up. + +5. a reasonably fast connection. (This isn't really *neccessary*, but +if your connection is too slow, this won't be very pleasant to use, +and certainly won't seem transparent.) + + +##Write a wrapper shell script## + +Now we will need to write a simple shell script that does two things: + +1. replaces the call to the notmuch binary with a call to notmuch +over ssh. + +2. sets up a running, detached, ssh connection to the server, so that +future calls can reuse the socket. + + #!/usr/bin/env bash + + SSH_BIN="ssh" + USER="example_user" + SSH_HOST="example.com" + SOCKET_DIR="/tmp/notmuch_$(id -u)" + SSH_SOCKET="${SOCKET_DIR}/ssh.socket" + NOTMUCH_REMOTE_BIN="notmuch" + DTACH="/usr/bin/dtach" + DTACH_SOCKET="${SOCKET_DIR}/dtach.socket" + + check_for_socket_dir () + { + [ -d "${SOCKET_DIR}" ] + } + + check_socket_dir_owner_and_perm () + { + [ "$(stat -c %U ${SOCKET_DIR})" = "$(whoami)" ] && + [ "$(stat -c %a ${SOCKET_DIR})" = "700" ] + } + + create_socket_dir () + { + mkdir "${SOCKET_DIR}" + chmod 700 "${SOCKET_DIR}" + } + + check_for_socket () + { + [ -S "${SSH_SOCKET}" ] + } + + start_socket () + { + dtach_command="${DTACH} -n ${DTACH_SOCKET} ${SSH_BIN} -M -S ${SSH_SOCKET} ${USER}@${SSH_HOST}" + command -v ${DTACH} &>/dev/null && ${dtach_command} + } + + notmuch_run () + { + if check_for_socket_dir; then + if check_socket_dir_owner_and_perm; then + if ! check_for_socket; then + start_socket + fi + else echo "Wrong permissions of ${SOCKET_DIR}" >&2 + exit 1 + fi + elif create_socket_dir; then + start_socket + else + exit 1 + fi + printf -v ARGS "%q " "$@" + $SSH_BIN -S $SSH_SOCKET $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN ${ARGS} + } + + notmuch_run "$@" + +Save this to a file, "remote-notmuch.sh", in your path. + +Now you can run "remote-notmuch.sh new". You can call the script +anything you like. I actually have $HOME/bin/notmuch linked to that +script, so I can have transparent +usage. + +##Configure your emacs client## + +The only thing you need to do is tell your emacs client to use the +script. Add the following to your .emacs (this is on your client +machine): + + (setq notmuch-command "/path/to/your/remote-notmuch.sh") + +##Problems## +Some things probably won't work perfectly, and there might be some unexpected +mismatches between normal usage and this sort of usage. If you're +using this approach and run into any problems, please feel free to +list them here. And, of course, if you improve on any of these +approaches, please do edit this page and let people know!