synco 1.2.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,57 +1,86 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: synco
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain: []
11
- date: 2020-02-10 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIE2DCCA0CgAwIBAgIBATANBgkqhkiG9w0BAQsFADBhMRgwFgYDVQQDDA9zYW11
14
+ ZWwud2lsbGlhbXMxHTAbBgoJkiaJk/IsZAEZFg1vcmlvbnRyYW5zZmVyMRIwEAYK
15
+ CZImiZPyLGQBGRYCY28xEjAQBgoJkiaJk/IsZAEZFgJuejAeFw0yMjA4MDYwNDUz
16
+ MjRaFw0zMjA4MDMwNDUzMjRaMGExGDAWBgNVBAMMD3NhbXVlbC53aWxsaWFtczEd
17
+ MBsGCgmSJomT8ixkARkWDW9yaW9udHJhbnNmZXIxEjAQBgoJkiaJk/IsZAEZFgJj
18
+ bzESMBAGCgmSJomT8ixkARkWAm56MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
19
+ igKCAYEAomvSopQXQ24+9DBB6I6jxRI2auu3VVb4nOjmmHq7XWM4u3HL+pni63X2
20
+ 9qZdoq9xt7H+RPbwL28LDpDNflYQXoOhoVhQ37Pjn9YDjl8/4/9xa9+NUpl9XDIW
21
+ sGkaOY0eqsQm1pEWkHJr3zn/fxoKPZPfaJOglovdxf7dgsHz67Xgd/ka+Wo1YqoE
22
+ e5AUKRwUuvaUaumAKgPH+4E4oiLXI4T1Ff5Q7xxv6yXvHuYtlMHhYfgNn8iiW8WN
23
+ XibYXPNP7NtieSQqwR/xM6IRSoyXKuS+ZNGDPUUGk8RoiV/xvVN4LrVm9upSc0ss
24
+ RZ6qwOQmXCo/lLcDUxJAgG95cPw//sI00tZan75VgsGzSWAOdjQpFM0l4dxvKwHn
25
+ tUeT3ZsAgt0JnGqNm2Bkz81kG4A2hSyFZTFA8vZGhp+hz+8Q573tAR89y9YJBdYM
26
+ zp0FM4zwMNEUwgfRzv1tEVVUEXmoFCyhzonUUw4nE4CFu/sE3ffhjKcXcY//qiSW
27
+ xm4erY3XAgMBAAGjgZowgZcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0O
28
+ BBYEFO9t7XWuFf2SKLmuijgqR4sGDlRsMC4GA1UdEQQnMCWBI3NhbXVlbC53aWxs
29
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MC4GA1UdEgQnMCWBI3NhbXVlbC53aWxs
30
+ aWFtc0BvcmlvbnRyYW5zZmVyLmNvLm56MA0GCSqGSIb3DQEBCwUAA4IBgQB5sxkE
31
+ cBsSYwK6fYpM+hA5B5yZY2+L0Z+27jF1pWGgbhPH8/FjjBLVn+VFok3CDpRqwXCl
32
+ xCO40JEkKdznNy2avOMra6PFiQyOE74kCtv7P+Fdc+FhgqI5lMon6tt9rNeXmnW/
33
+ c1NaMRdxy999hmRGzUSFjozcCwxpy/LwabxtdXwXgSay4mQ32EDjqR1TixS1+smp
34
+ 8C/NCWgpIfzpHGJsjvmH2wAfKtTTqB9CVKLCWEnCHyCaRVuKkrKjqhYCdmMBqCws
35
+ JkxfQWC+jBVeG9ZtPhQgZpfhvh+6hMhraUYRQ6XGyvBqEUe+yo6DKIT3MtGE2+CP
36
+ eX9i9ZWBydWb8/rvmwmX2kkcBbX0hZS1rcR593hGc61JR6lvkGYQ2MYskBveyaxt
37
+ Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
38
+ voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
39
+ -----END CERTIFICATE-----
40
+ date: 2024-10-21 00:00:00.000000000 Z
12
41
  dependencies:
13
42
  - !ruby/object:Gem::Dependency
14
- name: periodical
43
+ name: build-files
15
44
  requirement: !ruby/object:Gem::Requirement
16
45
  requirements:
17
46
  - - "~>"
18
47
  - !ruby/object:Gem::Version
19
- version: '1.1'
48
+ version: '1.0'
20
49
  type: :runtime
21
50
  prerelease: false
22
51
  version_requirements: !ruby/object:Gem::Requirement
23
52
  requirements:
24
53
  - - "~>"
25
54
  - !ruby/object:Gem::Version
26
- version: '1.1'
55
+ version: '1.0'
27
56
  - !ruby/object:Gem::Dependency
28
- name: samovar
57
+ name: fingerprint
29
58
  requirement: !ruby/object:Gem::Requirement
30
59
  requirements:
31
60
  - - "~>"
32
61
  - !ruby/object:Gem::Version
33
- version: '2.0'
62
+ version: '3.0'
34
63
  type: :runtime
35
64
  prerelease: false
36
65
  version_requirements: !ruby/object:Gem::Requirement
37
66
  requirements:
38
67
  - - "~>"
39
68
  - !ruby/object:Gem::Version
40
- version: '2.0'
69
+ version: '3.0'
41
70
  - !ruby/object:Gem::Dependency
42
- name: fingerprint
71
+ name: lockfile
43
72
  requirement: !ruby/object:Gem::Requirement
44
73
  requirements:
45
- - - "~>"
74
+ - - ">="
46
75
  - !ruby/object:Gem::Version
47
- version: '3.0'
76
+ version: '0'
48
77
  type: :runtime
49
78
  prerelease: false
50
79
  version_requirements: !ruby/object:Gem::Requirement
51
80
  requirements:
52
- - - "~>"
81
+ - - ">="
53
82
  - !ruby/object:Gem::Version
54
- version: '3.0'
83
+ version: '0'
55
84
  - !ruby/object:Gem::Dependency
56
85
  name: mapping
57
86
  requirement: !ruby/object:Gem::Requirement
@@ -67,19 +96,19 @@ dependencies:
67
96
  - !ruby/object:Gem::Version
68
97
  version: '1.0'
69
98
  - !ruby/object:Gem::Dependency
70
- name: build-files
99
+ name: periodical
71
100
  requirement: !ruby/object:Gem::Requirement
72
101
  requirements:
73
102
  - - "~>"
74
103
  - !ruby/object:Gem::Version
75
- version: '1.0'
104
+ version: '1.1'
76
105
  type: :runtime
77
106
  prerelease: false
78
107
  version_requirements: !ruby/object:Gem::Requirement
79
108
  requirements:
80
109
  - - "~>"
81
110
  - !ruby/object:Gem::Version
82
- version: '1.0'
111
+ version: '1.1'
83
112
  - !ruby/object:Gem::Dependency
84
113
  name: process-group
85
114
  requirement: !ruby/object:Gem::Requirement
@@ -95,89 +124,26 @@ dependencies:
95
124
  - !ruby/object:Gem::Version
96
125
  version: '1.1'
97
126
  - !ruby/object:Gem::Dependency
98
- name: lockfile
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: covered
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: bundler
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rspec
127
+ name: samovar
141
128
  requirement: !ruby/object:Gem::Requirement
142
129
  requirements:
143
130
  - - "~>"
144
131
  - !ruby/object:Gem::Version
145
- version: '3.4'
146
- type: :development
132
+ version: '2.0'
133
+ type: :runtime
147
134
  prerelease: false
148
135
  version_requirements: !ruby/object:Gem::Requirement
149
136
  requirements:
150
137
  - - "~>"
151
138
  - !ruby/object:Gem::Version
152
- version: '3.4'
153
- - !ruby/object:Gem::Dependency
154
- name: rake
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- description:
139
+ version: '2.0'
140
+ description:
168
141
  email:
169
- - samuel.williams@oriontransfer.co.nz
170
142
  executables:
171
143
  - synco
172
144
  extensions: []
173
145
  extra_rdoc_files: []
174
146
  files:
175
- - ".github/workflows/development.yml"
176
- - ".gitignore"
177
- - ".rspec"
178
- - Gemfile
179
- - README.md
180
- - Rakefile
181
147
  - bin/synco
182
148
  - lib/synco.rb
183
149
  - lib/synco/command.rb
@@ -198,24 +164,16 @@ files:
198
164
  - lib/synco/shell.rb
199
165
  - lib/synco/shells/ssh.rb
200
166
  - lib/synco/version.rb
