docker support rework

- Moved docker related files to seperate directory.
- Added CircleCI config file
pull/91/head
BIBOLV 2020-03-03 20:40:35 +02:00
rodzic 6f32c281d1
commit 8b3bdffa47
7 zmienionych plików z 236 dodań i 16 usunięć

Wyświetl plik

@ -0,0 +1,108 @@
version: 2
jobs:
amd64:
machine:
enabled: true
steps:
- checkout
- run:
command: |
if [[ ! $CIRCLE_BRANCH ]]
then
DOCKER_TAG=release-$CIRCLE_TAG
else
DOCKER_TAG=latest
fi
sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
sudo docker build --pull -t $DOCKERHUB_REPO:$DOCKER_TAG-amd64 -f docker/Dockerfile .
sudo docker push $DOCKERHUB_REPO:$DOCKER_TAG-amd64
armhf:
machine:
enabled: true
steps:
- checkout
- run:
command: |
if [[ ! $CIRCLE_BRANCH ]]
then
DOCKER_TAG=release-$CIRCLE_TAG
else
DOCKER_TAG=latest
fi
sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset
sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
sudo docker build --pull -t $DOCKERHUB_REPO:$DOCKER_TAG-armhf -f docker/Dockerfile.armhf .
sudo docker push $DOCKERHUB_REPO:$DOCKER_TAG-armhf
arm64v8:
machine:
enabled: true
steps:
- checkout
- run:
command: |
if [[ ! $CIRCLE_BRANCH ]]
then
DOCKER_TAG=release-$CIRCLE_TAG
else
DOCKER_TAG=latest
fi
sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset
sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
sudo docker build --pull -t $DOCKERHUB_REPO:$DOCKER_TAG-arm64v8 -f docker/Dockerfile.arm64v8 .
sudo docker push $DOCKERHUB_REPO:$DOCKER_TAG-arm64v8
multiarch:
machine:
enabled: true
image: circleci/classic:201808-01
steps:
- run:
command: |
if [[ ! $CIRCLE_BRANCH ]]
then
DOCKER_TAG=release-$CIRCLE_TAG
else
DOCKER_TAG=latest
fi
# Turn on Experimental features
sudo mkdir $HOME/.docker
sudo sh -c 'echo "{ \"experimental\": \"enabled\" }" >> $HOME/.docker/config.json'
#
sudo docker login --username=$DOCKERHUB_USER --password=$DOCKERHUB_PASS
#
sudo docker manifest create --amend $DOCKERHUB_REPO:$DOCKER_TAG $DOCKERHUB_REPO:$DOCKER_TAG-amd64 $DOCKERHUB_REPO:$DOCKER_TAG-armhf $DOCKERHUB_REPO:$DOCKER_TAG-arm64v8
sudo docker manifest annotate $DOCKERHUB_REPO:$DOCKER_TAG $DOCKERHUB_REPO:$DOCKER_TAG-amd64 --os linux --arch amd64
sudo docker manifest annotate $DOCKERHUB_REPO:$DOCKER_TAG $DOCKERHUB_REPO:$DOCKER_TAG-armhf --os linux --arch arm --variant v7
sudo docker manifest annotate $DOCKERHUB_REPO:$DOCKER_TAG $DOCKERHUB_REPO:$DOCKER_TAG-arm64v8 --os linux --arch arm64 --variant v8
sudo docker manifest push $DOCKERHUB_REPO:$DOCKER_TAG -p
workflows:
version: 2
publish:
jobs:
- amd64:
filters:
branches:
only: master
tags:
only: /^\d+\.\d+\.\d+$/
- armhf:
filters:
branches:
only: master
tags:
only: /^\d+\.\d+\.\d+$/
- arm64v8:
filters:
branches:
only: master
tags:
only: /^\d+\.\d+\.\d+$/
- multiarch:
requires:
- amd64
- armhf
- arm64v8
filters:
branches:
only: master
tags:
only: /^\d+\.\d+\.\d+$/

Wyświetl plik

@ -1,14 +0,0 @@
FROM alpine:latest AS build
RUN apk add --no-cache alpine-sdk
RUN git clone https://github.com/weetmuts/wmbusmeters.git
WORKDIR /wmbusmeters
RUN make
FROM alpine:latest as scratch
ENV QEMU_EXECVE=1
RUN apk add --no-cache mosquitto-clients libstdc++
WORKDIR /wmbusmeters
COPY --from=build /wmbusmeters/build/wmbusmeters /wmbusmeters/wmbusmeters
COPY docker-entrypoint.sh /wmbusmeters/docker-entrypoint.sh
VOLUME /wmbusmeters_data/
CMD ["sh", "/wmbusmeters/docker-entrypoint.sh"]

19
docker/Dockerfile 100644
Wyświetl plik

@ -0,0 +1,19 @@
FROM multiarch/alpine:amd64-latest-stable AS build
RUN apk add --no-cache alpine-sdk gcc
RUN git clone https://github.com/weetmuts/wmbusmeters.git && \
git clone https://github.com/xaelsouth/rtl-wmbus.git
WORKDIR /wmbusmeters
RUN make
WORKDIR /rtl-wmbus
RUN make release && chmod 755 build/rtl_wmbus
FROM multiarch/alpine:amd64-latest-stable as scratch
ENV QEMU_EXECVE=1
RUN apk add --no-cache mosquitto-clients libstdc++ curl libusb && \
apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing rtl-sdr
WORKDIR /wmbusmeters
COPY --from=build /wmbusmeters/build/wmbusmeters /wmbusmeters/wmbusmeters
COPY --from=build /rtl-wmbus/build/rtl_wmbus /usr/bin/rtl_wmbus
COPY docker/docker-entrypoint.sh /wmbusmeters/docker-entrypoint.sh
VOLUME /wmbusmeters_data/
CMD ["sh", "/wmbusmeters/docker-entrypoint.sh"]

Wyświetl plik

@ -0,0 +1,19 @@
FROM multiarch/alpine:arm64-latest-stable AS build
RUN apk add --no-cache alpine-sdk gcc
RUN git clone https://github.com/weetmuts/wmbusmeters.git && \
git clone https://github.com/xaelsouth/rtl-wmbus.git
WORKDIR /wmbusmeters
RUN make
WORKDIR /rtl-wmbus
RUN make release && chmod 755 build/rtl_wmbus
FROM multiarch/alpine:arm64-latest-stable as scratch
ENV QEMU_EXECVE=1
RUN apk add --no-cache mosquitto-clients libstdc++ curl libusb && \
apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing rtl-sdr
WORKDIR /wmbusmeters
COPY --from=build /wmbusmeters/build/wmbusmeters /wmbusmeters/wmbusmeters
COPY --from=build /rtl-wmbus/build/rtl_wmbus /usr/bin/rtl_wmbus
COPY docker/docker-entrypoint.sh /wmbusmeters/docker-entrypoint.sh
VOLUME /wmbusmeters_data/
CMD ["sh", "/wmbusmeters/docker-entrypoint.sh"]

Wyświetl plik

@ -0,0 +1,19 @@
FROM multiarch/alpine:armhf-latest-stable AS build
RUN apk add --no-cache alpine-sdk gcc
RUN git clone https://github.com/weetmuts/wmbusmeters.git && \
git clone https://github.com/xaelsouth/rtl-wmbus.git
WORKDIR /wmbusmeters
RUN make
WORKDIR /rtl-wmbus
RUN make release && chmod 755 build/rtl_wmbus
FROM multiarch/alpine:armhf-latest-stable as scratch
ENV QEMU_EXECVE=1
RUN apk add --no-cache mosquitto-clients libstdc++ curl libusb && \
apk add --no-cache -X http://dl-cdn.alpinelinux.org/alpine/edge/testing rtl-sdr
WORKDIR /wmbusmeters
COPY --from=build /wmbusmeters/build/wmbusmeters /wmbusmeters/wmbusmeters
COPY --from=build /rtl-wmbus/build/rtl_wmbus /usr/bin/rtl_wmbus
COPY docker/docker-entrypoint.sh /wmbusmeters/docker-entrypoint.sh
VOLUME /wmbusmeters_data/
CMD ["sh", "/wmbusmeters/docker-entrypoint.sh"]

69
docker/README.md 100644
Wyświetl plik

@ -0,0 +1,69 @@
# wmbusmeters
The program receives and decodes C1,T1 or S1 telegrams
(using the wireless mbus protocol) to acquire
utility meter readings. The readings can then be published using
MQTT, curled to a REST api, inserted into a database or stored in a log file.
[FAQ/WIKI/MANUAL pages](https://github.com/weetmuts/wmbusmeters)
- Supported architectures
- ARMv7 32-bit (`arm32v7`)
- ARMv8 64-bit (`arm64v8`)
- Linux x86-64 (`amd64`)
## Running the wmbusmeters container
### Pre-requisite
Before running the command that creates the wmbusmeters docker container, you must add udev rules to create usb device symlink in order to have persistent link to device across host restarts and reconnect usb device:
```
cat <<EOF > /etc/udev/rules.d/99-wmbus-usb-serial.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="im871a", MODE="0660", GROUP="docker"
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="amb8465", MODE="0660", GROUP="docker"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2047", ATTRS{idProduct}=="0863", SYMLINK+="rfmrx2", MODE="0660", GROUP="docker"
EOF
```
> For RTLSDR symlink passing to docker image is not working due to fact that rtl_ binaries are looking for full usb bus path in system to identify device. Full usb bus path should be passed to docker `--device=/dev/bus/usb/002/117` for example and in wmbusmeters config file `device=auto` should be changed to `device=rtlwmbus`
### Command line container download and run
```
docker run -d \
--name=wmbusmeters \
--restart=always \
-v /etc/localtime:/etc/localtime:ro \
-v /opt/wmbusmeters:/wmbusmeters_data \
--device=/dev/im871a \
weetmuts/wmbusmeters
```
### Command line Options
| Parameter | Description |
| ------------ | ------------- |
| --name=wmbusmeters | Names the container "wmbusmeters". |
| --restart=always | Start the container when Docker starts (i.e. on boot/reboot). |
| -v /etc/localtime:/etc/localtime:ro | Ensure the container has the correct local time. |
| -v /opt/wmbusmeters:/wmbusmeters_data | Bind mount /opt/wmbusmeters (or the directory of your choice) into the container for persistent storage that will contain configuration and log files. |
| --device=/dev/im871a | Pass the device at ttyUSB0 into the container for use by wmbusmeters (you may need to change path to your device ). |
> Specify device in configuration file if wmbusmeters does not find device by changeing `device=auto` to `device=/dev/im871a` for example.
If you are using docker-compose.yml file you may also copy/paste the following into your existing docker-compose.yml, modifying the options as required (omit the version and services lines as your docker-compose.yml will already contain these).
```
version: "2"
services:
wmbusmeters:
image: weetmuts/wmbusmeters
container_name: wmbusmeters
restart: always
volumes:
- /opt/wmbusmeters:/wmbusmeters_data
- /etc/localtime:/etc/localtime:ro
devices:
- /dev/im871a
```
Then, you can do docker-compose pull to pull the latest weetmuts/wmbusmeters image, docker-compose up -d to start the wmbusmeters container service, and docker-compose down to stop the wmbusmeters service and delete the container. Note that these commands will also pull, start, and stop any other services defined in docker-compose.yml.
### Issues / Contributing
Please raise any issues with this container at its [GitHub repo](https://github.com/weetmuts/wmbusmeters)

Wyświetl plik

@ -1,7 +1,7 @@
#!/bin/sh
[ ! -d "/wmbusmeters_data/logs/meter_readings" ] && mkdir -p /wmbusmeters_data/logs/meter_readings
[ ! -d "/wmbusmeters_data/etc/wmbusmeters.d" ] && mkdir -p /wmbusmeters_data/etc/wmbusmeters.d
[ ! -d /wmbusmeters_data/logs/meter_readings ] && mkdir -p /wmbusmeters_data/logs/meter_readings
[ ! -d /wmbusmeters_data/etc/wmbusmeters.d ] && mkdir -p /wmbusmeters_data/etc/wmbusmeters.d
[ ! -f /wmbusmeters_data/etc/wmbusmeters.conf ] && echo -e "loglevel=normal\ndevice=auto\nlistento=t1\nlogtelegrams=false\nformat=json\nmeterfiles=/wmbusmeters_data/logs/meter_readings\nmeterfilesaction=overwrite\nlogfile=/wmbusmeters_data/logs/wmbusmeters.log" > /wmbusmeters_data/etc/wmbusmeters.conf
/wmbusmeters/wmbusmeters --useconfig=/wmbusmeters_data