Early preview of .Net8 builds, codename `2.0.8.107`

As announced in the latest canary, the plan is to move to .Net8 builds going forward.
For those that want to help out or try the very latest, I have prepared a set of builds that use the .Net8 build & package process.

I hope this will be the last debug build and that we will be able to release canary builds going forward.

This build has a number of fixes reported on the previous builds:

  • Added missing icons
  • Fixed crashes related to updater

The packages are signed (Windows + MacOS) and the GPG signatures are included.

Upgrade notice

Since RC4 encryption is no longer part of the open-source SQLite libraries, the builds will detect and remove the RC4 encryption before connecting to the database. If your security setup previously depended on this feature, make sure to adjust.

The file naming structure:

The filenames are named after operating system, chip architecture and intended use, e.g. linux-x64-gui.
The -gui builds also include the cli executable, but are generally bigger due to the UI libraries.

The suffix denotes the installer type:

  • .zip: Generally just the files, zipped.
  • .deb: Debian package
  • .rpm: RPM package
  • .pkg, .dmg: MacOS packages
  • .msi: Windows Installer

List of images

2 Likes

duplicati-2.0.8.107_debug_2024-05-04-linux-x64-gui.deb

Tested on fresh Ubuntu 24.04 in vm. Impressions are very positive.

  • Installed without issue. apt install ./duplicati-2.0.8.10...
  • enabled service systemctl enable duplicati without issue
  • started service systemctl start duplicati worked
  • Started /usr/lib/duplicati/Duplicati.GUI.TrayIcon manually from terminal.
  • This resulted in some warnings but worked.
  • Warmings (shared for your information):
$ ./Duplicati.GUI.TrayIcon 
Gtk-Message: 10:11:20.672: Not loading module "atk-bridge": The functionality is provided by GTK natively. Please try to not load it.
MESA: error: ZINK: failed to choose pdev
glx: failed to create drisw screen
  • Created backup, this finished succesfully.
  • Also noticed that the tray icon updated to the one with green infill during backup.

Thanks for the fast respin. I tested an msi install without Duplicati running (106 service had no .exe to run). Service now works, I have .exe files, and AutoUpdater help (or nothing), check, and download don’t crash.

A glitch which I noticed on my way out of 105 is still around. About → System info doesn’t say SYSTEM.

UserName : HP3$ is MachineName : HP3 plus dollar sign. I’ve seen this do better with an ordinary user.

Command Prompt TrayIcon launch came up, showed my old backups, stayed for longer than usual, then:

