Headless Roon Core, CD Ripper

The commercial Vortexbox builds use ‘Vortexbox Nova’, unfortunately this is not available for DIY use or for standalone purchase.

Does anyone have experience with Cockpit and/or Webmin (or any other web management tool for Linux servers) who can comment on strengths/weaknesses for this application?

From what I have read, Cockpit seems more streamlined and Webmin more feature-rich.

Ideally, I’d like to be able to do the following with it. None of this is crucial since I can do it all via SSH if needed.

  • Access a terminal via the web interface (Cockpit does this piece well, arguably nicer than Webmin)
  • Manage/create/monitor cron jobs (both can do this although Cockpit calls them “timers” and uses systemd)
  • Rsync configuration (advantage Webmin)
  • Manage Docker containers (advantage Cockpit although Webmin can do it with the addition of Cloudmin/Virtualmin)
  • Manage SMB shares (advantage Webmin… Cockpit can do NFS and there’s a beta plugin for SMB though)
  • Manage user groups and permissions
  • Monitor processes

Think I’m going to dockerize as much as possible and go with Cockpit seeing as one of its strength as a web control panel is managing containers.

Going to use the following docker files

  • Roon Extension Manager
  • Whipper Unattended Ripping
  • Samba server

I’m presently wondering the best way to accomplish the mirroring between internal HDD where my music library will be stored and the external HDD which I’d be using both as backup and portable way to carry around my library and add music. Rsync makes sense for this, and I can trigger it on mount of the USB drive, on rip of a CD, and nightly.

If I were only ever adding to my library, it would be very straightforward, but when deletions come into play, it gets trickier. If I remove something from the library using Roon (from the internal drive), I want that deletion to propagate to the external drive, but if there happens to be other new stuff on the external drive that hasn’t been sync’d over yet, I want that preserved.

I’m making good progress in adding auto rip to the CD Ripper extension.The current solution requires a one time manual setup of a udev rule (probably stays that way, probably not for everyone), similar to what is described in the Most Possible Unattended Rip readme file.

Usage is really as easy as inserting a CD, waiting for it to eject, inserting the next CD…

The CD is ripped to a staging directory and then copied over to a local or Samba share. The password handling has been updated to accomplish this.

New Settings dialog

Proof of concept video

1 Like

This is fantastic news @Jan_Koudijs !!
I actually have my server up and running with the mpur script triggered by udev.

I used his Docker setup which took some tweaking because the Whipper image he based his image from no longer existed and the official one was updated to Python3 which broke his script.

It’s all working pretty well for me now, but I think your extension is a cleaner solution. Any ETA on when I can play with the new version?

My next task is setting up all of my backups… I went with Webmin and Portainer for web management of my server. It’s a work in progress but coming along great.

Thanks for the abcde tip - may be something I’ve been looking for - especially if it grabs metadata.

1 Like

Just an update on this project and what is working so far:

  • Ubuntu Server 20.04 LTS up and running
  • Went ahead and installed xubuntu-desktop and x11vnc server for occasional times when I want to run GUI apps. The RAM overhead is minimal and not a concern given the hardware I am using.
  • Have Webmin and Portainer for web management of the overall server stuff and Docker containers, respectively. Cockpit currently has some major issues with Safari on iOS despite what their website says, so I ended up going the Webmin direction even though it’s a bit elaborate for my needs.
  • Got the Whipper Most Possible Unattended Rip script working as described in an earlier post. This required some tweaking since I used the Docker version and one of the dependencies in the dockerfile no longer existed. If anyone needs help with this, I described my workaround in the Issues section of the Github.
  • Has my music library shared on the network over SMB.
  • Using Timeshift for overall system backup to SD card. This is based on rsnapshot but makes the process of incremental backups very easy. Has both GUI and command line versions and is a “set and forget” backup solution. I currently have it set to keep backups from the last 2 boots, the last 2 days, the last 1 week, and the last 1 month, plus I kept one initial backup. The initial backup took up roughly the same space as what I was backing up (the whole system minus some default ignored directories) and the incremental ones are extremely small, roughly the size of changed files. Note this backup excludes my music library and Roon database.
  • Roon database is set to backup to a different folder on the SD card automatically through Roon.
  • I’m currently looking at using Unison for sync of my internal 2TB HDD music library with my external 2TB USB drive. The point of this again is twofold: 1) To have a separate backup of my library, 2) To be able to take the USB drive (exFAT) to any other computer and add music to it, and have it sync with my primary library when I reconnect the drive to the server. Unison uses rsync to do this kind of 2-way sync kinda like Dropbox. It can run sort of like a daemon and watch for changes, but I think I’m going to trigger Unison 3 ways: 1) Using udev when the USB drive is connected, 2) Using the mpur CD rip script so it syncs after ripping a CD to the internal HDD, and 3) Via a cron job nightly just to be safe (although #3 shouldn’t be needed strictly speaking).

Long story short, from user perspective, this little box does the following:

  1. Serves as my Roon Core running on Ubuntu Server where the boot drive is NVMe
  2. Automatically rips CDs to FLAC, names files appropriately, grabs album art, and ejects on completion.
  3. Has my primary music library on an internal 2.5” 2TB HDD but syncs that library to a 2TB USB drive every time a CD is ripped, when the USB drive is reconnected, and nightly. I can take the drive to a friend’s house, copy over music, reconnect to the server when I get home and it syncs. Roon just watches the primary library on the internal drive.
  4. Automatically backs up the NVMe boot drive incrementally using Timeshift to SD card. Eventually I’ll set it to Rsync the SD to my NAS as a secondary backup in case the SD card fails since SD cards aren’t great as backup media.
  5. Has Roon Extension Manager on Docker.
  6. Has Xubuntu-desktop with XFCE4 for GUI stuff and remote access via X11VNC Server, SSH, and/or the Webmin and Portainer web control panels.

Truthfully I’ve been having more fun tinkering with this server than anything I’ve done in a long time… getting to listen to music while I do it is icing on the cake.

1 Like