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