| Both sides previous revision Previous revision | |
| store_games_on_a_nas [2023/02/08 02:25] – add note about portable users atari | store_games_on_a_nas [2024/01/29 20:17] (current) – instructions for mounting network-based /userdata folders that are dependent on an established VPN or Tailscale connection cs |
|---|
| sharenetwork_nfs2=SAVES@192.168.0.1:/mnt/Documents/batocera/saves | sharenetwork_nfs2=SAVES@192.168.0.1:/mnt/Documents/batocera/saves |
| sharenetwork_nfs3=BIOS@192.168.0.1:/mnt/Documents/batocera/bios | sharenetwork_nfs3=BIOS@192.168.0.1:/mnt/Documents/batocera/bios |
| | </code> |
| | |
| | ===== Mounting network shares behind a VPN or Tailscale network ===== |
| | === Background === |
| | Mounting a shared folder on a server that requires a VPN or Tailscale connection to be established first is troublesome due to the Batocera boot initialization process. While Batocera does provide [[:launch_a_script|various options]] for you to execute a custom script throughout the boot process, none of them are suitable due to several factors. The setup procedure in the [[:vpn_client|VPN/Tailscale documentation]] is great for setting up things like multiplayer, but too late for mounting Batocera core folders. |
| | |
| | __Basic boot process flow:__\\ |
| | 1. /boot/boot-custom.sh - At this stage, the system's network has not been initialized yet, therefore a VPN or Tailscale connection cannot be established.\\ |
| | 2. /etc/init.d/S07network - This is where the network is initialized.\\ |
| | 3. /etc/init.d/S11share - This is where the /userdata is initialized.\\ |
| | 4. /boot/postshare.sh - Executed right after /userdata initialization completed. By this point it is too late, and any attempts to mount a VPN/Tailscale network share will fail because those services haven't been initialized yet.\\ |
| | 5. /userdata/system/custom.sh - This script is the suggested place for VPN/Tailscale initialization according to the docs, but it's also past the /userdata mounting stage.\\ |
| | |
| | From the above, we can see that the VPN/Tailscale client will need to be initialized somewhere between steps 2 and 3. |
| | |
| | === Workaround === |
| | There is a [[:store_games_on_a_nas#samba_windows_manually_mounted_shares|sharenetwork_cmd# feature]] that allows you to craft a custom mounting command, however, since it accepts any arbitrary shell command we can repurpose it to initialize our VPN/Tailscale client. |
| | |
| | First, setup and test the VPN/Tailscale client according to the [[:vpn_client|docs]]. Once you have successfully confirmed that everything is working, disable ''custom.sh'' or comment out the lines relevant to VPN/Tailscale. Those clients are going to be initialized elsewhere. |
| | |
| | The final result of my configuration looks something like the below. Note that in my example, I am using Tailscale and mounting NFS folders, although this should be adaptable for any combination of VPN/Tailscale and SMB/NFS. Also, in my example, I am incorporating an [[:vpn_client#my_vpn_works_fine_on_my_pc_but_not_on_my_raspberry_pi_other_sbc|ARM-build fix]] where the /dev/net folder needs to be created in addition to a "sleep 2s" command because I have observed that the Tailscale daemon sometimes does not finish initializing before the Tailscale client asks it to bring up the network. Adjust these items according to your setup. |
| | <code> |
| | sharedevice=NETWORK |
| | sharenetwork_cmd1=eval if [ ! -d /dev/net ]; then mkdir -p /dev/net; mknod /dev/net/tun c 10 200; chmod 600 /dev/net/tun; fi && /userdata/tailscale/tailscaled -state /userdata/tailscale/state > /userdata/tailscale/tailscaled.log 2>&1 & sleep 2s; /userdata/tailscale/tailscale up --accept-routes |
| | sharenetwork_nfs1=ROMS@100.0.0.1:/mnt/Documents/batocera/roms |
| | sharenetwork_nfs2=SAVES@100.0.0.1:/mnt/Documents/batocera/saves |
| | sharenetwork_nfs3=BIOS@100.0.0.1:/mnt/Documents/batocera/bios |
| </code> | </code> |
| |