TLDR
- WSL 没独立 IP ,不适合部署网关类组件。
- Windows On ARM 生态不是很成熟,文章和文档较少,需要先自己研究踩坑。
- Hyper-V 是 Windows on ARM 部署服务的最佳方案,可以直接高效跑 Linux 分配独立虚拟网卡。
写在前面
在 10 月 25 日,微软发布了 Windows DevKit 2023 ,配有 高通 8cx gen3, 32GB RAM 以及 512GB 的 SSD 。大概是搭载 ARM Windows 的硬件天花板了。到手之后一直在探索这个设备的可能性,中间踩了不少坑,也获得了很多惊喜。
之前 Home Assistant 都是部署在 N1 盒子上的,一来存储空间不是很足,经常硬盘空间吃紧;另一方面因为还跑了些别的服务,所以没有直接部署 HAOS ,HA Core 本身对于加载项和重启、升级等功能支持的都不是很好。
开始部署
问题重重的 WSL 部署
Home Assistant 提供三种部署方式,Docker 部署,Core 核心部署和 OS 镜像部署。 一开始为了图方便,准备使用和之前方式相同的 Core 部署,并部署在 WSL 上,但很快就遇到了第一个问题:WSL 闲置时会固定占用 30% 的 CPU(图源自 Github Issue microsoft/WSL #9090),没想到这个 bug 还是 ARM64 设备专属,而且能在自家亲儿子上复现。
这个问题在 1 个月后的 KB5020044 补丁得到了修复,在修复当天,进行了接下来的部署操作。
- 首先将 Docker 安装到 WSL
- 参考 https://www.home-assistant.io/installation/linux#install-home-assistant-container 的操作将 home assistant 的 container 装载至 Docker
但 Home Assisant 启动后发现并不能通过局域网 IP 192.168.1.x 访问,只能通过 localhost 访问。这是因为 WSL 与主机共享 IP ,需要进行端口映射才可以。 参考映射命令:
netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=8123 connectaddress=localhost
映射完毕后在局域网可以访问了,但是发现了另外一个问题:HomeKit Bridge 无法进行正常设备发现和绑定,这个还是因为和主机共享一个 IP 导致的,WSL 没有在对应 IP 主动监听端口的权利,很多功能就会无法正常运行。所以为了功能正常使用考虑,WSL 方案不可行。
Hyper-V 部署
既然 WSL 不行,那就祭出老大 Hyper-V 。Hyper-V 是微软的 Type1 级别虚拟机,它的好处是相比普通的 Type2 虚拟机,虚拟化对性能的损失很低,几乎可以忽略不计。
- 首先在“Windows 功能”中打开 Hyper-V
- 重启后打开 Hyper-V 管理器
- https://github.com/home-assistant/operating-system/releases 在这里下载虚拟机镜像(haos_generic-aarch64-9.4.img.xz)
注意:目前为止 9.4 是不兼容 Hyper-V ARM64 的,Boot 会卡 SCSI 控制器获取,作者在 10.0 开发版中支持了,自测可用,在这里下载: https://os-builds.home-assistant.io/10.0.dev20221210/haos_generic-aarch64-10.0.dev20221210.img.xz 未来 10.0 正式版也会支持。
- 将 xz 文件解压,得到 img 文件,使用 qemu-img 工具将 img 文件转换为 Hyper-V 专用的 vhdx 文件
- 点击新建虚拟机,配置完 vhdx 和虚拟机参数后,进入虚拟机设置,将 Secure Boot 关闭
注意,此时虚拟机启动之后是没有独立网卡的,还是会借用宿主机进行上网,我们先不启动,接下来为虚拟机配置网卡。
- 点击 Hyper-V 管理器右侧面板的“虚拟交换机管理器”,新建一个交换机,按照如下进行设置:
- 右键之前创建的虚拟机,将该交换机分配给他:
- 接下来一步也比较重要,点击左侧网络适配器的加号按钮,点击“高级功能”,在右侧,将 MAC 地址从动态调整为静态。
完成以上步骤后,就可以点击启动,静静的等待 Home Assistant 可用了。
对了最后补两句:Debian aarch64 全系都不可在 Hyper-V ARM64 上使用,GRUB 后面会丢鼠标键盘驱动,没法操作。倒是 Ubuntu 全程兼容。
文章本来是想分享给想对小白一些的同学的,可能部分内容比较啰嗦,高手见谅。