1
+ # mirrorshades
2
+
1
3
<!--
2
4
Copyright (c) 2020-2022 Paul Barker <paul@pbarker.dev>
3
5
SPDX-License-Identifier: CC-BY-4.0
4
6
-->
5
7
6
- [ ![ pre-commit.ci status] ( https://results.pre-commit.ci/badge/github/unnecessary-abstraction/mirrorshades/main.svg )] ( https://results.pre-commit.ci/latest/github/unnecessary-abstraction/mirrorshades/main )
7
- [ ![ PyPI] ( https://img.shields.io/pypi/v/mirrorshades )] ( https://pypi.org/project/mirrorshades/ )
8
-
9
- # mirrorshades
10
-
11
- [ mirrorshades] ( https://github.com/unnecessary-abstraction/mirrorshades )
12
- is a tool for mirroring data from remote sources.
8
+ [ ![ pre-commit.ci status] [ pre-commit badge ]] [ pre-commit link ]
9
+ [ ![ PyPI] [ pypi badge ]] [ pypi link ]
13
10
14
- Copyright (c) 2020-2022 Paul Barker.
11
+ [ pre-commit badge ] : https://results.pre-commit.ci/badge/github/unnecessary-abstraction/mirrorshades/main.svg
12
+ [ pre-commit link ] : https://results.pre-commit.ci/latest/github/unnecessary-abstraction/mirrorshades/main
13
+ [ pypi badge ] : https://img.shields.io/pypi/v/mirrorshades
14
+ [ pypi link ] : https://pypi.org/project/mirrorshades/
15
15
16
- In this repository,
17
- code files are distributed under the
18
- [ Apache 2.0 License] ( https://tldrlegal.com/license/apache-license-2.0-(apache-2.0) ) ,
19
- documentation files are distributed under the
20
- [ CC BY 4.0 License] ( https://tldrlegal.com/license/creative-commons-attribution-4.0-international-(cc-by-4) )
21
- and trivial data files are distributed under the
22
- [ CC0 1.0 License] ( https://tldrlegal.com/license/creative-commons-cc0-1.0-universal ) .
23
-
24
- ## Summary
16
+ An easily extensible tool for mirroring data from git repositories, cloud
17
+ storage, mail servers and other remote sources.
25
18
26
19
Mirrorshades was written to help maintain mirrors and backups by regularly
27
- pulling content from remote locations. Tools such as rsync, rclone, `git clone
28
- --mirror`, etc already exist and can easily be used to create local mirrors of
29
- remote content. What mirrorshades provides is a single command to update a set
30
- of mirrors of different types of content from various remote sources. For
31
- example, the author uses mirrorshades to sync content from Dropbox, GitLab and
32
- multiple mail servers to a local mirror on a nightly basis for disaster
33
- recovery purposes.
34
-
35
- All the details of how to pull down the desired content are stored in the
36
- configuration file, it is intended that command line arguments to mirrorshades
37
- remain as minimal as possible and that the config file is the single source of
38
- truth to control the operation of the utility. This makes it very easy to invoke
39
- mirrorshades regularly and reliably using cron, systemd timers or any other
40
- automation mechanism.
20
+ pulling content from remote locations. Tools such as rsync, rclone and `git
21
+ clone --mirror` already exist, but what this tool provides is integration and
22
+ automation. A single invocation of mirrorshades can update a set of mirrors of
23
+ different types of content from various remote sources. For example, the author
24
+ uses this tool to sync content from Dropbox, GitLab and multiple mail servers
25
+ to a local mirror on a nightly basis for disaster recovery purposes.
26
+
27
+ A configuration file is used to control the operation of mirrorshades, and
28
+ command line arguments are kept to a minimum. This makes it easy to invoke the
29
+ tool regularly and reliably. In line with the [ Unix philosophy] [ ] , mirrorshades
30
+ does not include any way to schedule when mirrors are updated. Instead, it is
31
+ expected that [ systemd timers] [ ] or a cron implementation (such as [ cronie] [ ] or
32
+ [ yacron] [ ] ) will be used if scheduling is required.
33
+
34
+ [ Unix philosophy ] : https://en.wikipedia.org/wiki/Unix_philosophy
35
+ [ systemd timers ] : https://opensource.com/article/20/7/systemd-timers
36
+ [ cronie ] : https://github.com/cronie-crond/cronie
37
+ [ yacron ] : https://pypi.org/project/yacron/
41
38
42
39
Mirrorshades is intended to be trivial to extend to handle new types of remote
43
40
source. Users familiar with Python are encouraged to look at the source code
@@ -48,25 +45,32 @@ appreciate them!
48
45
49
46
## Installation
50
47
51
- Mirrorshades is published on [ PyPI] ( https://pypi.org/ ) so the following command
52
- is usually sufficient to install the application:
48
+ Mirrorshades is published on [ PyPI] [ ] so the following command is usually
49
+ sufficient to install the application:
53
50
54
- ```
51
+ [ pypi ] : https://pypi.org/
52
+
53
+ ``` shell
55
54
pip install mirrorshades
56
55
```
57
56
58
57
The following mirroring agents have additional dependencies which must be
59
58
installed if you wish to use them in your configuration:
60
59
61
- * ` git ` : Requires the [ git] ( https://git-scm.com/ ) command line tool.
60
+ * ` git ` : Requires the [ git] [ ] command line tool.
62
61
63
- * ` github ` : Requires the Python module [ PyGithub] ( https://pypi.org/project/PyGithub/ )
64
- and the [ git ] ( https://git-scm.com/ ) command line tool.
62
+ * ` github ` : Requires the Python module [ PyGithub] [ ] and the [ git ] [ ] command line
63
+ tool.
65
64
66
- * ` gitlab ` : Requires the Python module [ python-gitlab] ( https://pypi.org/project/python-gitlab/ )
67
- and the [ git ] ( https://git-scm.com/ ) command line tool.
65
+ * ` gitlab ` : Requires the Python module [ python-gitlab] [ ] and the [ git ] [ ] command
66
+ line tool.
68
67
69
- * ` rclone ` : Requires the [ rclone] ( https://rclone.org/ ) command line tool.
68
+ * ` rclone ` : Requires the [ rclone] [ ] command line tool.
69
+
70
+ [ git ] : https://git-scm.com/
71
+ [ pygithub ] : https://pypi.org/project/PyGithub/
72
+ [ python-gitlab ] : https://pypi.org/project/python-gitlab/
73
+ [ rclone ] : https://rclone.org/
70
74
71
75
## Usage
72
76
@@ -75,7 +79,7 @@ Command line arguments may optionally be used to specify the config file to use
75
79
and to select one source defined in the config file to mirror (instead of
76
80
mirroring all sources defined in the config file).
77
81
78
- ```
82
+ ``` text
79
83
usage: mirrorshades [-h] [--source SOURCE] [--version] [config_path]
80
84
81
85
Data mirroring tool
@@ -268,15 +272,35 @@ sources:
268
272
attempts : 5
269
273
` ` `
270
274
275
+ ## Maintainers
276
+
277
+ * Paul Barker [:envelope:](mailto:paul@pbarker.dev)
278
+
271
279
## Contribution
272
280
273
281
mirrorshades is developed on GitHub at
274
282
<https://github.com/unnecessary-abstraction/mirrorshades>.
275
283
276
284
If you find any bugs or have a feature request feel free to open a ticket in the
277
- [issue tracker](https://github.com/unnecessary-abstraction/mirrorshades/issues) .
285
+ [issue tracker][] .
278
286
279
287
To submit patches to mirrorshades please fork the repository on GitHub and open
280
- a [pull request](https://github.com/unnecessary-abstraction/mirrorshades/pulls)
281
- where your changes are ready to merge. Pull requests should generally be
282
- targeted at the ` main` branch.
288
+ a [pull request][] where your changes are ready to merge. Pull requests should
289
+ generally be targeted at the ` main` branch.
290
+
291
+ [issue tracker] : https://github.com/unnecessary-abstraction/mirrorshades/issues
292
+ [pull request] : https://github.com/unnecessary-abstraction/mirrorshades/pulls
293
+
294
+ # # License
295
+
296
+ Copyright (c) 2020-2023, mirrorshades contributors.
297
+
298
+ * Code files are distributed under the [Apache-2.0 License][].
299
+
300
+ * Documentation files are distributed under the [CC-BY-4.0 License][].
301
+
302
+ * Trivial data files are distributed under the [CC0-1.0 License][].
303
+
304
+ [Apache-2.0 License] : https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)
305
+ [CC-BY-4.0 License] : https://tldrlegal.com/license/creative-commons-attribution-4.0-international-(cc-by-4)
306
+ [CC0-1.0 License] : https://tldrlegal.com/license/creative-commons-cc0-1.0-universal
0 commit comments