Installation Issue: RoonServer on Linux Fedora 40 (ref#A3L3CU)

I’ve been trying to install RoonServer on my Linux Fedora 40 workstation, no matter what I try when I try sudo ./roonserver.installer-linuxx64.sh I get the sudo: ./roonserver.installer-linuxx64.sh: command not found error message even though the roonserver-installer-linuxx64.sh file is in my home folder.
The file conaints the following code:

#!/bin/bash

# blow up on non-zero exit code
set -e

# these are replaced by build.sh
PACKAGE_NAME=RoonBridge
ARCH=x86
PACKAGE_URL=https://download.roonlabs.net/builds/RoonBridge_linuxx86.tar.bz2
PACKAGE_FILE=${PACKAGE_NAME}_linux${ARCH}.tar.bz2
PACKAGE_NAME_LOWER=`echo "$PACKAGE_NAME" | tr "[A-Z]" "[a-z]"`

TMPDIR=`mktemp -d`
MACHINE_ARCH=`uname -m`
OK=0

CLEAN_EXIT=0

# for colorization
ESC_SEQ="\033["
COL_RESET=$ESC_SEQ"39;49;00m"
COL_RED=$ESC_SEQ"31;01m"
COL_GREEN=$ESC_SEQ"32;01m"
COL_YELLOW=$ESC_SEQ"33;01m"
COL_BLUE=$ESC_SEQ"34;01m"
COL_MAGENTA=$ESC_SEQ"35;01m"
COL_CYAN=$ESC_SEQ"36;01m"
COL_BOLD=$ESC_SEQ"1m"

function hr {
    echo -e "${COL_BOLD}--------------------------------------------------------------------------------------${COL_RESET}"
}

function clean_up { 
    rm -Rf $TMPDIR
    if [ x$CLEAN_EXIT != x1 ]; then
        echo ""
        hr
        echo ""
        echo -e "${COL_BOLD}${COL_RED}The $PACKAGE_NAME installer did not complete successfully.${COL_RESET}"
        echo ""
        echo "If you are not sure how to proceed, please check out:"
        echo ""
        echo " - Roon Labs Community            https://community.roonlabs.com/c/support"
        echo " - Roon Labs Knowledge Base       https://kb.roonlabs.com/LinuxInstall"
        echo ""
        hr
        echo ""
    fi
}
trap clean_up EXIT

function install {
    #
    # Print banner/message
    #
    echo ""
    hr
    echo ""
    echo -e "${COL_BOLD}Welcome to the $PACKAGE_NAME installer${COL_RESET}"
    echo ""
    echo "This installer sets up $PACKAGE_NAME to run on linux with the following settings:" 
    echo ""
    echo " - $PACKAGE_NAME will be installed in /opt/$PACKAGE_NAME"
    echo " - $PACKAGE_NAME's data will be stored in /var/roon/$PACKAGE_NAME"
    echo " - $PACKAGE_NAME will be configured to run as a system service"
    echo " - $PACKAGE_NAME will run as root"
    echo ""
    echo "These settings are suitable for turning a dedicated or semi-dedicated device"
    echo "into an appliance that runs $PACKAGE_NAME"
    echo ""
    echo "If you want customize how $PACKAGE_NAME is installed, see:"
    echo ""
    echo "   http://kb.roonlabs.com/LinuxInstall"
    echo ""
    hr
    echo ""


    #
    # Check for linux (in case someone runs on OS X, Cygwin, BSD, etc)
    #
    case `uname -s` in 
        Linux)
            ;;
        *)
            echo -e "${COL_RED}${COL_BLOLD}Error:${COL_RESET} This package is intended for Linux platforms. It is not compatible with your machine. Exiting."
            ;;
    esac

    #
    # Check for proper architecture
    #
    case "$MACHINE_ARCH" in
        armv7*)
            if [ x$ARCH = xarmv7hf ]; then OK=1; fi
            ;;
        aarch64*)
            if [ x$ARCH = xarmv8 ]; then OK=1; fi
            if [ x$ARCH = xarmv7hf ]; then OK=1; fi
            ;;
        x86_64*)
            if [ x$ARCH = xx64 ]; then OK=1; fi 
            ;;
        i686*)
            if [ x$ARCH = xx86 ]; then OK=1; fi 
            ;;
    esac

    #
    # Check for root privileges
    #
    if [ x$UID != x0 ]; then
        echo ""
        echo -e "${COL_RED}${COL_BLOLD}Error:${COL_RESET} This installer must be run with root privileges. Exiting."
        echo ""
        exit 2
    fi

    #
    # Check for ffmpeg/avconv
    #

    if [ x$OK != x1 ]; then
        echo ""
        echo -e "${COL_RED}${COL_BLOLD}Error:${COL_RESET} This package is intended for $ARCH platforms. It is not compatible with your machine. Exiting."
        echo ""
        exit 3
    fi

    function confirm_n {
        while true; do
            read -p "$1 [y/N] " yn
            case $yn in
                [Yy]* ) 
                    break 
                    ;;
                "") 
                    CLEAN_EXIT=1
                    echo ""
                    echo "Ok. Exiting."
                    echo ""
                    exit 4 
                    ;;
                [Nn]* ) 
                    CLEAN_EXIT=1
                    echo ""
                    echo "Ok. Exiting."
                    echo ""
                    exit 4 
                    ;;
                * ) echo "Please answer yes or no.";;
            esac
        done
    }

    function confirm {
        while true; do
            read -p "$1 [Y/n] " yn
            case $yn in
                "") 
                    break 
                    ;;
                [Yy]* ) 
                    break 
                    ;;
                [Nn]* ) 
                    CLEAN_EXIT=1
                    echo ""
                    echo "Ok. Exiting."
                    echo ""
                    exit 4 
                    ;;
                * ) echo "Please answer yes or no.";;
            esac
        done
    }

    #
    # Double-check with user that this is what they want
    #
    confirm "Do you want to install $PACKAGE_NAME on this machine?"

    echo ""
    echo "Downloading $PACKAGE_FILE to $TMPDIR/$PACKAGE_FILE"
    echo ""
    curl -L -# -o "$TMPDIR/$PACKAGE_FILE" "$PACKAGE_URL"

    echo ""
    echo -n "Unpacking ${PACKAGE_FILE}..."
    cd $TMPDIR
    tar xf "$PACKAGE_FILE"
    echo "Done"

    if [ ! -d "$TMPDIR/$PACKAGE_NAME" ]; then 
        echo "Missing directory: $TMPDIR/$PACKAGE_NAME. This indicates a broken package."
        exit 5
    fi

    if [ ! -f "$TMPDIR/$PACKAGE_NAME/check.sh" ]; then 
        echo "Missing $TMPDIR/$PACKAGE_NAME/check.sh. This indicates a broken package."
        exit 5
    fi

    $TMPDIR/$PACKAGE_NAME/check.sh

    if [ -e /opt/$PACKAGE_NAME ]; then
        hr
        echo ""
        echo -e "${COL_RED}${COL_BOLD}Warning:${COL_RESET} The /opt/$PACKAGE_NAME directory already exists."
        echo ""
        echo "This usually indicates that $PACKAGE_NAME was installed previously on this machine. The previous"
        echo "installation must be deleted before the installation can proceed."
        echo ""
        echo "Under normal circumstances, this directory does not contain any user data, so it should be safe to delete it."
        echo ""
        hr
        echo ""
        confirm "Delete /opt/$PACKAGE_NAME and re-install?"
        rm -Rf /opt/$PACKAGE_NAME
    fi

    echo ""
    echo -n "Copying Files..."
    mv "$TMPDIR/$PACKAGE_NAME" /opt
    echo "Done"

    # set up systemd 
    HAS_SYSTEMCTL=1; which systemctl >/dev/null || HAS_SYSTEMCTL=0

    if [ $HAS_SYSTEMCTL = 1 -a -d /etc/systemd/system ]; then
        SERVICE_FILE=/etc/systemd/system/${PACKAGE_NAME_LOWER}.service

        # stop in case it's running from an old install
        systemctl stop $PACKAGE_NAME_LOWER || true

        echo ""
        echo "Installing $SERVICE_FILE"

        cat > $SERVICE_FILE << END_SYSTEMD
