aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2016-10-02 17:21:26 -0300
committerSilvio Rhatto <rhatto@riseup.net>2016-10-02 17:21:26 -0300
commit6d9d7b39bbf87b32a2e12fa6b29f463382c7027e (patch)
treece42a76278dddff07c24f8608b35255e705db1e1
parentab184775e79a780eb2a32d67260756d8a9b4258d (diff)
downloadpuppet-backup-6d9d7b39bbf87b32a2e12fa6b29f463382c7027e.tar.gz
puppet-backup-6d9d7b39bbf87b32a2e12fa6b29f463382c7027e.tar.bz2
Move scripts to the Hydra Suite
-rwxr-xr-xfiles/mount-media46
-rwxr-xr-xfiles/sync-backups74
-rwxr-xr-xfiles/sync-media270
-rwxr-xr-xfiles/sync-media-export37
-rwxr-xr-xfiles/sync-media-initremotes92
-rw-r--r--manifests/init.pp25
6 files changed, 13 insertions, 531 deletions
diff --git a/files/mount-media b/files/mount-media
deleted file mode 100755
index 0073292..0000000
--- a/files/mount-media
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/bash
-#
-# mount-media
-#
-
-# Parameters
-MEDIA="$1"
-VOLUME="$2"
-BASENAME="`basename $0`"
-MOUNTPOINT="/media/$MEDIA"
-
-# Check media config
-if [ -z "$MEDIA" ]; then
- echo "usage: $BASENAME <media> [volume]"
- echo "example: $BASENAME mymedia sdb1"
- exit 1
-fi
-
-# Check volume config
-if [ -z "$VOLUME" ]; then
- VOLUME="sdb1"
-fi
-
-DISK="`echo ${VOLUME} | sed -e s/[0-9]\$//g`"
-
-# Set sudo config
-if [ "`whoami`" != 'root' ]; then
- sudo="sudo"
-fi
-
-if [ "$BASENAME" == "mount-media" ]; then
- echo "Checking drive health status..."
- $sudo smartctl -H /dev/$DISK
- echo "Disabling STANDBY on drive..."
- $sudo sdparm --clear STANDBY -6 /dev/$DISK
- echo "Initializing crypto layer..."
- $sudo cryptsetup luksOpen /dev/$VOLUME $MEDIA && \
- echo "Checking filesystem..."
- $sudo fsck -v -y /dev/mapper/$MEDIA && \
- echo "Mounting volume at $MOUNTPOINT..."
- $sudo mkdir -p $MOUNTPOINT
- $sudo mount /dev/mapper/$MEDIA $MOUNTPOINT
-elif [ "$BASENAME" == "umount-media" ]; then
- $sudo umount $MOUNTPOINT && \
- $sudo cryptsetup luksClose $MEDIA
-fi
diff --git a/files/sync-backups b/files/sync-backups
deleted file mode 100755
index aa92754..0000000
--- a/files/sync-backups
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/bash
-#
-# sync a removable volume with system backups.
-#
-
-# Parameters.
-BASENAME="`basename $0`"
-VOLUME="$1"
-MEDIA="/media/$VOLUME"
-BWLIMIT=${BWLIMIT:=32000}
-IMAGES="/var/data/crypt/"
-RSYNC="ionice -c 3 nice -n 19 rsync -avH --delete --bwlimit=$BWLIMIT"
-CP="ionice -c 3 nice -n 19 cp"
-
-# Sync backups for a node.
-function sync_backups_node {
- if [ ! -z "$NODE" ]; then
- # Get full node hostname.
- NODE_HOSTNAME="`cat /var/vservers/$NODE/etc/hostname`"
- if [ -z "$NODE_HOSTNAME" ]; then
- NODE_HOSTNAME="$NODE"
- fi
-
- # Sync local encrypted backup.
- echo "Syncing /var/vservers/$NODE/var/backups/duplicity/..."
- mkdir -p /$MEDIA/$NODE_HOSTNAME/duplicity
- $RSYNC /var/vservers/$NODE/var/backups/duplicity/ /$MEDIA/$NODE_HOSTNAME/duplicity/
-
- # Sync remote backups.
- for node in `ls /var/vservers/$NODE/var/backups/remote/`; do
- echo "Syncing /var/vservers/$NODE/var/backups/remote/$node/..."
- mkdir -p /$MEDIA/$NODE_HOSTNAME/remote/$node
- $RSYNC /var/vservers/$NODE/var/backups/remote/$node/ /$MEDIA/$NODE_HOSTNAME/remote/$node/
- done
- else
- # Sync local encrypted backup.
- echo "Syncing /var/backups/duplicity/..."
- mkdir -p /$MEDIA/$HOSTNAME/duplicity
- $RSYNC /var/backups/duplicity/ /$MEDIA/$HOSTNAME/duplicity/
-
- # Sync remote backups.
- for node in `ls /var/backups/remote/`; do
- echo "Syncing /var/backups/remote/$node/..."
- mkdir -p /$MEDIA/$HOSTNAME/remote/$node/
- $RSYNC /var/backups/remote/$node/ /$MEDIA/$HOSTNAME/remote/$node/
- done
-
- # Copy encrypted images.
- if [ -d "$IMAGES" ]; then
- for image in `find $IMAGES -name '*.img' -type f`; do
- echo "Copying image to /$MEDIA/$HOSTNAME/images/`dirname $image`"
- mkdir -p /$MEDIA/$HOSTNAME/images/`dirname $image`
- $CP $image /$MEDIA/$HOSTNAME/images/`dirname $image`
- done
- fi
- fi
-}
-
-# Parsing.
-if [ -z "$VOLUME" ]; then
- echo "usage: $BASENAME <media> [nodes]"
- exit 1
-else
- shift
-fi
-
-# Sync backups for each node.
-if [ ! -z "$*" ]; then
- for NODE in $*; do
- sync_backups_node
- done
-else
- sync_backups_node
-fi
diff --git a/files/sync-media b/files/sync-media
deleted file mode 100755
index d610245..0000000
--- a/files/sync-media
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/bin/bash
-#
-# sync-media assets using git-annex
-#
-
-REMOTE="$1"
-VOLUME="/media/$REMOTE"
-DOMAIN="`facter domain`"
-HOST="`facter hostname`"
-CACHE="/var/cache/$HOST/media"
-MEDIA="media.$DOMAIN"
-INCOMING="$CACHE/incoming"
-WHOAMI="`whoami`"
-OPTIONS="$*"
-
-# Fix identity
-function sync_media_identity {
- if [ -z "`git config --local user.email`" ] || [ -z "`git config --local user.name`" ]; then
- repo="$(basename `pwd`)"
- git config user.name "${repo^} Archive"
- git config user.email "$repo@localhost"
- fi
-}
-
-# Add files into the annex
-function sync_media_add {
- git annex add .
-
- # Adding hidden files and symlinks, git+while version
- git status --porcelain -u | sed -e 's/?? //' | while read file; do
- if [ -h "$file" ]; then
- git add "$file"
- else
- git annex add "$file"
- fi
- done
-}
-
-# If there is a playlists folder, make sure mpd user can write to it
-function sync_media_playlist_perms {
- if [ -d "playlists" ]; then
- $sudo chmod 775 playlists
- $sudo chown -R mpd.audio playlists
- find playlists -type f -exec sudo chmod 664 {} \;
- find playlists -type d -exec sudo chmod 775 {} \;
- fi
-}
-
-# Fix incoming permissions
-function sync_media_incoming_perms {
- if [ -d "$INCOMING" ]; then
- echo "Fixing $INCOMING permissions..."
- $sudo find $INCOMING -type f -exec chmod 664 {} \;
- $sudo find $INCOMING -type d -exec chmod 775 {} \;
- $sudo chown -R $WHOAMI.incoming $INCOMING
- fi
-}
-
-# Run fsck
-function sync_media_fsck {
- if [ "$FSCK" == "true" ]; then
- git annex fsck --fast
- fi
-}
-
-# Run dropunused
-function sync_media_dropunused {
- if [ "$DROPUNUSED" == "true" ]; then
- git annex unused
- git annex dropunused 1-1000
- fi
-}
-
-# Get copies of annexed files
-function sync_media_get {
- local repo="$1"
- local numcopies
-
- if [ "`git -C $repo config sync-media.get`" != "false" ]; then
- if git -C $repo config sync-media.numcopies &> /dev/null; then
- numcopies="`git -C $repo config sync-media.numcopies`"
- else
- numcopies="3"
- fi
-
- git annex get . --numcopies=$numcopies
- fi
-}
-
-# Control whether the repository should have a copy of everything
-function sync_media_getall {
- local repo="$1"
-
- if [ "`git -C $repo config sync-media.getall`" == "true" ]; then
- git annex get .
- fi
-}
-
-# Ensure we have a reference to the remote repository
-function sync_media_ensure_remote {
- local remote="$1"
- local path="$2"
-
- if [ -z "$remote" ] || [ -z "$path" ]; then
- return
- fi
-
- # Check for local or remote repo
- if [ -z "$DRIVE" ]; then
- path="$REMOTE.$DOMAIN:$path"
- elif [ ! -d "$path/.git/annex" ]; then
- return
- fi
-
- if ! git remote | grep -q "^$remote$"; then
- echo git remote add $remote $path
- fi
-}
-
-# Set sudo config
-if [ "$WHOAMI" != 'root' ]; then
- sudo="sudo"
-else
- echo "Sorry, cannot run as root"
- exit 1
-fi
-
-# Set fsck config
-if echo $OPTIONS | grep -q -- "--fsck"; then
- FSCK="true"
-fi
-
-# Set unused config
-if echo $OPTIONS | grep -q -- "--dropunused"; then
- DROPUNUSED="true"
-fi
-
-# Set drive config
-if [ ! -z "$REMOTE" ]; then
- # Check storage media
- MOUNT="`mount | grep $VOLUME`"
- if [ ! -z "$MOUNT" ]; then
- DRIVE="$(basename `echo $MOUNT | awk '{ print $1 }'`)"
- fi
-fi
-
-# Commit changes
-if [ -d "$CACHE" ]; then
- # Fix cache permissions
- #echo "Fixing $CACHE permissions..."
- #$sudo find $CACHE -type f -exec chmod 644 {} \;
- #$sudo find $CACHE -type d -exec chmod 755 {} \;
-
- sync_media_incoming_perms
-
- # Add and update local repositories
- for folder in `ls $CACHE`; do
- if [ -d "$CACHE/$folder/.git/annex" ]; then
- if [ "`git -C $CACHE/$folder config sync-media.skip`" == "true" ]; then
- continue
- fi
-
- #if [ "`git -C $CACHE/$folder config sync-media.ready`" != "true" ]; then
- # echo "Skipping $CACHE/$folder: not sync-media ready, please config your repo."
- # continue
- #fi
-
- (
- cd $CACHE/$folder
- echo "Syncing $CACHE/$folder..."
-
- sync_media_playlist_perms
- sync_media_ensure_remote $REMOTE $VOLUME/$MEDIA/$folder
- sync_media_identity
- sync_media_add
- git annex sync
- sync_media_getall $CACHE/$folder
- sync_media_fsck
- sync_media_dropunused
- )
- fi
- done
-
- if [ ! -z "$DRIVE" ]; then
- if [ ! -d "$VOLUME/$MEDIA" ]; then
- echo "Folder $VOLUME/$MEDIA does not exist..."
- else
- for folder in `ls $CACHE`; do
- if [ -d "$CACHE/$folder/.git/annex" ]; then
- if [ "`git -C $CACHE/$folder config sync-media.skip`" == "true" ]; then
- continue
- fi
-
- #if [ "`git -C $CACHE/$folder config sync-media.ready`" != "true" ]; then
- # echo "Skipping $CACHE/$folder: not sync-media ready, please config your repo."
- # continue
- #fi
-
- if [ ! -d "$VOLUME/$MEDIA/$folder" ]; then
- (
- cd $VOLUME/$MEDIA
- echo "Initializing $VOLUME/$MEDIA/$folder..."
- git clone $CACHE/$folder && cd $folder && sync_media_identity && git annex init $DRIVE && \
- git remote rename origin $HOST && cd $CACHE/$folder && git remote add $DRIVE $VOLUME/$MEDIA/$folder
- )
- fi
- elif [ ! -d "$VOLUME/$MEDIA/$folder" ]; then
- if [ ! -e "$CACHE/$folder/.sync-media/skip" ]; then
- echo "Syncing $VOLUME/$MEDIA/$folder..."
- rsync -av --delete --exclude=.sync-media $CACHE/$folder/ $VOLUME/$MEDIA/$folder/
- fi
- fi
- done
- fi
- fi
-fi
-
-# Retrieve changes at media volumes
-if [ ! -z "$DRIVE" ] && [ -d "$VOLUME/$MEDIA" ]; then
- for folder in `ls $VOLUME/$MEDIA`; do
- if [ -d "$VOLUME/$MEDIA/$folder/.git/annex" ]; then
- if [ "`git -C $VOLUME/$MEDIA/$folder config sync-media.skip`" == "true" ]; then
- continue
- fi
-
- (
- cd $VOLUME/$MEDIA/$folder
- echo "Syncing $VOLUME/$MEDIA/$folder..."
-
- sync_media_ensure_remote $HOST $CACHE/$folder
- sync_media_playlist_perms
- sync_media_identity
- sync_media_add
- git annex sync
- sync_media_get $VOLUME/$MEDIA/$folder
- sync_media_getall $VOLUME/$MEDIA/$folder
- sync_media_fsck
- sync_media_dropunused
- #git annex drop --auto --numcopies=2
- )
- elif [ -d "$CACHE/$folder" ]; then
- if [ ! -e "$CACHE/$folder/.sync-media/skip" ]; then
- echo "Syncing $VOLUME/$MEDIA/$folder..."
- rsync -av --delete --exclude=.sync-media $CACHE/$folder/ $VOLUME/$MEDIA/$folder/
- fi
- fi
- done
-elif [ ! -z "$REMOTE" ]; then
- # Try to copy to a remote
- for folder in `ls $CACHE`; do
- if [ -d "$CACHE/$folder/.git/annex" ]; then
- if [ "`git -C $CACHE/$folder config sync-media.skip`" == "true" ]; then
- continue
- fi
-
- sync_media_ensure_remote $REMOTE $CACHE/$folder
-
- (
- cd $CACHE/$folder
- git annex copy . --to $REMOTE
- git annex sync
- )
- else
- if [ ! -e "$CACHE/$folder/.sync-media/skip" ]; then
- echo "Syncing $VOLUME/$MEDIA/$folder..."
- rsync -av --delete --exclude=.sync-media $CACHE/$folder/ $REMOTE.$DOMAIN:$CACHE/$folder/
- fi
- fi
- done
-fi
diff --git a/files/sync-media-export b/files/sync-media-export
deleted file mode 100755
index 7b47639..0000000
--- a/files/sync-media-export
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/bash
-#
-# Copy git-annex repositories to remote server.
-#
-
-# Parameters
-BASENAME="`basename $0`"
-DESTINATION="$1"
-DOMAIN="`facter DOMAIN`"
-MEDIA="/var/cache/media"
-
-# Syntax check
-if [ -z "$DESTINATION" ]; then
- echo "usage: $BASENAME <DESTINATION>"
- exit 1
-fi
-
-# Process each repository
-for file in `ls $MEDIA`; do
- if [ -d "$MEDIA/$file/.git/annex" ]; then
- (
- echo Processing "$MEDIA/$file..."
-
- cd $MEDIA
-
- if ssh $DESTINATION if [ -d \"/var/cache/media/$file\" ] \; then echo exists\; fi | grep -q exists; then
- echo "Remote $file already exists, skipping..."
- continue;
- fi
-
- git clone $file $file.git && \
- rsync -avz $file.git/ $DESTINATION:/var/cache/media/$file/ && \
- rm -rf $file.git
- echo ""
- )
- fi
-done
diff --git a/files/sync-media-initremotes b/files/sync-media-initremotes
deleted file mode 100755
index 839deea..0000000
--- a/files/sync-media-initremotes
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash
-#
-# Add git-annex remotes to repository in removable media or local cache.
-#
-
-# Parameters
-BASENAME="`basename $0`"
-VOLUME="$1"
-TYPES="$2"
-DOMAIN="`facter DOMAIN`"
-HOST="`facter hostname`"
-CACHES=""
-VOLUMES=""
-BOXES=""
-
-# Fix identity
-function sync_media_identity {
- if [ -z "`git config --local user.email`" ] || [ -z "`git config --local user.name`" ]; then
- repo="$(basename `pwd`)"
- git config user.name "${repo^} Archive"
- git config user.email "$repo@localhost"
- fi
-}
-
-# Syntax check
-if [ -z "$VOLUME" ]; then
- echo "usage: $BASENAME <volume> [<caches|volumes|boxes> [remotes]]"
- exit 1
-fi
-
-# Determine media folder
-if [ "$VOLUME" == "$HOST" ] || [ "$VOLUME" == "localhost" ]; then
- MEDIA="/var/cache/media"
-else
- MEDIA="/media/$VOLUME/media.$DOMAIN"
-fi
-
-# Determine remote type
-shift 2
-if [ "$TYPES" == 'caches' ]; then
- # Remotes are caches of local boxes
- CACHES="$*"
-elif [ "$TYPES" == 'volumes' ]; then
- # Remotes are removable media
- VOLUMES="$*"
-elif [ "$TYPES" == 'boxes' ]; then
- # Remotes are remote boxes
- BOXES="$*"
-fi
-
-# Process each repository
-for file in `ls $MEDIA`; do
- if [ -d "$MEDIA/$file/.git" ]; then
- (
- echo Processing "$MEDIA/$file..."
- cd $MEDIA/$file
- sync_media_identity
-
- if git remote | grep -q "^origin$"; then
- echo "Removing origin..."
- git remote rm origin
- fi
-
- if [ ! -d "$MEDIA/$file/.git/annex" ]; then
- git annex init $VOLUME
- fi
-
- for remote in $CACHES; do
- echo "Adding /var/cache/$remote/media/$file remote..."
- git remote add $remote /var/cache/$remote/media/$file
- done
-
- for remote in $VOLUMES; do
- echo "Adding /media/$remote/media.$DOMAIN/$file..."
- git remote add $remote /media/$remote/media.$DOMAIN/$file
- done
-
- for remote in $BOXES; do
- if ! echo $remote | grep -q '\.'; then
- host="$remote.$DOMAIN"
- else
- host="$remote"
- fi
-
- echo "Adding ssh://$host/var/cache/media/$file..."
- git remote add $remote ssh://$host/var/cache/media/$file
- done
-
- echo ""
- )
- fi
-done
diff --git a/manifests/init.pp b/manifests/init.pp
index b5ba119..e272b56 100644
--- a/manifests/init.pp
+++ b/manifests/init.pp
@@ -132,33 +132,34 @@ class backup(
require => Package['backupninja'],
}
+ # TODO: remove in the future
# sync-backups script
file { "/usr/local/sbin/sync-backups":
owner => root,
group => root,
mode => 0755,
- ensure => present,
- source => "puppet:///modules/backup/sync-backups",
+ ensure => absent,
}
+ # TODO: remove in the future
# sync-media script
file { "/usr/local/sbin/sync-media":
owner => root,
group => root,
mode => 0755,
- ensure => present,
- source => "puppet:///modules/backup/sync-media",
+ ensure => absent,
}
+ # TODO: remove in the future
# sync-media-export script
file { "/usr/local/sbin/sync-media-export":
owner => root,
group => root,
mode => 0755,
- ensure => present,
- source => "puppet:///modules/backup/sync-media-export",
+ ensure => absent,
}
+ # TODO: remove in the future
# sync-media-init script
file { "/usr/local/sbin/sync-media-init":
owner => root,
@@ -167,29 +168,29 @@ class backup(
ensure => absent,
}
+ # TODO: remove in the future
# sync-media-init script
file { "/usr/local/sbin/sync-media-initremotes":
owner => root,
group => root,
mode => 0755,
- ensure => present,
- source => "puppet:///modules/backup/sync-media-initremotes",
+ ensure => absent,
}
+ # TODO: remove in the future
# mount-media script
file { "/usr/local/sbin/mount-media":
owner => root,
group => root,
mode => 0755,
- ensure => present,
- source => "puppet:///modules/backup/mount-media",
+ ensure => absent,
}
+ # TODO: remove in the future
# umount-media script
file { "/usr/local/sbin/umount-media":
owner => root,
group => root,
- ensure => '/usr/local/sbin/mount-media',
- require => File['/usr/local/sbin/mount-media'],
+ ensure => absent,
}
}