【昉·星光 2 高性能RISC-V单板计算机体验】以容器的方式安装 HomeAssistant
下载并启动容器
HomeAssisatant 官方并没有提供基于RISC-V 的容器,所以只能自己下载容器并编译安装。
这里选择基于 Alpine 的容器自行制作。
-
下载 RISC-V 的 Alpine 镜像
sudo docker pull riscv64/alpine:20231219
-
启动容器
sudo docker run -d --name homeassistant --restart=unless-stopped --network=host --privileged riscv64/alpine:20231219 sleep infinity
进入容器
sudo docker exec -it homeassistant sh
安装 Python 3.9
出于某种原因,我只编译成功了 HomeAssistant 2022.6.7 (后面会提到)
所以这里编译安装老版本的 Python 3.9 ,以获取更好的兼容性。
由于 HA 需要 sqlite 相关拓展,所以在编译有些特定的调整。
安装必要编译依赖
下载源码
从镜像站下载 Python 3.9 ,加快速度
wget https://mirrors.huaweicloud.com/python/3.9.9/Python-3.9.9.tgz
解压
tar -zxvf Python-3.9.9.tgz
编译安装
这里需要加上 --enable-loadable-sqlite-extensions
cd Python-3.9.9
./configure --enable-optimizations --enable-loadable-sqlite-extensions
make -j4
注意:编译的时候最好给开发板加个小风扇。
安装成功:
安装 HomeAssistant 2022.6.7
参考链接
Linux - Home Assistant (home-assistant.io)
安装必要编译依赖
apk add —no-cache bluez libffi-dev openssl-dev jpeg-dev zlib-dev autoconf automake linux-headers gcc build-base cmake make openjpeg-dev tiff-dev libjpeg-turbo-dev tzdata ffmpeg lapack-dev openblas-dev rust cargo libpcap-dev
创建虚拟 Python 环境
mkdir /srv/homeassistant
cd /srv/homeassistant
python3 -m venv .
source bin/activate
python3 -m pip install wheel
下载HA
wget https://files.pythonhosted.org/packages/8e/1f/7fc7a8fae7afbd3ba3c096c02d7b1c5aed90a08c36e0ae51deed9ba54cde/homeassistant-2022.6.7.tar.gz
wget https://files.pythonhosted.org/packages/7b/ae/f7895e90c4a801a148e68938060cbacf2cf39e1081c9b7f262eb47a40ca1/hass-nabucasa-0.54.0.tar.gz
tar -zxvf homeassistant-2022.6.7.tar.gz
tar -zxvf hass-nabucasa-0.54.0.tar.gz
修改依赖
在以下的文件中找到这两行并修改
-
homeassistant-2022.6.7/setup.cfg
pyyml==6.0.1
cryptography==41.0.7
-
hass-nabucasa-0.54.0/setup.py
cryptography==41.0.7
编译安装
cd homeassistant-2022.6.7
pip3 install .
cd hass-nabucasa-0.54.0
pip3 install .
安装运行所需的库
pip3 install aiohttp_cors==0.7.0 async-upnp-client==0.31.1 patchelf PyTurboJPEG==1.6.6 homematicip==1.0.2 pyMetno==0.9.0 aiogithubapi==22.2.4 homematicip==1.0.2
启动 HomeAssistant
输入hass ,即可启动
通过 <开发板 ip>:8123 进行访问
查看系统状态
小结
Q & A:
-
为什么不能安装最新版本的 HomeAssistant?
因为编译不成功,主要是orjson库编译不成功。
-
为什么要选择 Alpine?
因为编译需要用到rust,alpine有现成的第三方编译好的rust可供使用。
-
为什么要用修改依赖这么不优雅的方式?
这种行为确实很不好,很容易造成依赖地狱,但是缺少在RISC-V上编译的资料,只能头痛医头,脚痛医脚,先让他跑起来,再去一步一步的优化。
-
为什么要选择容器来安装?
因为这样更方便管理,星光2的性能也足够用,还可以用来做其他更多的事情。
后续的计划:
- 安装HACS
- 精简并完善容器,发布镜像
- 学习并尝试 Buildroot
碎碎念:编译安装的过程中经历了很多屈折,尝试了很多方法,中间一度想过要不就算了,但是好在还是成功了!
|