Setting up a media server

Intro

In this tutorial, we assume that a hard-drive containing various types of media is mounted on some server. Its content will then be made accessible via NFS, streamed to e.g. your TV using DLNA, while being continuously monitored with munin.

Setting up DLNA

DLNA is short for ‘Digital Living Network Alliance’ and allows media access from various types of rendering devices, most notably Smart TVs.

Its setup is fairly easy. Firstly, install a DLNA server on the device hosting the media data:

$ pacman -S minidlna

Then configure it by editing /etc/minidlna.conf and adjusting the following values:

media_dir=/HD/media
friendly_name=kpj's friendly DLNA server

Finally, just start/enable it:

$ systemctl enable --now minidlna.service

It will now appear as a DLNA source on your respective rendering device.

Due to “some” reason, DLNA does sometimes not synchronize new files (even after restarts). In order to fix this, simply delete /var/cache/minidlna/files.db and restart again.

Setting up NFS

NFS (Network File System) will allow you add new data to the media storage via a network connection. Install the needed applications:

$ pacman -S nfs-utils

Furthermore, it’s a good idea to enable time-synchronization:

$ systemctl enable --now systemd-timesyncd

Server

The server is the device which has a physical (direct) connection to the hard-drive, which is assumed to be mounted in /mnt/media/.

It is good practice to store all tentative NFS shares in a joint root (here: /srv/nfs/):

$ mkdir -p /srv/nfs/media
$ mount --bind /mnt/media/ /srv/nfs/media/

In order to make this persistent across reboots, add the following line to /etc/fstab:

/mnt/media /srv/nfs/media/  none   bind   0   0

To publish a shared directory, its configuration needs to be appended to /etc/exports:

/srv/nfs/media     192.168.1.0/24(rw,sync,crossmnt,fsid=0,no_subtree_check)

If NFS was already running, we need to notify it of our changes:

$ exportfs -rav

Otherwise, simply start the NFS service:

$ systemctl enable --now nfs-server.service

In the end, list all exports to make sure everything worked out:

$ exportfs -v

Client

Assuming that the server is reachable using its ip, setting up the client is fairly straight-forward.

First, make sure that the exports are available:

$ showmount -e <server ip>

And then mount them accordingly:

$ mount -t nfs <server ip>:/srv/nfs/media /mnt/HD/media/

Server health monitoring

To keep you media server running for a long time, monitoring its health and resource usage is important. Check out how to achieve this using Munin.