[Unit]
Description=$PACKAGE_NAME
After=network-online.target

[Service]
Type=simple
User=root
Environment=ROON_DATAROOT=/var/roon
Environment=ROON_ID_DIR=/var/roon
ExecStart=/opt/$PACKAGE_NAME/start.sh
Restart=on-abort

[Install]
WantedBy=multi-user.target
END_SYSTEMD

        echo ""
        echo "Enabling service ${PACKAGE_NAME_LOWER}..."
        systemctl enable ${PACKAGE_NAME_LOWER}.service
        echo "Service Enabled"

        echo ""
        echo "Starting service ${PACKAGE_NAME_LOWER}..."
        systemctl start ${PACKAGE_NAME_LOWER}.service
        echo "Service Started"
    else
        echo ""

        SERVICE_FILE=/etc/init.d/${PACKAGE_NAME_LOWER}

        /etc/init.d/$PACKAGE_NAME_LOWER stop || true

        cat > $SERVICE_FILE << END_LSB_INIT
#!/bin/sh

### BEGIN INIT INFO
# Provides:          ${PACKAGE_NAME_LOWER}
# Required-Start:    \$network
# Required-Stop:     \$network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Runs ${PACKAGE_NAME}
### END INIT INFO

# Defaults
DAEMON_NAME="$PACKAGE_NAME"
DAEMON_EXECUTABLE="/opt/$PACKAGE_NAME/start.sh"
DAEMON_OPTIONS=""
DAEMON_HOMEDIR="/opt/$PACKAGE_NAME"
DAEMON_PIDFILE="/var/run/${PACKAGE_NAME_LOWER}.pid"
DAEMON_LOGFILE="/var/log/${PACKAGE_NAME_LOWER}.log"
INIT_SLEEPTIME="2"

