mirror of
https://github.com/buanet/ioBroker.docker.git
synced 2025-12-18 10:59:00 +02:00
38
README.md
38
README.md
@@ -32,19 +32,20 @@ The following will give a short overview.
|
|||||||
|
|
||||||
Since v3 is possible to set some environment variables to configure a new container.
|
Since v3 is possible to set some environment variables to configure a new container.
|
||||||
|
|
||||||
|env|value|description|
|
|env|default|description|
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|PACKAGES|package1 package2 package2|seperateed by whitespace; will install the listed packages on startup<br>(be paitient, this may take some time!)|
|
|ADMINPORT|8081|Sets ioBroker-adminport on startup (beta)|
|
||||||
|AVAHI|true|will install and activate avahi-daemon for supporting yahka-adapter|
|
|AVAHI|false|Installs and activates avahi-daemon for supporting yahka-adapter, can be "true" or "false"|
|
||||||
|LANGUAGE|de_DE:de|following locales are pre-generated: de_DE:de, en_US:en|
|
|LANG|de_DE.UTF‑8|The following locales are pre-generated: de_DE.UTF-8, en_US.UTF-8|
|
||||||
|LANG|de_DE.UTF-8|following locales are pre-generated: de_DE.UTF-8, en_US.UTF-8|
|
|LANGUAGE|de_DE:de|The following locales are pre-generated: de_DE:de, en_US:en|
|
||||||
|LC_ALL|de_DE|following locales are pre-generated: de_DE.UTF-8, en_US.UTF-8|
|
|LC_ALL|de_DE|The following locales are pre-generated: de_DE.UTF-8, en_US.UTF-8|
|
||||||
|TZ|Europe/Berlin|all valid Linux-timezones|
|
|PACKAGES|vi|Installs additional packages to your container, needed by some adapters, packages should be seperated by whitespace like "package1 package2 package3"|
|
||||||
|SETUID|1000|for security reasons it might be useful to specify the uid of the containers iobroker user to match an existing user on the docker host|
|
|REDIS|false|Activates redis as states-db on startup, fill with "hostname:port" to set redis connection otherwise use "false"(beta)|
|
||||||
|SETGID|1000|for security reasons it might be useful to specify the gid of the containers iobroker user to match an existing group on the docker host|
|
|SETGID|1000|For security reasons it might be useful to specify the gid of the containers iobroker user to match an existing group on the docker host|
|
||||||
|ZWAVE|false|will install openzwave to support zwave-adapter|
|
|SETUID|1000|For security reasons it might be useful to specify the uid of the containers iobroker user to match an existing user on the docker host|
|
||||||
|ADMINPORT|8081|for setting iobroker adminport (beta feature!)|
|
|TZ|Europe/Berlin|All valid Linux-timezones|
|
||||||
|USBDEVICES|none|for automatically setting permissions on mounted devices like "/dev/ttyACM0". For more than one device separate with ";" (beta feature!)|
|
|USBDEVICES|none|Sets relevant permissions on mounted devices like "/dev/ttyACM0", for more than one device separate with ";" like "/dev/ttyACM0;/dev/ttyACM01" (beta)|
|
||||||
|
|ZWAVE|false|Will install openzwave to support zwave-adapter, can be "true" or "false"|
|
||||||
|
|
||||||
### Mounting Folder/ Volume
|
### Mounting Folder/ Volume
|
||||||
|
|
||||||
@@ -60,11 +61,14 @@ After some issues with permissions related to the use of a dedicated user for io
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
### v4.0.1beta (2019-11-25)
|
### v4.0.2beta (2019-12-10)
|
||||||
* added env for iobroker admin port
|
* added env for activating redis
|
||||||
* added env for usb-devices (setting permissions)
|
* enhancements in startupscript and dockerfile
|
||||||
* updateing prerequisites for iobroker installation
|
* v4.0.1beta (2019-11-25)
|
||||||
* some small codefixes
|
* added env for iobroker admin port
|
||||||
|
* added env for usb-devices (setting permissions)
|
||||||
|
* updateing prerequisites for iobroker installation
|
||||||
|
* some small codefixes
|
||||||
|
|
||||||
### v4.0.0 (2019-10-25)
|
### v4.0.0 (2019-10-25)
|
||||||
* v3.1.4beta (2019-10-23)
|
* v3.1.4beta (2019-10-23)
|
||||||
|
|||||||
@@ -12,31 +12,31 @@ RUN apt-get update && apt-get upgrade -y && apt-get install -y \
|
|||||||
curl \
|
curl \
|
||||||
git \
|
git \
|
||||||
gnupg2 \
|
gnupg2 \
|
||||||
gosu \
|
gosu \
|
||||||
libavahi-compat-libdnssd-dev \
|
libavahi-compat-libdnssd-dev \
|
||||||
libcap2-bin \
|
libcap2-bin \
|
||||||
libpam0g-dev \
|
libpam0g-dev \
|
||||||
libudev-dev \
|
libudev-dev \
|
||||||
locales \
|
locales \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
procps \
|
procps \
|
||||||
python \
|
python \
|
||||||
python-dev \
|
python-dev \
|
||||||
sudo \
|
sudo \
|
||||||
|
udev \
|
||||||
unzip \
|
unzip \
|
||||||
wget \
|
wget \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install node10
|
# Install node10
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
|
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
|
||||||
&& apt-get update && apt-get install -y \
|
&& apt-get update && apt-get install -y nodejs \
|
||||||
nodejs \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Generating locales
|
# Generating locales
|
||||||
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
|
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
|
||||||
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
|
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
|
||||||
&& locale-gen
|
&& locale-gen
|
||||||
|
|
||||||
# Create scripts directory and copy scripts
|
# Create scripts directory and copy scripts
|
||||||
RUN mkdir -p /opt/scripts/ \
|
RUN mkdir -p /opt/scripts/ \
|
||||||
@@ -47,7 +47,7 @@ COPY scripts/setup_avahi.sh setup_avahi.sh
|
|||||||
COPY scripts/setup_packages.sh setup_packages.sh
|
COPY scripts/setup_packages.sh setup_packages.sh
|
||||||
COPY scripts/setup_zwave.sh setup_zwave.sh
|
COPY scripts/setup_zwave.sh setup_zwave.sh
|
||||||
RUN chmod +x iobroker_startup.sh \
|
RUN chmod +x iobroker_startup.sh \
|
||||||
&& chmod +x setup_avahi.sh \
|
&& chmod +x setup_avahi.sh \
|
||||||
&& chmod +x setup_packages.sh
|
&& chmod +x setup_packages.sh
|
||||||
|
|
||||||
# Install ioBroker
|
# Install ioBroker
|
||||||
@@ -70,18 +70,19 @@ RUN chsh -s /bin/bash iobroker \
|
|||||||
&& usermod --home /opt/iobroker iobroker
|
&& usermod --home /opt/iobroker iobroker
|
||||||
|
|
||||||
# Setting up ENVs
|
# Setting up ENVs
|
||||||
ENV DEBIAN_FRONTEND="teletype" \
|
ENV ADMINPORT=8081 \
|
||||||
LANG="de_DE.UTF-8" \
|
AVAHI="false" \
|
||||||
LANGUAGE="de_DE:de" \
|
DEBIAN_FRONTEND="teletype" \
|
||||||
LC_ALL="de_DE.UTF-8" \
|
LANG="de_DE.UTF-8" \
|
||||||
TZ="Europe/Berlin" \
|
LANGUAGE="de_DE:de" \
|
||||||
PACKAGES="vi" \
|
LC_ALL="de_DE.UTF-8" \
|
||||||
ADMINPORT=8081 \
|
PACKAGES="vi" \
|
||||||
SETUID=1000 \
|
REDIS="false" \
|
||||||
SETGID=1000 \
|
SETGID=1000 \
|
||||||
AVAHI="false" \
|
SETUID=1000 \
|
||||||
ZWAVE="false" \
|
TZ="Europe/Berlin" \
|
||||||
USBDEVICES="none"
|
USBDEVICES="none" \
|
||||||
|
ZWAVE="false"
|
||||||
|
|
||||||
# Run startup-script
|
# Run startup-script
|
||||||
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]
|
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Reading ENV
|
# Reading ENV
|
||||||
packages=$PACKAGES
|
|
||||||
adminport=$ADMINPORT
|
adminport=$ADMINPORT
|
||||||
uid=$SETUID
|
|
||||||
gid=$SETGID
|
|
||||||
zwave=$ZWAVE
|
|
||||||
avahi=$AVAHI
|
avahi=$AVAHI
|
||||||
|
gid=$SETGID
|
||||||
|
packages=$PACKAGES
|
||||||
|
redis=$REDIS
|
||||||
|
uid=$SETUID
|
||||||
usbdevices=$USBDEVICES
|
usbdevices=$USBDEVICES
|
||||||
|
zwave=$ZWAVE
|
||||||
|
|
||||||
# Getting date and time for logging
|
# Getting date and time for logging
|
||||||
dati=`date '+%Y-%m-%d %H:%M:%S'`
|
dati=`date '+%Y-%m-%d %H:%M:%S'`
|
||||||
|
|
||||||
# Header
|
# Logging header
|
||||||
echo ' '
|
echo ' '
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
|
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
|
||||||
@@ -36,23 +37,35 @@ echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -
|
|||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
|
||||||
echo "----- -----"
|
echo "----- -----"
|
||||||
echo "----- ENV -----"
|
echo "----- ENV -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
|
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ADMINPORT: $ADMINPORT)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ADMINPORT: $ADMINPORT)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $ZWAVE)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" REDIS: $REDIS)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $USBDEVICES)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $ZWAVE)" && echo " -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Checking and installing additional packages
|
|
||||||
|
# Not in use
|
||||||
|
# if [ -f /opt/.firstrun ]
|
||||||
|
# rm -f /opt/.firstrun
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
|
# STEP 1 - Preparing container
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 1 of 5: Installing additional packages -----"
|
echo "----- Step 1 of 5: Preparing container -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
# Installing additional packages
|
||||||
if [ "$packages" != "" ]
|
if [ "$packages" != "" ]
|
||||||
then
|
then
|
||||||
|
echo "Installing additional packages is set by ENV."
|
||||||
echo "The following packages will be installed:" $packages"..."
|
echo "The following packages will be installed:" $packages"..."
|
||||||
echo $packages > /opt/scripts/.packages
|
echo $packages > /opt/scripts/.packages
|
||||||
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
|
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
|
||||||
@@ -62,10 +75,26 @@ else
|
|||||||
fi
|
fi
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
# Checking and setting uid/gid
|
||||||
|
if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $gid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $uid ]
|
||||||
|
then
|
||||||
|
echo "Different UID and/ or GID is set by ENV."
|
||||||
|
echo "Changing UID to "$uid" and GID to "$gid"..."
|
||||||
|
usermod -u $uid iobroker
|
||||||
|
groupmod -g $gid iobroker
|
||||||
|
echo "Done."
|
||||||
|
else
|
||||||
|
echo "There are no changes in UID/ GID needed."
|
||||||
|
fi
|
||||||
|
echo ' '
|
||||||
|
|
||||||
# Change directory for next steps
|
# Change directory for next steps
|
||||||
cd /opt/iobroker
|
cd /opt/iobroker
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Detecting ioBroker-Installation
|
# Detecting ioBroker-Installation
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
|
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
@@ -73,42 +102,30 @@ echo ' '
|
|||||||
|
|
||||||
if [ `ls -1a|wc -l` -lt 3 ]
|
if [ `ls -1a|wc -l` -lt 3 ]
|
||||||
then
|
then
|
||||||
echo "There is no data detected in /opt/iobroker. Restoring..."
|
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
|
||||||
tar -xf /opt/initial_iobroker.tar -C /
|
tar -xf /opt/initial_iobroker.tar -C /
|
||||||
echo "Done."
|
echo "Done."
|
||||||
else
|
else
|
||||||
if [ -f /opt/iobroker/iobroker ]
|
if [ -f /opt/iobroker/iobroker ]
|
||||||
then
|
then
|
||||||
echo "Installation of ioBroker detected in /opt/iobroker."
|
echo "Existing installation of ioBroker detected in /opt/iobroker."
|
||||||
else
|
else
|
||||||
echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!"
|
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."
|
echo "Please check/ recreate mounted folder/ volume and restart ioBroker container."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Checking ioBroker-Installation
|
# Checking ioBroker-Installation
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 3 of 5: Checking ioBroker installation -----"
|
echo "----- Step 3 of 5: Checking ioBroker installation -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
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"
|
# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts"
|
||||||
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
|
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
|
||||||
chown -R $uid:$gid /opt/iobroker
|
chown -R $uid:$gid /opt/iobroker
|
||||||
@@ -117,7 +134,7 @@ echo "Done."
|
|||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Backing up original iobroker-file and changing sudo to gosu
|
# Backing up original iobroker-file and changing sudo to gosu
|
||||||
echo "Fixing \"sudo-bug\" by replacing sudo with gosu..."
|
echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..."
|
||||||
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
|
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
|
||||||
chmod 755 /opt/iobroker/iobroker
|
chmod 755 /opt/iobroker/iobroker
|
||||||
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
|
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
|
||||||
@@ -133,29 +150,39 @@ then
|
|||||||
rm -f /opt/iobroker/.install_host
|
rm -f /opt/iobroker/.install_host
|
||||||
echo 'Done.'
|
echo 'Done.'
|
||||||
echo ' '
|
echo ' '
|
||||||
|
elif [ $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ]
|
||||||
|
then
|
||||||
|
echo "Hostname in ioBroker does not match the hostname of this container."
|
||||||
|
echo "Updating hostname to " $(hostname)"..."
|
||||||
|
sh /opt/iobroker/iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*')
|
||||||
|
echo 'Done.'
|
||||||
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Setting up prerequisites for some ioBroker-adapters
|
# Setting up prerequisites for some ioBroker-adapters
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 4 of 5: Applying special settings -----"
|
echo "----- Step 4 of 5: Applying special settings -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
echo "Some adapters have special requirements which can be activated by the use of environment variables."
|
echo "Some adapters have special requirements/ settings which can be activated by the use of environment variables."
|
||||||
echo "For more information take a look at readme.md"
|
echo "For more information take a look at readme.md on Github!"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Checking ENV for Adminport
|
# Checking ENV for Adminport
|
||||||
if [ "$adminport" != "8081" ]
|
if [ "$adminport" != $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ]
|
||||||
then
|
then
|
||||||
echo "Adminport is set by ENV."
|
echo "Adminport set by ENV does not match port configured in ioBroker installation."
|
||||||
echo "Setting Adminport to" $adminport"..."
|
echo "Setting Adminport to" $adminport"..."
|
||||||
iobroker set admin.0 --port $adminport
|
iobroker set admin.0 --port $adminport
|
||||||
echo 'Done.'
|
echo 'Done.'
|
||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Checking for enabled avahi-daemon
|
# Checking ENV for AVAHI
|
||||||
if [ "$avahi" = "true" ]
|
if [ "$avahi" = "true" ]
|
||||||
then
|
then
|
||||||
echo "Avahi-daemon is activated by ENV."
|
echo "Avahi-daemon is activated by ENV."
|
||||||
@@ -165,7 +192,7 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Checking for enabled zwave-support
|
# Checking ENV for Z-WAVE
|
||||||
if [ "$zwave" = "true" ]
|
if [ "$zwave" = "true" ]
|
||||||
then
|
then
|
||||||
echo "Z-Wave is activated by ENV."
|
echo "Z-Wave is activated by ENV."
|
||||||
@@ -175,8 +202,7 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# checking enabled usb-devices
|
# checking ENV for USBDEVICES
|
||||||
|
|
||||||
if [ "$usbdevices" != "none" ]
|
if [ "$usbdevices" != "none" ]
|
||||||
then
|
then
|
||||||
echo "Usb-device-support is activated by ENV."
|
echo "Usb-device-support is activated by ENV."
|
||||||
@@ -192,16 +218,35 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Checking ENV for REDIS
|
||||||
|
if [ "$redis" != "false" ]
|
||||||
|
then
|
||||||
|
echo "Connection to Redis is configured by ENV."
|
||||||
|
echo "Installing prerequisites..."
|
||||||
|
apt-get update 2>&1> /dev/null && apt-get install -y jq 2>&1> /dev/null && rm -rf /var/lib/apt/lists/* 2>&1> /dev/null
|
||||||
|
redisserver=$(echo $redis | sed -E 's/(.*):(.*)/\1/')
|
||||||
|
redisport=$(echo $redis | sed -E 's/(.*):(.*)/\2/')
|
||||||
|
echo "Setting configuration for Redis (Server: "$redisserver", Port: "$redisport") in ioBroker..."
|
||||||
|
cd /opt/iobroker/iobroker-data
|
||||||
|
jq --arg redisserver "$redisserver" --arg redisport "$redisport" '.states.type = "redis" | .states.host = $redisserver | .states.port = $redisport' iobroker.json > iobroker.json.tmp && mv iobroker.json.tmp iobroker.json
|
||||||
|
cd /opt/iobroker
|
||||||
|
echo "Done."
|
||||||
|
echo ' '
|
||||||
|
fi
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Starting ioBroker
|
# Starting ioBroker
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 5 of 5: ioBroker startup -----"
|
echo "----- Step 5 of 5: ioBroker startup -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
echo "Starting ioBroker..."
|
echo "Starting ioBroker..."
|
||||||
echo ' '
|
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
|
gosu iobroker node node_modules/iobroker.js-controller/controller.js
|
||||||
|
|
||||||
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
||||||
|
|||||||
@@ -12,31 +12,31 @@ RUN apt-get update && apt-get upgrade -y && apt-get install -y \
|
|||||||
curl \
|
curl \
|
||||||
git \
|
git \
|
||||||
gnupg2 \
|
gnupg2 \
|
||||||
gosu \
|
gosu \
|
||||||
libavahi-compat-libdnssd-dev \
|
libavahi-compat-libdnssd-dev \
|
||||||
libcap2-bin \
|
libcap2-bin \
|
||||||
libpam0g-dev \
|
libpam0g-dev \
|
||||||
libudev-dev \
|
libudev-dev \
|
||||||
locales \
|
locales \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
procps \
|
procps \
|
||||||
python \
|
python \
|
||||||
python-dev \
|
python-dev \
|
||||||
sudo \
|
sudo \
|
||||||
|
udev \
|
||||||
unzip \
|
unzip \
|
||||||
wget \
|
wget \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install node10
|
# Install node10
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
|
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
|
||||||
&& apt-get update && apt-get install -y \
|
&& apt-get update && apt-get install -y nodejs \
|
||||||
nodejs \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Generating locales
|
# Generating locales
|
||||||
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
|
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
|
||||||
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
|
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
|
||||||
&& locale-gen
|
&& locale-gen
|
||||||
|
|
||||||
# Create scripts directory and copy scripts
|
# Create scripts directory and copy scripts
|
||||||
RUN mkdir -p /opt/scripts/ \
|
RUN mkdir -p /opt/scripts/ \
|
||||||
@@ -47,7 +47,7 @@ COPY scripts/setup_avahi.sh setup_avahi.sh
|
|||||||
COPY scripts/setup_packages.sh setup_packages.sh
|
COPY scripts/setup_packages.sh setup_packages.sh
|
||||||
COPY scripts/setup_zwave.sh setup_zwave.sh
|
COPY scripts/setup_zwave.sh setup_zwave.sh
|
||||||
RUN chmod +x iobroker_startup.sh \
|
RUN chmod +x iobroker_startup.sh \
|
||||||
&& chmod +x setup_avahi.sh \
|
&& chmod +x setup_avahi.sh \
|
||||||
&& chmod +x setup_packages.sh
|
&& chmod +x setup_packages.sh
|
||||||
|
|
||||||
# Install ioBroker
|
# Install ioBroker
|
||||||
@@ -70,18 +70,19 @@ RUN chsh -s /bin/bash iobroker \
|
|||||||
&& usermod --home /opt/iobroker iobroker
|
&& usermod --home /opt/iobroker iobroker
|
||||||
|
|
||||||
# Setting up ENVs
|
# Setting up ENVs
|
||||||
ENV DEBIAN_FRONTEND="teletype" \
|
ENV ADMINPORT=8081 \
|
||||||
LANG="de_DE.UTF-8" \
|
AVAHI="false" \
|
||||||
LANGUAGE="de_DE:de" \
|
DEBIAN_FRONTEND="teletype" \
|
||||||
LC_ALL="de_DE.UTF-8" \
|
LANG="de_DE.UTF-8" \
|
||||||
TZ="Europe/Berlin" \
|
LANGUAGE="de_DE:de" \
|
||||||
PACKAGES="vi" \
|
LC_ALL="de_DE.UTF-8" \
|
||||||
ADMINPORT=8081 \
|
PACKAGES="vi" \
|
||||||
SETUID=1000 \
|
REDIS="false" \
|
||||||
SETGID=1000 \
|
SETGID=1000 \
|
||||||
AVAHI="false" \
|
SETUID=1000 \
|
||||||
ZWAVE="false" \
|
TZ="Europe/Berlin" \
|
||||||
USBDEVICES="none"
|
USBDEVICES="none" \
|
||||||
|
ZWAVE="false"
|
||||||
|
|
||||||
# Run startup-script
|
# Run startup-script
|
||||||
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]
|
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Reading ENV
|
# Reading ENV
|
||||||
packages=$PACKAGES
|
|
||||||
adminport=$ADMINPORT
|
adminport=$ADMINPORT
|
||||||
uid=$SETUID
|
|
||||||
gid=$SETGID
|
|
||||||
zwave=$ZWAVE
|
|
||||||
avahi=$AVAHI
|
avahi=$AVAHI
|
||||||
|
gid=$SETGID
|
||||||
|
packages=$PACKAGES
|
||||||
|
redis=$REDIS
|
||||||
|
uid=$SETUID
|
||||||
usbdevices=$USBDEVICES
|
usbdevices=$USBDEVICES
|
||||||
|
zwave=$ZWAVE
|
||||||
|
|
||||||
# Getting date and time for logging
|
# Getting date and time for logging
|
||||||
dati=`date '+%Y-%m-%d %H:%M:%S'`
|
dati=`date '+%Y-%m-%d %H:%M:%S'`
|
||||||
|
|
||||||
# Header
|
# Logging header
|
||||||
echo ' '
|
echo ' '
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
|
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
|
||||||
@@ -36,23 +37,35 @@ echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -
|
|||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
|
||||||
echo "----- -----"
|
echo "----- -----"
|
||||||
echo "----- ENV -----"
|
echo "----- ENV -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
|
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ADMINPORT: $ADMINPORT)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ADMINPORT: $ADMINPORT)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $ZWAVE)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" REDIS: $REDIS)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $USBDEVICES)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $ZWAVE)" && echo " -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Checking and installing additional packages
|
|
||||||
|
# Not in use
|
||||||
|
# if [ -f /opt/.firstrun ]
|
||||||
|
# rm -f /opt/.firstrun
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
|
# STEP 1 - Preparing container
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 1 of 5: Installing additional packages -----"
|
echo "----- Step 1 of 5: Preparing container -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
# Installing additional packages
|
||||||
if [ "$packages" != "" ]
|
if [ "$packages" != "" ]
|
||||||
then
|
then
|
||||||
|
echo "Installing additional packages is set by ENV."
|
||||||
echo "The following packages will be installed:" $packages"..."
|
echo "The following packages will be installed:" $packages"..."
|
||||||
echo $packages > /opt/scripts/.packages
|
echo $packages > /opt/scripts/.packages
|
||||||
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
|
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
|
||||||
@@ -62,10 +75,26 @@ else
|
|||||||
fi
|
fi
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
# Checking and setting uid/gid
|
||||||
|
if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $gid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $uid ]
|
||||||
|
then
|
||||||
|
echo "Different UID and/ or GID is set by ENV."
|
||||||
|
echo "Changing UID to "$uid" and GID to "$gid"..."
|
||||||
|
usermod -u $uid iobroker
|
||||||
|
groupmod -g $gid iobroker
|
||||||
|
echo "Done."
|
||||||
|
else
|
||||||
|
echo "There are no changes in UID/ GID needed."
|
||||||
|
fi
|
||||||
|
echo ' '
|
||||||
|
|
||||||
# Change directory for next steps
|
# Change directory for next steps
|
||||||
cd /opt/iobroker
|
cd /opt/iobroker
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Detecting ioBroker-Installation
|
# Detecting ioBroker-Installation
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
|
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
@@ -73,42 +102,30 @@ echo ' '
|
|||||||
|
|
||||||
if [ `ls -1a|wc -l` -lt 3 ]
|
if [ `ls -1a|wc -l` -lt 3 ]
|
||||||
then
|
then
|
||||||
echo "There is no data detected in /opt/iobroker. Restoring..."
|
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
|
||||||
tar -xf /opt/initial_iobroker.tar -C /
|
tar -xf /opt/initial_iobroker.tar -C /
|
||||||
echo "Done."
|
echo "Done."
|
||||||
else
|
else
|
||||||
if [ -f /opt/iobroker/iobroker ]
|
if [ -f /opt/iobroker/iobroker ]
|
||||||
then
|
then
|
||||||
echo "Installation of ioBroker detected in /opt/iobroker."
|
echo "Existing installation of ioBroker detected in /opt/iobroker."
|
||||||
else
|
else
|
||||||
echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!"
|
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."
|
echo "Please check/ recreate mounted folder/ volume and restart ioBroker container."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Checking ioBroker-Installation
|
# Checking ioBroker-Installation
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 3 of 5: Checking ioBroker installation -----"
|
echo "----- Step 3 of 5: Checking ioBroker installation -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
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"
|
# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts"
|
||||||
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
|
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
|
||||||
chown -R $uid:$gid /opt/iobroker
|
chown -R $uid:$gid /opt/iobroker
|
||||||
@@ -117,7 +134,7 @@ echo "Done."
|
|||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Backing up original iobroker-file and changing sudo to gosu
|
# Backing up original iobroker-file and changing sudo to gosu
|
||||||
echo "Fixing \"sudo-bug\" by replacing sudo with gosu..."
|
echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..."
|
||||||
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
|
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
|
||||||
chmod 755 /opt/iobroker/iobroker
|
chmod 755 /opt/iobroker/iobroker
|
||||||
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
|
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
|
||||||
@@ -133,29 +150,39 @@ then
|
|||||||
rm -f /opt/iobroker/.install_host
|
rm -f /opt/iobroker/.install_host
|
||||||
echo 'Done.'
|
echo 'Done.'
|
||||||
echo ' '
|
echo ' '
|
||||||
|
elif [ $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ]
|
||||||
|
then
|
||||||
|
echo "Hostname in ioBroker does not match the hostname of this container."
|
||||||
|
echo "Updating hostname to " $(hostname)"..."
|
||||||
|
sh /opt/iobroker/iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*')
|
||||||
|
echo 'Done.'
|
||||||
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Setting up prerequisites for some ioBroker-adapters
|
# Setting up prerequisites for some ioBroker-adapters
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 4 of 5: Applying special settings -----"
|
echo "----- Step 4 of 5: Applying special settings -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
echo "Some adapters have special requirements which can be activated by the use of environment variables."
|
echo "Some adapters have special requirements/ settings which can be activated by the use of environment variables."
|
||||||
echo "For more information take a look at readme.md"
|
echo "For more information take a look at readme.md on Github!"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Checking ENV for Adminport
|
# Checking ENV for Adminport
|
||||||
if [ "$adminport" != "8081" ]
|
if [ "$adminport" != $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ]
|
||||||
then
|
then
|
||||||
echo "Adminport is set by ENV."
|
echo "Adminport set by ENV does not match port configured in ioBroker installation."
|
||||||
echo "Setting Adminport to" $adminport"..."
|
echo "Setting Adminport to" $adminport"..."
|
||||||
iobroker set admin.0 --port $adminport
|
iobroker set admin.0 --port $adminport
|
||||||
echo 'Done.'
|
echo 'Done.'
|
||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Checking for enabled avahi-daemon
|
# Checking ENV for AVAHI
|
||||||
if [ "$avahi" = "true" ]
|
if [ "$avahi" = "true" ]
|
||||||
then
|
then
|
||||||
echo "Avahi-daemon is activated by ENV."
|
echo "Avahi-daemon is activated by ENV."
|
||||||
@@ -165,7 +192,7 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Checking for enabled zwave-support
|
# Checking ENV for Z-WAVE
|
||||||
if [ "$zwave" = "true" ]
|
if [ "$zwave" = "true" ]
|
||||||
then
|
then
|
||||||
echo "Z-Wave is activated by ENV."
|
echo "Z-Wave is activated by ENV."
|
||||||
@@ -175,8 +202,7 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# checking enabled usb-devices
|
# checking ENV for USBDEVICES
|
||||||
|
|
||||||
if [ "$usbdevices" != "none" ]
|
if [ "$usbdevices" != "none" ]
|
||||||
then
|
then
|
||||||
echo "Usb-device-support is activated by ENV."
|
echo "Usb-device-support is activated by ENV."
|
||||||
@@ -192,16 +218,35 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Checking ENV for REDIS
|
||||||
|
if [ "$redis" != "false" ]
|
||||||
|
then
|
||||||
|
echo "Connection to Redis is configured by ENV."
|
||||||
|
echo "Installing prerequisites..."
|
||||||
|
apt-get update 2>&1> /dev/null && apt-get install -y jq 2>&1> /dev/null && rm -rf /var/lib/apt/lists/* 2>&1> /dev/null
|
||||||
|
redisserver=$(echo $redis | sed -E 's/(.*):(.*)/\1/')
|
||||||
|
redisport=$(echo $redis | sed -E 's/(.*):(.*)/\2/')
|
||||||
|
echo "Setting configuration for Redis (Server: "$redisserver", Port: "$redisport") in ioBroker..."
|
||||||
|
cd /opt/iobroker/iobroker-data
|
||||||
|
jq --arg redisserver "$redisserver" --arg redisport "$redisport" '.states.type = "redis" | .states.host = $redisserver | .states.port = $redisport' iobroker.json > iobroker.json.tmp && mv iobroker.json.tmp iobroker.json
|
||||||
|
cd /opt/iobroker
|
||||||
|
echo "Done."
|
||||||
|
echo ' '
|
||||||
|
fi
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Starting ioBroker
|
# Starting ioBroker
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 5 of 5: ioBroker startup -----"
|
echo "----- Step 5 of 5: ioBroker startup -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
echo "Starting ioBroker..."
|
echo "Starting ioBroker..."
|
||||||
echo ' '
|
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
|
gosu iobroker node node_modules/iobroker.js-controller/controller.js
|
||||||
|
|
||||||
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
||||||
|
|||||||
@@ -12,31 +12,31 @@ RUN apt-get update && apt-get upgrade -y && apt-get install -y \
|
|||||||
curl \
|
curl \
|
||||||
git \
|
git \
|
||||||
gnupg2 \
|
gnupg2 \
|
||||||
gosu \
|
gosu \
|
||||||
libavahi-compat-libdnssd-dev \
|
libavahi-compat-libdnssd-dev \
|
||||||
libcap2-bin \
|
libcap2-bin \
|
||||||
libpam0g-dev \
|
libpam0g-dev \
|
||||||
libudev-dev \
|
libudev-dev \
|
||||||
locales \
|
locales \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
procps \
|
procps \
|
||||||
python \
|
python \
|
||||||
python-dev \
|
python-dev \
|
||||||
sudo \
|
sudo \
|
||||||
|
udev \
|
||||||
unzip \
|
unzip \
|
||||||
wget \
|
wget \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install node10
|
# Install node10
|
||||||
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
|
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash \
|
||||||
&& apt-get update && apt-get install -y \
|
&& apt-get update && apt-get install -y nodejs \
|
||||||
nodejs \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Generating locales
|
# Generating locales
|
||||||
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
|
RUN sed -i 's/^# *\(de_DE.UTF-8\)/\1/' /etc/locale.gen \
|
||||||
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
|
&& sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
|
||||||
&& locale-gen
|
&& locale-gen
|
||||||
|
|
||||||
# Create scripts directory and copy scripts
|
# Create scripts directory and copy scripts
|
||||||
RUN mkdir -p /opt/scripts/ \
|
RUN mkdir -p /opt/scripts/ \
|
||||||
@@ -47,7 +47,7 @@ COPY scripts/setup_avahi.sh setup_avahi.sh
|
|||||||
COPY scripts/setup_packages.sh setup_packages.sh
|
COPY scripts/setup_packages.sh setup_packages.sh
|
||||||
COPY scripts/setup_zwave.sh setup_zwave.sh
|
COPY scripts/setup_zwave.sh setup_zwave.sh
|
||||||
RUN chmod +x iobroker_startup.sh \
|
RUN chmod +x iobroker_startup.sh \
|
||||||
&& chmod +x setup_avahi.sh \
|
&& chmod +x setup_avahi.sh \
|
||||||
&& chmod +x setup_packages.sh
|
&& chmod +x setup_packages.sh
|
||||||
|
|
||||||
# Install ioBroker
|
# Install ioBroker
|
||||||
@@ -70,18 +70,19 @@ RUN chsh -s /bin/bash iobroker \
|
|||||||
&& usermod --home /opt/iobroker iobroker
|
&& usermod --home /opt/iobroker iobroker
|
||||||
|
|
||||||
# Setting up ENVs
|
# Setting up ENVs
|
||||||
ENV DEBIAN_FRONTEND="teletype" \
|
ENV ADMINPORT=8081 \
|
||||||
LANG="de_DE.UTF-8" \
|
AVAHI="false" \
|
||||||
LANGUAGE="de_DE:de" \
|
DEBIAN_FRONTEND="teletype" \
|
||||||
LC_ALL="de_DE.UTF-8" \
|
LANG="de_DE.UTF-8" \
|
||||||
TZ="Europe/Berlin" \
|
LANGUAGE="de_DE:de" \
|
||||||
PACKAGES="vi" \
|
LC_ALL="de_DE.UTF-8" \
|
||||||
ADMINPORT=8081 \
|
PACKAGES="vi" \
|
||||||
SETUID=1000 \
|
REDIS="false" \
|
||||||
SETGID=1000 \
|
SETGID=1000 \
|
||||||
AVAHI="false" \
|
SETUID=1000 \
|
||||||
ZWAVE="false" \
|
TZ="Europe/Berlin" \
|
||||||
USBDEVICES="none"
|
USBDEVICES="none" \
|
||||||
|
ZWAVE="false"
|
||||||
|
|
||||||
# Run startup-script
|
# Run startup-script
|
||||||
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]
|
ENTRYPOINT ["/opt/scripts/iobroker_startup.sh"]
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Reading ENV
|
# Reading ENV
|
||||||
packages=$PACKAGES
|
|
||||||
adminport=$ADMINPORT
|
adminport=$ADMINPORT
|
||||||
uid=$SETUID
|
|
||||||
gid=$SETGID
|
|
||||||
zwave=$ZWAVE
|
|
||||||
avahi=$AVAHI
|
avahi=$AVAHI
|
||||||
|
gid=$SETGID
|
||||||
|
packages=$PACKAGES
|
||||||
|
redis=$REDIS
|
||||||
|
uid=$SETUID
|
||||||
usbdevices=$USBDEVICES
|
usbdevices=$USBDEVICES
|
||||||
|
zwave=$ZWAVE
|
||||||
|
|
||||||
# Getting date and time for logging
|
# Getting date and time for logging
|
||||||
dati=`date '+%Y-%m-%d %H:%M:%S'`
|
dati=`date '+%Y-%m-%d %H:%M:%S'`
|
||||||
|
|
||||||
# Header
|
# Logging header
|
||||||
echo ' '
|
echo ' '
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
|
echo -n "$(printf -- '-%.0s' {1..15})" && echo -n " "$dati" " && echo "$(printf -- '-%.0s' {1..15})"
|
||||||
@@ -36,23 +37,35 @@ echo -n "----- " && echo -n "$(printf "%-10s %-23s" node: $(node -
|
|||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" npm: $(npm -v))" && echo " -----"
|
||||||
echo "----- -----"
|
echo "----- -----"
|
||||||
echo "----- ENV -----"
|
echo "----- ENV -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
|
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ADMINPORT: $ADMINPORT)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ADMINPORT: $ADMINPORT)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $AVAHI)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $ZWAVE)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $PACKAGES)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" REDIS: $REDIS)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $SETGID)" && echo " -----"
|
||||||
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $SETUID)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $USBDEVICES)" && echo " -----"
|
||||||
|
echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $ZWAVE)" && echo " -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Checking and installing additional packages
|
|
||||||
|
# Not in use
|
||||||
|
# if [ -f /opt/.firstrun ]
|
||||||
|
# rm -f /opt/.firstrun
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
|
# STEP 1 - Preparing container
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 1 of 5: Installing additional packages -----"
|
echo "----- Step 1 of 5: Preparing container -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
# Installing additional packages
|
||||||
if [ "$packages" != "" ]
|
if [ "$packages" != "" ]
|
||||||
then
|
then
|
||||||
|
echo "Installing additional packages is set by ENV."
|
||||||
echo "The following packages will be installed:" $packages"..."
|
echo "The following packages will be installed:" $packages"..."
|
||||||
echo $packages > /opt/scripts/.packages
|
echo $packages > /opt/scripts/.packages
|
||||||
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
|
sh /opt/scripts/setup_packages.sh > /opt/scripts/setup_packages.log 2>&1
|
||||||
@@ -62,10 +75,26 @@ else
|
|||||||
fi
|
fi
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
# Checking and setting uid/gid
|
||||||
|
if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $gid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $uid ]
|
||||||
|
then
|
||||||
|
echo "Different UID and/ or GID is set by ENV."
|
||||||
|
echo "Changing UID to "$uid" and GID to "$gid"..."
|
||||||
|
usermod -u $uid iobroker
|
||||||
|
groupmod -g $gid iobroker
|
||||||
|
echo "Done."
|
||||||
|
else
|
||||||
|
echo "There are no changes in UID/ GID needed."
|
||||||
|
fi
|
||||||
|
echo ' '
|
||||||
|
|
||||||
# Change directory for next steps
|
# Change directory for next steps
|
||||||
cd /opt/iobroker
|
cd /opt/iobroker
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Detecting ioBroker-Installation
|
# Detecting ioBroker-Installation
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
|
echo "----- Step 2 of 5: Detecting ioBroker installation -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
@@ -73,42 +102,30 @@ echo ' '
|
|||||||
|
|
||||||
if [ `ls -1a|wc -l` -lt 3 ]
|
if [ `ls -1a|wc -l` -lt 3 ]
|
||||||
then
|
then
|
||||||
echo "There is no data detected in /opt/iobroker. Restoring..."
|
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
|
||||||
tar -xf /opt/initial_iobroker.tar -C /
|
tar -xf /opt/initial_iobroker.tar -C /
|
||||||
echo "Done."
|
echo "Done."
|
||||||
else
|
else
|
||||||
if [ -f /opt/iobroker/iobroker ]
|
if [ -f /opt/iobroker/iobroker ]
|
||||||
then
|
then
|
||||||
echo "Installation of ioBroker detected in /opt/iobroker."
|
echo "Existing installation of ioBroker detected in /opt/iobroker."
|
||||||
else
|
else
|
||||||
echo "There is data detected in /opt/iobroker, but it looks like it is no instance of iobroker!"
|
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."
|
echo "Please check/ recreate mounted folder/ volume and restart ioBroker container."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Checking ioBroker-Installation
|
# Checking ioBroker-Installation
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 3 of 5: Checking ioBroker installation -----"
|
echo "----- Step 3 of 5: Checking ioBroker installation -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
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"
|
# (Re)Setting permissions to "/opt/iobroker" and "/opt/scripts"
|
||||||
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
|
echo "(Re)Setting folder permissions (This might take a while! Please be patient!)..."
|
||||||
chown -R $uid:$gid /opt/iobroker
|
chown -R $uid:$gid /opt/iobroker
|
||||||
@@ -117,7 +134,7 @@ echo "Done."
|
|||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Backing up original iobroker-file and changing sudo to gosu
|
# Backing up original iobroker-file and changing sudo to gosu
|
||||||
echo "Fixing \"sudo-bug\" by replacing sudo with gosu..."
|
echo "Fixing \"sudo-bug\" by replacing sudo in iobroker with gosu..."
|
||||||
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
|
cp -a /opt/iobroker/iobroker /opt/iobroker/iobroker.bak
|
||||||
chmod 755 /opt/iobroker/iobroker
|
chmod 755 /opt/iobroker/iobroker
|
||||||
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
|
sed -i 's/sudo -H -u/gosu/g' /opt/iobroker/iobroker
|
||||||
@@ -133,29 +150,39 @@ then
|
|||||||
rm -f /opt/iobroker/.install_host
|
rm -f /opt/iobroker/.install_host
|
||||||
echo 'Done.'
|
echo 'Done.'
|
||||||
echo ' '
|
echo ' '
|
||||||
|
elif [ $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*') != $(hostname) ]
|
||||||
|
then
|
||||||
|
echo "Hostname in ioBroker does not match the hostname of this container."
|
||||||
|
echo "Updating hostname to " $(hostname)"..."
|
||||||
|
sh /opt/iobroker/iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="host": ")[^"]*')
|
||||||
|
echo 'Done.'
|
||||||
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Setting up prerequisites for some ioBroker-adapters
|
# Setting up prerequisites for some ioBroker-adapters
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 4 of 5: Applying special settings -----"
|
echo "----- Step 4 of 5: Applying special settings -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
echo "Some adapters have special requirements which can be activated by the use of environment variables."
|
echo "Some adapters have special requirements/ settings which can be activated by the use of environment variables."
|
||||||
echo "For more information take a look at readme.md"
|
echo "For more information take a look at readme.md on Github!"
|
||||||
echo ' '
|
echo ' '
|
||||||
|
|
||||||
# Checking ENV for Adminport
|
# Checking ENV for Adminport
|
||||||
if [ "$adminport" != "8081" ]
|
if [ "$adminport" != $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ]
|
||||||
then
|
then
|
||||||
echo "Adminport is set by ENV."
|
echo "Adminport set by ENV does not match port configured in ioBroker installation."
|
||||||
echo "Setting Adminport to" $adminport"..."
|
echo "Setting Adminport to" $adminport"..."
|
||||||
iobroker set admin.0 --port $adminport
|
iobroker set admin.0 --port $adminport
|
||||||
echo 'Done.'
|
echo 'Done.'
|
||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Checking for enabled avahi-daemon
|
# Checking ENV for AVAHI
|
||||||
if [ "$avahi" = "true" ]
|
if [ "$avahi" = "true" ]
|
||||||
then
|
then
|
||||||
echo "Avahi-daemon is activated by ENV."
|
echo "Avahi-daemon is activated by ENV."
|
||||||
@@ -165,7 +192,7 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Checking for enabled zwave-support
|
# Checking ENV for Z-WAVE
|
||||||
if [ "$zwave" = "true" ]
|
if [ "$zwave" = "true" ]
|
||||||
then
|
then
|
||||||
echo "Z-Wave is activated by ENV."
|
echo "Z-Wave is activated by ENV."
|
||||||
@@ -175,8 +202,7 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# checking enabled usb-devices
|
# checking ENV for USBDEVICES
|
||||||
|
|
||||||
if [ "$usbdevices" != "none" ]
|
if [ "$usbdevices" != "none" ]
|
||||||
then
|
then
|
||||||
echo "Usb-device-support is activated by ENV."
|
echo "Usb-device-support is activated by ENV."
|
||||||
@@ -192,16 +218,35 @@ then
|
|||||||
echo ' '
|
echo ' '
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Checking ENV for REDIS
|
||||||
|
if [ "$redis" != "false" ]
|
||||||
|
then
|
||||||
|
echo "Connection to Redis is configured by ENV."
|
||||||
|
echo "Installing prerequisites..."
|
||||||
|
apt-get update 2>&1> /dev/null && apt-get install -y jq 2>&1> /dev/null && rm -rf /var/lib/apt/lists/* 2>&1> /dev/null
|
||||||
|
redisserver=$(echo $redis | sed -E 's/(.*):(.*)/\1/')
|
||||||
|
redisport=$(echo $redis | sed -E 's/(.*):(.*)/\2/')
|
||||||
|
echo "Setting configuration for Redis (Server: "$redisserver", Port: "$redisport") in ioBroker..."
|
||||||
|
cd /opt/iobroker/iobroker-data
|
||||||
|
jq --arg redisserver "$redisserver" --arg redisport "$redisport" '.states.type = "redis" | .states.host = $redisserver | .states.port = $redisport' iobroker.json > iobroker.json.tmp && mv iobroker.json.tmp iobroker.json
|
||||||
|
cd /opt/iobroker
|
||||||
|
echo "Done."
|
||||||
|
echo ' '
|
||||||
|
fi
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
|
|
||||||
|
#####
|
||||||
# Starting ioBroker
|
# Starting ioBroker
|
||||||
|
#####
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo "----- Step 5 of 5: ioBroker startup -----"
|
echo "----- Step 5 of 5: ioBroker startup -----"
|
||||||
echo "$(printf -- '-%.0s' {1..60})"
|
echo "$(printf -- '-%.0s' {1..60})"
|
||||||
echo ' '
|
echo ' '
|
||||||
echo "Starting ioBroker..."
|
echo "Starting ioBroker..."
|
||||||
echo ' '
|
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
|
gosu iobroker node node_modules/iobroker.js-controller/controller.js
|
||||||
|
|
||||||
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
# Preventing container restart by keeping a process alive even if iobroker will be stopped
|
||||||
|
|||||||
Reference in New Issue
Block a user