umbrel-apps icon indicating copy to clipboard operation
umbrel-apps copied to clipboard

Add gladys assistant

Open cicoub13 opened this issue 10 months ago • 5 comments

App Submission

Gladys Assistant

https://gladysassistant.com/

https://github.com/gladysassistant/gladys

256x256 SVG icon

https://gladysassistant.com/fr/img/logo.svg

Gallery images

https://github.com/getumbrel/umbrel-apps/files/14981508/umbrel_gladys_screenshot_design.zip

I have tested my app on:

  • [ ] umbrelOS on a Raspberry Pi
  • [ ] umbrelOS on an Umbrel Home
  • [X] umbrelOS on Linux VM - Umbrel OS 1.0.4

cicoub13 avatar Apr 12 '24 09:04 cicoub13

@cicoub13 Here are 3 screenshots (1440/900px as you asked)

umbrel_gladys_screenshot_design.zip

I've put all screenshots in English as Umbrel community is mainly international

Pierre-Gilles avatar Apr 15 '24 16:04 Pierre-Gilles

Thanks for submitting Gladys Assistant @cicoub13! Stoked to try this out. I'll be able to review late this week. Thanks for your patience.

nmfretz avatar Apr 23 '24 10:04 nmfretz

I wanted to test in real device (RPI4 with SSD + Umbrel OS 1.1).

I'm facing an issue where dockers are not able to contact localhost ping localhost from Gladys container returns ping: bad address 'localhost'

cicoub13 avatar Apr 24 '24 09:04 cicoub13

I have tried to ttest the app on my Umbrel 0.5.4 device and I get this error during installation:

The Compose file '/home/umbrel/umbrel/app-data/gladys-assistant/docker-compose.yml' is invalid because:
Unsupported config option for services.web: 'cgroup'

I guess it is an option that was added in docker-compose v2, which is only present in Umbrel 1.0.

highghlow avatar Apr 24 '24 15:04 highghlow

I guess it is an option that was added in docker-compose v2, which is only present in Umbrel 1.0.

I've targeted only Umbrel OS 1.X (as it's the default documentation). Do I need to make it compatible with previous versions ?

cicoub13 avatar Apr 25 '24 07:04 cicoub13

I've targeted only Umbrel OS 1.X (as it's the default documentation). Do I need to make it compatible with previous versions ?

Since Umbrel v1 is now available on custom hardware installs, no.

highghlow avatar May 15 '24 08:05 highghlow

Taking a look at this now @cicoub13. And thanks for diving into this @highghlow, much appreciated.

nmfretz avatar May 20 '24 06:05 nmfretz

@cicoub13 @Pierre-Gilles, thanks very much for outlining the requirement for binding the docker daemon socket:

For the Docker daemon binding, it's needed from our side to create, restart other containers when a user adds an integration like Zigbee2Mqtt / MQTT / Node-Red. Gladys will automatically pull, configure and start a new container We try to be as smooth for the users but still managed integrations cleanly by using docker each time it's needed.

We looked into this, and binding the host's docker daemon socket is incompatible with umbrelOS's current architecture, unfortunately. Even if we made the security tradeoff for better app compatibility, mounting the host Docker socket will end up breaking things.

Here's the conflicting code:

We essentially do a Docker cleanup on boot so that Docker is always in a clean state initially, even if something didn't shut down properly in the last boot.

  1. https://github.com/getumbrel/umbrel/blob/5a042334e36e65128058f512c29e7af422f4be0c/packages/umbreld/source/index.ts#L147-L148
  2. https://github.com/getumbrel/umbrel/blob/5a042334e36e65128058f512c29e7af422f4be0c/packages/umbreld/source/modules/apps/apps.ts#L28-L52

If an app has control of the main Docker daemon and can do whatever it wants, then any containers that it sets to run on boot will trigger the logic in the code linked above every single boot. This will have two consequences:

  1. any containers that were brought up will be destroyed
  2. the entire umbrelOS startup will be delayed while cleanup is happening.

There are a few potential workarounds we can try to get around this if you'd consider trying them:

Option 1:

Add a Docker in Docker (DinD) container alongside Gladys, and have Gladys mount the DinD docker socket. This is effectively what we've done with the Portainer app here: https://github.com/getumbrel/umbrel-apps/blob/master/portainer/docker-compose.yml

Option 2:

Gladys could add the existing Portainer app from the app store as a dependency (or a new Docker app instead) and use that socket

Option 3:

Install Docker inside the Gladys image

Let me know if any of these sound okay to you and I can help orchestrate.

nmfretz avatar May 27 '24 13:05 nmfretz