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