export ROON_DATAROOT=/var/roon
export ROON_ID_DIR=/var/roon

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

if test -f /lib/lsb/init-functions; then
    . /lib/lsb/init-functions
fi
if test -f /etc/init.d/functions; then
    . /etc/init.d/functions
fi

### DO NOT EDIT BELOW THIS POINT ###

is_running () {
    # Test whether pid file exists or not
    test -f \$DAEMON_PIDFILE || return 1

    # Test whether process is running or not
    read PID < "\$DAEMON_PIDFILE"
    ps -p \$PID >/dev/null 2>&1 || return 1

    # Is running
    return 0
}

root_only () {
    if [ "\$(id -u)" != "0" ]; then
        echo "Only root should run this operation"
        exit 1
    fi
}

run () {
    if is_running; then
        PID="\$(cat \$DAEMON_PIDFILE)"
        echo "Daemon is already running as PID \$PID"
        return 1
    fi

    cd \$DAEMON_HOMEDIR

    nohup \$DAEMON_EXECUTABLE \$DAEMON_OPTIONS >>\$DAEMON_LOGFILE 2>&1 &
    echo \$! > \$DAEMON_PIDFILE
    read PID < "\$DAEMON_PIDFILE"

    sleep \$INIT_SLEEPTIME
    if ! is_running; then
        echo "Daemon died immediately after starting. Please check your logs and configurations."
        return 1
    fi

    echo "Daemon is running as PID \$PID"
    return 0
}

stop () {
    if is_running; then
        read PID < "\$DAEMON_PIDFILE"
        kill \$PID
    fi
    sleep \$INIT_SLEEPTIME
    if is_running; then
        while is_running; do
            echo "waiting for daemon to die (PID \$PID)"
            sleep \$INIT_SLEEPTIME
        done
    fi
    rm -f "\$DAEMON_PIDFILE"
    return 0
}

case "\$1" in
    start)
        root_only
        log_daemon_msg "Starting \$DAEMON_NAME"
        run
        log_end_msg \$?
        ;;
    stop)
        root_only
        log_daemon_msg "Stopping \$DAEMON_NAME"
        stop
        log_end_msg \$?
        ;;
    restart)
        root_only
        \$0 stop && \$0 start
        ;;
    status)
        status_of_proc \
            -p "\$DAEMON_PIDFILE" \
            "\$DAEMON_EXECUTABLE" \
            "\$DAEMON_NAME" \
            && exit 0 \
            || exit \$?
        ;;
    *)
        echo "Usage: \$0 {start|stop|restart|status}"
        exit 1
        ;;
