ssfs annotate ssfs @ rev 3

Add ssfs the client cmdline tool
author Christophe Lincoln <pankso@slitaz.org>
date Sat Jun 11 08:41:34 2011 +0200 (2011-06-11)
parents
children b797bf51931e
rev   line source
pankso@3 1 #!/bin/sh
pankso@3 2 #
pankso@3 3 # SliTaz Secure File Storage. Fast live sync using: SSH, Rsync, Lsyncd.
pankso@3 4 # Configuration file is a LUA script in user space.
pankso@3 5 #
pankso@3 6 # Copyright (C) SliTaz GNU/Linux - BSD License
pankso@3 7 # Author: Christophe Lincoln <pankso@slitaz.org>
pankso@3 8 #
pankso@3 9
pankso@3 10 app=$(basename $0)
pankso@3 11 pid=$HOME/.local/var/run/$app.pid
pankso@3 12 logdir=$HOME/.local/var/log/$app
pankso@3 13 config=$HOME/.config/$app/client.lua
pankso@3 14
pankso@3 15 # Parse cmdline options.
pankso@3 16 for opt in $@
pankso@3 17 do
pankso@3 18 case "$opt" in
pankso@3 19 --login=*)
pankso@3 20 login=${opt#--login=} ;;
pankso@3 21 --host=*)
pankso@3 22 host=${opt#--host=} ;;
pankso@3 23 *)
pankso@3 24 continue ;;
pankso@3 25 esac
pankso@3 26 done
pankso@3 27
pankso@3 28 #
pankso@3 29 # Functions
pankso@3 30 #
pankso@3 31
pankso@3 32 # Built-in usage.
pankso@3 33 help() {
pankso@3 34 cat << EOT
pankso@3 35
pankso@3 36 $(echo -e "\033[1m$(gettext "Usage:")\033[0m") $app [command] [--option=]
pankso@3 37
pankso@3 38 $(echo -e "\033[1m$(gettext "Commands:")\033[0m")
pankso@3 39 help $(gettext "Display this short usage.")
pankso@3 40 info $(gettext "Display configuration settings.")
pankso@3 41 setup $(gettext "Setup client configuration and RSA key.")
pankso@3 42 sync $(gettext "Sync from server and start daemon.")
pankso@3 43 stop $(gettext "Stop monitoring ~/Sync folder.")
pankso@3 44
pankso@3 45 $(echo -e "\033[1m$(gettext "Options:")\033[0m")
pankso@3 46 --login= $(gettext "Login name on remote host.")
pankso@3 47 --host= $(gettext "Server host name or IP.")
pankso@3 48
pankso@3 49 EOT
pankso@3 50 }
pankso@3 51
pankso@3 52 # Display config settings.
pankso@3 53 config_info() {
pankso@3 54 [ ! -f "$config" ] && exit 0
pankso@3 55 fgrep '=' $config | sed s'/^ //'
pankso@3 56 }
pankso@3 57
pankso@3 58 # Create a Lua configuration file for lsyncd.
pankso@3 59 gen_config() {
pankso@3 60 mkdir -p $(dirname $config)
pankso@3 61 cat > $config << EOT
pankso@3 62 -- Configuration file for SliTaz Secure Filesystem lsyncd daemon.
pankso@3 63
pankso@3 64 sync {
pankso@3 65 default.rsyncssh,
pankso@3 66 source = "$HOME/Sync",
pankso@3 67 host = "$login@$host",
pankso@3 68 targetdir = "Sync/"
pankso@3 69 }
pankso@3 70 EOT
pankso@3 71 }
pankso@3 72
pankso@3 73 #
pankso@3 74 # Commands
pankso@3 75 #
pankso@3 76
pankso@3 77 case "$1" in
pankso@3 78 info)
pankso@3 79 size=$(du -sh $HOME/Sync | awk '{print $1}')
pankso@3 80 echo "" && config_info && echo ""
pankso@3 81 gettext "RSA key :"; echo " $HOME/.ssh/id_rsa"
pankso@3 82 gettext "Sync size :"; echo " $size"
pankso@3 83 echo "" ;;
pankso@3 84 setup)
pankso@3 85 # We need a login and host name or IP.
pankso@3 86 if [ -z "$login" ] || [ -z "$host" ]; then
pankso@3 87 gettext -e "\nUsage:"; echo -e \
pankso@3 88 " $(basename $0) setup --login=user --host=server\n" && exit 0
pankso@3 89 fi
pankso@3 90 gen_config
pankso@3 91 mkdir -p $logdir $(dirname $pid)
pankso@3 92
pankso@3 93 # Configure passwordless login via RSA key.
pankso@3 94 if [ ! -f "$HOME/.ssh/id_rsa" ]; then
pankso@3 95 mkdir -p $HOME/.ssh
pankso@3 96 ssh-keygen -b 2048 -f $HOME/.ssh/id_rsa -P ''
pankso@3 97 fi
pankso@3 98
pankso@3 99 # Upload key to the server.
pankso@3 100 gettext "Sending RSA secure key to:"; echo " $host"
pankso@3 101 cat $HOME/.ssh/id_rsa.pub | \
pankso@3 102 ssh $login@$host 'cat - >> ~/.ssh/authorized_keys' ;;
pankso@3 103 sync)
pankso@3 104 # Sync can be called at session startup or from cmdline to retrive
pankso@3 105 # files from the server.
pankso@3 106 [ ! -f "$config" ] && gettext -e "Missing config file\n" && exit 1
pankso@3 107 at=$(fgrep host $config | cut -d '"' -f 2)
pankso@3 108 login=${at%@*}
pankso@3 109 host=${at#*@}
pankso@3 110 gettext -e "\nSyncing from:"; echo " $login@$host"
pankso@3 111
pankso@3 112 # First sync host with server.
pankso@3 113 rsync -r -a -v -h -z -u --delete \
pankso@3 114 --log-file=$logdir/rsync.log \
pankso@3 115 -e "ssh -l $login" $host:~/Sync/ ~/Sync/ | \
pankso@3 116 sed -e "/^$/"d -e "/^.\/$/"d
pankso@3 117
pankso@3 118 # Monitor local folder if not yet running.
pankso@3 119 if [ ! -f "$pid" ]; then
pankso@3 120 gettext "Starting lsyncd daemon..."
pankso@3 121 lsyncd -pidfile $pid -log all -logfile $logdir/lsyncd.log $config
pankso@3 122 else
pankso@3 123 gettext "Lcyncd daemon running PID:"; echo " $(cat $pid)"
pankso@3 124 fi && echo "" ;;
pankso@3 125 stop)
pankso@3 126 # Kill daemon and remove pidfile.
pankso@3 127 [ ! -f "$pid" ] && gettext -e "Daemon is not running\n" && exit 0
pankso@3 128 kill=$(cat $pid)
pankso@3 129 gettext "Stopping"; echo "$app PID: $kill"
pankso@3 130 kill $kill && rm -f $pid ;;
pankso@3 131 *)
pankso@3 132 help ;;
pankso@3 133 esac
pankso@3 134 exit 0