synco 1.1.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +3 -0
  3. data/bin/synco +3 -3
  4. data/lib/synco/command/disk.rb +8 -23
  5. data/lib/synco/command/prune.rb +10 -25
  6. data/lib/synco/command/rotate.rb +46 -61
  7. data/lib/synco/command/spawn.rb +10 -25
  8. data/lib/synco/command.rb +23 -35
  9. data/lib/synco/controller.rb +4 -19
  10. data/lib/synco/directory.rb +8 -23
  11. data/lib/synco/disk.rb +4 -19
  12. data/lib/synco/method.rb +11 -26
  13. data/lib/synco/methods/rsync.rb +14 -29
  14. data/lib/synco/methods/scp.rb +8 -23
  15. data/lib/synco/methods/zfs.rb +7 -22
  16. data/lib/synco/scope.rb +33 -68
  17. data/lib/synco/script.rb +15 -32
  18. data/lib/synco/server.rb +9 -24
  19. data/lib/synco/shell.rb +5 -20
  20. data/lib/synco/shells/ssh.rb +10 -25
  21. data/lib/synco/version.rb +5 -20
  22. data/lib/synco.rb +13 -29
  23. data/license.md +21 -0
  24. data/readme.md +248 -0
  25. data.tar.gz.sig +0 -0
  26. metadata +60 -120
  27. metadata.gz.sig +0 -0
  28. data/.gitignore +0 -22
  29. data/.rspec +0 -4
  30. data/.simplecov +0 -9
  31. data/.travis.yml +0 -14
  32. data/Gemfile +0 -11
  33. data/README.md +0 -246
  34. data/Rakefile +0 -8
  35. data/lib/synco/compact_formatter.rb +0 -115
  36. data/media/LSync Logo.artx/Preview/preview.png +0 -0
  37. data/media/LSync Logo.artx/QuickLook/Preview.pdf +0 -0
  38. data/media/LSync Logo.artx/doc.thread +0 -0
  39. data/media/LSync Logo.png +0 -0
  40. data/spec/synco/backup_script.rb +0 -63
  41. data/spec/synco/directory_spec.rb +0 -33
  42. data/spec/synco/local_backup.rb +0 -56
  43. data/spec/synco/local_sync.rb +0 -91
  44. data/spec/synco/method_spec.rb +0 -62
  45. data/spec/synco/rsync_spec.rb +0 -89
  46. data/spec/synco/scp_spec.rb +0 -58
  47. data/spec/synco/script_spec.rb +0 -51
  48. data/spec/synco/shell_spec.rb +0 -42
  49. data/spec/synco/usb_spec.rb +0 -76
  50. data/spec/synco/zfs_spec.rb +0 -50
  51. data/synco.gemspec +0 -35