esac
END_LSB_INIT

        echo "wrote out file"
        chmod +x ${SERVICE_FILE}

        HAS_UPDATE_RC_D=1; which update-rc.d >/dev/null || HAS_UPDATE_RC_D=0
        HAS_CHKCONFIG=1; which chkconfig >/dev/null || HAS_CHKCONFIG=0

        if [ $HAS_UPDATE_RC_D = 1 ]; then
            echo ""
            echo "Enabling service ${PACKAGE_NAME_LOWER} using update-rc.d..."
            update-rc.d ${PACKAGE_NAME_LOWER} defaults
            echo "Service Enabled"
        elif [ $HAS_CHKCONFIG = 1 ]; then
            echo ""
            echo "Enabling service ${PACKAGE_NAME_LOWER} using chkconfig..."
            chkconfig --add ${PACKAGE_NAME_LOWER}
            echo "Service Enabled"
        else
            echo "Couldn't find a way to enable the init script"
            exit 1
        fi

        echo ""
        echo "Starting service ${PACKAGE_NAME_LOWER}..."
        $SERVICE_FILE stop >/dev/null 2>&1 || true
        $SERVICE_FILE start
        echo "Service Started"

        echo "Setting up $PACKAGE_NAME to run at boot using LSB scripts"
    fi

    CLEAN_EXIT=1

    echo ""
    hr
    echo ""
    echo "All Done! $PACKAGE_NAME should be running on your machine now".
    echo ""
    hr
    echo ""
}

function uninstall {
    #
    # Print banner/message
    #
    echo ""
    hr
    echo ""
    echo -e "${COL_BOLD}Welcome to the $PACKAGE_NAME uninstaller${COL_RESET}"
    echo ""
    echo "This removes $PACKAGE_NAME from your machine by doing the following:"
    echo ""
    echo " - deleting all files in /opt/$PACKAGE_NAME"
    echo " - removing $PACKAGE_NAME as a system service"
    echo ""
    echo "This uninstaller is only for systems that were installed using this installer script." 
    echo "If you performed a custom install by hand, this is not for you."
    echo ""
    echo "   http://kb.roonlabs.com/LinuxInstall"
    echo ""
    hr
    echo ""


    #
    # Check for linux (in case someone runs on OS X, Cygwin, BSD, etc)
    #
    case `uname -s` in 
        Linux)
            ;;
        *)
            echo -e "${COL_RED}${COL_BLOLD}Error:${COL_RESET} This package is intended for Linux platforms. It is not compatible with your machine. Exiting."
            ;;
    esac

    #
    # Check for proper architecture
    #
    case "$MACHINE_ARCH" in
        armv7*)
            if [ x$ARCH = xarmv7hf ]; then OK=1; fi
            ;;
        aarch64*)
            if [ x$ARCH = xarmv8 ]; then OK=1; fi
            if [ x$ARCH = xarmv7hf ]; then OK=1; fi
            ;;
        x86_64*)
            if [ x$ARCH = xx64 ]; then OK=1; fi 
            ;;
        i686*)
            if [ x$ARCH = xx86 ]; then OK=1; fi 
            ;;
    esac

    #
    # Check for root privileges
    #
    if [ x$UID != x0 ]; then
        echo ""
        echo -e "${COL_RED}${COL_BLOLD}Error:${COL_RESET} This installer must be run with root privileges. Exiting."
        echo ""
        exit 2
    fi

    if [ x$OK != x1 ]; then
        echo ""
        echo -e "${COL_RED}${COL_BLOLD}Error:${COL_RESET} This package is intended for $ARCH platforms. It is not compatible with your machine. Exiting."
        echo ""
        exit 3
    fi

    function confirm_n {
        while true; do
            read -p "$1 [y/N] " yn
            case $yn in
                [Yy]* ) 
                    break 
                    ;;
                "") 
                    CLEAN_EXIT=1
                    echo ""
                    echo "Ok. Exiting."
                    echo ""
                    exit 4 
                    ;;
                [Nn]* ) 
                    CLEAN_EXIT=1
                    echo ""
                    echo "Ok. Exiting."
                    echo ""
                    exit 4 
                    ;;
                * ) echo "Please answer yes or no.";;
            esac
        done
    }

    function confirm {
        while true; do
            read -p "$1 [Y/n] " yn
            case $yn in
                "") 
                    break 
                    ;;
                [Yy]* ) 
                    break 
                    ;;
                [Nn]* ) 
                    CLEAN_EXIT=1
                    echo ""
                    echo "Ok. Exiting."
                    echo ""
                    exit 4 
                    ;;
                * ) echo "Please answer yes or no.";;
            esac
        done
    }

    #
    # Double-check with user that this is what they want
    #
    confirm_n "Are you sure that you want to uninstall $PACKAGE_NAME on this machine?"

    # set up systemd 
    HAS_SYSTEMCTL=1; which systemctl >/dev/null || HAS_SYSTEMCTL=0

    if [ $HAS_SYSTEMCTL = 1 -a -d /etc/systemd/system ]; then
        SERVICE_FILE=/etc/systemd/system/${PACKAGE_NAME_LOWER}.service

        echo ""
        echo "Stopping service $PACKAGE_NAME_LOWER"
        systemctl stop $PACKAGE_NAME_LOWER || true
        echo "Service Stopped"

        echo ""
        echo "Disabling service ${PACKAGE_NAME_LOWER}..."
        systemctl disable ${PACKAGE_NAME_LOWER}.service || true
        echo "Service Disabled"

        echo ""
        echo "Removing service file $SERVICE_FILE"
        rm -f $SERVICE_FILE

    else
        SERVICE_FILE=/etc/init.d/${PACKAGE_NAME_LOWER}

        echo ""
        echo "Stopping service ${PACKAGE_NAME_LOWER}..."
        $SERVICE_FILE stop >/dev/null 2>&1 || true
        echo "Service Stopped"

        echo ""
        echo "Removing service ${PACKAGE_NAME_LOWER}..."
        if [ $HAS_UPDATE_RC_D = 1 ]; then
            echo ""
            echo "Disabling service ${PACKAGE_NAME_LOWER} using update-rc.d..."
            update-rc.d ${PACKAGE_NAME_LOWER} remove
            echo "Service Disabled"
        elif [ $HAS_CHKCONFIG = 1 ]; then
            echo ""
            echo "Disabling service ${PACKAGE_NAME_LOWER} using chkconfig..."
            chkconfig --del ${PACKAGE_NAME_LOWER}
            echo "Service Disabled"
        else
            echo "Couldn't find a way to disable the init script"
            exit 0
        fi
        echo "Service Removed"

        echo ""
        echo "Removing service file $SERVICE_FILE"
        rm -f $SERVICE_FILE
    fi

    echo ""
    echo -n "Deleting all files in /opt/$PACKAGE_NAME"
    rm -Rf /opt/$PACKAGE_NAME

    CLEAN_EXIT=1

    echo ""
    hr
    echo ""
    echo "All Done! $PACKAGE_NAME should be uninstalled."
    echo ""
    hr
    echo ""
}