201
- - spec/spec_helper.rb
202
- - spec/synco/backup_script.rb
203
- - spec/synco/directory_spec.rb
204
- - spec/synco/local_backup.rb
205
- - spec/synco/local_sync.rb
206
- - spec/synco/method_spec.rb
207
- - spec/synco/rsync_spec.rb
208
- - spec/synco/scp_spec.rb
209
- - spec/synco/script_spec.rb
210
- - spec/synco/shell_spec.rb
211
- - spec/synco/usb_spec.rb
212
- - spec/synco/zfs_spec.rb
213
- - synco.gemspec
214
- homepage: ''
167
+ - license.md
168
+ - readme.md
169
+ homepage: https://github.com/ioquatix/synco
215
170
  licenses:
216
171
  - MIT
217
- metadata: {}
218
- post_install_message:
172
+ metadata:
173
+ documentation_uri: https://ioquatix.github.io/synco/
174
+ funding_uri: https://github.com/sponsors/ioquatix/
175
+ source_code_uri: https://github.com/ioquatix/synco.git
176
+ post_install_message:
219
177
  rdoc_options: []
220
178
  require_paths:
221
179
  - lib
@@ -223,27 +181,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
223
181
  requirements:
224
182
  - - ">="
225
183
  - !ruby/object:Gem::Version
226
- version: '0'
184
+ version: '3.1'
227
185
  required_rubygems_version: !ruby/object:Gem::Requirement
228
186
  requirements:
229
187
  - - ">="
230
188
  - !ruby/object:Gem::Version
231
189
  version: '0'
232
190
  requirements: []
233
- rubygems_version: 3.0.6
234
- signing_key:
191
+ rubygems_version: 3.5.11
192
+ signing_key:
235
193
  specification_version: 4
236
194
  summary: Synco is a tool for scripted synchronization and backups.
237
- test_files:
238
- - spec/spec_helper.rb
239
- - spec/synco/backup_script.rb
240
- - spec/synco/directory_spec.rb
241
- - spec/synco/local_backup.rb
242
- - spec/synco/local_sync.rb
243
- - spec/synco/method_spec.rb
244
- - spec/synco/rsync_spec.rb
245
- - spec/synco/scp_spec.rb
246
- - spec/synco/script_spec.rb
247
- - spec/synco/shell_spec.rb
248
- - spec/synco/usb_spec.rb
249
- - spec/synco/zfs_spec.rb
195
+ test_files: []
metadata.gz.sig ADDED
@@ -0,0 +1,4 @@
1
+ z$P�4�������d)��J�K�7}t�X�I<^d�GdƮ�"�$,���:=��5���9طW��TJ�%iI���d�CbB0XT�U��0^��6N�2K��l��?�&y��a:q�!L}��!����A:��4�����h���粊� �;�[�x�U�z��������[��z�4mQȚ����}Xi�����_�x��B�uf���� -5��6�
2
+ ���@�#�o�D*
3
+ ��@1 �Ke ��;!+��_�1�W4���*�z8����CDYlk`<nQ������f�}��@By?c�I��.�!MMP9�1^O"���"��i,x5/�,^�b����WG�mK��A�������y
4
+ ��E��x������B�z:�T
@@ -1,40 +0,0 @@
1
- name: Development
2
-
3
- on: [push, pull_request]
4
-
5
- jobs:
6
- test:
7
- strategy:
8
- fail-fast: false
9
- matrix:
10
- os: [ubuntu-latest, macos-latest]
11
- ruby: [2.3, 2.4, 2.5, 2.6, 2.7]
12
- runs-on: ${{matrix.os}}
13
- steps:
14
- - uses: actions/checkout@v2
15
-
16
- - uses: ruby/setup-ruby@v1
17
- with:
18
- ruby-version: ${{matrix.ruby}}
19
-
20
- - uses: actions/cache@v1
21
- with:
22
- path: vendor/bundle
23
- key: bundle-use-ruby-${{matrix.os}}-${{matrix.ruby}}-${{hashFiles('**/Gemfile')}}
24
- restore-keys: |
25
- bundle-use-ruby-${{matrix.os}}-${{matrix.ruby}}-
26
-
27
- - name: Installing packages (ubuntu)
28
- if: matrix.os == 'ubuntu-latest'
29
- run: sudo apt-get install rsync
30
-
31
- - name: Installing packages (macos)
32
- if: matrix.os == 'macos-latest'
33
- run: brew install rsync
34
-
35
- - name: Bundle install...
36
- run: |
37
- bundle config path vendor/bundle
38
- bundle install
39
-
40
- - run: bundle exec rake
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
18
- *.bundle
19
- *.so
20
- *.o
21
- *.a
22
- mkmf.log
data/.rspec DELETED
@@ -1,4 +0,0 @@
1
- --format documentation
2
- --backtrace
3
- --require spec_helper
4
- --warnings
data/Gemfile DELETED
@@ -1,8 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in ..gemspec
4
- gemspec
5
-
6
- group :test do
7
- gem 'fssm'
8
- end
data/README.md DELETED
@@ -1,264 +0,0 @@
1
- # Synco ![Development](https://github.com/ioquatix/synco/workflows/Development/badge.svg)
2
-
3
- Synco is a tool for scripted synchronization and backups. It provides a custom Ruby DSL for describing backup and synchronization tasks involving one more more system and disk. It is designed to provide flexibility while reducing the complexity multi-server backups.
4
-
5
- * Single and multi-server data synchronization.
6
- * Incremental backups both locally and remotely.
7
- * Backup staging and coordination.
8
- * Backup verification using [Fingerprint](https://github.com/ioquatix/fingerprint).
9
- * Data backup redundancy controlled via DNS.
10
-
11
- ## Installation
12
-
13
- Add this line to your application's Gemfile:
14
-
15
- gem 'synco'
16
-
17
- And then execute:
18
-
19
- $ bundle
20
-
21
- Or install it yourself as:
22
-
23
- $ gem install synco
24
-
25
- ## Usage
26
-
27
- Synco imposes a particular structure regarding the organisation of backup scripts: Backup scripts involve a set of servers and directories. A server is a logical unit where files are available or stored. Directories are relative paths which are resolved relative to a server's root path.
28
-
29
- A simple backup script might look something like this:
30
-
31
- ```ruby
32
- #!/usr/bin/env ruby
33
-
34
- require 'synco'
35
- require 'synco/methods/rsync'
36
-
37
- Synco::run_script do |script|
38
- script.method = Synco::Methods::RSync.new(archive: true)
39
-
40
- server(:master) do |server|
41
- server.host = "server.example.com"
42
- server.root = "/"
43
- end
44
-
45
- server(:backup) do |server|
46
- server.host = "backup.example.com"
47
- server.root = "/tank/backups/server.example.com"
48
- end
49
-
50
- backup('etc', 'var', 'srv', 'home',
51
- arguments: %W{--exclude cache/ --exclude tmp/}
52
- )
53
- end
54
- ```
55
-
56
- This will produce an identical copy using rsync of the specified directories. As an example `server.example.com:/etc` would be copied to `backup.example.com:/tank/backups/server.example.com/etc`.
57
-
58
- ### RSync Snapshots
59
-
60
- Building on the above backup, you can use `Synco::Methods::RSyncSnapshot` which supports snapshot based backups. It creates a snapshot into a sub-directory called `latest.snapshot` and uses RSync's `--link-dest` to hard-link files when unchanged. Synco provides scripts to rotate and prune these backups as required, but you must invoke them as part of the script:
61
-
62
- ```ruby
63
- server(:backup) do |server|
64
- server.host = "backup.example.com"
65
- server.root = "/"
66
-
67
- server.on(:success) do
68
- run "synco", "rotate", chdir: target_server.root
69
- run "synco", "prune", chdir: target_server.root
70
- end
71
- end
72
- ```
73
-
74
- These commands can also be run from the command line.
75
-
76
- ```
77
- rotate [--format <name>] [--latest <name>] [--snapshot <name>]
78
- Rotate a backup snapshot into a timestamped directory.
79
-
80
- [--format <name>] Set the name of the backup rotations, including strftime expansions. Default: %Y.%m.%d-%H.%M.%S
81
- [--latest <name>] The name of the latest backup symlink. Default: latest
82
- [--snapshot <name>] The name of the in-progress backup snapshot. Default: latest.snapshot
83
-
84
- prune [--hourly <count>] [--daily <count>] [--weekly <count>] [--monthly <count>] [--quarterly <count>] [--yearly <count>] [--format <name>] [--latest <name>] [--keep <new|old>] [--dry]
85
- Prune old backups to reduce disk usage according to a given policy.
86
-
87
- [--hourly <count>] Set the number of hourly backups to keep. Default: 24
88
- [--daily <count>] Set the number of daily backups to keep. Default: 28
89
- [--weekly <count>] Set the number of weekly backups to keep. Default: 52
90
- [--monthly <count>] Set the number of monthly backups to keep. Default: 36
91
- [--quarterly <count>] Set the number of quaterly backups to keep. Default: 40
92
- [--yearly <count>] Set the number of yearly backups to keep. Default: 20
93
- [--format <name>] Set the name of the backup rotations, including strftime expansions. Default: %Y.%m.%d-%H.%M.%S
94
- [--latest <name>] The name of the latest backup symlink. Default: latest
95
- [--keep <new|old>] Keep the younger or older backups within the same period division Default: old
96
- [--dry] Print out what would be done rather than doing it.
97
- ```
98
-
99
- ### Mounting Disks
100
-
101
- Synco supports mounting disks before the backup begins and unmounting them after done. The specifics of this process may require some adjustment based on your OS. For example on linux, `sudo` is used to invoke `mount` and `umount`.
102
-
103
- ```ruby
104
- server(:destination) do |server|
105
- self.mountpoint = '/mnt/backups'
106
- self.root = File.join(server.mountpoint, 'laptop')
107
-
108
- server.on(:prepare) do
109
- # synco mount uses labels, e.g. the disk partition has LABEL=backups
110
- target_server.run "synco", "mount", target_server.mountpoint, 'backups'
111
- end
112
-
113
- server.on(:finish) do
114
- target_server.run "synco", "unmount", target_server.mountpoint
115
- end
116
- end
117
- ```
118
-
119
- On Linux, you might want to create the file `/etc/sudoers.d/synco` with the following contents:
120
-
121
- ```
122
- %wheel ALL=(root) NOPASSWD: /bin/mount
123
- %wheel ALL=(root) NOPASSWD: /bin/umount
124
- ```
125
-
126
- Please make sure you take the time to educate yourself on the security of such a setup.
127
-
128
- ### Database Backups
129
-
130
- If you'd like to dump data before running the backup, it's possible using the event handling mechanisms:
131
-
132
- ```ruby
133
- server(:master) do |server|
134
- server.host = "server.example.com"
135
- server.root = "/"
136
-
137
- server.on(:prepare) do
138
- # Dump MySQL to /srv/mysql
139
- run '/etc/lsync/mysql-backup.sh'
140
- end
141
- end
142
- ```
143
-
144
- The exact contents of `mysql-backup.sh` will depend on your requirements, but here is an example:
145
-
146
- ```bash
147
- #!/usr/bin/env bash
148
-
149
- BACKUP_DIR=/srv/mysql
150
- MYSQL=/usr/bin/mysql
151
- MYSQLDUMP=/usr/bin/mysqldump
152
-
153
- databases=`mysql --user=backup -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|_test|_restore)"`
154
-
155
- # http://stackoverflow.com/questions/451404/how-to-obtain-a-correct-dump-using-mysqldump-and-single-transaction-when-ddl-is
156
- MYSQLDUMP_OPTIONS="--force --skip-opt --single-transaction --add-drop-table --create-options --quick --extended-insert --set-charset --disable-keys"
157
-
158
- for db in $databases; do
159
- echo "Dumping database $db to $BACKUP_DIR/$db.sql.xz..."
160
- mysqldump --user=backup $MYSQLDUMP_OPTIONS --databases $db | xz > "$BACKUP_DIR/$db.sql.xz"
161
- done
162
- ```
163
-
164
- ### Fingerprint Integration
165
-
166
- It is possible to make a [cryptographic checksum of the data](https://github.com/ioquatix/fingerprint). On a filesystem that support immutable snapshots, you can do this before the data is copied. For traditional filesystems, you generally need to do this afterwards.
167
-
168
- ```ruby
169
- server(:master) do |server|
170
- server.host = "server.example.com"
171
- server.root = "/"
172
-
173
- server.on(:success) do
174
- # Run fingerprint on the backup data:
175
- run 'fingerprint', '--root', target_server.root, 'analyze'
176
- end
177
- end
178
- ```
179
-
180
- Fingerprint is used in many of the specs to verify file copies.
181
-
182
- ### ZFS Snapshots
183
-
184
- *This part of Synco is still under heavy development*
185
-
186
- Synco can manage synchronization and backups of ZFS partitions. However, to use the standard tools, it is necessary to enable `zfs_admin_snapshot`, in `/etc/modprobe.d/zfs.conf`:
187
-
188
- ```
189
- options zfs zfs_admin_snapshot=1
190
- ```
191
-
192
- Propagate user permissions for the ZFS partition:
193
-
194
- ```bash
195
- sudo zfs allow -ld -u `whoami` create,mount,send,receive,snapshot tank/test
196
- ```
197
-
198
- ### Backup staging
199
-
200
- Synco in a previous life supported backup staging. However, at this time it's not available except in a very limited form: backup scripts which use `Synco.run_script` use explicit locking so that it's not possible to run the same backup at the same time. In the future, staging sequential and parallel backups will be added.
201
-
202
- ### DNS Failover
203
-
204
- **This behaviour is not well tested**
205
-
206
- Synco uses DNS to resolve the master server. This allows for bi-directional synchronization and other interesting setups.
207
-
208
- Firstly, a backup script defaults to the server with the name `:master` as the master, where data is replicated FROM.
209
-
210
- However, it is possible instead to specify a hostname, e.g. `primary.example.com`. Then, specify several servers, e.g. `s01.example.com`, `s02.example.com` and so on:
211
-
212
- ```ruby
213
- Synco::run_script do |script|
214
- script.method = Synco::Methods::RSync.new(archive: true)
215
-
216
- script.master = "primary.example.com"
217
-
218
- server("s01.example.com") do |server|
219
- server.root = "/"
220
- end
221
-
222
- server("s02.example.com") do |server|
223
- server.root = "/"
224
- end
225
-
226
- backup('srv/http',
227
- arguments: %W{--exclude cache/ --exclude tmp/}
228
- )
229
- end
230
- ```
231
-
232
- When you run the script, the behaviour will depend on whether `primary.example.com` points to `s01.example.com` or `s02.example.com`. The data will always be copied from the master server to the other servers.
233
-
234
- ## Contributing
235
-
236
- 1. Fork it
237
- 2. Create your feature branch (`git checkout -b my-new-feature`)
238
- 3. Commit your changes (`git commit -am 'Add some feature'`)
239
- 4. Push to the branch (`git push origin my-new-feature`)
240
- 5. Create new Pull Request
241
-
242
- ## License
243
-
244
- Released under the MIT license.
245
-
246
- Copyright, 2016, by [Samuel G. D. Williams](http://www.codeotaku.com/samuel-williams).
247
-
248
- Permission is hereby granted, free of charge, to any person obtaining a copy
249
- of this software and associated documentation files (the "Software"), to deal
250
- in the Software without restriction, including without limitation the rights
251
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
252
- copies of the Software, and to permit persons to whom the Software is
253
- furnished to do so, subject to the following conditions:
254
-
255
- The above copyright notice and this permission notice shall be included in
256
- all copies or substantial portions of the Software.
257
-
258
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
259
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
260
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
261
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
262
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
263
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
264
- THE SOFTWARE.
data/Rakefile DELETED
@@ -1,6 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
-
4
- RSpec::Core::RakeTask.new
5
-
6
- task :default => :spec
data/spec/spec_helper.rb DELETED
@@ -1,34 +0,0 @@
1
- # Copyright, 2016, by Samuel G. D. Williams. <http://www.codeotaku.com>
2
- #
3
- # Permission is hereby granted, free of charge, to any person obtaining a copy
4
- # of this software and associated documentation files (the "Software"), to deal
5
- # in the Software without restriction, including without limitation the rights
6
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
- # copies of the Software, and to permit persons to whom the Software is
8
- # furnished to do so, subject to the following conditions:
9
- #
10
- # The above copyright notice and this permission notice shall be included in
11
- # all copies or substantial portions of the Software.
12
- #
13
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- # THE SOFTWARE.
20
-
21
- require 'bundler/setup'
22
- require 'covered/rspec'
23
-
24
- RSpec.configure do |config|
25
- # Enable flags like --only-failures and --next-failure
26
- config.example_status_persistence_file_path = ".rspec_status"
27
-
28
- # Disable RSpec exposing methods globally on `Module` and `main`
29
- config.disable_monkey_patching!
30
-
31
- config.expect_with :rspec do |c|
32
- c.syntax = :expect
33
- end
34
- end