ssfs annotate ssfs @ rev 66

Add some doc and few small fixes
author Christophe Lincoln <pankso@slitaz.org>
date Mon Jun 13 18:30:46 2011 +0200 (2011-06-13)
parents 8554492c73b1
children 5940e1d51942
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@60 39 help $(gettext "Display this short help 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@57 44 login $(gettext "Connect to remote host via SSH.")
pankso@3 45
pankso@3 46 $(echo -e "\033[1m$(gettext "Options:")\033[0m")
pankso@3 47 --login= $(gettext "Login name on remote host.")
pankso@3 48 --host= $(gettext "Server host name or IP.")
pankso@3 49
pankso@3 50 EOT
pankso@3 51 }
pankso@3 52
pankso@3 53 # Display config settings.
pankso@3 54 config_info() {
pankso@3 55 [ ! -f "$config" ] && exit 0
pankso@3 56 fgrep '=' $config | sed s'/^ //'
pankso@3 57 }
pankso@3 58
pankso@3 59 # Create a Lua configuration file for lsyncd.
pankso@3 60 gen_config() {
pankso@3 61 mkdir -p $(dirname $config)
pankso@3 62 cat > $config << EOT
pankso@3 63 -- Configuration file for SliTaz Secure Filesystem lsyncd daemon.
pankso@3 64
pankso@3 65 sync {
pankso@3 66 default.rsyncssh,
pankso@3 67 source = "$HOME/Sync",
pankso@3 68 host = "$login@$host",
pankso@3 69 targetdir = "Sync/"
pankso@3 70 }
pankso@3 71 EOT
pankso@3 72 }
pankso@3 73
pankso@55 74 get_config() {
pankso@55 75 at=$(fgrep host $config | cut -d '"' -f 2)
pankso@55 76 login=${at%@*}
pankso@55 77 host=${at#*@}
pankso@55 78 }
pankso@55 79
pankso@3 80 #
pankso@3 81 # Commands
pankso@3 82 #
pankso@3 83
pankso@3 84 case "$1" in
pankso@3 85 info)
pankso@3 86 size=$(du -sh $HOME/Sync | awk '{print $1}')
pankso@3 87 echo "" && config_info && echo ""
pankso@3 88 gettext "RSA key :"; echo " $HOME/.ssh/id_rsa"
pankso@3 89 gettext "Sync size :"; echo " $size"
pankso@3 90 echo "" ;;
pankso@3 91 setup)
pankso@3 92 # We need a login and host name or IP.
pankso@3 93 if [ -z "$login" ] || [ -z "$host" ]; then
pankso@3 94 gettext -e "\nUsage:"; echo -e \
pankso@3 95 " $(basename $0) setup --login=user --host=server\n" && exit 0
pankso@3 96 fi
pankso@3 97 gen_config
pankso@3 98 mkdir -p $logdir $(dirname $pid)
pankso@3 99
pankso@3 100 # Configure passwordless login via RSA key.
pankso@3 101 if [ ! -f "$HOME/.ssh/id_rsa" ]; then
pankso@3 102 mkdir -p $HOME/.ssh
pankso@3 103 ssh-keygen -b 2048 -f $HOME/.ssh/id_rsa -P ''
pankso@3 104 fi
pankso@50 105 echo ""
pankso@3 106
pankso@3 107 # Upload key to the server.
pankso@3 108 gettext "Sending RSA secure key to:"; echo " $host"
paul@59 109 gettext "Please enter your Ssfs password."
pankso@50 110 echo -e "\n"
pankso@3 111 cat $HOME/.ssh/id_rsa.pub | \
pankso@18 112 ssh $login@$host 'cat - >> ~/.ssh/authorized_keys' || exit 1
pankso@18 113 gettext "Client is setup you can now sync"; echo ;;
pankso@3 114 sync)
pankso@3 115 # Sync can be called at session startup or from cmdline to retrive
pankso@3 116 # files from the server.
pankso@3 117 [ ! -f "$config" ] && gettext -e "Missing config file\n" && exit 1
pankso@3 118 at=$(fgrep host $config | cut -d '"' -f 2)
pankso@3 119 login=${at%@*}
pankso@3 120 host=${at#*@}
pankso@3 121 gettext -e "\nSyncing from:"; echo " $login@$host"
pankso@3 122
pankso@3 123 # First sync host with server.
pankso@3 124 rsync -r -a -v -h -z -u --delete \
pankso@3 125 --log-file=$logdir/rsync.log \
pankso@3 126 -e "ssh -l $login" $host:~/Sync/ ~/Sync/ | \
pankso@3 127 sed -e "/^$/"d -e "/^.\/$/"d
pankso@3 128
pankso@3 129 # Monitor local folder if not yet running.
pankso@66 130 if [ ! -s "$pid" ]; then
pankso@3 131 gettext "Starting lsyncd daemon..."
pankso@3 132 lsyncd -pidfile $pid -log all -logfile $logdir/lsyncd.log $config
pankso@3 133 else
pankso@3 134 gettext "Lcyncd daemon running PID:"; echo " $(cat $pid)"
pankso@3 135 fi && echo "" ;;
pankso@3 136 stop)
pankso@3 137 # Kill daemon and remove pidfile.
pankso@3 138 [ ! -f "$pid" ] && gettext -e "Daemon is not running\n" && exit 0
pankso@3 139 kill=$(cat $pid)
pankso@43 140 gettext "Stopping"; echo " $app PID: $kill"
pankso@44 141 kill $kill 2>/dev/null
pankso@44 142 rm -f $pid ;;
pankso@57 143 login)
pankso@55 144 # Connect user to Ssfs server via SSH.
pankso@55 145 get_config
pankso@55 146 ssh $login@$host ;;
pankso@3 147 *)
pankso@3 148 help ;;
pankso@3 149 esac
pankso@3 150 exit 0