if [ x$1 == xuninstall ]; then
    uninstall
else 
    install
fi

· Something else

How can we help?

· None of the above

Other options

· Other

Describe the issue

Unable to install RoonServer on Linux Fedora 40

Describe your network setup

Router to PC connected via Ethernet

Please follow the installation guide and tell us exactly where you get stuck.

Please post your console output (paraphrasing from memory is seldom helpful).
Use the forum search function to see if the solution for your issue has already been posted in the past: Search results for 'fedora order:latest_topic' - Roon Labs Community

PS: roonserver-installer-linuxx64.shroonserver.installer-linuxx64.sh
Pleas make sure you don’t have a typo in your command.

I did follow the tutorial you linked but I’ll do it again right now and report everything here.
Following the The Easy Installer (Recommended) section.
I open terminal and enter:

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

This gives me this output:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   178  100   178    0     0   2533      0 --:--:-- --:--:-- --:--:--  2507

When I look at /home/mathieu the roonserver-installer-linuxx64.sh file is there, double clicking on it opens the text editor and shows this:

<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.22.0 (Ubuntu)</center>
</body>
</html>

This looks weird to me but this is what the tutorial says so I’ll continue.

I then enter this in terminal:

 chmod +x roonserver-installer-linuxx64.sh 

This gives me no output message but if I go to /home/mathieu and look at the roonserver-installer-linuxx64.sh file under properties, it is set as “Executable as program”, so unless I’m mistaking I believe the chmod +x command worked.

Then I enter sudo ./roonserver-installer-linuxx64.sh
I get asked for my password, which I enter, and I get this output:

[sudo] password for mathieu: 
./roonserver-installer-linuxx64.sh: line 1: html: No such file or directory
./roonserver-installer-linuxx64.sh: line 2: syntax error near unexpected token `<'
'/roonserver-installer-linuxx64.sh: line 2: `<head><title>301 Moved Permanently</title></head>
mathieu@fedora:~$ 

