spez_,

Here’s mine:

shared.sh

<pre style="background-color:#ffffff;">
<span style="font-style:italic;color:#969896;">#!/bin/bash
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Sources to be backed up
</span><span style="color:#323232;">SOURCES</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">(
</span><span style="color:#323232;">    </span><span style="color:#183691;">"/srv/dev-disk-by-uuid-a57d5696-00fk-4d1c-9885-095ad5cf71ba/Stuff/"
</span><span style="color:#323232;">)
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Restic configurations
</span><span style="color:#323232;">RESTIC_CONFIG_LOCATION</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"/srv/dev-disk-by-uuid-a77de696-04f9-4d1c-9875-055advcf71ba/Stuff/Projects/Setup/Backups/restic-config"
</span><span style="color:#323232;">RESTIC_REPO</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"/srv/dev-disk-by-uuid-25EE65533BB23C37/restic/repo"
</span><span style="color:#323232;">RESTIC_PASSWORD_FILE</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_CONFIG_LOCATION</span><span style="color:#183691;">}/config/password.txt"
</span><span style="color:#323232;">RESTIC_EXCLUDE_FILE</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_CONFIG_LOCATION</span><span style="color:#183691;">}/config/excludes.txt"
</span><span style="color:#323232;">RESTIC_LOG_LOCATION</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_CONFIG_LOCATION</span><span style="color:#183691;">}/logs"
</span><span style="color:#323232;">RESTIC_LOCK_LOCATION</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_REPO</span><span style="color:#183691;">}/locks"
</span><span style="color:#323232;">RESTIC_MOUNT_LOCATION</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"/srv/dev-disk-by-uuid-28EE65538BB23J37/restic/mount"
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># RClone configurations
</span><span style="color:#323232;">RCLONE_CONFIG</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_CONFIG_LOCATION</span><span style="color:#183691;">}/config/rclone.conf"
</span><span style="color:#323232;">RCLONE_REPO</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"bucket:restic-backup"
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">function </span><span style="font-weight:bold;color:#795da3;">unlock-repo</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">if </span><span style="color:#62a35c;">[[ </span><span style="color:#323232;">$(ls -A ${RESTIC_LOCK_LOCATION}) </span><span style="color:#62a35c;">]] </span><span style="font-weight:bold;color:#a71d5d;">; then
</span><span style="color:#323232;">        restic -r ${RESTIC_REPO} unlock --password-file</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RESTIC_PASSWORD_FILE}
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">fi
</span><span style="color:#323232;">}
</span>

backup.sh

<pre style="background-color:#ffffff;">
<span style="font-style:italic;color:#969896;">#!/usr/bin/env bash
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Get the directory this script is from, and then source the
</span><span style="font-style:italic;color:#969896;"># shared.sh shell script for the environment variables and
</span><span style="font-style:italic;color:#969896;"># functions
</span><span style="color:#323232;">BASEDIR</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">$(</span><span style="color:#323232;">dirname </span><span style="color:#183691;">"$</span><span style="color:#323232;">0</span><span style="color:#183691;">")
</span><span style="color:#62a35c;">source </span><span style="color:#183691;">"${</span><span style="color:#323232;">BASEDIR</span><span style="color:#183691;">}/shared.sh"
</span><span style="color:#323232;">
</span><span style="color:#323232;">RESTIC_LOG_FILE</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_LOG_LOCATION</span><span style="color:#183691;">}/log-backup.txt"
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Backs up the sources to the local Restic repository
</span><span style="font-weight:bold;color:#a71d5d;">function </span><span style="font-weight:bold;color:#795da3;">backup</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    </span><span style="font-style:italic;color:#969896;"># Get the latest saved parent snapshot ID
</span><span style="color:#323232;">    </span><span style="font-weight:bold;color:#a71d5d;">local </span><span style="color:#323232;">short_id</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">$(</span><span style="color:#323232;">restic -r </span><span style="color:#183691;">${</span><span style="color:#323232;">RESTIC_REPO</span><span style="color:#183691;">}</span><span style="color:#323232;"> --password-file</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">${</span><span style="color:#323232;">RESTIC_PASSWORD_FILE</span><span style="color:#183691;">}</span><span style="color:#323232;"> --json</span><span style="color:#183691;"> snapshots </span><span style="font-weight:bold;color:#a71d5d;">| </span><span style="color:#323232;">jq -r </span><span style="color:#183691;">'max_by(.time) | .short_id')
</span><span style="color:#323232;">    </span><span style="font-style:italic;color:#969896;"># Back up and log the results
</span><span style="color:#323232;">    (
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        date
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        restic -r ${RESTIC_REPO} backup ${SOURCES[@]} --exclude-file</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RESTIC_EXCLUDE_FILE} --password-file</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RESTIC_PASSWORD_FILE} --parent ${short_id} --compression max
</span><span style="color:#323232;">    ) </span><span style="font-weight:bold;color:#a71d5d;">>></span><span style="color:#323232;">${RESTIC_LOG_FILE}
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">function </span><span style="font-weight:bold;color:#795da3;">main</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    unlock-repo
</span><span style="color:#323232;">    backup
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="color:#323232;">main $@
</span>

validate.sh

<pre style="background-color:#ffffff;">
<span style="font-style:italic;color:#969896;">#!/usr/bin/env bash
</span><span style="color:#323232;">
</span><span style="color:#323232;">BASEDIR</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">$(</span><span style="color:#323232;">dirname </span><span style="color:#183691;">"$</span><span style="color:#323232;">0</span><span style="color:#183691;">")
</span><span style="color:#62a35c;">source </span><span style="color:#183691;">"${</span><span style="color:#323232;">BASEDIR</span><span style="color:#183691;">}/shared.sh"
</span><span style="color:#323232;">
</span><span style="color:#323232;">RESTIC_LOG_FILE</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_LOG_LOCATION</span><span style="color:#183691;">}/log-validate.txt"
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Validates the local Restic repository.
</span><span style="font-weight:bold;color:#a71d5d;">function </span><span style="font-weight:bold;color:#795da3;">validate-locally</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    (
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        date
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        restic -r ${RESTIC_REPO} check --read-data --password-file</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RESTIC_PASSWORD_FILE}
</span><span style="color:#323232;">    ) </span><span style="font-weight:bold;color:#a71d5d;">>></span><span style="color:#323232;">${RESTIC_LOG_FILE}
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">function </span><span style="font-weight:bold;color:#795da3;">main</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    unlock-repo
</span><span style="color:#323232;">    validate-locally
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="color:#323232;">main $@
</span>

sync.sh

<pre style="background-color:#ffffff;">
<span style="font-style:italic;color:#969896;">#!/usr/bin/env bash
</span><span style="color:#323232;">
</span><span style="color:#323232;">BASEDIR</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">$(</span><span style="color:#323232;">dirname </span><span style="color:#183691;">"$</span><span style="color:#323232;">0</span><span style="color:#183691;">")
</span><span style="color:#62a35c;">source </span><span style="color:#183691;">"${</span><span style="color:#323232;">BASEDIR</span><span style="color:#183691;">}/shared.sh"
</span><span style="color:#323232;">
</span><span style="color:#323232;">RESTIC_LOG_FILE</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#183691;">"${</span><span style="color:#323232;">RESTIC_LOG_LOCATION</span><span style="color:#183691;">}/log-sync.txt"
</span><span style="color:#323232;">
</span><span style="font-style:italic;color:#969896;"># Syncs the local Restic repository to the cloud provider, under the 'Restic' folder.
</span><span style="font-weight:bold;color:#a71d5d;">function </span><span style="font-weight:bold;color:#795da3;">cloud-sync</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    (
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        date
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">        </span><span style="color:#62a35c;">echo
</span><span style="color:#323232;">    ) </span><span style="font-weight:bold;color:#a71d5d;">>></span><span style="color:#323232;">${RESTIC_LOG_FILE}
</span><span style="color:#323232;">    rclone -v sync ${RESTIC_REPO} ${RCLONE_REPO} --config</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RCLONE_CONFIG} --log-file</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RESTIC_LOG_FILE} --b2-hard-delete
</span><span style="color:#323232;">    rclone cleanup ${RCLONE_REPO} --config</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RCLONE_CONFIG} --log-file</span><span style="font-weight:bold;color:#a71d5d;">=</span><span style="color:#323232;">${RESTIC_LOG_FILE}
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="font-weight:bold;color:#a71d5d;">function </span><span style="font-weight:bold;color:#795da3;">main</span><span style="color:#323232;">() {
</span><span style="color:#323232;">    cloud-sync
</span><span style="color:#323232;">}
</span><span style="color:#323232;">
</span><span style="color:#323232;">main $@
</span>
  • All
  • Subscribed
  • Moderated
  • Favorites
  • random
  • wartaberita
  • uselessserver093
  • Food
  • aaaaaaacccccccce
  • [email protected]
  • test
  • CafeMeta
  • testmag
  • MUD
  • RhythmGameZone
  • RSS
  • dabs
  • TheResearchGuardian
  • Ask_kbincafe
  • KbinCafe
  • Testmaggi
  • Socialism
  • feritale
  • oklahoma
  • SuperSentai
  • KamenRider
  • All magazines