turn into normal docker image (alpine) instead of hass-addon

This commit is contained in:
Lysann Tranvouez 2026-01-09 21:47:47 +01:00
parent 3d8b323fb4
commit 1c3f0135f3
10 changed files with 61 additions and 164 deletions

View file

@ -1,60 +0,0 @@
#-------------------------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information.
#-------------------------------------------------------------------------------------------------------------
FROM node:12
# Avoid warnings by switching to noninteractive
ENV DEBIAN_FRONTEND=noninteractive
# The node image includes a non-root user with sudo access. Use the "remoteUser"
# property in devcontainer.json to use it. On Linux, the container user's GID/UIDs
# will be updated to match your local UID/GID (when using the dockerFile property).
# See https://aka.ms/vscode-remote/containers/non-root-user for details.
ARG USERNAME=node
ARG USER_UID=1000
ARG USER_GID=$USER_UID
# Configure apt and install packages
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \
#
# Verify git and needed tools are installed
&& apt-get -y install git iproute2 procps \
&& apt-get -y install libdbus-1-dev libglib2.0-dev \
#
# Remove outdated yarn from /opt and install via package
# so it can be easily updated via apt-get upgrade yarn
&& rm -rf /opt/yarn-* \
&& rm -f /usr/local/bin/yarn \
&& rm -f /usr/local/bin/yarnpkg \
&& apt-get install -y curl apt-transport-https lsb-release \
&& curl -sS https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/pubkey.gpg | apt-key add - 2>/dev/null \
&& echo "deb https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update \
&& apt-get -y install --no-install-recommends yarn \
#
# Install eslint globally
&& npm install -g eslint \
#
# [Optional] Update a non-root user to UID/GID if needed.
&& if [ "$USER_GID" != "1000" ] || [ "$USER_UID" != "1000" ]; then \
groupmod --gid $USER_GID $USERNAME \
&& usermod --uid $USER_UID --gid $USER_GID $USERNAME \
&& chown -R $USER_UID:$USER_GID /home/$USERNAME; \
fi \
# [Optional] Add add sudo support for non-root user
&& apt-get install -y sudo \
&& echo node ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME \
#
# Clean up
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g node-gyp
# Switch back to dialog for any ad-hoc use of apt-get
ENV DEBIAN_FRONTEND=dialog

View file

@ -1,27 +0,0 @@
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or the definition README at
// https://github.com/microsoft/vscode-dev-containers/tree/master/containers/javascript-node-12
{
"name": "Node.js 12",
"dockerFile": "Dockerfile",
// Use 'settings' to set *default* container specific settings.json values on container create.
// You can edit these settings after create using File > Preferences > Settings > Remote.
"settings": {
"terminal.integrated.shell.linux": "/bin/bash"
},
// Use 'appPort' to create a container with published ports. If the port isn't working, be sure
// your server accepts connections from all interfaces (0.0.0.0 or '*'), not just localhost.
// "appPort": [],
// Uncomment the next line to run commands after the container is created.
// "postCreateCommand": "yarn install",
// Uncomment the next line to have VS Code connect as an existing non-root user in the container.
// On Linux, by default, the container user's UID/GID will be updated to match your local user. See
// https://aka.ms/vscode-remote/containers/non-root for details on adding a non-root user if none exist.
// "remoteUser": "node",
// Add the IDs of extensions you want installed when the container is created in the array below.
"extensions": ["dbaeumer.vscode-eslint"]
}

View file

