ssfs annotate ssfs @ rev 109
Remove ashism ==
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Tue Feb 26 12:27:01 2019 +0100 (2019-02-26) |
parents | 4937afb8ea05 |
children |
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@84 | 14 key=$HOME/.ssh/id_rsa |
pankso@3 | 15 |
pankso@73 | 16 # Internationalization |
pankso@73 | 17 . /usr/bin/gettext.sh |
pankso@73 | 18 TEXTDOMAIN='ssfs' |
pankso@73 | 19 export TEXTDOMAIN |
pankso@73 | 20 |
pankso@3 | 21 # Parse cmdline options. |
pankso@3 | 22 for opt in $@ |
pankso@3 | 23 do |
pankso@3 | 24 case "$opt" in |
pankso@3 | 25 --login=*) |
pankso@3 | 26 login=${opt#--login=} ;; |
pankso@3 | 27 --host=*) |
pankso@3 | 28 host=${opt#--host=} ;; |
pankso@3 | 29 *) |
pankso@3 | 30 continue ;; |
pankso@3 | 31 esac |
pankso@3 | 32 done |
pankso@3 | 33 |
pankso@3 | 34 # |
pankso@3 | 35 # Functions |
pankso@3 | 36 # |
pankso@3 | 37 |
pankso@3 | 38 # Built-in usage. |
pankso@3 | 39 help() { |
pankso@3 | 40 cat << EOT |
pankso@3 | 41 |
pankso@3 | 42 $(echo -e "\033[1m$(gettext "Usage:")\033[0m") $app [command] [--option=] |
pankso@3 | 43 |
pankso@3 | 44 $(echo -e "\033[1m$(gettext "Commands:")\033[0m") |
pankso@60 | 45 help $(gettext "Display this short help usage.") |
pankso@3 | 46 info $(gettext "Display configuration settings.") |
pankso@3 | 47 setup $(gettext "Setup client configuration and RSA key.") |
pankso@3 | 48 sync $(gettext "Sync from server and start daemon.") |
pankso@3 | 49 stop $(gettext "Stop monitoring ~/Sync folder.") |
pankso@57 | 50 login $(gettext "Connect to remote host via SSH.") |
pankso@3 | 51 |
pankso@3 | 52 $(echo -e "\033[1m$(gettext "Options:")\033[0m") |
pankso@3 | 53 --login= $(gettext "Login name on remote host.") |
pankso@3 | 54 --host= $(gettext "Server host name or IP.") |
pankso@3 | 55 |
pankso@3 | 56 EOT |
pankso@3 | 57 } |
pankso@3 | 58 |
pankso@3 | 59 # Display config settings. |
pankso@3 | 60 config_info() { |
pankso@3 | 61 [ ! -f "$config" ] && exit 0 |
pankso@3 | 62 fgrep '=' $config | sed s'/^ //' |
pankso@3 | 63 } |
pankso@3 | 64 |
pankso@3 | 65 # Create a Lua configuration file for lsyncd. |
pankso@3 | 66 gen_config() { |
pankso@3 | 67 mkdir -p $(dirname $config) |
pankso@3 | 68 cat > $config << EOT |
pankso@73 | 69 -- Configuration file for SliTaz Secure File Storage lsyncd daemon. |
pankso@3 | 70 |
pankso@3 | 71 sync { |
pankso@3 | 72 default.rsyncssh, |
pankso@3 | 73 source = "$HOME/Sync", |
pankso@3 | 74 host = "$login@$host", |
pankso@3 | 75 targetdir = "Sync/" |
pankso@3 | 76 } |
pankso@3 | 77 EOT |
pankso@3 | 78 } |
pankso@3 | 79 |
pankso@55 | 80 get_config() { |
pankso@55 | 81 at=$(fgrep host $config | cut -d '"' -f 2) |
pankso@55 | 82 login=${at%@*} |
pankso@55 | 83 host=${at#*@} |
pankso@55 | 84 } |
pankso@55 | 85 |
pankso@3 | 86 # |
pankso@3 | 87 # Commands |
pankso@3 | 88 # |
pankso@3 | 89 |
pankso@3 | 90 case "$1" in |
pankso@3 | 91 info) |
pankso@3 | 92 size=$(du -sh $HOME/Sync | awk '{print $1}') |
pankso@3 | 93 echo "" && config_info && echo "" |
pankso@84 | 94 gettext "RSA key :"; echo " $key" |
pankso@3 | 95 gettext "Sync size :"; echo " $size" |
pankso@3 | 96 echo "" ;; |
pankso@3 | 97 setup) |
pankso@3 | 98 # We need a login and host name or IP. |
pankso@3 | 99 if [ -z "$login" ] || [ -z "$host" ]; then |
pankso@74 | 100 gettext "Usage:"; echo -e \ |
pankso@3 | 101 " $(basename $0) setup --login=user --host=server\n" && exit 0 |
pankso@3 | 102 fi |
pankso@3 | 103 gen_config |
pankso@3 | 104 mkdir -p $logdir $(dirname $pid) |
pankso@3 | 105 |
pankso@3 | 106 # Configure passwordless login via RSA key. |
pankso@84 | 107 if [ ! -f "$key" ]; then |
pankso@84 | 108 mkdir -p $(dirname $key) |
pankso@84 | 109 ssh-keygen -b 2048 -f $key -P '' |
pankso@3 | 110 fi |
pankso@50 | 111 echo "" |
pankso@3 | 112 |
pankso@3 | 113 # Upload key to the server. |
pankso@3 | 114 gettext "Sending RSA secure key to:"; echo " $host" |
paul@59 | 115 gettext "Please enter your Ssfs password." |
pankso@50 | 116 echo -e "\n" |
pankso@84 | 117 cat $key.pub | \ |
pankso@18 | 118 ssh $login@$host 'cat - >> ~/.ssh/authorized_keys' || exit 1 |
pankso@18 | 119 gettext "Client is setup you can now sync"; echo ;; |
pankso@3 | 120 sync) |
paul@97 | 121 # Sync can be called at session startup or from cmdline to retrieve |
pankso@3 | 122 # files from the server. |
pankso@74 | 123 [ ! -f "$config" ] && gettext "Missing config file" && \ |
pankso@74 | 124 echo "" && exit 1 |
pankso@3 | 125 at=$(fgrep host $config | cut -d '"' -f 2) |
pankso@3 | 126 login=${at%@*} |
pankso@3 | 127 host=${at#*@} |
pankso@74 | 128 echo "" && gettext "Syncing from:"; echo " $login@$host" |
pankso@84 | 129 |
pankso@84 | 130 # Clean logs. |
pankso@84 | 131 echo "" > $logdir/lsyncd.log |
pankso@84 | 132 echo "" > $logdir/rsync.log |
pankso@3 | 133 |
pankso@84 | 134 # First sync client with server. |
pankso@3 | 135 rsync -r -a -v -h -z -u --delete \ |
pankso@3 | 136 --log-file=$logdir/rsync.log \ |
pankso@3 | 137 -e "ssh -l $login" $host:~/Sync/ ~/Sync/ | \ |
pankso@3 | 138 sed -e "/^$/"d -e "/^.\/$/"d |
pankso@3 | 139 |
pankso@84 | 140 # Monitor local folder. |
pankso@71 | 141 killall lsyncd 2>/dev/null |
pankso@68 | 142 gettext "Starting lsyncd daemon..." |
pankso@84 | 143 lsyncd -pidfile $pid -log scarce -logfile $logdir/lsyncd.log $config |
pankso@84 | 144 echo -e "\n" ;; |
pankso@3 | 145 stop) |
pankso@3 | 146 # Kill daemon and remove pidfile. |
pankso@77 | 147 [ ! -s "$pid" ] && gettext "Daemon is not running" && \ |
pankso@74 | 148 echo "" && exit 0 |
pankso@70 | 149 kill=$(cat $pid) |
pankso@43 | 150 gettext "Stopping"; echo " $app PID: $kill" |
pankso@70 | 151 kill $kill 2>/dev/null |
pankso@44 | 152 rm -f $pid ;; |
pankso@57 | 153 login) |
pankso@55 | 154 # Connect user to Ssfs server via SSH. |
pankso@55 | 155 get_config |
pankso@55 | 156 ssh $login@$host ;; |
pankso@3 | 157 *) |
pankso@3 | 158 help ;; |
pankso@3 | 159 esac |
pankso@3 | 160 exit 0 |