mirror of
https://codeberg.org/puppe/mpbackup.git
synced 2025-12-19 21:42:17 +01:00
Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cfba3f37c5 | |||
| b0973f25d7 | |||
| 84824aae02 | |||
| 0d98802d8a |
1 changed files with 21 additions and 18 deletions
39
mpbackup
39
mpbackup
|
|
@ -6,9 +6,7 @@ require 'yaml'
|
|||
|
||||
DEFAULT_CONFIG_FILE = Pathname.new('/etc/mpbackup/config.yaml')
|
||||
NAME = 'mpbackup'
|
||||
VERSION = '0.5.0'
|
||||
|
||||
$original_cache_home = ENV['XDG_CACHE_HOME']
|
||||
VERSION = '0.6.0'
|
||||
|
||||
def set_restic_vars(config)
|
||||
if config['repository-file']
|
||||
|
|
@ -25,9 +23,9 @@ def set_restic_vars(config)
|
|||
else
|
||||
password = STDIN.getpass('Please put in your restic password: ')
|
||||
end
|
||||
if config['cache-home']
|
||||
puts "Setting XDG_CACHE_HOME to #{config['cache-home']} …"
|
||||
ENV['XDG_CACHE_HOME'] = config['cache-home']
|
||||
if config['cache-dir']
|
||||
puts "Setting RESTIC_CACHE_DIR to #{config['cache-dir']} …"
|
||||
ENV['RESTIC_CACHE_DIR'] = config['cache-dir']
|
||||
end
|
||||
|
||||
ENV['RESTIC_REPOSITORY'] = repo
|
||||
|
|
@ -37,10 +35,12 @@ end
|
|||
def unset_restic_vars
|
||||
ENV.delete('RESTIC_REPOSITORY')
|
||||
ENV.delete('RESTIC_PASSWORD')
|
||||
if $original_cache_home
|
||||
ENV['XDG_CACHE_HOME'] = $original_cache_home
|
||||
else
|
||||
ENV.delete('XDG_CACHE_HOME')
|
||||
ENV.delete('RESTIC_CACHE_DIR')
|
||||
end
|
||||
|
||||
def set_restic_path(config)
|
||||
if !config.key? 'restic-path'
|
||||
config['restic-path'] = 'restic'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -49,9 +49,9 @@ def error(exit_status, message)
|
|||
exit exit_status
|
||||
end
|
||||
|
||||
def check
|
||||
def check(config)
|
||||
puts 'Checking restic repo …'
|
||||
check_command = ['restic', 'check']
|
||||
check_command = [config['restic-path'], 'check']
|
||||
puts("Command: #{check_command.join(' ')}")
|
||||
system(*check_command)
|
||||
if $?.exitstatus > 0
|
||||
|
|
@ -62,24 +62,26 @@ end
|
|||
def backup(config)
|
||||
puts "Backing up with restic …"
|
||||
# https://restic.readthedocs.io/en/latest/040_backup.html#including-and-excluding-files
|
||||
flags = config['backup'].select{|k,v| k != 'exclude' && k != 'paths'}
|
||||
flags = config['backup'].select{|k,v|
|
||||
k != 'exclude' && k != 'paths' && k != 'tags'}
|
||||
flags = flags.map{|k,v| "--#{k}=#{v.to_s}"}
|
||||
exclude = config.dig('backup', 'exclude')&.flat_map{|e| ['--exclude', e]} || []
|
||||
tags = config.dig('backup', 'tags')&.flat_map{|t| ['--tag', t]} || []
|
||||
paths = config.dig('backup', 'paths') || []
|
||||
backup_command = ['restic', 'backup', *exclude, *paths, *flags]
|
||||
backup_command = [config['restic-path'], 'backup', *exclude, *paths, *flags]
|
||||
puts("Command: #{backup_command.join(' ')}")
|
||||
system(*backup_command)
|
||||
if $?.exitstatus > 0
|
||||
error(1, 'Failed to do backup.')
|
||||
end
|
||||
|
||||
check
|
||||
check(config)
|
||||
|
||||
if config.dig('forget', 'enable')
|
||||
puts 'Forgetting unnecessary snapshots …'
|
||||
flags = config['forget'].select{|k,v| k != 'enable'}
|
||||
flags = flags.flat_map{|k,v| ['--' + k, v.to_s]}
|
||||
forget_command = ['restic', 'forget'] + flags
|
||||
forget_command = [config['restic-path'], 'forget'] + flags
|
||||
puts("Command: #{forget_command.join(' ')}")
|
||||
system(*forget_command)
|
||||
# Data will only be deleted when `restic prune` is executed or when
|
||||
|
|
@ -92,7 +94,7 @@ end
|
|||
|
||||
def prune(config)
|
||||
puts 'Pruning restic repo …'
|
||||
prune_command = ['restic', 'prune']
|
||||
prune_command = [config['restic-path'], 'prune']
|
||||
puts("Command: #{prune_command.join(' ')}")
|
||||
system(*prune_command)
|
||||
if $?.exitstatus > 0
|
||||
|
|
@ -105,12 +107,13 @@ end
|
|||
def run_restic(config)
|
||||
puts 'Executing restic with the following arguments …'
|
||||
puts "ARGV: #{ARGV}"
|
||||
exec('restic', *ARGV)
|
||||
exec(config['restic-path'], *ARGV)
|
||||
end
|
||||
|
||||
def act(config, options)
|
||||
puts "Applying configuration ‘#{config['name']}’ …"
|
||||
set_restic_vars(config)
|
||||
set_restic_path(config)
|
||||
if options[:prune]
|
||||
prune config
|
||||
elsif options[:run_restic]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue