旧版 Raspbian/Hassbian 的 piwheels 问题

如果你使用的是 Hass.ioDocker,或基于 Debian Buster 的发行版,那么本文不适用于你。

升级到 Home Assistant 0.96.0 后,一些用户开始看到如下错误:

ImportError: /usr/lib/arm-linux-gnueabihf/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by /srv/homeassistant/lib/python3.7/site-packages/cryptography/hazmat/bindings/_openssl.abi3.so

所有通过 SSL(HTTPS)通信的集成都停止工作了。

如果你是手动安装或使用 Hassbian,并且属于以下系统之一,就会受到影响:

  • Raspbian Jessie
  • Raspbian Stretch

原因在于 piwheels 判断操作系统版本的方式:它会通过当前使用的 Python 版本来推断系统版本。

@frenck这个 issue 中写了问题分析和可行方案。

这个问题有两种可能的解决方案,其中方案 1 是更推荐的做法。

方案 1

将你的发行版升级到 Debian Buster。

注意:此方案会升级整个系统,_可能_会影响你正在运行的其他服务。

继续之前,请确保你已经有最新的系统备份。

步骤

  1. 将以下文件中的 stretchjessie 改为 buster
    • /etc/apt/sources.list
    • /etc/apt/sources.list.d/raspi.list
    • /etc/apt/sources.list.d/hassbian.list
  2. Run sudo apt-get update
  3. Run sudo apt-get -y dist-upgrade
  4. Run sudo reboot

方案 2

禁用 piwheels 的预编译包。

这个方案一开始更快,但缺点很明显:你必须在本地编译这些包。 只有当你的系统上还有其他服务,且使用方案 1 会导致它们无法工作时,才建议使用本方案。

步骤

  1. 编辑 /etc/pip.conf,将包含 piwheels 的那一行注释掉,如下:

    [global]
    # extra-index-url=https://www.piwheels.org/simple
  2. Run source /srv/homeassistant/bin/activate

  3. Run pip uninstall cryptography

  4. Run pip install --no-cache cryptography==2.7

  5. Run deactivate