wsl

package
v0.2.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2026 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultDistro 是导入到 WSL 的发行版名称。
	DefaultDistro = "gobrave-ubuntu-docker"
	// DefaultRootfsName 是下载到本地缓存的 rootfs 包文件名。
	DefaultRootfsName = "gobrave-ubuntu-docker-amd64.tar"
	// DefaultDaemonPort 是 WSL 内 dockerd 监听的 TCP 端口。
	DefaultDaemonPort = 2375
	// DefaultEndpoint 是 Windows 平台上自管 dockerd 的默认地址。
	DefaultEndpoint = "tcp://localhost:2375"
)

发行版与文件命名常量。

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	// BaseDir 是 storage.base_dir;发行版数据放在 <BaseDir>/wsl。
	BaseDir string
	// DownloadURL rootfs 包下载地址。
	DownloadURL string
	// Distro 发行版名,默认 DefaultDistro。
	Distro string
	// Endpoint daemon 地址,默认 DefaultEndpoint(tcp://localhost:2375);
	// 仅支持 tcp://,取值形如 tcp://localhost:2375。
	Endpoint string
	// HTTPClient 用于下载;nil 时使用内置 client(大文件不设总超时)。
	HTTPClient *http.Client
}

Config 是 WSL 发行版预置的构造参数。

type WSLProvisioner

type WSLProvisioner struct {
	// contains filtered or unexported fields
}

WSLProvisioner 是 types.Provisioner 在 Windows + WSL 上的实现。

func New

func New(cfg Config) *WSLProvisioner

New 构造 WSLProvisioner。

func (*WSLProvisioner) DistroIP

func (p *WSLProvisioner) DistroIP(ctx context.Context) string

DistroIP 返回发行版的虚拟网卡地址(供装配层把容器发布端口映射成 Windows 可访问地址)。

故意不依赖 docker 容器 IP(172.17.x.x):那是发行版内部的 docker0 网桥, Windows 根本无法路由。容器端口必须发布到发行版网卡(-p 0.0.0.0:port) 后再通过 Windows → 发行版 IP 访问。

func (*WSLProvisioner) Download

func (p *WSLProvisioner) Download(ctx context.Context, progress types.ProgressFunc) error

Download 下载 rootfs 包(支持断点续传 + sha256 校验)。

func (*WSLProvisioner) Endpoint

func (p *WSLProvisioner) Endpoint() string

Endpoint 返回最近一次成功解析的 endpoint(可能为空)。

func (*WSLProvisioner) HealthCheck

func (p *WSLProvisioner) HealthCheck(ctx context.Context) error

HealthCheck 探测当前 endpoint。

func (*WSLProvisioner) Install

func (p *WSLProvisioner) Install(ctx context.Context, progress types.ProgressFunc) error

Install 让发行版就绪并完成 dockerd 初始化。

两条路径:

  • 系统上已有同名发行版(Registered):直接接管,校验/启动 dockerd,不下载不导入;
  • 否则:要求已 Download,执行 wsl --import 后再初始化。

导入路径的任何一步失败都会尽力回滚(注销发行版),避免留下半安装状态; 接管路径失败时绝不注销用户自己的发行版。

func (*WSLProvisioner) Start

func (p *WSLProvisioner) Start(ctx context.Context) (string, error)

Start 确保运行时可用并返回 endpoint。

这是每次进程启动都会调用的入口,满足以下约束:

  1. 未安装但系统上已有同名发行版时,直接接管(启动 dockerd)而不是返回 ErrNotInstalled;
  2. 发行版既未安装也不存在时返回 ErrNotInstalled,不做任何修复;
  3. 已安装时幂等:daemon 已在跑就只探活,不重复启动。

func (*WSLProvisioner) Status

Status 探测当前状态,不产生副作用。

判定顺序:未下载 → 已下载未安装 → 已安装(再看 daemon 是否运行)。

func (*WSLProvisioner) Stop

func (p *WSLProvisioner) Stop(ctx context.Context) error

Stop 停止 daemon(保持安装状态)。

func (*WSLProvisioner) Uninstall

func (p *WSLProvisioner) Uninstall(ctx context.Context) error

Uninstall 注销发行版并删除数据目录(保留下载缓存以便重装)。

接管来的发行版不属于 gobrave:只停止 daemon、清理 state.json 与占位目录, 绝不 wsl --unregister 用户自己的发行版,也保留 dockerd 二进制与标记。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL