lima-vm/lima · error
failed to get boot scripts: %w
Error message
failed to get boot scripts: %w
What it means
GenerateISO9660 (pkg/cidata/cidata.go:415) collects driver-specific boot scripts via the driver's BootScripts(ctx) method and packs them into the boot ISO. If that driver call returns an error (driver-specific failure, e.g. context cancellation or internal driver error), it is wrapped with this message. The instance cannot be created without its boot scripts.
Source
Thrown at pkg/cidata/cidata.go:415
// in instDir. It returns the instance ID, which changes on every boot.
func GenerateISO9660(ctx context.Context, drv driver.Driver, instDir, name string, instConfig *limatype.LimaYAML, udpDNSLocalPort, tcpDNSLocalPort int, guestAgentBinary, nerdctlArchive string, vsockPort int, virtioPort string, noCloudInit, rosettaEnabled, rosettaBinFmt bool) (string, error) {
args, err := templateArgs(ctx, true, instDir, name, instConfig, udpDNSLocalPort, tcpDNSLocalPort, vsockPort, virtioPort, noCloudInit, rosettaEnabled, rosettaBinFmt)
if err != nil {
return "", err
}
if err := ValidateTemplateArgs(args); err != nil {
return "", err
}
layout, err := ExecuteTemplateCIDataISO(args)
if err != nil {
return "", err
}
driverScripts, err := drv.BootScripts(ctx)
if err != nil {
return "", fmt.Errorf("failed to get boot scripts: %w", err)
}
for filename, content := range driverScripts {
layoutPath := path.Join("boot.Linux", filename)
if strings.Contains(filename, "/") {
// When the filename contains a slash, it must be in the format of "boot.<OS>/<SCRIPT>"
if !strings.HasPrefix(filename, "boot.") || strings.Count(filename, "/") != 1 {
return "", fmt.Errorf("invalid boot script filename %#q: must be in format 'boot.<OS>/<SCRIPT>'", filename)
}
layoutPath = filename
} else {
logrus.Warnf("Boot script filename %#q does not contain '/', treating it as a script for Linux and prefixing with 'boot.Linux/'", filename)
}
layout = append(layout, iso9660util.Entry{
Path: layoutPath,
Reader: strings.NewReader(string(content)),
})
}View on GitHub (pinned to dd909d0973)
Solutions
- Read the wrapped inner error (`%w`) to identify the driver failure
- Verify the chosen `vmType` driver is supported and installed on the host
- Retry the command; if it persists, report with the full wrapped error chain
Defensive patterns
Strategy: try-catch
Try / catch
err := limactl.Start(ctx, instName)
if err != nil {
if strings.Contains(err.Error(), "failed to get boot scripts") {
log.Printf("driver failed to supply boot scripts: %v", errors.Unwrap(err))
// switch vmType or retry
}
} Prevention
- Use a stable, well-supported vmType driver for the instance
- Pass a non-canceled context into start/create calls
- Keep Lima up to date; driver BootScripts failures in stable drivers are usually bugs - report them
When it happens
Trigger: Calling limactl start/create where the active driver's BootScripts() fails - underlying driver error, canceled context, or driver initialization problem surfaced during ISO creation.
Common situations: Buggy or partially-supported driver (e.g. experimental VM type), interrupted start command, or a driver that fails because required host dependencies are missing.
Related errors
- invalid boot script filename %#q: must be in format 'boot.<O
- failed to create Windows ISO entries: %w
- unimplemented by the krunkit driver
- inspect status command failed: %w
- failed to read boot scripts directory %#q: %w
AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01).
Data as JSON: /api/errors/7b0ec0aa466b1a49.
Report an issue: GitHub.