====== Syncing a Jellyfin server from Linux to macOS ====== The purpose of this guide is to move an existing Jellyfin instance running on Linux to macOS, and prepare everything so that it works with Jellyfin.app. ===== Prerequisites ===== * Jellyfin.app (the server application) \\ brew install --cask jellyfin * GNU versions of some common tools \\ brew install findutils gnu-sed ===== Copying and fixing the configuration and metadata ===== - Copy over everything relevant rsync -avhH --delete --bwlimit=24M --info=progress2 user@linux:/var/log/jellyfin/ /Volumes/pinky/couch/var/log/jellyfin/; \ rsync -avhH --delete --bwlimit=24M --info=progress2 user@linux:/etc/jellyfin/ /Volumes/pinky/couch/etc/jellyfin/; \ rsync -avhH --delete --bwlimit=24M --info=progress2 user@linux:/var/lib/jellyfin/ /Volumes/pinky/couch/var/lib/jellyfin/; \ rsync -avhH --delete --bwlimit=24M --info=progress2 user@linux:/var/cache/jellyfin/ /Volumes/pinky/couch/var/cache/jellyfin/ - You can't use locations like ''/var/lib'' to store Jellyfin data on macOS. Therefore we'll have to change those paths. gfind -L . \( -name \*.xml -o -name \*.json \) -exec gsed -i 's:/var/lib/jellyfin/:/Volumes/pinky/couch/var/lib/jellyfin/:g' {} + ; \ gfind -L . \( -name \*.xml -o -name \*.json \) -exec gsed -i 's:/var/cache/jellyfin/:/Volumes/pinky/couch/var/cache/jellyfin/:g' {} + ===== Linking the application config to the backup ===== - Run Jellyfin.app once to create the folder, then quit it. - There should be a folder ''~/Library/Application Support/jellyfin'', but it might also be created in ''~/.local/share/jellyfin''. Find out and go there. - Delete all the folders except for ''cache'' and replace them with symbolic links: cd ~/Library/Application\ Support/jellyfin ln -s /Volumes/pinky/couch/var/lib/jellyfin/root ./ ln -s /Volumes/pinky/couch/var/lib/jellyfin/plugins ./ ln -s /Volumes/pinky/couch/var/lib/jellyfin/metadata ./ ln -s /Volumes/pinky/couch/var/lib/jellyfin/data ./ ln -s /Volumes/pinky/couch/etc/jellyfin ./config ln -s /Volumes/pinky/couch/var/log/jellyfin ./log ===== Mounting and linking the media folder ===== If the media is not also stored on your Mac, you'll have to mount it via the Finder or a command: - mount -t smbfs //user:password@192.168.0.512/Jellyfin ~/Documents/jellyfin This has to be run after every reboot or network disconnect, before you run the Jellyfin server. There might be a smarter way to automate the mounting and, if necessary, re-mounting. ===== Linking the media folder to a "forbidden" path ===== Let's assume your media files were located under ''/monty/'' on the Linux server, and this is where Jellyfin will still expect them. We can't usually create folders or files in the root folder on macOS to recreate this, **and** we don't want to destroy and recreate all the libraries to match a new path. Instead, we are going to create a **synthetic link** that points to the library – or in this case, the SMB share we just mounted. - (Create and) Insert a line into ''synthetic.conf'' so you can put a link called "''monty''" to the mounted folder in ''/'':monty /Users/username/Documents/jellyfin - This configuration will be loaded after rebooting, or we can just run: /System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t \\ There will now be a link ''/monty'' pointing to ''~/Documents/jellyfin'' which is where we mounted the folder containing the media. This matches where we stored it before and Jellyfin is happy.