From 659dfa8c0a3ef6eac1404417e855d2bcbbf3bc1b Mon Sep 17 00:00:00 2001 From: cryobry <38270216+cryobry@users.noreply.github.com> Date: Mon, 13 Jul 2020 13:08:46 -0400 Subject: [PATCH] Generalize a bit and add license --- install.sh | 55 +++++++++++++++++-------- rsync-to-picture-frame.service.original | 10 ----- rsync-to-picture-frame.sh.original | 32 -------------- rsync-to-picture-frame.timer.original | 10 ----- 4 files changed, 38 insertions(+), 69 deletions(-) delete mode 100644 rsync-to-picture-frame.service.original delete mode 100644 rsync-to-picture-frame.sh.original delete mode 100644 rsync-to-picture-frame.timer.original diff --git a/install.sh b/install.sh index 05e7f44..add1e34 100755 --- a/install.sh +++ b/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 +# 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 diff --git a/rsync-to-picture-frame.service.original b/rsync-to-picture-frame.service.original deleted file mode 100644 index 0be12fa..0000000 --- a/rsync-to-picture-frame.service.original +++ /dev/null @@ -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 diff --git a/rsync-to-picture-frame.sh.original b/rsync-to-picture-frame.sh.original deleted file mode 100644 index a8aab21..0000000 --- a/rsync-to-picture-frame.sh.original +++ /dev/null @@ -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 $? diff --git a/rsync-to-picture-frame.timer.original b/rsync-to-picture-frame.timer.original deleted file mode 100644 index e26c5f0..0000000 --- a/rsync-to-picture-frame.timer.original +++ /dev/null @@ -1,10 +0,0 @@ -[Unit] -Description="Transfer photos to picture frame hourly" - -[Timer] -OnBootSec=1min -OnCalendar={{on_calendar}} -Persistent=true - -[Install] -WantedBy=timers.target