]> git.cworth.org Git - notmuch-wiki/blobdiff - remoteusage/aboriginal.mdwn
added #EOF to help noticing eos (helped to eat my own dogfood again)
[notmuch-wiki] / remoteusage / aboriginal.mdwn
index ef462dfee9159c60e757ec330b45a2016781e5a8..3d012b8eed684b115b2f2adc9b5820ff52d7831e 100644 (file)
@@ -11,51 +11,53 @@ its own connection. As long as master ssh connection is live, slave
 can use it. Disconnecting master all future attempts to connect
 from the script will fail.
 
 can use it. Disconnecting master all future attempts to connect
 from the script will fail.
 
+At the end of this document there is information for some possible ways
+how master ssh connection can be done.
+
 ## The script
 
 Write the following code to a file, for example `remote-notmuch.sh`.
 ## The script
 
 Write the following code to a file, for example `remote-notmuch.sh`.
-There is just one line to that normally needs configuration:
-
-        readonly SSH_CONTROL_SOCK='~'/.ssh/master-user@host:22
-
-the options howto are presented after the script.
 
 
-        #!/bin/bash
+       #!/bin/bash
 
 
-        # http://notmuchmail.org/remoteusage/aboriginal/
+       # http://notmuchmail.org/remoteusage/aboriginal/
 
 
-        set -eu
+       set -eu
+       # To trace execution, uncomment next line.
+       #BASH_XTRACEFD=6; exec 6>>remote-errors; echo -- >&6; set -x
 
 
-        readonly SSH_CONTROL_SOCK='~'/.ssh/master-user@host:22
+       readonly SSH_CONTROL_SOCK='~'/.ssh/master-user@host:22
 
 
-        readonly notmuch=notmuch
+       readonly notmuch=notmuch
 
 
-        printf -v ARGS '%q ' "$@" # bash feature
+       printf -v ARGS '%q ' "$@" # bash feature
 
 
-        readonly SSH_CONTROL_ARGS='-oControlMaster=no -S '$SSH_CONTROL_SOCK
+       readonly SSH_CONTROL_ARGS='-oControlMaster=no -S '$SSH_CONTROL_SOCK
 
 
-        if ssh $SSH_CONTROL_ARGS 0.1 $notmuch $ARGS 2>>/dev/null
-        then exit 0
-        else ev=$?
-        fi
+       if ssh -q $SSH_CONTROL_ARGS 0.1 $notmuch $ARGS
+       then exit 0
+       else ev=$?
+       fi
 
 
-        # continuing here in case ssh exited with nonzero value.
+       # continuing here in case ssh exited with nonzero value.
 
 
-        case $* in
-         'config get user.primary_email') echo 'nobody@nowhere.invalid'; exit 0 ;;
-         'config get user.name') echo 'nobody'; exit 0 ;;
-         'count'*) echo 1; exit 0 ;;
-         'search-tags'*) echo 'errors'; exit 0 ;;
-         'search'*'--output=tags'*) echo 'errors'; exit 0 ;;
-        esac
+       case $* in
+        'config get user.primary_email') echo 'nobody@nowhere.invalid'; exit 0 ;;
+        'config get user.name') echo 'nobody'; exit 0 ;;
+        'count'*'--batch'*) while read line; do echo 1; done; exit 0 ;;
+        'count'*) echo 1; exit 0 ;;
+        'search-tags'*) echo 'errors'; exit 0 ;;
+        'search'*'--output=tags'*) echo 'errors'; exit 0 ;;
+       esac
 
 
-        if ssh $SSH_CONTROL_ARGS -O check 0.1
-        then
-         echo ' Control socket is alive but something failed during data transmission.'
-         exit $ev
-        fi
+       if ssh $SSH_CONTROL_ARGS -O check 0.1
+       then
+        echo ' Control socket is alive but something failed during data transmission.'
+        exit $ev
+       fi
 
 
-        echo " See`sed '1d;2d;s/.//;q' "$0"` for help."
+       echo " See`sed '1d;2d;s/.//;q' "$0"` for help."
+       #EOF
 
 Note the `0.1` in ssh command line. It is used to avoid any opportunistic
 behaviour ssh might do; for example if control socket is not alive ssh
 
 Note the `0.1` in ssh command line. It is used to avoid any opportunistic
 behaviour ssh might do; for example if control socket is not alive ssh
