Add sysutils/duplicity-devel: Backup tool that uses librsync and GnuPG

This is the current development release.

Duplicity backs directories by producing encrypted tar-format volumes and
uploading them to a remote or local file server. Because duplicity uses
librsync, the incremental archives are space efficient and only record the
parts of files that have changed since the last backup. Because duplicity
uses GnuPG to encrypt and/or sign these archives, they will be safe from
spying and/or modification by the server.

WWW: http://duplicity.nongnu.org
This commit is contained in:
Danilo G. Baio 2019-11-15 14:38:15 +00:00
parent d16aa6e2f8
commit 144c7855e2
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=517676
7 changed files with 230 additions and 0 deletions

View File

@ -277,6 +277,7 @@
SUBDIR += dunst
SUBDIR += dupd
SUBDIR += duplicity
SUBDIR += duplicity-devel
SUBDIR += duply
SUBDIR += dupmerge
SUBDIR += dvd+rw-tools

View File

@ -0,0 +1,92 @@
# Created by: Gerhard Häring <gh@ghaering.de>
# $FreeBSD$
PORTNAME= duplicity
PORTVERSION= 0.8.07
CATEGORIES= sysutils
MASTER_SITES= http://launchpad.net/duplicity/0.8-series/${PORTVERSION}/+download/
PKGNAMESUFFIX= -devel
MAINTAINER= dbaio@FreeBSD.org
COMMENT= Backup tool that uses librsync and GnuPG
LICENSE= GPLv2+
LICENSE_FILE= ${WRKSRC}/COPYING
LIB_DEPENDS= librsync.so:net/librsync2
RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}fasteners>=0:devel/py-fasteners@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}paramiko>=0:security/py-paramiko@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}pexpect>0:misc/py-pexpect@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}requests>=0:www/py-requests@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}urllib3>=0:net/py-urllib3@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}mock>0:devel/py-mock@${PY_FLAVOR} \
${PYTHON_PKGNAMEPREFIX}future>0:devel/py-future@${PY_FLAVOR}
USES= localbase python shebangfix
USE_PYTHON= autoplist distutils noflavors
USE_LDCONFIG= yes
CONFLICTS_INSTALL= duplicity
SHEBANG_FILES= bin/duplicity bin/rdiffdir
PORTDOCS= CHANGELOG COPYING README README-REPO README-LOG
OPTIONS_DEFINE= DOCS FTP FTPS GDOCS GIO NLS S3
OPTIONS_GROUP= GPG
OPTIONS_SINGLE= GPG
OPTIONS_SINGLE_GPG= GNUPG GNUPG2
OPTIONS_DEFAULT= FTP FTPS GNUPG2 S3
FTP_DESC= FTP backend
FTPS_DESC= FTPS backend
GDOCS_DESC= Google Docs backend
GIO_DESC= GIO backend
GPG_DESC= GnuPG support
GNUPG_DESC= Use GnuPG 1
GNUPG2_DESC= Use GnuPG 2
S3_DESC= Amazon S3 backend
FTP_RUN_DEPENDS= ncftp>=3.2.2:ftp/ncftp3
FTPS_RUN_DEPENDS= lftp>=3.7.15:ftp/lftp
GDOCS_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}gdata>0:devel/py-gdata@${PY_FLAVOR}
GIO_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}gobject>0:devel/py-gobject@${PY_FLAVOR} \
dbus>0:devel/dbus
GNUPG_RUN_DEPENDS= gnupg1>=1.4.7:security/gnupg1
GNUPG2_RUN_DEPENDS= gpg2:security/gnupg
NLS_USES= gettext
S3_RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}boto>=1.6b:devel/py-boto@${PY_FLAVOR}
post-patch:
.for f in cfbackend _cf_cloudfiles _cf_pyrax
@${RM} ${WRKSRC}/${PORTNAME}/backends/${f}.py
.endfor
post-patch-NLS-off:
@${REINPLACE_CMD} -e '55,63d' \
${WRKSRC}/setup.py
post-patch-FTP-off:
@${RM} ${WRKSRC}/${PORTNAME}/backends/ftpbackend.py
post-patch-FTPS-off:
@${RM} ${WRKSRC}/${PORTNAME}/backends/ftpsbackend.py
post-patch-S3-off:
.for f in botobackend _boto_multi _boto_single
@${RM} ${WRKSRC}/${PORTNAME}/backends/${f}.py
.endfor
post-patch-GDOCS-off:
@${RM} ${WRKSRC}/${PORTNAME}/backends/gdocsbackend.py
post-patch-GIO-off:
@${RM} ${WRKSRC}/${PORTNAME}/backends/giobackend.py
post-install:
@${STRIP_CMD} ${STAGEDIR}${PYTHON_SITELIBDIR}/duplicity/_librsync.so
post-install-DOCS-on:
@${MKDIR} ${STAGEDIR}${DOCSDIR}
${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|g} ${STAGEDIR}${DOCSDIR}
.include <bsd.port.mk>

View File

@ -0,0 +1,3 @@
TIMESTAMP = 1573778409
SHA256 (duplicity-0.8.07.tar.gz) = e961a108763fa45a9f9c8d13d9cd6dae518b68f09922a0371c9468b0f0c13781
SIZE (duplicity-0.8.07.tar.gz) = 1848584

View File

@ -0,0 +1,95 @@
--- setup.py.orig 2019-07-25 14:48:21 UTC
+++ setup.py
@@ -23,7 +23,6 @@
import sys
import os
from setuptools import setup, Extension
-from setuptools.command.test import test
from setuptools.command.install import install
from setuptools.command.sdist import sdist
from distutils.command.build_scripts import build_scripts
@@ -50,12 +49,6 @@ if os.name == u'posix':
data_files = [(u'share/man/man1',
[u'bin/duplicity.1',
u'bin/rdiffdir.1']),
- (u'share/doc/duplicity-%s' % version_string,
- [u'COPYING',
- u'README',
- u'README-REPO',
- u'README-LOG',
- u'CHANGELOG']),
]
top_dir = os.path.dirname(os.path.abspath(__file__))
@@ -79,47 +72,9 @@ else:
ext_modules = []
-class TestCommand(test):
-
- def run(self):
- # Make sure all modules are ready
- build_cmd = self.get_finalized_command(u"build_py")
- build_cmd.run()
- # And make sure our scripts are ready
- build_scripts_cmd = self.get_finalized_command(u"build_scripts")
- build_scripts_cmd.run()
-
- # make symlinks for test data
- if build_cmd.build_lib != top_dir:
- for path in [u'testfiles.tar.gz', u'gnupg']:
- src = os.path.join(top_dir, u'testing', path)
- target = os.path.join(build_cmd.build_lib, u'testing', path)
- try:
- os.symlink(src, target)
- except Exception:
- pass
-
- os.environ[u'PATH'] = u"%s:%s" % (
- os.path.abspath(build_scripts_cmd.build_dir),
- os.environ.get(u'PATH'))
-
- test.run(self)
-
-
class InstallCommand(install):
def run(self):
- # Normally, install will call build(). But we want to delete the
- # testing dir between building and installing. So we manually build
- # and mark ourselves to skip building when we run() for real.
- self.run_command(u'build')
- self.skip_build = True
-
- # This should always be true, but just to make sure!
- if self.build_lib != top_dir:
- testing_dir = os.path.join(self.build_lib, u'testing')
- os.system(u"rm -rf %s" % testing_dir)
-
install.run(self)
@@ -186,21 +141,14 @@ setup(name=u"duplicity",
url=u"http://duplicity.nongnu.org/index.html",
packages=[u'duplicity',
u'duplicity.backends',
- u'duplicity.backends.pyrax_identity',
- u'testing',
- u'testing.functional',
- u'testing.overrides',
- u'testing.unit'],
+ u'duplicity.backends.pyrax_identity'],
package_dir={u"duplicity": u"duplicity",
u"duplicity.backends": u"duplicity/backends", },
ext_modules=ext_modules,
scripts=[u'bin/rdiffdir', u'bin/duplicity'],
data_files=data_files,
install_requires=[u'fasteners', u'future'],
- tests_require=[u'pytest', u'pytest-runner', u'fasteners', u'future', u'mock', u'pexpect'],
- test_suite=u'testing',
- cmdclass={u'test': TestCommand,
- u'install': InstallCommand,
+ cmdclass={u'install': InstallCommand,
u'sdist': SDistCommand,
u'build_scripts': BSCommand},
classifiers=[u"Programming Language :: Python :: 2",

View File

@ -0,0 +1,8 @@
Duplicity backs directories by producing encrypted tar-format volumes and
uploading them to a remote or local file server. Because duplicity uses
librsync, the incremental archives are space efficient and only record the
parts of files that have changed since the last backup. Because duplicity
uses GnuPG to encrypt and/or sign these archives, they will be safe from
spying and/or modification by the server.
WWW: http://duplicity.nongnu.org

View File

@ -0,0 +1,29 @@
[
{ type: install
message: <<EOM
The following backends are supported by duplicity itself, but will
require manual installation of their respective dependencies because
they are not yet available in the ports tree:
- The Dropbox backend
- The HSI backend
- The mega backend for mega.co.nz
- The swift backend for OpenStack Object Storage
- The tahoe backend for Tahoe-LAFS
Please refer to upstream duplicity documentation for information on
the use of these backends.
For gnupg 2 insert "pinentry-mode loopback" into ~/.gnupg/gpg.conf
and "allow-loopback-pinentry" into ~/.gnupg/gpg-agent.conf
Some fixes related to gnupg handling were made in v0.7.12.
Please visit the following URL for more information:
http://duplicity.nongnu.org/CHANGELOG
EOM
}
]

View File

@ -21,6 +21,8 @@ USES= python:2.7 shebangfix
USE_PYTHON= autoplist distutils
USE_LDCONFIG= yes
CONFLICTS_INSTALL= duplicity-devel
SHEBANG_FILES= bin/duplicity bin/rdiffdir
PORTDOCS= CHANGELOG COPYING README README-REPO README-LOG