that computer "client")
3. `ssh` and `dtach` on your client computer. (TODO: Make dtach
-optional, or allow screen or tmux to be used instead.)
+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
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"
+ SOCKET_DIR="/tmp/notmuch_$(id -u)"
+ SSH_SOCKET="${SOCKET_DIR}/ssh.socket"
NOTMUCH_REMOTE_BIN="notmuch"
- DTACH="dtach"
- DTACH_SOCKET="/tmp/notmuch_dtach.socket"
+ DTACH="/usr/bin/dtach"
+ DTACH_SOCKET="${SOCKET_DIR}/dtach.socket"
- check_for_socket ()
+ check_for_socket_dir ()
{
- [ -S "${SSH_SOCKET}" ]
+ [ -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_if_socket_alive ()
+ check_for_socket ()
{
- timeout 1 $SSH_BIN -S ${SSH_SOCKET} $USER@$SSH_HOST true > /dev/null
+ [ -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} ||
- echo "${DTACH} not installed"
+ command -v ${DTACH} &>/dev/null && ${dtach_command}
}
notmuch_run ()
{
- check_for_socket || start_socket
- CMD=$1
- shift
+ 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 ${CMD} ${ARGS}
+ $SSH_BIN -S $SSH_SOCKET $USER@$SSH_HOST $NOTMUCH_REMOTE_BIN ${ARGS}
}
- notmuch_run $@
-
+ notmuch_run "$@"
Save this to a file, "remote-notmuch.sh", in your path.