From f4500ad10d1cb7407268fe91b3cfb24e45fa6296 Mon Sep 17 00:00:00 2001 From: Timmo Date: Sat, 9 Feb 2019 22:10:01 +0000 Subject: [PATCH] :sparkles: Add add-on code and setup --- thelounge/Dockerfile | 42 ++++++++++++++++ thelounge/build.json | 10 ++++ thelounge/config.json | 50 +++++++++++++++++++ .../rootfs/etc/cont-init.d/10-requirements.sh | 26 ++++++++++ thelounge/rootfs/etc/cont-init.d/20-setup.sh | 20 ++++++++ thelounge/rootfs/etc/services.d/server/finish | 9 ++++ thelounge/rootfs/etc/services.d/server/run | 22 ++++++++ .../rootfs/etc/thelounge/users/hassio.json | 8 +++ 8 files changed, 187 insertions(+) create mode 100644 thelounge/Dockerfile create mode 100644 thelounge/build.json create mode 100644 thelounge/config.json create mode 100644 thelounge/rootfs/etc/cont-init.d/10-requirements.sh create mode 100644 thelounge/rootfs/etc/cont-init.d/20-setup.sh create mode 100644 thelounge/rootfs/etc/services.d/server/finish create mode 100644 thelounge/rootfs/etc/services.d/server/run create mode 100644 thelounge/rootfs/etc/thelounge/users/hassio.json diff --git a/thelounge/Dockerfile b/thelounge/Dockerfile new file mode 100644 index 0000000..af2d10c --- /dev/null +++ b/thelounge/Dockerfile @@ -0,0 +1,42 @@ +ARG BUILD_FROM=hassioaddons/base:2.3.1 +# hadolint ignore=DL3006 +FROM ${BUILD_FROM} + +# Install packages +# hadolint ignore=DL3003 +RUN \ + apk add --no-cache \ + nodejs-current=9.11.1-r2 \ + yarn=1.7.0-r0 \ + \ + && yarn global add thelounge@3.0.0 \ + \ + && yarn cache clean \ + && rm -fr /tmp/* + +# Copy root filesystem +COPY rootfs / + +# Build arguments +ARG BUILD_ARCH +ARG BUILD_DATE +ARG BUILD_REF +ARG BUILD_VERSION + +# Labels +LABEL \ + io.hass.name="The Lounge" \ + io.hass.description="A self-hosted web IRC client" \ + io.hass.arch="${BUILD_ARCH}" \ + io.hass.type="addon" \ + io.hass.version=${BUILD_VERSION} \ + maintainer="Timmo " \ + org.label-schema.description="A self-hosted web IRC client" \ + org.label-schema.build-date=${BUILD_DATE} \ + org.label-schema.name="The Lounge" \ + org.label-schema.schema-version="1.0" \ + org.label-schema.url="https://community.home-assistant.io/?u=timmo001" \ + org.label-schema.usage="https://github.com/hassio-addons/addon-thelounge/tree/master/README.md" \ + org.label-schema.vcs-ref=${BUILD_REF} \ + org.label-schema.vcs-url="https://github.com/hassio-addons/addon-thelounge" \ + org.label-schema.vendor="Community Hass.io Add-ons" diff --git a/thelounge/build.json b/thelounge/build.json new file mode 100644 index 0000000..a15de00 --- /dev/null +++ b/thelounge/build.json @@ -0,0 +1,10 @@ +{ + "args": {}, + "build_from": { + "aarch64": "hassioaddons/base-aarch64:2.3.1", + "amd64": "hassioaddons/base-amd64:2.3.1", + "armhf": "hassioaddons/base-armhf:2.3.1", + "i386": "hassioaddons/base-i386:2.3.1" + }, + "squash": false +} \ No newline at end of file diff --git a/thelounge/config.json b/thelounge/config.json new file mode 100644 index 0000000..f07e466 --- /dev/null +++ b/thelounge/config.json @@ -0,0 +1,50 @@ +{ + "name": "The Lounge", + "version": "dev", + "slug": "thelounge", + "description": "A self-hosted web IRC client", + "url": "https://github.com/hassio-addons/addon-thelounge", + "webui": "[PROTO:ssl]://[HOST]:[PORT:15100]", + "startup": "application", + "arch": [ + "aarch64", + "amd64", + "armhf", + "i386" + ], + "boot": "auto", + "hassio_api": true, + "hassio_role": "default", + "homeassistant_api": true, + "host_network": false, + "ports": { + "15100/tcp": 15100 + }, + "map": [ + "config:rw", + "ssl" + ], + "options": { + "log_level": "info", + "ssl": true, + "certfile": "fullchain.pem", + "keyfile": "privkey.pem", + "default_theme": "default", + "themes": [ + "thelounge-theme-material" + ] + }, + "schema": { + "log_level": "match(^(trace|debug|info|notice|warning|error|fatal)$)", + "ssl": "bool", + "certfile": "str", + "keyfile": "str", + "default_theme": "str", + "themes": [ + "str" + ] + }, + "environment": { + "LOG_FORMAT": "{LEVEL}: {MESSAGE}" + } +} diff --git a/thelounge/rootfs/etc/cont-init.d/10-requirements.sh b/thelounge/rootfs/etc/cont-init.d/10-requirements.sh new file mode 100644 index 0000000..9ee75d8 --- /dev/null +++ b/thelounge/rootfs/etc/cont-init.d/10-requirements.sh @@ -0,0 +1,26 @@ +#!/usr/bin/with-contenv bash +# ============================================================================== +# Community Hass.io Add-ons: The Lounge +# This checks if all user configuration requirements are met +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +# Check SSL requirements, if enabled +if hass.config.true 'ssl'; then + if ! hass.config.has_value 'certfile'; then + hass.die 'SSL is enabled, but no certfile was specified' + fi + + if ! hass.config.has_value 'keyfile'; then + hass.die 'SSL is enabled, but no keyfile was specified' + fi + + if ! hass.file_exists "/ssl/$(hass.config.get 'certfile')"; then + hass.die 'The configured certfile is not found' + fi + + if ! hass.file_exists "/ssl/$(hass.config.get 'keyfile')"; then + hass.die 'The configured keyfile is not found' + fi +fi diff --git a/thelounge/rootfs/etc/cont-init.d/20-setup.sh b/thelounge/rootfs/etc/cont-init.d/20-setup.sh new file mode 100644 index 0000000..d032e24 --- /dev/null +++ b/thelounge/rootfs/etc/cont-init.d/20-setup.sh @@ -0,0 +1,20 @@ +#!/usr/bin/with-contenv bash +# ============================================================================== +# Community Hass.io Add-ons: The Lounge +# This adds the default user and installs any requested themes +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +export THELOUNGE_HOME=/data/thelounge + +if ! hass.directory_exists "/data/thelounge"; then + hass.log.info "Creating default hassio user.." + mkdir -p /data/thelounge/users + cp /etc/thelounge/users/hassio.json /data/thelounge/users +else + for theme in $(hass.config.get "themes") + do + /usr/local/bin/thelounge install "$theme" + done +fi diff --git a/thelounge/rootfs/etc/services.d/server/finish b/thelounge/rootfs/etc/services.d/server/finish new file mode 100644 index 0000000..095ea64 --- /dev/null +++ b/thelounge/rootfs/etc/services.d/server/finish @@ -0,0 +1,9 @@ +#!/usr/bin/execlineb -S0 +# ============================================================================== +# Community Hass.io Add-ons: The Lounge +# Take down the S6 supervision tree when NGINX fails +# ============================================================================== +if -n { s6-test $# -ne 0 } +if -n { s6-test ${1} -eq 256 } + +s6-svscanctl -t /var/run/s6/services diff --git a/thelounge/rootfs/etc/services.d/server/run b/thelounge/rootfs/etc/services.d/server/run new file mode 100644 index 0000000..589c927 --- /dev/null +++ b/thelounge/rootfs/etc/services.d/server/run @@ -0,0 +1,22 @@ +#!/bin/bash +# ============================================================================== +# Community Hass.io Add-ons: The Lounge +# Runs The Lounge +# ============================================================================== +# shellcheck disable=SC1091 +source /usr/lib/hassio-addons/base.sh + +export THELOUNGE_HOME=/data/thelounge + +hass.log.info "Starting The Lounge server.." + +exec /usr/local/bin/thelounge start \ + -c port=15100 \ + -c https.enable="$(hass.config.get 'ssl')" \ + -c https.ca="/ssl/$(hass.config.get 'certfile')" \ + -c https.certificate="/ssl/$(hass.config.get 'certfile')" \ + -c https.key="/ssl/$(hass.config.get 'keyfile')" \ + -c fileUpload=true \ + -c prefetch=true \ + -c prefetchStorage=true \ + -c theme="$(hass.config.get 'default_theme')" diff --git a/thelounge/rootfs/etc/thelounge/users/hassio.json b/thelounge/rootfs/etc/thelounge/users/hassio.json new file mode 100644 index 0000000..35aae8e --- /dev/null +++ b/thelounge/rootfs/etc/thelounge/users/hassio.json @@ -0,0 +1,8 @@ +{ + "password": "$2a$11$yq4ZxpU9QYlVvqGPX86KauLBPJVcJUlhSBFyCAzQ8XAguTmsv/Nr2", + "log": true, + "awayMessage": "", + "networks": [], + "sessions": {}, + "clientSettings": {} +} \ No newline at end of file