HOWTO: Guide For Setting Up Roon Server and Roon Bridge on Arch Linux x86_64

I’ve had to do this a few times on different machines and on each occasion I’ve had to rely on my google skills to identify and refer to a number of resources that helped me on the way. This is written to help myself and others get it right first time and save what could otherwise be hours of frustration. This guide assumes a basic level of Linux know-how and covers installing Arch Linux onto a target USB flash drive (/dev/sdX for the purposes of this guide) using a source USB flash drive (/dev/sdY). Furthermore, it details how to go about installing Arch on a EUFI machine without having to install a bootloader should you wish to go that route.

Prepare source flash drive
Firstly, download the Arch Linux ISO file and write it to a flash drive as follows (where sdY represents the flash drive):

wipefs --all /dev/sdY dd bs=4M if=/path/to/archlinux.iso of=/dev/sdY && sync

Configure BIOS and boot from source flash drive
Turn off compatibility mode and secure boot in the UEFI BIOS, connect network cable, and reboot target machine from flash drive you’ve just prepared.

Partition target flash drive
After the boot sequence is completed insert the target flash drive on which you wish to install Arch Linux and determine its device name:

lsblk

Partition the target flash drive with 512MB partition of type ef00 and the remainder as a regular Linux partition using gdisk:

gdisk /dev/sdX

If you need to wipe out existing partitions etc. on the target flash drive use expert mode (press x) and zap the gpt tables, mbr etc. (press z). Then relaunch gdisk as above.

Once in gdisk press n and follow the prompts to size the partition table and set its type: +512MB and ef00 respectively. When done with the first partition press n again and create a second (Linux) partition utilising the remaining space on the flash drive. When done press w and confirm writing of the partition tables.

Format partitions on target flash drive
Format the partitions FAT32 and EXT4 respectively:

sync mkfs.fat -F32 /dev/sdX1 mkfs.ext4 /dev/sdX2

Now mount the Linux partition to /mnt and EFI System Partition to /mnt/boot

mount /dev/sdX2 /mnt mkdir /mnt/boot mount /dev/sdX1 /mnt/boot

Install the base system, generate an fstab (note the use of -U to utilise UUIDs for device identification) and load temp files to ram:

pacstrap /mnt base genfstab -U -p /mnt >> /mnt/etc/fstab nano /mnt/etc/fstab

Add the following to fstab to minimise unnecessary writes to the flash drive:

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

Chroot into and configure the base system
Change myhostname below to whatever you’d like your RoonBridge to be identified as on your network e.g. roonbridgenuc

arch-chroot /mnt /bin/bash hwclock --systohc --utc echo myhostname > /etc/hostname

Add the same hostname to /etc/hosts and edit the file to place it in the correct location so the line looks as follows:
127.0.0.1 localhost.localdomain localhost myhostname
::1 localhost.localdomain localhost myhostname

echo myhostname >> /etc/hosts nano /etc/hosts

Set locale by uncommenting the locale you wish to use, save the file and activate the locale

nano /etc/locale.gen echo LANG=en_US.UTF-8 > /etc/locale.conf locale-gen

Create a symbolic link /etc/localtime to your subzone file /usr/share/zoneinfo/Zone/SubZone using this command:

ln -s /usr/share/zoneinfo/Africa/Johannesburg /etc/localtime

Setup Dynamic IP, firstly by ascertaining ethernet device name, then by copying a sample profile from /etc/netctl/examples to /etc/netctl and modifying it by changing eth0 to the Ethernet port shown by ip l. It is typically going to be something along the lines of eno1:

ip l
cd /etc/netctl
cp examples/ethernet-dhcp my_network
nano /etc/netctl/my_network
netctl enable my_network[/code]

Set the root password:
[code]passwd[/code]

