虚拟机驱动
| ⚡ 要求 | Lima >= 2.0 |
|---|
Lima 支持两种类型的驱动:内部和外部。这种架构允许扩展性和平台特定的实现。驱动程序不知道它们是内部还是外部的。
💡 另请参见:VM 类型了解不同虚拟化后端的用户配置。
内部驱动 vs 外部驱动
内部驱动直接编译到 limactl 二进制文件中,并在启动时通过将驱动对象传递给 registry.Register() 函数并在主 limactl 代码中使用 Go 的空白导入 _ 导入包来自动注册。例如:
构建标签控制哪些驱动被编译为内部驱动 vs 外部驱动(例如,external_qemu、external_vz、external_wsl2)。
外部驱动是通过 gRPC 与 Lima 通信的独立可执行文件。它们在运行时从配置的目录中被发现。
⚠️ 注意:外部驱动是实验性的,API 可能在未来版本中发生变化。
将驱动构建为外部驱动
你可以使用 ADDITIONAL_DRIVERS Makefile 变量将现有的内部驱动构建为外部驱动:
# 将 QEMU 构建为外部驱动
make ADDITIONAL_DRIVERS=qemu limactl additional-drivers
# 将多个驱动构建为外部驱动
make ADDITIONAL_DRIVERS="qemu vz wsl2" limactl additional-drivers
这会在 _output/libexec/lima/ 中创建外部驱动二进制文件,命名模式为 lima-driver-<name>(或在 Windows 上为 lima-driver-<name>.exe)。
驱动发现
Lima 从以下位置发现外部驱动:
- Custom directories: Set path to the external driver’s directory via
LIMA_DRIVERS_PATHenvironment variable - Standard directory:
<LIMA-PREFIX>/libexec/lima/, where<LIMA_PREFIX>is the location path where the Lima binary is present
发现过程由 pkg/registry/registry.go 处理。
创建自定义外部驱动
要创建新的外部驱动:
- 实现接口:你的驱动必须实现
driver.Driver接口:
type Driver interface {
Lifecycle
GUI
SnapshotManager
GuestAgent
Info() Info
Configure(inst *limatype.Instance) *ConfiguredDriver
FillConfig(ctx context.Context, cfg *limatype.LimaYAML, filePath string) error
SSHAddress(ctx context.Context) (string, error)
}
- 创建 main.go:使用
server.Serve()来暴露你的驱动:
package main
import (
"context"
"github.com/lima-vm/lima/v2/pkg/driver/external/server"
)
func main() {
driver := &MyDriver{}
server.Serve(context.Background(), driver)
}
构建和部署:
- 构建你的驱动:
go build -o lima-driver-mydriver main.go - 将二进制文件放置在通过
LIMA_DRIVERS_PATH可访问的目录中 - 确保二进制文件是可执行的
- 构建你的驱动:
使用驱动:在创建实例时显式指定驱动:
limactl create myinstance --vm-type=mydriver template://default
示例
参见现有的外部驱动实现: