X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=remoteusage.mdwn;h=2e867e2e4f3e140715b4336a5026607cc24bb597;hb=4f2481e3c1e193f931b015499040820e6ed0bdc2;hp=2e320ce6dec64b9000354e67eb0dd9ad9fb9930c;hpb=2aa041c1ddc2e62c09cc0f73dc5a0cb5ac90debe;p=obsolete%2Fnotmuch-wiki diff --git a/remoteusage.mdwn b/remoteusage.mdwn index 2e320ce..2e867e2 100644 --- a/remoteusage.mdwn +++ b/remoteusage.mdwn @@ -18,15 +18,20 @@ couple of common unix utilities (ssh and dtach). You will need to have the following items in place: 1. a working notmuch on one computer (let's call that computer -"server"). +"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.) -4. password-free login (public key authentication) from client to + +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 + +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.) @@ -37,47 +42,69 @@ 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" - SSH_SOCKET="/tmp/notmuch_ssh.socket" - NOTMUCH_REMOTE_BIN="notmuch" - DTACH="dtach" - DTACH_SOCKET="/tmp/notmuch_dtach.socket" - - check_for_socket () - { - [ -S "${SSH_SOCKET}" ] - } - - check_if_socket_alive () - { - timeout 1 $SSH_BIN -S ${SSH_SOCKET} $USER@$SSH_HOST true > /dev/null - } - - start_socket () - { - dtach_command="${DTACH} -n ${DTACH_SOCKET} ${SSH_BIN} -M -S ${SSH_SOCKET} ${USER}@${SSH_HOST}" - command -v ${DTACH} &>/dev/null && ${dtach_command} || - echo "${DTACH} not installed" - } - - notmuch_run () - { - check_for_socket || start_socket - CMD=$1 - shift - printf -v ARGS "%q " "$@" - $SSH_BIN -S $SSH_SOCKET $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN ${CMD} ${ARGS} - } - - notmuch_run $@ + #!/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.