Package: duplicity
Version: 0.8.05-2
Severity: important
Tags: patch
Dear Maintainer,
Today I tried to restore directory from a backup with deja-dup. The restoration
always failed with the following traceback:
Traceback (innermost last):
File "/usr/bin/duplicity", line 107, in <module>
with_tempdir(main)
File "/usr/bin/duplicity", line 93, in with_tempdir
fn()
File "/usr/lib/python3/dist-packages/duplicity/dup_main.py", line 1521, in
main
action = commandline.ProcessCommandLine(sys.argv[1:])
File "/usr/lib/python3/dist-packages/duplicity/commandline.py", line 1216, in
ProcessCommandLine
backup, local_pathname = set_backend(args[0], args[1])
File "/usr/lib/python3/dist-packages/duplicity/commandline.py", line 1087, in
set_backend
globals.backend = backend.get_backend(bend)
File "/usr/lib/python3/dist-packages/duplicity/backend.py", line 225, in
get_backend
obj = get_backend_object(url_string)
File "/usr/lib/python3/dist-packages/duplicity/backend.py", line 211, in
get_backend_object
return factory(pu)
File "/usr/lib/python3/dist-packages/duplicity/backends/giobackend.py", line
81, in __init__
ensure_dbus()
File "/usr/lib/python3/dist-packages/duplicity/backends/giobackend.py", line
37, in ensure_dbus
lines = output.split(u'\n')
TypeError: a bytes-like object is required, not 'str'
The folder in question is on a secondary, ntfs drive. If I try to restore a
file on the main drive,
no error happens. This is probably because deja-dup does not use the gio
backend in this case.
The following patch fixes the problem for me:
--- /tmp/foo.py 2019-11-09 22:52:50.535057865 +0100
+++ /usr/lib/python3/dist-packages/duplicity/backends/giobackend.py
2019-11-09 22:53:22.780500816 +0100
@@ -33,7 +33,7 @@
# when required. So we make sure that such a bus exists and that our
# environment points to it.
if u'DBUS_SESSION_BUS_ADDRESS' not in os.environ:
- output = subprocess.Popen([u'dbus-launch'],
stdout=subprocess.PIPE).communicate()[0]
+ output = subprocess.Popen([u'dbus-launch'],
stdout=subprocess.PIPE).communicate()[0].decode("utf8", errors="replace")
lines = output.split(u'\n')
for line in lines:
parts = line.split(u'=', 1)
-- System Information:
Debian Release: bullseye/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 5.2.0-3-amd64 (SMP w/2 CPU cores)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE,
TAINT_UNSIGNED_MODULE
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8),
LANGUAGE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
Versions of packages duplicity depends on:
ii gnupg 2.2.17-3
ii libc6 2.29-2
ii librsync2 2.0.2-1
ii python3 3.7.3-1
ii python3-fasteners 0.12.0-5
ii python3-future 0.16.0-1
ii python3-lockfile 1:0.12.2-2
Versions of packages duplicity recommends:
ii python3-oauthlib 2.1.0-1
ii python3-paramiko 2.6.0-1
ii python3-pexpect 4.6.0-1
ii python3-urllib3 1.24.1-1
ii rsync 3.1.3-6+b1
Versions of packages duplicity suggests:
pn lftp <none>
pn ncftp <none>
pn par2 <none>
pn python3-boto <none>
ii python3-pip 18.1-5
pn python3-swiftclient <none>
pn tahoe-lafs <none>
-- no debconf information
--- /tmp/foo.py 2019-11-09 22:52:50.535057865 +0100
+++ /usr/lib/python3/dist-packages/duplicity/backends/giobackend.py
2019-11-09 22:53:22.780500816 +0100
@@ -33,7 +33,7 @@
# when required. So we make sure that such a bus exists and that our
# environment points to it.
if u'DBUS_SESSION_BUS_ADDRESS' not in os.environ:
- output = subprocess.Popen([u'dbus-launch'],
stdout=subprocess.PIPE).communicate()[0]
+ output = subprocess.Popen([u'dbus-launch'],
stdout=subprocess.PIPE).communicate()[0].decode("utf8", errors="replace")
lines = output.split(u'\n')
for line in lines:
parts = line.split(u'=', 1)
--- /tmp/foo.py 2019-11-09 22:52:50.535057865 +0100
+++ /usr/lib/python3/dist-packages/duplicity/backends/giobackend.py
2019-11-09 22:53:22.780500816 +0100
@@ -33,7 +33,7 @@
# when required. So we make sure that such a bus exists and that our
# environment points to it.
if u'DBUS_SESSION_BUS_ADDRESS' not in os.environ:
- output = subprocess.Popen([u'dbus-launch'],
stdout=subprocess.PIPE).communicate()[0]
+ output = subprocess.Popen([u'dbus-launch'],
stdout=subprocess.PIPE).communicate()[0].decode("utf8", errors="replace")
lines = output.split(u'\n')
for line in lines:
parts = line.split(u'=', 1)