C:\Program Files\Duplicati 2>Unexpected error: System.PlatformNotSupportedException: Operation is not supported on this platform.
   at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)
   at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)
   at Duplicati.GUI.TrayIcon.AvaloniaRunner.Run(String[] args, Action postInit)
   at Duplicati.GUI.TrayIcon.TrayIconBase.Init(String[] args)
   at Duplicati.GUI.TrayIcon.AvaloniaRunner.Init(String[] args)
   at Duplicati.GUI.TrayIcon.Program.StartTray(String[] _args, Dictionary`2 options, HostedInstanceKeeper hosted, String password, Boolean saltedpassword)

EDIT:

Above error hasn’t been seen again, so in general things for me seem to have stabilized on this build.

Installed duplicati-2.0.8.107_debug_2024-05-04-win-x64-gui.msi over an existing install of 2.0.7.1 beta installed to run as a service. Made sure before the installer was run to stop the existing service.

After install, the service will not start - it just sits there attempting over and over again without success (pardon my awful .gif … I don’t do this very often):
duplicati-flapping

I checked the Windows Event Log but there were no entries aside from a whole bunch of these:

Oddly, if I delete Duplicati-server.sqlite and allow it to create a new one, the service starts fine - so apparently whatever the issue is is in my database.

Since there had been changes to the database decryption process I decided to go back and run a copy of my old 2.0.7.1 Duplicati-server.sqlite file through the decryption tool and then copy it in, and after doing that, it works. The service starts and I’m able to see and run any of my jobs.

2 Likes

I’m not sure if this person meant to grab an early preview.

EDIT:

image

doesn’t even cover Debug tag, which is similar to how GUI Settings doesn’t specifically describe it either.

Nice, this one works fine on my Debian 12 system. The database from previous version (2.0.7.100) worked fine and it completed a new backup successfully.

1 Like

I believe I had the same issue when trying the docker version. Will try to start a clean install with docker later today.

What was the extent of missing info? Was it purely that one thing, or was lots of dynamic data missing?
For example, is the About or About → System info or Destination Storage Type giving its usual offering?
The screenshot of the web queries looks like the web server isn’t answering the GUI’s queries very well.

everything was missing - but didn’t have time to test more profoundly yet…

image

seems to be what fills out most of the dynamic information. By volume, most is advanced options.

  "EncryptionModules": [
    {
      "Key": "aes",
      "Description": "This module encrypts all files in the same way that AESCrypt does, using 256 bit AES encryption.",
      "DisplayName": "AES-256 encryption, built in",
...

looks like where data for the Encryption option comes in. I got above from Network in Developer tools.
I hard refresh the home screen, see lots of requests, find systeminfo later, look at the Response data.
Except in the issue (and maybe for your) the request is failing for some reason. It works on Windows.

Error in browser:

{
  "Message": "Only the invariant culture is supported in globalization-invariant mode. See https://aka.ms/GlobalizationInvariantMode for more information. (Parameter 'name')\nen is an invalid culture identifier.",
  "Type": "CultureNotFoundException"
}

docker log:

2024-05-06T11:49:35.754077777Z System.Globalization.CultureNotFoundException: Only the invariant culture is supported in globalization-invariant mode. See https://aka.ms/GlobalizationInvariantMode for more information. (Parameter 'name')
2024-05-06T11:49:35.754192699Z en is an invalid culture identifier.
2024-05-06T11:49:35.754215409Z    at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride)
2024-05-06T11:49:35.754229868Z    at Duplicati.Library.Localization.MoLocalizationService.get_SupportedCultureInfos()
2024-05-06T11:49:35.754243243Z    at Duplicati.Library.Localization.MoLocalizationService.get_SupportedCultures()
2024-05-06T11:49:35.754256369Z    at Duplicati.Library.Localization.LocalizationService.get_SupportedCultures()
2024-05-06T11:49:35.754269369Z    at Duplicati.Server.WebServer.RESTMethods.SystemInfo.SystemData(RequestInfo info)
2024-05-06T11:49:35.754346040Z    at Duplicati.Server.WebServer.RESTMethods.SystemInfo.GET(String key, RequestInfo info)
2024-05-06T11:49:35.754361540Z    at Duplicati.Server.WebServer.RESTHandler.DoProcess(RequestInfo info, String method, String module, String key)

and when trying to run a backup:
The SSL connection could not be established, see inner exception.

Would love to show more logs, but I can’t access them due to the previous error I guess.

Nice work on this new .Net8 version. I’m pleased to see the rapid progress on Duplicati lately!

1 Like

It looks like these are from Avalonia, I will see if I can turn them off by default.

I have seen the same error when debugging, and then it turned out to be a request that was made before the UI was initialized. I am guessing that there is some way to trigger this on Windows. I will try to add a small delay.

Could this be a permission issue perhaps?
Maybe starting Duplicati.Server manually would reveal the problem.
I will try to reproduce this.

Debug is really meant for testing. There is not supposed to be a debug build posted

I see. I did not want the whole libicu versioning problem on Docker, so I opted for only the invariant culture in the Docker images. I think the code here is using the browser culture, but that does not work without libicu. This problem explains why nothing works, because the localization here is applied before any (dynamic) content can be sent to the browser.

That indicates a problem with SSL, also in Docker I assume. I can test with S3 and see if that works.

1 Like

I don’t think it’s a permission issue. Or, at least it isn’t one that I am able to detect.

If I attempt to start Duplicati.Server.exe manually, I get this:

It looks like the automatic decrypting isn’t happening for my database for some reason. If I use the SQLDecryptTool.exe that you provided for past versions, it works fine after that.

Would it be helpful if I provided you with a sanitized copy of the troublesome database?

correct, also in docker.

Then it looks like an issue with the decryption. Are you using the default password or have you set up a custom password?

The only difference I can think of is the way the password is extracted that may be different between the two. Alternatively, my validation of the decrypted password is too strict and rejecting a valid decrypted header.

Until you said that, I wasn’t even aware it was possible to do such a thing. I have certainly never done so on purpose.

I managed to reproduce it:

> Duplicati.Server.exe --log-level=verbose --log-file=tmp.txt
A serious error occurred in Duplicati: System.Exception: Failed to create, open or upgrade the database.
Error message: The database appears to be encrypted, but the decrypting failed. Please check the password.
   at Duplicati.Server.Program.GetDatabaseConnection(Dictionary`2 commandlineOptions)
   at Duplicati.Server.Program.Main(String[] _args)

> type tmp.txt
2024-05-08 03:31:47 -07 - [Warning-Duplicati.Library.SQLiteHelper.SQLiteLoader-SQLiteRC4Decrypter]: Database is encrypted, attempting to decrypt...
2024-05-08 03:31:47 -07 - [Error-Duplicati.Library.SQLiteHelper.SQLiteLoader-SQLiteRC4Decrypter]: Failed to decrypt database
System.IO.IOException: The process cannot access the file because it is being used by another process.
   at System.IO.FileSystem.MoveFile(String sourceFullPath, String destFullPath, Boolean overwrite)
   at Duplicati.Library.SQLiteHelper.SQLiteRC4Decrypter.DecryptSQLiteFile(String databasePath, String password)
   at Duplicati.Library.SQLiteHelper.SQLiteLoader.OpenDatabase(IDbConnection con, String databasePath, String decryptionPassword)

The problem is Windows file locking keeping the file locked after decryption. The reason the other decrypt tool works, is that it writes back into the open file.

Fortunately, it is very easy to fix, so I will make a new build as soon as I have fixed the Docker issues.

I was very optimistic when I originally wrote the code, thinking that everyone would set a strong password. In practice, I think very few (if any) people did. That is also the reason that I don’t consider it a big risk to leave the database decrypted until we have a real key-management setup.

I was able to track this down to the image missing the ca-certificates package. I will update the Dockerfile to add this as well.

1 Like