hack: running socat and z2mqtt in one container with supervisor

This commit is contained in:
2020-11-10 22:32:33 +01:00
parent e8c1fa3cef
commit bb4fb01b7c
5 changed files with 239 additions and 0 deletions

98
apps/smarthome/Dockerfile Normal file
View File

@@ -0,0 +1,98 @@
# ----------------
# STEP 1:
# https://lobradov.github.io/Building-docker-multiarch-images/
# Build Openzwave and Zwave2Mqtt pkg
# All result files will be put in /dist folder
FROM node:8.15.1-alpine AS build
# Set the commit of Zwave2Mqtt to checkout when cloning the repo
ENV Z2M_VERSION=9cc3740740b57f1e896139b5ffdb25be7576ad58
# Install required dependencies
RUN apk update && apk --no-cache add \
gnutls \
gnutls-dev \
libusb \
eudev \
# Install build dependencies
&& apk --no-cache --virtual .build-deps add \
coreutils \
eudev-dev \
build-base \
git \
python \
bash \
libusb-dev \
linux-headers \
wget \
tar \
openssl \
make \
socat
# Build binaries and move them to /dist/lib
RUN cd /root \
&& wget http://old.openzwave.com/downloads/openzwave-1.4.1.tar.gz \
&& tar zxvf openzwave-*.gz \
&& cd openzwave-* && make && make install \
&& mkdir -p /dist/lib \
&& mv libopenzwave.so* /dist/lib/
COPY bin/package.sh /root/package.sh
# Clone Zwave2Mqtt build pkg files and move them to /dist/pkg
RUN npm config set unsafe-perm true && npm install -g pkg \
&& cd /root \
&& git clone https://github.com/OpenZWave/Zwave2Mqtt.git \
&& cd Zwave2Mqtt \
&& git checkout ${Z2M_VERSION} \
&& npm install \
&& npm run build
RUN cd /root \
&& chmod +x package.sh && ./package.sh \
&& mkdir -p /dist/pkg \
&& mv /root/Zwave2Mqtt/pkg/* /dist/pkg
# Get last config DB from main repo and move files to /dist/db
RUN cd /root \
&& git clone https://github.com/OpenZWave/open-zwave.git \
&& cd open-zwave \
&& mkdir -p /dist/db \
&& mv config/* /dist/db
# Clean up
RUN rm -R /root/* && apk del .build-deps
# ----------------
# STEP 2:
# Run a minimal alpine image
FROM alpine:latest
LABEL maintainer="zoide"
RUN apk update && apk add --no-cache \
libstdc++ \
libgcc \
libusb \
eudev
# Copy files from previous build stage
COPY --from=build /dist/lib/ /lib/
COPY --from=build /dist/db/ /usr/local/etc/openzwave/
COPY --from=build /dist/pkg /usr/src/app
# supervisor base configuration
ADD supervisor.conf /etc/supervisor.conf
# Set enviroment
ENV LD_LIBRARY_PATH /lib
EXPOSE 8091
CMD ["supervisord", "-c", "/etc/supervisor.conf"]
#CMD ["/usr/src/app/zwave2mqtt"]

View File

@@ -0,0 +1,8 @@
FROM alpine:latest
ARG VERSION=1.7.3.2
RUN apk --no-cache add socat
#=${VERSION}
ENTRYPOINT ["socat"]

View File

@@ -0,0 +1,13 @@
[supervisord]
nodaemon=true
[program:socat]
command=/usr/bin/socat -d -d -d pty,link=/dev/ttySER2NET0,raw,user=root,group=root,mode=660 tcp:auto:3333
killasgroup=true
stopasgroup=true
redirect_stderr=true
[program:zwave2mqtt]
directory=/usr/src/app
command=/usr/src/app/zwave2mqtt
redirect_stderr=true

View File

@@ -0,0 +1,120 @@
## FROM: https://github.com/OpenZWave/Zwave2Mqtt
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: zwave2mqtt
spec:
replicas: 1
selector:
matchLabels:
name: zwave2mqtt
template:
metadata:
labels:
name: zwave2mqtt
spec:
containers:
- name: zwave2mqtt
image: docker-registry.lan/zwave2mqtt:arm64
livenessProbe:
failureThreshold: 12
httpGet:
httpHeaders:
- name: Accept
value: text/plain
path: /
port: http
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 2
ports:
- containerPort: 8091
name: http
protocol: TCP
resources:
limits:
cpu: '1'
memory: 512Mi
requests:
cpu: '1'
memory: 200Mi
securityContext:
allowPrivilegeEscalation: true
privileged: true
volumeMounts:
- mountPath: /usr/src/app/store
name: data
# - mountPath: /usr/local/etc/openzwave
# name: ozwdatabase
# - mountPath: /usr/src/app/store/settings.json <-- if putting your settings.json in a secret
# name: config
# readOnly: true
# subPath: settings.json
# nodeSelector:
# kubernetes.io/hostname: stick1 #<--- the name of your cluster node that the zwave usb stick in
# - name: socat
# image: docker-registry.lan/socat:arm64
# args:
# - pty,link=/dev/ttySER2NET0,raw,user=root,group=root,mode=660
# - tcp:auto:3333
# securityContext:
# allowPrivilegeEscalation: true
# privileged: true
volumes:
# - name: config <-- if putting your settings.json in a secret
# secret:
# defaultMode: 420
# secretName: zwave2mqtt
#- name: zwavestick
# hostPath:
# path: /dev/ttyACM0
# type: File
- name: data
persistentVolumeClaim:
claimName: zwave2mqtt-storage
# - name: ozwdatabase
# hostPath:
# path: /zwave2mqtt/database
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: zwave2mqtt-storage
labels:
app: zwave2mqtt
spec:
storageClassName: nfs-ssd
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Mi
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: zwave2mqtt
spec:
rules:
- host: zwave.lan
http:
paths:
- backend:
serviceName: zwave2mqtt
servicePort: http
---
apiVersion: v1
kind: Service
metadata:
name: zwave2mqtt
spec:
ports:
- name: http
port: 80
targetPort: http
selector:
name: zwave2mqtt