Need help with a server on a Raspberry Pi 4 B

  • Raspberry Pi 4 B with Pi OS Lite 64bit Debian Bookworm (12) and all updates
  • UrBackup Server for Raspian 12 v2.5.33 installed via apt
  • UrBackup Client for Windows v2.5.25
  • Windows 10 Home 22H2

So… I’m retiring my 8-year-old raspi cloud file-backups server and building a new one… with UrBackup this time instead of Syncthing… but…

No matter what I try, urbackupsrv will not stay running on my new Raspberry Pi 4 once I installed the first test client on a Windows 10 laptop. With the client alive, every time I restart ubackupsrv, it exits 30-40 seconds later. If I stop the client (remove/whatever) urbackupsrv will stay up indefinitely. (By “exit” I mean the server status changes from “active (running)” to “active (exited)”.)

I’ve spent two nights trying everything I can think of to keep the server running. There’s not much guidance I could find on Linux privs for UrBackup but I think I’ve tried every combination of root and urbackup privs on the backup, tmp, and db folders, including various locations and drives and drive mounts. But… I don’t claim much expertise here either… so who knows what I might have missed. I tried to start simple(ish) with a plan to expand it later. I started with a USB3 HD (not SSD) for the backup drive, ext4 (hope to change to btrfs after testing); and a USB3 flash drive for the backup db (and tmp maybe) also ext4. But, no matter where I put tmp and whatever, nothing changes (very confusing, btw, keeping separate-but-needed settings for tmp and/or db drive changes in two separate places: the UI Advanced tab and /etc/default/urbackupsrv – it took many hours of reading conflicting/outdated info to figure those nuances out).

In general, nothing appears in /var/log/urbackup.log or the client logs–and nothing at all in the logs regarding the server exit. That is to say, okay, if I break other things on purpose, I’ll see some log lines about it. But, otherwise, leave the server running normally, connect the client, and no log lines generated by the exit event. The one thing that does happen, however, is that if I chmod all relevant folders to 777 and restart the server, it will change urbackup_tmp_files back to urbackup:urbackup 750 before it exits (regardless of what I chown it to as well). Well, side note, it will also write the clients folder and the ClientName folder as well if not present, but not mod their privs or anything if present. All folders always remain empty. I tested touching files into those folders an it works fine. [Exactly like what is described here, but no libcrypto issues here like it was there, as far as I can tell (and if iowait is a thing, then no Pi would ever work): ERROR: No permission to access "/mypath/urbackup_tmp_files" ]

The log does like to throw this if I delete the folders… but then it creates it anyway and moves on:

2025-02-10 01:24:40: ERROR: No permission to access "/mnt/SkyPi/urbackup_tmp_files"

I’ve tried uninstalling and reinstalling everything on both the server and the client. There were some curious minor differences between the msi and exe Windows installers (both with tray icon)… but nothing that appeared to be significant to this. For example, the exe autofilled the Exclude pattern when the msi had not (even though I selected manual setups with each). After the exe install, the app didn’t popup the UAC windows like the msi install did… until after reboot. Weird, but whatever. They work the same in the end. (exe called itself UrBackup, msi called itself UrBackup Client, exe added itself to the Windows menu, msi did not.)

Like this post suggests in the end, urBackup server hang on file backup (Flushing file client) - #3 by ouille, I considered compiling on the Pi (and even pulled the source and started to)… but this is the Lite version of the OS and I didn’t care to try to turn it into a dev install.

So, now, debug logs. I’ll start with the client because its debug.log contains nothing near these server exit events. It instead has a ton of lines like these during OS start/wake events:

2025-02-09 16:02:07: WARNING: Parent of directory with FRN 227431781182230598 (Name "032800000000504615033EEE") with FRN 281474976710685 not found. Searching via MFT as fallback.
2025-02-09 16:02:07: WARNING: Parent not found. Was probably deleted.
2025-02-09 16:02:07: WARNING: SQLite: Safety level may not be changed inside a transaction in "PRAGMA synchronous=FULL" errorcode: 1
2025-02-09 16:02:07: ERROR: Error preparing Query [PRAGMA synchronous=FULL]: Safety level may not be changed inside a transaction
2025-02-09 16:02:07: WARNING: SQLite: Safety level may not be changed inside a transaction in "PRAGMA synchronous = 1" errorcode: 1
2025-02-09 16:02:07: ERROR: Error preparing Query [PRAGMA synchronous = 1]: Safety level may not be changed inside a transaction
2025-02-09 16:03:11: WARNING: Parent of file with FRN 242349954947947349 (Name "035D000000011B5543CE08E5") with FRN 281474976710685 not found. Searching via MFT as fallback.
2025-02-09 16:03:11: WARNING: Parent directory not found in MFT. Was probably deleted.
2025-02-09 16:03:11: WARNING: Parent of file with FRN 242349954947947349 (Name "035D000000011B5543CE08E5") with FRN 281474976710685 not found. Searching via MFT as fallback.
2025-02-09 16:03:11: WARNING: Parent directory not found in MFT. Was probably deleted.

The server’s /var/log/urbackup.log in debug mode, however, produces this from a single restart and exit 30-ish seconds later, and always the same:

2025-02-09 16:40:16: Starting HTTP-Server on port 55414
2025-02-09 16:40:16: HTTP: Server started up successfully!
2025-02-09 16:40:16: SQLite: recovered 30 frames from WAL file /var/urbackup/backup_server.db-wal code: 283
2025-02-09 16:40:16: SQLite: recovered 21 frames from WAL file /var/urbackup/backup_server_link_journal.db-wal code: 283
2025-02-09 16:40:16: SQLite: recovered 103 frames from WAL file /var/urbackup/backup_server_settings.db-wal code: 283
2025-02-09 16:40:16: SQLite: recovered 30 frames from WAL file /var/urbackup/backup_server.db-wal code: 283
2025-02-09 16:40:16: SQLite: recovered 103 frames from WAL file /var/urbackup/backup_server_settings.db-wal code: 283
2025-02-09 16:40:16: SQLite: recovered 21 frames from WAL file /var/urbackup/backup_server_link_journal.db-wal code: 283
2025-02-09 16:40:16: Started UrBackup...
2025-02-09 16:40:16: Removing temporary files...
2025-02-09 16:40:16: Recreating temporary folder...
2025-02-09 16:40:16: Image mounting disabled: TEST FAILED: guestmount is missing (libguestfs-tools)
2025-02-09 16:40:16: Testing if backup destination can handle subvolumes and snapshots...
2025-02-09 16:40:16: Backup destination cannot handle subvolumes and snapshots. Snapshots disabled.
2025-02-09 16:40:16: Testing if backup destination can handle filesystem transactions...
2025-02-09 16:40:16: Testing for hardlinks in backup destination...
2025-02-09 16:40:16: Could create hardlink at backup destination. Hardlinks enabled.
2025-02-09 16:40:16: Testing for reflinks in backup destination...
2025-02-09 16:40:16: Reflink ioctl failed. errno=95
2025-02-09 16:40:16: Could not create reflink at backup destination. Reflinks disabled. Operation not supported (code: 95)
2025-02-09 16:40:17: InternetService: Server started up successfully!
2025-02-09 16:40:17: UrBackup Server start up complete.
2025-02-09 16:40:17: Server started up successfully!
2025-02-09 16:40:17: Looking for old Sessions... 0 sessions
2025-02-09 16:40:17: Binding to interface eth0 (ipv4) for broadcasting...
2025-02-09 16:40:17: Broadcasting on ipv4 interface eth0 addr <redacted>
2025-02-09 16:40:17: Binding to interface wlan0 (ipv4) for broadcasting...
2025-02-09 16:40:17: Broadcasting on ipv4 interface wlan0 addr <redacted>
2025-02-09 16:40:17: Binding to interface eth0 (ipv6) for broadcasting...
2025-02-09 16:40:17: Broadcasting on ipv6 interface eth0 addr <redacted>
2025-02-09 16:40:17: Binding to interface wlan0 (ipv6) for broadcasting...
2025-02-09 16:40:17: Broadcasting on ipv6 interface wlan0 addr <redacted>
2025-02-09 16:40:18: Downloading version file...
2025-02-09 16:40:18: Downloading version file...
2025-02-09 16:40:18: Downloading server version info...
2025-02-09 16:40:19: Downloading dataplan database...
2025-02-09 16:40:48: New Backupclient: <redacted>
2025-02-09 16:40:49: Sending Identity to client "<redacted>" failed. Retrying soon...
2025-02-09 16:40:49: Encrypting with key f<redacted>U (server)
2025-02-09 16:40:49: Getting client settings...
2025-02-09 16:40:49: Encrypting with key f<redacted>e (server)
2025-02-09 16:40:49: Encrypting with key f<redacted>V (server)
2025-02-09 16:40:49: Flushing FileClient...
2025-02-09 16:40:49: Channel message: UPDATE ACCESS KEY
2025-02-09 16:40:49: Encrypting with key f<redacted>5 (server)

