]> git.cworth.org Git - obsolete/notmuch-wiki/blobdiff - remoteusage.mdwn
emacstips.mdwn: M-x delete-trailing-whitespace
[obsolete/notmuch-wiki] / remoteusage.mdwn
index 84b7c385ee8763752f89470b7c3acb58b85c5402..2e867e2e4f3e140715b4336a5026607cc24bb597 100644 (file)
@@ -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,43 +47,64 @@ 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.