Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

2022-12-16 00:41:16 +08:00
 qq316107934

TLDR

  1. WSL 没独立 IP ,不适合部署网关类组件。
  2. Windows On ARM 生态不是很成熟,文章和文档较少,需要先自己研究踩坑。
  3. 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 补丁得到了修复,在修复当天,进行了接下来的部署操作。

  1. 首先将 Docker 安装到 WSL
  2. 参考 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 虚拟机,虚拟化对性能的损失很低,几乎可以忽略不计。

  1. 首先在“Windows 功能”中打开 Hyper-V

  1. 重启后打开 Hyper-V 管理器

  2. 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 正式版也会支持。

  1. 将 xz 文件解压,得到 img 文件,使用 qemu-img 工具将 img 文件转换为 Hyper-V 专用的 vhdx 文件

  2. 点击新建虚拟机,配置完 vhdx 和虚拟机参数后,进入虚拟机设置,将 Secure Boot 关闭

注意,此时虚拟机启动之后是没有独立网卡的,还是会借用宿主机进行上网,我们先不启动,接下来为虚拟机配置网卡。

  1. 点击 Hyper-V 管理器右侧面板的“虚拟交换机管理器”,新建一个交换机,按照如下进行设置:

  1. 右键之前创建的虚拟机,将该交换机分配给他:

  1. 接下来一步也比较重要,点击左侧网络适配器的加号按钮,点击“高级功能”,在右侧,将 MAC 地址从动态调整为静态。

完成以上步骤后,就可以点击启动,静静的等待 Home Assistant 可用了。

对了最后补两句:Debian aarch64 全系都不可在 Hyper-V ARM64 上使用,GRUB 后面会丢鼠标键盘驱动,没法操作。倒是 Ubuntu 全程兼容。

文章本来是想分享给想对小白一些的同学的,可能部分内容比较啰嗦,高手见谅。

1192 次点击
所在节点    分享发现
1 条回复
omcourseecust
2022-12-22 23:57:07 +08:00
除了 ARM 这个卖点外,性能和性价比比不过小米主机 i5 1240p 吧,12 月之前确实是不错的选择

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902836

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX