Starting with Batocera v33, files can be synchronized across multiple devices using Syncthing. A good use case is to enable synchronization of your saved games, so that you can start a game in the morning on your Odroid Go Advance, resume your game on your PC in the afternoon, and finish up your game on your Raspberry Pi in the evening, all with the same saves.
The beauty of this solution is that you don't necessarily need a cloud storage account, nor a central NAS storage location, and it works not only over your local network, but also across the Internet. You can synchronize your saves from your home Raspberry Pi to your Odroid Go Advance while you play in the office (yeah, it's your lunch break, you're allowed to relax a bit at this office, we don't mind ;) ).
First, enable Syncthing on all the Batocera machines you want to use for saves synchronization.
On each machine with Batocera v38 and higher, execute the command:
batocera-services enable syncthing
On each machine with Batocera v37 and lower, edit the /userdata/system/batocera.conf file and add:
system.syncthing.enabled=1
Once this is done, reboot Batocera. When Batocera is back up, on another computer on the same local network, open a web browser to http://batocera:8384 (where “batocera” is the IP address of your machine, if the DNS is not up).
You will have a Synthing web UI where the configuration process start.
First, a few housekeeping items:
Now let's move on to the configuration:
http://batocera:8384. I would strongly encourage you to put a login and password in there.In Batocera v33, if ENFORCE SECURITY is “ON” then the Syncthing web UI cannot be accessed externally. To circumvent this, two options:
1. Disable this setting to regain access to it externally.
2. Or create a SSH tunnel from another machine.
For example, on a Linux host you can ssh -L 3000:127.0.0.1:8384 root@batocera and it creates a SSH session with local port 3000 mapped to port 8384 on the Batocera machine. This way, within the SSH session once you are connected, you can go to http://127.0.0.1:3000/ on your Linux host and it will show the Syncthing configuration UI on the Batocera machine. If you use Windows, Putty also has an option to create SSH tunnels.
DeviceID. This also is where you would set the Introducer option if connecting to an always-online NAS.
/userdata/saves/. Be mindful of the folderID that is provided here. I kept the default one assigned by Synchthing, but you can put your own. What is important is that you keep the same folderID for all nodes in the cluster.
flatpak/ and windows/ to ignore these folders, without deleting them. On my SBC, I put (?d)flatpak/ and (?d)windows/ with (?d) meaning that the directories can be deleted if they are deleted in the syncthing cluster. Be careful with this option, if used incorrectly you may lose data.
The ignore syntax is very powerful, its full documentation is available at https://docs.syncthing.net/users/ignoring and should be read before attempting to use this.
Here are a few handy SSH commands:
/usr/bin/syncthing serve --no-browser --logfile=default/usr/bin/syncthing -browser-only/usr/bin/syncthing --gui-address http://0.0.0.0:8384/usr/bin/syncthing --gui-address http://127.0.0.1:8384/usr/bin/syncthing serve --no-browser --no-restart --logflags=0
Syncthing's configuration files are stored at /userdata/system/configs/syncthing.
In case something goes wrong with Syncthing, a useful log to check is at /userdata/system/logs/syncthing.log.
Further help can be found at Syncthing's documentation.
https://gitlab.com/peterbozso/batocera-backup-service
The use-case of this solution is very similar to Syncthing, but the goal here is to utilize cloud storage (OneDrive, Google Drive, Dropbox, etc.) to back up your data. The important difference is that this is upload only; it does not synchronize data both ways. It is for continously cloning a single machine's userdata to the cloud service, so in case of a hardware failure/loss, a backup of the userdata can be easily restored.
This solution uses rclone, which is shipped with Batocera and Batocera's services feature. Because of the latter, it requires Batocera v40 or higher.
A detailed description of how this works and setup instructions for it is on peterbozso's batocera-backup-service repository.