]> git.cworth.org Git - obsolete/notmuch-wiki/blobdiff - remoteusage.mdwn
refer to the cli manpages from frontends
[obsolete/notmuch-wiki] / remoteusage.mdwn
index 2e320ce6dec64b9000354e67eb0dd9ad9fb9930c..2e867e2e4f3e140715b4336a5026607cc24bb597 100644 (file)
@@ -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
 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")
 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.
 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.)
 
 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.
 
 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.
 
 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.
 
        
 Save this to a file, "remote-notmuch.sh", in your path.