So that’s where I’m at, same issue ever time.
In the download section of the tutorial, they give this link: http://download.roonlabs.com/builds/RoonBridge_linuxx86.tar.bz2
I tried replacing the content of the roonserver-installer-linuxx64.sh file with the content from the above link but this resulted in the same problem.

I copy pasted everything so there is no paraphrasing.

Thanks, that’s what I ended doing and it installed, however after a reboot I don’t see it running in my processes. I’ll have to investigate further.
It’s too bad they don’t fix the tutorial, it doesn’t make it easy for newbies…

Just read through the thread I linked above, your further investigations are likely already covered therein.

Yes I will as soon as I get more time, since I’m new to linux this is a lot to integrate but I’ll hopefully learn new things in the process.

Then why Fedora and not for example Ubuntu? Why the Workstation flavor and not Server instead? Do you plan on also running a Roon UI on that machine additionally (you realized that Roon Server doesn’t have an UI)? There are some other Fedora users that regularly share their solutions here on the forum. It is definitively worth searching the forum for those posts before you create a new thread or ask the already answered question here in this thread again.

Because this is not a machine dedicated solely to Roon.
Anyway, I got it to work but for your information this forum is apparently the default Roon Support, I simply submited a ticked for help because the tutorial did not work and it created this topic automatically. Thanks for the help but don’t blame users for using the Support Ticket system.

And you got help.

Sorry if you read it that way. One of the big benefits of a public support forum is that people can search for and find solutions that are already available without the need of first creating a ticket, waiting on response, clarify issue and so on … often with days of wait-time between responses. Roon Labs is not different in this regard. It is a small company with an even smaller support team.
I felt the hint given about the existing threads of other Fedora users that already cover the issues you, as new and inexperienced user, are likely to run into was worth the time-saving. Posting new questions (if needed) in already existing and related threads may also connect you quickly with other user already intimate with the matter at hand.

I asked the questions in my previous post out of curiosity. As a user new to Linux why go Fedora and not something potentially simpler? Maybe it’s not too late to switch distribution but no one can advise if you don’t want to share information about your situation and the reasoning behind your decision(s). I can also not link other threads with potentially useful hints or step by step instructions here if you don’t want to share your plans for Roon on that machine (need for UI or not).

1 Like

No hard feelings.

I chose Fedora initially because there was an open source project that I wanted to test, Ansel Photo, which is a photography software forked from Darktable, and the developer mainly tested it with Fedora, I looked it up and it seemed like this is a well maintained/appreciated distro so I went with it. I quite like the interface so I’ll try to stick with it for now.

I’m not sure if all the following steps were required but this is what I did and I got Roon server to work, currently listening to music on my Bluesound pulse speaker, controlled with the remote on my cheap amazon fire tablet, the Roon remote is extremely more responsive in that setup compared to when I have the server on windows 11 for some reason.

1 - Install dependencies:

-RPM Fusion Free/Non-Free. (From the fedora app Software)

-ffmpeg How to install FFmpeg on Fedora Linux - Knowledgebase - Resilient Cyber Solutions, LLC

-Reboot.

2 - Go to /etc/selinux/ and edit config under sudo. (Use Nano in terminal: $ Sudo nano roonserver-installer-linuxx64.sh)
Change SELINUX=enforcing to SELINUX=permissive and save (ctrl-x)

Go back to home/(user) (terminal: cd) folder and run scripts:

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

4 - Edit roonserver-installer-linuxx64.sh and go to line 191. Change wget --show-progress -O to wget --force-progress -O and save file.

Note: Fedora 40 uses wget2 which necessitates the --force-progress

5 - Run script:
$ sudo ./roonserver-installer-linuxx64.sh

If it is successful, Roon Server should be running. You can verify by entering:
$ sudo systemctl status roonserver.service

6 - It did not work yet so I did
$ sudo restorecon -rv /opt/RoonServer
Original topic: Install Roon Bridge on Fedora Linux 37 (Workstation Edition) on x64

Tested again succesfully with
$ sudo systemctl status roonserver.service

Just my thoughts.

I, as a home user, would hardly let a single application decide what distribution I use (in the sense that there are hardly any pressing needs that I can think of that would warrant that). This (Ansel) is alpha software delivered as distribution-agnostic executable (appimage, also available for other distributions too) and for Windows. So to me this doesn’t look like the application is strongly tied to Fedora.
If I needed a guideline for deciding, I would rather look at my primary use case (audio workstation, video Workstation, game PC, application development, security workstation, …) and see if there is a well reputed distribution tailored for this use case.

