multiarch

This commit is contained in:
buanet
2019-10-22 14:22:27 +02:00
parent abbb905616
commit e1268aa27c
21 changed files with 916 additions and 121 deletions

View File

@@ -1 +1 @@
v3.1.2beta
v3.1.3beta

105
.travis.yml Normal file
View File

@@ -0,0 +1,105 @@
sudo: required
branches:
only:
- master
- beta
services:
- docker
language: bash
env:
global:
- secure: "LnAvKBxbcqOz650+gb2BTLvhHR1t9PTCQv274IWIGLHqHB9u6mgM0wRpr8MR7mzxpi21QjFelkc1XIkRKR4w07+1OR259+lNYAIGjITKA7iIr1/MVgt0MGlclA6AXQGMV2398TLvkmd/3egvbjBYm7wwmcESnI43w050qhaygQR2PY7bwA/1K4O7LI3FVFPRu2Q78QK/PfLAy2923k+eTtwFstz1q/CmySKpAWNOvUthX2WcZbQOXRgr7+OZrSVwcqReu0ZUfuBp79nMZcXAXxPBu7RelP3GaFMsyxMGJlrLIlv97pQLOaoJ2T9/ZmvDqEtFmi6vzuukDGsWmZx13ZUiEAn+XFQUtpACf77h61b6jC2lzqXQlSJG7Uy2W2f0BPMBSQelVxoiONbzyjtptcjTX+xb0jnyTjQgOo2IZa8f8D55D+XsRJfc25u77323iH2x8blESslW3L52XZDXno0nwoa9LCj5bjDVlQ2jMpzedj88yjk9ss6HUwL/xDThmV74f/tL9R7n7M9WsT4RBkBIOOce/yRKF0rhGZDXY+uC8dg0mTYWeSXOJPmqIi59lZyKYR5WBupdts4/Q3b+mI7BAX8HTxjHw450G0iX1Dh5MSf3kgKoPbu03CC7l+XPgRVu9j4brUQ6uN9DVCjomlDzJzMN6EFR+meSIwhUR8Y="
- secure: "eJui3AAugMETkg+E5CAN3F7707/WG9Ueq7rTE6QBuSFuLprhbTwZJGRCuf6iYuwQeHfUyP3JJDsUI1aasnkdLMr2sgKpNhmJ93J/8pCzlNDWbzskPAsIZ3vvXW0Dvcg9ALN7RBeG9fyOoJW2RmhQYE4oqIZQDXX/qBzDZbTzclB8O74ENu2M7hiQtKieYN/hrbmBVgLftScvbClBIwR+yCSMuan9ivyoiZnRq9RxoWpiyi+U+45A4jTO7ZWvSYpF4Rj6QlJyx4bfEhscvOwP5Vg834SKgBFU82HjFofKcH0jMeoH0ohFmpgEhrtFF3BF3cMPrz3dGJTt3Jwf3DUuLmBeN/im4omqVlysTq2AaTdrIDMnBP0sQUekKcXeqOwMZxFx4nm5cl86VAfa/DeqjuXabv2LEwidHxHRziuzwpzsRMCF1Q5EU56jyFCaKMXwzlTCrRvYNRhk+y2rdWatvOnnmsin7OmgDBY3PcFLDR3gGb4hqLt1ZE5+LaPofXWx3AF4k/Ovtaw5gaVzA4xoMs4w0jBIUl8GhutqVpYYDkjETIy47Nxf2QBBLvnSZR0eNBzA3Qd3j6RswFsEjDiB3UcsznlNmM+CGj1OzqkiIX7ggW+C05KMpyGjhugk90TjMh7HH/MmZD0FZlYvyJHb3EmAe4jgyZ3B6MU86BpjG0c="
- VERSION="$(cat .VERSION)"
before_install:
- wget https://github.com/estesp/manifest-tool/releases/download/v0.7.0/manifest-tool-linux-amd64 -O manifest-tool
- chmod +x manifest-tool
- docker run --rm --privileged multiarch/qemu-user-static:register
- echo "$HUB_PASS" | docker login -u "$HUB_USER" --password-stdin
jobs:
include:
- stage: Build images
env:
- ARCH=amd64
- JOB_NAME="Build images"
script:
- sed -i "s/\$VERSION/${VERSION}/g" $ARCH/scripts/iobroker_startup.sh
- docker build -t "buanet/iobroker-testing:$VERSION-$ARCH" ./amd64
- stage: Build images
env:
- ARCH=aarch64
- JOB_NAME="Build images"
script:
- docker run --rm --privileged multiarch/qemu-user-static:register --reset
- sed -i "s/\$VERSION/${VERSION}/g" $ARCH/scripts/iobroker_startup.sh
- docker build -t "buanet/iobroker-testing:$VERSION-$ARCH" ./aarch64
- stage: Build images
env:
- ARCH=armv7hf
- JOB_NAME="Build images"
script:
- docker run --rm --privileged multiarch/qemu-user-static:register --reset
- sed -i "s/\$VERSION/${VERSION}/g" $ARCH/scripts/iobroker_startup.sh
- docker build -t "buanet/iobroker-testing:$VERSION-$ARCH" ./armv7hf
- stage: Manifest
env:
- JOB_NAME="Manifest"
script:
- echo Placeholder
after_success:
# tag and push built images
- >
if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$JOB_NAME" == "Build images" ] ; then
docker push buanet/iobroker-testing:$VERSION-$ARCH
fi
if [ "$TRAVIS_BRANCH" == "beta" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$JOB_NAME" == "Build images" ] ; then
docker push buanet/iobroker-testing:$VERSION-$ARCH
fi
# update repository manifest for multiarch and push to hub
- >
if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$JOB_NAME" == "Manifest" ]; then
cat manifest.yml | sed "s/\$VERSION/${VERSION}/g" > manifest.yaml
#manifest for image: buanet/iobroker-testing:version
cat manifest.yaml | sed "s/\$DOCKERTAG/${VERSION}/g" > manifestversion.yaml
#manifest for image: buanet/iobroker-testing:latest
cat manifest.yaml | sed "s/\$DOCKERTAG/latest/g" > manifestlatest.yaml
#push to hub
mv manifestversion.yaml iobroker-testing.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker-testing.yaml
mv manifestlatest.yaml iobroker-testing.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker-testing.yaml
fi
if [ "$TRAVIS_BRANCH" == "beta" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$JOB_NAME" == "Manifest" ]; then
cat manifest.yml | sed "s/\$VERSION/${VERSION}/g" > manifest.yaml
#manifest for image: buanet/iobroker-testing:version
cat manifest.yaml | sed "s/\$DOCKERTAG/${VERSION}/g" > manifestversion.yaml
#manifest for image: buanet/iobroker-testing:beta
cat manifest.yaml | sed "s/\$DOCKERTAG/beta/g" > manifestbeta.yaml
#push to hub
mv manifestversion.yaml iobroker-testing.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker-testing.yaml
mv manifestbeta.yaml iobroker-testing.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker-testing.yaml
fi

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2017 [André Germann]
Copyright (c) 2017 Andre Germann
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@@ -1,23 +1,33 @@
# docker-iobroker
Docker image for ioBroker (http://iobroker.net) based on debian:stretch (http://hub.docker.com/_/debian/)
# ioBroker for Docker
Source: https://github.com/buanet/docker-iobroker
This project creates a Docker image for running ioBroker in a Docker container. It is made for and tested on a Synology Disk Station 1515+ with DSM 6 and Docker-package installed. But it should also work on other systems with Docker installed!
IoBroker for Docker is an Dockerimage for ioBroker (http://iobroker.net) smarthome software.
It is originally made for, and tested on a Synology Disk Station 1515+ with DSM 6 and Docker-package installed. But it should also work on other systems with Docker installed!
Version 4 now supports running the Image in Docker on the following architectures: amd64, armv7hf, aarch64.
Feel free to ask for more architectures by opening an github-issue.
## Important
Switching an existing installation from docker-iobroker-image v1 to v2 or greater means switching iobroker itself from node6 to node8! This requires additional steps inside ioBroker! After upgrading iobroker-container you have to call "reinstall.sh" for recompiling your installation for the use with node8. For Details see official ioBroker-documentation (http://www.iobroker.net/docu/?page_id=8323&lang=de). Make backup first!!!
The new v4 comes again with a new major node-version (node10)!
If you are updating an existing Installation you have to perform some additional steps inside ioBroker!
After upgrading your iobroker-container you have to call "reinstall.sh" for recompiling your installation for the use with node10!
For Details see official ioBroker-documentation (http://www.iobroker.net/docu/?page_id=8323&lang=de). Make backup first!
## Installation & Usage
## Installation & usage
A detailed tutorial (german, based on new v3.0.0) can be found here: [https://buanet.de](https://buanet.de/2019/05/iobroker-unter-docker-auf-der-synology-diskstation-v3/). Please notice that the old tutorial does no longer work!
A detailed tutorial (german, based on v3.0.0) can be found here: [https://buanet.de](https://buanet.de/2019/05/iobroker-unter-docker-auf-der-synology-diskstation-v3/). Please notice that the old tutorial is outdated and does no longer work!
For discussion and support please visit [ioBroker-forum-thread](http://forum.iobroker.net/viewtopic.php?f=17&t=5089) or use the comments section at the linked tutorial. Please do not contact me directly for any support-reasons. Every support-question should be answered in a public place. Thank you.
## Special Settings
## Special settings and features
In v3.0.0 I added some new features. The following will give some short information about that.
The following will give a short overview.
### Environment Variables
### Environment variables
Since v3 is possible to set some environment variables to configure a new container.
|env|value|description|
|---|---|---|
@@ -32,7 +42,7 @@ In v3.0.0 I added some new features. The following will give some short informat
### Mounting Folder/ Volume
It is now possible to mount an empty folder to /opt/iobroker during first startup of the container. The Startupscript will check this folder and restore content if empty.
It is now possible to mount an empty folder to /opt/iobroker during first startup of the container. The Startupscript will check this folder and restore content if it is empty.
It is absolutely recommended to use a mounted folder or persistent volume for /opt/iobroker folder!
@@ -40,11 +50,15 @@ This also works with mounting a folder containing an existing ioBroker-installat
### Permission Fixer
I added some code for fixing permissions for new iobroker-user. Permission-fixing is called on first start of the container. This might take a few minutes. Please take a look at the logs and be patient!
After some issues with permissions related to the use of a dedicated user for ioBroker, I added some code for fixing permissions on container startup. This might take a few minutes on first startup. Please take a look at the logs and be patient!
## Changelog
### v3.1.2beta (2019-09-03)
### v4.0.0 (2019-10-22)
* v3.1.3beta (2019-10-17)
* enhanced logging of startup-script
* multiarch support (amd64, aarch64, armv7hf)
* v3.1.2beta (2019-09-03)
* using node 10 instead of node 8
* v3.1.1beta (2019-09-02)
* adding env for setting uid/ gid for iobroker-user

85
aarch64/Dockerfile Normal file
View File

@@ -0,0 +1,85 @@
FROM balenalib/aarch64-debian:stretch
MAINTAINER Andre Germann <https://buanet.de>
ENV DEBIAN_FRONTEND noninteractive
# Debugging for multiarch
RUN uname -m
# Install prerequisites
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
acl \
apt-utils \
build-essential \
curl \
git \
gnupg2 \
libcap2-bin \
libpam0g-dev \
libudev-dev \
locales \
procps \
python \
gosu \
unzip \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install node10
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
&& apt-get update && apt-get install -y \
nodejs \
&& rm -rf /var/lib/apt/lists/*
# Generating locales
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
&& locale-gen
# Create scripts directory and copy scripts
RUN mkdir -p /opt/scripts/ \
&& chmod 777 /opt/scripts/
WORKDIR /opt/scripts/
COPY scripts/iobroker_startup.sh iobroker_startup.sh
COPY scripts/setup_avahi.sh setup_avahi.sh
COPY scripts/setup_packages.sh setup_packages.sh
RUN chmod +x iobroker_startup.sh \
&& chmod +x setup_avahi.sh \
&& chmod +x setup_packages.sh
# Install ioBroker
WORKDIR /
RUN apt-get update \
&& curl -sL https://raw.githubusercontent.com/ioBroker/ioBroker/stable-installer/installer.sh | bash - \
&& echo $(hostname) > /opt/iobroker/.install_host \
&& echo $(hostname) > /opt/.firstrun \
&& rm -rf /var/lib/apt/lists/*
# Install node-gyp
WORKDIR /opt/iobroker/
RUN npm config set unsafe-perm true # To fix "Error: could not get uid/gid"
RUN npm install -g node-gyp
# Backup initial ioBroker-folder
RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker
# Setting up iobroker-user
RUN chsh -s /bin/bash iobroker
# Setting up ENVs
ENV DEBIAN_FRONTEND="teletype" \
LANG="de_DE.UTF-8" \
LANGUAGE="de_DE:de" \
LC_ALL="de_DE.UTF-8" \
TZ="Europe/Berlin" \
PACKAGES="nano" \
AVAHI="false" \
SETUID=1000 \
SETGID=1000
# Setting up EXPOSE for Admin
EXPOSE 8081/tcp
# Run startup-script
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]

View File

@@ -0,0 +1,167 @@
#!/bin/bash
# Reading ENV
packages=$PACKAGES
avahi=$AVAHI
uid=$SETUID
gid=$SETGID
# Getting date and time for logging
dati=`date '+%Y-%m-%d %H:%M:%S'`
# Header
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Welcome to your ioBroker-container! -----"
echo "----- Startupscript is now running. -----"
echo "----- Please be patient! -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Debugging information -----"
echo "----- -----"
echo "----- System -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----"
echo "----- -----"
echo "----- Versions -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: $VERSION)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
echo "----- -----"
echo "----- ENV -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Checking and installing additional packages
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 1 of 5: Installing additional packages -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
if [ "$packages" != "" ]
then
echo "The following packages will be installed:" $packages"..."
echo $packages > /opt/scripts/.packages
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
echo "Done."
else
echo "There are no additional packages defined."
fi
echo ' '
# Change directory for next steps
cd /opt/iobroker
# Detecting ioBroker-Installation
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
if [ `ls -1a|wc -l` -lt 3 ]
then
echo "There is no data detected in /opt/iobroker. Restoring..."
tar -xf /opt/initial_iobroker.tar -C /
echo "Done."
else
if [ -f /opt/iobroker/iobroker ]
then
echo "Installation of ioBroker detected in /opt/iobroker."
else
echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!"
echo "Please check/ recreate mounted folder/ volume and restart ioBroker container."
exit 1
fi
fi
echo ' '
# Checking ioBroker-Installation
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 3 of 5: Checking ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Checking for first run and set uid/gid
if [ -f /opt/.firstrun ]
then
echo "This is the first run of a new container. Time for some preparation."
echo ' '
echo "Changing UID to "$uid" and GID to "$gid"..."
usermod -u $uid iobroker
groupmod -g $gid iobroker
rm -f /opt/.firstrun
echo "Done."
else
echo "This is NOT the first run of the container. Some Steps will be skipped."
fi
echo ' '
# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts"
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
chown -R $uid:$gid /opt/iobroker
chown -R $uid:$gid /opt/scripts
echo "Done."
echo ' '
# Backing up original iobroker-file and changing sudo to gosu
echo "Fixing \"sudo-bug\" by replacing sudo with gosu..."
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
chmod 755 /opt/iobroker/iobroker
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
echo "Done."
echo ' '
# Checking for first run of a new installation and renaming ioBroker
if [ -f /opt/iobroker/.install_host ]
then
echo "Looks like this is a new and empty installation of ioBroker."
echo "Hostname needs to be updated to " $(hostname)"..."
sh /opt/iobroker/iobroker host $(cat /opt/iobroker/.install_host)
rm -f /opt/iobroker/.install_host
echo 'Done.'
echo ' '
fi
# Setting up prerequisites for some ioBroker-adapters
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 4 of 5: Applying special settings -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Some adapters have special requirements which can be activated by the use of environment variables."
echo "For more information take a look at readme.md"
echo ' '
# Checking for and setting up avahi-daemon
if [ "$avahi" = "true" ]
then
echo "Avahi-daemon is activated by ENV."
echo "Initializing Avahi-Daemon..."
chmod 764 /opt/scripts/setup_avahi.sh
sh /opt/scripts/setup_avahi.sh
echo 'Done.'
echo ' '
fi
sleep 5
# Starting ioBroker
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 5 of 5: ioBroker startup -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Starting ioBroker..."
echo ' '
#gosu iobroker node --trace-warnings node_modules/iobroker.js-controller/controller.js > /opt/iobroker/iobroker.log 2>&1 &
gosu iobroker node node_modules/iobroker.js-controller/controller.js
# Preventing container restart by keeping a process alive even if iobroker will be stopped
tail -f /dev/null

View File

@@ -4,6 +4,9 @@ MAINTAINER Andre Germann <https://buanet.de>
ENV DEBIAN_FRONTEND noninteractive
# Debugging for multiarch
RUN uname -m
# Install prerequisites
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
acl \
@@ -23,7 +26,7 @@ RUN apt-get update && apt-get upgrade -y && apt-get install -y \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install node8
# Install node10
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
&& apt-get update && apt-get install -y \
nodejs \
@@ -70,9 +73,9 @@ ENV DEBIAN_FRONTEND="teletype" \
LC_ALL="de_DE.UTF-8" \
TZ="Europe/Berlin" \
PACKAGES="nano" \
AVAHI="false" \
SETUID=1000 \
SETGID=1000
AVAHI="false" \
SETUID=1000 \
SETGID=1000
# Setting up EXPOSE for Admin
EXPOSE 8081/tcp

View File

@@ -0,0 +1,167 @@
#!/bin/bash
# Reading ENV
packages=$PACKAGES
avahi=$AVAHI
uid=$SETUID
gid=$SETGID
# Getting date and time for logging
dati=`date '+%Y-%m-%d %H:%M:%S'`
# Header
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Welcome to your ioBroker-container! -----"
echo "----- Startupscript is now running. -----"
echo "----- Please be patient! -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Debugging information -----"
echo "----- -----"
echo "----- System -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----"
echo "----- -----"
echo "----- Versions -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: $VERSION)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
echo "----- -----"
echo "----- ENV -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Checking and installing additional packages
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 1 of 5: Installing additional packages -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
if [ "$packages" != "" ]
then
echo "The following packages will be installed:" $packages"..."
echo $packages > /opt/scripts/.packages
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
echo "Done."
else
echo "There are no additional packages defined."
fi
echo ' '
# Change directory for next steps
cd /opt/iobroker
# Detecting ioBroker-Installation
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
if [ `ls -1a|wc -l` -lt 3 ]
then
echo "There is no data detected in /opt/iobroker. Restoring..."
tar -xf /opt/initial_iobroker.tar -C /
echo "Done."
else
if [ -f /opt/iobroker/iobroker ]
then
echo "Installation of ioBroker detected in /opt/iobroker."
else
echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!"
echo "Please check/ recreate mounted folder/ volume and restart ioBroker container."
exit 1
fi
fi
echo ' '
# Checking ioBroker-Installation
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 3 of 5: Checking ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Checking for first run and set uid/gid
if [ -f /opt/.firstrun ]
then
echo "This is the first run of a new container. Time for some preparation."
echo ' '
echo "Changing UID to "$uid" and GID to "$gid"..."
usermod -u $uid iobroker
groupmod -g $gid iobroker
rm -f /opt/.firstrun
echo "Done."
else
echo "This is NOT the first run of the container. Some Steps will be skipped."
fi
echo ' '
# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts"
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
chown -R $uid:$gid /opt/iobroker
chown -R $uid:$gid /opt/scripts
echo "Done."
echo ' '
# Backing up original iobroker-file and changing sudo to gosu
echo "Fixing \"sudo-bug\" by replacing sudo with gosu..."
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
chmod 755 /opt/iobroker/iobroker
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
echo "Done."
echo ' '
# Checking for first run of a new installation and renaming ioBroker
if [ -f /opt/iobroker/.install_host ]
then
echo "Looks like this is a new and empty installation of ioBroker."
echo "Hostname needs to be updated to " $(hostname)"..."
sh /opt/iobroker/iobroker host $(cat /opt/iobroker/.install_host)
rm -f /opt/iobroker/.install_host
echo 'Done.'
echo ' '
fi
# Setting up prerequisites for some ioBroker-adapters
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 4 of 5: Applying special settings -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Some adapters have special requirements which can be activated by the use of environment variables."
echo "For more information take a look at readme.md"
echo ' '
# Checking for and setting up avahi-daemon
if [ "$avahi" = "true" ]
then
echo "Avahi-daemon is activated by ENV."
echo "Initializing Avahi-Daemon..."
chmod 764 /opt/scripts/setup_avahi.sh
sh /opt/scripts/setup_avahi.sh
echo 'Done.'
echo ' '
fi
sleep 5
# Starting ioBroker
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 5 of 5: ioBroker startup -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Starting ioBroker..."
echo ' '
#gosu iobroker node --trace-warnings node_modules/iobroker.js-controller/controller.js > /opt/iobroker/iobroker.log 2>&1 &
gosu iobroker node node_modules/iobroker.js-controller/controller.js
# Preventing container restart by keeping a process alive even if iobroker will be stopped
tail -f /dev/null

View File

@@ -0,0 +1,35 @@
#!/bin/bash
echo 'Checking avahi-daemon installation state...'
if [ -f /usr/sbin/avahi-daemon ]
then
echo 'Avahi already installed...'
else
echo 'Installing avahi-daemon...'
apt-get update > /opt/scripts/avahi_startup.log 2>&1
apt-get install -y libavahi-compat-libdnssd-dev avahi-daemon >> /opt/scripts/avahi_startup.log 2>&1
rm -rf /var/lib/apt/lists/* >> /opt/scripts/avahi_startup.log 2>&1
echo 'Configuring avahi-daemon...'
sed -i '/^rlimit-nproc/s/^\(.*\)/#\1/g' /etc/avahi/avahi-daemon.conf
echo 'Configuring dbus...'
mkdir /var/run/dbus/
fi
if [ -f /var/run/dbus/pid ];
then
rm -f /var/run/dbus/pid
fi
if [ -f /var/run/avahi-daemon//pid ];
then
rm -f /var/run/avahi-daemon//pid
fi
echo 'Starting dbus...'
dbus-daemon --system
echo 'Starting avahi-daemon...'
/etc/init.d/avahi-daemon start
exit 0

View File

@@ -0,0 +1,8 @@
#!/bin/bash
apt-get update
apt-get install -y $(cat /opt/scripts/.packages)
rm -rf /var/lib/apt/lists/*
rm -f /opt/scripts/.packages
exit 0

85
armv7hf/Dockerfile Normal file
View File

@@ -0,0 +1,85 @@
FROM balenalib/armv7hf-debian:stretch
MAINTAINER Andre Germann <https://buanet.de>
ENV DEBIAN_FRONTEND noninteractive
# Debugging for multiarch
RUN uname -m
# Install prerequisites
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
acl \
apt-utils \
build-essential \
curl \
git \
gnupg2 \
libcap2-bin \
libpam0g-dev \
libudev-dev \
locales \
procps \
python \
gosu \
unzip \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install node8
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
&& apt-get update && apt-get install -y \
nodejs \
&& rm -rf /var/lib/apt/lists/*
# Generating locales
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
&& locale-gen
# Create scripts directory and copy scripts
RUN mkdir -p /opt/scripts/ \
&& chmod 777 /opt/scripts/
WORKDIR /opt/scripts/
COPY scripts/iobroker_startup.sh iobroker_startup.sh
COPY scripts/setup_avahi.sh setup_avahi.sh
COPY scripts/setup_packages.sh setup_packages.sh
RUN chmod +x iobroker_startup.sh \
&& chmod +x setup_avahi.sh \
&& chmod +x setup_packages.sh
# Install ioBroker
WORKDIR /
RUN apt-get update \
&& curl -sL https://raw.githubusercontent.com/ioBroker/ioBroker/stable-installer/installer.sh | bash - \
&& echo $(hostname) > /opt/iobroker/.install_host \
&& echo $(hostname) > /opt/.firstrun \
&& rm -rf /var/lib/apt/lists/*
# Install node-gyp
WORKDIR /opt/iobroker/
RUN npm config set unsafe-perm true # To fix "Error: could not get uid/gid"
RUN npm install -g node-gyp
# Backup initial ioBroker-folder
RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker
# Setting up iobroker-user
RUN chsh -s /bin/bash iobroker
# Setting up ENVs
ENV DEBIAN_FRONTEND="teletype" \
LANG="de_DE.UTF-8" \
LANGUAGE="de_DE:de" \
LC_ALL="de_DE.UTF-8" \
TZ="Europe/Berlin" \
PACKAGES="nano" \
AVAHI="false" \
SETUID=1000 \
SETGID=1000
# Setting up EXPOSE for Admin
EXPOSE 8081/tcp
# Run startup-script
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]

View File

@@ -0,0 +1,167 @@
#!/bin/bash
# Reading ENV
packages=$PACKAGES
avahi=$AVAHI
uid=$SETUID
gid=$SETGID
# Getting date and time for logging
dati=`date '+%Y-%m-%d %H:%M:%S'`
# Header
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Welcome to your ioBroker-container! -----"
echo "----- Startupscript is now running. -----"
echo "----- Please be patient! -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Debugging information -----"
echo "----- -----"
echo "----- System -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" arch: $(uname -m))" && echo " -----"
echo "----- -----"
echo "----- Versions -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" image: $VERSION)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -v))" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
echo "----- -----"
echo "----- ENV -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Checking and installing additional packages
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 1 of 5: Installing additional packages -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
if [ "$packages" != "" ]
then
echo "The following packages will be installed:" $packages"..."
echo $packages > /opt/scripts/.packages
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
echo "Done."
else
echo "There are no additional packages defined."
fi
echo ' '
# Change directory for next steps
cd /opt/iobroker
# Detecting ioBroker-Installation
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
if [ `ls -1a|wc -l` -lt 3 ]
then
echo "There is no data detected in /opt/iobroker. Restoring..."
tar -xf /opt/initial_iobroker.tar -C /
echo "Done."
else
if [ -f /opt/iobroker/iobroker ]
then
echo "Installation of ioBroker detected in /opt/iobroker."
else
echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!"
echo "Please check/ recreate mounted folder/ volume and restart ioBroker container."
exit 1
fi
fi
echo ' '
# Checking ioBroker-Installation
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 3 of 5: Checking ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Checking for first run and set uid/gid
if [ -f /opt/.firstrun ]
then
echo "This is the first run of a new container. Time for some preparation."
echo ' '
echo "Changing UID to "$uid" and GID to "$gid"..."
usermod -u $uid iobroker
groupmod -g $gid iobroker
rm -f /opt/.firstrun
echo "Done."
else
echo "This is NOT the first run of the container. Some Steps will be skipped."
fi
echo ' '
# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts"
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
chown -R $uid:$gid /opt/iobroker
chown -R $uid:$gid /opt/scripts
echo "Done."
echo ' '
# Backing up original iobroker-file and changing sudo to gosu
echo "Fixing \"sudo-bug\" by replacing sudo with gosu..."
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
chmod 755 /opt/iobroker/iobroker
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
echo "Done."
echo ' '
# Checking for first run of a new installation and renaming ioBroker
if [ -f /opt/iobroker/.install_host ]
then
echo "Looks like this is a new and empty installation of ioBroker."
echo "Hostname needs to be updated to " $(hostname)"..."
sh /opt/iobroker/iobroker host $(cat /opt/iobroker/.install_host)
rm -f /opt/iobroker/.install_host
echo 'Done.'
echo ' '
fi
# Setting up prerequisites for some ioBroker-adapters
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 4 of 5: Applying special settings -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Some adapters have special requirements which can be activated by the use of environment variables."
echo "For more information take a look at readme.md"
echo ' '
# Checking for and setting up avahi-daemon
if [ "$avahi" = "true" ]
then
echo "Avahi-daemon is activated by ENV."
echo "Initializing Avahi-Daemon..."
chmod 764 /opt/scripts/setup_avahi.sh
sh /opt/scripts/setup_avahi.sh
echo 'Done.'
echo ' '
fi
sleep 5
# Starting ioBroker
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 5 of 5: ioBroker startup -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Starting ioBroker..."
echo ' '
#gosu iobroker node --trace-warnings node_modules/iobroker.js-controller/controller.js > /opt/iobroker/iobroker.log 2>&1 &
gosu iobroker node node_modules/iobroker.js-controller/controller.js
# Preventing container restart by keeping a process alive even if iobroker will be stopped
tail -f /dev/null

View File

@@ -0,0 +1,35 @@
#!/bin/bash
echo 'Checking avahi-daemon installation state...'
if [ -f /usr/sbin/avahi-daemon ]
then
echo 'Avahi already installed...'
else
echo 'Installing avahi-daemon...'
apt-get update > /opt/scripts/avahi_startup.log 2>&1
apt-get install -y libavahi-compat-libdnssd-dev avahi-daemon >> /opt/scripts/avahi_startup.log 2>&1
rm -rf /var/lib/apt/lists/* >> /opt/scripts/avahi_startup.log 2>&1
echo 'Configuring avahi-daemon...'
sed -i '/^rlimit-nproc/s/^\(.*\)/#\1/g' /etc/avahi/avahi-daemon.conf
echo 'Configuring dbus...'
mkdir /var/run/dbus/
fi
if [ -f /var/run/dbus/pid ];
then
rm -f /var/run/dbus/pid
fi
if [ -f /var/run/avahi-daemon//pid ];
then
rm -f /var/run/avahi-daemon//pid
fi
echo 'Starting dbus...'
dbus-daemon --system
echo 'Starting avahi-daemon...'
/etc/init.d/avahi-daemon start
exit 0

View File

@@ -0,0 +1,8 @@
#!/bin/bash
apt-get update
apt-get install -y $(cat /opt/scripts/.packages)
rm -rf /var/lib/apt/lists/*
rm -f /opt/scripts/.packages
exit 0

19
manifest.yml Normal file
View File

@@ -0,0 +1,19 @@
image: buanet/iobroker-testing:$DOCKERTAG
manifests:
-
image: buanet/iobroker-testing:$VERSION-amd64
platform:
architecture: amd64
os: linux
-
image: buanet/iobroker-testing:$VERSION-aarch64
platform:
architecture: arm64
variant: v8
os: linux
-
image: buanet/iobroker-testing:$VERSION-armv7hf
platform:
architecture: arm
variant: v7
os: linux

View File

@@ -1,103 +0,0 @@
#!/bin/bash
# Reading env-variables
packages=$PACKAGES
avahi=$AVAHI
uid=$SETUID
gid=$SETGID
# Getting date and time for logging
dati=`date '+%Y-%m-%d %H:%M:%S'`
# Information
echo ''
echo '----------------------------------------'
echo '----- Image-Version: 3.1.2beta -----'
echo '----- '$dati' -----'
echo '----------------------------------------'
echo ''
echo 'Startupscript running...'
# Checking and installing additional packages
if [ "$packages" != "" ]
then
echo ''
echo 'Installing additional packages...'
echo 'The following packages will be installed:' $packages
echo $packages > /opt/scripts/.packages
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
echo 'Done.'
fi
cd /opt/iobroker
# Checking and restoring ioBroker to empty mounted folder
if [ `ls -1a|wc -l` -lt 3 ]
then
echo ''
echo 'Directory /opt/iobroker is empty!'
echo 'Restoring data from image...'
tar -xf /opt/initial_iobroker.tar -C /
echo 'Done.'
fi
# Checking for first run and set uid/gid and permissions
if [ -f /opt/.firstrun ]
then
echo ''
echo 'Changing UID/GID and permissions upon first run...'
echo 'Setting UID to '$uid' and GID to '$gid'...'
usermod -u $uid iobroker
groupmod -g $gid iobroker
echo 'Done.'
echo 'Setting folder permissions (This might take a while! Please be patient!)...'
chown -R $uid:$gid /opt/iobroker
chown -R $uid:$gid /opt/scripts
rm -f /opt/.firstrun
echo 'Done.'
fi
# Backing up original iobroker-file and changing sudo to gosu
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
chmod 755 /opt/iobroker/iobroker
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
# Checking for first run of a new installation and renaming ioBroker
if [ -f /opt/iobroker/.install_host ]
then
echo ''
echo 'This is the first run of an new installation...'
echo 'Hostname given is' $(hostname)'...'
echo 'Renaming ioBroker...'
sh /opt/iobroker/iobroker host $(cat /opt/iobroker/.install_host)
rm -f /opt/iobroker/.install_host
echo 'Done.'
fi
# Checking for and setting up avahi-daemon
if [ "$avahi" = "true" ]
then
echo ''
echo 'Initializing Avahi-Daemon...'
chmod 764 /opt/scripts/setup_avahi.sh
sh /opt/scripts/setup_avahi.sh
echo 'Done.'
fi
sleep 5
# Starting ioBroker
echo ''
echo 'Starting ioBroker...'
echo ''
echo '----------------------------------------'
echo '------- ioBroker Logging -------'
echo '----------------------------------------'
echo ''
#touch /opt/iobroker/iobroker.log
#gosu iobroker node --trace-warnings node_modules/iobroker.js-controller/controller.js > /opt/iobroker/iobroker.log 2>&1 &
gosu iobroker node node_modules/iobroker.js-controller/controller.js
# Preventing container restart by keeping a process alive even if iobroker will be stopped
tail -f /dev/null