diff --git a/.devcontainer.json b/.devcontainer.json index a2a6b75..0d0e1d2 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -1,5 +1,5 @@ { - "name": "Example Home Assistant add-on repository", + "name": "My custom Home Assistant add-on repository", "image": "ghcr.io/home-assistant/devcontainer:addons", "appPort": ["7123:8123", "7357:4357"], "postStartCommand": "bash devcontainer_bootstrap", diff --git a/example/CHANGELOG.md b/example/CHANGELOG.md deleted file mode 100644 index beaf414..0000000 --- a/example/CHANGELOG.md +++ /dev/null @@ -1,15 +0,0 @@ - - -## 1.2.0 - -- Add an apparmor profile -- Update to 3.15 base image with s6 v3 -- Add a sample script to run as service and constrain in aa profile - -## 1.1.0 - -- Updates - -## 1.0.0 - -- Initial release diff --git a/example/DOCS.md b/example/DOCS.md deleted file mode 100644 index b8432c3..0000000 --- a/example/DOCS.md +++ /dev/null @@ -1,10 +0,0 @@ -# Home Assistant Add-on: Example add-on - -## How to use - -This add-on really does nothing. It is just an example. - -When started it will print the configured message or "Hello world" in the log. - -It will also print "All done!" in `/share/example_addon_output.txt` to show -simple example of the usage of `map` in addon config. diff --git a/example/Dockerfile b/example/Dockerfile deleted file mode 100644 index 9d1a983..0000000 --- a/example/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile -ARG BUILD_FROM -FROM $BUILD_FROM - -# Execute during the build of the image -ARG TEMPIO_VERSION BUILD_ARCH -RUN \ - curl -sSLf -o /usr/bin/tempio \ - "https://github.com/home-assistant/tempio/releases/download/${TEMPIO_VERSION}/tempio_${BUILD_ARCH}" - -# Copy root filesystem -COPY rootfs / diff --git a/example/README.md b/example/README.md deleted file mode 100644 index a0de77f..0000000 --- a/example/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Home Assistant Add-on: Example add-on - -_Example add-on to use as a blueprint for new add-ons._ - -![Supports aarch64 Architecture][aarch64-shield] -![Supports amd64 Architecture][amd64-shield] -![Supports armhf Architecture][armhf-shield] -![Supports armv7 Architecture][armv7-shield] -![Supports i386 Architecture][i386-shield] - -[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg -[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg -[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg -[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg -[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg diff --git a/example/apparmor.txt b/example/apparmor.txt deleted file mode 100644 index e788a6c..0000000 --- a/example/apparmor.txt +++ /dev/null @@ -1,57 +0,0 @@ -#include - -profile example flags=(attach_disconnected,mediate_deleted) { - #include - - # Capabilities - file, - signal (send) set=(kill,term,int,hup,cont), - - # S6-Overlay - /init ix, - /bin/** ix, - /usr/bin/** ix, - /run/{s6,s6-rc*,service}/** ix, - /package/** ix, - /command/** ix, - /etc/services.d/** rwix, - /etc/cont-init.d/** rwix, - /etc/cont-finish.d/** rwix, - /run/{,**} rwk, - /dev/tty rw, - - # Bashio - /usr/lib/bashio/** ix, - /tmp/** rwk, - - # Access to options.json and other files within your addon - /data/** rw, - - # Start new profile for service - /usr/bin/my_program cx -> my_program, - - profile my_program flags=(attach_disconnected,mediate_deleted) { - #include - - # Receive signals from S6-Overlay - signal (receive) peer=*_example, - - # Access to options.json and other files within your addon - /data/** rw, - - # Access to mapped volumes specified in config.json - /share/** rw, - - # Access required for service functionality - # Note: List was built by doing the following: - # 1. Add what is obviously needed based on what is in the script - # 2. Add `complain` as a flag to this profile temporarily and run the addon - # 3. Review the audit log with `journalctl _TRANSPORT="audit" -g 'apparmor="ALLOWED"'` and add other access as needed - # Remember to remove the `complain` flag when you are done - /usr/bin/my_program r, - /bin/bash rix, - /bin/echo ix, - /etc/passwd r, - /dev/tty rw, - } -} \ No newline at end of file diff --git a/example/build.yaml b/example/build.yaml deleted file mode 100644 index cdca316..0000000 --- a/example/build.yaml +++ /dev/null @@ -1,14 +0,0 @@ -# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile -build_from: - aarch64: "ghcr.io/home-assistant/aarch64-base:3.15" - amd64: "ghcr.io/home-assistant/amd64-base:3.15" - armhf: "ghcr.io/home-assistant/armhf-base:3.15" - armv7: "ghcr.io/home-assistant/armv7-base:3.15" - i386: "ghcr.io/home-assistant/i386-base:3.15" -labels: - org.opencontainers.image.title: "Home Assistant Add-on: Example add-on" - org.opencontainers.image.description: "Example add-on to use as a blueprint for new add-ons." - org.opencontainers.image.source: "https://github.com/home-assistant/addons-example" - org.opencontainers.image.licenses: "Apache License 2.0" -args: - TEMPIO_VERSION: "2021.09.0" diff --git a/example/config.yaml b/example/config.yaml deleted file mode 100644 index b034b08..0000000 --- a/example/config.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-config -name: Example add-on -version: "1.2.0" -slug: example -description: Example add-on -url: "https://github.com/home-assistant/addons-example/tree/main/example" -arch: - - armhf - - armv7 - - aarch64 - - amd64 - - i386 -init: false -map: - - share:rw -options: - message: "Hello world..." -schema: - message: "str?" -image: "ghcr.io/home-assistant/{arch}-addon-example" diff --git a/example/icon.png b/example/icon.png deleted file mode 100644 index d4415c1..0000000 Binary files a/example/icon.png and /dev/null differ diff --git a/example/logo.png b/example/logo.png deleted file mode 100644 index 106e5c2..0000000 Binary files a/example/logo.png and /dev/null differ diff --git a/example/rootfs/etc/services.d/example/finish b/example/rootfs/etc/services.d/example/finish deleted file mode 100755 index b03a9cf..0000000 --- a/example/rootfs/etc/services.d/example/finish +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bashio -# ============================================================================== -# Take down the S6 supervision tree when example fails -# s6-overlay docs: https://github.com/just-containers/s6-overlay -# ============================================================================== - -if [[ "$1" -ne 0 ]] && [[ "$1" -ne 256 ]]; then - bashio::log.warning "Halt add-on" - exec /run/s6/basedir/bin/halt -fi - -bashio::log.info "Service restart after closing" diff --git a/example/rootfs/etc/services.d/example/run b/example/rootfs/etc/services.d/example/run deleted file mode 100755 index 6c329bd..0000000 --- a/example/rootfs/etc/services.d/example/run +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/with-contenv bashio -# ============================================================================== -# Start the example service -# s6-overlay docs: https://github.com/just-containers/s6-overlay -# ============================================================================== - -# Add your code here - -# Declare variables -declare message - -## Get the 'message' key from the user config options. -message=$(bashio::config 'message') - -## Print the message the user supplied, defaults to "Hello World..." -bashio::log.info "${message:="Hello World..."}" - -## Run your program -exec /usr/bin/my_program diff --git a/example/rootfs/usr/bin/my_program b/example/rootfs/usr/bin/my_program deleted file mode 100755 index a287b13..0000000 --- a/example/rootfs/usr/bin/my_program +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -echo "All done!" > /share/example_addon_output.txt diff --git a/example/translations/en.yaml b/example/translations/en.yaml deleted file mode 100644 index 70de024..0000000 --- a/example/translations/en.yaml +++ /dev/null @@ -1,4 +0,0 @@ -configuration: - message: - name: Message - description: The message that will be printed to the log when starting this example add-on. diff --git a/portainer/.README.j2 b/portainer/.README.j2 new file mode 100644 index 0000000..fe42811 --- /dev/null +++ b/portainer/.README.j2 @@ -0,0 +1,92 @@ +# Home Assistant Community Add-on: Portainer + +[![Release][release-shield]][release] ![Project Stage][project-stage-shield] ![Project Maintenance][maintenance-shield] + +[![Discord][discord-shield]][discord] [![Community Forum][forum-shield]][forum] + +[![Sponsor Frenck via GitHub Sponsors][github-sponsors-shield]][github-sponsors] + +[![Support Frenck on Patreon][patreon-shield]][patreon] + +Manage your Docker environment with ease. + +## About + +Portainer is an open-source lightweight management UI which allows you to +easily manage your a Docker host(s) or Docker swarm clusters. + +It has never been so easy to manage Docker. Portainer provides a detailed +overview of Docker and allows you to manage containers, images, networks and +volumes. + +## WARNING 1 + +The Portainer add-on is really powerful and gives you access to virtually +your whole system. While this add-on is created and maintained with care and +with security in mind, in the wrong or inexperienced hands, +it could damage your system. + +## WARNING 2 + +The Portainer add-on is meant for debugging Home Assistant and its containers. +It has not meant or designed for managing or deploying your custom software +or third-party containers. + +**Home Assistant DOES NOT SUPPORT running third party containers** +on Home Assistant OS or Supervised installation types. Ignoring this, will +render your system as unsupported! + +![Portainer screenshot][screenshot] + +{% if channel == "edge" %} +## WARNING! THIS IS AN EDGE VERSION! + +This Home Assistant Add-ons repository contains edge builds of add-ons. +Edge builds add-ons are based upon the latest development version. + +- They may not work at all. +- They might stop working at any time. +- They could have a negative impact on your system. + +This repository was created for: + +- Anybody willing to test. +- Anybody interested in trying out upcoming add-ons or add-on features. +- Developers. + +If you are more interested in stable releases of our add-ons: + + + +{% endif %} +{% if channel == "beta" %} +## WARNING! THIS IS A BETA VERSION! + +This Home Assistant Add-ons repository contains beta releases of add-ons. + +- They might stop working at any time. +- They could have a negative impact on your system. + +This repository was created for: + +- Anybody willing to test. +- Anybody interested in trying out upcoming add-ons or add-on features. + +If you are more interested in stable releases of our add-ons: + + + +{% endif %} +[discord-shield]: https://img.shields.io/discord/478094546522079232.svg +[discord]: https://discord.me/hassioaddons +[forum-shield]: https://img.shields.io/badge/community-forum-brightgreen.svg +[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-portainer/68836?u=frenck +[github-sponsors-shield]: https://frenck.dev/wp-content/uploads/2019/12/github_sponsor.png +[github-sponsors]: https://github.com/sponsors/frenck +[maintenance-shield]: https://img.shields.io/maintenance/yes/2021.svg +[patreon-shield]: https://frenck.dev/wp-content/uploads/2019/12/patreon.png +[patreon]: https://www.patreon.com/frenck +[project-stage-shield]: https://img.shields.io/badge/project%20stage-production%20ready-brightgreen.svg +[release-shield]: https://img.shields.io/badge/version-{{ version }}-blue.svg +[release]: {{ repo }}/tree/{{ version }} +[screenshot]: https://github.com/hassio-addons/addon-portainer/raw/main/images/screenshot.png diff --git a/portainer/DOCS.md b/portainer/DOCS.md new file mode 100644 index 0000000..3e8d745 --- /dev/null +++ b/portainer/DOCS.md @@ -0,0 +1,145 @@ +# Home Assistant Community Add-on: Portainer + +Portainer is an open-source lightweight management UI which allows you to +easily manage a Docker host(s) or Docker swarm clusters. + +It has never been so easy to manage Docker. Portainer provides a detailed +overview of Docker and allows you to manage containers, images, networks and +volumes. + +## WARNING 1 + +The Portainer add-on is really powerful and gives you access to virtually +your whole system. While this add-on is created and maintained with care and +with security in mind, in the wrong or inexperienced hands, +it could damage your system. + +## WARNING 2 + +The Portainer add-on is meant for debugging Home Assistant and its containers. +It has not meant or designed for managing or deploying your custom software +or third-party containers. + +**Home Assistant DOES NOT SUPPORT running third party containers** +on Home Assistant OS or Supervised installation types. Ignoring this, will +render your system as unsupported! + +## Installation + +To install this add-on, you'll first need to go to your profile and turn on +"Advanced Mode", once that is done go back to Home Assistant add-ons and search +for "Portainer" and install it as you would any other add-on. + +To be able to use this add-on, you'll need to disable protection mode on this +add-on. Without it, the add-on is unable to access Docker. + +1. Search for the "Portainer" add-on in the Supervisor add-on store and + install it. +1. Set the "Protection mode" switch to off. +1. Start the "Portainer" add-on. +1. Check the logs of the "Portainer" add-on to see if everything went well. + +## Configuration + +**Note**: _Remember to restart the add-on when the configuration is changed._ + +Example add-on configuration: + +```yaml +log_level: info +agent_secret: password +``` + +**Note**: _This is just an example, don't copy and paste it! Create your own!_ + +### Option: `log_level` + +The `log_level` option controls the level of log output by the addon and can +be changed to be more or less verbose, which might be useful when you are +dealing with an unknown issue. Possible values are: + +- `trace`: Show every detail, like all called internal functions. +- `debug`: Shows detailed debug information. +- `info`: Normal (usually) interesting events. +- `warning`: Exceptional occurrences that are not errors. +- `error`: Runtime errors that do not require immediate action. +- `fatal`: Something went terribly wrong. Add-on becomes unusable. + +Please note that each level automatically includes log messages from a +more severe level, e.g., `debug` also shows `info` messages. By default, +the `log_level` is set to `info`, which is the recommended setting unless +you are troubleshooting. + +### Option: `agent_secret` + +An option to set a shared agent secret. Must also be set in the remote agent +as an Environment variable. + +## Changelog & Releases + +This repository keeps a change log using [GitHub's releases][releases] +functionality. + +Releases are based on [Semantic Versioning][semver], and use the format +of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented +based on the following: + +- `MAJOR`: Incompatible or major changes. +- `MINOR`: Backwards-compatible new features and enhancements. +- `PATCH`: Backwards-compatible bugfixes and package updates. + +## Support + +Got questions? + +You have several options to get them answered: + +- The [Home Assistant Community Add-ons Discord chat server][discord] for add-on + support and feature requests. +- The [Home Assistant Discord chat server][discord-ha] for general Home + Assistant discussions and questions. +- The Home Assistant [Community Forum][forum]. +- Join the [Reddit subreddit][reddit] in [/r/homeassistant][reddit] + +You could also [open an issue here][issue] GitHub. + +## Authors & contributors + +The original setup of this repository is by [Franck Nijhof][frenck]. + +For a full list of all authors and contributors, +check [the contributor's page][contributors]. + +## License + +MIT License + +Copyright (c) 2018-2021 Franck Nijhof + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +[contributors]: https://github.com/hassio-addons/addon-portainer/graphs/contributors +[discord-ha]: https://discord.gg/c5DvZ4e +[discord]: https://discord.me/hassioaddons +[forum]: https://community.home-assistant.io/t/home-assistant-community-add-on-portainer/68836?u=frenck +[frenck]: https://github.com/frenck +[issue]: https://github.com/hassio-addons/addon-portainer/issues +[reddit]: https://reddit.com/r/homeassistant +[releases]: https://github.com/hassio-addons/addon-portainer/releases +[semver]: http://semver.org/spec/v2.0.0.htm diff --git a/portainer/Dockerfile b/portainer/Dockerfile new file mode 100755 index 0000000..4e505ce --- /dev/null +++ b/portainer/Dockerfile @@ -0,0 +1,50 @@ +ARG BUILD_FROM=ghcr.io/hassio-addons/base/amd64:10.0.1 +# hadolint ignore=DL3006 +FROM ${BUILD_FROM} + +# Set shell +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +# Setup base +ARG BUILD_ARCH=amd64 +RUN \ + if [ "${BUILD_ARCH}" = "aarch64" ]; then ARCH="arm64"; fi \ + && if [ "${BUILD_ARCH}" = "armhf" ]; then ARCH="arm"; fi \ + && if [ "${BUILD_ARCH}" = "armv7" ]; then ARCH="arm"; fi \ + && if [ "${BUILD_ARCH}" = "amd64" ]; then ARCH="amd64"; fi \ + \ + && curl -L -s \ + "https://github.com/portainer/portainer/releases/download/2.6.2/portainer-2.6.2-linux-${ARCH}.tar.gz" \ + | tar zxvf - -C /opt/ + +# Copy root filesystem +COPY rootfs / + +# Build arguments +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_DESCRIPTION +ARG BUILD_NAME +ARG BUILD_REF +ARG BUILD_REPOSITORY +ARG BUILD_VERSION + +# Labels +LABEL \ + io.hass.name="${BUILD_NAME}" \ + io.hass.description="${BUILD_DESCRIPTION}" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="Franck Nijhof " \ + org.opencontainers.image.title="${BUILD_NAME}" \ + org.opencontainers.image.description="${BUILD_DESCRIPTION}" \ + org.opencontainers.image.vendor="Home Assistant Community Add-ons" \ + org.opencontainers.image.authors="Franck Nijhof " \ + org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.url="https://addons.community" \ + org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \ + org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \ + org.opencontainers.image.created=${BUILD_DATE} \ + org.opencontainers.image.revision=${BUILD_REF} \ + org.opencontainers.image.version=${BUILD_VERSION} diff --git a/portainer/build.json b/portainer/build.json new file mode 100644 index 0000000..701fbca --- /dev/null +++ b/portainer/build.json @@ -0,0 +1,8 @@ +{ + "build_from": { + "aarch64": "ghcr.io/hassio-addons/base/aarch64:10.0.1", + "amd64": "ghcr.io/hassio-addons/base/amd64:10.0.1", + "armhf": "ghcr.io/hassio-addons/base/armhf:10.0.1", + "armv7": "ghcr.io/hassio-addons/base/armv7:10.0.1" + } +} diff --git a/portainer/config.json b/portainer/config.json new file mode 100755 index 0000000..a78f27c --- /dev/null +++ b/portainer/config.json @@ -0,0 +1,26 @@ +{ + "name": "Portainer", + "version": "dev", + "slug": "portainer", + "description": "Manage your Docker environment with ease", + "url": "https://github.com/hassio-addons/addon-portainer", + "advanced": true, + "ingress": true, + "ingress_stream": true, + "startup": "services", + "panel_icon": "mdi:docker", + "arch": ["aarch64", "amd64", "armhf", "armv7"], + "init": false, + "ports": { + "8000/tcp": null + }, + "ports_description": { + "8000/tcp": "Edge Agent Api (Enable when managing remote edge agents)" + }, + "hassio_api": true, + "docker_api": true, + "schema": { + "log_level": "list(trace|debug|info|notice|warning|error|fatal)?", + "agent_secret": "str?" + } +} diff --git a/portainer/icon.png b/portainer/icon.png new file mode 100644 index 0000000..c411cf1 Binary files /dev/null and b/portainer/icon.png differ diff --git a/portainer/logo.png b/portainer/logo.png new file mode 100644 index 0000000..e790cc3 Binary files /dev/null and b/portainer/logo.png differ diff --git a/portainer/rootfs/etc/cont-init.d/portainer.sh b/portainer/rootfs/etc/cont-init.d/portainer.sh new file mode 100644 index 0000000..02be577 --- /dev/null +++ b/portainer/rootfs/etc/cont-init.d/portainer.sh @@ -0,0 +1,6 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Home Assistant Community Add-on: Portainer +# Runs some initializations for Portainer +# ============================================================================== +bashio::require.unprotected diff --git a/portainer/rootfs/etc/services.d/portainer/finish b/portainer/rootfs/etc/services.d/portainer/finish new file mode 100644 index 0000000..1d3dca7 --- /dev/null +++ b/portainer/rootfs/etc/services.d/portainer/finish @@ -0,0 +1,9 @@ +#!/usr/bin/execlineb -S0 +# ============================================================================== +# Home Assistant Community Add-on: Portainer +# Take down the S6 supervision tree when Portainer fails +# ============================================================================== +if { s6-test ${1} -ne 0 } +if { s6-test ${1} -ne 256 } + +s6-svscanctl -t /var/run/s6/services diff --git a/portainer/rootfs/etc/services.d/portainer/run b/portainer/rootfs/etc/services.d/portainer/run new file mode 100644 index 0000000..1f339e3 --- /dev/null +++ b/portainer/rootfs/etc/services.d/portainer/run @@ -0,0 +1,21 @@ +#!/usr/bin/with-contenv bashio +# ============================================================================== +# Home Assistant Community Add-on: Portainer +# Runs portainer +# ============================================================================== +declare -a options +export AGENT_SECRET + +bashio::log.info 'Starting Portainer...' + +options+=(--data /data) +options+=(--bind 0.0.0.0:8099) +options+=(--host unix:///var/run/docker.sock) + +# Export agent secret, if defined +if bashio::config.has_value 'agent_secret' ; then + AGENT_SECRET=$(bashio::config 'agent_secret') +fi + +# Run Portainer +exec /opt/portainer/portainer "${options[@]}" diff --git a/portainer/translations/en.yaml b/portainer/translations/en.yaml new file mode 100644 index 0000000..208ab89 --- /dev/null +++ b/portainer/translations/en.yaml @@ -0,0 +1,13 @@ +--- +configuration: + log_level: + name: Log level + description: >- + Controls the level of log details the add-on provides. + agent_secret: + name: Agent Secret + description: >- + An option to set a shared agent secret. Must also be set in the remote + agent as an Environment variable. +network: + 8000/tcp: Edge Agent Api (Enable when managing remote edge agents) diff --git a/repository.yaml b/repository.yaml index e92d4da..592453d 100644 --- a/repository.yaml +++ b/repository.yaml @@ -1,4 +1,4 @@ # https://developers.home-assistant.io/docs/add-ons/repository#repository-configuration -name: Example Home Assistant add-on repository -url: 'https://github.com/home-assistant/addons-example' -maintainer: Awesome Maintainer \ No newline at end of file +name: My custom Home Assistant add-on repository +url: 'https://git.nstoerzbach.de/nico.stoerzbach/hassio-repository' +maintainer: Nico Störzbach \ No newline at end of file