# Roon Extension Manager v1.0 beta3

**URL:** <https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438>\
**Category:** Roon API\
**Created:** [March 20, 2021, 10:44am UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438 "2021-03-20T10:44:23Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 20, 2021, 10:44am UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/1 "2021-03-20T10:44:23Z")

</div>

In another thread I announced my plans for the Extension Manager:

> [@Important information for Extension Manager users exclamation](https://community.roonlabs.com/t/important-information-for-extension-manager-users/151313):
>
> It is getting close to 4 years that I released the first version of the Extension Manager. Today I want to share my plans with you on how to move forward from here. As the full story got a little long for a forum post I ask you to read the Wiki page I created about “The Road to Version 1.0”. [Back in June 2017 I released the first version of the Roon Extension Manager, at that time all that could be installed with it was my Alarm Clock extension. Shortly after, extensions from other developers …](https://github.com/TheAppgineer/roon-extension-manager/wiki/The-Road-to-Version-1.0)

  

This thread is all about the beta version that is now available. The purpose is to get user feedback and allow extension developers to convert their extensions to Docker images and get them included again.

## Prerequisites

Version 1.0 requires Docker for Linux. You can run it on a Linux PC, on a Raspberry Pi running e.g. DietPi, in a Linux VM or on a NAS that supports Docker. In general, if you already run version 0.x with the Docker based extensions available you should be good to go.

## Installation

There are two main methods available for setting up version 1.0, via the setup script or by manually creating a Docker container.

_Note: Version 0.x and 1.x cannot run side by side on the same system. If you are running v0.x via the Linux service then it will be disabled by the v1.x setup script. It is possible to switch between the two versions by enabling/disabling services._

### Running the setup script

The easiest installation method is by using the setup script.

- Download the setup script  
`wget https://github.com/TheAppgineer/roon-extension-manager/raw/v1.x/rem-setup.sh`

- Set the execute permission for the setup script  
`chmod +x rem-setup.sh`

- Run the setup script  
`sudo ./rem-setup.sh`

 ![rem-setup](https://roon-community-uploads.s3.amazonaws.com/original/3X/d/6/d6d7e628e50c22b9869e887c0e58b16148275a40.png)  
  

### Creating a Docker container

Manually creating the Docker container can be useful if you are already running other containers or if you want to use the interface provided by e.g. a NAS.

In such a setup also the updates of the Extension Manager have to be done manually as the `standalone` image doesn’t support the update action for the manager itself.

#### Using docker run

The `docker run` command can be used to create a container from the image, the full command to be use is:

```
docker run -d --network host --restart unless-stopped --name roon-extension-manager --group-add <docker-gid> -v rem_data:/home/node/.rem/ -v /var/run/docker.sock:/var/run/docker.sock -e "TZ=<timezone>" --log-driver journald theappgineer/roon-extension-manager:v1.x-standalone

```

Replace `<docker-gid>` with the output of this command:

```
stat -c '%g' /var/run/docker.sock

```

And `<timezone>` with the local timezone, according to the TZ column in [this list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).

#### Using docker-compose

It is also possible to use the [Docker compose file](https://github.com/TheAppgineer/roon-extension-manager/raw/v1.x/rem.yml).

## Change log

As version 1.0 only has to deal with Docker based extensions it focusses on improving the user experience during extension installation and use. The changes made compared to the current 0.11.9 version are:

- Extension specific installation settings
  - Installation settings are better integrated in install flow
  - Settings of pending installations can be changed
  - Environment variables are taken over from Extension Manager if existing

- Extension installation
  - Status information about downloading and extracting layers gets reported

- Extension updates
  - Already up-to-date extensions get detected and reported during update
  - Status information about downloading and extracting layers gets reported

- Repository
  - Extensions that are not available for the host architecture are hidden

- Logging
  - Extension Manager link always provides latest logs of installed extensions
  - Extension logs include timestamp for each line

- Setup script
  - System gets prepared for auto-rip feature of CD Ripper extension
  - Timezone of host system gets detected and taken over by Extension Manager

## Extension Snapshots

Extension Snapshots bundles those extensions from the 0.x Extension Repository that are not yet available as a Docker image. It is meant to smoothen the transition to 1.0 and to provide a means to run extensions that are no longer maintained. It is installed from the System category in the Extension Manager. You can start the individual extensions via the Extension Snapshots Settings.

 ![image](https://roon-community-uploads.s3.amazonaws.com/original/3X/f/6/f60a904198de4179bc99976b2e69dce389dd70f2.png)  
  

## The Roon Extension Generator

To make the transition quick and easy for extension developers a tool has been created that can adapt the extension code, create and publish the Docker image on Docker Hub and integrate the image in the Extension Manager for testing purposes. The tool is called the [Roon Extension Generator](https://github.com/TheAppgineer/roon-extension-generator) and its use is described in the README file.

---

<div class="post-metadata">

**Author:** ![John\_V](https://community.roonlabs.com/letter_avatar/john_v/32/5_5575768a8748004e209b776fc1b2916d.png) [@John\_V](https://community.roonlabs.com/u/John_V)\
**Post date:** [March 22, 2021, 12:17am UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/2 "2021-03-22T00:17:59Z")

</div>

If you still see this, Jan, I made it almost through Extension 1.0 setup when it hung, “waiting for volume creation”.

You’re dealing with a NOOB. Any help appreciated

update: earlier msg said cannot create ROOT dir; denied.

update2: a ROOT directory is already created; your script tries to make a new ROOT directory but it can’t; script stalls (I think)

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 22, 2021, 4:48pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/3 "2021-03-22T16:48:50Z")

</div>

Hi John,

Can you provide the full output of the setup script? It is unclear to me at what point in the setup the error occurs.

Are you running the script as root, or as a normal user with sudo?

---

<div class="post-metadata">

**Author:** ![John\_V](https://community.roonlabs.com/letter_avatar/john_v/32/5_5575768a8748004e209b776fc1b2916d.png) [@John\_V](https://community.roonlabs.com/u/John_V)\
**Post date:** [March 22, 2021, 5:49pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/4 "2021-03-22T17:49:33Z")

</div>

I will see if I can find the error text. I used your command text which I believe was sudo.

Back soonest. Here it is: I started with your three command sets, the last one being sudo…

Roon Extension Manager setup script - version 1.0.0-beta1

Checking for root privileges… [OK]  
Checking for Docker socket… [OK]  
mkdir: cannot create directory ‘/root’: Permission denied  
Downloading shell script… [OK]  
Starting service… [OK]  
Waiting for volume creation… [stalls out here]

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 22, 2021, 6:47pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/5 "2021-03-22T18:47:46Z")

</div>

> [@John\_V](#):
>
> I used your command text which I believe was sudo

As it looks like you are logged in as root, is there any difference if you run the last command without sudo? `./rem-setup.sh`

BTW on what device and OS are you trying this?

---

<div class="post-metadata">

**Author:** ![John\_V](https://community.roonlabs.com/letter_avatar/john_v/32/5_5575768a8748004e209b776fc1b2916d.png) [@John\_V](https://community.roonlabs.com/u/John_V)\
**Post date:** [March 22, 2021, 6:49pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/6 "2021-03-22T18:49:13Z")

</div>

rpi 3b with rasbian

result w/o sudo: zsh: no such file or directory: ./rem-setup.sh

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 22, 2021, 6:57pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/7 "2021-03-22T18:57:22Z")

</div>

I haven’t tried Raspbian yet, can you provide a link to the image that you use?

---

<div class="post-metadata">

**Author:** ![John\_V](https://community.roonlabs.com/letter_avatar/john_v/32/5_5575768a8748004e209b776fc1b2916d.png) [@John\_V](https://community.roonlabs.com/u/John_V)\
**Post date:** [March 22, 2021, 6:58pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/8 "2021-03-22T18:58:59Z")

</div>

> **[Raspberry Pi OS – Raspberry Pi](https://www.raspberrypi.org/software/)**
>
> The Raspberry Pi is a tiny and affordable computer that you can use to learn programming through fun, practical projects. Join the global Raspberry Pi community.

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 22, 2021, 9:08pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/9 "2021-03-22T21:08:08Z")

</div>

Ok @John_V, I should have a fix for you.

I installed Raspberry Pi OS and could reproduce the problem. The default username is `pi` so `sudo` is indeed required.

Problem was in detecting the home directory of the user when executing with `sudo`, the setup script is updated to fix his. The steps to take to recover:

```auto
rm rem-setup.sh
wget https://github.com/TheAppgineer/roon-extension-manager/raw/v1.x/rem-setup.sh
chmod +x rem-setup.sh
sudo ./rem-setup.sh --uninstall
sudo ./rem-setup.sh

```

The extra uninstall step is to cleanup some files created during the failed install.

---

<div class="post-metadata">

**Author:** ![John\_V](https://community.roonlabs.com/letter_avatar/john_v/32/5_5575768a8748004e209b776fc1b2916d.png) [@John\_V](https://community.roonlabs.com/u/John_V)\
**Post date:** [March 22, 2021, 10:18pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/10 "2021-03-22T22:18:07Z")

</div>

Thanks much. Will report back.

Update 1: Install changes worked fine. Through Roon, installed Deep Harmony and enabled, but so far it hasn’t detected my hub. Will it work now, or is there further development work?

---

<div class="post-metadata">

**Author:** ![florib](https://community.roonlabs.com/user_avatar/community.roonlabs.com/florib/32/104803_2.png) [@florib](https://community.roonlabs.com/u/florib)\
**Post date:** [March 22, 2021, 10:28pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/11 "2021-03-22T22:28:58Z")

</div>

Everything went well.

![REM-Beta](https://roon-community-uploads.s3.amazonaws.com/original/3X/4/c/4c5ff22b8cabb4e7ebb3a596bc523ca1d25e3fa6.png)

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 23, 2021, 5:49pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/12 "2021-03-23T17:49:59Z")

</div>

> [@John\_V](#):
>
> installed Deep Harmony and enabled, but so far it hasn’t detected my hub

That is strange. Although the Extension Manager changed, the Deep Harmony image that gets installed is still the same. Have you updated Deep Harmony via its own update mechanism to the latest version?

---

<div class="post-metadata">

**Author:** ![John\_V](https://community.roonlabs.com/letter_avatar/john_v/32/5_5575768a8748004e209b776fc1b2916d.png) [@John\_V](https://community.roonlabs.com/u/John_V)\
**Post date:** [March 24, 2021, 1:27am UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/13 "2021-03-24T01:27:41Z")

</div>

All is well now. Restarting solves about 90% of problems.

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 25, 2021, 7:07pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/14 "2021-03-25T19:07:50Z")

</div>

I updated the first post with a description of Extension Snapshots. It allows you to move over to the 1.0 version of the Extension Manager while still depending on extensions that have not yet moved over to Docker.

With this addition I could move over to 1.0 on my NUC that runs my Roon Core and my “production” extensions. In the screenshot below you see the Extension Manager that manages the Alarm Clock, Entrypoints Gateway and the Extension Snapshots, but it is Extension Snapshots that manages the Web Controller.

 ![image](https://roon-community-uploads.s3.amazonaws.com/original/3X/e/e/eee17b30d344a12f37b9aba7a6596d280ec7dd58.png)

---

<div class="post-metadata">

**Author:** ![florib](https://community.roonlabs.com/user_avatar/community.roonlabs.com/florib/32/104803_2.png) [@florib](https://community.roonlabs.com/u/florib)\
**Post date:** [March 25, 2021, 7:27pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/15 "2021-03-25T19:27:40Z")

</div>

@Jan_Koudijs  
I have already installed Extension Snapshots yesterday and also Web Controller. Everything is running fine. Thanks for your great work.

---

<div class="post-metadata">

**Author:** ![anon44636269](https://community.roonlabs.com/letter_avatar/anon44636269/32/5_5575768a8748004e209b776fc1b2916d.png) [@anon44636269](https://community.roonlabs.com/u/anon44636269)\
**Post date:** [March 25, 2021, 8:34pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/16 "2021-03-25T20:34:27Z")

</div>

I run extension manager on my nas via a docker. Anway to do the same for the 1.0 beta @Jan_Koudijs

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 25, 2021, 10:14pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/17 "2021-03-25T22:14:00Z")

</div>

Hi @CrystalGipsy,

I updated the first post with a description on how to manually create the Docker container. There is now a dedicated image available for this use-case, tagged `v1.x-standalone`.

---

<div class="post-metadata">

**Author:** ![Klaus\_Engel](https://community.roonlabs.com/letter_avatar/klaus_engel/32/5_5575768a8748004e209b776fc1b2916d.png) [@Klaus\_Engel](https://community.roonlabs.com/u/Klaus_Engel)\
**Post date:** [March 29, 2021, 11:29am UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/18 "2021-03-29T11:29:07Z")

</div>

build fails with the following output (RPi, DietPi):

(6/6) Installing git (2.24.4-r0)  
Executing busybox-1.31.1-r9.trigger  
Executing ca-certificates-20191127-r2.trigger  
OK: 16 MiB in 22 packages  
npm WARN deprecated node-uuid@1.4.8: Use uuid module instead

> node-hid@0.7.9 install /home/node/node\_modules/node-hid  
> prebuild-install || node-gyp rebuild

prebuild-install WARN install No prebuilt binaries found (target=12.16.3 runtime=node arch=arm libc=musl platform=linux)  
gyp ERR! find Python  
gyp ERR! find Python Python is not set from command line or npm configuration  
gyp ERR! find Python Python is not set from environment variable PYTHON  
gyp ERR! find Python checking if “python” can be used  
gyp ERR! find Python - “python” is not in PATH or produced an error  
gyp ERR! find Python checking if “python2” can be used  
gyp ERR! find Python - “python2” is not in PATH or produced an error  
gyp ERR! find Python checking if “python3” can be used  
gyp ERR! find Python - “python3” is not in PATH or produced an error  
gyp ERR! find Python  
gyp ERR! find Python \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
gyp ERR! find Python You need to install the latest version of Python.  
gyp ERR! find Python Node-gyp should be able to find and use Python. If not,  
gyp ERR! find Python you can try one of the following options:  
gyp ERR! find Python - Use the switch --python=“/path/to/pythonexecutable”  
gyp ERR! find Python (accepted by both node-gyp and npm)  
gyp ERR! find Python - Set the environment variable PYTHON  
gyp ERR! find Python - Set the npm configuration variable python:  
gyp ERR! find Python npm config set python “/path/to/pythonexecutable”  
gyp ERR! find Python For more information consult the documentation at:  
gyp ERR! find Python [GitHub - nodejs/node-gyp: Node.js native addon build tool](https://github.com/nodejs/node-gyp#installation)  
gyp ERR! find Python \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
gyp ERR! find Python  
gyp ERR! configure error  
gyp ERR! stack Error: Could not find any Python installation to use  
gyp ERR! stack at PythonFinder.fail (/usr/local/lib/node\_modules/npm/node\_modules/node-gyp/lib/find-python.js:307:47)  
gyp ERR! stack at PythonFinder.runChecks (/usr/local/lib/node\_modules/npm/node\_modules/node-gyp/lib/find-python.js:136:21)  
gyp ERR! stack at PythonFinder. (/usr/local/lib/node\_modules/npm/node\_modules/node-gyp/lib/find-python.js:179:16)  
gyp ERR! stack at PythonFinder.execFileCallback (/usr/local/lib/node\_modules/npm/node\_modules/node-gyp/lib/find-python.js:271:16)  
gyp ERR! stack at exithandler (child\_process.js:310:5)  
gyp ERR! stack at ChildProcess.errorhandler (child\_process.js:322:5)  
gyp ERR! stack at ChildProcess.emit (events.js:310:20)  
gyp ERR! stack at Process.ChildProcess.\_handle.onexit (internal/child\_process.js:273:12)  
gyp ERR! stack at onErrorNT (internal/child\_process.js:469:16)  
gyp ERR! stack at processTicksAndRejections (internal/process/task\_queues.js:84:21)  
gyp ERR! System Linux 5.10.17-v7l+  
gyp ERR! command “/usr/local/bin/node” “/usr/local/lib/node\_modules/npm/node\_modules/node-gyp/bin/node-gyp.js” “rebuild”  
gyp ERR! cwd /home/node/node\_modules/node-hid  
gyp ERR! node -v v12.16.3  
gyp ERR! node-gyp -v v5.1.0  
gyp ERR! not ok  
npm WARN roon-spacenav@1.0.0 No repository field.

npm ERR! code ELIFECYCLE  
npm ERR! errno 1  
npm ERR! node-hid@0.7.9 install: `prebuild-install || node-gyp rebuild`  
npm ERR! Exit status 1  
npm ERR!  
npm ERR! Failed at the node-hid@0.7.9 install script.  
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:  
npm ERR! /root/.npm/\_logs/2021-03-29T11\_20\_50\_457Z-debug.log  
The command ‘/bin/sh -c apk add --no-cache git && npm install && apk del git’ returned a non-zero code: 1

---

<div class="post-metadata">

**Author:** ![Jan\_Koudijs](https://community.roonlabs.com/user_avatar/community.roonlabs.com/jan_koudijs/32/48346_2.png) [@Jan\_Koudijs](https://community.roonlabs.com/u/Jan_Koudijs)\
**Post date:** [March 29, 2021, 6:09pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/19 "2021-03-29T18:09:28Z")

</div>

I assume that you try to build a Docker image for your extension from the files generated by the Extension Generator. As your extension uses USB it requires some extra packages that have to be added manually to the Dockerfile (be aware that the generated Dockerfile contains the bare minimum and has to be adjusted by the developer).

For the Powermate extension, that also uses USB, I used the following `RUN` command:

```nohighlight
RUN apk add --no-cache g++ git libusb-dev linux-headers eudev-dev make python && \
    npm install && \
    apk del g++ git make python

```

  

You also have to make an addition to the `.reg/etc/repository.json` file that contains your Extension Repository entry. This device option allows the user to specify the USB device during installation:

```json
            ...
            ],
            "options": {
                "devices": [
                    ":USB Device Path"
                ]
            }

```

You insert this in the file after the `binds` array.

If you run into other issues, just let me know.

---

<div class="post-metadata">

**Author:** ![Klaus\_Engel](https://community.roonlabs.com/letter_avatar/klaus_engel/32/5_5575768a8748004e209b776fc1b2916d.png) [@Klaus\_Engel](https://community.roonlabs.com/u/Klaus_Engel)\
**Post date:** [March 29, 2021, 6:56pm UTC](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438/20 "2021-03-29T18:56:48Z")

</div>

> [@Jan\_Koudijs](#):
>
> `eudev-dev`

Thank you, Jan! Yes, i build an extension very similar as roon-powermate (for 3Dconnexion SpaceNavigator) with HID USB communication. It builds fine using “npm install” and runs perfectly. But when i use the build script i get those weird errors. So i don’t think any packages are missing for building the docker image. Thanks for the tip with the RUN scrupt and additional entry, but before i can take care of those things, i first need to find out why the build script fails with those Python errors.

[Next page](https://community.roonlabs.com/t/roon-extension-manager-v1-0-beta3/151438.md?page=2)
