Ableton Move NFS Sample Sharing
Mount your Ableton sample library from an NFS server to your Ableton Move device for live network access. Zero storage used on Move -- samples are streamed over the local network.
Overview
This project provides two workflows:
- Install / Uninstall -- One-time (or post-firmware-update) setup that installs NFS tools on the Move and configures auto-mount on boot.
- Mount / Unmount -- Day-to-day scripts for manually mounting or unmounting the NFS share without modifying the Move's system files.
Both workflows connect to:
- NFS Server (e.g., 192.168.0.100) -- Source of samples
- Ableton Move (move.local) -- Target device
Prerequisites
- Python 3.7+
- SSH access to both NFS server and Ableton Move
- Both devices on the same local network
- NFS server with NFS service enabled (Synology, FreeNAS, Linux, etc.)
Setup
# Install Python dependencies
pip install -r requirements.txt
# Create environment file from template
cp .env.example .env
# Edit .env with your credentials
nano .env
Then configure your NFS server to export the samples directory. See the NFS Server Configuration section below.
Edit config/settings.yaml to match your network (server IP, share path, mount point).
Workflow 1: Install / Uninstall (Persistent Setup)
The install script sets up everything on the Move so that samples auto-mount on every boot. Run this once after initial setup, and again after any firmware update or factory reset.
# Auto mode (recommended): uninstalls previous config if present, then installs fresh
python scripts/install_move_nfs.py auto
# Install only (fails if already installed)
python scripts/install_move_nfs.py install
# Uninstall -- removes all NFS configuration from Move
python scripts/install_move_nfs.py deinstall
You can override configuration with command-line parameters:
python scripts/install_move_nfs.py auto \
--nfs-server 192.168.1.100 \
--nfs-share /volume1/samples \
--mount-point /data/Music
What the install script does:
- Downloads and installs the
mount.nfsbinary on Move - Backs up
/etc/fstaband adds an NFS auto-mount entry - Creates the mount point directory
- Tests that the mount works
- Installs a delayed-mount init script to handle boot race conditions
After installation, samples auto-mount on every boot and gracefully skip mounting if the network is unavailable (nofail option).
See INSTALLATION.md for full details, manual steps, and troubleshooting.
Workflow 2: Mount / Unmount (Manual)
Use these scripts for one-off mounting without modifying system files on the Move. Useful for testing, or if you prefer not to use auto-mount.
Mount Samples
python scripts/mount_samples.py
Samples become accessible on the Move at:
/data/UserData/UserLibrary/Samples/SamplesExternal
Unmount Samples
python scripts/unmount_samples.py
Check Status
# Check NFS server status and exports
python scripts/check_nfs_status.py
# Comprehensive verification (NFS exports, mount status, read access, write protection)
python scripts/verify_mount.py
NFS Server Configuration
Configure your NFS server to export the samples directory:
- Access your NFS server's management interface
- Enable the NFS service if not already enabled
- Create or configure an NFS export for your samples directory
- Set the export permissions:
- Client:
move.local(or specific IP of Move) - Access: Read only
- User mapping: Map to appropriate user (e.g., admin, nobody)
- Security: sys (or krb5 if using Kerberos)
- Options: Enable asynchronous writes, allow non-privileged ports
- Client:
- Apply the configuration
Specific steps vary by NFS server (Synology DSM, FreeNAS, Linux /etc/exports, etc.). Consult your server's documentation.
Verify NFS Configuration
python scripts/check_nfs_status.py
This verifies that the NFS daemon is running, your samples directory is exported, and the directory exists and is accessible.
Configuration
config/settings.yaml
nfs_server:
hostname: "192.168.0.100" # NFS server IP address
ssh_port: 22 # NFS server SSH port
ssh_user: "admin" # NFS server SSH username
share_path: "/volume2/homes/admin/Drive/10 - ABLETON/User Library/Samples"
move:
hostname: "move.local" # Move hostname
username: "ableton" # Move username
root_username: "root" # Move root username (required for mounting)
mount_point: "/data/UserData/UserLibrary/Samples/SamplesExternal"
ssh_port: 22 # Move SSH port
nfs:
version: 3 # NFS version (3 or 4)
options: "ro,nolock,soft,timeo=15,retrans=1,nofail"
read_only: true
.env
Credentials file (create from .env.example):
# NFS Server credentials
NFS_SERVER_SSH_PASSWORD=your_nfs_server_password
# Move credentials
MOVE_SSH_PASSWORD=your_move_password
MOVE_ROOT_PASSWORD=your_move_root_password
# Or use SSH keys (recommended):
# NFS_SERVER_SSH_KEY_PATH=/path/to/nfs_server/key
# MOVE_SSH_KEY_PATH=/path/to/move/key
The .env file is gitignored to protect your credentials.
Troubleshooting
"Permission denied" on mount
- Check NFS server export permissions allow the Move's IP or hostname
- Verify with:
python scripts/check_nfs_status.py - Ensure "Allow connections from non-privileged ports" is enabled on your NFS server
"No route to host"
- Verify both devices are on the same network
- Test connectivity:
ping <nfs-server-ip>from your Mac - Check NFS server firewall allows NFS (port 2049)
"Mount point appears empty"
- Verify NFS export:
ssh -p <port> <user>@<nfs-server-ip> "showmount -e localhost" - Check the share path in
config/settings.yaml - Ensure NFS service is enabled on your NFS server
"Connection refused" to Move
- Test SSH manually:
ssh ableton@move.local - Verify credentials in
.envfile - Check Move is powered on and on network
"Stale file handle"
NFS server was restarted while mounted. Force unmount and remount:
python scripts/unmount_samples.py
python scripts/mount_samples.py
Samples not mounting after reboot
See INSTALLATION.md - Troubleshooting for install-specific issues (missing mount.nfs, fstab problems, download failures).
Manual Commands
If you prefer direct SSH control:
# Check NFS server exports
ssh -p <port> <user>@<nfs-server-ip> "showmount -e localhost"
# Mount on Move
ssh root@move.local 'mkdir -p /data/UserData/UserLibrary/Samples/SamplesExternal'
ssh root@move.local 'mount -t nfs -o ro,nolock,nfsvers=3 <nfs-server-ip>:"<share-path>" /data/UserData/UserLibrary/Samples/SamplesExternal'
# Check mount status
ssh ableton@move.local "mount | grep SamplesExternal"
# Unmount
ssh root@move.local "umount /data/UserData/UserLibrary/Samples/SamplesExternal"
Project Structure
move-network/
├── README.md # This file
├── INSTALLATION.md # Install/uninstall guide (automated + manual)
├── requirements.txt # Python dependencies
├── .env.example # Environment template
├── .gitignore # Git ignore rules
├── config/
│ └── settings.yaml # Main configuration
├── scripts/
│ ├── install_move_nfs.py # Install/uninstall NFS on Move (persistent)
│ ├── mount_samples.py # Mount samples on Move (manual)
│ ├── unmount_samples.py # Unmount samples from Move
│ ├── verify_mount.py # Verify mount status and connectivity
│ ├── check_nfs_status.py # Check NFS server status
│ └── setup_automount.py # Configure auto-mount via fstab
└── utils/
├── ssh_helper.py # SSH connection utilities
└── move_helper.py # Move device helper functions
Security Notes
- Read-only enforcement: Samples are mounted read-only to prevent accidental modification
- Network restrictions: NFS export should be limited to Move's IP address
- Local network only: Never expose NFS to the internet
- SSH keys: Use SSH keys instead of passwords for automation (more secure)
- Credentials:
.envfile is gitignored to avoid committing secrets
FAQ
Q: Can I modify samples on the Move? A: No, the mount is read-only for safety.
Q: Will this use storage on the Move? A: No. Files are streamed from the NFS server as needed.
Q: What happens if the network drops? A: With soft mount options, operations timeout gracefully. Unmount and remount to recover.
Q: What happens if the Move boots without network?
A: With the nofail mount option, boot continues normally. Mount manually once the network is available.
Q: Can I use this with multiple Move devices? A: Yes, add each Move's IP to the NFS server's export permissions and run the install on each device.
Q: Does this work over the internet? A: No. This is designed for local network use only. NFS should never be exposed to the internet.
Q: What do I do after a firmware update?
A: Run python scripts/install_move_nfs.py auto to reinstall. See INSTALLATION.md.
Further Documentation
- INSTALLATION.md -- Automated and manual install/uninstall, fstab reference, NFS server setup, firmware update recovery, troubleshooting
License
This project is licensed under the MIT License - see the LICENSE file for details.
