HA não inicia após configuração do DuckDNS no configuration.yaml


(Lazaro Enes) #1

Boa noite caros membros,

nos passados dias encontrei-me com problemas na implementação de segurança no meu Hassio que encontra-se a correr num laptop com Ubuntu, seguindo o tutorial de instalação e configuração do DuckDNS, após aplicar as configurações no ficheiro configuration.yaml o sistema não arrancava, nem sendo possível aceder à interface web, após algumas tentativas de resolução verifiquei que o problema devia-se especificamente à linha ssl_certificate: /fullchain.pem, comentando a mesma, tudo iniciava na normalidade, e claramente não havia https para ninguém. Após mais algumas pesquisas e observação do ficheiro log, que mesmo não tendo acesso pela página web foi possível ir directamente ao mesmo via SSH, e verifiquei os erros que se encontram na print que se segue:

Ou seja, havia um problema no SSL Handshake, que pelo que investiguei devia-se à sobrecarga da memória do modulo WI-FI, situação estranha , pois encontro-me com ligação por cabo… seguindo em frente, foi me possível encontrar uma solução, instalando o add-on NGINX SSL Proxy, que já se encontra na store de add-ons do Hassio, na configuração do mesmo é só inserir em domain o vosso domínio criado no DuckDNS, e aqui está concluído, voltando ao configuration.yaml, no componente http, necessitam remover as linhas ssl_certificate e ssl_key, na linha base_url removam a porta do fim do URL, pois pelo que li poderia dar conflitos com funções do NGINX. Após tudo feito, reiniciar sistema e aceder pelo domínio do DuckDNS sem utilizar porta no URL, e se tudo correr bem, será possível então aceder ao HA via https.

Espero que estas dicas sirvam para evitar dores de cabeça como me aconteceu e caso haja alguma sugestão de melhoria será bem vinda. :wink:


(Luís Miguel Andrade) #2

@Lazaro_enes

Obrigado por partilhares o teu problema e resolução do mesmo.

Existe um problema idêntico (eventualmente igual) que está relacionado com os certificados. Os mesmos não são gerados, ou, não estão acessíveis após a instalação.

Presumo que deves ter corrido o script de instalação do HASS.IO no Ubuntu. Se for esse o caso, existem diversos motivos e muitas situações em que os certificados não são gerados automaticamente neste processo. Aparentemente, o teu pode ter sido mais um.

Se for esse o cenário, podias gerar os ficheiros manualmente por linha de comandos na pasta SSL, excetuando o comando:

sudo openssl req -sha256 -newkey rsa:4096 -nodes -keyout privkey.pem -x509 -days 730 -out certificate.pem

O comando acima transcrito vai gerar os dois ficheiros de certificados. Atenção que ao gerar o nome dos ficheiros (podes renomear mais tarde), devem ficar iguais aos referênciados no yaml do HA.

Caso não seja necessário a parte do DNS dinâmico, basta teres estes ficheiros na pasta do SSL para conseguires ter https e outros tipos de ligações seguras, evitando a instalação do duckdns e outros addons a carregar o sistema.

Mais uma vez obrigado por partilhares a tua experiência!


(Lazaro Enes) #3

Obrigado pelo feedback.

Realmente instalei o hassio no Ubuntu correndo o script oficial do site, e não tive problemas em fazê-lo, isto no Ubuntu Desktop, pois no Ubuntu Server a falta de pacotes era tanta que não após horas a instalar tudo o que era necessário ainda assim haviam imensas falhas, acabei por desistir e avançar com a versão Desktop, ficou um luxo!

Relativamente à criação dos certificados, utilizei algumas formas, mas a que funcionou melhor foi mesmo com o add-on do DuckDNS, este também não funcionou de inicio, com mais algum tempo perdido verifiquei que era devido ao DNS do Docker, segui estas instruções e meti o Docker a utilizar o DNS do Pi-Hole que corre num pi zero, após ter isso feito o add-on do DuckDNS correu às mil maravilhas gerando os certificados sem qualquer stress.
Também verifiquei que podia ser falta de permissões para aceder à pasta SSL, mas fiz os comandos de permissão para tal.

