astrails-safe 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (8) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +132 -0
  3. data/Rakefile +59 -0
  4. data/VERSION.yml +4 -0
  5. metadata +23 -21
  6. data/README +0 -13
  7. data/safe.gemspec +0 -37
  8. data/templates/script.rb +0 -109
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Astrails Ltd.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,132 @@
1
+ = astrails-safe
2
+
3
+ Simple mysql and filesystem backups with S3 support (with optional encryption)
4
+
5
+ Usage:
6
+ astrails-safe [OPTIONS] CONFIG_FILE
7
+ Options:
8
+ -h, --help This help screen
9
+ -v, --verbose be verbose, duh!
10
+ -n, --dry-run just pretend, don't do anything.
11
+ -L, --local skip S3
12
+
13
+ Note: CONFIG_FILE will be created from template if missing
14
+
15
+ If you want to encrypt your backups you have 2 options:
16
+ * use simple password encryption
17
+ * use GPG public key encryption
18
+
19
+ For simple password, just add password entry in gpg section.
20
+ For public key encryption you will need to create a public/secret keypair.
21
+
22
+ We recommend to create your GPG keys only on your local machine and then
23
+ transfer your public key to the server that will do the backups.
24
+
25
+ This way the server will only know how to encrypt the backups but only you
26
+ will be able to decrypt them using the secret key you have locally. Of course
27
+ you MUST backup your backup encryption key :)
28
+ We recommend also pringing the hard paper copy of your GPG key 'just in case'.
29
+
30
+ The procedure to create and transfer the key is as follows:
31
+
32
+ 1. run 'gpg --gen-gen' on your local machine and follow onscreen instructions to create the key
33
+ (you can accept all the defaults).
34
+
35
+ 2. extract your public key into a file (assuming you used test@example.com as your key email):
36
+ gpg -a --export test@example.com > test@example.com.pub
37
+
38
+ 3. transfer public key to the server
39
+ scp backup@example.com root@example.com:
40
+
41
+ 4. import public key on the remote system:
42
+ $ gpg --import test@example.com.pub
43
+ gpg: key 45CA9403: public key "Test Backup <test@example.com>" imported
44
+ gpg: Total number processed: 1
45
+ gpg: imported: 1
46
+
47
+ 5. since we don't keep the secret part of the key on the remote server, gpg has
48
+ no way to know its yours and can be trusted.
49
+ To fix that we can sign it with other trusted key, or just directly modify its
50
+ trust level in gpg (use level 5):
51
+
52
+ $ gpg --edit-key test@example.com
53
+ ...
54
+ Command> trust
55
+ ...
56
+ 1 = I don't know or won't say
57
+ 2 = I do NOT trust
58
+ 3 = I trust marginally
59
+ 4 = I trust fully
60
+ 5 = I trust ultimately
61
+ m = back to the main menu
62
+
63
+ Your decision? 5
64
+ ...
65
+ Command> quit
66
+
67
+ 6. export your secret key for backup
68
+ (we recommend to print it on paper and burn to a CD/DVD and store in a safe place):
69
+
70
+ gpg -a --export-secret-key test@example.com > test@example.com.key
71
+
72
+
73
+ Example configuration:
74
+
75
+ safe do
76
+ local :path => "/backup/:kind/:id"
77
+
78
+ s3 do
79
+ key "...................."
80
+ secret "........................................"
81
+ bucket "backup.astrails.com"
82
+ path "servers/alpha/:kind/:id"
83
+ end
84
+
85
+ gpg do
86
+ # symmetric encryption key
87
+ # password "qwe"
88
+
89
+ # public GPG key (must be known to GPG, i.e. be on the keyring)
90
+ key "backup@astrails.com"
91
+ end
92
+
93
+ keep do
94
+ local 2
95
+ s3 2
96
+ end
97
+
98
+ mysqldump do
99
+ options "-ceKq --single-transaction --create-options"
100
+
101
+ user "root"
102
+ password "............"
103
+ socket "/var/run/mysqld/mysqld.sock"
104
+
105
+ database :blog
106
+ database :servershape
107
+ database :astrails_com
108
+ database :secret_project_com
109
+
110
+ end
111
+
112
+
113
+ tar do
114
+ archive "git-repositories", :files => "/home/git/repositories"
115
+ archive "dot-configs", :files => "/home/*/.[^.]*"
116
+ archive "etc", :files => "/etc", :exclude => "/etc/puppet/other"
117
+
118
+ archive "blog-astrails-com" do
119
+ files "/var/www/blog.astrails.com/"
120
+ exclude ["/var/www/blog.astrails.com/log", "/var/www/blog.astrails.com/tmp"]
121
+ end
122
+
123
+ archive "astrails-com" do
124
+ files "/var/www/astrails.com/"
125
+ exclude ["/var/www/astrails.com/log", "/var/www/astrails.com/tmp"]
126
+ end
127
+ end
128
+ end
129
+
130
+ == Copyright
131
+
132
+ Copyright (c) 2009 Astrails Ltd. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,59 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "safe"
8
+ gem.summary = %Q{Backup filesystem and MySQL to Amazon S3 (with encryption)}
9
+ gem.description = "Simple tool to backup MySQL databases and filesystem locally or to Amazon S3 (with optional encryption)"
10
+ gem.email = "we@astrails.com"
11
+ gem.homepage = "http://github.com/astrails/safe"
12
+ gem.authors = ["Astrails Ltd."]
13
+
14
+ gem.add_dependency("aws-s3")
15
+
16
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
+ end
18
+ rescue LoadError
19
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/*_test.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ begin
30
+ require 'rcov/rcovtask'
31
+ Rcov::RcovTask.new do |test|
32
+ test.libs << 'test'
33
+ test.pattern = 'test/**/*_test.rb'
34
+ test.verbose = true
35
+ end
36
+ rescue LoadError
37
+ task :rcov do
38
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
+ end
40
+ end
41
+
42
+
43
+ task :default => :test
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ if File.exist?('VERSION.yml')
48
+ config = YAML.load(File.read('VERSION.yml'))
49
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
50
+ else
51
+ version = ""
52
+ end
53
+
54
+ rdoc.rdoc_dir = 'rdoc'
55
+ rdoc.title = "safe #{version}"
56
+ rdoc.rdoc_files.include('README*')
57
+ rdoc.rdoc_files.include('lib/**/*.rb')
58
+ end
59
+
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 2
3
+ :major: 0
4
+ :minor: 1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: astrails-safe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Astrails Ltd.
@@ -9,8 +9,8 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-15 00:00:00 -07:00
13
- default_executable:
12
+ date: 2009-04-06 00:00:00 -07:00
13
+ default_executable: astrails-safe
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aws-s3
@@ -28,33 +28,35 @@ executables:
28
28
  - astrails-safe
29
29
  extensions: []
30
30
 
31
- extra_rdoc_files: []
32
-
31
+ extra_rdoc_files:
32
+ - LICENSE
33
+ - README.rdoc
33
34
  files:
34
- - README
35
+ - LICENSE
36
+ - README.rdoc
37
+ - Rakefile
38
+ - VERSION.yml
35
39
  - bin/astrails-safe
36
- - lib/extensions/mktmpdir.rb
37
40
  - lib/astrails/safe.rb
38
- - lib/astrails/safe/s3.rb
39
- - lib/astrails/safe/gpg.rb
40
- - lib/astrails/safe/mysqldump.rb
41
- - lib/astrails/safe/stream.rb
41
+ - lib/astrails/safe/archive.rb
42
42
  - lib/astrails/safe/config/builder.rb
43
43
  - lib/astrails/safe/config/node.rb
44
- - lib/astrails/safe/sink.rb
44
+ - lib/astrails/safe/gpg.rb
45
+ - lib/astrails/safe/gzip.rb
46
+ - lib/astrails/safe/local.rb
47
+ - lib/astrails/safe/mysqldump.rb
45
48
  - lib/astrails/safe/pipe.rb
49
+ - lib/astrails/safe/s3.rb
50
+ - lib/astrails/safe/sink.rb
46
51
  - lib/astrails/safe/source.rb
47
- - lib/astrails/safe/archive.rb
48
- - lib/astrails/safe/local.rb
52
+ - lib/astrails/safe/stream.rb
49
53
  - lib/astrails/safe/tmp_file.rb
50
- - lib/astrails/safe/gzip.rb
51
- - templates/script.rb
52
- - safe.gemspec
53
- has_rdoc: false
54
+ - lib/extensions/mktmpdir.rb
55
+ has_rdoc: true
54
56
  homepage: http://github.com/astrails/safe
55
57
  post_install_message:
56
- rdoc_options: []
57
-
58
+ rdoc_options:
59
+ - --charset=UTF-8
58
60
  require_paths:
59
61
  - lib
60
62
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -75,6 +77,6 @@ rubyforge_project:
75
77
  rubygems_version: 1.2.0
76
78
  signing_key:
77
79
  specification_version: 2
78
- summary: Astrails Safe
80
+ summary: Backup filesystem and MySQL to Amazon S3 (with encryption)
79
81
  test_files: []
80
82
 
