Trying to download early access to my i9 Sonic Transporter

Trying to find a basic link to download. The easy install just shows me a bunch of code.

Help! The current production version keeps crashing and ARC is unusable. So I simply want to try Early Access to get it working.

Thanks.

Not sure that it’s worth switching to EA now for the ARC issue because the same improvement was released yesterday in the production updates:

The update will reach everyone soon enough:

If you do want to switch to EA, I believe there is a switch in the Sonic Transporter settings. If in doubt, ask the Smallgreencomputer guys:

2 Likes

Thanks! Yeah, I’ll just wait as I have been for the last day for the update. I definitely see a correlation between ARC and the Roon Core. What’s surprising is the latest update doesn’t include an ARC app update. Oh well, I’m just gonna wait impatiently. haha. I’ll report back after it’s pushed to me…

Because the performance related issue were in the core, not ARC itself.

2 Likes

Right. So ARC will run smoother with the Core fix? Hopefully. And why the slow rollout?

2 posts were merged into an existing topic: Roon ARC Causing RoonServer/Remote Performance Issues [Investigating]

There are a number of “edge case” that are likely to require input from Roon’s support.

A slow rollout will reduce the number of concurrent support requests and hence improve support’s reaction time.

This approach was used last time, which enabled Roon to halt the roll until they had identified the issues.

So what about the people who already have major cases with the current production release???

They have to be patient… or switch to EA.

Switching to EA is not without risk … that’s a call for each individual to make.

Well, I tried EA but can’t get a file to download for my i9 Sonic Transporter.

This is what happens when I click “Easy installer” for linux. It’s anything but easy…

#!/bin/bash

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

# these are replaced by build.sh
PACKAGE_NAME=RoonServer
ARCH=x64
PACKAGE_URL=https://download.roonlabs.net/updates/earlyaccess/RoonServer_linuxx64.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 ""
    set +e
    which wget >/dev/null; WHICH_WGET=$?
    set -e
    if [ $WHICH_WGET = 0 ]; then
        wget --show-progress -O "$TMPDIR/$PACKAGE_FILE" "$PACKAGE_URL"
    else
        curl -L -# -o "$TMPDIR/$PACKAGE_FILE" "$PACKAGE_URL"
    fi
        
    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

I just realized it’s very easy to load EA on the Sonic Transporter. I loaded and then loaded the test flight ARC app, and the ARC app still won’t work. Say’s online and ready but can’t click anything for it to work…

What is happening?? I thought everything was working with EA? I’m back to where I started after loading the ARC app from test flight. I can confirm running build 1351 early access core on Sonic Transporter. What gives??

It finally loaded okay. I’m going to test for a while now…

Nobody said that. There was a frequent issue with ARC where the Roon Server/Core stopped working. This affected lots of people. There is a fix for this in the current EA which was now also deployed to production. So switching to EA now does not do much for that because the same fix is available in both. The newer EA update has fixes beyond that but they are for macOS Roon Server stability, so not likely to help with ARC.

If you have a different issue, there may or may not be a fix on the way.

Oh OK. Good luck :slight_smile:

1 Like

Thanks for the concern. Yes, it’s all working fine now using EA. I just played a full album in ARC with no issues. I hadn’t been able to use ARC for the last month or so. I resorted to JRemote (JRiver) which is okay, but ARC is a game changer. I’m fine using EA as I’ve used it before. And the Sonic Transporter software has an EA switch for downloading so it was super simple once I found that. I’ll report any findings in the EA thread.

Great :slight_smile:
:crossed_fingers: