FreeBSD Core Server

Hi @brian

I do not have deep details about Roon (of course) but you should not have any major problem to compile it on plain FreeBSD, almost certainly all dependencies are available in there already - you would just need to install the packages. I just do not know how the Mono support is on FreeBSD, I do not use Mono.

FreeNAS is a high customized version of FreeBSD, one time there is a FreeBSD Port it is quite easy to have it running on FreeNAS.

Indeed, it is often easier to support FreeBSD¹ than Linux, and you can always rely on FreeBSD support channels, specially the Mailing Lists where most devs hang.

Cheers! :beers:

EDIT: If you prefer to have a full desktop running right after the installation, you can install GhostBSD, what is exactly it - a pre-configured FreeBSD Desktop, using “Mate Desktop”.

EDIT_2: probably the only major difference rely on the fact FreeBSD use OSS (Open Sound Server) instead of Alsa as default sound server. Still, Alsa can be used on FreeBSD, it is on Ports system, but would be a less elegant solution².

¹while there are some derivatives, do exist just one FreeBSD (what is a complete system), one Ports system, etc.

²basically all features you find in “Alsa + Pulse Audio” are already present in OSS alone. Using Alsa instead OSS could be considered a downgrade. :wink:

Mono works fine on freebsd. I’ve used it with other apps.

I’m trying to see how far I can get running roon server using 64 bit linux emulation in a jail. I’ve been able to get check.sh to pass, but the RoonServer program itself crashes inside of mono. Since it appears that mono is embedded in the binary, I don’t see how I could try to get it to run under a different mono version.

Any ideas??

root@roon:~/RoonServer # ./start.sh
TYPE: 7
V: mono_create_corlib_exception_0

  • Assertion at mini-amd64.c:203, condition `amd64_is_imm32 (disp)’ not met

Stacktrace:

at <0xffffffff>
at System.DateTime…cctor () <IL 0x00000, 0x00013>
at (wrapper runtime-invoke) object.runtime_invoke_void (object,intptr,intptr,intptr) <IL 0x0001f, 0x00061>
at <0xffffffff>
at Base.Utils…cctor () [0x00000] in /home/roon/roon/Base/utils.cs:37
at (wrapper runtime-invoke) object.runtime_invoke_void (object,intptr,intptr,intptr) <IL 0x0001f, 0x00061>
at <0xffffffff>
at Sooloos.App.Main (string[]) [0x00000] in /home/roon/roon/Client/Server/main.cs:33
at (wrapper runtime-invoke) .runtime_invoke_void_object (object,intptr,intptr,intptr) <IL 0x00051, 0x000bf>

Native stacktrace:

/root/RoonServer/Mono/bin/RoonServer() [0x505132]
/root/RoonServer/Mono/bin/RoonServer() [0x5a330c]
[0x7ffffffff614]
/lib64/libc.so.6(gsignal+0x37) [0x8022351d7]
/lib64/libc.so.6(abort+0x148) [0x8022368c8]
/root/RoonServer/Mono/bin/RoonServer() [0x7a99bd]
/root/RoonServer/Mono/bin/RoonServer() [0x7a97a6]
/root/RoonServer/Mono/bin/RoonServer() [0x7a990b]
/root/RoonServer/Mono/bin/RoonServer() [0x54580e]
/root/RoonServer/Mono/bin/RoonServer() [0x586da5]
/root/RoonServer/Mono/bin/RoonServer() [0x5aaa7a]
/root/RoonServer/Mono/bin/RoonServer() [0x5aec68]
/root/RoonServer/Mono/bin/RoonServer() [0x5afab6]
/root/RoonServer/Mono/bin/RoonServer() [0x419bc9]
/root/RoonServer/Mono/bin/RoonServer() [0x419d62]
/root/RoonServer/Mono/bin/RoonServer() [0x5080b0]
/root/RoonServer/Mono/bin/RoonServer() [0x508642]
[0x800b1d28c]

=================================================================
Got a SIGABRT while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.

./start.sh: line 52: 44318 Abort trap (core dumped) “$P” “$@”
./start.sh: line 34: kill: (44318) - No such process

I used bhyve with the following steps:

Add to System->Tunnels (rc.conf):

ng_ther_load=“YES”
iohyve_enable="YES"
iohyve_flags="kmod=1 net=em0"

Setup pool “ssd” for virtual machine:

iohyve setup pool=ssd

Setup network bridge (check your interfaces with ifconfig):

iohyve setup net=em0

Load kernel modules:

iohyve setup kmod=1

Fetch Debian network install ISO

iohyve fetchiso http://cdimage.debian.org/debian-cd/8.4.0/amd64/iso-cd/debian-8.4.0-amd64-netinst.iso

Set up VM

iohyve create roonserver 50GB
iohyve set roonserver ram=2GB
iohyve set roonserver cpu=1
iohyve set roonserver loader=grub-bhyve
iohyve set roonserver boot=1

Start installation (boot the ISO):

iohyve install roonserver debian-8.4.0-amd64-netinst.iso

Connect to virtual serial console (login root, no pw, exit the console with ~~. ):

iohyve console roonserver

Follow the on screen GUI to install

When asked for packages, deselect the GUI and select SSH

Edit the network interface file

vi /etc/network/interfaces

In the interfaces file look for a line such as:

iface eth0 inet dhcp

Put a hash at the beginning of the line to disable it or delete it:

#iface eth0 inet dhcp

Add the following lines

# The loopback interface
 auto lo
 iface lo inet loopback
 auto eth0
 iface eth0 inet static
 #your static IP
 address 192.168.0.225  
 #your gateway IP
 gateway 192.168.0.1
 netmask 255.255.255.0
 #your network address "family"
 network 192.168.0.0
 broadcast 192.168.0.255

Enable root login via ssh:
cd /etc/ssh/
cp sshd_config sshd_config.org
vi sshd_config

Find the following line in /etc/ssh/sshd_config

Remove the # and change prohibit-password to yes from the line below:

#PermitRootLogin prohibit-password

becomes:

PermitRootLogin yes

Stop the system

init 0

And test with:

iohyve destroy roonserver
iohyve start roonserver
iohyve console roonserver

Make vertain your freenas has the NFS share set up

Enter:

mkdir /mnt/MusicStore
mount -t nfs NFSserver:/mnt/DataVault/MusicStore /mnt/MusicStore

Edit /etc/fstab to include the mount using a line:

mount -t nfs titan:/mnt/DataVault/MusicStore /mnt/MusicStore

Also add the following lines for SSDs:

tmpfs /var/log tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0

##Save and test using the following commands:
umount /mnt/MusicStore
mount -av

IMPORTANT There should not any error messages!!!

RoonServer Installation

apt-get install cifs-utils
apt-get install curl

Make directories

cd /opt

curl -O http://download.roonlabs.com/builds/roonserver-installer-linuxx64.sh
chmod +x roonserver-installer-linuxx64.sh
./roonserver-installer-linuxx64.sh

Follow the prompts

Set up ntp

apt-get install ntp

I have migrated my FN 9.10 server to FN 10, and am using Docker for Plex Media Server and the FN10 VM wrapper (debian 8.40 template).
Roon is very easy to install with Debian Jess and seems stable, with backups and streaming working fine - same as pre-upgrade.
I would have migrated to Docker but there is no official Docker image and it doesn’t appear in the “official” parameterized Freenas list of Docker container images.

FYI, the VM system also supports FreeBSD vm’s, so if you ever port Roon to FreeBSD it would also be able to run with less virtualization overhead…But maybe I would suggest an official Docker release now.

There is the official Debian Jessie docker image… You could go that route and install the core there instead of waiting for an “official” image made by somebody else…

I have FN10 with RoonCore in a Ubuntu VM. I use 9P virtio to mount the NASs share instead of SAMBA. This is very fast and easy to set up. See: Suggested hardware

I will try the docker image being worked on as well. See: Docker images for Roon

+1 for native Core on FreeBSD please

1 Like

A FreeNas plugin similar to what we see with pelx’s media server plugin would be fantastic. I am going to take a stab at trying the solutions that others have posted but I would love to see official support for FreeNas from Roon.

+1 too, for a native Core on FreeBSD or a FreeNas plugin
Thanks in advance

Would absolutely love this feature. Just setup FreeNas for use as a media hub and not looking forward to the complicated task of trying to get Roon running in a linux jail. Would be great to be able to just install a plugin.

Another +1 for a native FreeBSD Roon

+1 Roon Server plugin on FreeBSD please.

Is Peter Wright’s solution the most up to date ?
Any other links please.
Here’s a current update from Dave Hamby:

Dave’s instructions seem accurate, he uses iohyve instead of bhyve, which seems to be the current 11.1 default VM tool. Honestly, it is easier to buy an Intel NUC and install ROCK. I did that but I plan to run at my backup location with bhyve on my Freenas server (instead of buying another NUC). In order to use bhyve/iohyve, you need a fair amount of “extra” RAM for virtual machines in addition to the RAM for the core OS (freenas) and ZFS use.

I missed using NFS with bhyve on Freenas for Roon Server. (SMB has more limitations on ‘edge case’ file names etc).
I do like separating the file server from the application server. I may move in that direction in the future.

Thanks, at least I could do that myself. I have a 16TB FreeNAS Mini with 32G RAM and its only use is household backups, storage and serve media files. Needless to say I have an underutilized box in my closet. Would be nice to slap in a SSD and run Roon Server on a single appliance. I can do basic FreeNAS setup, but at this level I rely on a local kid to help me set it up.

Please, a FreeBSD version of Roon Core is hight wanted!!! All my media server is running on a FreeNAS!!!

Running latest FreeNAS with a good music collection. Any plans to support FreeNAS or FreeBSD?
It’s a complete hassle to get it working through virtual machines.

Another +1 for a native FreeBSD Roon

And yet another vote for freebsd/freenas native roonserver. I have it working pretty well in a vm, but I would prefer the stability of a native version.

I’ll add a +1 here too. AFAIK mono exists on FreeBSD, hopefully it is just a recompile…

That said, I am under no illusions about how many people this would be useful for…

EDIT: So I think I’ve said something silly here. AFAICT the “Linux” version of Roon is actually a windows executable and a linux version of mono… This suggests that if mono on FreeBSD has the right bits, this is a packaging issue rather than a build issue. If that is the case, then we don’t need a FreeBSD port… I will dig deeper when I have the time.

Okay I did some poking around, and it is possible to get the binary to execute using the FreeBSD version of mono. Unfortunately there are some compiled libraries (libbase.so, libleveldb.so and libroonbase.so), so it isn’t 100% mono. This is obviously a blocker, we’d need a BSD build of these libraries. And this means when RoonServer.exe tries to load them, it fails.

1 Like