WereSync-1.1.5/ 0000755 0001750 0001751 00000000000 13503555360 013775 5 ustar daniel daniel 0000000 0000000 WereSync-1.1.5/LICENSE.txt 0000644 0001750 0001751 00000021707 13501054034 015615 0 ustar daniel daniel 0000000 0000000 Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the
copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other
entities that control, are controlled by, or are under common control with
that entity. For the purposes of this definition, "control" means (i) the
power, direct or indirect, to cause the direction or management of such
entity, whether by contract or otherwise, or (ii) ownership of fifty percent
(50%) or more of the outstanding shares, or (iii) beneficial ownership of such
entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation source, and
configuration files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object
code, generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form,
made available under the License, as indicated by a copyright notice that is
included in or attached to the work (an example is provided in the Appendix
below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative
Works shall not include works that remain separable from, or merely link (or
bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original
version of the Work and any modifications or additions to that Work or
Derivative Works thereof, that is intentionally submitted to Licensor for
inclusion in the Work by the copyright owner or by an individual or Legal
Entity authorized to submit on behalf of the copyright owner. For the purposes
of this definition, "submitted" means any form of electronic, verbal, or
written communication sent to the Licensor or its representatives, including
but not limited to communication on electronic mailing lists, source code
control systems, and issue tracking systems that are managed by, or on behalf
of, the Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise designated
in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of this
License, each Contributor hereby grants to You a perpetual, worldwide,
non-exclusive, no-charge, royalty-free, irrevocable copyright license to
reproduce, prepare Derivative Works of, publicly display, publicly perform,
sublicense, and distribute the Work and such Derivative Works in Source or
Object form.
3. Grant of Patent License. Subject to the terms and conditions of this
License, each Contributor hereby grants to You a perpetual, worldwide,
non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this
section) patent license to make, have made, use, offer to sell, sell, import,
and otherwise transfer the Work, where such license applies only to those
patent claims licensable by such Contributor that are necessarily infringed by
their Contribution(s) alone or by combination of their Contribution(s) with
the Work to which such Contribution(s) was submitted. If You institute patent
litigation against any entity (including a cross-claim or counterclaim in a
lawsuit) alleging that the Work or a Contribution incorporated within the Work
constitutes direct or contributory patent infringement, then any patent
licenses granted to You under this License for that Work shall terminate as of
the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the Work or
Derivative Works thereof in any medium, with or without modifications, and in
Source or Object form, provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy
of this License; and
You must cause any modified files to carry prominent notices stating that
You changed the files; and
You must retain, in the Source form of any Derivative Works that You
distribute, all copyright, patent, trademark, and attribution notices from the
Source form of the Work, excluding those notices that do not pertain to any
part of the Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution,
then any Derivative Works that You distribute must include a readable copy of
the attribution notices contained within such NOTICE file, excluding those
notices that do not pertain to any part of the Derivative Works, in at least
one of the following places: within a NOTICE text file distributed as part of
the Derivative Works; within the Source form or documentation, if provided
along with the Derivative Works; or, within a display generated by the
Derivative Works, if and wherever such third-party notices normally appear.
The contents of the NOTICE file are for informational purposes only and do not
modify the License. You may add Your own attribution notices within Derivative
Works that You distribute, alongside or as an addendum to the NOTICE text from
the Work, provided that such additional attribution notices cannot be
construed as modifying the License.
You may add Your own copyright statement to Your modifications and may
provide additional or different license terms and conditions for use,
reproduction, or distribution of Your modifications, or for any such
Derivative Works as a whole, provided Your use, reproduction, and distribution
of the Work otherwise complies with the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise, any
Contribution intentionally submitted for inclusion in the Work by You to the
Licensor shall be under the terms and conditions of this License, without any
additional terms or conditions. Notwithstanding the above, nothing herein
shall supersede or modify the terms of any separate license agreement you may
have executed with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade names,
trademarks, service marks, or product names of the Licensor, except as
required for reasonable and customary use in describing the origin of the Work
and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or agreed to in
writing, Licensor provides the Work (and each Contributor provides its
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied, including, without limitation, any warranties
or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any risks
associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory, whether in
tort (including negligence), contract, or otherwise, unless required by
applicable law (such as deliberate and grossly negligent acts) or agreed to in
writing, shall any Contributor be liable to You for damages, including any
direct, indirect, special, incidental, or consequential damages of any
character arising as a result of this License or out of the use or inability
to use the Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all other
commercial damages or losses), even if such Contributor has been advised of
the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing the Work
or Derivative Works thereof, You may choose to offer, and charge a fee for,
acceptance of support, warranty, indemnity, or other liability obligations
and/or rights consistent with this License. However, in accepting such
obligations, You may act only on Your own behalf and on Your sole
responsibility, not on behalf of any other Contributor, and only if You agree
to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
WereSync-1.1.5/MANIFEST.in 0000644 0001750 0001751 00000001117 13501276103 015524 0 ustar daniel daniel 0000000 0000000 include README.rst
include LICENSE.txt
include COPYING
include AUTHORS
include docs/Makefile
recursive-include src *.py
recursive-include tests *.py
recursive-include docs *.rst
recursive-include docs *.py
recursive-include docs *.inc
recursive-include docs/source *.html
recursive-include docs/source *.png
recursive-include src *.svg
recursive-include src *.png
recursive-include src *.po
include src/weresync/resources/weresync.service
include src/weresync/resources/weresync-dbus.conf
include src/weresync/resources/weresync-gui.desktop
include src/weresync/resources/locale/weresync.pot WereSync-1.1.5/PKG-INFO 0000644 0001750 0001751 00000016352 13503555360 015101 0 ustar daniel daniel 0000000 0000000 Metadata-Version: 1.0
Name: WereSync
Version: 1.1.5
Summary: Incrementally clones Linux drives
Home-page: https://github.com/DonyorM/weresync
Author: Daniel Manila
Author-email: dmv@springwater7.org
License: Apache 2.0
Description: ########
WereSync
########
`Installation <#installation>`__ | `Basic Usage <#basic-usage>`__ | `Documentation `__ | `Contributing <#contributing-and-bug-reports>`__
.. image:: https://github.com/DonyorM/weresync/raw/master/docs/source/img/weresync-logo.png
:align: center
:alt: WereSync Logo
A lone hard drive stands atop a data heap, staring at the full moon. Suddenly, it
transforms...into a bootable clone of your drive, whirring hungrily at the digital
moon.
WereSync takes a Linux hard drive and effectively clones it, but works incrementally
so you don't have to spend so long backing up each time. Additionally, WereSync
can clone to a smaller drive, if your data will fit on the smaller drive. Because WereSync
uses rsync to copy, it can copy a running drive, though certain parts of state may not be
preserved.
Why Use WereSync?
=================
Hopefully, you think this project looks amazing and you want to try it right away.
However, you may be skeptical about the usefulness of WereSync. You may be
thinking, I can do this exact same thing using gparted or ddrescue. Hear me out!
There are a few reasons to use WereSync over the other tools.
- **WereSync is accessible to less-technical users.** It comes with a simple
interface and clone a drive with a single command while your computer is
running. No booting to a live disk or pushing through a long initiation
process. Unlike `dd` or CloneZilla, WereSync requires a low level of
technical skill and has an easy learning curve
- WereSync can run while the your main drive is being used, instead of blocking your computer up for hours at a time
- WereSync will incrementally update clones, making subsequent clones much faster.
- WereSync works quickly, a single command copies your entire drive, no booting to live CDs or managing MBRs.
- WereSync can copy to a smaller drive, provided your drive's data will fit.
- WereSync creates new UUIDs for the new partitions, allowing you to use the old and new drives alongside each other.
Full documentation may be found `here `__.
Installation
============
WereSync can be installed using the `setup.py` file.
.. code-block:: bash
$ ./setup.py install
If you have `pip `__ installed, you can easily install WereSync with the following command::
$ pip install weresync
For more in-depth instructions, see the `installation documentation `__.
Basic Usage
===========
**Note:** The WereSync daemon requires root capabilities to run because it has
to access block devices. The client GUI and CLI programs do not need root permissions.
Copy the policy file in `src/wersync/resources/weresync-dbus.conf` to
`/etc/dbus-1/system.d`. Then start the daemon::
$ sudo weresync-daemon & >/dev/null 2>&1
Then gui can be launched with the command::
$ weresync-gui
Which generates the following GUI, though generally the advanced options are unneeded:
.. image:: https://github.com/DonyorM/weresync/raw/master/docs/source/img/gui-example.png
:align: left
:alt: Picture of WereSync GUI
To see the options for the terminal command use::
$ weresync -h
To copy from /dev/sda to /dev/sdb (the two drives must have the same partition scheme) use::
$ weresync /dev/sda /dev/sdb
After the copy is completely finished, you can kill the daemon process.
For more information, including how to copy the partition table from drive to
another, see the `Basic Usage `__
documentation page.
Documentation
=============
Documentation can be found on the `Read the Docs `__.
Contributing and Bug Reports
============================
First, take a look at our `contribution guidelines `__.
To contribute simply fork this repository, make your changes, and submit a pull
request. Bugs can be reported on the `issue tracker `__
WereSync currently has huge need of people testing the program on complex drive setups. In order to do this please:
1. Install WereSync from pip::
pip install weresync
#. Run it on your system::
sudo weresync -C source_drive target_drive
#. Report any errors to the `issue tracker `__. Please be sure to post the contents of ``/var/log/weresync/weresync.log`` and ``fdisk -l``.
All contributions will be greatly appreciated!
Distributions Capability for Drive Copying
------------------------------------------
|ubuntu| |debian| |arch| |centos| |fedora| |opensuse|
.. |ubuntu| image:: https://img.shields.io/badge/ubuntu-stable-brightgreen.svg
.. |arch| image:: https://img.shields.io/badge/Arch%20Linux-stable-brightgreen.svg
.. |centos| image:: https://img.shields.io/badge/CentOS-not%20tested-red.svg
.. |fedora| image:: https://img.shields.io/badge/Fedora-not%20tested-red.svg
.. |opensuse| image:: https://img.shields.io/badge/openSUSE-not%20tested-red.svg
.. |debian| image:: https://img.shields.io/badge/Debian-stable-brightgreen.svg
If you are able to test any of these systems, please report your exprience at the `issue tracker `__. Any help will be much appreciated.
Licensing
=========
This project is licensed under the `Apache 2.0 License `__. Licensing is in the **LICENSE.txt** file in this directory.
Acknowledgments
===============
Huge thanks to the creators of:
* `rsync `__, whose software allowed this project to be possible.
* `GNU Parted `__
* And `GPT fdisk `__
Keywords: clone,linux,backup,smaller drive
Platform: UNKNOWN
WereSync-1.1.5/README.rst 0000644 0001750 0001751 00000013444 13501054034 015460 0 ustar daniel daniel 0000000 0000000 ########
WereSync
########
`Installation <#installation>`__ | `Basic Usage <#basic-usage>`__ | `Documentation `__ | `Contributing <#contributing-and-bug-reports>`__
.. image:: https://github.com/DonyorM/weresync/raw/master/docs/source/img/weresync-logo.png
:align: center
:alt: WereSync Logo
A lone hard drive stands atop a data heap, staring at the full moon. Suddenly, it
transforms...into a bootable clone of your drive, whirring hungrily at the digital
moon.
WereSync takes a Linux hard drive and effectively clones it, but works incrementally
so you don't have to spend so long backing up each time. Additionally, WereSync
can clone to a smaller drive, if your data will fit on the smaller drive. Because WereSync
uses rsync to copy, it can copy a running drive, though certain parts of state may not be
preserved.
Why Use WereSync?
=================
Hopefully, you think this project looks amazing and you want to try it right away.
However, you may be skeptical about the usefulness of WereSync. You may be
thinking, I can do this exact same thing using gparted or ddrescue. Hear me out!
There are a few reasons to use WereSync over the other tools.
- **WereSync is accessible to less-technical users.** It comes with a simple
interface and clone a drive with a single command while your computer is
running. No booting to a live disk or pushing through a long initiation
process. Unlike `dd` or CloneZilla, WereSync requires a low level of
technical skill and has an easy learning curve
- WereSync can run while the your main drive is being used, instead of blocking your computer up for hours at a time
- WereSync will incrementally update clones, making subsequent clones much faster.
- WereSync works quickly, a single command copies your entire drive, no booting to live CDs or managing MBRs.
- WereSync can copy to a smaller drive, provided your drive's data will fit.
- WereSync creates new UUIDs for the new partitions, allowing you to use the old and new drives alongside each other.
Full documentation may be found `here `__.
Installation
============
WereSync can be installed using the `setup.py` file.
.. code-block:: bash
$ ./setup.py install
If you have `pip `__ installed, you can easily install WereSync with the following command::
$ pip install weresync
For more in-depth instructions, see the `installation documentation `__.
Basic Usage
===========
**Note:** The WereSync daemon requires root capabilities to run because it has
to access block devices. The client GUI and CLI programs do not need root permissions.
Copy the policy file in `src/wersync/resources/weresync-dbus.conf` to
`/etc/dbus-1/system.d`. Then start the daemon::
$ sudo weresync-daemon & >/dev/null 2>&1
Then gui can be launched with the command::
$ weresync-gui
Which generates the following GUI, though generally the advanced options are unneeded:
.. image:: https://github.com/DonyorM/weresync/raw/master/docs/source/img/gui-example.png
:align: left
:alt: Picture of WereSync GUI
To see the options for the terminal command use::
$ weresync -h
To copy from /dev/sda to /dev/sdb (the two drives must have the same partition scheme) use::
$ weresync /dev/sda /dev/sdb
After the copy is completely finished, you can kill the daemon process.
For more information, including how to copy the partition table from drive to
another, see the `Basic Usage `__
documentation page.
Documentation
=============
Documentation can be found on the `Read the Docs `__.
Contributing and Bug Reports
============================
First, take a look at our `contribution guidelines `__.
To contribute simply fork this repository, make your changes, and submit a pull
request. Bugs can be reported on the `issue tracker `__
WereSync currently has huge need of people testing the program on complex drive setups. In order to do this please:
1. Install WereSync from pip::
pip install weresync
#. Run it on your system::
sudo weresync -C source_drive target_drive
#. Report any errors to the `issue tracker `__. Please be sure to post the contents of ``/var/log/weresync/weresync.log`` and ``fdisk -l``.
All contributions will be greatly appreciated!
Distributions Capability for Drive Copying
------------------------------------------
|ubuntu| |debian| |arch| |centos| |fedora| |opensuse|
.. |ubuntu| image:: https://img.shields.io/badge/ubuntu-stable-brightgreen.svg
.. |arch| image:: https://img.shields.io/badge/Arch%20Linux-stable-brightgreen.svg
.. |centos| image:: https://img.shields.io/badge/CentOS-not%20tested-red.svg
.. |fedora| image:: https://img.shields.io/badge/Fedora-not%20tested-red.svg
.. |opensuse| image:: https://img.shields.io/badge/openSUSE-not%20tested-red.svg
.. |debian| image:: https://img.shields.io/badge/Debian-stable-brightgreen.svg
If you are able to test any of these systems, please report your exprience at the `issue tracker `__. Any help will be much appreciated.
Licensing
=========
This project is licensed under the `Apache 2.0 License `__. Licensing is in the **LICENSE.txt** file in this directory.
Acknowledgments
===============
Huge thanks to the creators of:
* `rsync `__, whose software allowed this project to be possible.
* `GNU Parted `__
* And `GPT fdisk `__
WereSync-1.1.5/docs/ 0000755 0001750 0001751 00000000000 13503555360 014725 5 ustar daniel daniel 0000000 0000000 WereSync-1.1.5/docs/Makefile 0000644 0001750 0001751 00000016707 13501054034 016366 0 ustar daniel daniel 0000000 0000000 # Makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = build
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
# the i18n builder cannot share the environment and doctrees with the others
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
.PHONY: help
help:
@echo "Please use \`make ' where is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " applehelp to make an Apple Help Book"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " epub3 to make an epub3"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
@echo " coverage to run coverage check of the documentation (if enabled)"
@echo " dummy to check syntax errors of document sources"
.PHONY: clean
clean:
rm -rf $(BUILDDIR)/*
.PHONY: html
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
.PHONY: dirhtml
dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
.PHONY: singlehtml
singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
.PHONY: pickle
pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."
.PHONY: json
json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."
.PHONY: htmlhelp
htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."
.PHONY: qthelp
qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/WereSync.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/WereSync.qhc"
.PHONY: applehelp
applehelp:
$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
@echo
@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
@echo "N.B. You won't be able to view it unless you put it in" \
"~/Library/Documentation/Help or install it in your application" \
"bundle."
.PHONY: devhelp
devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/WereSync"
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/WereSync"
@echo "# devhelp"
.PHONY: epub
epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
.PHONY: epub3
epub3:
$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
@echo
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
.PHONY: latex
latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make' in that directory to run these through (pdf)latex" \
"(use \`make latexpdf' here to do that automatically)."
.PHONY: latexpdf
latexpdf:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through pdflatex..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: latexpdfja
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
.PHONY: text
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@echo "Build finished. The text files are in $(BUILDDIR)/text."
.PHONY: man
man:
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
@echo
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
.PHONY: texinfo
texinfo:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
@echo "Run \`make' in that directory to run these through makeinfo" \
"(use \`make info' here to do that automatically)."
.PHONY: info
info:
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
@echo "Running Texinfo files through makeinfo..."
make -C $(BUILDDIR)/texinfo info
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
.PHONY: gettext
gettext:
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
@echo
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
.PHONY: changes
changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."
.PHONY: linkcheck
linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."
.PHONY: doctest
doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
.PHONY: coverage
coverage:
$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
@echo "Testing of coverage in the sources finished, look at the " \
"results in $(BUILDDIR)/coverage/python.txt."
.PHONY: xml
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
.PHONY: pseudoxml
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
.PHONY: dummy
dummy:
$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
@echo
@echo "Build finished. Dummy builder generates no files."
WereSync-1.1.5/docs/source/ 0000755 0001750 0001751 00000000000 13503555360 016225 5 ustar daniel daniel 0000000 0000000 WereSync-1.1.5/docs/source/_templates/ 0000755 0001750 0001751 00000000000 13503555360 020362 5 ustar daniel daniel 0000000 0000000 WereSync-1.1.5/docs/source/_templates/homepage.html 0000644 0001750 0001751 00000000170 13501054034 023021 0 ustar daniel daniel 0000000 0000000
WereSync-1.1.5/docs/source/api.rst 0000644 0001750 0001751 00000002011 13501224365 017516 0 ustar daniel daniel 0000000 0000000 .. include:: global.rst.inc
.. api_documentation:
=================
API Documentation
=================
`weresync.interface` modules
============================
weresync.interface.cli
----------------------
.. automodule:: weresync.interface.cli
:members:
weresync.interface.gui
----------------------
.. automodule:: weresync.interface.gui
:members:
weresync.interface.dbus_client
------------------------------
.. automodule:: weresync.interface.dbus_client
:members:
`weresync.daemon` modules
=========================
`weresync.daemon.device`
------------------------
.. automodule:: weresync.daemon.device
:members:
`weresync.daemon.daemon`
------------------------
.. automodule:: weresync.daemon.daemon
:members:
`weresync.daemon.copier`
------------------------
.. automodule:: weresync.daemon.copier
:members:
`weresync.exception`
====================
.. automodule:: weresync.exception
:members:
`weresync.plugins`
==================
.. automodule:: weresync.plugins
:members:
WereSync-1.1.5/docs/source/bootloader.rst 0000644 0001750 0001751 00000010446 13501054034 021104 0 ustar daniel daniel 0000000 0000000 .. Documentaion on bootloader plugins
.. include:: global.rst.inc
==================
Bootloader Plugins
==================
Bootloader plugins allow WereSync to have special process to install specific
bootloaders, allowing support for a wider variety of bootloaders.
The default bootloader plugin, UUID Copy, simply changes the UUIDs in each
file in the /boot folder. UUIDs in /etc/fstab are always updated, regardless
of boot plugin.
Installing
----------
Bootloader plugins can be installed to two different locations:
``/usr/local/weresync/plugins`` and the python site-packages directory. This
means that plugins can be installed as pip packages or installed manually.
Creating Bootloader Plugins
---------------------------
Bootloader plugins are very simple files. They must be a single python file
that fits the form "weresync_.py". Inside this file, a class
must extend :py:class:`~weresync.plugins.IBootPlugin` and at least implement
the method :py:func:`~weresync.plugins.IBootPlugin.install_bootloader`.
No other files are necessary, but other files may be packaged with a plugin
for it to call within its process.
For an example plugin see the `Grub2 Plugin `_.
Method Implementations
++++++++++++++++++++++
All plugins should extend :py:func:`~weresync.plugins.IBootPlugin`, as
mentioned above (signature: ``class MyPlugin(IBootPlugin)``). They should all
call ``super().__init__(name, prettyName)`` where ``name`` is the portion
of the file name after the "weresync\_" prefix but before the ".py" extension
(weresync_.py). ``prettyName`` can be anything, but should be human
readable. Currently this is only displayed by the GUI.
For any given bootloader plugin, the following methods are called in this
order:
* :py:func:`~weresync.plugins.IBootPlugin.activate` is called before bootloader
installation. All files will be exactly the same as the source drive at this
point. Implementing this method is not required.
* :py:func:`~weresync.plugins.IBootPlugin.install_bootloader` is called to
install the bootloader. This should do the majority of the work. Implementing
this method is required.
* :py:func:`~weresync.plugins.IBootPlugin.deactivate` is called after
bootloader installation is complete. Implementing this method is not
required.
:py:class:`~weresync.plugins.IBootPlugin` contains one more method,
:py:func:`~weresync.plugins.IBootPlugin.get_help`, this is an optional method
that should return a string describing what the plugin accomplishes (i.e. what
bootloader it installs).
Helpful Functions
+++++++++++++++++
Several important methods are available to plugin developers. The ``copier``
parameter of :py:func:`~weresync.plugins.IBootPlugin.install_bootloader`
provides access to a
:py:class:`~weresync.device.DeviceCopier` instance. This instance then provides
access to :py:class:`~weresync.device.DeviceManager` instances through the
``copier.source`` and ``copier.target`` fields. These instances allow a plugin
to mount and umnount partitions and get information about the drives in
question.
The method :py:func:`~weresync.device.DeviceCopier.get_uuid_dict` of the
``copier`` parameter returns a dictionary
relating the UUIDs of the source drive with those of the target drive.
This can be used in conjunction with :py:func:`weresync.device.multireplace`
to update the UUIDs of any given string, for example one from a file.
The function :py:func:`weresync.plugins.translate_uuid` makes use of the
above two functions to step recursively through the passed folder and update
the UUIDs of every text file.
LVM
+++
Your bootloader will be expected to support LVM systems as well. One can test
if Logical Volume Groups are being copied by testing if the ``lvm_source`` field
of the ``copier`` object is not ``None``::
if copier.lvm_source is not None:
# Handle copying VG
The ``lvm_source`` and ``lvm_target`` fields will be
:py:class:`~weresync.device.LVMDeviceManager` objects, but can generally be
treated like ordinary DeviceManager objects.
Builtin Bootloaders
-------------------
UUID Copy
+++++++++
.. automodule:: weresync.plugins.weresync_uuid_copy
Grub2
+++++
.. automodule:: weresync.plugins.weresync_grub2
Syslinux
++++++++
.. automodule:: weresync.plugins.weresync_syslinux
WereSync-1.1.5/docs/source/conf.py 0000644 0001750 0001751 00000023353 13501054034 017520 0 ustar daniel daniel 0000000 0000000 #!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# WereSync documentation build configuration file, created by
# sphinx-quickstart on Thu Nov 3 19:08:36 2016.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import sys
sys.path.insert(0, os.path.abspath('../../src'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#
# needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.doctest',
'sphinx.ext.todo',
'sphinx.ext.coverage',
'sphinx.ext.viewcode',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
#
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The encoding of source files.
#
# source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = 'WereSync'
copyright = '2017, Daniel Manila'
author = 'Daniel Manila'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '1.0'
# The full version, including alpha/beta/rc tags.
release = '1.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = "en"
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#
# today = ''
#
# Else, today_fmt is used as the format for a strftime call.
#
# today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = []
# The reST default role (used for this markup: `text`) to use for all
# documents.
#
# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#
# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#
# add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
# modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
# keep_warnings = False
# If true, `todo` and `todoList` produce output, else they produce nothing.
todo_include_todos = True
# -- Options for HTML output ----------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#
# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = []
# The name for this set of Sphinx documents.
# " v documentation" by default.
#
# html_title = 'WereSync v0.1a'
# A shorter title for the navigation bar. Default is the same as html_title.
#
# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#
# html_logo = None
# The name of an image file (relative to this directory) to use as a favicon of
# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#
# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#
# html_extra_path = []
# If not None, a 'Last updated on:' timestamp is inserted at every page
# bottom, using the given strftime format.
# The empty string is equivalent to '%b %d, %Y'.
#
# html_last_updated_fmt = None
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#
html_use_smartypants = False
# Custom sidebar templates, maps document names to template names.
#
html_sidebars = {"**": ['homepage.html', 'localtoc.html', 'sourcelink.html', 'searchbox.html']}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#
# html_additional_pages = {}
# If false, no module index is generated.
#
# html_domain_indices = True
# If false, no index is generated.
#
# html_use_index = True
# If true, the index is split into individual pages for each letter.
#
# html_split_index = False
# If true, links to the reST sources are added to the pages.
#
# html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#
# html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#
# html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#
# html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
# html_file_suffix = None
# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh'
#
# html_search_language = 'en'
# A dictionary with options for the search language support, empty by default.
# 'ja' uses this config value.
# 'zh' user can custom change `jieba` dictionary path.
#
# html_search_options = {'type': 'default'}
# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
#
# html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'WereSyncdoc'
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#
# 'preamble': '',
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'WereSync.tex', 'WereSync Documentation',
'Daniel Manila', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#
# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#
# latex_use_parts = False
# If true, show page references after internal links.
#
# latex_show_pagerefs = False
# If true, show URL addresses after external links.
#
# latex_show_urls = False
# Documents to append as an appendix to all manuals.
#
# latex_appendices = []
# It false, will not define \strong, \code, itleref, \crossref ... but only
# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
# packages.
#
# latex_keep_old_macro_names = True
# If false, no module index is generated.
#
# latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'weresync', 'WereSync Documentation',
[author], 1)
]
# If true, show URL addresses after external links.
#
# man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'WereSync', 'WereSync Documentation',
author, 'WereSync', 'One line description of project.',
'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.
#
# texinfo_appendices = []
# If false, no module index is generated.
#
# texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#
# texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#
# texinfo_no_detailmenu = False
WereSync-1.1.5/docs/source/global.rst.inc 0000644 0001750 0001751 00000000112 13501054034 020747 0 ustar daniel daniel 0000000 0000000 .. Global includes and various things
.. |project_version| replace:: 0.3
WereSync-1.1.5/docs/source/gui.rst 0000644 0001750 0001751 00000003662 13501221215 017535 0 ustar daniel daniel 0000000 0000000 .. gui information
########################
Graphical User Interface
########################
Provides a simple user interface in order to produce clones. Each field provided by
the GUI has a "What's This?" link which opens a dialog explaining the field.
By default WereSync outputs all log files to ``/var/log/weresync``. If any errors or problems occur, please be sure to include the output of the most recent file in your report.
To start the gui run the command::
$ weresync-gui
.. IMPORTANT::
Be sure to start the weresync daemon first, using::
$ sudo weresync-daemon > /dev/null 2>&1 &
This requires root permissions
.. image:: img/gui-example.png
:align: left
LVM
===
WereSync supports cloning logical volume groups as well. Simply check the
"Copy Logical Volume Groups" option and select your source group from the
dropdown.
If the target group name is left as "Default" then WereSync will simply use
the name of the source group with "-copy" appended to it. WereSync will create
the target volume group if it does not already exist.
Bootloader Installation
=======================
WereSync will attempt to install a bootloader onto your drive, based on your
choice in the "Bootloader Plugin" entry. If you are unsure which to pick,
use the default "UUID Copy" plugin. WereSync cannot properly install all
bootloaders. You may have to manually adjust some settings after the clone
finishes.
If you have your /boot directory on another partition, be sure to pass that partition number to the "Boot Partition" field under advanced options.
Dependencies
============
The WereSync GUI runs using GTK and requires the `PyGObject `_ bindings to be installed. On Ubuntu these can be installed with::
$ sudo apt install python3-gi
API Reference
=============
The GUI can be started from the ``gui`` module with the method ``start_gui()``::
>>> import weresync.gui
>>> weresync.gui.start_gui()
WereSync-1.1.5/docs/source/img/ 0000755 0001750 0001751 00000000000 13503555360 017001 5 ustar daniel daniel 0000000 0000000 WereSync-1.1.5/docs/source/img/gui-example.png 0000644 0001750 0001751 00000150521 13501054034 021716 0 ustar daniel daniel 0000000 0000000 PNG
IHDR O j a sBIT|d tEXtSoftware gnome-screenshot> IDATxw|elnM6@nwA8=8φz*bED,v)q"%]%@IH$-3?`fC_U3;w<3lٲEs:8$ !B!8ߨBw@PP~~~F
6hv˗3rHCXXXsW!B!M~~>6l`Ǟs& eʕ+[X,\.˛B!B,t:F@vv6}.W\Ahh(]O!B!hVR^^Nyy9'w믿殣B!B8^Cll, 5sB!j1v7w}B!2u n< !B!D$yB!B2lO!BqN8~8۷o?sH4mIϓB93YGl-oO(Wb1ud,ul?܂-2oG)*a+7;Ug՞nR%" !h[ ƌ2ٺu+УG4Mcdffr1OHHW>< !KFn##A/ ŕl' GQ!Da;
N)V>_>`¢St0jeEBB9rEQpdffбcG"##q8^I!@.m`!2q%ĠeQ(@v:1;;
>ɂZr['(XId]C8Ȣy_xnyc!cd,?GFGNמc}ocBgƎO^gQѷpm<\ e `]:6&bKqEˡLa@qd`!p:4oÇONKNN/$77e؞BS!rgQFaJ'3]8ST@{XTW."{Q~NNI*>9`(mC1/ogO&