@@ -67,17 +69,20 @@ address `0.1` is invalid this attempt will fail early.
 Easiest way to test this script is to run the pre-made ssh connection
 using the following command line:
 
 Easiest way to test this script is to run the pre-made ssh connection
 using the following command line:
 
-        ssh -M -S '~'/.ssh/master-user@host:22 [user@]remotehost
+        ssh -M -S '~'/.ssh/master-user@host:22 [user@]remotehost sleep 600
 
 (replace `[user@]remotehost` with your login info). Doing this the
 
 (replace `[user@]remotehost` with your login info). Doing this the
-above script can be run unmodified. After the above command has been
-run on one terminal, enter `chmod +x remote-notmuch.sh` in another
-terminal and then test the script with `./remote-notmuch.sh help`
+above wrapper script can be run unmodified. After the above command has
+been run on **one terminal**, enter `chmod +x remote-notmuch.sh` in
+**another terminal** and then test the script with
+
+        ./remote-notmuch.sh help
 
 
-Note that the '~' is inside single quotes for a reason. In this
-case shell never expand it to `$HOME` -- ssh does it by not reading
-`$HOME` but checking the real user home directory from `/etc/passewd`.
-For security purposes this is just how it should be.
+Note that the '~' in the ssh command line above is inside single quotes
+for a reason. In this case shell never expand it to `$HOME` -- ssh does
+it by not reading `$HOME` but checking the real user home directory
+from `/etc/passwd`.  For security purposes this is just how it should
+be.
 
 ## Tune
 
 
 ## Tune
 
@@ -105,11 +110,46 @@ to the `./remote-notmuch.sh` wrapper script testing with
 See the section *Configure Emacs on the client computer* in
 [[remoteusage|remoteusage]] how to do this. The instructions are the same.
 
 See the section *Configure Emacs on the client computer* in
 [[remoteusage|remoteusage]] how to do this. The instructions are the same.
 
-## Fun
 
 
-Original [BSD Licence](http://en.wikipedia.org/wiki/BSD_licenses)
-is 4-clause license.
-When 3 rd. clause was removed, the new license was not original anymore.
-Similarly, the requirement for this version are the same as in
-[[remoteusage|remoteusage]] page except the 3 rd. requirement
-(password-free login) is not effective here.
+## Creating master connection
+
+As mentioned so many times, using this solution requires one pre-made
+ssh connection in "master" mode. The simplest way is to dedicate one
+terminal for the connection with shell access to the remote machine:
+
+        ssh -M -S '~'/.ssh/master-user@host:22 [user@]remotehost
+
+One possibility is to have this dedicated terminal in a way that the
+connection has (for example 1 hour) timeout:
+
+        ssh -M -S '~'/.ssh/master-user@host:22 [user@]remotehost sleep 3600
+
+The above holds the terminal. The next alternative puts the command in
+background:
+
+        ssh -f -M -S '~'/.ssh/master-user@host:22 [user@]remotehost sleep 3600
+
+If you don't want this to timeout so soon, use a longer sleep, like 99999999
+(8 9:s, 1157 days, a bit more than 3 years).
+
+A more "exotic" solution would be to make a shell script running on remote
+machine, checking/inotifying when new mail arrives. When mail arrives it
+could send message back to local host, where a graphical client (to be written)
+pops up on display providing info about received mail (and exiting this
+graphical client connection to remote host is terminated).
+
+## Troubleshooting
+
+If you experience strange output when using from emacs first attempt to just
+run
+
+        ./remote-notmuch.sh help
+
+from command line and observe output. If it looks as it should be next uncomment
+the line
+
+        #BASH_XTRACEFD=6; exec 6>>remote-errors; echo -- >&6; set -x
+
+in `./remote-notmuch.sh` and attempt to use it from emacs again -- and then
+examine the contents of `remote-errors` in the working directory emacs was
+started.