I recently got an M9201, a chinese clone of the Oppo UDP-203 and successor of the M9702.
Getting network shares from a recent Debian Bullseye installation to work was not as easy as I expected.
The player refused to connect via Samba and my NFS shares appeared empty.
Fortunately I managed to solve both issues.
The solutions should also work with the Original Oppo, M9702, M9203, M9205 and other clones, since they all run the same firmware.
Samba should have been pretty straightforward. The player only supports SMBv1 which is disabled by default in modern Samba versions, so we just have to enable it with
server min protocol = NT1.
What tripped me up here is that it also requires NTLMv1 authentication, modern Samba versions default
ntlm auth to
ntlmv2-only, and this is never mentioned in documentation, forum posts or guides on enabling SMBv1.
So, to make it work just add or edit these 2 settings in the
[global] section of your Samba configuration to enable enable SMBv1 and NTLMv1:
1 2 3 [global] server min protocol = NT1 ntlm auth = ntlmv1-permitted
Reload the Samba configuration with
sudo systemctl reload smbd and you are good to go.
The real trouble starts if you want to use NFS, which is reported to run more reliably with these players.
The NFS client of the player only supports 32 bit inodes, modern file systems can and some will use 64 bit inodes by default (e.g. XFS, ZFS).
The result of this is that some files and directories appear missing or empty when browsing the share.
For details on this, check out this post by MJ Rutter: https://www.mjr19.org.uk/sw/inodes64.html
One suboptimal solution mentioned in the post is to set
nfs.enable_ino64=0 on the server, but this disables them for all exports and can cause files to appear duplicated and possibly confuse 64 bit clients.
The other way I found is to mount your media directory with mergerfs and one of the inodecalc options that generate 32 bit inodes.
The good thing with this method is that it will only affect the mergerfs mount and its export, so everything else will keep working as expected.
Install the latest mergerfs release, there are ready to install .rpm and .deb packages for RHEL, Fedora, Debian and Ubuntu. Otherwise follow the build instructions: https://github.com/trapexit/mergerfs#build--update
For 64bit Debian Bullseye, at the time this post was written:
1 2 3 wget https://github.com/trapexit/mergerfs/releases/download/2.32.6/mergerfs_2.32.6.debian-bullseye_amd64.deb sudo dpkg -i mergerfs_2.32.6.debian-bullseye_amd64.deb rm mergerfs_2.32.6.debian-bullseye_amd64.deb
NOTE: for mounting via fstab to work you must have mount.fuse installed. For Ubuntu/Debian it is included in the fuse package.
First create a mount point for mergerfs, e.g.
1 sudo mkdir /mnt/media32
Then mount your media directory with mergerfs, the recommended default options are
I personally also added
ro for read-only, because the player should never need to write to the share.
Additionally we specify the
inodecalc option to generate 32 bit inodes. The best option to use with NFS is probably
hybrid-hash32 worked for me as well.
The differences are explained here https://github.com/trapexit/mergerfs#inodecalc
1 2 sudo mergerfs -o allow_other,use_ino,cache.files=off,dropcacheonclose=true,inodecalc=path-hash32,ro \ /path/to/your/media /mnt/media32
You should now be able to see all your media files accessible in
One thing to note is that you need to specify an
/etc/exports to export FUSE mounts. For example, my export:
1 /mnt/media32 -fsid=69,async,no_subtree_check,ro 192.168.178.69
I’m exporting read-only
ro here as well, just like the mount previously. We can also use
async to improve performance because we will never write to the share.
To automatically mount on startup, add the mount to
/etc/fstab as follows:
1 /path/to/your/media /mnt/media32 fuse.mergerfs allow_other,use_ino,cache.files=off,dropcacheonclose=true,inodecalc=path-hash32,ro 0 0
Re-export the shares with
sudo exportfs -ra and all files and directories should now be visible from the player.