From b88fee3c7a408c906eecc0df95a32fa334b35280 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Mon, 20 Sep 2021 10:19:35 +0200 Subject: [PATCH] Changes for new docker build architecture (#46) * Changes for new docker build architecture * Fix generate.py --- esphome-dev/CHANGELOG.md | 1 + esphome-dev/Dockerfile | 9 +- esphome-dev/build.json | 6 +- .../rootfs/etc/cont-init.d/10-requirements.sh | 41 -------- .../rootfs/etc/cont-init.d/20-nginx.sh | 34 ------- .../rootfs/etc/nginx/includes/mime.types | 96 ------------------- .../etc/nginx/includes/proxy_params.conf | 16 ---- .../etc/nginx/includes/server_params.conf | 6 -- .../rootfs/etc/nginx/includes/ssl_params.conf | 9 -- esphome-dev/rootfs/etc/nginx/nginx.conf | 33 ------- .../etc/nginx/servers/direct-ssl.disabled | 22 ----- .../rootfs/etc/nginx/servers/direct.disabled | 12 --- .../rootfs/etc/nginx/servers/ingress.conf | 16 ---- .../rootfs/etc/services.d/esphome/finish | 9 -- esphome-dev/rootfs/etc/services.d/esphome/run | 26 ----- .../rootfs/etc/services.d/nginx/finish | 9 -- esphome-dev/rootfs/etc/services.d/nginx/run | 14 --- script/generate.py | 2 +- template/addon_config.yaml | 2 +- 19 files changed, 7 insertions(+), 356 deletions(-) create mode 100644 esphome-dev/CHANGELOG.md delete mode 100755 esphome-dev/rootfs/etc/cont-init.d/10-requirements.sh delete mode 100755 esphome-dev/rootfs/etc/cont-init.d/20-nginx.sh delete mode 100644 esphome-dev/rootfs/etc/nginx/includes/mime.types delete mode 100644 esphome-dev/rootfs/etc/nginx/includes/proxy_params.conf delete mode 100644 esphome-dev/rootfs/etc/nginx/includes/server_params.conf delete mode 100644 esphome-dev/rootfs/etc/nginx/includes/ssl_params.conf delete mode 100644 esphome-dev/rootfs/etc/nginx/nginx.conf delete mode 100644 esphome-dev/rootfs/etc/nginx/servers/direct-ssl.disabled delete mode 100644 esphome-dev/rootfs/etc/nginx/servers/direct.disabled delete mode 100644 esphome-dev/rootfs/etc/nginx/servers/ingress.conf delete mode 100755 esphome-dev/rootfs/etc/services.d/esphome/finish delete mode 100755 esphome-dev/rootfs/etc/services.d/esphome/run delete mode 100755 esphome-dev/rootfs/etc/services.d/nginx/finish delete mode 100755 esphome-dev/rootfs/etc/services.d/nginx/run diff --git a/esphome-dev/CHANGELOG.md b/esphome-dev/CHANGELOG.md new file mode 100644 index 0000000..cce1854 --- /dev/null +++ b/esphome-dev/CHANGELOG.md @@ -0,0 +1 @@ +See https://esphome.io/changelog/index.html diff --git a/esphome-dev/Dockerfile b/esphome-dev/Dockerfile index cceb06e..066ebd0 100644 --- a/esphome-dev/Dockerfile +++ b/esphome-dev/Dockerfile @@ -1,17 +1,10 @@ -ARG BUILD_FROM=esphome/esphome-hassio-base-amd64:2.0.0 +ARG BUILD_FROM=esphome/esphome-hassio-amd64:dev FROM ${BUILD_FROM} # Copy root filesystem COPY rootfs / -RUN pip3 install --no-cache-dir https://github.com/esphome/esphome/archive/dev.zip - -# Build arguments -ARG BUILD_VERSION=dev - # Labels LABEL \ - io.hass.name="ESPHome" \ - io.hass.description="Manage and program ESP8266/ESP32 microcontrollers through YAML configuration files" \ io.hass.type="addon" \ io.hass.version=dev diff --git a/esphome-dev/build.json b/esphome-dev/build.json index efc922f..3999df3 100644 --- a/esphome-dev/build.json +++ b/esphome-dev/build.json @@ -1,7 +1,7 @@ { "build_from": { - "aarch64": "esphome/esphome-hassio-base-aarch64:3.1.0", - "amd64": "esphome/esphome-hassio-base-amd64:3.1.0", - "armv7": "esphome/esphome-hassio-base-armv7:3.1.0" + "aarch64": "esphome/esphome-hassio-aarch64:dev", + "amd64": "esphome/esphome-hassio-amd64:dev", + "armv7": "esphome/esphome-hassio-armv7:dev" } } \ No newline at end of file diff --git a/esphome-dev/rootfs/etc/cont-init.d/10-requirements.sh b/esphome-dev/rootfs/etc/cont-init.d/10-requirements.sh deleted file mode 100755 index 9d49c2b..0000000 --- a/esphome-dev/rootfs/etc/cont-init.d/10-requirements.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/with-contenv bashio -# ============================================================================== -# Community Hass.io Add-ons: ESPHome -# This files check if all user configuration requirements are met -# ============================================================================== - -# Check SSL requirements, if enabled -if bashio::config.true 'ssl'; then - if ! bashio::config.has_value 'certfile'; then - bashio::fatal 'SSL is enabled, but no certfile was specified.' - bashio::exit.nok - fi - - if ! bashio::config.has_value 'keyfile'; then - bashio::fatal 'SSL is enabled, but no keyfile was specified' - bashio::exit.nok - fi - - - certfile="/ssl/$(bashio::config 'certfile')" - keyfile="/ssl/$(bashio::config 'keyfile')" - - if ! bashio::fs.file_exists "${certfile}"; then - if ! bashio::fs.file_exists "${keyfile}"; then - # Both files are missing, let's print a friendlier error message - bashio::log.fatal 'You enabled encrypted connections using the "ssl": true option.' - bashio::log.fatal "However, the SSL files '${certfile}' and '${keyfile}'" - bashio::log.fatal "were not found. If you're using Hass.io on your local network and don't want" - bashio::log.fatal 'to encrypt connections to the ESPHome dashboard, you can manually disable' - bashio::log.fatal 'SSL by setting "ssl" to false."' - bashio::exit.nok - fi - bashio::log.fatal "The configured certfile '${certfile}' was not found." - bashio::exit.nok - fi - - if ! bashio::fs.file_exists "/ssl/$(bashio::config 'keyfile')"; then - bashio::log.fatal "The configured keyfile '${keyfile}' was not found." - bashio::exit.nok - fi -fi diff --git a/esphome-dev/rootfs/etc/cont-init.d/20-nginx.sh b/esphome-dev/rootfs/etc/cont-init.d/20-nginx.sh deleted file mode 100755 index 107a25c..0000000 --- a/esphome-dev/rootfs/etc/cont-init.d/20-nginx.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/with-contenv bashio -# ============================================================================== -# Community Hass.io Add-ons: ESPHome -# Configures NGINX for use with ESPHome -# ============================================================================== - -declare certfile -declare keyfile -declare direct_port -declare ingress_interface -declare ingress_port - -mkdir -p /var/log/nginx - -direct_port=$(bashio::addon.port 6052) -if bashio::var.has_value "${direct_port}"; then - if bashio::config.true 'ssl'; then - certfile=$(bashio::config 'certfile') - keyfile=$(bashio::config 'keyfile') - - mv /etc/nginx/servers/direct-ssl.disabled /etc/nginx/servers/direct.conf - sed -i "s/%%certfile%%/${certfile}/g" /etc/nginx/servers/direct.conf - sed -i "s/%%keyfile%%/${keyfile}/g" /etc/nginx/servers/direct.conf - else - mv /etc/nginx/servers/direct.disabled /etc/nginx/servers/direct.conf - fi - - sed -i "s/%%port%%/${direct_port}/g" /etc/nginx/servers/direct.conf -fi - -ingress_port=$(bashio::addon.ingress_port) -ingress_interface=$(bashio::addon.ip_address) -sed -i "s/%%port%%/${ingress_port}/g" /etc/nginx/servers/ingress.conf -sed -i "s/%%interface%%/${ingress_interface}/g" /etc/nginx/servers/ingress.conf diff --git a/esphome-dev/rootfs/etc/nginx/includes/mime.types b/esphome-dev/rootfs/etc/nginx/includes/mime.types deleted file mode 100644 index 7c7cdef..0000000 --- a/esphome-dev/rootfs/etc/nginx/includes/mime.types +++ /dev/null @@ -1,96 +0,0 @@ -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/png png; - image/svg+xml svg svgz; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/webp webp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - - font/woff woff; - font/woff2 woff2; - - application/java-archive jar war ear; - application/json json; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.apple.mpegurl m3u8; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/vnd.ms-excel xls; - application/vnd.ms-fontobject eot; - application/vnd.ms-powerpoint ppt; - application/vnd.oasis.opendocument.graphics odg; - application/vnd.oasis.opendocument.presentation odp; - application/vnd.oasis.opendocument.spreadsheet ods; - application/vnd.oasis.opendocument.text odt; - application/vnd.openxmlformats-officedocument.presentationml.presentation - pptx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet - xlsx; - application/vnd.openxmlformats-officedocument.wordprocessingml.document - docx; - application/vnd.wap.wmlc wmlc; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xspf+xml xspf; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp2t ts; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/esphome-dev/rootfs/etc/nginx/includes/proxy_params.conf b/esphome-dev/rootfs/etc/nginx/includes/proxy_params.conf deleted file mode 100644 index c00b480..0000000 --- a/esphome-dev/rootfs/etc/nginx/includes/proxy_params.conf +++ /dev/null @@ -1,16 +0,0 @@ -proxy_http_version 1.1; -proxy_ignore_client_abort off; -proxy_read_timeout 86400s; -proxy_redirect off; -proxy_send_timeout 86400s; -proxy_max_temp_file_size 0; - -proxy_set_header Accept-Encoding ""; -proxy_set_header Connection $connection_upgrade; -proxy_set_header Host $http_host; -proxy_set_header Upgrade $http_upgrade; -proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; -proxy_set_header X-Forwarded-Proto $scheme; -proxy_set_header X-NginX-Proxy true; -proxy_set_header X-Real-IP $remote_addr; -proxy_set_header Authorization ""; diff --git a/esphome-dev/rootfs/etc/nginx/includes/server_params.conf b/esphome-dev/rootfs/etc/nginx/includes/server_params.conf deleted file mode 100644 index 479dfa1..0000000 --- a/esphome-dev/rootfs/etc/nginx/includes/server_params.conf +++ /dev/null @@ -1,6 +0,0 @@ -root /dev/null; -server_name $hostname; - -add_header X-Content-Type-Options nosniff; -add_header X-XSS-Protection "1; mode=block"; -add_header X-Robots-Tag none; diff --git a/esphome-dev/rootfs/etc/nginx/includes/ssl_params.conf b/esphome-dev/rootfs/etc/nginx/includes/ssl_params.conf deleted file mode 100644 index 6f15005..0000000 --- a/esphome-dev/rootfs/etc/nginx/includes/ssl_params.conf +++ /dev/null @@ -1,9 +0,0 @@ -ssl_protocols TLSv1.2; -ssl_prefer_server_ciphers on; -ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA; -ssl_ecdh_curve secp384r1; -ssl_session_timeout 10m; -ssl_session_cache shared:SSL:10m; -ssl_session_tickets off; -ssl_stapling on; -ssl_stapling_verify on; diff --git a/esphome-dev/rootfs/etc/nginx/nginx.conf b/esphome-dev/rootfs/etc/nginx/nginx.conf deleted file mode 100644 index 8ebf572..0000000 --- a/esphome-dev/rootfs/etc/nginx/nginx.conf +++ /dev/null @@ -1,33 +0,0 @@ -daemon off; -user root; -pid /var/run/nginx.pid; -worker_processes 1; -# Hass.io addon log -error_log /proc/1/fd/1 error; -events { - worker_connections 1024; -} - -http { - include /etc/nginx/includes/mime.types; - access_log stdout; - default_type application/octet-stream; - gzip on; - keepalive_timeout 65; - sendfile on; - server_tokens off; - - map $http_upgrade $connection_upgrade { - default upgrade; - '' close; - } - - # Use Hass.io supervisor as resolver - resolver 172.30.32.2; - - upstream esphome { - server unix:/var/run/esphome.sock; - } - - include /etc/nginx/servers/*.conf; -} diff --git a/esphome-dev/rootfs/etc/nginx/servers/direct-ssl.disabled b/esphome-dev/rootfs/etc/nginx/servers/direct-ssl.disabled deleted file mode 100644 index c2b8d65..0000000 --- a/esphome-dev/rootfs/etc/nginx/servers/direct-ssl.disabled +++ /dev/null @@ -1,22 +0,0 @@ -server { - listen %%port%% default_server ssl http2; - - include /etc/nginx/includes/server_params.conf; - include /etc/nginx/includes/proxy_params.conf; - include /etc/nginx/includes/ssl_params.conf; - - ssl on; - ssl_certificate /ssl/%%certfile%%; - ssl_certificate_key /ssl/%%keyfile%%; - - # Clear Hass.io Ingress header - proxy_set_header X-Hassio-Ingress ""; - - # Redirect http requests to https on the same port. - # https://rageagainstshell.com/2016/11/redirect-http-to-https-on-the-same-port-in-nginx/ - error_page 497 https://$http_host$request_uri; - - location / { - proxy_pass http://esphome; - } -} diff --git a/esphome-dev/rootfs/etc/nginx/servers/direct.disabled b/esphome-dev/rootfs/etc/nginx/servers/direct.disabled deleted file mode 100644 index 51f57ca..0000000 --- a/esphome-dev/rootfs/etc/nginx/servers/direct.disabled +++ /dev/null @@ -1,12 +0,0 @@ -server { - listen %%port%% default_server; - - include /etc/nginx/includes/server_params.conf; - include /etc/nginx/includes/proxy_params.conf; - # Clear Hass.io Ingress header - proxy_set_header X-Hassio-Ingress ""; - - location / { - proxy_pass http://esphome; - } -} diff --git a/esphome-dev/rootfs/etc/nginx/servers/ingress.conf b/esphome-dev/rootfs/etc/nginx/servers/ingress.conf deleted file mode 100644 index 3a800d9..0000000 --- a/esphome-dev/rootfs/etc/nginx/servers/ingress.conf +++ /dev/null @@ -1,16 +0,0 @@ -server { - listen %%interface%%:%%port%% default_server; - - include /etc/nginx/includes/server_params.conf; - include /etc/nginx/includes/proxy_params.conf; - # Set Hass.io Ingress header - proxy_set_header X-Hassio-Ingress "YES"; - - location / { - # Only allow from Hass.io supervisor - allow 172.30.32.2; - deny all; - - proxy_pass http://esphome; - } -} diff --git a/esphome-dev/rootfs/etc/services.d/esphome/finish b/esphome-dev/rootfs/etc/services.d/esphome/finish deleted file mode 100755 index 789a65e..0000000 --- a/esphome-dev/rootfs/etc/services.d/esphome/finish +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/execlineb -S0 -# ============================================================================== -# Community Hass.io Add-ons: ESPHome -# Take down the S6 supervision tree when ESPHome fails -# ============================================================================== -if -n { s6-test $# -ne 0 } -if -n { s6-test ${1} -eq 256 } - -s6-svscanctl -t /var/run/s6/services diff --git a/esphome-dev/rootfs/etc/services.d/esphome/run b/esphome-dev/rootfs/etc/services.d/esphome/run deleted file mode 100755 index f806c50..0000000 --- a/esphome-dev/rootfs/etc/services.d/esphome/run +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/with-contenv bashio -# ============================================================================== -# Community Hass.io Add-ons: ESPHome -# Runs the ESPHome dashboard -# ============================================================================== - -export ESPHOME_IS_HASSIO=true - -if bashio::config.true 'leave_front_door_open'; then - export DISABLE_HA_AUTHENTICATION=true -fi - -if bashio::config.true 'streamer_mode'; then - export ESPHOME_STREAMER_MODE=true -fi - -if bashio::config.true 'status_use_ping'; then - export ESPHOME_DASHBOARD_USE_PING=true -fi - -if bashio::config.has_value 'relative_url'; then - export ESPHOME_DASHBOARD_RELATIVE_URL=$(bashio::config 'relative_url') -fi - -bashio::log.info "Starting ESPHome dashboard..." -exec esphome dashboard /config/esphome --socket /var/run/esphome.sock --hassio diff --git a/esphome-dev/rootfs/etc/services.d/nginx/finish b/esphome-dev/rootfs/etc/services.d/nginx/finish deleted file mode 100755 index 953f377..0000000 --- a/esphome-dev/rootfs/etc/services.d/nginx/finish +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/execlineb -S0 -# ============================================================================== -# Community Hass.io Add-ons: ESPHome -# Take down the S6 supervision tree when NGINX fails -# ============================================================================== -if -n { s6-test $# -ne 0 } -if -n { s6-test ${1} -eq 256 } - -s6-svscanctl -t /var/run/s6/services diff --git a/esphome-dev/rootfs/etc/services.d/nginx/run b/esphome-dev/rootfs/etc/services.d/nginx/run deleted file mode 100755 index 8582167..0000000 --- a/esphome-dev/rootfs/etc/services.d/nginx/run +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/with-contenv bashio -# ============================================================================== -# Community Hass.io Add-ons: ESPHome -# Runs the NGINX proxy -# ============================================================================== - -bashio::log.info "Waiting for dashboard to come up..." - -while [[ ! -S /var/run/esphome.sock ]]; do - sleep 0.5 -done - -bashio::log.info "Starting NGINX..." -exec nginx diff --git a/script/generate.py b/script/generate.py index fc7e190..90b6b38 100755 --- a/script/generate.py +++ b/script/generate.py @@ -32,7 +32,7 @@ def main(args): for channel in args.channels: conf = config[f"esphome-{channel.value}"] - base_image = conf.pop("base_image") + base_image = conf.pop("base_image", None) dir_ = root / conf.pop("directory") path = dir_ / "config.json" with open(path, "w") as f: diff --git a/template/addon_config.yaml b/template/addon_config.yaml index 5126aa0..8e253c4 100644 --- a/template/addon_config.yaml +++ b/template/addon_config.yaml @@ -36,7 +36,6 @@ base: &base status_use_ping: bool? backup_exclude: - "*/*/" - base_image: esphome/esphome-hassio-base-{arch}:3.1.0 esphome-dev: <<: *base @@ -56,6 +55,7 @@ esphome-dev: relative_url: str? status_use_ping: bool? esphome_fork: str? + base_image: esphome/esphome-hassio-{arch}:dev esphome-beta: <<: *base