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 |