Install some essentials (only install intel-ucode [basically intel microcode updates] if you're running Intel hardware):
[code]pacman -S intel-ucode openssh mc ffmpeg samba[/code]

Enable root login via ssh:
[code]cd /etc/ssh/
cp sshd_config sshd_config.org
nano sshd_config[/code]
Find the following line in /etc/ssh/sshd_config
[code]#PermitRootLogin prohibit-password[/code]
Remove the # and change prohibit-password to yes
[code]PermitRootLogin yes[/code]
Enable sshd
[code]systemctl enable sshd.service[/code]


**Configure the boot sequence**
Now you have  a decision to make...use a bootloader or bypass it.  Bypassing makes for a faster boot and is great if your EUFI BIOS can boot an OS directly.

_**If you want to use a bootloader**_
Install a UEFI bootloader.
[code]pacman -S dosfstools
pacman -S gummiboot
gummiboot install

Determine device UUIDs and create a configuration file to add an entry for Arch Linux to the gummiboot manager:

blkid >> /boot/loader/entries/arch.conf nano /boot/loader/entries/arch.conf

Remove UUID entries other than that pertaining to the flash drive and add the following (using your device UUID):

title	Arch Linux
linux	/vmlinuz-linux
initrd	/initramfs-linux.img
options	root=UUID=Insert_Linux_Partition_UUID_Here rw

Flush cache and exit chroot session

sync && exit

If you don’t want to use a bootloader:
Flush cache and exit chroot session

sync && exit

List EFI boot entries in BIOS and flush cache

efibootmgr -v sync
Use efibootmgr to delete all firmware boot entries efibootmgr -b # -Bwhere # is the entry number you want to delete

When you’ve deleted all entries efibootmgr should return a message along the lines of “BIOS will attempt recovery/ detection on reboot.”

Now what is needed is the ability to have the EFISTUB point to the UUID of the Linux partition on the flash drive you’ve just installed to in order to ensure that the correct device is referenced for booting regardless of what other drives are present on the machine. In my case it was /dev/sdb2. Typing in a UUID from a terminal window seems like a stupid idea unless you’re really accurate with your typing. I got around that by capturing the UUIDs in a file, editing it to remove the crud, and turning it into a bash script by adding the efibootmgr line I needed and then running the resulting script.

Once the file was loaded in nano I added the efibootmgr line referencing the partition UUID for /dev/sdb2 (i.e. the root partition of my Arch install). It reads as follows:

Capture UUIDs in a file for editing and later execution

blkid > blkids.sh nano blkids.sh
Now delete the crud…all you want to retain is the UUID of /dev/sdb2 (i.e. the root partition of the Arch install) and use that string in a call to efibootmgr to point it to your Arch install. This is what a completed line should look like:

efibootmgr -d /dev/sdb -p 1 -c -L "Arch" -l /vmlinuz-linux -u "root=UUID=Insert_Linux_Partition_UUID_Here rw initrd=/intel-ucode.img  initrd=/initramfs-linux.img"

Save the changes, make the file executable and execute it

chmod +x blkids.sh ./blkids.sh

Flush cache and reboot from the target flash drive (remember to remove the source USB flash drive during reboot sequence):

sync && exit umount -R /mnt sync reboot

This should leave you at the Linux CLI faced with a login prompt.

Install Roon Bridge or RoonServer
All that remains now is to login as root, download and run the Roon Bridge or Roon Server installation script.

If you’re wanting to use the device only as a Roon endpoint, install Roon Bridge:

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

If you’re wanting to use the device as a Roon Server and endpoint, install Roon Server:

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

6 Likes

Hi Evan, thanks for your instructions (it’s a pity that I found this only after installing Archlinux by myself) but I have some questions left. Right now I’m running Roon on a Macbook Pro and playing music via Raspberry IQaudIO. (very soon I will get the KiiAudio three but thats another cup of tea) The storage for the audio-files are a Synology (DS 1010+). That works very well, but i wish to separate the core and the remote. That’s why I bought a NUC (i7 with 16 GB of RAM and 500 GB M.2 SSD) The last two days I’ve spent installing Archlinux (I only have very, very limited skills in this case). At the moment RoonServer is running headless and I control the NUC with ssh-shell from my Macbook as root.
Now my questions: How to go further? I know, that I have to uninstall Roonserver from my Macintosh first. Probably I have to install after that the Roon Remote to control the Core (but I’ve got a iPhone too and maybe the new App will do the job) But how can I transfer the Database (about 5 GB) to the RoonServer-installation on Archlinux? And how can I point the fresh installed RoonServer to my Music Library on the Synology? With the Macbook I’m mounting the volume manually (because the NAS is not running 24/7). Is there a way to mount Volumes automatically with Archlinux when they are available? Sorry for my English and Greetings from Germany.

I’ve not looked into mounting devices as soon as they’re available so I can’t answer that part other than to say that if you do some research into setting up options in FSTAB there are parameters that will attemp mounting the NAS only if its present on the network.

Getting your database from your MAC onto the Arch machine can be done by setting up a NFS share on the Arch box or by using scp to copy them across. Syntax is along the lines of scp /pathtoroondata root@ipofarchbox:/pathtocopyto. I’d use scp. I’d also install mc on the arch box so you have a file manager to make your life easier when moving files etc.

You’d need to stop RoonServer on Arch before copying the files across: systemctl stop roonserver

Thanx for your assistance. I moved at the weekend successfully the RonnServer to my ArchLinux installation and after rescanning the library everything works fine so far. Nevertheless there are still some problems (I’ve got a bunch of duplicate albums (about 2000 out of 10.000) and some playback issues (Transport: Failed to load media) from time to time, but I think, thats not connected with the Linux-installation.

Did you delete the initial watched folder setup when you’d copied the database across? If not that’d be the cause of duplicates.

Thank you for helping - this problem is solved already. ((Duplicate tracks after moving roon database[fixed])

Configure the boot sequence
Now you have a decision to make…use a bootloader or bypass it. Bypassing makes for a faster boot and is great if your EUFI BIOS can boot an OS directly.

Evan, I have a Nuc5i7. One of its quarks is it likes to boot from the HDD even though the OS is on the SSD. With this being the case, should I configure with bootloader or not?

Thanks

1 Like

I’m not an expert on EUFI boot systems, but from the experience I’ve had with it my understanding is that whether or not you must use a bootloader is entirely dependent on the Nuc5i7 BIOS’s ability/inability to boot an OS directly without a bootloader.

When adding a bootloader all you’re doing is writing an entry in the UEFI BIOS pointing to the bootloader. Similarly, when booting without a bootloader you’re pointing the UEFI BIOS directly to the OS.

My entry level Celeron NUCs boot Arch directly.

Evan,

gummiboot is dead! has become systemd. What to do?

Also, do these get loaded into root@archiso ssh?

I haven’t had time to look into it at present, but it looks like a much simplified install of the bootloader - have a look at the guidance here:

https://wiki.archlinux.org/index.php/Systemd-boot#EFI_boot

[quote=“Canyoncruz, post:9, topic:9513”]
Also, do these get loaded into root@archiso ssh?
[/quote]Not sure what you’re asking here?

At the point I am ready to load the bootloader, i am in the above directory. Should I be?

type pwd and let me know what it returns

Hello Evan,

So i got the ting working! and the nuc5i7 quark where it only wantd to boot from the HHD is fixed. All is loaded into the SSD. A couple more questions:

  1. I was looking in the wikis for automatic login since this will be headless and will be a PITA to plug it in to a keyboard etc to type in the login. What do you suggest. I want to have the option to turn off and turn on like an appliance.
  2. For the HHD, how do I format it? I am using GParted. Also, I will be using an auto-loading CD ripper with BPoweramp in a windows system. what is the best way to ultimately get the info into a linux formatted HHD?

Thank you so much for this tutorial. Took days off implementing for a newbie like me.

CC

You don’t need to login, Roon will load automatically on startup.

Are you booting from a flash drive or the SSD?

Boot the machine, login and type lsblk and paste in here what it returns

sda Disk
sdb Disk
sdb1 Part/boot
sdb2 part /

Booting from SSD

Please paste it as returned - should look something like this:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 2.7T 0 disk /srv/btrfs1 sdb 8:16 0 2.7T 0 disk /srv/btrfs2 sdc 8:32 0 2.7T 0 disk /srv/btrfs3 sdd 8:48 0 2.7T 0 disk /srv/btrfs4 sde 8:64 0 2.7T 0 disk /srv/btrfs5 sdf 8:80 0 2.7T 0 disk └─sdf1 8:81 0 2.7T 0 part /mnt/parity1 sdg 8:96 0 2.7T 0 disk └─sdg1 8:97 0 2.7T 0 part /mnt/parity2 sdh 8:112 0 28G 0 disk ├─sdh1 8:113 0 512M 0 part └─sdh2 8:114 0 27.5G 0 part sdi 8:128 0 55.9G 0 disk └─sdi1 8:129 0 55.9G 0 part /srv/ssd sdj 8:144 1 14.7G 0 disk ├─sdj1 8:145 1 512M 0 part /boot └─sdj2 8:146 1 14.2G 0 part /

shit! how do I do that?

I only have two disks and ones unformated. it is pretty simple

there is a line above the hard drives that says:

Ok, seeing as you’re clearly booting from /dev/sdb I’ll assume the other drive /dev/sda is empty and unformatted. Please make sure this is the case otherwise you’re going to blow your install or lose data by doing what follows below:

first partition it using gdisk - if you’re running Linux without a GUI (as you should be if you’ve followed the install instructions) you cannot use gparted.

so basically from the terminal run:

gdisk /dev/sda

once in hit x for extra functionality and then z to zap the drive. Follow the prompts answering Y for all. gdisk will quit and return you to the command line. Hit the up arrow on the keyboard which will reinsert

gdisk /dev/sda in the terminal window and press enter to run gdisk again. This time press n for new partition table and follow the prompts - you can pretty much press enter and accept each default as presented. When it’s done you’ll be back at the gdisk main menu. Enter W to write changes and quit gdisk. When back at the command line type the following:

mkfs.ext4 /dev/sda1[/code]The drive will be formatted and you'll be returned to the command prompt.  Finally type the following to maximise available storage capacity to store data:[code]tune2fs -m 0 /dev/sda1

That’s it.

Done and thank you again. And to answer my first question: yes Roon boots up. I loaded Bluestacks into my other computer to let me run the remote app and sure enough, it sees Roon (my current ipad too old, need to get a new one).

Thank you once again Evan!

Hi, Ifirst installed Roonserver on my windows PC and everything worked fine. Then i installed Manjaro on a second partition, which works. Then i downloaded Roonserver from the AUR packetsource, which worked but then it doesn’t appear in Manjaro. Do i have to deinstall it from windows first or what do I do wrong?