X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=remoteusage.mdwn;h=e54d155327cf4481957c10534d4353985f44eba6;hb=d180d9ac638424ce594204c2a6d9923e169282b8;hp=84b7c385ee8763752f89470b7c3acb58b85c5402;hpb=ef4c8d8386797b8265765739ac924357a01db67a;p=obsolete%2Fnotmuch-wiki diff --git a/remoteusage.mdwn b/remoteusage.mdwn index 84b7c38..e54d155 100644 --- a/remoteusage.mdwn +++ b/remoteusage.mdwn @@ -24,7 +24,8 @@ You will need to have the following items in place: 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 @@ -46,50 +47,71 @@ over ssh. 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. 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. +usage. ##Configure your emacs client##