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
出于某种原因,我只编译成功了 HomeAssistant 2022.6.7
(后面会提到)
所以这里编译安装老版本的 Python 3.9
,以获取更好的兼容性。
由于 HA 需要 sqlite 相关拓展,所以在编译有些特定的调整。
换源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
安装
apk add --no-cache build-base libffi-dev openssl-dev gcc zlib-dev wget
从镜像站下载 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
注意:编译的时候最好给开发板加个小风扇。
安装成功:
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
mkdir /srv/homeassistant
cd /srv/homeassistant
python3 -m venv .
source bin/activate
python3 -m pip install wheel
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
输入hass
,即可启动
通过 <开发板 ip>:8123
进行访问
查看系统状态
为什么不能安装最新版本的 HomeAssistant?
因为编译不成功,主要是orjson库编译不成功。
为什么要选择 Alpine?
因为编译需要用到rust,alpine有现成的第三方编译好的rust可供使用。
为什么要用修改依赖这么不优雅的方式?
这种行为确实很不好,很容易造成依赖地狱,但是缺少在RISC-V上编译的资料,只能头痛医头,脚痛医脚,先让他跑起来,再去一步一步的优化。
为什么要选择容器来安装?
因为这样更方便管理,星光2的性能也足够用,还可以用来做其他更多的事情。
碎碎念:编译安装的过程中经历了很多屈折,尝试了很多方法,中间一度想过要不就算了,但是好在还是成功了!
更多回帖