backup 3.1.3 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/lib/backup.rb +1 -0
- data/lib/backup/archive.rb +106 -79
- data/lib/backup/cli.rb +23 -4
- data/lib/backup/logger.rb +103 -59
- data/lib/backup/logger/console.rb +1 -1
- data/lib/backup/logger/logfile.rb +1 -1
- data/lib/backup/logger/syslog.rb +1 -1
- data/lib/backup/model.rb +3 -3
- data/lib/backup/notifier/mail.rb +84 -50
- data/lib/backup/storage/base.rb +10 -14
- data/lib/backup/storage/rsync.rb +232 -92
- data/lib/backup/syncer/base.rb +23 -8
- data/lib/backup/syncer/cloud/base.rb +4 -3
- data/lib/backup/syncer/cloud/cloud_files.rb +1 -1
- data/lib/backup/syncer/cloud/s3.rb +1 -1
- data/lib/backup/syncer/rsync/base.rb +13 -25
- data/lib/backup/syncer/rsync/local.rb +16 -30
- data/lib/backup/syncer/rsync/pull.rb +47 -11
- data/lib/backup/syncer/rsync/push.rb +167 -56
- data/lib/backup/utilities.rb +115 -104
- data/lib/backup/version.rb +1 -1
- data/templates/cli/archive +15 -7
- data/templates/cli/notifier/mail +1 -1
- data/templates/cli/storage/rsync +15 -7
- data/templates/cli/syncer/rsync_local +1 -1
- data/templates/cli/syncer/rsync_pull +10 -5
- data/templates/cli/syncer/rsync_push +10 -5
- metadata +7 -6
data/lib/backup/utilities.rb
CHANGED
@@ -8,10 +8,112 @@ module Backup
|
|
8
8
|
gzip bzip2 lzma pbzip2
|
9
9
|
mongo mongodump mysqldump pg_dump redis-cli riak-admin
|
10
10
|
gpg openssl
|
11
|
-
rsync
|
11
|
+
rsync ssh
|
12
12
|
}
|
13
13
|
|
14
|
-
module
|
14
|
+
module DSL
|
15
|
+
class << self
|
16
|
+
##
|
17
|
+
# Allow users to set the path for all utilities in the .configure block.
|
18
|
+
#
|
19
|
+
# Utility names with dashes ('redis-cli') will be set using method calls
|
20
|
+
# with an underscore ('redis_cli').
|
21
|
+
NAMES.each do |name|
|
22
|
+
define_method name.gsub('-', '_'), lambda {|val|
|
23
|
+
path = File.expand_path(val)
|
24
|
+
unless File.executable?(path)
|
25
|
+
raise Errors::Utilities::NotFoundError, <<-EOS
|
26
|
+
The path given for '#{ name }' was not found or not executable.
|
27
|
+
Path was: #{ path }
|
28
|
+
EOS
|
29
|
+
end
|
30
|
+
UTILITY[name] = path
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Allow users to set the +tar+ distribution if needed. (:gnu or :bsd)
|
36
|
+
def tar_dist(val)
|
37
|
+
Utilities.tar_dist(val)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class << self
|
43
|
+
##
|
44
|
+
# Configure the path to system utilities used by Backup.
|
45
|
+
#
|
46
|
+
# Backup will attempt to locate any required system utilities using a
|
47
|
+
# +which+ command call. If a utility can not be found, or you need to
|
48
|
+
# specify an alternate path for a utility, you may do so in your
|
49
|
+
# +config.rb+ file using this method.
|
50
|
+
#
|
51
|
+
# Backup supports both GNU and BSD utilities.
|
52
|
+
# While Backup uses these utilities in a manner compatible with either
|
53
|
+
# version, the +tar+ utility requires some special handling with respect
|
54
|
+
# to +Archive+s. Backup will attempt to detect if the +tar+ command
|
55
|
+
# found (or set here) is GNU or BSD. If for some reason this fails,
|
56
|
+
# this may be set using the +tar_dist+ command shown below.
|
57
|
+
#
|
58
|
+
# Backup::Utilities.configure do
|
59
|
+
# # General Utilites
|
60
|
+
# tar '/path/to/tar'
|
61
|
+
# tar_dist :gnu # or :bsd
|
62
|
+
# cat '/path/to/cat'
|
63
|
+
# split '/path/to/split'
|
64
|
+
# find '/path/to/find'
|
65
|
+
# xargs '/path/to/xargs'
|
66
|
+
#
|
67
|
+
# # Compressors
|
68
|
+
# gzip '/path/to/gzip'
|
69
|
+
# bzip2 '/path/to/bzip2'
|
70
|
+
# lzma '/path/to/lzma' # deprecated. use a Custom Compressor
|
71
|
+
# pbzip2 '/path/to/pbzip2' # deprecated. use a Custom Compressor
|
72
|
+
#
|
73
|
+
# # Database Utilities
|
74
|
+
# mongo '/path/to/mongo'
|
75
|
+
# mongodump '/path/to/mongodump'
|
76
|
+
# mysqldump '/path/to/mysqldump'
|
77
|
+
# pg_dump '/path/to/pg_dump'
|
78
|
+
# redis_cli '/path/to/redis-cli'
|
79
|
+
# riak_admin '/path/to/riak-admin'
|
80
|
+
#
|
81
|
+
# # Encryptors
|
82
|
+
# gpg '/path/to/gpg'
|
83
|
+
# openssl '/path/to/openssl'
|
84
|
+
#
|
85
|
+
# # Syncer and Storage
|
86
|
+
# rsync '/path/to/rsync'
|
87
|
+
# ssh '/path/to/ssh'
|
88
|
+
# end
|
89
|
+
#
|
90
|
+
# These paths may be set using absolute paths, or relative to the
|
91
|
+
# working directory when Backup is run.
|
92
|
+
#
|
93
|
+
# Note that many of Backup's components currently have their own
|
94
|
+
# configuration settings for utility paths. For instance, when configuring
|
95
|
+
# a +MySQL+ database backup, +mysqldump_utility+ may be used:
|
96
|
+
#
|
97
|
+
# database MySQL do |db|
|
98
|
+
# db.mysqldump_utility = '/path/to/mysqldump'
|
99
|
+
# end
|
100
|
+
#
|
101
|
+
# Use of these configuration settings will override the path set here.
|
102
|
+
# (The use of these may be deprecated in the future)
|
103
|
+
def configure(&block)
|
104
|
+
DSL.instance_eval(&block)
|
105
|
+
end
|
106
|
+
|
107
|
+
def tar_dist(val)
|
108
|
+
# the acceptance tests need to be able to reset this to nil
|
109
|
+
@gnu_tar = val.nil? ? nil : val == :gnu
|
110
|
+
end
|
111
|
+
|
112
|
+
def gnu_tar?
|
113
|
+
return @gnu_tar unless @gnu_tar.nil?
|
114
|
+
@gnu_tar = !!run("#{ utility(:tar) } --version").match(/GNU/)
|
115
|
+
end
|
116
|
+
|
15
117
|
private
|
16
118
|
|
17
119
|
##
|
@@ -100,112 +202,21 @@ module Backup
|
|
100
202
|
end
|
101
203
|
end
|
102
204
|
|
103
|
-
def gnu_tar?
|
104
|
-
Utilities.gnu_tar?
|
105
|
-
end
|
106
|
-
end # Helpers
|
107
|
-
|
108
|
-
class << self
|
109
|
-
include Helpers
|
110
|
-
|
111
|
-
##
|
112
|
-
# Configure the path to system utilities used by Backup.
|
113
|
-
#
|
114
|
-
# Backup will attempt to locate any required system utilities using a
|
115
|
-
# +which+ command call. If a utility can not be found, or you need to
|
116
|
-
# specify an alternate path for a utility, you may do so in your
|
117
|
-
# +config.rb+ file using this method.
|
118
|
-
#
|
119
|
-
# Backup supports both GNU and BSD utilities.
|
120
|
-
# While Backup uses these utilities in a manner compatible with either
|
121
|
-
# version, the +tar+ utility requires some special handling with respect
|
122
|
-
# to +Archive+s. Backup will attempt to detect if the +tar+ command
|
123
|
-
# found (or set here) is GNU or BSD. If for some reason this fails,
|
124
|
-
# this may be set using the +tar_dist+ command shown below.
|
125
|
-
#
|
126
|
-
# Backup::Utilities.configure do
|
127
|
-
# # General Utilites
|
128
|
-
# tar '/path/to/tar'
|
129
|
-
# tar_dist :gnu # or :bsd
|
130
|
-
# cat '/path/to/cat'
|
131
|
-
# split '/path/to/split'
|
132
|
-
# find '/path/to/find'
|
133
|
-
# xargs '/path/to/xargs'
|
134
|
-
#
|
135
|
-
# # Compressors
|
136
|
-
# gzip '/path/to/gzip'
|
137
|
-
# bzip2 '/path/to/bzip2'
|
138
|
-
# lzma '/path/to/lzma' # deprecated. use a Custom Compressor
|
139
|
-
# pbzip2 '/path/to/pbzip2' # deprecated. use a Custom Compressor
|
140
|
-
#
|
141
|
-
# # Database Utilities
|
142
|
-
# mongo '/path/to/mongo'
|
143
|
-
# mongodump '/path/to/mongodump'
|
144
|
-
# mysqldump '/path/to/mysqldump'
|
145
|
-
# pg_dump '/path/to/pg_dump'
|
146
|
-
# redis_cli '/path/to/redis-cli'
|
147
|
-
# riak_admin '/path/to/riak-admin'
|
148
|
-
#
|
149
|
-
# # Encryptors
|
150
|
-
# gpg '/path/to/gpg'
|
151
|
-
# openssl '/path/to/openssl'
|
152
|
-
#
|
153
|
-
# # Syncer and Storage
|
154
|
-
# rsync '/path/to/rsync'
|
155
|
-
# end
|
156
|
-
#
|
157
|
-
# These paths may be set using absolute paths, or relative to the
|
158
|
-
# working directory when Backup is run.
|
159
|
-
#
|
160
|
-
# Note that many of Backup's components currently have their own
|
161
|
-
# configuration settings for utility paths. For instance, when configuring
|
162
|
-
# a +MySQL+ database backup, +mysqldump_utility+ may be used:
|
163
|
-
#
|
164
|
-
# database MySQL do |db|
|
165
|
-
# db.mysqldump_utility = '/path/to/mysqldump'
|
166
|
-
# end
|
167
|
-
#
|
168
|
-
# Use of these configuration settings will override the path set here.
|
169
|
-
# (The use of these may be deprecated in the future)
|
170
|
-
def configure(&block)
|
171
|
-
instance_eval(&block)
|
172
|
-
end
|
173
|
-
|
174
|
-
def gnu_tar?
|
175
|
-
return @gnu_tar unless @gnu_tar.nil?
|
176
|
-
@gnu_tar = !!run("#{ utility(:tar) } --version").match(/GNU/)
|
177
|
-
end
|
178
|
-
|
179
|
-
private
|
180
|
-
|
181
|
-
##
|
182
|
-
# Allow users to set the path for all utilities in the .configure block.
|
183
|
-
#
|
184
|
-
# Utility names with dashes ('redis-cli') will be set using method calls
|
185
|
-
# with an underscore ('redis_cli').
|
186
|
-
NAMES.each do |name|
|
187
|
-
define_method name.gsub('-', '_'), lambda {|val|
|
188
|
-
path = File.expand_path(val)
|
189
|
-
unless File.executable?(path)
|
190
|
-
raise Errors::Utilities::NotFoundError, <<-EOS
|
191
|
-
The path given for '#{ name }' was not found or not executable.
|
192
|
-
Path was: #{ path }
|
193
|
-
EOS
|
194
|
-
end
|
195
|
-
UTILITY[name] = path
|
196
|
-
}
|
197
|
-
end
|
198
|
-
|
199
|
-
##
|
200
|
-
# Allow users to set the +tar+ distribution if needed. (:gnu or :bsd)
|
201
|
-
def tar_dist(val)
|
202
|
-
@gnu_tar = val == :gnu
|
203
|
-
end
|
204
|
-
|
205
205
|
def reset!
|
206
206
|
UTILITY.clear
|
207
207
|
@gnu_tar = nil
|
208
208
|
end
|
209
209
|
end
|
210
|
+
|
211
|
+
# Allows these utility methods to be included in other classes,
|
212
|
+
# while allowing them to be stubbed in spec_helper for all specs.
|
213
|
+
module Helpers
|
214
|
+
[:utility, :command_name, :run].each do |name|
|
215
|
+
define_method name, lambda {|arg| Utilities.send(name, arg) }
|
216
|
+
private name
|
217
|
+
end
|
218
|
+
private
|
219
|
+
def gnu_tar?; Utilities.gnu_tar?; end
|
220
|
+
end
|
210
221
|
end
|
211
222
|
end
|
data/lib/backup/version.rb
CHANGED
data/templates/cli/archive
CHANGED
@@ -1,21 +1,29 @@
|
|
1
1
|
##
|
2
2
|
# Archive [Archive]
|
3
3
|
#
|
4
|
-
# Adding a file:
|
4
|
+
# Adding a file or directory (including sub-directories):
|
5
5
|
# archive.add "/path/to/a/file.rb"
|
6
|
-
#
|
7
|
-
# Adding an directory (including sub-directories):
|
8
6
|
# archive.add "/path/to/a/directory/"
|
9
7
|
#
|
10
|
-
# Excluding a file:
|
8
|
+
# Excluding a file or directory (including sub-directories):
|
11
9
|
# archive.exclude "/path/to/an/excluded_file.rb"
|
10
|
+
# archive.exclude "/path/to/an/excluded_directory
|
11
|
+
#
|
12
|
+
# By default, relative paths will be relative to the directory
|
13
|
+
# where `backup perform` is executed, and they will be expanded
|
14
|
+
# to the root of the filesystem when added to the archive.
|
15
|
+
#
|
16
|
+
# If a `root` path is set, relative paths will be relative to the
|
17
|
+
# given `root` path and will not be expanded when added to the archive.
|
18
|
+
#
|
19
|
+
# archive.root '/path/to/archive/root'
|
12
20
|
#
|
13
|
-
#
|
14
|
-
#
|
21
|
+
# For more details, please see:
|
22
|
+
# https://github.com/meskyanichi/backup/wiki/Archives
|
15
23
|
#
|
16
24
|
archive :my_archive do |archive|
|
17
25
|
archive.add "/path/to/a/file.rb"
|
18
26
|
archive.add "/path/to/a/folder/"
|
19
27
|
archive.exclude "/path/to/a/excluded_file.rb"
|
20
|
-
archive.exclude "/path/to/a/excluded_folder
|
28
|
+
archive.exclude "/path/to/a/excluded_folder"
|
21
29
|
end
|
data/templates/cli/notifier/mail
CHANGED
data/templates/cli/storage/rsync
CHANGED
@@ -1,11 +1,19 @@
|
|
1
1
|
##
|
2
2
|
# RSync [Storage]
|
3
3
|
#
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
# The default `mode` is :ssh, which does not require the use
|
5
|
+
# of an rsync daemon on the remote. If you wish to connect
|
6
|
+
# directly to an rsync daemon, or via SSH using daemon features,
|
7
|
+
# :rsync_daemon and :ssh_daemon modes are also available.
|
8
|
+
#
|
9
|
+
# If no `host` is specified, the transfer will be a local
|
10
|
+
# operation. `mode` and `compress` will have no meaning.
|
11
|
+
#
|
12
|
+
# See the documentation on the Wiki for details.
|
13
|
+
# https://github.com/meskyanichi/backup/wiki/Storages
|
14
|
+
store_with RSync do |rsync|
|
15
|
+
rsync.mode = :ssh
|
16
|
+
rsync.host = "123.45.678.90"
|
17
|
+
rsync.path = "~/backups/"
|
18
|
+
rsync.compress = true
|
11
19
|
end
|
@@ -1,12 +1,17 @@
|
|
1
1
|
##
|
2
2
|
# RSync::Pull [Syncer]
|
3
3
|
#
|
4
|
+
# The default `mode` is :ssh, which does not require the use
|
5
|
+
# of an rsync daemon on the remote. If you wish to connect
|
6
|
+
# directly to an rsync daemon, or via SSH using daemon features,
|
7
|
+
# :rsync_daemon and :ssh_daemon modes are also available.
|
8
|
+
# See the documentation on the Wiki for details.
|
9
|
+
# https://github.com/meskyanichi/backup/wiki/Syncers
|
10
|
+
#
|
4
11
|
sync_with RSync::Pull do |rsync|
|
5
|
-
rsync.
|
6
|
-
rsync.
|
7
|
-
rsync.
|
8
|
-
rsync.password = "my_password"
|
9
|
-
rsync.path = "~/backups/"
|
12
|
+
rsync.mode = :ssh
|
13
|
+
rsync.host = "123.45.678.90"
|
14
|
+
rsync.path = "~/backups"
|
10
15
|
rsync.mirror = true
|
11
16
|
rsync.compress = true
|
12
17
|
|
@@ -1,12 +1,17 @@
|
|
1
1
|
##
|
2
2
|
# RSync::Push [Syncer]
|
3
3
|
#
|
4
|
+
# The default `mode` is :ssh, which does not require the use
|
5
|
+
# of an rsync daemon on the remote. If you wish to connect
|
6
|
+
# directly to an rsync daemon, or via SSH using daemon features,
|
7
|
+
# :rsync_daemon and :ssh_daemon modes are also available.
|
8
|
+
# See the documentation on the Wiki for details.
|
9
|
+
# https://github.com/meskyanichi/backup/wiki/Syncers
|
10
|
+
#
|
4
11
|
sync_with RSync::Push do |rsync|
|
5
|
-
rsync.
|
6
|
-
rsync.
|
7
|
-
rsync.
|
8
|
-
rsync.password = "my_password"
|
9
|
-
rsync.path = "~/backups/"
|
12
|
+
rsync.mode = :ssh
|
13
|
+
rsync.host = "123.45.678.90"
|
14
|
+
rsync.path = "~/backups"
|
10
15
|
rsync.mirror = true
|
11
16
|
rsync.compress = true
|
12
17
|
|
metadata
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael van Rooijen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 0.15.4
|
20
20
|
- - <
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.15.4
|
30
30
|
- - <
|
@@ -177,12 +177,12 @@ require_paths:
|
|
177
177
|
- lib
|
178
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
179
179
|
requirements:
|
180
|
-
- -
|
180
|
+
- - '>='
|
181
181
|
- !ruby/object:Gem::Version
|
182
182
|
version: '0'
|
183
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
184
184
|
requirements:
|
185
|
-
- -
|
185
|
+
- - '>='
|
186
186
|
- !ruby/object:Gem::Version
|
187
187
|
version: '0'
|
188
188
|
requirements: []
|
@@ -192,3 +192,4 @@ signing_key:
|
|
192
192
|
specification_version: 4
|
193
193
|
summary: Provides an elegant DSL in Ruby for performing backups on UNIX-like systems.
|
194
194
|
test_files: []
|
195
|
+
has_rdoc:
|