Duplicacy Web Edition 0.2.10 Beta is now available



I want to add an existing B2 bucket, but I get empty Storage page after I add the bucket.

2019/01/02 01:19:58 Running /home/myname/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 [-log -d info -repository /home/myname/.duplicacy-web/repositories/localhost/all b2://my-backup-bucket]
2019/01/02 01:19:58 Set current working directory to /home/myname/.duplicacy-web/repositories/localhost/all
2019/01/02 01:19:58 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_B2_ID
2019/01/02 01:19:58 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_B2_KEY
2019/01/02 01:20:03 INFO STORAGE_ENCRYPTED The storage is encrypted with a password
2019/01/02 01:20:03 INFO STORAGE_SNAPSHOT ubuntu-backup
2019/01/02 01:20:13 POST /lookup_storage
2019/01/02 01:20:13 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:14 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:15 POST /lookup_storage
2019/01/02 01:20:25 POST /add_storage
2019/01/02 01:20:25 Running /home/myname/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 [-log -d init -e -storage-name ubuntu-backup duplicacy-web b2://my-backup-bucket]
2019/01/02 01:20:25 Set current working directory to /home/myname/.duplicacy-web/repositories/localhost/all
2019/01/02 01:20:25 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_ID
2019/01/02 01:20:25 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_KEY
2019/01/02 01:20:27 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_ID
2019/01/02 01:20:27 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_B2_KEY
2019/01/02 01:20:27 DEBUG PASSWORD_ENV_VAR Reading the environment variable DUPLICACY_UBUNTU-BACKUP_PASSWORD
2019/01/02 01:20:30 TRACE CONFIG_ITERATIONS Using 16384 iterations for key derivation
2019/01/02 01:20:30 DEBUG BACKBLAZE_CALL URL request 'HEAD https://f001.backblazeb2.com/file/my-backup-bucket/nesting' returned status code 404
2019/01/02 01:20:30 DEBUG BACKBLAZE_LIST b2_download_file_by_name did not return headers
2019/01/02 01:20:30 DEBUG STORAGE_NESTING Chunk read levels: [1], write level: 1
2019/01/02 01:20:30 INFO STORAGE_CONFIGURED The storage 'b2://my-backup-bucket' has already been initialized
2019/01/02 01:20:30 INFO CONFIG_INFO Compression level: 100
2019/01/02 01:20:30 INFO CONFIG_INFO Average chunk size: 4194304
2019/01/02 01:20:30 INFO CONFIG_INFO Maximum chunk size: 16777216
2019/01/02 01:20:30 INFO CONFIG_INFO Minimum chunk size: 1048576
2019/01/02 01:20:30 INFO CONFIG_INFO Chunk seed: 6475706c6963616379
2019/01/02 01:20:30 INFO REPOSITORY_INIT /home/myname/.duplicacy-web/repositories/localhost/all will be backed up to b2://my-backup-bucket with id duplicacy-web
2019/01/02 01:20:32 GET /storage
2019/01/02 01:20:32 Failed to read the stat file for storage 'ubuntu-backup': open /home/myname/.duplicacy-web/stats/storages/ubuntu-backup.stats: no such file or directory
2019/01/02 01:20:32 An error has occurred: runtime error: index out of range
2019/01/02 01:20:32 goroutine 63 [running]:
runtime/debug.Stack(0xcc59a1, 0x19, 0xc42016cc58)
	/usr/local/go/src/runtime/debug/stack.go:24 +0xa7
	/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_utils.go:26 +0x94
panic(0xbab6e0, 0x11cc620)
	/usr/local/go/src/runtime/panic.go:502 +0x229
main.storagesHandler(0xe09820, 0xc420343ce0, 0xc420137200)
	/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_storage.go:460 +0x300f
net/http.HandlerFunc.ServeHTTP(0xd7ce90, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:1947 +0x44
net/http.(*ServeMux).ServeHTTP(0x11e01c0, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:2340 +0x130
main.logHTTPRequest.func1(0xe09820, 0xc420343ce0, 0xc420137200)
	/Users/chgang/zincbox/go/src/github.com/gilbertchen/duplicacy-web/dwe/dwe_main.go:542 +0x1c6
net/http.HandlerFunc.ServeHTTP(0xc4201e6220, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:1947 +0x44
net/http.serverHandler.ServeHTTP(0xc420401930, 0xe09820, 0xc420343ce0, 0xc420137200)
	/usr/local/go/src/net/http/server.go:2697 +0xbc
net/http.(*conn).serve(0xc420098d20, 0xe0a1e0, 0xc4203ca440)
	/usr/local/go/src/net/http/server.go:1830 +0x651
created by net/http.(*Server).Serve
	/usr/local/go/src/net/http/server.go:2798 +0x27b

~/.duplicacy-web/stats/storages is empty.


This was caused by the same bug found by @pdaemon and has been fixed in 0.2.8.


Thanks @gchen, I confirm it fixed the issue.

Small other bug/question, If I open a revision it does not list all files in the backup:


Is it possible to create the Windows startup service with the Start Menu shortcut instead of the executable? With each new version, the older web version still exists in the install directory and if you have it set to auto start, the older version is used instead of the newer one.


I have a request for the scheduler. I defined some maintenance task that are launched every week or every month at a specific hour. The issue is that, if my PC isn’t running at the specific date, time where the task should be launched, then the task is never lauched. I think that if a shedule task has been passed (without execution of the task), it should be launched ASAP, when the scheduler is launched. This should be at least, an option for a task.


Thanks for the quick response to address these issues.

I can confirm that 0.2.8 does seem to fix the “Listing Session expired” error with SFTP.

Are you saying that the only restore options 1 have is :-

  1. Restore the whole repository
  2. files in the root directory of the repository

Because that is all I am able to do. Web GUI seems to suggest I should be able to at least pick 1 file or 1 sub directory to restore, but that does not seem to work (unless it is 1 file in the root directory). I am hoping I am missing something simple, because if restore functionality is limited to that, it is a bit cumbersome.


I am not sure if this fix has not created another bug. I went to test this, but when I click test, the whole web GUI seems to hang up. It is like it is working doing the test, and the dialogue box is still up, but nothing happens. When I get sick of waiting and try and press the “test” or “save” button, nothing happens. Pressing cancel will make the dialogue box disappear, but the whole Web GUI seems to have hung up and I can’t make it do anything. eg If I press the Dashboard, I just get the icon circling. If I see if anything saved when I pressed the save button, nothing has saved. From a quick investigation, only way to restore things is to close down Duplicacy and restart it. But if I repeat this, I have the same issue, so it seems to be reproducible.

Now a few things to not about this :-

  1. I am trying to do email without authentication, and have left Username and password blank. In truth, I am not sure if I need to authenticate or not (I think not from this address). But this might help you reproduce.

  2. I have tried with authentication and filled out username/password, and this does appear to avoid the issue, so the bug seems to be if you try with no authentication.

However, if I try with authentication I get a “Failed to send the email: dial tcp connectex: An attempt was made to access a socket in a way forbidden by its access permissions.”

Am I missing something?

Thanks heaps.


{{status}} works a treat and solves the problem completely. Sure, it would be nice to summaries the actual contents of the backup job more nicely and enable summarisation of multiple jobs in the fullness of time no doubt when that bubbles to the top priority, and can totally understand why that might be lower down the priority list.

Item 4, is not something you can do anything by definition as you can’t do anything if your process accidently or unexpectedly crashes. But I listed in there as reference for other people in case they wanted to use the gmail rule functionality, and also highlight the importance of being able to list jobs as success or failure.

Thanks for the hard work.


I have one actual functional issue this time.

  1. If I run the executable as a service on linux as root (defaults to creating and using /.duplicacy-web/), then any interaction with the web UI that uses the executable fails since the path to the executable is missing a leading /.
Failed to check the storage at /tmp: fork/exec .duplicacy-web/bin/duplicacy_linux_x64_2.1.2: no such file or directory

edit: if I specify User=root in the service file, then it writes to /root/.duplicacy-web/ instead and everything works as expected. I guess it just doesn’t like /.duplicacy-web/ to be in the root path.

  1. Storage > Storage Configuration > S3: “Endpiont” is misspelled.



This is my systemd unit file:

cat /lib/systemd/system/duplicacy.service 
Description=Duplicacy Backup Service

ExecStart=/usr/local/duplicacy/duplicacy_web &


In my setup /usr/local/duplicacy/duplicacy_web is a symlink to the version of duplicacy executable I prefer…

It would be good if the the directory for duplicacy for executable + config under linux could be /usr/local/duplicacy or /opt/duplicacy instead of /root/.duplicacy web.

root@earth:/usr/local/duplicacy# ls -altr
total 132668
-rwxr-xr-x  1 root root  22428329 Nov  5 12:16 duplicacy_web_linux_x64_0.1.0
drwxrwsr-x 13 root staff     4096 Dec  5 06:13 ..
-rwxr-xr-x  1 root staff 22735834 Dec 14 10:15 duplicacy_web_linux_x64_0.2
-rwxr-xr-x  1 root staff 22735834 Dec 17 10:31 duplicacy_web_linux_x64_0.2.1
-rwxr-xr-x  1 root staff 22646476 Dec 22 10:06 duplicacy_web_linux_x64_0.2.5
-rwxr-xr-x  1 root staff 22646476 Dec 25 00:40 duplicacy_web_linux_x64_0.2.7
-rwxr-xr-x  1 root staff 22646476 Jan  2 04:17 duplicacy_web_linux_x64_0.2.8
lrwxrwxrwx  1 root staff       29 Jan  2 07:12 duplicacy_web -> duplicacy_web_linux_x64_0.2.8
drwxr-sr-x  2 root staff     4096 Jan  2 07:12 .

root@earth:/usr/local/duplicacy# systemctl status duplicacy.service 
● duplicacy.service - Duplicacy Backup Service
   Loaded: loaded (/lib/systemd/system/duplicacy.service; disabled; vendor prese
   Active: active (running) since Wed 2019-01-02 07:13:07 AWST; 3 days ago
 Main PID: 20691 (duplicacy_web)
   CGroup: /system.slice/duplicacy.service
           ├─18328 /root/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 -log check
           ├─18329 /root/.duplicacy-web/bin/duplicacy_linux_x64_2.1.2 -log check
           └─20691 /usr/local/duplicacy/duplicacy_web &

Cheers pdaemon


@adriankoooo are you able to scroll down to see the rest of the list?


@camjac521 Windows service support is planned after the official release is out. You can just re-check the Start on Login menu after installing a new version and the startup registry will be updated accordingly.


I’ll fix the hanging issue when no username or password is entered, but the email you got was caused by your Windows Firewall.


@leerspace I’ll fix this in 0.2.9.


Is there a place in the UI to check its version?
Will there be auto-update mechanism eventually?


It’s at the bottom of the web UI in the footer of each page.


It’s actually only shown at the bottom of the “Dashboard”


The error I got was actually caused by my AV software, not the firewall, so good call on that issue.


The next little issue I have with the email alerts is that the alert only has the logs for 1 backup job. So if I have multiple backup jobs under the 1 schedule, I only get 1 log. I am not sure how the success of failure is determined if there are multiple jobs, but that might be worth you checking. But I assume it should say success if all jobs succeed and failure if any job fails. Then of course the email contains the logs for all jobs so you can see which ones have succeeded and which ones have failed.

Just as an idea, it might be good to have and addition level of {{status}} message when some jobs have failed and some have succeeded. Eg something like {{2 of 3 succeeded}}. Note : have chosen a different word that “success” to make it easier to create rules for mail systems to sort and prioritise these messages.


I found an issue with backup filters in the following scenario.

  1. Add a backup (backup A) and add filters x
  2. Delete backup A
  3. Add backup B
  4. backup B contains filters x from the previously deleted backup