『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 5067|回复: 4

[技术探讨] (未完成求探讨)在 WSL2 下安装 Hass.io

[复制链接]

21

主题

188

帖子

1483

积分

金牌会员

Rank: 6Rank: 6

积分
1483
金钱
1290
HASS币
60
发表于 2019-8-17 03:51:15 | 显示全部楼层 |阅读模式

注意: 这不是一个教程!这不是一个教程!只是一个分享交流贴。WSL2 目前争议颇多,且用于实现 Systemd 的方式不完善且笨重,而且目前我还有没搞定的坑。请勿轻易尝试。

1. 为啥要折腾这个?

  1. 最近打算搞一台蜗牛,换 J3455 主板,同时实现 HTPC、NAS 和 Linux Server 的某些功能
  2. 听说 WSL2 可以跑 Docker 了
  3. 之前试过 VMware Player 和 Hyper-V,前者开机自启不优雅,后者虚拟网卡 MAC 地址总有问题,IP 会和宿主机冲突
  4. 我家电视是乐视,无法用 ATV NETFLIX,只能用手机版,而且 Widevine 不是 L1,所以大概只有 480p。用 HTPC 至少可以 1080p

2. 挖坑过程

  1. WSL2 必要条件:Windows 10 1930 build 18917 或以上。原版镜像安装 1903 后开启 Insider Preview,重启后更新系统至最新内测版
  2. 参照官方指南,设置 WSL 版本为 2 https://docs.microsoft.com/en-us/windows/wsl/wsl2-install
  3. 从 Microsoft Store 安装 Ubuntu 或其他版本的 Linux 内核
  4. WSL 的 Ubuntu 系统没有 Systemd,使用 Genie 创建一个“瓶子” https://github.com/arkane-systems/genie
  5. 在“瓶子”里安装 Docker,参照 https://docs.docker.com/install/linux/docker-ce/ubuntu/
  6. 使用 neroxps 提供的 HASSIO 安装一键脚本 https://bbs.hassbian.com/thread-4520-1-1.html

至此,在宿主机上已经可以访问 http://127.0.0.1:8123,但是碰到如下的坑

  1. 宿主机重新启动后,需要在 WSL 中初始化 Genie 后,Hass.io 的两个 Docker 容器才会启动 genie -i
  2. WSL2 虚拟机 IP 不固定,且内网其他设备无法访问。https://github.com/microsoft/WSL/issues/4150 此处有一些解决参考,但我暂时搞不定

所以最简单的方法还是装个 VMPlayer 虚拟一个 Ubuntu ……



回复

使用道具 举报

21

主题

188

帖子

1483

积分

金牌会员

Rank: 6Rank: 6

积分
1483
金钱
1290
HASS币
60
 楼主| 发表于 2019-8-17 03:53:43 | 显示全部楼层
另外此处有一个 Win 10 开启 OpenSSH Server 的教程,挺实用的,一起分享一下
https://www.cnblogs.com/sparkdev/p/10166061.html
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2019-8-17 08:19:42 | 显示全部楼层
本帖最后由 neroxps 于 2019-8-17 08:31 编辑

根本不是 systemd 的事,hassio 的一键脚本虽然是依赖 systemd 启动,但实际上systemd 只是一个进程守护的角色,或者说它只是一个启动脚本。根本不会影响hassio

最根本的问题是 WSL iptables 还没完成实现,Docker 严重依赖  iptables ,这个设计到 windows 的网络和 linux 的网络架构,两者从设计到发展都是两个完全不同的东西,现在要强行合在一起,有难度。

我之前试过了,ubuntu 子系统上 docker 的实现依然是利用 Linux 虚拟机。 Docker 是什么,是和系统共享内核的东西,想想本身 WSL 就是一个微软为了生态妥协出来的东西,听起来很牛,但实现起来也很难,其中还要涉及到开源问题 Linux 这种问题一开始也就导致 Android 为了避开开源问题而搞了个 java 虚拟机出来跑就知道有多难受了。

所以楼主我建议还是另觅他法。

其实硬要跑 hassio 其实不是不行,但你需要手工配置 Docker。而且还会遇到 hassio 的docker network 问题。

你看看 hassio 的代码,linux 下面运行 hassio 之后, hassio_supervisor 会新建一个 bridge 专门给 hassio 所有容器内部通信,而且 hassio和 homeassistant 两个容器也是严重依赖这一个bridge 来通信的。微软目前没有办法使用 WSL 建立 Linux bridge 的话,我劝你还是装虚拟机来的快。
另即使你建立好 Linux bridge 由于 hassio 代码原因,它其实并不是完全不干涉宿主的容器,他拥有 docker 管理权,他代码并没有兼容那么多系统(例如 MAC,Windows),他使用 Docker Python API 开发,并管理 Docker ,只要 API 实现 pull tag 创建 bridge 等操作有点问题,他也会出问题没法工作。
换句话,其实因为 WSL 的 docker 并不完善,它仅仅只是能够把 Docker 跑起来,而并不是完全实现了 Docker 所有功能。至少这是我之前研究出来的结果。

如果楼主能装好的话记得分享下,这将会是了解和学习 WSL 2 的一个重要文档~谢谢

Nero
回复

使用道具 举报

0

主题

71

帖子

1331

积分

论坛积极会员

积分
1331
金钱
1260
HASS币
0
发表于 2019-8-17 08:53:22 | 显示全部楼层
官方有提供HassOS,我在Hyper-v Server跟群晖VMM下都有部署而且非常稳定
回复

使用道具 举报

73

主题

1165

帖子

6641

积分

论坛元老

Rank: 8Rank: 8

积分
6641
金钱
5471
HASS币
30
发表于 2019-8-17 11:08:15 | 显示全部楼层
请问一下:win10下安装VMware Workstation和Hyper-v 安装ubuntu,哪个效率更高。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 06:47 , Processed in 0.183145 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表