I can’t say I know, but the weird thing to me there is it is always trying to encrypt… and, yet, I thought I read encryption would only be an option for internet and not local… and, yet, I see encryption and compression as an option for local now in the server’s client settings… but not the client’s client settings. Again, very confusing. Or, is this just trying to encrypt the initial handshake? Regardless, no matter what I set all these various encryption and compression settings to (local and non)… no change in server auto-exit behavior.

One other thing all my digging revealed. When I uninstalled and reinstalled the client, the server stayed up for a while… until I told it, yes, I had switched the client… then it exited as usual. That event did, however, spit out this interesting extra tidbit in the server log:

2025-02-09 15:34:51: WARNING: Client UID changed from "sehlq4PawHnLitjO" to "NI6Eu574cG1csQsH". Disallowing client because connection to local/passive client is encrypted.
2025-02-09 15:34:51: ERROR: Could not get client capabilities

Then it was back to the other junk as usual.

So, yeah, wait, what? Is all this because I have Device Encryption turned on in Windows 10??? No, that last message said the “connection” was encrypted, not the device. Testing the theory anyway. Pulling out another laptop that’s old and not encrypted. Purging the Pi install… and, no go, same story with the client instead on an old Win10 with no encryption. Interesting, though, that I don’t get pestered with UAC popups on this old laptop, and the UrBackup folder files aren’t locked to the Admin, and that the debug.log doesn’t get filled with all that stuff mentioned earlier. This old one is my new test laptop for this.

So… alas… what am I missing?

Given all the silence here I spent some time considering digging into all the other open-source apps for a solution… but ultimately decided to try building UrBackup server on the Pi first. What I found was the same thing I suspected earlier—that the breakpoint here is a likely breakpoint any number of reasons. Earlier I linked to how another found it breaks here when libcrypto is the issue. In my case, the issue appears to be that libzstd-dev was not included in the build—but may indeed be something else—I don’t have access to the distro’s build logs to know for sure. Regardless, when things break when the first backup file and/or metadata file is attempted to be written… then it is likely some new library that kicks in at that point, or the code involved in writing that file. That much should be obvious, assuming everything else I was doing/checking was correct.

Anyhow, I read up on what I need to do to build on Linux—which namely meant learning about apt-get build-dep to save time fetching dependencies the hard way—then built the server on the Pi… and it works fine. No more issues when clients connect, and it’s been running a couple days now. Thus, it appears the Pi OS 12 distro needs to be updated/fixed and rebuilt.

For those walking the same path, here’s a copy of my recipe for how I built the server on the Pi:

This assumes you have already tried installing from the repo, and failed, and thus already have added the repo to your APT sources. If not, add the repo to your APT sources now (we’ll add to this in a minute):

# Add the repo to your APT sources:
echo 'deb http://download.opensuse.org/repositories/home:/uroni/Raspbian_12/ /' | sudo tee /etc/apt/sources.list.d/home:uroni.list
tail /etc/apt/sources.list.d/home:uroni.list
# Add the release GPG keys:
curl -fsSL https://download.opensuse.org/repositories/home:uroni/Raspbian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_uroni.gpg > /dev/null

Stop and purge the server (yes, I know I don’t need to reboot afterwards… but I tend to regardless when at my frustration limit… don’t you?):

sudo systemctl stop urbackup-server
sudo apt-get purge urbackup-server
sudo apt autoremove
sudo reboot

Configure and make and all that jazz:

# Install the dev tools:
#   https://wiki.debian.org/BuildingTutorial
#sudo apt-get install build-essential   ### already installed on OS Lite ###
# Configure apt to use source repos (do as it says to uncomment[add] the deb-src lines):
sudo nano /etc/apt/sources.list
	deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
	deb http://deb.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware
	deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
	# Uncomment deb-src lines below then 'apt-get update' to enable 'apt-get source'
	deb-src http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
	deb-src http://deb.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware
	deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
sudo nano /etc/apt/sources.list.d/home:uroni.list
	deb http://download.opensuse.org/repositories/home:/uroni/Raspbian_12/ /
	deb-src http://download.opensuse.org/repositories/home:/uroni/Raspbian_12/ /
sudo apt-get update
sudo apt-get build-dep urbackup-server
# ./configure will later throw a warning about ZSTD missing/outdated, so install it now:
sudo apt-get install libzstd-dev
# Grab the source and build it:
#   https://www.urbackup.org/server_source_install.html
mkdir src
cd src
wget https://hndl.urbackup.org/Server/2.5.33/urbackup-server-2.5.33.tar.gz
tar xf urbackup-server-2.5.33.tar.gz
cd urbackup-server-2.5.33/
./configure
###sudo apt-get install zlib1g-dev
make
# After a few hundred deprecation warnings (and a couple other warnings)... and 33 minutes (SD cards are slow)... and no errors:
sudo make install
sudo cp urbackup-server.service /etc/systemd/system/
whereis urbackupsrv
	urbackupsrv: /usr/local/bin/urbackupsrv
sudo nano /etc/systemd/system/urbackup-server.service
	[Unit]
	Description=UrBackup Client/Server Network Backup System
	After=syslog.target network.target
	[Service]
	ExecStart=/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
	User=root
	TasksMax=infinity
	[Install]
	WantedBy=multi-user.target
# change:
	ExecStart=/usr/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
# to (based on `whereis` output):
	ExecStart=/usr/local/bin/urbackupsrv run --config /etc/default/urbackupsrv --no-consoletime
sudo systemctl enable urbackup-server.service
sudo cp defaults_server /etc/default/urbackupsrv
sudo cp logrotate_urbackupsrv /etc/logrotate.d/urbackupsrv
sudo systemctl start urbackup-server
sudo systemctl status urbackup-server
# Browse to http://localhost:55414 and setup an admin user and the backup storage path.
# Settings tab >> General tab >> Server tab >>
#   Backup storage path: /mnt/backups/urbackup   change to: your path
#   Save button
# Settings tab >> Users tab >> Creat User button... admin/secret

Not very friendly, I know, but that’s how I write down my recipes for my own later use.

A sharp eye might have caught the most informative lines from that:

# ./configure will later throw a warning about ZSTD missing/outdated, so install it now:
sudo apt-get install libzstd-dev

In other words, build-dep fails to pull in libzstd-dev and you have to do that yourself. Why? Furthermore, configure only throws a warning about it instead of halting:

configure: WARNING: ZSTD compression library not present or not recent enough. Compiling without ZSTD support. Install libzstd-dev(el) or use –enable-embedded-zstd

Now, like I said before, I have no way of knowing myself if that is the smoking gun here… but it sure smells like a likely candidate.

BTW, this is what build-dep did pull:

Get:1 http://deb.debian.org/debian bookworm/main arm64 m4 arm64 1.4.19-3 [276 kB]
Get:2 http://deb.debian.org/debian bookworm/main arm64 autoconf all 2.71-3 [332 kB]
Get:3 http://deb.debian.org/debian bookworm/main arm64 autotools-dev all 20220109.1 [51.6 kB]
Get:4 http://deb.debian.org/debian bookworm/main arm64 automake all 1:1.16.5-1.3 [823 kB]
Get:5 http://deb.debian.org/debian bookworm/main arm64 autopoint all 0.21-12 [495 kB]
Get:6 http://deb.debian.org/debian bookworm/main arm64 libdebhelper-perl all 13.11.4 [81.2 kB]
Get:7 http://deb.debian.org/debian bookworm/main arm64 libtool all 2.4.7-7~deb12u1 [517 kB]
Get:8 http://deb.debian.org/debian bookworm/main arm64 dh-autoreconf all 20 [17.1 kB]
Get:9 http://deb.debian.org/debian bookworm/main arm64 libarchive-zip-perl all 1.68-1 [104 kB]
Get:10 http://deb.debian.org/debian bookworm/main arm64 libsub-override-perl all 0.09-4 [9,304 B]
Get:11 http://deb.debian.org/debian bookworm/main arm64 libfile-stripnondeterminism-perl all 1.13.1-1 [19.4 kB]
Get:12 http://deb.debian.org/debian bookworm/main arm64 dh-strip-nondeterminism all 1.13.1-1 [8,620 B]
Get:13 http://deb.debian.org/debian bookworm/main arm64 dwz arm64 0.15-1 [101 kB]
Get:14 http://deb.debian.org/debian bookworm/main arm64 gettext arm64 0.21-12 [1,248 kB]
Get:15 http://deb.debian.org/debian bookworm/main arm64 intltool-debian all 0.35.0+20060710.6 [22.9 kB]
Get:16 http://deb.debian.org/debian bookworm/main arm64 po-debconf all 1.0.21+nmu1 [248 kB]
Get:17 http://deb.debian.org/debian bookworm/main arm64 debhelper all 13.11.4 [942 kB]
Get:18 http://deb.debian.org/debian bookworm/main arm64 libcrypto++-dev arm64 8.7.0+git220824-1 [1,780 kB]
Get:19 http://deb.debian.org/debian bookworm/main arm64 libcurl4-openssl-dev arm64 7.88.1-10+deb12u8 [475 kB]
Get:20 http://deb.debian.org/debian bookworm/main arm64 libfuse2 arm64 2.9.9-6+b1 [114 kB]
Get:21 http://deb.debian.org/debian bookworm/main arm64 libsepol-dev arm64 3.4-2.1 [332 kB]
Get:22 http://deb.debian.org/debian bookworm/main arm64 libpcre2-32-0 arm64 10.42-1 [207 kB]
Get:23 http://deb.debian.org/debian bookworm/main arm64 libpcre2-posix3 arm64 10.42-1 [55.5 kB]
Get:24 http://deb.debian.org/debian bookworm/main arm64 libpcre2-dev arm64 10.42-1 [664 kB]
Get:25 http://deb.debian.org/debian bookworm/main arm64 libselinux1-dev arm64 3.4-1+b6 [159 kB]
Get:26 http://deb.debian.org/debian bookworm/main arm64 libfuse-dev arm64 2.9.9-6+b1 [1,020 kB]

Also of curiosity is that urbackup-server from the repo does pull in libzstd1:armhf as a dependency… so I’m not sure about anything here without a peek at the build logs myself.

So, that’s the gist of it. I hope it helps.

Now, to go back and reconfigure how I want it: btrfs for the main backup drive for infinite incremental file backups, and something cheap and likely ext4 for the logs, tmps and dbs (like a USB stick—anything that’s affordable and better than the Pi’s SD card).

Because I somehow failed to spur a response here—not even so much as a “Sorry dude,”—I might as well add my early impressions and critiques of UrBackup now, for whatever they may be worth. They are meant constructively (I try to be helpful) but I’m used to all sorts of responses to such detailed critiques. As much as I try, tact eludes me sometimes. This is impressive work overall and I am thankful for all the open-source efforts here.

(1) That tri-state button next to every field in the client settings is nothing but confusion to me. It has no tooltip description and no mention in the docs. I see a padlock, some weird clamp-like thing, and a house… and that communicates nothing useful as to how it behaves. All it seems to do at first is wreck my settings if I click on it—and that makes me terribly uneasy and untrusting of the whole app. This creates a lack of confidence that my setting are safe and sound. The padlock seems to be a default maybe… but why a padlock? Why no mention of this weird UI thing in the docs?

