hack: running socat and z2mqtt in one container with supervisor
This commit is contained in:
98
apps/smarthome/Dockerfile
Normal file
98
apps/smarthome/Dockerfile
Normal 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"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
8
apps/smarthome/socat/Dockerfile
Normal file
8
apps/smarthome/socat/Dockerfile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
ARG VERSION=1.7.3.2
|
||||||
|
|
||||||
|
RUN apk --no-cache add socat
|
||||||
|
#=${VERSION}
|
||||||
|
|
||||||
|
ENTRYPOINT ["socat"]
|
||||||
13
apps/smarthome/supervisor.conf
Normal file
13
apps/smarthome/supervisor.conf
Normal 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
|
||||||
120
apps/smarthome/zwave2mqtt.yaml
Normal file
120
apps/smarthome/zwave2mqtt.yaml
Normal 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
|
||||||
Reference in New Issue
Block a user