data/license.md ADDED
@@ -0,0 +1,21 @@
1
+ # MIT License
2
+
3
+ Copyright, 2008-2024, by Samuel Williams.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/readme.md ADDED
@@ -0,0 +1,248 @@
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
+ [![Development Status](https://github.com/ioquatix/synco/workflows/Test/badge.svg)](https://github.com/ioquatix/synco/actions?workflow=Test)
12
+
13
+ ## Installation
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ gem 'synco'
18
+
19
+ And then execute:
20
+
21
+ $ bundle
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install synco
26
+
27
+ ## Usage
28
+
29
+ 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.
30
+
31
+ A simple backup script might look something like this:
32
+
33
+ ``` ruby
34
+ #!/usr/bin/env ruby
35
+
36
+ require 'synco'
37
+ require 'synco/methods/rsync'
38
+
39
+ Synco::run_script do |script|
40
+ script.method = Synco::Methods::RSync.new(archive: true)
41
+
42
+ server(:master) do |server|
43
+ server.host = "server.example.com"
44
+ server.root = "/"
45
+ end
46
+
47
+ server(:backup) do |server|
48
+ server.host = "backup.example.com"
49
+ server.root = "/tank/backups/server.example.com"
50
+ end
51
+
52
+ backup('etc', 'var', 'srv', 'home',
53
+ arguments: %W{--exclude cache/ --exclude tmp/}
54
+ )
55
+ end
56
+ ```
57
+
58
+ 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`.
59
+
60
+ ### RSync Snapshots
61
+
62
+ 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:
63
+
64
+ ``` ruby
65
+ server(:backup) do |server|
66
+ server.host = "backup.example.com"
67
+ server.root = "/"
68
+
69
+ server.on(:success) do
70
+ run "synco", "rotate", chdir: target_server.root
71
+ run "synco", "prune", chdir: target_server.root
72
+ end
73
+ end
74
+ ```
75
+
76
+ These commands can also be run from the command line.
77
+
78
+ ```
79
+ rotate [--format <name>] [--latest <name>] [--snapshot <name>]
80
+ Rotate a backup snapshot into a timestamped directory.
81
+
82
+ [--format <name>] Set the name of the backup rotations, including strftime expansions. Default: %Y.%m.%d-%H.%M.%S
83
+ [--latest <name>] The name of the latest backup symlink. Default: latest
84
+ [--snapshot <name>] The name of the in-progress backup snapshot. Default: latest.snapshot
85
+
86
+ prune [--hourly <count>] [--daily <count>] [--weekly <count>] [--monthly <count>] [--quarterly <count>] [--yearly <count>] [--format <name>] [--latest <name>] [--keep <new|old>] [--dry]
87
+ Prune old backups to reduce disk usage according to a given policy.
88
+
89
+ [--hourly <count>] Set the number of hourly backups to keep. Default: 24
90
+ [--daily <count>] Set the number of daily backups to keep. Default: 28
91
+ [--weekly <count>] Set the number of weekly backups to keep. Default: 52
92
+ [--monthly <count>] Set the number of monthly backups to keep. Default: 36
93
+ [--quarterly <count>] Set the number of quaterly backups to keep. Default: 40
94
+ [--yearly <count>] Set the number of yearly backups to keep. Default: 20
95
+ [--format <name>] Set the name of the backup rotations, including strftime expansions. Default: %Y.%m.%d-%H.%M.%S
96
+ [--latest <name>] The name of the latest backup symlink. Default: latest
97
+ [--keep <new|old>] Keep the younger or older backups within the same period division Default: old
98
+ [--dry] Print out what would be done rather than doing it.
99
+ ```
100
+
101
+ ### Mounting Disks
102
+
103
+ 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`.
104
+
105
+ ``` ruby
106
+ server(:destination) do |server|
107
+ self.mountpoint = '/mnt/backups'
108
+ self.root = File.join(server.mountpoint, 'laptop')
109
+
110
+ server.on(:prepare) do
111
+ # synco mount uses labels, e.g. the disk partition has LABEL=backups
112
+ target_server.run "synco", "mount", target_server.mountpoint, 'backups'
113
+ end
114
+
115
+ server.on(:finish) do
116
+ target_server.run "synco", "unmount", target_server.mountpoint
117
+ end
118
+ end
119
+ ```
120
+
121
+ On Linux, you might want to create the file `/etc/sudoers.d/synco` with the following contents:
122
+
123
+ %wheel ALL=(root) NOPASSWD: /bin/mount
124
+ %wheel ALL=(root) NOPASSWD: /bin/umount
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
+ options zfs zfs_admin_snapshot=1
189
+
190
+ Propagate user permissions for the ZFS partition:
191
+
192
+ ``` bash
193
+ sudo zfs allow -ld -u `whoami` create,mount,send,receive,snapshot tank/test
194
+ ```
195
+
196
+ ### Backup staging
197
+
198
+ 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.
199
+
200
+ ### DNS Failover
201
+
202
+ **This behaviour is not well tested**
203
+
204
+ Synco uses DNS to resolve the master server. This allows for bi-directional synchronization and other interesting setups.
205
+
206
+ Firstly, a backup script defaults to the server with the name `:master` as the master, where data is replicated FROM.
207
+
208
+ 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:
209
+
210
+ ``` ruby
211
+ Synco::run_script do |script|
212
+ script.method = Synco::Methods::RSync.new(archive: true)
213
+
214
+ script.master = "primary.example.com"
215
+
216
+ server("s01.example.com") do |server|
217
+ server.root = "/"
218
+ end
219
+
220
+ server("s02.example.com") do |server|
221
+ server.root = "/"
222
+ end
223
+
224
+ backup('srv/http',
225
+ arguments: %W{--exclude cache/ --exclude tmp/}
226
+ )
227
+ end
228
+ ```
229
+
230
+ 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.
231
+
232
+ ## Contributing
233
+
234
+ We welcome contributions to this project.
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
+ ### Developer Certificate of Origin
243
+
244
+ In order to protect users of this project, we require all contributors to comply with the [Developer Certificate of Origin](https://developercertificate.org/). This ensures that all contributions are properly licensed and attributed.
245
+
246
+ ### Community Guidelines
247
+
248
+ This project is best served by a collaborative and respectful environment. Treat each other professionally, respect differing viewpoints, and engage constructively. Harassment, discrimination, or harmful behavior is not tolerated. Communicate clearly, listen actively, and support one another. If any issues arise, please inform the project maintainers.
data.tar.gz.sig ADDED
Binary file
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.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain: []
11
- date: 2016-10-27 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: '1.3'
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: '1.3'
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: '2.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: '2.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,21 +124,7 @@ 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: rainbow
127
+ name: samovar
113
128
  requirement: !ruby/object:Gem::Requirement
114
129
  requirements:
115
130
  - - "~>"
@@ -122,63 +137,13 @@ dependencies:
122
137
  - - "~>"
123
138
  - !ruby/object:Gem::Version
124
139
  version: '2.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: '1.11'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '1.11'
139
- - !ruby/object:Gem::Dependency
140
- name: rspec
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: '3.4'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !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:
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
- - ".gitignore"
176
- - ".rspec"
177
- - ".simplecov"
178
- - ".travis.yml"
179
- - Gemfile
180
- - README.md
181
- - Rakefile
182
147
  - bin/synco
183
148
  - lib/synco.rb
184
149
  - lib/synco/command.rb
@@ -186,7 +151,6 @@ files:
186
151
  - lib/synco/command/prune.rb
187
152
  - lib/synco/command/rotate.rb
188
153
  - lib/synco/command/spawn.rb
189
- - lib/synco/compact_formatter.rb
190
154
  - lib/synco/controller.rb
191
155
  - lib/synco/directory.rb
192
156
  - lib/synco/disk.rb
@@ -200,27 +164,15 @@ files:
200
164
  - lib/synco/shell.rb
201
165
  - lib/synco/shells/ssh.rb
202
166
  - lib/synco/version.rb
203
- - media/LSync Logo.artx/Preview/preview.png
204
- - media/LSync Logo.artx/QuickLook/Preview.pdf
205
- - media/LSync Logo.artx/doc.thread
206
- - media/LSync Logo.png
207
- - spec/synco/backup_script.rb
208
- - spec/synco/directory_spec.rb
209
- - spec/synco/local_backup.rb
210
- - spec/synco/local_sync.rb
211
- - spec/synco/method_spec.rb
212
- - spec/synco/rsync_spec.rb
213
- - spec/synco/scp_spec.rb
214
- - spec/synco/script_spec.rb
215
- - spec/synco/shell_spec.rb
216
- - spec/synco/usb_spec.rb
217
- - spec/synco/zfs_spec.rb
218
- - synco.gemspec
219
- homepage: ''
167
+ - license.md
168
+ - readme.md
169
+ homepage: https://github.com/ioquatix/synco
220
170
  licenses:
221
171
  - MIT
222
- metadata: {}
223
- post_install_message:
172
+ metadata:
173
+ funding_uri: https://github.com/sponsors/ioquatix/
174
+ source_code_uri: https://github.com/ioquatix/synco.git
175
+ post_install_message:
224
176
  rdoc_options: []
225
177
  require_paths:
226
178
  - lib
@@ -228,27 +180,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
228
180
  requirements:
229
181
  - - ">="
230
182
  - !ruby/object:Gem::Version
231
- version: '0'
183
+ version: '3.1'
232
184
  required_rubygems_version: !ruby/object:Gem::Requirement
233
185
  requirements:
234
186
  - - ">="
235
187
  - !ruby/object:Gem::Version
236
188
  version: '0'
237
189
  requirements: []
238
- rubyforge_project:
239
- rubygems_version: 2.5.1
240
- signing_key:
190
+ rubygems_version: 3.5.11
191
+ signing_key:
241
192
  specification_version: 4
242
193
  summary: Synco is a tool for scripted synchronization and backups.
243
- test_files:
244
- - spec/synco/backup_script.rb
245
- - spec/synco/directory_spec.rb
246
- - spec/synco/local_backup.rb
247
- - spec/synco/local_sync.rb
248
- - spec/synco/method_spec.rb
249
- - spec/synco/rsync_spec.rb
250
- - spec/synco/scp_spec.rb
251
- - spec/synco/script_spec.rb
252
- - spec/synco/shell_spec.rb
253
- - spec/synco/usb_spec.rb
254
- - spec/synco/zfs_spec.rb
194
+ test_files: []
metadata.gz.sig ADDED
Binary file
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
- --color
2
- --format documentation
3
- --backtrace
4
- --warnings
data/.simplecov DELETED
@@ -1,9 +0,0 @@
1
-
2
- SimpleCov.start do
3
- add_filter "/spec/"
4
- end
5
-
6
- if ENV['TRAVIS']
7
- require 'coveralls'
8
- Coveralls.wear!
9
- end
data/.travis.yml DELETED
@@ -1,14 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- rvm:
4
- - 2.1.8
5
- - 2.2.4
6
- - 2.3.0
7
- - ruby-head
8
- - rbx-2
9
- env: COVERAGE=true
10
- matrix:
11
- fast_finish: true
12
- allow_failures:
13
- - rvm: "ruby-head"
14
- - rvm: "rbx-2"
data/Gemfile DELETED
@@ -1,11 +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 'simplecov'
8
- gem 'coveralls', require: false
9
-
10
- gem 'fssm'
11
- end