I’m supposedly some sort of UI expert and, well, let’s just say this is not good. I feel like maybe this is trying to take the place of 3 radio buttons, or maybe 2 radio buttons plus another thing. But that would be too cluttered, right? So, then, my usual advice is to just do it different. Perhaps a button strip (with tooltips for each) or a dropdown menu on each field that needs it. Just guessing since I still don’t fully “get” what’s going on here. More likely, however, I suspect a top Edit menu is in order (with keyboard shortcuts) but that is still a wild guess as to their function. Okay, sure, two clicks are more than one… but also less than 3+ trying to figure it out. Besides, who really needs to click these regularly? Intuitive communication is often more important than brevity.

After you spend some time in the client and server, you will eventually find that the web version of this ternary button has tooltips. But, honestly, that was a few days ago and I’ve forgotten them already. I believe I learned that clamp thing might really be a road, meaning interstate?, and thus meaning internet?? I guess; except it looks like a highway, not an interstate. So, I guess it should be a cloud or something else networky. But… if this is the server setting, then why does making a local change pull up this road image instead of the house??? Sigh. The padlock might be handbag? Still not sure. Maybe a briefcase with a far oversized handle??? Regardless, I still don’t fully “get” these buttons. Best to ignore them, I figure, and just pray it all works out well.

(2) File and folder filtering. I nearly passed over UrBackup due to weak filtering (and may still after more testing). I have learned, however, the filtering is more capable than it first appears. This confusion is because there are three different answers (as I recall) in the docs. The admin manual shows the least capability with wildcards (just ). Then some other link showed me a bit more. Then, I think it was (hard to keep track of what info is buried where) the online help in the server webapp that shows the most capability (:? and casing).

The whole include/exclude thing is also poorly communicated in the UI and the docs. At first, there was some hope that “include” would allow overrides to the “exclude” rules (like ! in .gitignore does) but, alas, no, I remember from one of the docs that only one of those fields has effect at a time even though they both are enabled (and I don’t recall which has precedence and can’t find that info in the admin manual at the moment).

This brings me to .gitignore. That level of filtering would be the ideal. That level of filtering is what I’m used to from my last tool, and that is what I would like to see in the future. An update could either rewrite current filters to gitignore-style filters, or support both types. My particular use case is that I no longer try to do image backups (and a dozen reasons why, best left for another discussion). Instead, I am happy with file backups of all my personal content, and building up a new machine when something fails (because new machines come along more than failures anyhow). Therefore, all features that help me and others like me in this quest, in my opinion, are worth focusing on to attract more users like me. In this case, that means easily turning my gitignore and similar files from my various projects into backup filters so that I can have both another form of backup, plus backups between repo pushes/commits/whatever.

Short of .gitignore, the current filtering system could be much more friendly without much work. First, it should be a much larger field that is also multiline. Second, autotranslate the semicolons into carriage returns (for display) and back (for storage). You know, like Windows did with their PATH editor back in, what, Vista?

(3) Multiple backup plans per device. That is, different backup plans for different folders. Again, I nearly passed over UrBackup for lacking this feature. Fortunately, however, I decided to test UrBackup regardless just to see what else it can do. During that process, I eventually discovered what are called “virtual sub clients” buried in the manual. Okay, um, not a fan of the name, or how to define them (some confusion there/needs better examples), but this looks like the feature I was looking for to help me with backing up different folders at different rates. I haven’t tested it yet but I expect it works as expected. Thus the main point here is: Why undersell this feature? It should be a main point on the landing page. Heck, it didn’t even make the Features page.

(4) Folder monitoring. I don’t expect this built-in even though that would be nice. It would, however, be nice to know how to trigger an incremental file backup on a folder or file from the command line so I can build my own script (AHK, Powershell, whatever) to watch for file changes, should I choose to.

(5) In other words, as technically solid as this product appears to be, it is selling itself short on a couple of important features it already has, while also falling a bit short on making some features easier to use and understand.

Great you figured it out! If you have any idea what could be wrong with the Raspberry package help would be appreciated. It is probably an alignment issue or something when calling crypto++. Unfortunately for Raspberry users I kind of switched to using N100 machines where I was using Raspberries previously.