@ -1,25 +1,7 @@
# To specify the base image version, edit build.yaml
# Specifying BUILD_FROM=image:version in this file doesn't work
ARG BUILD_FROM
FROM $BUILD_FROM
FROM alpine:3.23.2
ENV LANG=C.UTF-8
# Instruct npm to run lifecycle scripts (like preinstall, install, postinstall)
# as the root user, instead of trying to downgrade permissions.
ENV NPM_CONFIG_UNSAFE_PERM=true
# Set shell
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
# Copy data for add-on
COPY ./*.js /plejd/
COPY ./config.json /plejd/
COPY ./package.json /plejd/
ARG BUILD_ARCH
# Install Node
RUN set -eux; \
apk add --no-cache --virtual .build-dependencies \
g++ \
@ -39,35 +21,18 @@ RUN set -eux; \
dbus-dev \
glib-dev
COPY ./package.json /plejd/
WORKDIR /plejd
RUN npm install \
--no-audit \
--no-update-notifier \
--unsafe-perm
# Copy root filesystem
COPY rootfs /
# Ensure runtime scripts remain executable even if modes were lost in the source checkout
RUN set -eux; \
chmod 0755 /etc/services.d/plejd/run /etc/cont-init.d/10-plejd-perms /usr/bin/plejd.sh
COPY ./*.js /plejd/
COPY ./config.json /plejd/
# Build arguments
ARG BUILD_DATE
ARG BUILD_REF
ARG BUILD_VERSION
COPY ./entrypoint.sh /plejd/
COPY ./options.json.template /plejd/
RUN chmod a+x /plejd/entrypoint.sh
# Labels
LABEL \
io.hass.name="Plejd" \
io.hass.description="Adds support for the Swedish home automation devices from Plejd." \
io.hass.arch="${BUILD_ARCH}" \
io.hass.type="addon" \
io.hass.version=${BUILD_VERSION} \
maintainer="Marcus Westin <marcus@sekurbit.se>" \
org.label-schema.description="Adds support for the Swedish home automation devices from Plejd." \
org.label-schema.build-date=${BUILD_DATE} \
org.label-schema.name="Plejd" \
org.label-schema.schema-version="1.0" \
org.label-schema.usage="https://github.com/icanos/hassio-plejd/tree/master/README.md" \
org.label-schema.vcs-ref=${BUILD_REF} \
org.label-schema.vcs-url="https://github.com/icanos/hassio-plejd"
ENTRYPOINT ["/bin/sh", "/plejd/entrypoint.sh"]

View file

@ -1,6 +0,0 @@
build_from:
armhf: ghcr.io/hassio-addons/base/armhf:18.2.0
armv7: ghcr.io/hassio-addons/base/armv7:18.2.0
aarch64: ghcr.io/hassio-addons/base/aarch64:18.2.0
amd64: ghcr.io/hassio-addons/base/amd64:18.2.0
i386: ghcr.io/hassio-addons/base/i386:18.2.0

39
plejd/entrypoint.sh Normal file
View file

@ -0,0 +1,39 @@
#! /bin/sh
if [ -z "${site}" ]; then
echo "Plejd site not set."
exit 1
fi
if [ -z "${username}" ]; then
echo "Plejd username not set."
exit 1
fi
if [ -z "${password}" ]; then
echo "Plejd password not set."
exit 1
fi
if [ -z "${mqttUsername}" ]; then
echo "Mqtt username not set"
exit 1
fi
if [ -z "${mqttPassword}" ]; then
echo "Mqtt password not set"
exit 1
fi
mkdir /data
mqttBroker="${mqttBroker:=mqtt://}" \
includeRoomsAsLights="${includeRoomsAsLights:=false}" \
preferCachedApiResponse="${preferCachedApiResponse:=false}" \
updatePlejdClock="${updatePlejdClock:=false}" \
logLevel="${logLevel:=info}" \
connectionTimout="${connectionTimout:=2}" \
writeQueueWaitTime="${writeQueueWaitTime:=400}" \
envsubst <"/plejd/options.json.template" >"/data/options.json"
node /plejd/main.js

View file

@ -0,0 +1,14 @@
{
"site": "$site",
"username": "$username",
"password": "$password",
"mqttBroker": "$mqttBroker",
"mqttUsername": "$mqttUsername",
"mqttPassword": "$mqttPassword",
"includeRoomsAsLights": "$includeRoomsAsLights",
"preferCachedApiResponse": "$preferCachedApiResponse",
"updatePlejdClock": "$updatePlejdClock",
"logLevel": "$logLevel",
"connectionTimeout": $connectionTimout,
"writeQueueWaitTime": $writeQueueWaitTime
}

View file

@ -1,4 +0,0 @@
#!/usr/bin/with-contenv bashio
bashio::log.info 'Ensuring Plejd scripts are executable'
chmod 0755 /etc/services.d/plejd/run /usr/bin/plejd.sh || bashio::exit.nok 'Failed to set permissions'

View file

@ -1,14 +0,0 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Community Hass.io Add-ons: Plejd
# Runs the Plejd service
# ==============================================================================
bashio::log.info 'Starting the Plejd service...'
# Change working directory
cd /plejd || bashio::exit.nok 'Unable to change working directory'
# Run the Plejd service
bashio::log.info 'Executing startup script'
exec /usr/bin/plejd.sh

View file

@ -1,5 +0,0 @@
#!/usr/bin/with-contenv bashio
bashio::log.info 'Running add-on'
exec node /plejd/main.js

View file

@ -1,5 +0,0 @@
{
"name": "Unofficial Plejd Add-on",
"url": "https://github.com/icanos/hassio-plejd",
"maintainer": "Marcus Westin <marcus@sekurbit.se>"
}