Verifiquei também que nos meus add-ons, ao meter o "ssl": true, e depois acedendo por https fosse pela barra de endereços ou pelo botão do panel_iframe, nunca era possível aceder, talvez haja mesmo problema nos certificados SSL e o NGINX apenas resolveu a situação de aceder por https à página principal.
Vou desligar os add-ons NGINX e DuckDNS, apagar os certificados e criar novos com esse comando pela linha de comandos, depois dou feedback de como ficaram as coisas.


(Lazaro Enes) #4

Após ter feito o que mencionei anteriormente, o HA não iniciou mais, verifiquei que pelo terminal de SSH os antigos ficheiros encontravam-se com a cor verde, após gerar os novos estes ficaram brancos, como o restante texto do terminal, no entanto verifiquei o ficheiro log e observei o seguinte:

2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.config] Invalid config for [http]: not a file for dictionary value @ data['http']['ssl_certificate']. Got '/ssl/fullchain.pem'. (See /config/configuration.yaml, line 31). Please check the docs at https://home-assistant.io/components/http/ 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Setup failed for http: Invalid config. 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of system_log. Setup failed for dependencies: http 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Setup failed for system_log: Could not set up all dependencies. 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of auth. Setup failed for dependencies: http 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Setup failed for auth: Could not set up all dependencies. 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of onboarding. Setup failed for dependencies: http 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Setup failed for onboarding: Could not set up all dependencies. 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of api. Setup failed for dependencies: http 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Setup failed for api: Could not set up all dependencies. 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of websocket_api. Setup failed for dependencies: http 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Setup failed for websocket_api: Could not set up all dependencies. 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of frontend. Setup failed for dependencies: api, websocket_api, http, system_log, auth, onboarding 2018-10-06 00:02:44 ERROR (MainThread) [homeassistant.setup] Setup failed for frontend: Could not set up all dependencies. 2018-10-06 00:02:46 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of history. Setup failed for dependencies: http 2018-10-06 00:02:46 ERROR (MainThread) [homeassistant.setup] Setup failed for history: Could not set up all dependencies. 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of conversation. Setup failed for dependencies: http 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Setup failed for conversation: Could not set up all dependencies. 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of tts. Setup failed for dependencies: http 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Setup failed for tts: Could not set up all dependencies. 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of cloud. Setup failed for dependencies: http 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Setup failed for cloud: Could not set up all dependencies. 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of config. Setup failed for dependencies: http 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Setup failed for config: Could not set up all dependencies. 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of panel_iframe. Setup failed for dependencies: frontend 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Setup failed for panel_iframe: Could not set up all dependencies. 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of logbook. Setup failed for dependencies: frontend 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Setup failed for logbook: Could not set up all dependencies. 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of sensor.torque. Setup failed for dependencies: http 2018-10-06 00:02:47 ERROR (MainThread) [homeassistant.setup] Unable to prepare setup for platform sensor.torque: Could not set up all dependencies. 2018-10-06 00:02:48 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of hassio. Setup failed for dependencies: http 2018-10-06 00:02:48 ERROR (MainThread) [homeassistant.setup] Setup failed for hassio: Could not set up all dependencies. 2018-10-06 00:03:02 ERROR (MainThread) [homeassistant.setup] Unable to set up dependencies of media_player. Setup failed for dependencies: http 2018-10-06 00:03:02 ERROR (MainThread) [homeassistant.setup] Setup failed for media_player: Could not set up all dependencies.

Nesta situação já não sei o que fazer, se tiver solução muito bem, senão volto atrás…


(Luís Miguel Andrade) #5

O código que enviei gera dois ficheiros “.pem”, que deve ser corrido na pasta SSL. Contudo, o nome dos ficheiros deve estar conforme as referências que tens, e eventualmente não com os nomes que indiquei no código. Se não estou em erro, o nome “privkey.pem” é igual, e o “certificate.pem” deves mudar o nome para “fullchain.pem”.
Caso não resulte, podes ficar tranquilo com a tua anterior solução.
Já agora, o LUnbunto podia ser uma solução mais leve.


(Lazaro Enes) #6

Realmente foi falha minha, não tomei atenção à questão do nome dos ficheiros. Corrigindo isso, volto ao ponto inicial onde o HA não inicia se mencionar os ficheiros no componente http do configuration.yaml. Tentei com estes ficheiros gerados pelo comando manual usar o NGINX, já que não consegui inseri-los no configuration.yaml, e aí já o HA inicia, mas acendendo pelo exterior com https obtenho esta erro:

Erro este que acontece também caso os ficheiros nem existam… Mas seguindo em frente, gero os ficheiros pelo DuckDNS e uso o NGINX para aceder por https, mas acontece que caso queria utilizar outros add-ons com ssl, como por exemplo o Configurator ou Node-Red, estes vão usar os ficheiros gerados pelo DuckDNS e ao aceder ás páginas web dos add-ons, dentro do HA nem chega lá (isto utilizando o botão de atalho no painel lateral) e indo pelo endereço no browser dá o erro de privacidade:

Logo chego à conclusão que afinal os certificados é que não estão a sair bem, e o NGINX parece ignorar isso e seguir em frente, mas o restantes serviços recusam a funcionar em condições com estes certificados.
Tentando criar certificados com o certbot pelo terminal também obtenho uma tonelada de erros:

Bootstrapping dependencies for Debian-based OSes... (you can skip this with --no                                                                                                             -bootstrap)
Obter:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [83,2 kB]
Atingido:2 http://pt.archive.ubuntu.com/ubuntu bionic InRelease
Atingido:3 http://pt.archive.ubuntu.com/ubuntu bionic-updates InRelease
Atingido:4 http://pt.archive.ubuntu.com/ubuntu bionic-backports InRelease
Obtidos 83,2 kB em 2s (42,5 kB/s)
A ler as listas de pacotes... Pronto
A ler as listas de pacotes... Pronto
A construir árvore de dependências
A ler a informação de estado... Pronto
augeas-lenses is already the newest version (1.10.1-2).
ca-certificates is already the newest version (20180409).
libaugeas0 is already the newest version (1.10.1-2).
libffi-dev is already the newest version (3.2.1-8).
python is already the newest version (2.7.15~rc1-1).
python-dev is already the newest version (2.7.15~rc1-1).
python-virtualenv is already the newest version (15.1.0+ds-1.1).
virtualenv is already the newest version (15.1.0+ds-1.1).
gcc is already the newest version (4:7.3.0-3ubuntu2.1).
libssl-dev is already the newest version (1.1.0g-2ubuntu4.1).
openssl is already the newest version (1.1.0g-2ubuntu4.1).
0 pacotes actualizados, 0 pacotes novos instalados, 0 a remover e 9 não actualiz                                                                                                             ados.
WARNING: unable to check for updates.
Creating virtual environment...
Installing Python packages...
Had a problem while installing Python packages.

