turn into normal docker image (alpine) instead of hass-addon
This commit is contained in:
parent
3d8b323fb4
commit
1c3f0135f3
10 changed files with 61 additions and 164 deletions
|
|
@ -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
|
|
||||||
|
|
@ -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"]
|
|
||||||
}
|
|
||||||
|
|
@ -1,25 +1,7 @@
|
||||||
# To specify the base image version, edit build.yaml
|
FROM alpine:3.23.2
|
||||||
# Specifying BUILD_FROM=image:version in this file doesn't work
|
|
||||||
ARG BUILD_FROM
|
|
||||||
FROM $BUILD_FROM
|
|
||||||
|
|
||||||
ENV LANG=C.UTF-8
|
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; \
|
RUN set -eux; \
|
||||||
apk add --no-cache --virtual .build-dependencies \
|
apk add --no-cache --virtual .build-dependencies \
|
||||||
g++ \
|
g++ \
|
||||||
|
|
@ -39,35 +21,18 @@ RUN set -eux; \
|
||||||
dbus-dev \
|
dbus-dev \
|
||||||
glib-dev
|
glib-dev
|
||||||
|
|
||||||
|
COPY ./package.json /plejd/
|
||||||
WORKDIR /plejd
|
WORKDIR /plejd
|
||||||
RUN npm install \
|
RUN npm install \
|
||||||
--no-audit \
|
--no-audit \
|
||||||
--no-update-notifier \
|
--no-update-notifier \
|
||||||
--unsafe-perm
|
--unsafe-perm
|
||||||
|
|
||||||
# Copy root filesystem
|
COPY ./*.js /plejd/
|
||||||
COPY rootfs /
|
COPY ./config.json /plejd/
|
||||||
# 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
|
|
||||||
|
|
||||||
# Build arguments
|
COPY ./entrypoint.sh /plejd/
|
||||||
ARG BUILD_DATE
|
COPY ./options.json.template /plejd/
|
||||||
ARG BUILD_REF
|
RUN chmod a+x /plejd/entrypoint.sh
|
||||||
ARG BUILD_VERSION
|
|
||||||
|
|
||||||
# Labels
|
ENTRYPOINT ["/bin/sh", "/plejd/entrypoint.sh"]
|
||||||
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"
|
|
||||||
|
|
|
||||||
|
|
@ -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
39
plejd/entrypoint.sh
Normal 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
|
||||||
14
plejd/options.json.template
Normal file
14
plejd/options.json.template
Normal 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
|
||||||
|
}
|
||||||
|
|
@ -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'
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
#!/usr/bin/with-contenv bashio
|
|
||||||
|
|
||||||
bashio::log.info 'Running add-on'
|
|
||||||
exec node /plejd/main.js
|
|
||||||
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Unofficial Plejd Add-on",
|
|
||||||
"url": "https://github.com/icanos/hassio-plejd",
|
|
||||||
"maintainer": "Marcus Westin <marcus@sekurbit.se>"
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue