【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

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 设备专属,而且能在自家亲儿子上复现。

【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

这个问题在 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 虚拟机,虚拟化对性能的损失很低,几乎可以忽略不计。

【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

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

【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

  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 管理器右侧面板的“虚拟交换机管理器”,新建一个交换机,按照如下进行设置:

【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

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

【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

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

【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

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

【技术转载】Windows Dev Kit 2023 (Windows on ARM) 部署 Home Assistant 踩坑分享

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

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

声明:本站文章,有些原创,有些转载,如发现侵权侵请联系删除。本站所有原创帖均可复制、搬运,开网站就是为了大家一起乐乐,不在乎版权。对了,本站小水管,垃圾服务器,请不要采集,吐槽君纯属用爱发电,经不起折腾。

给TA打赏
共{{data.count}}人
人已打赏
技术宅

JetBrains宣布停用苹果iOS和macOS开发工具AppCode

2022-12-16 0:46:31

技术宅

解决 ipv6 优先访问ChatGPT造成的“not available in your country”问题

2022-12-16 8:58:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索