Other distributions are also well maintained and appreciated. I personally appreciated Red Hat too (it is what i went with after Debian 1.0 and some regretted tries with Suse) but frankly it was all down hill IMHO with the introduction of Fedora (never the stability and/or reliability of Red Hat). I stayed with Red Hat clones on the server side for a while longer but that’s over now too (soon tm I swear). Disabling selinux security extension and possibly the firewall too (if she is active at all on the workstation flavor) I don’t see why stay with Fedora and not swap for Ubuntu. I found the available help resources for Ubuntu vast and plenty. IMHO better suited for Linux newbies than Red Hat / Fedora. But truth be told, I never used Fedora since the very beginning and I’m no Linux newbie no more – so better alternatives may exist nowadays and/or I may be totally wrong about Fedora today.

If by interface you mean the desktop UI, those are “just” software and seldom exclusive to a given distribution. IIRC Ubuntu and Fedora both use Gnome desktop by default. I know for Ubuntu that there are flavors with other desktops available.

I had to start somewhere so I chose Fedora to get a taste of linux but I’m open minded about other distro.
I appreciate the Gnome desktop, it has a mac os look to it which I like.
Fedora, for now, runs super smooth on my PC, much smoother than win11.
I’m switching from Lightroom to Darktable, Ansel, and Digikam, they work pretty well on Fedora. There were differences between the flatpak and appimages on Darktable and Digikam so I chose the ones that seemed to work better.
I have an AMD RX6600 GPU, OpenCL seems to work with all 3 photo software. I use a calibrated monitor, not sure yet if color management is supported.
I also do Audio, I’m a sound engineer. I installed Reaper for fun but since I own a lot of expensive VST plugins I might keep my win11 install for audio work.
I obviously also have Roon which I use everyday for entertainment.

I like to tinker with geeky stuff but I’m no IT tech so a bit of playing around with software installation and command lines is fun, but too much of it becomes a chore.

Based on my usage, what would you recommend?

Flatpak and appimage are universal available on modern Linux distributions as far as I’m aware. There might be this distribution or that distribution that may have a slight advantage because she supports one or the other format out-of-the-box but that pretty much is it. Containers may make installation and deletion of software easy and also allows the use of the same container on various different machines and Linux distributions, but they also come at a cost (potentially restricted access rights, some of the system files are doubled in containers, need more space on disk and memory) that may get higher if you make extensive use of containers. It seems you got Darktable, Ansel, and Digikam all as containers. Maybe there are grapical workstation distributions that come with some of those programs already preinstalled and maybe some more (like color management software). Idk as I never looked into this specifically but maybe someone else knows.
For flatpak I use Flatseal as an easy to use graphical management tool for rights of flatpak programs. I also use the DisplayCAL flatpak for color management (not extensively, still more sort of an experiment for me).

Maybe you want to look on a distribution for creative people? Such distributions often come with special kernels and system optimizations to reduce processing latency.

https://ubuntustudio.org (Notice: Uses KDE a standard desktop environment )
Use Ubuntu Studio Installer – Ubuntu Studio if you want Gnome.

Also have a look for alternatives: https://alternativeto.net/software/ubuntustudio and https://www.reddit.com/r/linuxaudio/comments/15mag7l/distro_for_audio_other_than_ubuntustudio

A quick google search reveals that many people use VST plugins on Linux but I’m not the person to judge this matter (if the support is good enough and/or how well your expensive plugins work on Linux, however Reaper seems to be a cross-platform application also available for Linux).

Some distributions offer a live image so you can test/use without the need of installing anything on your PC first. The generic Ubuntu install image for example allows you to try (live image) as well as install directly if you wish.

As it seems to me that you’re a creative person I would probably look into a low latency optimized distribution like Ubuntu Studio as base system (but read also Linux: is the lowlatency kernel still necessary? - Computer Setup and System Configuration Forum - KVR Audio and try to find out what you need).

Hi @Mathieu_Dulong,

Thanks for your patience - we’re in the process of overhauling our Linux guides. It’s my understanding from reading through this thread that you’ve now installed RoonServer successfully using the alternative command in the shared thread?

Please let us know if we can help further.

Yes I was able to install it using troubleshooting found on 2-3 other thread, this could’ve been avoided with an up-to-date tutorial on the official website.
Updating the tutorial will avoid many headaches for new users that’s for sure!