Compare commits

..

320 Commits

Author SHA1 Message Date
Andre Germann
b085f1efdf Update .travis.yml 2020-11-06 07:33:13 +01:00
Andre Germann
80579e59ac Merge pull request #147 from buanet/beta
Beta to stable
2020-11-05 21:28:26 +01:00
Andre Germann
f39ad95b14 Merge pull request #146 from buanet/dev
prepare new stable
2020-11-05 21:23:01 +01:00
buanet
e12da80fce prepare new stable 2020-11-05 21:21:17 +01:00
Andre Germann
045f3b7426 Merge pull request #144 from buanet/dev
Dev to beta
2020-11-05 21:01:26 +01:00
buanet
a1436e08d3 added major version latest docker tag, preparing ne stable 2020-11-05 21:00:19 +01:00
buanet
abca929f80 fixing permission error during restore 2020-10-27 19:50:55 +01:00
buanet
c30b441a57 added hint for env "IOB_OBJECTSDB_TYPE" 2020-10-16 19:11:24 +02:00
buanet
1ab6945c0d small fix for installation detection 2020-08-09 23:02:02 +02:00
Andre Germann
6c89d9fa7c Merge pull request #131 from buanet/dev
Dev to beta
2020-07-29 23:27:59 +02:00
andre
3c8c6fcd22 removing not needed lines 2020-07-29 23:26:07 +02:00
andre
8fc65e05df directory changes 2020-07-29 22:20:45 +02:00
Andre Germann
8a2d8c17dc Merge pull request #129 from buanet/dev
Dev to beta
2020-07-28 23:51:53 +02:00
buanet
e4c0c02941 preparing new beta 2020-07-28 23:46:30 +02:00
buanet
f836cd1fca testing and preparing beta 2020-07-28 19:25:44 +02:00
buanet
e6469a4255 testing 2020-07-28 11:01:35 +02:00
buanet
bc4fd8349f testing 2020-07-28 09:58:19 +02:00
buanet
a78610eb68 healthcheck testing 2020-07-27 23:11:05 +02:00
buanet
f5f7e3f1ec healthcheck testing 2020-07-27 21:46:15 +02:00
buanet
a2961abf67 some testing 2020-07-02 19:29:15 +02:00
buanet
4ec5bb207d some testing 2020-07-02 19:07:25 +02:00
Andre Germann
8375ee0347 Merge pull request #121 from buanet/dev
Dev to beta
2020-07-01 22:14:49 +02:00
buanet
980ef553d1 preparing beta 2020-07-01 22:12:17 +02:00
buanet
2c07ddcfce some testing 2020-07-01 21:28:05 +02:00
buanet
c92087db97 fixing backup detection 2020-06-30 13:03:39 +02:00
buanet
89761ac8c4 some testing 2020-06-30 08:33:45 +02:00
Andre Germann
bdf6e77364 Merge pull request #119 from buanet/beta
Beta
2020-06-30 08:21:55 +02:00
Andre Germann
5a23023021 Update .VERSION 2020-06-30 08:19:49 +02:00
Andre Germann
04959da45d Merge pull request #118 from buanet/master
preparing new beta
2020-06-30 08:19:27 +02:00
buanet
e18e74ef3d Temporary fixing js-controller version 2020-06-30 08:16:13 +02:00
Andre Germann
935583f1f4 Merge pull request #117 from buanet/beta
Preparing V5.0.0 release
2020-06-29 21:22:10 +02:00
Andre Germann
6c8700b7fc Merge branch 'master' into beta 2020-06-29 21:21:45 +02:00
Andre Germann
c0bd56f7e5 Update .VERSION 2020-06-29 21:18:49 +02:00
Andre Germann
7ecaa434ed Merge pull request #116 from buanet/dev
Dev to beta
2020-06-29 21:17:25 +02:00
andre
83c10ab83b Preparing V5 2020-06-29 21:15:27 +02:00
Andre Germann
e44cccdac6 Merge pull request #113 from buanet/dev
Dev to beta
2020-06-23 09:55:08 +02:00
buanet
71076baae3 prepare new beta 2020-06-23 08:19:19 +02:00
buanet
314590d97f some testing 2020-06-23 00:23:42 +02:00
buanet
397b4ea536 some testing 2020-06-22 16:24:30 +02:00
andre
4b3f57b063 some testing 2020-06-21 23:55:51 +02:00
andre
c80b5f9c8b some testing 2020-06-21 22:21:11 +02:00
andre
52a2476034 some testing 2020-06-21 21:42:47 +02:00
buanet
1c7d892566 testing 2020-06-09 11:40:09 +02:00
buanet
b8bddc55d4 testing for multihost support 2020-06-08 11:13:35 +02:00
Andre Germann
c8836c1fca Merge pull request #108 from buanet/dev
Dev to beta
2020-06-06 00:32:43 +02:00
andre
c0804b8a7d has been late 2020-06-05 23:51:23 +02:00
andre
d00d734a3a prepare new beta 2020-06-05 23:15:33 +02:00
andre
773ad90893 reverting 2020-06-05 22:08:27 +02:00
andre
5db7206b6e Testing 2020-06-05 21:28:29 +02:00
Andre Germann
f33f5eb5b9 Merge pull request #107 from buanet/dev
Dev to beta
2020-06-03 23:58:34 +02:00
buanet
0b143cca5a workaround for renaming issues, preparing beta status 2020-06-03 23:52:57 +02:00
buanet
a86082e097 testing 2020-06-03 22:34:09 +02:00
buanet
3a4ae3ec55 testing to fix "iobroker host" issue 2020-06-03 21:52:28 +02:00
andre
df973abf16 fix download of iobroker install.sh 2020-05-21 00:24:56 +02:00
andre
3a39f16e32 fix download of iobroker install.sh 2020-05-21 00:23:40 +02:00
andre
b16440963d fix download of iobroker install.sh 2020-05-21 00:22:29 +02:00
Andre Germann
eb025350e5 Merge pull request #103 from buanet/dev
Dev to beta
2020-05-10 00:46:32 +02:00
buanet
d15e392acd preparing v4.2.1beta 2020-05-10 00:45:22 +02:00
buanet
67eef7f455 updated readme.md 2020-05-09 23:45:49 +02:00
Andre Germann
c489f77ec2 Merge pull request #102 from buanet/beta
Beta
2020-05-09 23:42:52 +02:00
Andre Germann
1fb5f5d861 Merge branch 'dev' into beta 2020-05-09 23:42:37 +02:00
Andre Germann
9b8b378dd2 Merge pull request #101 from buanet/master
readme.md changes to beta
2020-05-09 23:34:26 +02:00
Andre Germann
12264ca810 Update README.md 2020-05-08 23:55:29 +02:00
Andre Germann
b7e9efaf40 Update README.md 2020-05-08 23:54:42 +02:00
Andre
0b705506cf Update README.md 2020-05-07 23:55:48 +02:00
buanet
66433c414f testing node 12 2020-05-04 10:25:14 +02:00
buanet
b35b6c17ad back to node 10 2020-05-04 10:23:43 +02:00
buanet
c3cd27fe34 node 12 testing 2020-05-04 10:17:58 +02:00
Andre
5a0dd59c3c Update README.md 2020-04-20 22:32:26 +02:00
Andre
c81da45693 Update README.md 2020-04-16 11:38:53 +02:00
Andre
ac6709982c Update README.md 2020-04-16 11:38:13 +02:00
Andre
2838cda016 Update README.md 2020-04-16 11:37:23 +02:00
Andre
e21dfb9af8 Update .VERSION 2020-04-15 00:02:55 +02:00
Andre
aa71e4ee98 Merge pull request #92 from buanet/beta
Beta to stable
2020-04-15 00:00:34 +02:00
buanet
a9d92466a3 getting files ready for v4.2.0 2020-04-14 23:41:17 +02:00
Andre
3641afefc6 Update Dockerfile 2020-04-07 13:54:36 +02:00
Andre
6f7c61c234 Update Dockerfile 2020-04-07 13:54:03 +02:00
Andre
2f35cee123 Merge pull request #89 from buanet/dev
Dev to beta
2020-04-07 13:50:09 +02:00
buanet
4003e50bf2 update readme 2020-04-07 13:47:44 +02:00
buanet
aa98ab4578 some testing 2020-04-07 13:44:42 +02:00
Andre
c28b840bc7 Update README.md 2020-04-07 01:46:37 +02:00
buanet
7ea7ab7725 updated readme.md 2020-04-07 01:43:16 +02:00
andre
eb6c203d53 some testing with base images 2020-04-06 21:40:27 +02:00
Andre
32ef7a0194 changed default for packages
as vi is not available as armv7 package I changed the default to vim
2020-04-04 23:12:28 +02:00
Andre
21b4cfdd13 deactivate logfile for packages 2020-04-04 22:57:33 +02:00
Andre
3aaa633fdf skipping missing packages 2020-04-04 22:18:00 +02:00
Andre
95862aa1fd Update README.md 2020-02-16 17:21:37 +01:00
Andre
1fb0c6c84d Update README.md 2020-02-16 17:21:20 +01:00
Andre
66ddc596c9 Update README.md 2020-02-16 17:20:50 +01:00
Andre
a657d9b82e Update README.md 2020-02-13 09:07:41 +01:00
Andre
b4e82c0f00 Update README.md 2020-02-12 13:51:18 +01:00
Andre
ef9569fba5 Merge pull request #75 from buanet/dev
Dev to beta
2020-02-08 21:26:38 +01:00
buanet
6319d693cb preparing new beta 2020-02-08 21:23:32 +01:00
buanet
49700dc148 testing 2020-02-08 19:53:20 +01:00
buanet
c291608aa0 testing 2020-02-08 19:32:18 +01:00
buanet
e370671a5a testing 2020-02-08 17:27:51 +01:00
buanet
dd625ac4b1 Merge branch 'dev' of https://github.com/buanet/docker-iobroker into dev 2020-02-08 16:07:39 +01:00
buanet
23b24e9b70 testing 2020-02-08 16:05:58 +01:00
andre
75f38266e7 testing 2020-02-04 22:11:14 +01:00
andre
f2c1e3dda5 testing 2020-02-04 22:07:04 +01:00
buanet
dbce9fd0d6 Merge branch 'dev' of https://github.com/buanet/docker-iobroker into dev 2020-02-04 20:09:03 +01:00
buanet
71a1c78446 testing 2020-02-04 20:08:54 +01:00
Andre
1ed7fe33f2 fixing path 2020-02-04 01:39:08 +01:00
buanet
3df642f9f8 testing for advanced userscripts 2020-02-04 01:17:28 +01:00
Andre
5ce1292546 Merge pull request #74 from buanet/dev
dev to beta
2020-02-02 23:41:27 +01:00
andre
39923bbb5d hoepfully fixing some permission issues 2020-02-02 23:39:28 +01:00
Andre
f2122a84bc testing 2020-02-02 22:10:51 +01:00
Andre
0bc88b23d0 testing 2020-02-02 22:07:44 +01:00
Andre
d53dd6beae Merge pull request #67 from buanet/dev
Dev to beta
2020-01-17 23:40:10 +01:00
andre
af7b7ff6f0 new openzwave version 2020-01-17 23:36:28 +01:00
Andre
c62b67c5ac updating openzwave 2020-01-17 13:25:54 +01:00
Andre
9c73ec9fe9 Update .VERSION 2020-01-17 11:14:17 +01:00
Andre
1d4d1ff1bd Update README.md 2020-01-17 11:05:56 +01:00
Andre
f4f2dd562f Merge pull request #66 from buanet/beta
From beta to latest
2020-01-17 11:03:53 +01:00
Andre
c054ab4dc0 Update .VERSION 2020-01-17 11:02:23 +01:00
Andre
a9af03edc9 Update README.md 2020-01-17 11:01:55 +01:00
Andre
5c7c255ab9 Merge pull request #61 from buanet/dev
dev to beta
2020-01-06 00:42:42 +01:00
Andre
e9481bae9f Update .VERSION 2020-01-06 00:38:48 +01:00
buanet
7d4eba91a1 preparing new beta 2020-01-06 00:36:46 +01:00
buanet
4101fc1cab fixing restore 2020-01-05 16:06:10 +01:00
Andre
27b6c93a17 testing 2020-01-05 03:05:13 +01:00
buanet
d5a1bda9b4 improve restore and logging 2020-01-04 21:00:23 +01:00
Andre
ce10e991f7 Merge pull request #56 from duffbeer2000/dev
Update README.md and include automatic restore to iobroker_startup.sh
2020-01-04 20:32:44 +01:00
Andre
c3f901f04e Update README.md 2019-12-31 18:36:46 +01:00
Andre
fef9271eb4 Update README.md 2019-12-31 18:31:58 +01:00
duffbeer2000
22d6b0158c Small fix
backup folder is always empty in this if case so not necessary to empty it
2019-12-29 19:56:21 +01:00
duffbeer2000
37c9046077 Small Bugfix for restore 2019-12-27 15:13:46 +01:00
duffbeer2000
f1b1360264 removed apt-get upgrade -y
apt-get upgrade -y shouldn't be used in a Dockerfile
2019-12-27 15:03:21 +01:00
duffbeer2000
0c1f8ed867 MAINTAINER is deprecated, switch to LABEL instead
As https://docs.docker.com/engine/reference/builder/ says MAINTAINER instruction is deprecated. Switching to LABEL instruction.
2019-12-27 15:01:53 +01:00
duffbeer2000
1492a15871 Include automatic restore to iobroker_startup.sh
Integration of automatic restore of an iobroker backup file. It detects if /opt/iobroker contains a single file and if so if it contains a "backup.json" and restores it.
2019-12-27 14:40:26 +01:00
duffbeer2000
84c31002f4 Update README.md
Correct the default value of LC_ALL
2019-12-27 14:23:58 +01:00
Andre
a193ba36a1 Merge pull request #53 from buanet/dev
v4.0.2beta
2019-12-12 07:42:27 +01:00
Andre
e270a46ee7 Update README.md 2019-12-12 07:39:42 +01:00
Andre
027e677471 Update README.md 2019-12-12 07:37:33 +01:00
buanet
bc85322275 beta preparation 2019-12-10 13:27:30 +01:00
Andre
b560dfa840 testing 2019-12-09 15:14:39 +01:00
Andre
44de2a1ec5 testing 2019-12-09 14:48:00 +01:00
Andre
5319305d0b testing 2019-12-09 12:20:50 +01:00
Andre
840e35d922 testing 2019-12-09 12:03:04 +01:00
Andre
f6f056d0b3 testing 2019-12-09 09:00:02 +01:00
buanet
4376b63981 testing 2019-12-02 11:48:14 +01:00
Andre
cb1fc55235 testing 2019-12-01 21:55:09 +01:00
andre
6afd8a3f5d testing 2019-12-01 21:46:17 +01:00
Andre
b3ee69b26e Merge pull request #50 from buanet/dev
moving changes to different architectures
2019-11-27 21:50:05 +01:00
andre
95af2c3acf moving changes to different architectures 2019-11-27 21:47:51 +01:00
Andre
667c3d7ea1 Merge pull request #49 from buanet/dev
dev to beta
2019-11-25 23:17:23 +01:00
andre
320717d8bc Update README.md 2019-11-25 23:15:24 +01:00
Andre
5592da4215 Update setup_zwave.sh 2019-11-25 17:57:02 +01:00
Andre
63b4c7edf5 Update iobroker_startup.sh 2019-11-25 17:56:32 +01:00
Andre
983b16d461 Update setup_avahi.sh 2019-11-25 17:55:56 +01:00
Andre
e23b646270 Update Dockerfile 2019-11-25 17:28:44 +01:00
Andre
4db534ef62 testing 2019-11-25 15:57:26 +01:00
Andre
cd7beb5156 setting permissions for devices 2019-11-25 15:55:16 +01:00
Andre
eda7d5ba95 added env for usb-device-support 2019-11-25 13:09:59 +01:00
Andre
b7cdabe427 added ENV for usb devices 2019-11-25 13:03:39 +01:00
Andre
64a6c35865 fixing avahi setup 2019-11-11 14:50:27 +01:00
Andre
2175f9a4fa fixing adminport script 2019-11-11 14:32:11 +01:00
Andre
d30bd1de47 adding adminport 2019-11-11 11:36:28 +01:00
Andre
063b21a0d1 added env "adminport" 2019-11-11 10:43:04 +01:00
Andre
3f976baad7 Update README.md 2019-10-28 12:53:10 +01:00
Andre
747edf98fe updating prerequisites 2019-10-28 10:12:46 +01:00
Andre
19882c1eb3 Update README.md 2019-10-25 22:15:14 +02:00
Andre
f2a2e2d029 Update README.md 2019-10-25 22:07:50 +02:00
Andre
ae0fa2f06c Update .VERSION 2019-10-25 22:06:36 +02:00
Andre
030109f260 Update README.md 2019-10-25 22:02:07 +02:00
Andre
c5c96d9f3b Update .VERSION 2019-10-25 22:00:46 +02:00
Andre
6f251e8a2d Merge pull request #39 from buanet/beta
Releasing v4
2019-10-25 22:00:06 +02:00
buanet
cc2174285e fixes output for zwave 2019-10-23 14:11:52 +02:00
buanet
90458ae6b7 small fixes 2019-10-23 11:50:31 +02:00
buanet
7b0f8f5ba9 small fix for zwave 2019-10-23 11:42:04 +02:00
buanet
b67ca2de19 added zwave support 2019-10-23 10:51:15 +02:00
buanet
7e31f7f18a Update .travis.yml 2019-10-22 19:46:12 +02:00
buanet
97a4d02f0d update manifest 2019-10-22 17:03:50 +02:00
buanet
85ffcfd00a change secure 2019-10-22 14:40:47 +02:00
buanet
c67fe82e6f changing docker repo 2019-10-22 14:30:08 +02:00
buanet
e1268aa27c multiarch 2019-10-22 14:22:27 +02:00
Andre
abbb905616 Create .VERSION 2019-09-03 09:08:43 +02:00
Andre
6b4f4277ae Update README.md 2019-09-03 09:07:40 +02:00
Andre
c4c6cdf4de Update README.md 2019-09-03 09:07:10 +02:00
Andre
2d701d02f7 Update LICENSE.md 2019-09-03 09:06:05 +02:00
Andre
9035c9e9a1 Update LICENSE.md 2019-09-03 09:04:02 +02:00
Andre
122307dd38 rename 2019-09-03 09:03:36 +02:00
Andre
7c05c29069 Update README.md 2019-09-03 08:43:58 +02:00
Andre
ebd7822e9a changing image version 2019-09-03 08:41:32 +02:00
Andre
7dc1c8e74b changing node version 2019-09-03 08:40:46 +02:00
Andre
1606dc0b97 Update Dockerfile
changed env
2019-09-02 09:05:01 +02:00
Andre
6b14bc2617 Update iobroker_startup.sh
updated logging
2019-09-02 09:03:10 +02:00
Andre
0265e12afb Merge pull request #33 from mplogas/master
Adding env for setting UID/GID
2019-09-02 08:52:43 +02:00
Andre
012a2d2363 Merge branch 'master' into master 2019-09-02 08:51:43 +02:00
Andre
b0524381ce new structure for changelog 2019-08-21 21:38:57 +02:00
buanet
74b0f246cd release new stable 2019-08-21 21:10:27 +02:00
mplogas
78399ff13b added GID support as well 2019-08-21 00:45:27 +02:00
mplogas
5b083a98bb removed debug output 2019-08-20 22:08:05 +02:00
mplogas
0d775350c5 README 2019-08-20 22:05:09 +02:00
mplogas
575050d5a4 external uid is now correctly applied 2019-08-20 21:59:42 +02:00
mplogas
9eb183d206 added uid/gid fixes 2019-08-20 20:43:24 +02:00
Andre
e0c1cec14b change image 2019-07-14 22:27:21 +02:00
buanet
79aa59cf69 deletions 2019-07-04 11:36:07 +02:00
buanet
b89ee16f44 added armv7 support 2019-07-03 16:10:17 +02:00
Andre
b74cfe57c1 fixing avahi issue 2019-06-21 23:23:37 +02:00
Andre
305a13b0b0 deletions after testing 2019-06-13 14:45:58 +02:00
Andre
c80f25cca1 some changes for new beta 2019-06-13 13:58:36 +02:00
Andre
aed7604906 Merge pull request #26 from smarthomefans/use_gosu
Try to use gosu, not sudo
2019-06-13 13:20:05 +02:00
SchumyHao
a8dd8897eb Try to use gosu, not sudo
Signed-off-by: SchumyHao <schumyhaojl@126.com>
2019-06-07 01:41:24 +08:00
andre
7736e05e08 docu 2019-05-18 22:55:03 +02:00
andre
2c2abee86a new beta 2019-05-18 22:51:38 +02:00
andre
b28250e9f8 some testing 2019-05-18 19:41:52 +02:00
Andre
8bb400270d fixing permission issues and logging 2019-05-09 20:48:44 +02:00
Andre
caa5a1f763 some testing 2019-05-09 19:50:09 +02:00
Andre
59e3c79574 Update Dockerfile 2019-05-09 18:17:03 +02:00
Andre
0fe15e0918 Update Dockerfile 2019-05-09 17:31:13 +02:00
Andre
a1cd12dbfd moving permission fixer 2019-05-09 17:28:38 +02:00
Andre
f32d26de7f Update iobroker_startup.sh 2019-05-09 16:37:51 +02:00
Andre
38d352ac9c Update README.md 2019-05-09 12:11:26 +02:00
buanet
fdb68d7ca8 optimizing dockerfile 2019-04-29 15:43:14 +02:00
andre
40abbca1a1 updated documentation 2019-04-15 23:32:43 +02:00
andre
445ad691c2 some informations for v2.0.6beta 2019-04-15 23:04:26 +02:00
andre
525d6db3f4 changes in logging 2019-04-14 01:55:46 +02:00
andre
5c43c56694 changes for locale 2019-04-14 01:36:15 +02:00
andre
94fcc3b98c fixin env 2019-04-14 00:42:06 +02:00
andre
a34e3e0549 some testing 2019-04-14 00:22:08 +02:00
andre
6d9bf4da5a some testing 2019-04-13 23:23:07 +02:00
andre
9d7d4e3cd9 some testing 2019-04-13 23:20:52 +02:00
andre
c109764694 some testing 2019-04-13 22:18:37 +02:00
buanet
6a32591da4 some renaming 2019-03-20 08:49:04 +01:00
buanet
4321bd7bfb optimized logging 2019-03-14 14:41:11 +01:00
buanet
83f3542f68 optimized logging 2019-03-14 13:54:44 +01:00
buanet
672bca2630 updating/ removing comments 2019-03-06 07:51:14 +01:00
buanet
bdc6570a71 added prerequisites 2019-03-06 07:46:06 +01:00
Andre
4010c68e20 Update Dockerfile 2019-02-28 22:39:04 +01:00
Andre
22ea1df41a Update Dockerfile 2019-02-28 22:11:05 +01:00
andre
9656527db4 Update Dockerfile 2019-02-27 20:58:18 +01:00
Andre
13a511f875 Update Dockerfile 2019-02-14 15:38:09 +01:00
andre
686b517d6f Update iobroker_startup.sh 2019-02-10 00:09:36 +01:00
andre
610deb0974 Update README.md 2019-02-09 23:46:36 +01:00
andre
c91be00fa7 Added ENV and EXPOSE 2019-02-09 23:43:04 +01:00
andre
fefe510b93 Update iobroker_startup.sh 2019-02-07 21:01:10 +01:00
Andre
8d0bb13cf2 Update README.md 2019-01-29 12:31:36 +01:00
Andre
c6d265aa1d fix logging 2019-01-29 11:25:23 +01:00
Andre
07c3fe7118 renaming logfiles 2019-01-29 11:23:15 +01:00
Andre
a9bb9aacf1 small fixes and add logging 2019-01-29 10:56:20 +01:00
Andre
3ba390277c Update iobroker_startup.sh 2019-01-29 10:48:44 +01:00
Andre
88eb4ca065 deleted optional packages from dockerfile
install optional packages by using env "PACKAGES" with value "package1 package2 package3"
2019-01-29 10:35:29 +01:00
Andre
fd72d450f1 updated iobroker docu link 2019-01-28 22:19:00 +01:00
andre
97b5641372 optimizing logging 2019-01-28 22:15:33 +01:00
buanet
eeacc6d4fb corrections 2019-01-28 16:03:30 +01:00
buanet
d50d88ddd0 additional packages setup 2019-01-28 15:12:48 +01:00
buanet
efee71f212 corrections 2019-01-28 14:23:24 +01:00
buanet
eea1c61ac5 moving avahi to script 2019-01-28 13:57:27 +01:00
buanet
75468e58d6 testing env 2019-01-28 08:57:38 +01:00
buanet
dc614879be ? 2019-01-28 08:53:24 +01:00
buanet
d03ce6d24c fix 2019-01-28 08:49:35 +01:00
Andre
98ad4e8666 Update iobroker_startup.sh 2019-01-24 21:25:30 +01:00
Andre
f3cb86cb94 Update avahi_startup.sh 2019-01-24 20:51:25 +01:00
Andre
d5a69c506f Update iobroker_startup.sh 2019-01-24 20:03:19 +01:00
Andre
f75043438c changes for first run 2019-01-24 18:11:30 +01:00
buanet
8e79ccfc2c changes for avahi-daemon 2019-01-24 13:31:02 +01:00
buanet
4908fed871 testing 2019-01-24 11:53:06 +01:00
buanet
9b6273b50f testing user option 2019-01-24 10:28:56 +01:00
buanet
4d76a05f5d some testing 2019-01-24 08:25:58 +01:00
buanet
0fcccf3b42 moved env 2019-01-23 11:58:41 +01:00
buanet
23d8b34113 optimized docker file 2019-01-23 09:30:12 +01:00
Andre
04f51a6f47 Update iobroker_startup.sh 2019-01-21 15:26:05 +01:00
Andre
3decc2fec3 added restoring if folder empty 2019-01-21 14:40:31 +01:00
Andre
e2ccabb6e2 moved initial backup 2019-01-21 14:30:54 +01:00
Andre
9b932594fa moved .install_host file 2019-01-21 13:36:24 +01:00
Andre
c3aef24ead moved .install_host file 2019-01-21 13:33:07 +01:00
Andre
9abc86ddd3 changes for new iobroker setup 2019-01-21 13:13:29 +01:00
Andre
bc41f708bf added initial backup 2019-01-21 11:24:49 +01:00
Andre
fdbde6eb15 changes for iobroker host this issues 2019-01-11 10:17:55 +01:00
Andre
4f0d07878b Update README.md 2019-01-07 14:13:14 +01:00
Andre
beb689c33c Update iobroker_startup.sh 2019-01-07 13:41:57 +01:00
Andre
e733f77253 Update iobroker_startup.sh 2019-01-07 12:46:01 +01:00
Andre
1fdce0ae78 Update iobroker_startup.sh 2019-01-07 11:52:46 +01:00
Andre
7ced614900 added output for debugging 2019-01-07 11:12:40 +01:00
Andre
250acdc992 workaround for install problems 2018-12-07 18:23:19 +01:00
Andre
f2e6780456 changes for iobroker setup 2018-12-07 17:10:55 +01:00
Andre
2983f1f63d Update Dockerfile 2018-12-07 14:19:26 +01:00
Andre
ddccbe7dfa Update iobroker_startup.sh 2018-12-07 14:16:08 +01:00
Andre
e99ab6fa82 Update README.md 2018-12-06 21:49:20 +01:00
Andre
16b9d318fd changes for new iobroker setup 2018-12-06 21:48:35 +01:00
Andre
13182735f8 Update README.md 2018-12-05 14:42:53 +01:00
Andre
426035fa9b Merge pull request #13 from buanet/node8
Node 8 is now required for ioBroker
2018-12-05 14:23:01 +01:00
Andre
5eb3e6ef1d Merge branch 'master' into node8 2018-12-05 14:22:40 +01:00
Andre
d56fca4074 Update iobroker_stop.sh 2018-11-08 21:35:21 +01:00
Andre
6f2eb382d5 Update iobroker_restart.sh 2018-11-08 21:34:50 +01:00
andre
82aa3f0062 changes for node 8 2018-11-05 00:33:00 +01:00
Andre
eb72bfea00 Update README.md 2018-09-12 14:03:39 +02:00
Andre
6e8f3a1448 added support for firetv-adapter 2018-09-12 14:01:42 +02:00
Andre
dc31095c1c Update README.md 2018-08-21 13:31:59 +02:00
Andre
834fd976c0 added ffmpeg-package 2018-08-21 12:20:01 +02:00
Andre
609804ea0d Update Dockerfile 2018-08-20 15:26:37 +02:00
Andre
0f39f7ae5e Update Dockerfile 2018-08-20 15:23:12 +02:00
Andre
fdfbed9846 Update README.md 2018-04-04 11:20:28 +02:00
Andre
b4f7ba98b1 added ENV for timezone issue 2018-04-04 11:15:36 +02:00
Andre
351bfddc8d Update README.md 2018-03-29 23:02:02 +02:00
andre
8a8ac64952 added package 2018-03-21 23:24:58 +01:00
andre
e015276fc4 optimizing and testing 2017-12-27 16:55:54 +01:00
andre
4f41716e77 testing 2017-12-27 15:55:51 +01:00
andre
d301f754f4 optimized dockerfile and node 8 test 2017-12-27 12:03:58 +01:00
Andre
a0adbc121e released v1.1.0 2017-12-10 14:24:10 +01:00
Andre
17ac1a5bcf added fix for avahi issue 2017-12-10 11:41:46 +01:00
Andre
f440613049 Update Dockerfile 2017-12-07 23:10:56 +01:00
Andre
7a6de5b3c5 Update Dockerfile 2017-12-07 22:17:44 +01:00
Andre
0687a2ef18 Update Dockerfile 2017-12-07 21:31:57 +01:00
Andre
3d191b9fd9 Update iobroker_startup.sh 2017-12-06 22:19:27 +01:00
Andre
0cc07e148d Update iobroker_startup.sh 2017-12-01 23:41:15 +01:00
Andre
f841ccf882 Update iobroker_startup.sh 2017-12-01 23:06:34 +01:00
Andre
b8622098b2 Update iobroker_startup.sh 2017-12-01 23:01:46 +01:00
Andre
9aab687492 Update iobroker_startup.sh 2017-11-30 23:18:45 +01:00
Andre
c69f7145b3 Update Dockerfile 2017-11-30 23:17:51 +01:00
Andre
1fbbd33979 Delete startup.sh 2017-11-30 22:39:34 +01:00
Andre
911beabb6a Update iobroker_startup.sh 2017-11-30 22:37:46 +01:00
Andre
945c7bfbaa Update Dockerfile 2017-11-30 22:34:15 +01:00
Andre
19a6eb74bb Update Dockerfile 2017-09-25 10:56:24 +02:00
Andre
1713562071 Update backup_iobroker_folder.sh 2017-09-22 23:24:58 +02:00
Andre
a34cdfe7bf Update backup_iobroker_folder.sh 2017-09-22 23:02:05 +02:00
Andre
c0eb88812f Update backup_iobroker_folder.sh 2017-09-22 22:56:52 +02:00
Andre
d3737203dc Update backup_iobroker_folder.sh 2017-09-05 21:34:22 +02:00
Andre
a87286ca08 Update backup_iobroker_folder.sh 2017-09-05 20:22:58 +02:00
39 changed files with 2776 additions and 119 deletions

1
.VERSION Normal file
View File

@@ -0,0 +1 @@
v5.1.0

112
.travis.yml Normal file
View File

@@ -0,0 +1,112 @@
sudo: required
branches:
only:
- master
- beta
services:
- docker
language: bash
env:
global:
- secure: "iqK7JBsQiYceKOvRkmSa6okzXn3BygEPZjffby4agaVCwIt2SYLAcBOisOoKDpyAX+DUWlHz3gITImVa+uIna6Ue7k4C2AGJVDr87G6iq57Tn6yjrfhPs/TW9/CWvKg/G4uvKEnycMiLDXdcctSMwRr3ZwzJEdeEdmNZVsd2LP/5U0I/2K2Io22tNciSKhqlSaIfhK4f6Jk7xffnQFjwy+P9qPN18oI1fDyeHx6ZWyN3YhQQ4eGyxHjxZjlhCxSvu5R4DMf1jFIoLRAr6G5jrQacn0pG8PtBVLoYT4RsPy+fwUtXmnWWjeXK0IrU1njZf/DUteI9xnaDcHzZYj+d7MeSUc6BuWOyx9lO3ZwBWDNycYsKaF5so4RpdzoY/gfJMlK3uWDbADb46dWzPD5gb3pEROKau3fBDHS5eaR5e1Bxzz6FGoYWYfsQHqpg9g7v4BRFq+Jh0+v47fdyMxgK/Nm4+r7+ht77Usu29+X6X8F4iwrBJ/ix5xIf7iMoH/ZGvq6BEKi/1t9zdXMugcWOqwlYx9k6J9bQhBfw8YucLmgl3ynzrPaLlPEpY9cnb7hcOUDZoHI7KK2zF/y3yfNr2BqlRbm39HFWfnwuJPO5VLYGs5QubeVj9u1M+5Qo4erPuQBBc4mHP4eF2PmRA+wiVWki0z+U2skFQppkCfrbH8c="
- secure: "iqoZUcWgZueNQrNldF/ugwyU1LR5E+doTfjY0exQqAKjntG5n2QqYZ/+dX1gqvkfy1kuMINTBWfqSALbhfTTK7EfUjqmcnaks4CMVZQkhH/FyCOYHqSBSSN7j4XeHt1sXn1FRiSpyrZOUoOuyqoBRe3JoWhdQZAGxNzX3sJllwnKa6M0D6D2l9tUyTWO/jxhgTIoYBSrXvb68ZsCU9jlNBJbylfvEFwuSlwvfa+Mz9vAeCTuza9XDnvcxgwVq3r+YGxfmAhK9fOAvN+lPN+KA0LcIzBaW0sh24voqjfh/pLpsl03zeGNdWzS9r2qYPCP0N3asb5P6CVEbbAGYO1T5PvU78ILXGi4+/x/32O6/I9oXpMVQCFHNn0Gn/8BPRHY4ZOYI9ItnhV9Ncp7hhAWAAqf3KC5GM89l9R5KxFY3bhN/p8nuGresUDU5d57YkaV8rOhPpr0dbAyKFtuzG0+bT1N2ekXyTyMHeAGKiGwfD9bAS4qx6asFO5uw6UriBHNzJ59Cy3GT+W1CctaEuvqJlc6Iqz2KaBozEqnNFcpE2Grny4bzr5fp+b1qCO9TE2LhHU/LR5FTLjQ2wf9/raTM6yboq+guKeXxpySa2w8ABDq0OUAw4mrKqJQJohzBkl3oYTpWUG2JGEyMAJxjkmH0/3GwZESPNLaaYVjQByTDDY="
- VERSION="$(cat .VERSION)"
- MAJORVERSION="$(cat .VERSION | cut -c 1-2 | sed -r 's#^(.{0})#\1latest-#')"
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:$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:$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:$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:$VERSION-$ARCH
fi
if [ "$TRAVIS_BRANCH" == "beta" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$JOB_NAME" == "Build images" ] ; then
docker push buanet/iobroker:$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:version
cat manifest.yaml | sed "s/\$DOCKERTAG/${VERSION}/g" > manifestversion.yaml
#manifest for image: buanet/iobroker:latest
cat manifest.yaml | sed "s/\$DOCKERTAG/latest/g" > manifestlatest.yaml
#manifest for image: buanet/iobroker:latest-majorversion
cat manifest.yaml | sed "s/\$DOCKERTAG/${MAJORVERSION}/g" > manifestmajorversion.yaml
#push to hub
mv manifestversion.yaml iobroker.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker.yaml
mv manifestlatest.yaml iobroker.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker.yaml
mv manifestmajorversion.yaml iobroker.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker.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:version
cat manifest.yaml | sed "s/\$DOCKERTAG/${VERSION}/g" > manifestversion.yaml
#manifest for image: buanet/iobroker:beta
cat manifest.yaml | sed "s/\$DOCKERTAG/beta/g" > manifestbeta.yaml
#push to hub
mv manifestversion.yaml iobroker.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker.yaml
mv manifestbeta.yaml iobroker.yaml
./manifest-tool --username $HUB_USER --password $HUB_PASS push from-spec iobroker.yaml
fi

View File

@@ -1,33 +0,0 @@
FROM debian:latest
MAINTAINER Andre Germann <info@buanet.de>
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y apt-utils curl avahi-daemon git libpcap-dev libavahi-compat-libdnssd-dev libfontconfig gnupg2 locales
RUN sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen && \dpkg-reconfigure --frontend=noninteractive locales && \update-locale LANG=de_DE.UTF-8
ENV LANG de_DE.UTF-8
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash
RUN apt-get install -y build-essential python nodejs
RUN cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
RUN mkdir -p /opt/iobroker/ && chmod 777 /opt/iobroker/
RUN mkdir -p /opt/scripts/ && chmod 777 /opt/scripts/
WORKDIR /opt/scripts/
ADD scripts/avahi_startup.sh avahi_startup.sh
RUN chmod +x avahi_startup.sh
RUN mkdir /var/run/dbus/
ADD scripts/iobroker_startup.sh iobroker_startup.sh
RUN chmod +x iobroker_startup.sh
WORKDIR /opt/iobroker/
RUN npm install iobroker --unsafe-perm && echo $(hostname) > .install_host
RUN update-rc.d iobroker.sh disable
CMD ["sh", "/opt/scripts/iobroker_startup.sh"]
ENV DEBIAN_FRONTEND teletype

View File

@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2017 Andre Germann
Copyright (c) 2017 André 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

326
README.md
View File

@@ -1,25 +1,327 @@
# docker-iobroker
Docker image for ioBroker (http://iobroker.net) based on debian:latest (http://hub.docker.com/_/debian/)
# ioBroker for Docker
This project creates a Docker image for running ioBroker in a Docker container. It is made for and tested on a Synology disk station with DSM 6.0.2 and Docker 1.11.2. But it should also work on other systems running Docker.<br>
Cause the container ist based on debian:latest, it acts nearly like a full virtual machine. That makes it possible to easily add some additional dependies for some ioBroker-Adapters.
[![Release](https://img.shields.io/github/v/release/buanet/docker-iobroker)](https://github.com/buanet/docker-iobroker/releases)
[![Build Status](https://travis-ci.org/buanet/docker-iobroker.svg?branch=master)](https://travis-ci.org/buanet/docker-iobroker)<br>
[![Image Size](https://img.shields.io/docker/image-size/buanet/iobroker)](https://hub.docker.com/repository/docker/buanet/iobroker)
[![Docker Pulls](https://img.shields.io/docker/pulls/buanet/iobroker)](https://hub.docker.com/repository/docker/buanet/iobroker)
[![Docker Stars](https://img.shields.io/docker/stars/buanet/iobroker)](https://hub.docker.com/repository/docker/buanet/iobroker)<br>
[![Source](https://img.shields.io/badge/source-github-blue)](https://github.com/buanet/docker-iobroker)
[![License](https://img.shields.io/github/license/buanet/docker-iobroker)](https://github.com/buanet/docker-iobroker/blob/master/LICENSE.md)
[![Donate](https://img.shields.io/badge/donate-paypal-blue)](https://paypal.me/buanet)
## Installation & Usage
IoBroker for Docker is a ready to use Docker image for ioBroker IoT platform (http://www.iobroker.net).
For instructions and discussion (in german) please visit ioBroker-Forum (http://forum.iobroker.net/viewtopic.php?f=17&t=5089).
It was originally created for a Synology Disk Station 1515+ with DSM 6 and official Docker package installed but should run on any other Linux based Docker host too.
After more than three years of development it might be the best documented and still maintained Docker image for running ioBroker IoT platform with Docker.
Since v4.0.0 the image is available for the following architectures: amd64, armv7hf, aarch64.<br>
If you need more please let me know by opening a Github issue.
## Important notice
In general a new major version (e.g. v2, v4, v5) of the image comes with a new, preinstalled major node version!
If you are updating an existing installation to a new major version (e.g. from v4 to v5) you have to perform some additional steps inside ioBroker! For more details please see official ioBroker documentation: [EN](https://www.iobroker.net/#en/documentation/install/updatenode.md) | [DE](https://www.iobroker.net/#de/documentation/install/updatenode.md).<br>
You might avoid these procedure if you use my "Best practice" hint for "upgrading your ioBroker container".
In any case make a backup first!
## Getting started
A detailed tutorial (German, based on v3.0.0) can be found here: [https://smarthome.buanet.de](https://smarthome.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 so every user can benefit from it . Thanks in advance.
If you think you found a bug or simply want to request a new feature please open an issue on Github so we can talk about.
The following ways to get iobroker-container running are only examples. Maybe you have to change, add or replace parameters to configure ioBroker for fitting your needs.
### Running from command line
For taking a first look at the iobroker docker container it would be enough to simply run the following basic docker run command:
```
docker run -p 8081:8081 --name iobroker -v iobrokerdata:/opt/iobroker buanet/iobroker:latest
```
### Running with docker-compose
You can also run iobroker by using docker-compose. Here is an example:
```
version: '2'
services:
iobroker:
restart: always
image: buanet/iobroker:latest
container_name: iobroker
hostname: iobroker
ports:
- "8081:8081"
volumes:
- iobrokerdata:/opt/iobroker
```
## Special settings and features
The following will give a short overview.
### Environment variables
To configure the ioBroker container on startup it is possible to set some environment variables.
You do not have to declare every single variable when setting up your container. Variables you do not set will come up with their default value.
**Important: In v4.2.0 the ENVs "ADMINPORT" and "REDIS" were renamed/ reorganized. For Details see the following table!**
|ENV|Default|Description|
|---|---|---|
|AVAHI|false|Installs and activates avahi-daemon for supporting yahka-adapter, can be "true" or "false"|
|IOB_ADMINPORT|8081|Sets ioBroker adminport on startup|
|IOB_MULTIHOST|[not set]|Sets ioBroker instance as "master" or "slave" for multihost support (needs additional config for objectsdb and statesdb!)|
|IOB_OBJECTSDB_HOST|127.0.0.1|Sets host for ioBroker objects db|
|IOB_OBJECTSDB_PORT|9001|Sets port for ioBroker objects db|
|IOB_OBJECTSDB_TYPE|file|Sets type of ioBroker objects db, cloud be "file", "redis" or "couch"<br>(at the moment redis as objects db is [not supported by ioBroker](https://github.com/ioBroker/ioBroker#databases))|
|IOB_STATESDB_HOST|127.0.0.1|Sets host for ioBroker states db|
|IOB_STATESDB_PORT|9000|Sets port for ioBroker states db|
|IOB_STATESDB_TYPE|file|Sets type of ioBroker states db, could be "file" or "redis"|
|LANG|de_DE.UTF&#x2011;8|The 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.UTF-8|The following locales are pre-generated: de_DE.UTF-8, en_US.UTF-8|
|PACKAGES|[not set]|Installs additional linux packages to your container, packages should be seperated by whitespace like this: "package1 package2 package3"|
|SETGID|1000|For some reasons it might be useful to specify the gid of the containers iobroker user to match an existing group on the docker host|
|SETUID|1000|For some reasons it might be useful to specify the uid of the containers iobroker user to match an existing user on the docker host|
|TZ|Europe/Berlin|All valid Linux-timezones|
|USBDEVICES|none|Sets relevant permissions on mounted devices like "/dev/ttyACM0", for more than one device separate with ";" like this: "/dev/ttyACM0;/dev/ttyACM1"|
|ZWAVE|false|Will install openzwave to support zwave-adapter, can be "true" or "false"|
### Mounting folder/ volume
It is possible to mount an empty folder to /opt/iobroker during first startup of the container. The startup script will check this folder and restore content if it is empty.
Since v4.1.0 it is also possible mount a folder filled up with an iobroker backup file created using `iobroker backup` command or backitup adapter. Please make sure the name of your backup file ends like this: `*_backupiobroker.tar.gz"`.
The startup script will then detect this backup and restore it during the start of the container. Please see container logs when starting the container for more details!
Note: It is absolutely recommended to use a mounted folder or persistent volume for /opt/iobroker folder!
You can also mount a folder containing an existing ioBroker-installation (e.g. when moving an existing installation to docker).
But watch for the used node version. If the existing installation runs with another major version of node you have do perform additional steps. For more Details see the "Important notice" on top of this readme.md file.
**Important: If the folder you mount to /opt/iobroker in your container is placed on a mounted device, partition or other storage, the mountpoint on your host should NOT have the "noexec" flag activated. Otherwise you may get problems executing ioBroker inside the container!**
### Mounting USB device
If you want to use a USB device within ioBroker inside your container don´t forget to [mount the device](https://docs.docker.com/engine/reference/commandline/run/#add-host-device-to-container---device) on container startup and use the environment variable "USBDEVICES".
### User defined startup scripts
It is possible to add some script code to container startup with the help of the userscripts feature. You can get this to work by mounting an additional folder to `/opt/userscripts` into the container.
When you mount an empty folder the startup script will restore two example scripts in there. To activate the scripts you have to remove the `_example` part of the name. The "userscript_firststart.sh" will execute only at the very first start of a new container, while the "userscript_everystart.sh" will execute on every container start.
Feel free to test it with my example code. Take a look at the log. In "Step 4 of 5: Applying special settings" you will see the messages generated by the example userscripts.
### Multihost
With the help of the ENV "IOB_MULTIHOST" and the ENVs for objects and states db connections (see ENVs table above) it is now possible to run a container as standalone, multihost master or multihost slave. This is more or less a feature for advanced users. Please make sure you know how ioBroker multihost is working and set the ENVs as with `ìobroker setup custom`.
There is no need for executing `iobroker multihost enable` or `iobroker multihost connect` inside the container. Just configure the mentioned ENVs. The startup script will do all the magic.
For general information about iobroker multihost feature please see [official ioBroker documentation](https://www.iobroker.net/docu/index-24.htm?page_id=3068&lang=de).
### Healthcheck
Since v5.1.0 the image contains a simple Docker healthcheck. At the moment it only checks if js-controller is running inside the container and reports "healthy" or "unhealthy" to the Docker daemon. Further development is planned.
The healthcheck is configured to 5 retries in an 15s interval with a timeout of 5s. So a container needs a minimum of one minute to get unhealthy.
Hint: As the Docker daemon itself gives no opportunity to automatically restart an unhealthy container you might want to setup some kind of "watchdog container" like this simple one: https://github.com/buanet/docker-watchdog.
### Maintenance script (beta)
Within the implementation of the docker health check (above) some manual maintenance actions, like stopping ioBroker for upgrading js-controller, would cause the container to get "unhealthy" and may cause an external watchdog to automatically restart it.
In this case you can use the new maintenance command line tool inside the container. By simply typing `maintenance on` it will activate some kind of "maintenance mode" and automatically stop ioBroker while the container stays healthy.
After your maintenance is done just type `maintenance off`. Depending on the selected restart policy of your container, the command will stop (and automatically restart) it.
## Best practices
### Avoid using "latest" docker tag
To avoid conflicts when upgrading your container or getting in trouble when accidentally upgrading your container to a new major version I prefer using a version docker tag like "v4.2.0" instead of "latest" for creating your container.
With v5.1.0 an additional docker tag "latest-[major version]" is available. This gives you the possibility update your container automatically while always staying in the same major version.
### Upgrading your container
If you want to upgrade your ioBroker container to a new major version (e.g. from v4 to v5) I would prefer to do that by creating a backup in ioBroker (by "iobroker backup" or backitup adapter) and restoring it to a completely new container. All you need is time an the following steps:
* make a backup by command line ("iobroker backup") or backitup adapter
* stop the old container
* create a new and empty data folder or volume and place your backup file in it
* create a new container as your old or as you need it and use the new data folder/ volume for the /opt/iobroker mount point
* follow the log output of the container and be patient
After this steps the startup script inside the container will automatically detect and restore your backup to a new ioBroker instance. When iobroker is started after the restore it will install your adapters to the new ioBroker instance by itself. This might take some time but will give you the best and cleanest results...
## Miscellaneous
### Beta testing
If you want to get the newest features and changes feel free to use/ test the beta version of the Docker image. You can find the readme.md file for beta versions [here](https://github.com/buanet/docker-iobroker/blob/beta/README.md). Please make sure to read the changelog before testing beta versions.
### Subscribe to updates
If you want the newest updates about the image and my tutorials at https://smarthome.buanet.de you can simply subscribe to my new "news and updates" channel (only in German) on Telegram.
You will find the channel here: https://t.me/buanet_tutorials
### Support the project
The easiest way to support this project is to leave me some likes/ stars on Github and Docker hub!<br>
If you want to give something back, feel free to take a look into the [open issues](https://github.com/buanet/docker-iobroker/issues) or the [ioBroker forum thread](http://forum.iobroker.net/viewtopic.php?f=17&t=5089) and helping me answering questions, fixing bugs or adding new features!<br>
And if you want to buy me a beer instead, you can do this here: <a href="https://www.paypal.me/buanet" target="_blank"><img src="https://buanet.de/wp-content/uploads/2017/08/pp128.png" height="20" width="20"></a><br>
Thank you!
## Changelog
### v1.0.1 (2017-08-25)
* fixed locales issue
### v5.1.0 (2020-11-05)
* v5.0.2beta (2020-07-28)
* added docker tag for majorversion latest
* extend readme.md doku
* added maintenance script
* added container healthcheck
* fixed configuration procedure and logging for objects and states db setup
* v5.0.1beta (2020-07-01)
* fixing backup detection in startup script
* fixing permission issue on iobroker restored
* extended Logging
* optimize multihost support
### v5.0.0 (2020-06-29)
* v4.2.4beta (2020-06-23)
* added graceful shutdown
* small fix for GID/UID handling
* adding new ENV "IOB_MULTIHOST" for multihost support
* small syntax fixes in iobroker_startup.sh
* v4.2.3beta (2020-06-05)
* ~~updating js-controller to not stable version 3.1.5 to fix renaming issue~~ (is stable now)
* v4.2.2beta (2020-06-03)
* ~~workaround for renaming issues on startup~~ (fixed in js-controller)
* v4.2.1beta (2020-05-10)
* using node 12 instead of 10
* updated documentation in readme.md
### v4.2.0 (2020-04-14)
* v4.1.4beta (2020-04-07)
* switching base image to buster
* optimizing installation of packages defined by ENV "PACKAGES"
* v4.1.3beta (2020-02-08)
* renamed ENV for adminport (new "IOB_ADMINPORT)")
* added new ENVs for "iobroker setup custom" (replacing "REDIS")
* enhancements in startup script logging
* v4.1.2beta (2020-02-02)
* added feature for running user defined scripts on startup
* small fix for permissions issues on some systems
* v4.1.1beta (2020-01-17)
* updated openzwave to version 1.6.1007
### v4.1.0 (2020-01-17)
* improved readme.md
* v4.0.3beta (2020-01-06)
* added support to restore backup on startup
* small fixes according to "docker best practices"
* v4.0.2beta (2019-12-10)
* ~~added env for activating redis~~
* enhancements in startup script and docker file
* v4.0.1beta (2019-11-25)
* added env for iobroker admin port
* added env for usb-devices (setting permissions)
* updateing prerequisites for iobroker installation
* some small code fixes
### v4.0.0 (2019-10-25)
* v3.1.4beta (2019-10-23)
* added env for zwave support
* v3.1.3beta (2019-10-17)
* enhanced logging of startup-script
* multi arch 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
### v3.1.0 (2019-08-21)
* v3.0.3beta (2019-08-21)
* switching base image from "debian:latest" to "debian:stretch"
* v3.0.2beta (2019-06-13)
* using gosu instead of sudo
* changing output of ioBroker logging
* v3.0.1beta (2019-05-18)
* ~~switching back to iobroker-daemon for startup~~
### v3.0.0 (2019-05-09)
* v2.0.6beta (2019-04-14)
* added some additional logging
* fixing some issues for language env
* added permission fixing on first start
* v2.0.5beta (2019-02-09)
* added ENV to docker file
* added EXPOSE for admin
* final testing
* v2.0.4beta (2019-01-28)
* added support for env variables "avahi" and "packages"
* moving avahi-daemon installation into avahi startup script
* added script for installing optional packages
* optimizing logging output
* v2.0.3beta (2019-01-24)
* added support for running ioBroker under iobroker user
* optimizing logging output
* optimizing scripts
* v2.0.2beta (2019-01-23)
* optimizing and rearranged docker file
* changes for new ioBroker install script
* added restoring for empty mounted /opt/iobroker folder
* some more small fixes
* v2.0.1beta (2019-01-07)
* some changes for supporting other docker-environments than synology ds
### v2.0.0 (2018-12-05)
* v1.2.2beta (2018-12-05)
* using node8 instead of node6
* changes for new iobroker setup
* v1.2.1beta (2018-09-12)
* added support for firetv-adapter
### v1.2.0 (2018-08-21)
* v1.1.3beta (2018-08-21)
* ~~added ffmpeg-package for yahka to support webcams~~
* v1.1.2beta (2018-04-04)
* added ENV for timezone issue
* v1.1.1beta (2018-03-29)
* added wget package
* updated readme.md
### v1.1.0 (2017-12-10)
* v1.0.2beta (2017-12-10)
* changed startup call to fix restart issue
* fixed avahi startup issue
* fixed hostname issue
* added z-wave support
* added logging to /opt/scripts/docker_iobroker_log.txt
* v1.0.1beta (2017-08-25)
* fixed locales issue
### v1.0.0 (2017-08-22)
* moved and renamed iobroker startup script
* disabled iobroker deamon to (hopefully) fix restart issue
* disabled iobroker daemon to (hopefully) fix restart issue
* added some maintenance scripts
### v0.2.1 (2017-08-16)
* added libfontconfig package (for iobroker.phantomjs)
* ~~added libfontconfig package (for iobroker.phantomjs)~~
* added gnupg2 package as prerequisite for installing node version 6
### v0.2.0 (2017-06-04)
@@ -27,7 +329,7 @@ For instructions and discussion (in german) please visit ioBroker-Forum (http://
* changed node version from 4 to 6
### v0.1.2 (2017-03-14)
* added libpcap-dev package (for iobroker.amazon-dash)
* ~~added libpcap-dev package (for iobroker.amazon-dash)~~
### v0.1.1 (2017-03-10)
* added git package
@@ -46,7 +348,7 @@ For instructions and discussion (in german) please visit ioBroker-Forum (http://
MIT License
Copyright (c) 2017 Andre Germann
Copyright (c) 2017 [André 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

103
aarch64/Dockerfile Normal file
View File

@@ -0,0 +1,103 @@
FROM balenalib/aarch64-debian:buster
LABEL maintainer="Andre Germann" \
url="https://buanet.de"
ENV DEBIAN_FRONTEND noninteractive
# Install prerequisites (as listed in iobroker installer.sh)
RUN apt-get update && apt-get install -y \
acl \
apt-utils \
build-essential \
curl \
git \
gnupg2 \
gosu \
jq \
libavahi-compat-libdnssd-dev \
libcap2-bin \
libpam0g-dev \
libudev-dev \
locales \
pkg-config \
procps \
python \
python-dev \
sudo \
udev \
unzip \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install node
RUN curl -sL https://deb.nodesource.com/setup_12.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 directorys and copy scripts
RUN mkdir -p /opt/scripts/ \
&& mkdir -p /opt/userscripts/ \
&& chmod 777 /opt/scripts/ \
&& chmod 777 /opt/userscripts/
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
COPY scripts/setup_zwave.sh setup_zwave.sh
COPY scripts/healthcheck.sh healthcheck.sh
COPY scripts/maintenance.sh maintenance.sh
RUN chmod +x iobroker_startup.sh \
&& chmod +x setup_avahi.sh \
&& chmod +x setup_packages.sh \
&& chmod +x setup_zwave.sh \
&& chmod +x healthcheck.sh \
&& chmod +x maintenance.sh
WORKDIR /opt/userscripts/
COPY scripts/userscript_firststart_example.sh userscript_firststart_example.sh
COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh
# Install ioBroker
WORKDIR /
RUN apt-get update \
&& curl -sL https://iobroker.net/install.sh | bash - \
&& mkdir -p /opt/scripts/.docker_config/ \
&& echo $(hostname) > /opt/scripts/.docker_config/.install_host \
&& echo "starting" > /opt/scripts/.docker_config/.healthcheck \
&& echo $(hostname) > /opt/.firstrun \
&& rm -rf /var/lib/apt/lists/*
# Install node-gyp
WORKDIR /opt/iobroker/
RUN npm install -g node-gyp
# Backup initial ioBroker and userscript folder
RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \
&& tar -cf /opt/initial_userscripts.tar /opt/userscripts
# Setting up iobroker-user (shell and home directory)
RUN chsh -s /bin/bash iobroker \
&& usermod --home /opt/iobroker iobroker \
&& usermod -u 1000 iobroker \
&& groupmod -g 1000 iobroker
# Setting up ENVs
ENV DEBIAN_FRONTEND="teletype" \
LANG="de_DE.UTF-8" \
LANGUAGE="de_DE:de" \
LC_ALL="de_DE.UTF-8" \
SETGID=1000 \
SETUID=1000 \
TZ="Europe/Berlin"
# Healthcheck
HEALTHCHECK --interval=15s --timeout=5s --retries=5 \
CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"]
# Run startup-script
ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"]

View File

@@ -0,0 +1,20 @@
#!/bin/bash
# Script checks health of running container
if [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "starting" ]
then
echo 'Health status: OK - Startup script is still running.'
exit 0
elif [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "maintenance" ]
then
echo 'Health status: OK - Container is running in maintenance mode.'
exit 0
elif [ "$(ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}')" != "" ]
then
echo 'Health status: OK - Main process (js-controller) is running.'
exit 0
fi
echo 'Health status: !!! NOT OK !!! - Something went wrong. Please see container logs for more details and/or try restarting the container.'
exit 1

View File

@@ -0,0 +1,506 @@
#!/bin/bash
# Setting healthcheck status to "starting"
echo "starting" > /opt/scripts/.docker_config/.healthcheck
# Reading ENV
adminport=$IOB_ADMINPORT
avahi=$AVAHI
multihost=$IOB_MULTIHOST
objectsdbhost=$IOB_OBJECTSDB_HOST
objectsdbport=$IOB_OBJECTSDB_PORT
objectsdbtype=$IOB_OBJECTSDB_TYPE
packages=$PACKAGES
setgid=$SETGID
setuid=$SETUID
statesdbhost=$IOB_STATESDB_HOST
statesdbport=$IOB_STATESDB_PORT
statesdbtype=$IOB_STATESDB_TYPE
usbdevices=$USBDEVICES
zwave=$ZWAVE
# Getting date and time for logging
dati=`date '+%Y-%m-%d %H:%M:%S'`
# Logging 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 -----"
if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi
if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi
if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi
if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi
if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi
if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi
if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi
if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi
if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi
if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi
if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi
if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi
if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi
if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
#####
# STEP 1 - Preparing container
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 1 of 5: Preparing container -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Installing additional packages and setting uid/gid
if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ]
then
if [ "$packages" != "" ]
then
echo "Installing additional packages is set by ENV."
echo "The following packages will be installed:" $packages"..."
echo $packages > /opt/scripts/.packages
bash /opt/scripts/setup_packages.sh
echo "Done."
echo ' '
fi
if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ]
then
echo "Different UID and/ or GID is set by ENV."
echo "Changing UID to "$setuid" and GID to "$setgid"..."
usermod -u $setuid iobroker
groupmod -g $setgid iobroker
echo "Done."
echo ' '
fi
if [ -f /opt/.firstrun ]
then
echo "Registering maintenance script as command."
echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc
echo "Done."
echo ' '
fi
else
echo "Nothing to do here."
echo ' '
fi
# 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 [ `find /opt/iobroker -type f | wc -l` -lt 1 ]
then
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
tar -xf /opt/initial_iobroker.tar -C /
echo "Done."
elif [ -f /opt/iobroker/iobroker ]
then
echo "Existing installation of ioBroker detected in /opt/iobroker."
rm -f /opt/scripts/.docker_config/.install_host
elif [ $(ls *_backupiobroker.tar.gz 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/*_backupiobroker.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ]
then
if [ "$multihost" = "slave" ]
then
echo "IoBroker backup file detected in /opt/iobroker. But Multihost is set to \"slave\"."
echo "Restoring a backup is not supported on Multihost slaves. Please check configuration and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
else
echo "IoBroker backup file detected in /opt/iobroker. Preparing restore..."
mv /opt/iobroker/*.tar.gz /opt/
tar -xf /opt/initial_iobroker.tar -C /
mkdir /opt/iobroker/backups
mv /opt/*.tar.gz /opt/iobroker/backups/
chown -R $setuid:$setgid /opt/iobroker # fixes permission error during restore
echo "Done."
echo "Restoring ioBroker..."
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
echo "Done."
echo ' '
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "!!!!! IMPORTANT NOTE !!!!!"
echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!"
echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!"
echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!"
echo "!!!!! This might be take a looooong time! Please be patient! !!!!!"
echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
fi
else
echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!"
echo "Please check/ recreate mounted folder/ volume and start over."
exit 1
fi
echo ' '
#####
# Checking ioBroker-Installation
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 3 of 5: Checking ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
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 $setuid:$setgid /opt/iobroker
chown -R $setuid:$setgid /opt/scripts
echo "Done."
echo ' '
# Backing up original iobroker-file and changing sudo to gosu
echo "Fixing \"sudo-bug\" by replacing sudo in iobroker 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/scripts/.docker_config/.install_host ]
then
echo "Looks like this is a new and empty installation of ioBroker."
echo "Hostname needs to be updated to " $(hostname)"..."
bash iobroker host $(cat /opt/scripts/.docker_config/.install_host)
rm -f /opt/scripts/.docker_config/.install_host
echo "Done."
echo ' '
elif [ $(bash 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)"..."
bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="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/ settings which can be activated by the use of environment variables."
echo "For more information take a look at readme.md on Github!"
echo ' '
# Checking ENV for Adminport
if [ "$adminport" != "" ]
then
if [ "$adminport" != $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ]
then
echo "Adminport set by ENV does not match port configured in ioBroker installation."
echo "Setting Adminport to \""$adminport"\"..."
bash iobroker set admin.0 --port $adminport
echo "Done."
echo ' '
fi
fi
# Checking ENV for AVAHI
if [ "$avahi" != "" ]
then
if [ "$avahi" = "true" ]
then
echo "Avahi-daemon is activated by ENV."
chmod 755 /opt/scripts/setup_avahi.sh
bash /opt/scripts/setup_avahi.sh
echo "Done."
echo ' '
fi
fi
# Checking ENV for Z-WAVE
if [ "$zwave" != "" ]
then
if [ "$zwave" = "true" ]
then
echo "Z-Wave is activated by ENV."
chmod 755 /opt/scripts/setup_zwave.sh
bash /opt/scripts/setup_zwave.sh
echo "Done."
echo ' '
fi
fi
# checking ENV for USBDEVICES
if [ "$usbdevices" != "" ]
then
if [ "$usbdevices" != "none" ]
then
echo "Usb-device-support is activated by ENV."
IFS=';' read -ra devicearray <<< "$usbdevices"
for i in "${devicearray[@]}"
do
echo "Setting permissions for" $i"..."
chown root:dialout $i
chmod g+rw $i
done
echo "Done."
echo ' '
fi
fi
# Checking ENV for multihost setup
# Configuring objects db host
if [ "$multihost" = "master" ] && [ "$objectsdbtype" = "" ] && [ "$objectsdbhost" = "" ] && [ "$objectsdbport" = "" ]
then
echo "Multihost is set as \"master\" by ENV and no external objects db is set."
echo "Setting host of objects db to \"0.0.0.0\" to allow external communication..."
jq --arg objectsdbhost "0.0.0.0" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
echo ' '
elif [ "$multihost" = "master" ] && [ "$objectsdbhost" = "127.0.0.1" ]
then
echo "Multihost is set as \"master\" by ENV. But objects db host is set to \"127.0.0.1\" by ENV too."
echo "This configuration will not work! Please change or remove ENV \"IOB_OBJECTSDB_HOST\" and start over!"
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "master" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
then
echo "Multihost is set as \"master\" by ENV and external objects db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif ([ "$multihost" = "slave" ] && [ "$objectsdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbport" = "" ])
then
echo "Multihost is set as \"slave\" by ENV. But no external objects db is set."
echo "You have to configure ENVs \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" to connect to a maser objects db."
echo "Please check your settings and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "slave" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
then
echo "Multihost is set as \"slave\" by ENV and external objects db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif [ "$multihost" != "" ]
then
echo "Multihost is set but it seems like some configuration is missing."
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" correctly and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
fi
#Configuring states db host
if [ "$multihost" = "master" ] && [ "$statesdbtype" = "" ] && [ "$statesdbhost" = "" ] && [ "$statesdbport" = "" ]
then
echo "Multihost is set as \"master\" by ENV and no external states db is set."
echo "Setting host of states db to \"0.0.0.0\" to allow external communication..."
jq --arg statesdbhost "0.0.0.0" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
echo ' '
elif [ "$multihost" = "master" ] && [ "$statesdbhost" = "127.0.0.1" ]
then
echo "Multihost is set as \"master\" by ENV. But states db host is set to \"127.0.0.1\" by ENV too."
echo "This configuration will not work! Please change or remove ENV \"IOB_STATESDB_HOST\" and start over!"
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "master" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
then
echo "Multihost is set as \"master\" by ENV and external states db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif ([ "$multihost" = "slave" ] && [ "$statesdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbport" = "" ])
then
echo "Multihost is set as \"slave\" by ENV. But no external states db is set."
echo "You have to configure ENVs \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESDB_PORT\" to connect to a maser states db."
echo "Please check your settings and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "slave" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
then
echo "Multihost is set as \"slave\" by ENV and external states db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif [ "$multihost" != "" ]
then
echo "Multihost is set but it seems like some configuration is missing."
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESTDB_PORT\" correctly and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
fi
# Checking ENVs for custom setup of objects db
if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ]
then
if [ "$objectsdbtype" != $(jq -r '.objects.type' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_TYPE is set and value is different from detected ioBroker installation."
echo "Setting type of objects db to \""$objectsdbtype"\"..."
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$objectsdbhost" != $(jq -r '.objects.host' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_HOST is set and value is different from detected ioBroker installation."
echo "Setting host of objects db to \""$objectsdbhost"\"..."
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$objectsdbport" != $(jq -r '.objects.port' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_PORT is set and value is different from detected ioBroker installation."
echo "Setting port of objects db to \""$objectsdbport"\"..."
jq --arg objectsdbport $objectsdbport '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
fi
echo ' '
fi
# Checking ENVs for custom setup of states db#
if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ]
then
if [ "$statesdbtype" != $(jq -r '.states.type' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_TYPE is set and value is different from detected ioBroker installation."
echo "Setting type of states db to \""$statesdbtype"\"..."
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$statesdbhost" != $(jq -r '.states.host' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_HOST is set and value is different from detected ioBroker installation."
echo "Setting host of states db to \""$statesdbhost"\"..."
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$statesdbport" != $(jq -r '.states.port' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_PORT is set and value is different from detected ioBroker installation."
echo "Setting port of states db to \""$statesdbport"\"..."
jq --arg statesdbport $statesdbport '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
fi
echo ' '
fi
# Checking for Userscripts in /opt/userscripts
if [ `find /opt/userscripts -type f | wc -l` -lt 1 ]
then
echo "There is no data detected in /opt/userscripts. Restoring exapmple userscripts..."
tar -xf /opt/initial_userscripts.tar -C /
chmod 755 /opt/userscripts/userscript_firststart_example.sh
chmod 755 /opt/userscripts/userscript_everystart_example.sh
echo "Done."
echo ' '
elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ]
then
if [ -f /opt/userscripts/userscript_firststart.sh ] && [ -f /opt/.firstrun ]
then
echo "Userscript for first start detected and this is the first start of a new container."
echo "Running userscript_firststart.sh..."
chmod 755 /opt/userscripts/userscript_firststart.sh
bash /opt/userscripts/userscript_firststart.sh
echo "Done."
echo ' '
fi
if [ -f /opt/userscripts/userscript_everystart.sh ]
then
echo "Userscript for every start detected. Running userscript_everystart.sh..."
chmod 755 /opt/userscripts/userscript_everystart.sh
bash /opt/userscripts/userscript_everystart.sh
echo "Done."
echo ' '
fi
fi
# Removing first run marker when exists
if [ -f /opt/.firstrun ]
then
rm -f /opt/.firstrun
fi
#####
# Starting ioBroker
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 5 of 5: ioBroker startup -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Starting ioBroker..."
echo ' '
# Setting healthcheck status to "running"
echo "running" > /opt/scripts/.docker_config/.healthcheck
# Function for graceful shutdown by SIGTERM signal
shut_down() {
echo ' '
echo "Recived termination signal (SIGTERM)."
echo "Shutting down ioBroker..."
pid=$(ps -ef | awk '/[j]s.controller/{print $2}')
kill -SIGTERM "$pid"
exit
}
# Trap to get signal for graceful shutdown
trap 'shut_down' SIGTERM
# IoBroker start
gosu iobroker node node_modules/iobroker.js-controller/controller.js & wait
# Fallback process for keeping container running when ioBroker is stopped for maintenance (e.g. js-controller update)
tail -f /dev/null

View File

@@ -0,0 +1,50 @@
#!/bin/bash
if [ "$1" == "status" ]
then
if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ]
then
echo 'Maintenance mode is ON.'
exit 0
elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ]
then
echo 'Maintenance mode is OFF.'
exit 0
fi
elif [ "$1" == "on" ]
then
echo 'You are going to stop ioBroker and activating maintenance mode for this container.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Activating maintenance mode...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
sleep 1
echo 'Done.'
echo 'Stopping ioBroker...'
pkill -u iobroker
sleep 1
echo 'Done.'
exit 0
else
exit 0
fi
elif [ "$1" == "off" ]
then
echo 'You are going to deactivate maintenance mode for this container.'
echo 'Depending of the restart policy of this container, this will stop/ restart your container immediately.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Deactivating maintenance mode and forcing container to stop/ restart...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
pkill -u root
exit 0
else
exit 0
fi
else
echo 'Invalid command. Please try again.'
fi
exit 0

View File

@@ -0,0 +1,35 @@
#!/bin/bash
echo "Checking avahi-daemon installation state..."
if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ]
then
echo "Avahi is already installed..."
else
echo "Avahi-daemon is NOT installed. Going to install it now..."
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,13 @@
#!/bin/bash
apt-get -qq update
packages=$(cat /opt/scripts/.packages)
for i in $packages; do
sudo apt-get -qq -y install $i
done
rm -rf /var/lib/apt/lists/*
rm -f /opt/scripts/.packages
exit 0

View File

@@ -0,0 +1,19 @@
#!/bin/bash
echo "Checking openzwave installation state..."
if [ -e /usr/local/lib64 ]
then
echo "Openzwave is already installed..."
else
echo "Openzwave is NOT installed. Going to install it now..."
cd /opt
curl -s -L -O http://old.openzwave.com/downloads/openzwave-1.6.1007.tar.gz
tar -xf openzwave-1.6.1007.tar.gz && rm openzwave-1.6.1007.tar.gz
cd openzwave-1.6.1007 && make > /dev/null 2>&1 && make install > /dev/null 2>&1
ldconfig /usr/local/lib64
cd /opt/iobroker
# echo "Openzwave is now installed..."
fi
exit 0

View File

@@ -0,0 +1,13 @@
#!/bin/bash
# This is an example script file.
# To run the Script on every start of the container you have to rename it to userscript_everystart.sh.
# You can add your advanced script code here!
echo ' '
echo "I'm your startscript userscript_everystart.sh. I will run on EVERY container startup."
echo ' '
exit 0

View File

@@ -0,0 +1,12 @@
#!/bin/bash
# This is an example script file.
# To run the Script on the first start of a new container you have to rename it to userscript_firststart.sh.
# You can add your advanced script code here!
echo ' '
echo "I'm your startscript userscript_firststart.sh. I will run only on the FIRST startup of the container."
echo ' '
exit 0

103
amd64/Dockerfile Normal file
View File

@@ -0,0 +1,103 @@
FROM amd64/debian:buster
LABEL maintainer="Andre Germann" \
url="https://buanet.de"
ENV DEBIAN_FRONTEND noninteractive
# Install prerequisites (as listed in iobroker installer.sh)
RUN apt-get update && apt-get install -y \
acl \
apt-utils \
build-essential \
curl \
git \
gnupg2 \
gosu \
jq \
libavahi-compat-libdnssd-dev \
libcap2-bin \
libpam0g-dev \
libudev-dev \
locales \
pkg-config \
procps \
python \
python-dev \
sudo \
udev \
unzip \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install node
RUN curl -sL https://deb.nodesource.com/setup_12.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 directorys and copy scripts
RUN mkdir -p /opt/scripts/ \
&& mkdir -p /opt/userscripts/ \
&& chmod 777 /opt/scripts/ \
&& chmod 777 /opt/userscripts/
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
COPY scripts/setup_zwave.sh setup_zwave.sh
COPY scripts/healthcheck.sh healthcheck.sh
COPY scripts/maintenance.sh maintenance.sh
RUN chmod +x iobroker_startup.sh \
&& chmod +x setup_avahi.sh \
&& chmod +x setup_packages.sh \
&& chmod +x setup_zwave.sh \
&& chmod +x healthcheck.sh \
&& chmod +x maintenance.sh
WORKDIR /opt/userscripts/
COPY scripts/userscript_firststart_example.sh userscript_firststart_example.sh
COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh
# Install ioBroker
WORKDIR /
RUN apt-get update \
&& curl -sL https://iobroker.net/install.sh | bash - \
&& mkdir -p /opt/scripts/.docker_config/ \
&& echo $(hostname) > /opt/scripts/.docker_config/.install_host \
&& echo "starting" > /opt/scripts/.docker_config/.healthcheck \
&& echo $(hostname) > /opt/.firstrun \
&& rm -rf /var/lib/apt/lists/*
# Install node-gyp
WORKDIR /opt/iobroker/
RUN npm install -g node-gyp
# Backup initial ioBroker and userscript folder
RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \
&& tar -cf /opt/initial_userscripts.tar /opt/userscripts
# Setting up iobroker-user (shell and home directory)
RUN chsh -s /bin/bash iobroker \
&& usermod --home /opt/iobroker iobroker \
&& usermod -u 1000 iobroker \
&& groupmod -g 1000 iobroker
# Setting up ENVs
ENV DEBIAN_FRONTEND="teletype" \
LANG="de_DE.UTF-8" \
LANGUAGE="de_DE:de" \
LC_ALL="de_DE.UTF-8" \
SETGID=1000 \
SETUID=1000 \
TZ="Europe/Berlin"
# Healthcheck
HEALTHCHECK --interval=15s --timeout=5s --retries=5 \
CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"]
# Run startup-script
ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"]

View File

@@ -0,0 +1,20 @@
#!/bin/bash
# Script checks health of running container
if [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "starting" ]
then
echo 'Health status: OK - Startup script is still running.'
exit 0
elif [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "maintenance" ]
then
echo 'Health status: OK - Container is running in maintenance mode.'
exit 0
elif [ "$(ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}')" != "" ]
then
echo 'Health status: OK - Main process (js-controller) is running.'
exit 0
fi
echo 'Health status: !!! NOT OK !!! - Something went wrong. Please see container logs for more details and/or try restarting the container.'
exit 1

View File

@@ -0,0 +1,506 @@
#!/bin/bash
# Setting healthcheck status to "starting"
echo "starting" > /opt/scripts/.docker_config/.healthcheck
# Reading ENV
adminport=$IOB_ADMINPORT
avahi=$AVAHI
multihost=$IOB_MULTIHOST
objectsdbhost=$IOB_OBJECTSDB_HOST
objectsdbport=$IOB_OBJECTSDB_PORT
objectsdbtype=$IOB_OBJECTSDB_TYPE
packages=$PACKAGES
setgid=$SETGID
setuid=$SETUID
statesdbhost=$IOB_STATESDB_HOST
statesdbport=$IOB_STATESDB_PORT
statesdbtype=$IOB_STATESDB_TYPE
usbdevices=$USBDEVICES
zwave=$ZWAVE
# Getting date and time for logging
dati=`date '+%Y-%m-%d %H:%M:%S'`
# Logging 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 -----"
if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi
if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi
if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi
if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi
if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi
if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi
if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi
if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi
if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi
if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi
if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi
if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi
if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi
if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
#####
# STEP 1 - Preparing container
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 1 of 5: Preparing container -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Installing additional packages and setting uid/gid
if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ]
then
if [ "$packages" != "" ]
then
echo "Installing additional packages is set by ENV."
echo "The following packages will be installed:" $packages"..."
echo $packages > /opt/scripts/.packages
bash /opt/scripts/setup_packages.sh
echo "Done."
echo ' '
fi
if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ]
then
echo "Different UID and/ or GID is set by ENV."
echo "Changing UID to "$setuid" and GID to "$setgid"..."
usermod -u $setuid iobroker
groupmod -g $setgid iobroker
echo "Done."
echo ' '
fi
if [ -f /opt/.firstrun ]
then
echo "Registering maintenance script as command."
echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc
echo "Done."
echo ' '
fi
else
echo "Nothing to do here."
echo ' '
fi
# 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 [ `find /opt/iobroker -type f | wc -l` -lt 1 ]
then
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
tar -xf /opt/initial_iobroker.tar -C /
echo "Done."
elif [ -f /opt/iobroker/iobroker ]
then
echo "Existing installation of ioBroker detected in /opt/iobroker."
rm -f /opt/scripts/.docker_config/.install_host
elif [ $(ls *_backupiobroker.tar.gz 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/*_backupiobroker.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ]
then
if [ "$multihost" = "slave" ]
then
echo "IoBroker backup file detected in /opt/iobroker. But Multihost is set to \"slave\"."
echo "Restoring a backup is not supported on Multihost slaves. Please check configuration and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
else
echo "IoBroker backup file detected in /opt/iobroker. Preparing restore..."
mv /opt/iobroker/*.tar.gz /opt/
tar -xf /opt/initial_iobroker.tar -C /
mkdir /opt/iobroker/backups
mv /opt/*.tar.gz /opt/iobroker/backups/
chown -R $setuid:$setgid /opt/iobroker # fixes permission error during restore
echo "Done."
echo "Restoring ioBroker..."
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
echo "Done."
echo ' '
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "!!!!! IMPORTANT NOTE !!!!!"
echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!"
echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!"
echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!"
echo "!!!!! This might be take a looooong time! Please be patient! !!!!!"
echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
fi
else
echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!"
echo "Please check/ recreate mounted folder/ volume and start over."
exit 1
fi
echo ' '
#####
# Checking ioBroker-Installation
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 3 of 5: Checking ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
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 $setuid:$setgid /opt/iobroker
chown -R $setuid:$setgid /opt/scripts
echo "Done."
echo ' '
# Backing up original iobroker-file and changing sudo to gosu
echo "Fixing \"sudo-bug\" by replacing sudo in iobroker 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/scripts/.docker_config/.install_host ]
then
echo "Looks like this is a new and empty installation of ioBroker."
echo "Hostname needs to be updated to " $(hostname)"..."
bash iobroker host $(cat /opt/scripts/.docker_config/.install_host)
rm -f /opt/scripts/.docker_config/.install_host
echo "Done."
echo ' '
elif [ $(bash 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)"..."
bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="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/ settings which can be activated by the use of environment variables."
echo "For more information take a look at readme.md on Github!"
echo ' '
# Checking ENV for Adminport
if [ "$adminport" != "" ]
then
if [ "$adminport" != $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ]
then
echo "Adminport set by ENV does not match port configured in ioBroker installation."
echo "Setting Adminport to \""$adminport"\"..."
bash iobroker set admin.0 --port $adminport
echo "Done."
echo ' '
fi
fi
# Checking ENV for AVAHI
if [ "$avahi" != "" ]
then
if [ "$avahi" = "true" ]
then
echo "Avahi-daemon is activated by ENV."
chmod 755 /opt/scripts/setup_avahi.sh
bash /opt/scripts/setup_avahi.sh
echo "Done."
echo ' '
fi
fi
# Checking ENV for Z-WAVE
if [ "$zwave" != "" ]
then
if [ "$zwave" = "true" ]
then
echo "Z-Wave is activated by ENV."
chmod 755 /opt/scripts/setup_zwave.sh
bash /opt/scripts/setup_zwave.sh
echo "Done."
echo ' '
fi
fi
# checking ENV for USBDEVICES
if [ "$usbdevices" != "" ]
then
if [ "$usbdevices" != "none" ]
then
echo "Usb-device-support is activated by ENV."
IFS=';' read -ra devicearray <<< "$usbdevices"
for i in "${devicearray[@]}"
do
echo "Setting permissions for" $i"..."
chown root:dialout $i
chmod g+rw $i
done
echo "Done."
echo ' '
fi
fi
# Checking ENV for multihost setup
# Configuring objects db host
if [ "$multihost" = "master" ] && [ "$objectsdbtype" = "" ] && [ "$objectsdbhost" = "" ] && [ "$objectsdbport" = "" ]
then
echo "Multihost is set as \"master\" by ENV and no external objects db is set."
echo "Setting host of objects db to \"0.0.0.0\" to allow external communication..."
jq --arg objectsdbhost "0.0.0.0" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
echo ' '
elif [ "$multihost" = "master" ] && [ "$objectsdbhost" = "127.0.0.1" ]
then
echo "Multihost is set as \"master\" by ENV. But objects db host is set to \"127.0.0.1\" by ENV too."
echo "This configuration will not work! Please change or remove ENV \"IOB_OBJECTSDB_HOST\" and start over!"
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "master" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
then
echo "Multihost is set as \"master\" by ENV and external objects db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif ([ "$multihost" = "slave" ] && [ "$objectsdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbport" = "" ])
then
echo "Multihost is set as \"slave\" by ENV. But no external objects db is set."
echo "You have to configure ENVs \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" to connect to a maser objects db."
echo "Please check your settings and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "slave" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
then
echo "Multihost is set as \"slave\" by ENV and external objects db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif [ "$multihost" != "" ]
then
echo "Multihost is set but it seems like some configuration is missing."
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" correctly and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
fi
#Configuring states db host
if [ "$multihost" = "master" ] && [ "$statesdbtype" = "" ] && [ "$statesdbhost" = "" ] && [ "$statesdbport" = "" ]
then
echo "Multihost is set as \"master\" by ENV and no external states db is set."
echo "Setting host of states db to \"0.0.0.0\" to allow external communication..."
jq --arg statesdbhost "0.0.0.0" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
echo ' '
elif [ "$multihost" = "master" ] && [ "$statesdbhost" = "127.0.0.1" ]
then
echo "Multihost is set as \"master\" by ENV. But states db host is set to \"127.0.0.1\" by ENV too."
echo "This configuration will not work! Please change or remove ENV \"IOB_STATESDB_HOST\" and start over!"
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "master" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
then
echo "Multihost is set as \"master\" by ENV and external states db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif ([ "$multihost" = "slave" ] && [ "$statesdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbport" = "" ])
then
echo "Multihost is set as \"slave\" by ENV. But no external states db is set."
echo "You have to configure ENVs \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESDB_PORT\" to connect to a maser states db."
echo "Please check your settings and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "slave" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
then
echo "Multihost is set as \"slave\" by ENV and external states db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif [ "$multihost" != "" ]
then
echo "Multihost is set but it seems like some configuration is missing."
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESTDB_PORT\" correctly and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
fi
# Checking ENVs for custom setup of objects db
if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ]
then
if [ "$objectsdbtype" != $(jq -r '.objects.type' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_TYPE is set and value is different from detected ioBroker installation."
echo "Setting type of objects db to \""$objectsdbtype"\"..."
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$objectsdbhost" != $(jq -r '.objects.host' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_HOST is set and value is different from detected ioBroker installation."
echo "Setting host of objects db to \""$objectsdbhost"\"..."
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$objectsdbport" != $(jq -r '.objects.port' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_PORT is set and value is different from detected ioBroker installation."
echo "Setting port of objects db to \""$objectsdbport"\"..."
jq --arg objectsdbport $objectsdbport '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
fi
echo ' '
fi
# Checking ENVs for custom setup of states db#
if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ]
then
if [ "$statesdbtype" != $(jq -r '.states.type' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_TYPE is set and value is different from detected ioBroker installation."
echo "Setting type of states db to \""$statesdbtype"\"..."
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$statesdbhost" != $(jq -r '.states.host' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_HOST is set and value is different from detected ioBroker installation."
echo "Setting host of states db to \""$statesdbhost"\"..."
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$statesdbport" != $(jq -r '.states.port' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_PORT is set and value is different from detected ioBroker installation."
echo "Setting port of states db to \""$statesdbport"\"..."
jq --arg statesdbport $statesdbport '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
fi
echo ' '
fi
# Checking for Userscripts in /opt/userscripts
if [ `find /opt/userscripts -type f | wc -l` -lt 1 ]
then
echo "There is no data detected in /opt/userscripts. Restoring exapmple userscripts..."
tar -xf /opt/initial_userscripts.tar -C /
chmod 755 /opt/userscripts/userscript_firststart_example.sh
chmod 755 /opt/userscripts/userscript_everystart_example.sh
echo "Done."
echo ' '
elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ]
then
if [ -f /opt/userscripts/userscript_firststart.sh ] && [ -f /opt/.firstrun ]
then
echo "Userscript for first start detected and this is the first start of a new container."
echo "Running userscript_firststart.sh..."
chmod 755 /opt/userscripts/userscript_firststart.sh
bash /opt/userscripts/userscript_firststart.sh
echo "Done."
echo ' '
fi
if [ -f /opt/userscripts/userscript_everystart.sh ]
then
echo "Userscript for every start detected. Running userscript_everystart.sh..."
chmod 755 /opt/userscripts/userscript_everystart.sh
bash /opt/userscripts/userscript_everystart.sh
echo "Done."
echo ' '
fi
fi
# Removing first run marker when exists
if [ -f /opt/.firstrun ]
then
rm -f /opt/.firstrun
fi
#####
# Starting ioBroker
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 5 of 5: ioBroker startup -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Starting ioBroker..."
echo ' '
# Setting healthcheck status to "running"
echo "running" > /opt/scripts/.docker_config/.healthcheck
# Function for graceful shutdown by SIGTERM signal
shut_down() {
echo ' '
echo "Recived termination signal (SIGTERM)."
echo "Shutting down ioBroker..."
pid=$(ps -ef | awk '/[j]s.controller/{print $2}')
kill -SIGTERM "$pid"
exit
}
# Trap to get signal for graceful shutdown
trap 'shut_down' SIGTERM
# IoBroker start
gosu iobroker node node_modules/iobroker.js-controller/controller.js & wait
# Fallback process for keeping container running when ioBroker is stopped for maintenance (e.g. js-controller update)
tail -f /dev/null

View File

@@ -0,0 +1,50 @@
#!/bin/bash
if [ "$1" == "status" ]
then
if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ]
then
echo 'Maintenance mode is ON.'
exit 0
elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ]
then
echo 'Maintenance mode is OFF.'
exit 0
fi
elif [ "$1" == "on" ]
then
echo 'You are going to stop ioBroker and activating maintenance mode for this container.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Activating maintenance mode...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
sleep 1
echo 'Done.'
echo 'Stopping ioBroker...'
pkill -u iobroker
sleep 1
echo 'Done.'
exit 0
else
exit 0
fi
elif [ "$1" == "off" ]
then
echo 'You are going to deactivate maintenance mode for this container.'
echo 'Depending of the restart policy of this container, this will stop/ restart your container immediately.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Deactivating maintenance mode and forcing container to stop/ restart...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
pkill -u root
exit 0
else
exit 0
fi
else
echo 'Invalid command. Please try again.'
fi
exit 0

View File

@@ -0,0 +1,35 @@
#!/bin/bash
echo "Checking avahi-daemon installation state..."
if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ]
then
echo "Avahi is already installed..."
else
echo "Avahi-daemon is NOT installed. Going to install it now..."
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,13 @@
#!/bin/bash
apt-get -qq update
packages=$(cat /opt/scripts/.packages)
for i in $packages; do
sudo apt-get -qq -y install $i
done
rm -rf /var/lib/apt/lists/*
rm -f /opt/scripts/.packages
exit 0

View File

@@ -0,0 +1,19 @@
#!/bin/bash
echo "Checking openzwave installation state..."
if [ -e /usr/local/lib64 ]
then
echo "Openzwave is already installed..."
else
echo "Openzwave is NOT installed. Going to install it now..."
cd /opt
curl -s -L -O http://old.openzwave.com/downloads/openzwave-1.6.1007.tar.gz
tar -xf openzwave-1.6.1007.tar.gz && rm openzwave-1.6.1007.tar.gz
cd openzwave-1.6.1007 && make > /dev/null 2>&1 && make install > /dev/null 2>&1
ldconfig /usr/local/lib64
cd /opt/iobroker
# echo "Openzwave is now installed..."
fi
exit 0

View File

@@ -0,0 +1,13 @@
#!/bin/bash
# This is an example script file.
# To run the Script on every start of the container you have to rename it to userscript_everystart.sh.
# You can add your advanced script code here!
echo ' '
echo "I'm your startscript userscript_everystart.sh. I will run on EVERY container startup."
echo ' '
exit 0

View File

@@ -0,0 +1,12 @@
#!/bin/bash
# This is an example script file.
# To run the Script on the first start of a new container you have to rename it to userscript_firststart.sh.
# You can add your advanced script code here!
echo ' '
echo "I'm your startscript userscript_firststart.sh. I will run only on the FIRST startup of the container."
echo ' '
exit 0

103
armv7hf/Dockerfile Normal file
View File

@@ -0,0 +1,103 @@
FROM balenalib/armv7hf-debian:buster
LABEL maintainer="Andre Germann" \
url="https://buanet.de"
ENV DEBIAN_FRONTEND noninteractive
# Install prerequisites (as listed in iobroker installer.sh)
RUN apt-get update && apt-get install -y \
acl \
apt-utils \
build-essential \
curl \
git \
gnupg2 \
gosu \
jq \
libavahi-compat-libdnssd-dev \
libcap2-bin \
libpam0g-dev \
libudev-dev \
locales \
pkg-config \
procps \
python \
python-dev \
sudo \
udev \
unzip \
wget \
&& rm -rf /var/lib/apt/lists/*
# Install node
RUN curl -sL https://deb.nodesource.com/setup_12.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 directorys and copy scripts
RUN mkdir -p /opt/scripts/ \
&& mkdir -p /opt/userscripts/ \
&& chmod 777 /opt/scripts/ \
&& chmod 777 /opt/userscripts/
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
COPY scripts/setup_zwave.sh setup_zwave.sh
COPY scripts/healthcheck.sh healthcheck.sh
COPY scripts/maintenance.sh maintenance.sh
RUN chmod +x iobroker_startup.sh \
&& chmod +x setup_avahi.sh \
&& chmod +x setup_packages.sh \
&& chmod +x setup_zwave.sh \
&& chmod +x healthcheck.sh \
&& chmod +x maintenance.sh
WORKDIR /opt/userscripts/
COPY scripts/userscript_firststart_example.sh userscript_firststart_example.sh
COPY scripts/userscript_everystart_example.sh userscript_everystart_example.sh
# Install ioBroker
WORKDIR /
RUN apt-get update \
&& curl -sL https://iobroker.net/install.sh | bash - \
&& mkdir -p /opt/scripts/.docker_config/ \
&& echo $(hostname) > /opt/scripts/.docker_config/.install_host \
&& echo "starting" > /opt/scripts/.docker_config/.healthcheck \
&& echo $(hostname) > /opt/.firstrun \
&& rm -rf /var/lib/apt/lists/*
# Install node-gyp
WORKDIR /opt/iobroker/
RUN npm install -g node-gyp
# Backup initial ioBroker and userscript folder
RUN tar -cf /opt/initial_iobroker.tar /opt/iobroker \
&& tar -cf /opt/initial_userscripts.tar /opt/userscripts
# Setting up iobroker-user (shell and home directory)
RUN chsh -s /bin/bash iobroker \
&& usermod --home /opt/iobroker iobroker \
&& usermod -u 1000 iobroker \
&& groupmod -g 1000 iobroker
# Setting up ENVs
ENV DEBIAN_FRONTEND="teletype" \
LANG="de_DE.UTF-8" \
LANGUAGE="de_DE:de" \
LC_ALL="de_DE.UTF-8" \
SETGID=1000 \
SETUID=1000 \
TZ="Europe/Berlin"
# Healthcheck
HEALTHCHECK --interval=15s --timeout=5s --retries=5 \
CMD ["/bin/bash", "-c", "/opt/scripts/healthcheck.sh"]
# Run startup-script
ENTRYPOINT ["/bin/bash", "-c", "/opt/scripts/iobroker_startup.sh"]

View File

@@ -0,0 +1,20 @@
#!/bin/bash
# Script checks health of running container
if [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "starting" ]
then
echo 'Health status: OK - Startup script is still running.'
exit 0
elif [ "$(cat /opt/scripts/.docker_config/.healthcheck)" == "maintenance" ]
then
echo 'Health status: OK - Container is running in maintenance mode.'
exit 0
elif [ "$(ps -fe|grep "[i]obroker.js-controller"|awk '{print $2}')" != "" ]
then
echo 'Health status: OK - Main process (js-controller) is running.'
exit 0
fi
echo 'Health status: !!! NOT OK !!! - Something went wrong. Please see container logs for more details and/or try restarting the container.'
exit 1

View File

@@ -0,0 +1,506 @@
#!/bin/bash
# Setting healthcheck status to "starting"
echo "starting" > /opt/scripts/.docker_config/.healthcheck
# Reading ENV
adminport=$IOB_ADMINPORT
avahi=$AVAHI
multihost=$IOB_MULTIHOST
objectsdbhost=$IOB_OBJECTSDB_HOST
objectsdbport=$IOB_OBJECTSDB_PORT
objectsdbtype=$IOB_OBJECTSDB_TYPE
packages=$PACKAGES
setgid=$SETGID
setuid=$SETUID
statesdbhost=$IOB_STATESDB_HOST
statesdbport=$IOB_STATESDB_PORT
statesdbtype=$IOB_STATESDB_TYPE
usbdevices=$USBDEVICES
zwave=$ZWAVE
# Getting date and time for logging
dati=`date '+%Y-%m-%d %H:%M:%S'`
# Logging 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 -----"
if [ "$adminport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_ADMINPORT: $adminport)" && echo " -----"; fi
if [ "$avahi" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" AVAHI: $avahi)" && echo " -----"; fi
if [ "$multihost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_MULTIHOST: $multihost)" && echo " -----"; fi
if [ "$objectsdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_HOST: $objectsdbhost)" && echo " -----"; fi
if [ "$objectsdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_PORT: $objectsdbport)" && echo " -----"; fi
if [ "$objectsdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_OBJECTSDB_TYPE: $objectsdbtype)" && echo " -----"; fi
if [ "$packages" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" PACKAGES: $packages)" && echo " -----"; fi
if [ "$setgid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETGID: $setgid)" && echo " -----"; fi
if [ "$setuid" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" SETUID: $setuid)" && echo " -----"; fi
if [ "$statesdbhost" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_HOST: $statesdbhost)" && echo " -----"; fi
if [ "$statesdbport" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_PORT: $statesdbport)" && echo " -----"; fi
if [ "$statesdbtype" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" IOB_STATESDB_TYPE: $statesdbtype)" && echo " -----"; fi
if [ "$usbdevices" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" USBDEVICES: $usbdevices)" && echo " -----"; fi
if [ "$zwave" != "" ]; then echo -n "----- " && echo -n "$(printf "%-10s %-23s" ZWAVE: $zwave)" && echo " -----"; fi
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
#####
# STEP 1 - Preparing container
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 1 of 5: Preparing container -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
# Installing additional packages and setting uid/gid
if [ "$packages" != "" ] || [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ] || [ -f /opt/.firstrun ]
then
if [ "$packages" != "" ]
then
echo "Installing additional packages is set by ENV."
echo "The following packages will be installed:" $packages"..."
echo $packages > /opt/scripts/.packages
bash /opt/scripts/setup_packages.sh
echo "Done."
echo ' '
fi
if [ $(cat /etc/group | grep 'iobroker:' | cut -d':' -f3) != $setgid ] || [ $(cat /etc/passwd | grep 'iobroker:' | cut -d':' -f3) != $setuid ]
then
echo "Different UID and/ or GID is set by ENV."
echo "Changing UID to "$setuid" and GID to "$setgid"..."
usermod -u $setuid iobroker
groupmod -g $setgid iobroker
echo "Done."
echo ' '
fi
if [ -f /opt/.firstrun ]
then
echo "Registering maintenance script as command."
echo "alias maintenance=\'/opt/scripts/maintenance.sh\'" >> /root/.bashrc
echo "Done."
echo ' '
fi
else
echo "Nothing to do here."
echo ' '
fi
# 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 [ `find /opt/iobroker -type f | wc -l` -lt 1 ]
then
echo "There is no data detected in /opt/iobroker. Restoring initial ioBroker installation..."
tar -xf /opt/initial_iobroker.tar -C /
echo "Done."
elif [ -f /opt/iobroker/iobroker ]
then
echo "Existing installation of ioBroker detected in /opt/iobroker."
rm -f /opt/scripts/.docker_config/.install_host
elif [ $(ls *_backupiobroker.tar.gz 2> /dev/null | wc -l) != "0" ] && [ $(tar -ztvf /opt/iobroker/*_backupiobroker.tar.gz "backup/backup.json" 2> /dev/null | wc -l) != "0" ]
then
if [ "$multihost" = "slave" ]
then
echo "IoBroker backup file detected in /opt/iobroker. But Multihost is set to \"slave\"."
echo "Restoring a backup is not supported on Multihost slaves. Please check configuration and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
else
echo "IoBroker backup file detected in /opt/iobroker. Preparing restore..."
mv /opt/iobroker/*.tar.gz /opt/
tar -xf /opt/initial_iobroker.tar -C /
mkdir /opt/iobroker/backups
mv /opt/*.tar.gz /opt/iobroker/backups/
chown -R $setuid:$setgid /opt/iobroker # fixes permission error during restore
echo "Done."
echo "Restoring ioBroker..."
iobroker restore 0 > /opt/iobroker/log/restore.log 2>&1
echo "Done."
echo ' '
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
echo "!!!!! IMPORTANT NOTE !!!!!"
echo "!!!!! The sartup script restored iobroker from a backup file. !!!!!"
echo "!!!!! Check /opt/iobroker/log/restore.log to see if restore was successful. !!!!!"
echo "!!!!! When ioBroker now starts it will reinstall all Adapters automatically. !!!!!"
echo "!!!!! This might be take a looooong time! Please be patient! !!!!!"
echo "!!!!! You can view installation process by taking a look at ioBroker log. !!!!!"
echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
fi
else
echo "There is data detected in /opt/iobroker but it looks like it is no instance of ioBroker or a valid backup file!"
echo "Please check/ recreate mounted folder/ volume and start over."
exit 1
fi
echo ' '
#####
# Checking ioBroker-Installation
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 3 of 5: Checking ioBroker installation -----"
echo "$(printf -- '-%.0s' {1..60})"
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 $setuid:$setgid /opt/iobroker
chown -R $setuid:$setgid /opt/scripts
echo "Done."
echo ' '
# Backing up original iobroker-file and changing sudo to gosu
echo "Fixing \"sudo-bug\" by replacing sudo in iobroker 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/scripts/.docker_config/.install_host ]
then
echo "Looks like this is a new and empty installation of ioBroker."
echo "Hostname needs to be updated to " $(hostname)"..."
bash iobroker host $(cat /opt/scripts/.docker_config/.install_host)
rm -f /opt/scripts/.docker_config/.install_host
echo "Done."
echo ' '
elif [ $(bash 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)"..."
bash iobroker host $(iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="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/ settings which can be activated by the use of environment variables."
echo "For more information take a look at readme.md on Github!"
echo ' '
# Checking ENV for Adminport
if [ "$adminport" != "" ]
then
if [ "$adminport" != $(bash iobroker object get system.adapter.admin.0 --pretty | grep -oP '(?<="port": )[^,]*') ]
then
echo "Adminport set by ENV does not match port configured in ioBroker installation."
echo "Setting Adminport to \""$adminport"\"..."
bash iobroker set admin.0 --port $adminport
echo "Done."
echo ' '
fi
fi
# Checking ENV for AVAHI
if [ "$avahi" != "" ]
then
if [ "$avahi" = "true" ]
then
echo "Avahi-daemon is activated by ENV."
chmod 755 /opt/scripts/setup_avahi.sh
bash /opt/scripts/setup_avahi.sh
echo "Done."
echo ' '
fi
fi
# Checking ENV for Z-WAVE
if [ "$zwave" != "" ]
then
if [ "$zwave" = "true" ]
then
echo "Z-Wave is activated by ENV."
chmod 755 /opt/scripts/setup_zwave.sh
bash /opt/scripts/setup_zwave.sh
echo "Done."
echo ' '
fi
fi
# checking ENV for USBDEVICES
if [ "$usbdevices" != "" ]
then
if [ "$usbdevices" != "none" ]
then
echo "Usb-device-support is activated by ENV."
IFS=';' read -ra devicearray <<< "$usbdevices"
for i in "${devicearray[@]}"
do
echo "Setting permissions for" $i"..."
chown root:dialout $i
chmod g+rw $i
done
echo "Done."
echo ' '
fi
fi
# Checking ENV for multihost setup
# Configuring objects db host
if [ "$multihost" = "master" ] && [ "$objectsdbtype" = "" ] && [ "$objectsdbhost" = "" ] && [ "$objectsdbport" = "" ]
then
echo "Multihost is set as \"master\" by ENV and no external objects db is set."
echo "Setting host of objects db to \"0.0.0.0\" to allow external communication..."
jq --arg objectsdbhost "0.0.0.0" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
echo ' '
elif [ "$multihost" = "master" ] && [ "$objectsdbhost" = "127.0.0.1" ]
then
echo "Multihost is set as \"master\" by ENV. But objects db host is set to \"127.0.0.1\" by ENV too."
echo "This configuration will not work! Please change or remove ENV \"IOB_OBJECTSDB_HOST\" and start over!"
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "master" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
then
echo "Multihost is set as \"master\" by ENV and external objects db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif ([ "$multihost" = "slave" ] && [ "$objectsdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$objectsdbport" = "" ])
then
echo "Multihost is set as \"slave\" by ENV. But no external objects db is set."
echo "You have to configure ENVs \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" to connect to a maser objects db."
echo "Please check your settings and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "slave" ] && [ "$objectsdbtype" != "" ] && [ "$objectsdbhost" != "" ] && [ "$objectsdbport" != "" ]
then
echo "Multihost is set as \"slave\" by ENV and external objects db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif [ "$multihost" != "" ]
then
echo "Multihost is set but it seems like some configuration is missing."
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_OBJECTSDB_TYPE\", \"IOB_OBJECTSDB_HOST\" and \"IOB_OBJECTSDB_PORT\" correctly and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
fi
#Configuring states db host
if [ "$multihost" = "master" ] && [ "$statesdbtype" = "" ] && [ "$statesdbhost" = "" ] && [ "$statesdbport" = "" ]
then
echo "Multihost is set as \"master\" by ENV and no external states db is set."
echo "Setting host of states db to \"0.0.0.0\" to allow external communication..."
jq --arg statesdbhost "0.0.0.0" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
echo ' '
elif [ "$multihost" = "master" ] && [ "$statesdbhost" = "127.0.0.1" ]
then
echo "Multihost is set as \"master\" by ENV. But states db host is set to \"127.0.0.1\" by ENV too."
echo "This configuration will not work! Please change or remove ENV \"IOB_STATESDB_HOST\" and start over!"
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "master" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
then
echo "Multihost is set as \"master\" by ENV and external states db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif ([ "$multihost" = "slave" ] && [ "$statesdbtype" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbhost" = "" ]) || ([ "$multihost" = "slave" ] && [ "$statesdbport" = "" ])
then
echo "Multihost is set as \"slave\" by ENV. But no external states db is set."
echo "You have to configure ENVs \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESDB_PORT\" to connect to a maser states db."
echo "Please check your settings and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
elif [ "$multihost" = "slave" ] && [ "$statesdbtype" != "" ] && [ "$statesdbhost" != "" ] && [ "$statesdbport" != "" ]
then
echo "Multihost is set as \"slave\" by ENV and external states db is set."
echo "Skipping this step..."
echo "Done."
echo ' '
elif [ "$multihost" != "" ]
then
echo "Multihost is set but it seems like some configuration is missing."
echo "Please checke if you have configured the ENVs \"MULTIHOST\", \"IOB_STATESDB_TYPE\", \"IOB_STATESDB_HOST\" and \"IOB_STATESTDB_PORT\" correctly and start over."
echo "For more information see readme.md on Github (https://github.com/buanet/docker-iobroker)."
exit 1
fi
# Checking ENVs for custom setup of objects db
if [ "$objectsdbtype" != "" ] || [ "$objectsdbhost" != "" ] || [ "$objectsdbport" != "" ]
then
if [ "$objectsdbtype" != $(jq -r '.objects.type' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_TYPE is set and value is different from detected ioBroker installation."
echo "Setting type of objects db to \""$objectsdbtype"\"..."
jq --arg objectsdbtype "$objectsdbtype" '.objects.type = $objectsdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$objectsdbhost" != $(jq -r '.objects.host' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_HOST is set and value is different from detected ioBroker installation."
echo "Setting host of objects db to \""$objectsdbhost"\"..."
jq --arg objectsdbhost "$objectsdbhost" '.objects.host = $objectsdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$objectsdbport" != $(jq -r '.objects.port' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_OBJECTSDB_PORT is set and value is different from detected ioBroker installation."
echo "Setting port of objects db to \""$objectsdbport"\"..."
jq --arg objectsdbport $objectsdbport '.objects.port = $objectsdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_OBJECTSDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
fi
echo ' '
fi
# Checking ENVs for custom setup of states db#
if [ "$statesdbtype" != "" ] || [ "$statesdbhost" != "" ] || [ "$statesdbport" != "" ]
then
if [ "$statesdbtype" != $(jq -r '.states.type' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_TYPE is set and value is different from detected ioBroker installation."
echo "Setting type of states db to \""$statesdbtype"\"..."
jq --arg statesdbtype "$statesdbtype" '.states.type = $statesdbtype' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_TYPE is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$statesdbhost" != $(jq -r '.states.host' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_HOST is set and value is different from detected ioBroker installation."
echo "Setting host of states db to \""$statesdbhost"\"..."
jq --arg statesdbhost "$statesdbhost" '.states.host = $statesdbhost' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_HOST is set and value meets detected ioBroker installation. Nothing to do here."
fi
if [ "$statesdbport" != $(jq -r '.states.port' /opt/iobroker/iobroker-data/iobroker.json) ]
then
echo "ENV IOB_STATESDB_PORT is set and value is different from detected ioBroker installation."
echo "Setting port of states db to \""$statesdbport"\"..."
jq --arg statesdbport $statesdbport '.states.port = $statesdbport' /opt/iobroker/iobroker-data/iobroker.json > /opt/iobroker/iobroker-data/iobroker.json.tmp && mv /opt/iobroker/iobroker-data/iobroker.json.tmp /opt/iobroker/iobroker-data/iobroker.json
chown -R $setuid:$setgid /opt/iobroker/iobroker-data/iobroker.json && chmod 674 /opt/iobroker/iobroker-data/iobroker.json
echo "Done."
else
echo "ENV IOB_STATESDB_PORT is set and value meets detected ioBroker installation. Nothing to do here."
fi
echo ' '
fi
# Checking for Userscripts in /opt/userscripts
if [ `find /opt/userscripts -type f | wc -l` -lt 1 ]
then
echo "There is no data detected in /opt/userscripts. Restoring exapmple userscripts..."
tar -xf /opt/initial_userscripts.tar -C /
chmod 755 /opt/userscripts/userscript_firststart_example.sh
chmod 755 /opt/userscripts/userscript_everystart_example.sh
echo "Done."
echo ' '
elif [ -f /opt/userscripts/userscript_firststart.sh ] || [ -f /opt/userscripts/userscript_everystart.sh ]
then
if [ -f /opt/userscripts/userscript_firststart.sh ] && [ -f /opt/.firstrun ]
then
echo "Userscript for first start detected and this is the first start of a new container."
echo "Running userscript_firststart.sh..."
chmod 755 /opt/userscripts/userscript_firststart.sh
bash /opt/userscripts/userscript_firststart.sh
echo "Done."
echo ' '
fi
if [ -f /opt/userscripts/userscript_everystart.sh ]
then
echo "Userscript for every start detected. Running userscript_everystart.sh..."
chmod 755 /opt/userscripts/userscript_everystart.sh
bash /opt/userscripts/userscript_everystart.sh
echo "Done."
echo ' '
fi
fi
# Removing first run marker when exists
if [ -f /opt/.firstrun ]
then
rm -f /opt/.firstrun
fi
#####
# Starting ioBroker
#####
echo "$(printf -- '-%.0s' {1..60})"
echo "----- Step 5 of 5: ioBroker startup -----"
echo "$(printf -- '-%.0s' {1..60})"
echo ' '
echo "Starting ioBroker..."
echo ' '
# Setting healthcheck status to "running"
echo "running" > /opt/scripts/.docker_config/.healthcheck
# Function for graceful shutdown by SIGTERM signal
shut_down() {
echo ' '
echo "Recived termination signal (SIGTERM)."
echo "Shutting down ioBroker..."
pid=$(ps -ef | awk '/[j]s.controller/{print $2}')
kill -SIGTERM "$pid"
exit
}
# Trap to get signal for graceful shutdown
trap 'shut_down' SIGTERM
# IoBroker start
gosu iobroker node node_modules/iobroker.js-controller/controller.js & wait
# Fallback process for keeping container running when ioBroker is stopped for maintenance (e.g. js-controller update)
tail -f /dev/null

View File

@@ -0,0 +1,50 @@
#!/bin/bash
if [ "$1" == "status" ]
then
if [ $(cat /opt/scripts/.docker_config/.healthcheck) == 'maintenance' ]
then
echo 'Maintenance mode is ON.'
exit 0
elif [ $(cat /opt/scripts/.docker_config/.healthcheck) != 'maintenance' ]
then
echo 'Maintenance mode is OFF.'
exit 0
fi
elif [ "$1" == "on" ]
then
echo 'You are going to stop ioBroker and activating maintenance mode for this container.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Activating maintenance mode...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
sleep 1
echo 'Done.'
echo 'Stopping ioBroker...'
pkill -u iobroker
sleep 1
echo 'Done.'
exit 0
else
exit 0
fi
elif [ "$1" == "off" ]
then
echo 'You are going to deactivate maintenance mode for this container.'
echo 'Depending of the restart policy of this container, this will stop/ restart your container immediately.'
read -p 'Do you want to continue [yes/no]? ' A
if [ "$A" == "y" ] || [ "$A" == "Y" ] || [ "$A" == "yes" ]
then
echo 'Deactivating maintenance mode and forcing container to stop/ restart...'
echo "maintenance" > /opt/scripts/.docker_config/.healthcheck
pkill -u root
exit 0
else
exit 0
fi
else
echo 'Invalid command. Please try again.'
fi
exit 0

View File

@@ -0,0 +1,35 @@
#!/bin/bash
echo "Checking avahi-daemon installation state..."
if [ -e /usr/sbin/avahi-daemon ] && [ -e /var/run/dbus ]
then
echo "Avahi is already installed..."
else
echo "Avahi-daemon is NOT installed. Going to install it now..."
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,13 @@
#!/bin/bash
apt-get -qq update
packages=$(cat /opt/scripts/.packages)
for i in $packages; do
sudo apt-get -qq -y install $i
done
rm -rf /var/lib/apt/lists/*
rm -f /opt/scripts/.packages
exit 0

View File

@@ -0,0 +1,19 @@
#!/bin/bash
echo "Checking openzwave installation state..."
if [ -e /usr/local/lib64 ]
then
echo "Openzwave is already installed..."
else
echo "Openzwave is NOT installed. Going to install it now..."
cd /opt
curl -s -L -O http://old.openzwave.com/downloads/openzwave-1.6.1007.tar.gz
tar -xf openzwave-1.6.1007.tar.gz && rm openzwave-1.6.1007.tar.gz
cd openzwave-1.6.1007 && make > /dev/null 2>&1 && make install > /dev/null 2>&1
ldconfig /usr/local/lib64
cd /opt/iobroker
# echo "Openzwave is now installed..."
fi
exit 0

View File

@@ -0,0 +1,13 @@
#!/bin/bash
# This is an example script file.
# To run the Script on every start of the container you have to rename it to userscript_everystart.sh.
# You can add your advanced script code here!
echo ' '
echo "I'm your startscript userscript_everystart.sh. I will run on EVERY container startup."
echo ' '
exit 0

View File

@@ -0,0 +1,12 @@
#!/bin/bash
# This is an example script file.
# To run the Script on the first start of a new container you have to rename it to userscript_firststart.sh.
# You can add your advanced script code here!
echo ' '
echo "I'm your startscript userscript_firststart.sh. I will run only on the FIRST startup of the container."
echo ' '
exit 0

View File

@@ -1,11 +0,0 @@
#!/bin/sh
# Einfaches Script zum Stoppen von ioBroker.
# Kann zum Beispiel aus ioBroker heraus aufgerufen werden um ioBroker neu zu starten.
cd /opt/iobroker
./iobroker stop
sleep 5
./iobroker start
exit 0

View File

@@ -1,9 +0,0 @@
#!/bin/sh
# Einfaches Script zum Stoppen von ioBroker.
# Kann zum Beispiel aus ioBroker heraus aufgerufen werden um ioBroker zu stoppen.
cd /opt/iobroker
./iobroker stop
exit 0

19
manifest.yml Normal file
View File

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

View File

@@ -1,27 +1,27 @@
#!/bin/bash
# Backupscript für ein (wöchentliches) Backup von ioBroker unter Docker auf einer Synology Disk Station (Sicherung des ioBroker-Verzeichnises).
# Vorhaltezeit der letzten Backups: 90 Tage, ältere Backups werden automatisch gelöscht.
# Backupscript fuer ein Backup von ioBroker unter Docker auf einer Synology Disk Station (Sicherung des ioBroker-Verzeichnises).
# Vorhaltezeit der letzten Backups: 90 Tage, ältere Backups werden automatisch geloescht.
#
# By André Germann
# Version 1.0 (22.03.2017)
# By Andre Germann
# Version 1.1 (22.09.2017)
#
# ACHTUNG: Dieses Script muss vorher auf die Synology Disk Station kopiert und dann auch dort ausgeführt werden!
# Für die geplante, regelmäßige Ausführung bietet sich der Aufgabenplaner der Disk Station an.
# ACHTUNG: Dieses Script muss vorher auf die Synology Disk Station kopiert und dann auch dort ausgefuehrt werden!
# Fuer die geplante, regelmaessige Ausfuehrung bietet sich der Aufgabenplaner der Disk Station an.
#
# ACHTUNG: Dieses Script stoppt vor der Sicherung des Verzeichnises den ioBroker Container!
# Zur Sicherheit wird empfohlen ioBroker vor dem Backup innerhalb des Containers zu stoppen.
# Dieses kann zum Beispiel über den vorherigen Aufruf des Scripts iobroker_stop.sh aus ioBroker heraus erledigt werden.
# Dieses kann zum Beispiel ueber den vorherigen Aufruf des Scripts iobroker_stop.sh aus ioBroker heraus erledigt werden.
# Deklaration der Variablen. Pfade und Bezeichnungen müssen ggf. entsprechend angepasst werden.
# Deklaration der Variablen. Pfade und Bezeichnungen muessen ggf. entsprechend angepasst werden.
iobrokerPATH='/volume1/docker/mount/iobroker' # Pfad des gemounteten ioBroker-Verzeichnises (zu sicherndes Verzeichnis) auf der Synology Disk Station
backupPATH='/volume1/backup/Homeautomation/iobroker/backup.weekly' # Pfad zum Speichern des Backups
iobrokerPATH='/volume1/docker/iobroker_mount' # Pfad des gemounteten ioBroker-Verzeichnises (zu sicherndes Verzeichnis) auf der Synology Disk Station
backupPATH='/volume1/docker/iobroker_backup/archiv' # Pfad zum Speichern des Backups
iobrokerCONTAINERNAME='iobroker' # Name des ioBroker-Containers in Docker
# Start Script - Ab hier muss nichts mehr geändert werden!
# Start Script - Ab hier muss nichts mehr geaendert werden!
echo "#####################################################"
echo "############## Backupscript gestartet. ##############"
@@ -49,7 +49,7 @@ sleep 5
echo ""
echo "Der Ordner $iobrokerPATH wird gesichert..."
tar -czf "$backupPATH/backup-$(date +%d.%m.%y-%R).tar.gz" "$iobrokerPATH"
tar -C "$iobrokerPATH" -czf "$backupPATH/backup-$(date +%Y-%m-%d_%H-%M).tar.gz" .
echo "Sicherung des Ordners erstellt."
echo ""
@@ -57,12 +57,12 @@ echo "######################################################"
sleep 5
# Alte Backups löschen (Löscht per "rm" alle "*.tar.gz"-Dateien im Ordner, die älter als 90 Tage sind)
# Alte Backups loeschen (Loescht per "rm" alle "*.tar.gz"-Dateien im Ordner, die aelter als 90 Tage sind)
echo ""
echo "Entfernen alter Backups aus dem Verzeichnis $backupPATH..."
find -P "$backupPATH/" -maxdepth 1 -type f \( -name '*.tar.gz' \) -ctime +19 -exec rm {} \;
find -P "$backupPATH/" -maxdepth 1 -type f \( -name '*.tar.gz' \) -ctime +90 -exec rm {} \;
echo "Alte Backups wurden entfernt."
echo ""

View File

@@ -1,10 +0,0 @@
#!/bin/sh
rm /var/run/dbus/pid
dbus-daemon --system
/etc/init.d/avahi-daemon stop
sleep 5
/etc/init.d/avahi-daemon start
exit 0

View File

@@ -1,14 +0,0 @@
#!/bin/sh
if [ -f .install_host ];
then
sed -i "s/$(cat .install_host)/$(hostname)/g" iobroker-data/objects.json
rm .install_host
fi
/opt/scripts/avahi_startup.sh
sleep 5
cd /opt/iobroker
./iobroker start
cd /
/bin/bash

View File

@@ -1,13 +0,0 @@
#!/bin/sh
if [ -f .install_host ];
then
sed -i "s/$(cat .install_host)/$(hostname)/g" iobroker-data/objects.json
rm .install_host
fi
/opt/scripts/avahi_startup.sh
sleep 5
./iobroker start
cd /
/bin/bash