data/README DELETED
@@ -1,13 +0,0 @@
1
- Simple mysql and filesystem backups with S3 support
2
-
3
- Usage:
4
- astrails-safe [OPTIONS] CONFIG_FILE
5
- Options:
6
- -h, --help This help screen
7
- -v, --verbose be verbose, duh!
8
- -n, --dry-run just pretend, don't do anything.
9
- -L, --local skip S3
10
-
11
- Note: CONFIG_FILE will be created from template if missing
12
-
13
- See template for configuration examples
data/safe.gemspec DELETED
@@ -1,37 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = "safe"
3
- s.version = "0.1.1"
4
- s.date = "2009-03-15"
5
- s.summary = "Astrails Safe"
6
- s.email = "we@astrails.com"
7
- s.homepage = "http://github.com/astrails/safe"
8
- s.description = "Simple tool to backup MySQL databases and filesystem locally or to Amazon S3 (with optional encryption)"
9
- s.has_rdoc = false
10
- s.authors = ["Astrails Ltd."]
11
- s.files = files = %w(
12
- README
13
- bin/astrails-safe
14
- lib/extensions/mktmpdir.rb
15
- lib/astrails/safe.rb
16
- lib/astrails/safe/s3.rb
17
- lib/astrails/safe/gpg.rb
18
- lib/astrails/safe/mysqldump.rb
19
- lib/astrails/safe/stream.rb
20
- lib/astrails/safe/config/builder.rb
21
- lib/astrails/safe/config/node.rb
22
- lib/astrails/safe/sink.rb
23
- lib/astrails/safe/pipe.rb
24
- lib/astrails/safe/source.rb
25
- lib/astrails/safe/archive.rb
26
- lib/astrails/safe/local.rb
27
- lib/astrails/safe/tmp_file.rb
28
- lib/astrails/safe/gzip.rb
29
- templates/script.rb
30
- safe.gemspec
31
- )
32
- s.executables = files.grep(/^bin/).map {|x| x.gsub(/^bin\//, "")}
33
-
34
- s.test_files = []
35
- s.add_dependency("aws-s3")
36
- end
37
-
data/templates/script.rb DELETED
@@ -1,109 +0,0 @@
1
- safe do
2
-
3
- # backup file path (not including filename)
4
- # supported substitutions:
5
- # :kind -> backup 'engine' kind, e.g. "mysqldump" or "archive"
6
- # :id -> backup 'id', e.g. "blog", "production", etc.
7
- # :timestamp -> current run timestamp (same for all the backups in the same 'run')
8
- # you can set separate :path for all backups (or once globally here)
9
- local do
10
- path "/backup/:kind/"
11
- end
12
-
13
- ## uncomment to enable uploads to Amazon S3
14
- ## Amazon S3 auth (optional)
15
- ## don't forget to add :s3 to the 'store' list
16
- # s3 do
17
- # key YOUR_S3_KEY
18
- # secret YOUR_S3_SECRET
19
- # bucket S3_BUCKET
20
- # # path for uploads to S3. supports same substitution like :local/:path
21
- # path ":kind/" # this is default
22
- # end
23
-
24
- ## alternative style:
25
- # s3 :key => YOUR_S3_KEY, :secret => YOUR_S3_SECRET, :bucket => S3_BUCKET
26
-
27
- ## uncomment to enable GPG encryption.
28
- ## Note: you can use public 'key' or symmetric password but not both!
29
- # gpg do
30
- # # key "backup@astrails.com"
31
- # password "astrails"
32
- # end
33
-
34
- ## uncomment to enable backup rotation. keep only given number of latest
35
- ## backups. remove the rest
36
- # keep do
37
- # local 4 # keep 4 local backups
38
- # s3 20 # keep 20 S3 backups
39
- # end
40
-
41
- # backup mysql databases with mysqldump
42
- mysqldump do
43
- # you can override any setting from parent in a child:
44
- options "-ceKq --single-transaction --create-options"
45
-
46
- user "astrails"
47
- password ""
48
- # host "localhost"
49
- # port 3306
50
- socket "/var/run/mysqld/mysqld.sock"
51
-
52
- # database is a 'collection' element. it must have a hash or block parameter
53
- # it will be 'collected' in a 'databases', with database id (1st arg) used as hash key
54
- # the following code will create mysqldump/databases/blog and mysqldump/databases/mysql ocnfiguration 'nodes'
55
-
56
- # backup database with default values
57
- # database :blog
58
-
59
- # backup overriding some values
60
- # database :production do
61
- # # you can override 'partially'
62
- # keep :local => 3
63
- # # keep/local is 3, and keep/s3 is 20 (from parent)
64
-
65
- # # local override for gpg password
66
- # gpg do
67
- # password "custom-production-pass"
68
- # end
69
-
70
- # skip_tables [:logger_exceptions, :request_logs] # skip those tables during backup
71
- # end
72
-
73
- end
74
-
75
-
76
- tar do
77
- # 'archive' is a collection item, just like 'database'
78
- # archive "git-repositories" do
79
- # # files and directories to backup
80
- # files "/home/git/repositories"
81
- # end
82
-
83
- # archive "etc-files" do
84
- # files "/etc"
85
- # # exlude those files/directories
86
- # exclude "/etc/puppet/other"
87
- # end
88
-
89
- # archive "dot-configs" do
90
- # files "/home/*/.[^.]*"
91
- # end
92
-
93
- # archive "blog" do
94
- # files "/var/www/blog.astrails.com/"
95
- # # specify multiple files/directories as array
96
- # exclude ["/var/www/blog.astrails.com/log", "/var/www/blog.astrails.com/tmp"]
97
- # end
98
-
99
- # archive "site" do
100
- # files "/var/www/astrails.com/"
101
- # exclude ["/var/www/astrails.com/log", "/var/www/astrails.com/tmp"]
102
- # end
103
-
104
- # archive :misc do
105
- # files [ "/backup/*.rb" ]
106
- # end
107
- end
108
-
109
- end