Browse Source

Generalize a bit and add license

cryobry 3 years ago
parent
commit
659dfa8c0a

+ 38 - 17
install.sh

@@ -1,20 +1,41 @@
 #!/usr/bin/env bash
+# This script will install a systemd service and timer to mount a remote ftp share, rsync a directory to it, and then unmount the share
+# I'm using this to sync photos to a digital picture frame
+#
+# Copyright (c) 2020 Bryan Roessler <bryanroessler@gmail.com>
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+#
 debug="off" # turn "on" for debugging
 # IMPORTANT OPTIONS #
+service_name="rsync-to-picture-frame" # use something specific and memorable
 frame_address="192.168.1.100:2221" # you can find this on the frame, best to make static
-source_dir="$HOME/Pictures/picture_frame" # source pictures directory
-
+source_dir="$HOME/Pictures/picture_frame" # source pictures/content from this directory
 # Less important options
-user="$(whoami)" # default run as current user
-user_id="$(id -u)"
-group_id="$(id -g)"
-script_dir="$PWD" # where to copy the script to, default is $PWD
-dest_dir="/media/picture_frame_ftp" # the ftp mount path
-temp_dir="/tmp/picture_frame_ftp" # ftp does not support rsync temp files
+user="$(id -un)" # default run as current user
+user_id="$(id -u)" # default run as current user
+group_id="$(id -g)" # default run as current user
+script_dir="$PWD" # where to copy the script to, default is $PWD (created automatically if missing)
+mount_dir="/media/picture_frame_ftp" # directory to mount the ftp share to (created automatically if missing)
+temp_dir="/tmp/picture_frame_ftp" # ftp does not support rsync temp files (created automatically if missing)
 # Service settings
 service_dir="$HOME/.config/systemd/user"
-service_name="rsync-to-picture-frame"
-on_calendar="hourly"
+on_calendar="hourly" # how often to mount and sync
 # END USER OPTIONS #
 
 # if debug is on, echo additional output
@@ -124,16 +145,16 @@ main() {
   systemctl --user disable --now "$service_name.timer" &> /dev/null
   
   # Unmount existing ftp share
-  mountpoint -q -- "$dest_dir" && fusermount -u "$dest_dir"
+  mountpoint -q -- "$mount_dir" && fusermount -u "$mount_dir"
 
   # Create directories
-  mk_dir "$source_dir" "$dest_dir" "$service_dir" "$script_dir"
-  chown_dir "$source_dir" "$dest_dir" "$service_dir" "$script_dir"
+  mk_dir "$source_dir" "$mount_dir" "$service_dir" "$script_dir"
+  chown_dir "$source_dir" "$mount_dir" "$service_dir" "$script_dir"
 
   # Copy script file
-  cp_file "$service_name.sh.original" "$script_dir/$service_name.sh"
+  cp_file "original.sh" "$script_dir/$service_name.sh"
   make_exec "$script_dir/$service_name.sh"
-  f_and_r "{{ftp_mount_path}}" "$dest_dir" "$script_dir/$service_name.sh"
+  f_and_r "{{mount_dir}}" "$mount_dir" "$script_dir/$service_name.sh"
   f_and_r "{{source_dir}}" "$source_dir" "$script_dir/$service_name.sh"
   f_and_r "{{frame_address}}" "$frame_address" "$script_dir/$service_name.sh"
   f_and_r "{{user_id}}" "$user_id" "$script_dir/$service_name.sh"
@@ -141,11 +162,11 @@ main() {
   f_and_r "{{temp_dir}}" "$temp_dir" "$script_dir/$service_name.sh"
   
   # Copy service file
-  cp_file "$service_name.service.original" "$service_dir/$service_name.service"
+  cp_file "original.service" "$service_dir/$service_name.service"
   f_and_r "{{path_to_script}}" "$script_dir/$service_name.sh" "$service_dir/$service_name.service"
 
   # Copy timer file
-  cp_file "$service_name.timer.original" "$service_dir/$service_name.timer"
+  cp_file "original.timer" "$service_dir/$service_name.timer"
   f_and_r "{{on_calendar}}" "$on_calendar" "$service_dir/$service_name.timer"
 
   # Enable timer

+ 0 - 10
rsync-to-picture-frame.service.original

@@ -1,10 +0,0 @@
-[Unit]
-Description="Mount picture frame ftp and rsync photo directory"
-After=network-online.target
-Wants=network-online.target
-
-[Service]
-ExecStart={{path_to_script}}
-
-[Install]
-WantedBy=multi-user.target

+ 0 - 32
rsync-to-picture-frame.sh.original

@@ -1,32 +0,0 @@
-#!/usr/bin/env bash
-# This script will mount mom's photo frame ftp share locally
-# Use install.sh to change settings
-
-# if the mount already exists, unmount it
-mountpoint -q -- "{{ftp_mount_path}}" && fusermount -u "{{ftp_mount_path}}"
-
-# make temp directory (ftp does not support rsync temp files)
-[[ ! -d "{{temp_dir}}" ]] && mkdir -p "{{temp_dir}}"
-
-# Mount it and rsync over the photos
-if curlftpfs -o uid={{user_id}},gid={{group_id}} "{{frame_address}}" "{{ftp_mount_path}}"; then
-  if ! rsync -r --delete --quiet --temp-dir="{{temp_dir}}" "{{source_dir}}/" "{{ftp_mount_path}}"; then
-    echo "rsync -r --delete --quiet {{source_dir}}/ {{ftp_mount_path}} failed!"
-    exit 1
-  fi
-  if ! fusermount -u "{{ftp_mount_path}}"; then
-    echo "Could not unmount {{ftp_mount_path}}"
-    exit 1
-  fi
-else
-  echo "Could not mount Mom's picture frame"
-  if ping -c 1 "{{frame_address}}"; then
-    echo "Ping OK, check the photo frame settings or the filesystem"
-    exit 1
-  else
-    echo "Could not ping the photo frame, is it on?"
-    exit 1
-  fi
-fi
-
-exit $?

+ 0 - 10
rsync-to-picture-frame.timer.original

@@ -1,10 +0,0 @@
-[Unit]
-Description="Transfer photos to picture frame hourly"
-
-[Timer]
-OnBootSec=1min
-OnCalendar={{on_calendar}}
-Persistent=true
-
-[Install]
-WantedBy=timers.target