My main takeaway from your latest post, is to put the individual switch for each setting into some kind of advanced mode and replace it per default with a button that resets to server/group settings. But you are kind of correctly using it (just change things and don’t care about current state in most cases). The problem starts if you change the settings in multiple places at group/server/client and want to be specific from where the setting is taken.

Also perhaps a more intuitive way to add virtual clients and rename it to additional backup sets or something.

If you have some use case that is not covered by the current filtering, that would be a good argument to extent/change it.

My suspicion is same as before: that libzstd-dev was not included in the urbackup build for Raspi. libzstd-dev is not part of the Pi OS Lite image (don’t know about the full image). And, furthermore, apt-get build-dep failed to pull it in as a dependency. Therefore, the urbackup-server code base fails to declare it as a dependency. I browsed the code base but I’m not a C/C++ guy so I didn’t know where to look for dependency declarations (that is, I saw nothing easy like a requirements.json file like what I’m used to).

If it’s not that, then no idea. I suspect, however, whatever build tool you use to build all the various images, it will show something like this in the log for ./configure:

...
checking for ZSTD_CCtx_setParameter in -lzstd... no
checking zstd.h usability... no
checking zstd.h presence... no
checking for zstd.h... no
configure: WARNING: ZSTD compression library not present or not recent enough. Compiling without ZSTD support. Install libzstd-dev(el) or use --enable-embedded-zstd
checking for gawk... (cached) mawk
...

Note how that is merely a warning and not an error. Ideally, that would have caused a halt in the build… but it does not for whatever reason. Hence why this was not found sooner.


Regarding settings, yeah, I’m not convinced an advanced mode is the right answer either. Mostly what is needed is a noob introduction to both what these buttons are for, and what “groups” are. I still see nothing on this in the FAQ or Admin Manual. And with no hints in the UI either, it’s been a very fuzzy road.

Part of what I was facing was that I recently discovered that my client UI does not work properly at times. But, with no clear guidance on these buttons, it took me more time than it should have to discover something else was at fault.

For example, in testing, I tried to change the backup interval. I opened the Settings on the client, change it from 5 to 10 hrs, and see the icon magically change to something new. Hit OK. Looking at the server, hours later, however, backups are still running every 5 hours. I go back into settings on the client and I see it is back to 5 hrs with the padlock icon. Try again to change it. Hit OK. Go directly back into Settings and I find it reverted again. Later, I try changing it on the server’s web UI instead but, instead of the changing the road value, it changes to a house icon. That value, however, sticks and works. Days later (because I have other things to do) while poking around again, I eventually figure out that, while the client backups run fine while the VPN is up on the client, the client UI does not (no idea why, but the front-end app clearly doesn’t like the VPN; the Status command always shows an error msgbox instead as well). But the VPN isn’t the issue here–as that is my own issue to work out. The issue is what the UI communicates to me and how it helps me out or not.

Anyhow, after some more poking around, I’m slowly getting the picture through sheer trial and error. The tooltip message “Using setting from group” was confusing. What group? There are lots of groups in my digital world. Nothing about some sort settings group in the docs, however. No tabs for groups either… oh, silly me… there is a button for Add New Group. But… still… how is there a group setting if I hadn’t added a group yet? Presumably there is maybe a default group somewhere… but where? Oh, it’s implied. Yeah, such things should be explicit and not implied. On both the client and the server.

Group should always be displayed up top–even if there is only the one default group. (The “Member of group” label and dropdown do not display if there is only the one group. It should, instead, always display. Even in the client’s Settings window, I would find somewhere to show the group–even if only as a reminder to the user–even if only in the titlebar, such as: “Settings (Group: Default)”.)

Make the groups more visible… that, alone, would go a long way towards understanding all the padlocks. (Hint: instead of padlocks, google “computer group icon” or “computer network icon”; also search for “client/server icon” and swap which part of the icon is larger and in the foreground for each setting, to replace the house and road.)

Also, the “Default” group should not only be visible, but also be editable–and even renameable. If you must, for group editing only, also provide a “Revert to UrBackup Defaults” button. Perhaps even provide a “Copy from group…” group-wide command, if you so choose.

Thus, given what I’ve derived so far, I would build things with a dropdown radio toolstrip button like this:

Client field:  [________] [image|v]
                          |*img*| Use group default                    |  <disables field>
                          | img | Use admin's override for this client |  <disables field>
                          | img | Use local setting                    |  <enables field>
                          +-----|--------------------------------------+
*img* indicates currently-selected radio option

This way, you get the best of all worlds. Advanced users can still click the icon button to rotate the values. Noobs, in fear of clicking things they don’t understand, can instead click the dropdown button to see what the options are without changing anything. Users like to feel in absolute control. Control is also why you disable the field when it is under something else’s control. That, alone, communicates a lot. Yes, advanced users can no longer just type to change it… but none of these setting are everyday things. Conversely, you can’t fumble the keyboard either and mysteriously/unknowingly lose the setting you had.

Also, if a client doesn’t have privs to change something, remove it from the list (or maybe gray the option out).

Server field:  [________] [image|v]
                          |*img*| Use group default                  |  <disables field>
                          | img | Use admin override for this client |  <enables field>
                          | img | Use client's local setting         |  <disables field>
                          +-----|------------------------------------+
Group field:  [________] [Reset|v]
                         | Reset to UrBackup default |  <field always enabled>
                         +---------------------------+
or, simply

Group field:  [________]

and put any commands on a right-click menu or shortcut

My use case for .gitignore-like filtering is what I mentioned before. That is, the means to easily turn my gitignore and similar files from my various projects into backup filters so that I can have both, another form of backup, plus backups between repo pushes/commits/whatever.

I see, however, that I failed to mention, specifically, what gitignore has that urbackup doesn’t. It has the “!” prefix to negate the pattern (allow includes inside of excludes, and vice versa, with some limitations to it). Not used a lot… but used. I like the syntax better too and, while that is a minor thing, it would help to not have to translate my long gitignores into another syntax. And since the logic for gitignore should be open source, then it sounds like a fair ask.

https://git-scm.com/docs/gitignore

For example, this is one of my filters (.stignore) from Syncthing, based on that project’s .gitignore file:

(?i)temp
.~lock.*
.plastic

// SS Racer\ignore.conf:

// Unity generated
// ===============
Library
library
Temp
temp
Obj
obj
Build
build
Builds
builds
UserSettings
usersettings
MemoryCaptures
memorycaptures
Logs
logs
//MJJ why!#/ignore.conf
//  probably this persons's fault: https://blog.plasticscm.com/2020/01/definitive-ignoreconf-for-unity-projects.html
*.private
*.private.meta
!*.private.[0-9]*
!*.private.[0-9]*.meta
**/Assets/AssetStoreTools
**/assets/assetstoretools
**/Assets/Plugins/PlasticSCM*
**/assets/plugins/PlasticSCM*
//.vs
.gradle
ExportedObj
//.consulo
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
*.pidb.meta
*.pdb.meta
*.mdb.meta
sysinfo.txt
*.apk
*.unitypackage
//.collabignore
crashlytics-build.properties
**/Assets/AddressableAssetsData/*/*.bin*
**/assets/addressableassetsdata/*/*.bin*
**/Assets/StreamingAssets/aa.meta
**/assets/streamingassets/*/aa/*
.DS_Store*
Thumbs.db
Desktop.ini


// Wwise instructed
// ================
AkWwiseProjectData.asset
// Non-Wwise instructed but seem appropriate (analysis files and cache):
AkWwiseProjectData.asset.meta
**/Wwise/SS Racer/Originals/SFX/*.akd
**/Wwise/SS Racer/.cache

// MJJ added
// =========
Debug
etc
//*.sublime*
log*.txt
// /*.zip
// /*.png
// /*.jpg

Syncthing’s version of gitignore’s syntax (shown below the edit field in their pattern editor):

Quick guide to supported patterns (full documentation):

(?d) Prefix indicating that the file can be deleted if preventing directory removal
(?i) Prefix indicating that the pattern should be matched without case sensitivity
! Inversion of the given condition (i.e. do not exclude)
* Single level wildcard (matches within a directory only)
** Multi level wildcard (matches multiple directory levels)
// Comment, when used at the start of a line