mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Migrate old-style S6 scripts to s6-rc.d (#4311)
This commit is contained in:
		| @@ -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::log.fatal 'SSL is enabled, but no certfile was specified.' |  | ||||||
|         bashio::exit.nok |  | ||||||
|     fi |  | ||||||
|  |  | ||||||
|     if ! bashio::config.has_value 'keyfile'; then |  | ||||||
|         bashio::log.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 |  | ||||||
| @@ -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 |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| #!/usr/bin/with-contenv bashio |  | ||||||
| # ============================================================================== |  | ||||||
| # Community Hass.io Add-ons: ESPHome |  | ||||||
| # This files creates all directories used by esphome |  | ||||||
| # ============================================================================== |  | ||||||
|  |  | ||||||
| pio_cache_base=/data/cache/platformio |  | ||||||
|  |  | ||||||
| mkdir -p "${pio_cache_base}" |  | ||||||
							
								
								
									
										26
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/esphome/finish
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/esphome/finish
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | #!/command/with-contenv bashio | ||||||
|  | # shellcheck shell=bash | ||||||
|  | # ============================================================================== | ||||||
|  | # Home Assistant Community Add-on: ESPHome | ||||||
|  | # Take down the S6 supervision tree when ESPHome dashboard fails | ||||||
|  | # ============================================================================== | ||||||
|  | declare exit_code | ||||||
|  | readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode) | ||||||
|  | readonly exit_code_service="${1}" | ||||||
|  | readonly exit_code_signal="${2}" | ||||||
|  |  | ||||||
|  | bashio::log.info \ | ||||||
|  |   "Service ESPHome dashboard exited with code ${exit_code_service}" \ | ||||||
|  |   "(by signal ${exit_code_signal})" | ||||||
|  |  | ||||||
|  | if [[ "${exit_code_service}" -eq 256 ]]; then | ||||||
|  |   if [[ "${exit_code_container}" -eq 0 ]]; then | ||||||
|  |     echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode | ||||||
|  |   fi | ||||||
|  |   [[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt | ||||||
|  | elif [[ "${exit_code_service}" -ne 0 ]]; then | ||||||
|  |   if [[ "${exit_code_container}" -eq 0 ]]; then | ||||||
|  |     echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode | ||||||
|  |   fi | ||||||
|  |   exec /run/s6/basedir/bin/halt | ||||||
|  | fi | ||||||
| @@ -1,10 +1,19 @@ | |||||||
| #!/usr/bin/with-contenv bashio | #!/command/with-contenv bashio | ||||||
|  | # shellcheck shell=bash | ||||||
| # ============================================================================== | # ============================================================================== | ||||||
| # Community Hass.io Add-ons: ESPHome | # Community Hass.io Add-ons: ESPHome | ||||||
| # Runs the ESPHome dashboard | # Runs the ESPHome dashboard | ||||||
| # ============================================================================== | # ============================================================================== | ||||||
|  | readonly pio_cache_base=/data/cache/platformio | ||||||
| 
 | 
 | ||||||
| export ESPHOME_IS_HA_ADDON=true | export ESPHOME_IS_HA_ADDON=true | ||||||
|  | export PLATFORMIO_GLOBALLIB_DIR=/piolibs | ||||||
|  | 
 | ||||||
|  | # we can't set core_dir, because the settings file is stored in `core_dir/appstate.json` | ||||||
|  | # setting `core_dir` would therefore prevent pio from accessing | ||||||
|  | export PLATFORMIO_PLATFORMS_DIR="${pio_cache_base}/platforms" | ||||||
|  | export PLATFORMIO_PACKAGES_DIR="${pio_cache_base}/packages" | ||||||
|  | export PLATFORMIO_CACHE_DIR="${pio_cache_base}/cache" | ||||||
| 
 | 
 | ||||||
| if bashio::config.true 'leave_front_door_open'; then | if bashio::config.true 'leave_front_door_open'; then | ||||||
|     export DISABLE_HA_AUTHENTICATION=true |     export DISABLE_HA_AUTHENTICATION=true | ||||||
| @@ -30,14 +39,7 @@ else | |||||||
|     fi |     fi | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| pio_cache_base=/data/cache/platformio | mkdir -p "${pio_cache_base}" | ||||||
| # we can't set core_dir, because the settings file is stored in `core_dir/appstate.json` |  | ||||||
| # setting `core_dir` would therefore prevent pio from accessing |  | ||||||
| export PLATFORMIO_PLATFORMS_DIR="${pio_cache_base}/platforms" |  | ||||||
| export PLATFORMIO_PACKAGES_DIR="${pio_cache_base}/packages" |  | ||||||
| export PLATFORMIO_CACHE_DIR="${pio_cache_base}/cache" |  | ||||||
| 
 |  | ||||||
| export PLATFORMIO_GLOBALLIB_DIR=/piolibs |  | ||||||
| 
 | 
 | ||||||
| bashio::log.info "Starting ESPHome dashboard..." | bashio::log.info "Starting ESPHome dashboard..." | ||||||
| exec esphome dashboard /config/esphome --socket /var/run/esphome.sock --ha-addon | exec esphome dashboard /config/esphome --socket /var/run/esphome.sock --ha-addon | ||||||
| @@ -0,0 +1 @@ | |||||||
|  | longrun | ||||||
							
								
								
									
										63
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/init-nginx/run
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										63
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/init-nginx/run
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | #!/command/with-contenv bashio | ||||||
|  | # shellcheck shell=bash | ||||||
|  | # ============================================================================== | ||||||
|  | # Community Hass.io Add-ons: ESPHome | ||||||
|  | # Configures NGINX for use with ESPHome | ||||||
|  | # ============================================================================== | ||||||
|  | declare certfile | ||||||
|  | declare direct_port | ||||||
|  | declare ingress_interface | ||||||
|  | declare ingress_port | ||||||
|  | declare keyfile | ||||||
|  |  | ||||||
|  | mkdir -p /var/log/nginx | ||||||
|  |  | ||||||
|  | direct_port=$(bashio::addon.port 6052) | ||||||
|  | if bashio::var.has_value "${direct_port}"; then | ||||||
|  |     # Check SSL requirements, if enabled | ||||||
|  |     if bashio::config.true 'ssl'; then | ||||||
|  |         if ! bashio::config.has_value 'certfile'; then | ||||||
|  |             bashio::log.fatal 'SSL is enabled, but no certfile was specified.' | ||||||
|  |             bashio::exit.nok | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         if ! bashio::config.has_value 'keyfile'; then | ||||||
|  |             bashio::log.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 "/ssl/${certfile}"; then | ||||||
|  |             if ! bashio::fs.file_exists "/ssl/${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 '/ssl/${certfile}' was not found." | ||||||
|  |             bashio::exit.nok | ||||||
|  |         fi | ||||||
|  |  | ||||||
|  |         if ! bashio::fs.file_exists "/ssl/${keyfile}"; then | ||||||
|  |             bashio::log.fatal "The configured keyfile '/ssl/${keyfile}' was not found." | ||||||
|  |             bashio::exit.nok | ||||||
|  |         fi | ||||||
|  |         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 | ||||||
| @@ -0,0 +1 @@ | |||||||
|  | oneshot | ||||||
| @@ -0,0 +1 @@ | |||||||
|  | /etc/s6-overlay/s6-rc.d/init-nginx/run | ||||||
							
								
								
									
										25
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/nginx/finish
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/nginx/finish
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  | #!/command/with-contenv bashio | ||||||
|  | # ============================================================================== | ||||||
|  | # Community Hass.io Add-ons: ESPHome | ||||||
|  | # Take down the S6 supervision tree when NGINX fails | ||||||
|  | # ============================================================================== | ||||||
|  | declare exit_code | ||||||
|  | readonly exit_code_container=$(</run/s6-linux-init-container-results/exitcode) | ||||||
|  | readonly exit_code_service="${1}" | ||||||
|  | readonly exit_code_signal="${2}" | ||||||
|  |  | ||||||
|  | bashio::log.info \ | ||||||
|  |   "Service NGINX exited with code ${exit_code_service}" \ | ||||||
|  |   "(by signal ${exit_code_signal})" | ||||||
|  |  | ||||||
|  | if [[ "${exit_code_service}" -eq 256 ]]; then | ||||||
|  |   if [[ "${exit_code_container}" -eq 0 ]]; then | ||||||
|  |     echo $((128 + $exit_code_signal)) > /run/s6-linux-init-container-results/exitcode | ||||||
|  |   fi | ||||||
|  |   [[ "${exit_code_signal}" -eq 15 ]] && exec /run/s6/basedir/bin/halt | ||||||
|  | elif [[ "${exit_code_service}" -ne 0 ]]; then | ||||||
|  |   if [[ "${exit_code_container}" -eq 0 ]]; then | ||||||
|  |     echo "${exit_code_service}" > /run/s6-linux-init-container-results/exitcode | ||||||
|  |   fi | ||||||
|  |   exec /run/s6/basedir/bin/halt | ||||||
|  | fi | ||||||
| @@ -1,10 +1,11 @@ | |||||||
| #!/usr/bin/with-contenv bashio | #!/command/with-contenv bashio | ||||||
|  | # shellcheck shell=bash | ||||||
| # ============================================================================== | # ============================================================================== | ||||||
| # Community Hass.io Add-ons: ESPHome | # Community Hass.io Add-ons: ESPHome | ||||||
| # Runs the NGINX proxy | # Runs the NGINX proxy | ||||||
| # ============================================================================== | # ============================================================================== | ||||||
| 
 | 
 | ||||||
| bashio::log.info "Waiting for dashboard to come up..." | bashio::log.info "Waiting for ESPHome dashboard to come up..." | ||||||
| 
 | 
 | ||||||
| while [[ ! -S /var/run/esphome.sock ]]; do | while [[ ! -S /var/run/esphome.sock ]]; do | ||||||
|   sleep 0.5 |   sleep 0.5 | ||||||
							
								
								
									
										1
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/nginx/type
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								docker/ha-addon-rootfs/etc/s6-overlay/s6-rc.d/nginx/type
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | longrun | ||||||
| @@ -1,15 +0,0 @@ | |||||||
| #!/usr/bin/execlineb -S0 |  | ||||||
| # ============================================================================== |  | ||||||
| # Community Hass.io Add-ons: ESPHome |  | ||||||
| # Take down the S6 supervision tree when ESPHome fails |  | ||||||
| # ============================================================================== |  | ||||||
|  |  | ||||||
| declare APP_EXIT_CODE=${1} |  | ||||||
|  |  | ||||||
| if [[ "${APP_EXIT_CODE}" -ne 0 ]] && [[ "${APP_EXIT_CODE}" -ne 256 ]]; then |  | ||||||
|   bashio::log.warning "Halt add-on with exit code ${APP_EXIT_CODE}" |  | ||||||
|   echo "${APP_EXIT_CODE}" > /run/s6-linux-init-container-results/exitcode |  | ||||||
|   exec /run/s6/basedir/bin/halt |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| bashio::log.info "Service restart after closing" |  | ||||||
| @@ -1,15 +0,0 @@ | |||||||
| #!/usr/bin/execlineb -S0 |  | ||||||
| # ============================================================================== |  | ||||||
| # Community Hass.io Add-ons: ESPHome |  | ||||||
| # Take down the S6 supervision tree when NGINX fails |  | ||||||
| # ============================================================================== |  | ||||||
|  |  | ||||||
| declare APP_EXIT_CODE=${1} |  | ||||||
|  |  | ||||||
| if [[ "${APP_EXIT_CODE}" -ne 0 ]] && [[ "${APP_EXIT_CODE}" -ne 256 ]]; then |  | ||||||
|   bashio::log.warning "Halt add-on with exit code ${APP_EXIT_CODE}" |  | ||||||
|   echo "${APP_EXIT_CODE}" > /run/s6-linux-init-container-results/exitcode |  | ||||||
|   exec /run/s6/basedir/bin/halt |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| bashio::log.info "Service restart after closing" |  | ||||||
		Reference in New Issue
	
	Block a user