pip prints the following errors:
=====================================================
Collecting argparse==1.4.0 (from -r /tmp/tmp.7nVm6Ki5r7/letsencrypt-auto-require                                                                                                             ments.txt (line 11))
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))                                                                                                              after connection broken by 'ProtocolError('Connection aborted.', error(104, 'Li                                                                                                             ga\xc3\xa7\xc3\xa3o terminada no destino'))': /simple/argparse/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None))                                                                                                              after connection broken by 'ProtocolError('Connection aborted.', error(104, 'Li                                                                                                             ga\xc3\xa7\xc3\xa3o terminada no destino'))': /simple/argparse/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None))                                                                                                              after connection broken by 'ProtocolError('Connection aborted.', error(104, 'Li                                                                                                             ga\xc3\xa7\xc3\xa3o terminada no destino'))': /simple/argparse/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None))                                                                                                              after connection broken by 'ProtocolError('Connection aborted.', error(104, 'Li                                                                                                             ga\xc3\xa7\xc3\xa3o terminada no destino'))': /simple/argparse/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None))                                                                                                              after connection broken by 'ProtocolError('Connection aborted.', error(104, 'Li                                                                                                             ga\xc3\xa7\xc3\xa3o terminada no destino'))': /simple/argparse/
Exception:
Traceback (most recent call last):
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/basecomm                                                                                                             and.py", line 215, in main
    status = self.run(options, args)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/commands                                                                                                             /install.py", line 342, in run
    requirement_set.prepare_files(finder)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/req/req_                                                                                                             set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/req/req_                                                                                                             set.py", line 554, in _prepare_file
    require_hashes
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/req/req_                                                                                                             install.py", line 278, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/index.py                                                                                                             ", line 465, in find_requirement
    all_candidates = self.find_all_candidates(req.name)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/index.py                                                                                                             ", line 423, in find_all_candidates
    for page in self._get_pages(url_locations, project_name):
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/index.py                                                                                                             ", line 568, in _get_pages
    page = self._get_page(location)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/index.py                                                                                                             ", line 683, in _get_page
    return HTMLPage.get_page(link, session=self.session)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/index.py                                                                                                             ", line 792, in get_page
    "Cache-Control": "max-age=600",
  File "/opt/eff.org/certbot/venv/share/python-wheels/requests-2.18.4-py2.py3-no                                                                                                             ne-any.whl/requests/sessions.py", line 521, in get
    return self.request('GET', url, **kwargs)
  File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/pip/download                                                                                                             .py", line 386, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/opt/eff.org/certbot/venv/share/python-wheels/requests-2.18.4-py2.py3-no                                                                                                             ne-any.whl/requests/sessions.py", line 508, in request
    resp = self.send(prep, **send_kwargs)
  File "/opt/eff.org/certbot/venv/share/python-wheels/requests-2.18.4-py2.py3-no                                                                                                             ne-any.whl/requests/sessions.py", line 640, in send
    history = [resp for resp in gen] if allow_redirects else []
  File "/opt/eff.org/certbot/venv/share/python-wheels/requests-2.18.4-py2.py3-no                                                                                                             ne-any.whl/requests/sessions.py", line 218, in resolve_redirects
    **adapter_kwargs
  File "/opt/eff.org/certbot/venv/share/python-wheels/requests-2.18.4-py2.py3-no                                                                                                             ne-any.whl/requests/sessions.py", line 618, in send
    r = adapter.send(request, **kwargs)
  File "/opt/eff.org/certbot/venv/share/python-wheels/requests-2.18.4-py2.py3-no                                                                                                             ne-any.whl/requests/adapters.py", line 508, in send
    raise ConnectionError(e, request=request)
ConnectionError: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exc                                                                                                             eeded with url: /simple/argparse/ (Caused by ProtocolError('Connection aborted.'                                                                                                             , error(104, 'Liga\xc3\xa7\xc3\xa3o terminada no destino')))
=====================================================

Certbot has problem setting up the virtual environment.

We were not be able to guess the right solution from your pip
output.

Consult https://certbot.eff.org/docs/install.html#problems-with-python-virtual-e                                                                                                             nvironment
for possible solutions.
You may also find some support resources at https://certbot.eff.org/support/ .

Já não sei se isto tem solução, acredito que se tivesse a utilizar o hassio gravado num SD e a correr num Pi não tivesse estes problemas, mas a verdade é que tenho este PC por aqui que não serve para mais nada e os Pi’s já estão todos ocupados. Talvez a melhor opção seja utilizar os add-ons apenas localmente, o que é um bocado chato e desta maneira acho que também não consigo utilizar o componente do Torque para o carro, mas isso aí ainda é outra investigação a fazer. :slight_smile: