V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq316107934
V2EX  ›  分享发现

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

  •  1
     
  •   qq316107934 · 2022-12-16 00:41:16 +08:00 · 1192 次点击
    这是一个创建于 734 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    image.png

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

    image.png

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

    image.png

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

    image.png

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

    image.png

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

    image.png

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

    image.png

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

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

    omcourseecust
        1
    omcourseecust  
       2022-12-22 23:57:07 +08:00
    除了 ARM 这个卖点外,性能和性价比比不过小米主机 i5 1240p 吧,12 月之前确实是不错的选择
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3223 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:15 · PVG 20:15 · LAX 04:15 · JFK 07:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.