mirror of
https://github.com/lima-vm/lima.git
synced 2026-10-28 11:44:35 +08:00
765 lines
37 KiB
YAML
765 lines
37 KiB
YAML
# ===================================================================== #
|
||
# BASIC CONFIGURATION
|
||
# ===================================================================== #
|
||
|
||
# Default values in this YAML file are specified by `null` instead of Lima's "builtin default" values,
|
||
# so they can be overridden by the $LIMA_HOME/_config/default.yaml mechanism documented at the end of this file.
|
||
|
||
# VM type: "qemu", "vz" (on macOS 13 and later), or "default".
|
||
# The vmType can be specified only on creating the instance.
|
||
# The vmType of existing instances cannot be changed.
|
||
# 🟢 Builtin default: "vz" (on macOS 13.5 and later), "qemu" (on others)
|
||
vmType: null
|
||
|
||
# Arch: "default", "x86_64", "aarch64".
|
||
# 🟢 Builtin default: "default" (corresponds to the host architecture)
|
||
arch: null
|
||
|
||
|
||
# OpenStack-compatible disk image.
|
||
# Each image has a `location` URL for the disk image, an `arch` setting, an optional `digest`,
|
||
# an optional `variant` (e.g. "server", "minimal", "genericcloud"), and an optional `archVariant`
|
||
# for the CPU micro-architecture level (e.g. "v3" for x86-64-v3; the image still runs as `arch`).
|
||
# If multiple image variants are defined for the target architecture, the first one is used by default,
|
||
# but they can be filtered using the `--image-variant` and `--arch-variant` flags when running
|
||
# `limactl start` or `limactl create`.
|
||
# To specify a custom kernel and initial RAM disk, nest `kernel` and `initrd` under an image entry:
|
||
# - location: "https://example.com/image.qcow2"
|
||
# # kernel specifies a custom kernel to boot.
|
||
# kernel:
|
||
# location: "https://example.com/vmlinuz"
|
||
# digest: "sha256:..."
|
||
# cmdline: "console=ttyS0 root=/dev/sda1"
|
||
# # initrd specifies a custom initial RAM disk.
|
||
# initrd:
|
||
# location: "https://example.com/initrd.img"
|
||
# digest: "sha256:..."
|
||
# 🟢 Builtin default: none (must be specified)
|
||
# 🔵 This file: Ubuntu images (inherited via the `base` mechanism later in this file)
|
||
images: []
|
||
|
||
# CPUs
|
||
# 🟢 Builtin default: min(4, host CPU cores)
|
||
cpus: null
|
||
|
||
# Memory size
|
||
# 🟢 Builtin default: min("4GiB", half of host memory)
|
||
memory: null
|
||
|
||
# Disk size
|
||
# 🟢 Builtin default: "100GiB"
|
||
disk: null
|
||
|
||
# Expose host directories to the guest, the mount point might be accessible from all UIDs in the guest
|
||
# "location" can use these template variables: {{.Home}}, {{.Dir}}, {{.Name}}, {{.UID}}, {{.User}}, {{.Param.Key}},
|
||
# {{.GlobalTempDir}}, and {{.TempDir}}. The global temp dir is always "/tmp" on Unix.
|
||
# "mountPoint" can use these template variables: {{.Home}}, {{.Name}}, {{.Hostname}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
# 🟢 Builtin default: [] (Mount nothing)
|
||
# 🔵 This file: Mount the home as read-only (inherited via the `base` mechanism later in this file)
|
||
# Until Lima v1.2, /tmp/lima was mounted too as writable.
|
||
mounts: []
|
||
# - location: "~"
|
||
# # Configure the mountPoint inside the guest.
|
||
# # 🟢 Builtin default: value of location
|
||
# mountPoint: null
|
||
# # Setting `writable` to true is discouraged when mountType is set to "reverse-sshfs".
|
||
# # 🟢 Builtin default: false
|
||
# writable: null
|
||
# sshfs:
|
||
# # Enabling the SSHFS cache will increase performance of the mounted filesystem, at
|
||
# # the cost of potentially not reflecting changes made on the host in a timely manner.
|
||
# # Warning: It looks like PHP filesystem access does not work correctly when
|
||
# # the cache is disabled.
|
||
# # 🟢 Builtin default: true
|
||
# cache: null
|
||
# # SSHFS has an optional flag called 'follow_symlinks'. This allows mounts
|
||
# # to be properly resolved in the guest os and allow for access to the
|
||
# # contents of the symlink. As a result, symlinked files & folders on the Host
|
||
# # system will look and feel like regular files directories in the Guest OS.
|
||
# # 🟢 Builtin default: false
|
||
# followSymlinks: null
|
||
# # SFTP driver, "builtin" or "openssh-sftp-server". "openssh-sftp-server" is recommended.
|
||
# # 🟢 Builtin default: "openssh-sftp-server" if OpenSSH SFTP Server binary is found, otherwise "builtin"
|
||
# sftpDriver: null
|
||
# 9p:
|
||
# # Supported security models are "passthrough", "mapped-xattr", "mapped-file" and "none".
|
||
# # "mapped-xattr" and "mapped-file" are useful for persistent chown but incompatible with symlinks.
|
||
# # 🟢 Builtin default: "none" (since Lima v0.13)
|
||
# securityModel: null
|
||
# # Select 9P protocol version. Valid options are: "9p2000" (legacy), "9p2000.u", "9p2000.L".
|
||
# # 🟢 Builtin default: "9p2000.L"
|
||
# protocolVersion: null
|
||
# # The number of bytes to use for 9p packet payload, where 4KiB is the absolute minimum.
|
||
# # 🟢 Builtin default: "128KiB"
|
||
# msize: null
|
||
# # Specifies a caching policy. Valid options are: "none", "loose", "fscache" and "mmap".
|
||
# # Try choosing "mmap" or "none" if you see a stability issue with the default "fscache".
|
||
# # See https://www.kernel.org/doc/Documentation/filesystems/9p.txt
|
||
# # 🟢 Builtin default: "fscache" for non-writable mounts, "mmap" for writable mounts
|
||
# cache: null
|
||
|
||
# List of mount types not supported by the kernel of this distro.
|
||
# Also used to resolve the default mount type when not explicitly specified.
|
||
#
|
||
# NOTE: 9p is broken in Linux v6.9, v6.10, and v6.11.
|
||
# The issue was fixed in Linux v6.12-rc5 (https://github.com/torvalds/linux/commit/be2ca38).
|
||
#
|
||
# 🟢 Builtin default: []
|
||
mountTypesUnsupported: null
|
||
|
||
# Mount type for above mounts, such as "reverse-sshfs" (from sshocker), "9p" (QEMU’s virtio-9p-pci, aka virtfs),
|
||
# or "virtiofs" (experimental on Linux; needs `vmType: vz` on macOS).
|
||
# 🟢 Builtin default: "default" (resolved to be "9p" for QEMU since Lima v1.0 on non-Windows, "virtiofs" for vz)
|
||
mountType: null
|
||
|
||
# Enable inotify support for mounted directories (EXPERIMENTAL)
|
||
# 🟢 Builtin default: Disabled by default
|
||
mountInotify: null
|
||
|
||
# ===================================================================== #
|
||
# ADVANCED CONFIGURATION
|
||
# ===================================================================== #
|
||
|
||
# Lima disks to attach to the instance. On Linux guests, by default the disk is mounted
|
||
# inside the instance at `/mnt/lima-${VOLUME}`; use "mountPoint" to change this, or set
|
||
# "mount" to false to attach the disk without mounting it (e.g. to manage it yourself
|
||
# inside the guest). When Lima formats the disk, its partition is labeled by name: if
|
||
# the disk is named "data", it can be found inside the instance at
|
||
# `/dev/disk/by-partlabel/lima-data` (names over 31 characters are truncated).
|
||
# The filesystem label is the same, but truncated to what the filesystem accepts (only
|
||
# 11 characters of the name on ext4), so prefer the partition label.
|
||
# Disks formatted by older Lima versions carry only the filesystem label.
|
||
# 🟢 Builtin default: []
|
||
additionalDisks:
|
||
# disks should either be a list of disk name strings, for example:
|
||
# - "data"
|
||
# or a list of disk objects with extra parameters, for example:
|
||
# - name: "data"
|
||
# format: true
|
||
# fsType: "ext4"
|
||
# # Whether Lima should auto-mount the disk inside the guest.
|
||
# # 🟢 Builtin default: true
|
||
# mount: true
|
||
# # Absolute path inside the guest to mount the disk at.
|
||
# # 🟢 Builtin default: /mnt/lima-${name}
|
||
# mountPoint: "/mnt/lima-data"
|
||
|
||
# Attach host block devices (currently macOS with builtin vmType: vz only).
|
||
# The helper accepts disk device paths like /dev/disk4 or /dev/rdisk4s1
|
||
# and requires limactl sudoers --block-device=/dev/diskN.
|
||
# 🟢 Builtin default: []
|
||
blockDevices:
|
||
# - /dev/disk4
|
||
|
||
ssh:
|
||
# A localhost port of the host. Forwarded to port 22 of the guest.
|
||
# 🟢 Builtin default: 0 (automatically assigned to a free port)
|
||
localPort: null
|
||
# Load ~/.ssh/*.pub in addition to $LIMA_HOME/_config/user.pub .
|
||
# This option is useful when you want to use other SSH-based
|
||
# applications such as rsync with the Lima instance.
|
||
# If you have an insecure key under ~/.ssh, do not use this option.
|
||
# 🟢 Builtin default: false (since Lima v1.0)
|
||
loadDotSSHPubKeys: null
|
||
# Forward ssh agent into the instance.
|
||
# The ssh agent socket can be mounted in a container at the path `/run/host-services/ssh-auth.sock`.
|
||
# Set the environment variable `SSH_AUTH_SOCK` value to the path above.
|
||
# The socket is accessible by the non-root user inside the Lima instance.
|
||
# 🟢 Builtin default: false
|
||
forwardAgent: null
|
||
# Forward X11 into the instance
|
||
# 🟢 Builtin default: false
|
||
forwardX11: null
|
||
# Trust forwarded X11 clients
|
||
# 🟢 Builtin default: false
|
||
forwardX11Trusted: null
|
||
# Enable SSH over vsock.
|
||
# 🟢 Builtin default: true for vz and krunkit with Linux guests, false otherwise
|
||
overVsock: null
|
||
|
||
caCerts:
|
||
# If set to `true`, this will remove all the default trusted CA certificates that
|
||
# are normally shipped with the OS.
|
||
# 🟢 Builtin default: false
|
||
removeDefaults: null
|
||
|
||
# A list of trusted CA certificate files. The files will be read and passed to cloud-init.
|
||
files:
|
||
# - examples/hello.crt
|
||
|
||
# A list of trusted CA certificates. These are directly passed to cloud-init.
|
||
certs:
|
||
# - |
|
||
# -----BEGIN CERTIFICATE-----
|
||
# YOUR-ORGS-TRUSTED-CA-CERT-HERE
|
||
# -----END CERTIFICATE-----
|
||
# - |
|
||
# -----BEGIN CERTIFICATE-----
|
||
# YOUR-ORGS-TRUSTED-CA-CERT-HERE
|
||
# -----END CERTIFICATE-----
|
||
|
||
# Upgrade the instance on boot
|
||
# Reboot after upgrade if required
|
||
# 🟢 Builtin default: false
|
||
upgradePackages: null
|
||
|
||
containerd:
|
||
# Enable system-wide (aka rootful) containerd and its dependencies (BuildKit, Stargz Snapshotter)
|
||
# Note that `nerdctl.lima` only works in rootless mode; you have to use `lima sudo nerdctl ...`
|
||
# to use rootful containerd with nerdctl.
|
||
# 🟢 Builtin default: false
|
||
system: null
|
||
# Enable user-scoped (aka rootless) containerd and its dependencies
|
||
# 🟢 Builtin default: true for Linux x86_64 and aarch64 guests, false otherwise
|
||
user: null
|
||
# # Override containerd archive
|
||
# # 🟢 Builtin default: hard-coded URL with hard-coded digest (see the output of `limactl info | jq .defaultTemplate.containerd.archives`)
|
||
# archives:
|
||
# - location: "~/Downloads/nerdctl-full-X.Y.Z-linux-amd64.tar.gz"
|
||
# arch: "x86_64"
|
||
# digest: "sha256:..."
|
||
|
||
# Provisioning scripts need to be idempotent because they might be called
|
||
# multiple times, e.g. when the host VM is being restarted.
|
||
# The scripts can use the following template variables: {{.Home}}, {{.Name}}, {{.Hostname}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
#
|
||
# EXPERIMENTAL Alternatively the script can be provided using the "file" property. This file is read when the instance
|
||
# is created and then stored under the "script" property. When "file" is specified "script" must be empty.
|
||
# The "file" property can either be a string (URL), or an object with a "url" and "digest" properties.
|
||
# The "digest" property is currently unused.
|
||
# Relative script files will be resolved relative to the location of the template file.
|
||
# 🟢 Builtin default: []
|
||
# provision:
|
||
# # `system` is executed with root privileges
|
||
# - mode: system
|
||
# script: |
|
||
# #!/bin/bash
|
||
# set -eux -o pipefail
|
||
# export DEBIAN_FRONTEND=noninteractive
|
||
# apt-get install -y vim
|
||
# # `user` is executed without root privileges
|
||
# - mode: user
|
||
# file:
|
||
# url: user-provisioning.sh
|
||
# digest: deadbeef
|
||
# # `boot` is executed directly by /bin/sh as part of cloud-init-local.service's early boot process,
|
||
# # which is why there is no hash-bang specified in the example
|
||
# # See cloud-init docs for more info https://docs.cloud-init.io/en/latest/reference/examples.html#run-commands-on-first-boot
|
||
# - mode: boot
|
||
# script: |
|
||
# systemctl disable NetworkManager-wait-online.service
|
||
# # `dependency` is executed before the regular dependency resolution workflow in
|
||
# # pkg/cidata/cidata.TEMPLATE.d/boot.Linux/30-install-packages.sh
|
||
# # If skipDefaultDependencyResolution is set on at least one `dependency` mode provisioning script, the regular
|
||
# # dependency resolution workflow in pkg/cidata/cidata.TEMPLATE.d/boot.Linux/30-install-packages.sh will be skipped.
|
||
# - mode: dependency
|
||
# skipDefaultDependencyResolution: false
|
||
# script: |
|
||
# #!/bin/bash
|
||
# dnf config-manager --add-repo ...
|
||
# dnf install ...
|
||
# # `ansible` is executed after other scripts are complete
|
||
# # It requires `ansible-playbook` command to be installed.
|
||
# # Environment variables such as ANSIBLE_CONFIG can be used, to control the behavior of the playbook execution.
|
||
# # See ansible docs, and `ansible-config`, for more info https://docs.ansible.com/ansible/latest/playbook_guide/
|
||
# # DEPRECATED The ansible mode is deprecated, and should not be used. Instead call ansible-playbook directly,
|
||
# # either from the host after the instance is started or from the instance by running ansible locally instead.
|
||
# - mode: ansible
|
||
# playbook: playbook.yaml
|
||
# # `data` is a file that is written to the guest filesystem and not executed at all.
|
||
# # The file is written after the boot scripts, but before any other provisioning scripts are run.
|
||
# # Note that reverse-sshfs mounts are not established at this time; other mount types are already mounted.
|
||
# # The `path` and `content` properties are required. The `file` property can be used the same way as with
|
||
# # other provisioning scripts, in which case `content` must be empty. The `owner` defaults to "root:root";
|
||
# # the permissions default to 644. The `overwrite` property defaults to `true`, in which case the file will
|
||
# # be overwritten on every boot.
|
||
# # `path`, `contents`, and `owner` are evaluated as guest templates (see above).
|
||
# - mode: data
|
||
# path: /etc/conf.d/example
|
||
# content: |
|
||
# FOO=bar
|
||
# owner: "root:root"
|
||
# permissions: 644
|
||
# overwrite: false
|
||
# # Create or edit a file in the guest filesystem by using `yq`.
|
||
# # The file specified by `path` will be updated by `expression`.
|
||
# # An empty file of the required `format` will be created if it does not yet exist.
|
||
# # `format` defaults to "auto" and will be detected by file extension of `path`.
|
||
# # If the extension is not recognized by `yq` then `format` must be set to a
|
||
# # value from this list:
|
||
# # "auto", "csv", "ini", "json", "props", "tsv", "toml", "xml", "yaml"
|
||
# # See https://github.com/mikefarah/yq for more info.
|
||
# # Any missing directories will be created as needed.
|
||
# # The file permissions will be set to the specified value.
|
||
# # The file and directory creation will be performed as the specified owner.
|
||
# # If the existing file is not writable by the specified owner, the operation will fail.
|
||
# # `path` and `expression` are required.
|
||
# # `owner` and `permissions` are optional. Defaults to "root:root" (on Linux) and 644.
|
||
# - mode: yq
|
||
# path: "{{.Home}}/.config/docker/daemon.json"
|
||
# expression: ".features.containerd-snapshotter = {{.Param.containerdSnapshotter}}"
|
||
# format: auto
|
||
# owner: "{{.User}}"
|
||
# permissions: 644
|
||
#
|
||
# Q. In what order are provision scripts executed?
|
||
# A. All provisions are processed per boot by each module in stages of cloud-init as follows:
|
||
# 1. cloud-init 'init' stage
|
||
# bootcmd:
|
||
# - `mode: boot` scripts are executed
|
||
#
|
||
# 2. cloud-init 'config' stage
|
||
# write_files:
|
||
# - `00-lima.boot.sh` is created, but not executed
|
||
#
|
||
# 3. cloud-init 'final' stage
|
||
# scripts_per_boot:
|
||
# - `00-lima.boot.sh` is executed; remaining provisions are processed in the following order:
|
||
# - LIMA pre-defined boot scripts:
|
||
# - `boot.Linux/{00-..., ..., 25-...}`
|
||
# - `boot.Linux/30-install-packages.sh`
|
||
# - `mode: dependency` scripts are executed
|
||
# - `boot.Linux/{35-..., ...}`
|
||
# - `mode: data` files are copied
|
||
# - `mode: yq` files are processed
|
||
# - `mode: system` scripts are executed
|
||
# - `mode: user` scripts are executed
|
||
|
||
# Probe scripts to check readiness.
|
||
# The scripts run in user mode. They must start with a '#!' line.
|
||
# The scripts can use the following template variables: {{.Home}}, {{.Name}}, {{.Hostname}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
# EXPERIMENTAL Alternatively the script can be provided using the "file" property. This file is read when the instance
|
||
# is created and then stored under the "script" property. When "file" is specified "script" must be empty.
|
||
# The "file" property can either be a string (URL), or an object with a "url" and "digest" properties.
|
||
# The "digest" property is currently unused.
|
||
# Relative script files will be resolved relative to the location of the template file.
|
||
# 🟢 Builtin default: []
|
||
# probes:
|
||
# # Only `readiness` probes are supported right now.
|
||
# - mode: readiness
|
||
# description: vim to be installed
|
||
# script: |
|
||
# #!/bin/bash
|
||
# set -eux -o pipefail
|
||
# if ! timeout 30s bash -c "until command -v vim; do sleep 3; done"; then
|
||
# echo >&2 "vim is not installed yet"
|
||
# exit 1
|
||
# fi
|
||
# hint: |
|
||
# vim was not installed in the guest. Make sure the package system is working correctly.
|
||
# Also see "/var/log/cloud-init-output.log" in the guest.
|
||
|
||
# ===================================================================== #
|
||
# FURTHER ADVANCED CONFIGURATION
|
||
# ===================================================================== #
|
||
|
||
# A template should specify the minimum Lima version required to parse this template correctly.
|
||
# It should not be set if the minimum version is less than 1.0.0
|
||
# 🟢 Builtin default: not set
|
||
# 🔵 This file: "1.1.0" to use the `base` templating mechanism
|
||
minimumLimaVersion: 2.0.0
|
||
|
||
# EXPERIMENTAL
|
||
# Default settings can be imported from base templates. These will be merged in when the instance
|
||
# is created, and the combined template is stored in the instance directory.
|
||
# This setting can be either a single string (URL), or a list of locators.
|
||
# A locator is again either a string (URL), or an object with "url" and "digest" properties, e.g.
|
||
# base: [{url: ./base.yaml, digest: decafbad}, …]
|
||
# The "digest" property is currently unused.
|
||
# Any relative base template name will be resolved relative to the location of the main template.
|
||
# 🟢 Builtin default: no base template
|
||
# 🔵 This file: Ubuntu images and default mount points
|
||
base:
|
||
- template:_images/ubuntu
|
||
- template:_default/mounts
|
||
|
||
# User to be used inside the VM
|
||
user:
|
||
# User name. An explicitly specified username is not validated by Lima.
|
||
# 🟢 Builtin default: same as the host username, if it is a valid Linux username, otherwise "lima"
|
||
name: null
|
||
# Full name or display name of the user.
|
||
# 🟢 Builtin default: user information from the host
|
||
comment: null
|
||
# Numeric user id. It is not currently possible to specify a group id.
|
||
# 🟢 Builtin default: same as the host user id of the current user (NOT a lookup of the specified "username").
|
||
uid: null
|
||
# Home directory inside the VM, NOT the mounted home directory of the host.
|
||
# It can use the following template variables: {{.Name}}, {{.Hostname}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
# 🟢 Builtin default: "/home/{{.User}}.guest" (Also accessible as "/home/{{.User}}.linux")
|
||
home: null
|
||
# Shell. Needs to be an absolute path on POSIX guests.
|
||
# For Windows guests, this is the command-line interpreter used by `limactl shell`,
|
||
# and must be one of "cmd.exe", "powershell.exe", or "pwsh.exe".
|
||
# The shell must already exist in the guest image.
|
||
# 🟢 Builtin default: "/bin/bash" (Linux), "/bin/zsh" (macOS), "/bin/sh" (FreeBSD), "cmd.exe" (Windows)
|
||
shell: null
|
||
# Setting this to false is EXPERIMENTAL (the default true is not experimental).
|
||
# If false, a secure 16-character random password will be generated inside
|
||
# the guest on first boot and saved to `~/password` (with 0600 permissions).
|
||
# The user should manually rotate this password after the initial login.
|
||
# 🟢 Builtin default: true (false for macOS)
|
||
passwordlessSudo: null
|
||
|
||
vmOpts:
|
||
qemu:
|
||
# Minimum version of QEMU required to create an instance of this template.
|
||
# Will be ignored if the vmType is not "qemu"
|
||
# 🟢 Builtin default: not set
|
||
minimumVersion: null
|
||
# Specify desired QEMU CPU type for each arch.
|
||
# You can see what options are available for host emulation with: `qemu-system-$(arch) -cpu help`.
|
||
# Setting of instructions is supported like this: "qemu64,+ssse3".
|
||
# 🟢 Builtin default: hard-coded arch map with type (see the output of `limactl info | jq .defaultTemplate.cpuType`)
|
||
cpuType:
|
||
# aarch64: "max" # (or "host" when running on aarch64 host)
|
||
# armv7l: "max" # (or "host" when running on armv7l host)
|
||
# riscv64: "max" # (or "host" when running on riscv64 host)
|
||
# x86_64: "max" # (or "host" when running on x86_64 host; additional options are appended on Intel Mac)
|
||
vz:
|
||
# Specify the disk image format: "raw" or "asif".
|
||
# Currently only applies to the primary disk image.
|
||
# "asif" requires macOS 26+, and does not support converting back to "raw".
|
||
# 🟢 Builtin default: "raw"
|
||
diskImageFormat: null
|
||
rosetta:
|
||
# Enable Rosetta inside the VM; needs `vmType: vz`
|
||
# Hint: try `softwareupdate --install-rosetta` if Lima gets stuck at `Installing rosetta...`
|
||
# 🟢 Builtin default: false
|
||
enabled: null
|
||
# Register rosetta to /proc/sys/fs/binfmt_misc
|
||
# 🟢 Builtin default: false
|
||
binfmt: null
|
||
|
||
# OS: "Linux".
|
||
# 🟢 Builtin default: "Linux"
|
||
os: null
|
||
|
||
# EXPERIMENTAL
|
||
# osOpts configures guest OS specific settings.
|
||
# Currently Windows guest only uses this option.
|
||
# osOpts:
|
||
# Windows:
|
||
# virtioWin:
|
||
# - location: /
|
||
# arch: "x86_64"
|
||
|
||
# DEPRECATED: Use vmOpts.qemu.cpuType instead. See the vmOpts.qemu.cpuType section above for configuration.
|
||
cpuType:
|
||
|
||
# DEPRECATED: Use vmOpts.vz.rosetta instead. See the vmOpts.vz.rosetta section above for configuration.
|
||
rosetta:
|
||
enabled: null
|
||
binfmt: null
|
||
|
||
# Specify the timezone name (as used by the zoneinfo database). Specify the empty string
|
||
# to not set a timezone in the instance.
|
||
# 🟢 Builtin default: use name from /etc/timezone or deduce from symlink target of /etc/localtime
|
||
timezone: null
|
||
|
||
firmware:
|
||
# Use legacy BIOS instead of UEFI. Ignored for aarch64 and vz.
|
||
# 🟢 Builtin default: false
|
||
legacyBIOS: null
|
||
# # Override UEFI images
|
||
# # 🟢 Builtin default: uses VM's default UEFI, except for qemu + aarch64.
|
||
# # See <https://lists.gnu.org/archive/html/qemu-devel/2023-12/msg01694.html>
|
||
# images:
|
||
# - location: "~/Downloads/edk2-aarch64-code.fd.gz"
|
||
# arch: "aarch64"
|
||
# digest: "sha256:..."
|
||
# vmType: "qemu"
|
||
|
||
audio:
|
||
# EXPERIMENTAL
|
||
# QEMU audiodev, e.g., "none", "coreaudio", "pa", "alsa", "oss".
|
||
# VZ driver, use "vz" as device name
|
||
# Choosing "none" will mute the audio output, and not play any sound.
|
||
# Choosing "default" will pick a suitable choice of: coreaudio, pa, dsound, oss.
|
||
# As of QEMU v6.2 the default is to create a disconnected sound device
|
||
# that is still visible in the guest but not connected to the host.
|
||
# 🟢 Builtin default: ""
|
||
device: null
|
||
# The virtual hardware presentation for QEMU driver. Options are "hda" (legacy) or "virtio" (paravirtualized, requires QEMU >= 8.2).
|
||
# VZ driver always uses virtio-sound regardless of this setting.
|
||
# 🟢 Builtin default: "" (resolves to "hda" when audio.device is set)
|
||
interface: null
|
||
# EXPERIMENTAL
|
||
# Attach a microphone as well as speakers, so the guest gets a capture device
|
||
# (ALSA "pcmC0D1c") and not only playback. Needs audio.device to be set.
|
||
# Off by default: an input stream makes macOS ask for microphone permission on
|
||
# behalf of Lima.
|
||
# VZ driver only. The QEMU driver warns and ignores it.
|
||
# 🟢 Builtin default: false
|
||
microphone: null
|
||
|
||
video:
|
||
# QEMU display, e.g., "none", "cocoa", "sdl", "gtk", "vnc", "default".
|
||
# Choosing "none" will hide the video output, and not show any window.
|
||
# Choosing "vnc" will use a network server, and not show any window.
|
||
# Choosing "default" will pick the first available of: gtk, sdl, cocoa.
|
||
# As of QEMU v6.2, enabling anything but none or vnc is known to have negative impact
|
||
# on performance on macOS hosts: https://gitlab.com/qemu-project/qemu/-/issues/334
|
||
# 🟢 Builtin default: "none"
|
||
display: null
|
||
# VNC (Virtual Network Computing) is a platform-independent graphical
|
||
# desktop-sharing system that uses the Remote Frame Buffer protocol (RFB)
|
||
vnc:
|
||
# VNC display, e.g.,"to=L", "host:d", "unix:path", "none"
|
||
# By convention the TCP port is 5900+d, connections from any host.
|
||
# 🟢 Builtin default: "127.0.0.1:0,to=9"
|
||
display: null
|
||
|
||
# The instance can get routable IP addresses from the vmnet framework using
|
||
# https://github.com/lima-vm/socket_vmnet.
|
||
# 🟢 Builtin default: []
|
||
networks:
|
||
# Lima can manage daemons for networks defined in $LIMA_HOME/_config/networks.yaml
|
||
# automatically. The socket_vmnet binary must be installed into
|
||
# secure locations only alterable by the "root" user.
|
||
# - lima: shared
|
||
# # MAC address of the instance; lima will pick one based on the instance name,
|
||
# # so DHCP assigned ip addresses should remain constant over instance restarts.
|
||
# macAddress: ""
|
||
# # Interface name, defaults to "lima0", "lima1", etc.
|
||
# interface: ""
|
||
# # Interface metric, lowest metric becomes the preferred route.
|
||
# # Defaults to 100. Builtin SLIRP network uses 200.
|
||
# metric: 100
|
||
#
|
||
# Lima can also connect to "unmanaged" networks addressed by "socket". This
|
||
# means that the daemons will not be controlled by Lima, but must be started
|
||
# before the instance. The interface type (host, shared, or bridged) is
|
||
# configured in socket_vmnet and not in lima.
|
||
# - socket: "/var/run/socket_vmnet"
|
||
|
||
|
||
# The "vzNAT" IP address is accessible from the host, but not from other guests.
|
||
# Needs `vmType: vz`
|
||
# - vzNAT: true
|
||
|
||
# Port forwarding rules. Forwarding between ports 22 and ssh.localPort cannot be overridden.
|
||
# Rules are checked sequentially until the first one matches.
|
||
# portForwards:
|
||
# - guestPort: 443
|
||
# hostIP: "0.0.0.0" # overrides the default value "127.0.0.1"; allows privileged port forwarding
|
||
# # default: hostPort: 443 (same as guestPort)
|
||
# # default: guestIP: "127.0.0.1" (also matches bind addresses "0.0.0.0", "::", and "::1")
|
||
# # default: proto: "tcp" (other options: "udp, "any")
|
||
#
|
||
# - guestPortRange: [4000, 4999]
|
||
# hostIP: "0.0.0.0" # overrides the default value "127.0.0.1"
|
||
# # default: hostPortRange: [4000, 4999] (must specify same number of ports as guestPortRange)
|
||
#
|
||
# - guestPort: 80
|
||
# hostPort: 8080 # overrides the default value 80
|
||
#
|
||
# - guestIP: "127.0.0.2" # overrides the default value "127.0.0.1"
|
||
# hostIP: "127.0.0.2" # overrides the default value "127.0.0.1"
|
||
# # default: guestPortRange: [1, 65535]
|
||
# # default: hostPortRange: [1, 65535]
|
||
#
|
||
# - guestIP: 0.0.0.0 # otherwise defaults to 127.0.0.1
|
||
# proto: any # tcp and udp
|
||
# ignore: true # don't forward these ports (guestPortRange, in this case 1-65535)
|
||
#
|
||
# - guestPort: 7443
|
||
# guestIP: "0.0.0.0" # Will match *any* interface
|
||
# guestIPMustBeZero: false # 0.0.0.0 matches any bound interface, not just 0.0.0.0 itself
|
||
# hostIP: "0.0.0.0" # Forwards to 0.0.0.0, exposing it externally
|
||
#
|
||
# - guestSocket: "/run/user/{{.UID}}/my.sock"
|
||
# hostSocket: mysocket
|
||
# # default: reverse: false
|
||
# # "guestSocket" can include these template variables: {{.Home}}, {{.Name}}, {{.Hostname}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
# # "hostSocket" can include {{.Home}}, {{.Dir}}, {{.Name}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
# # "reverse" can only be used for unix sockets right now, not for tcp sockets.
|
||
# # Put sockets into "{{.Dir}}/sock" to avoid collision with Lima internal sockets!
|
||
# # Sockets can also be forwarded to ports and vice versa, but not to/from a range of ports.
|
||
# # Forwarding requires the local user rwx access to the directory of the "hostsocket".
|
||
# # Reverse forwards, and all forwards when LIMA_SSH_PORT_FORWARDER=true, also require the lima user
|
||
# # to have rw access to the "guestsocket"; otherwise the guest agent connects to it as root.
|
||
#
|
||
# # Lima internally appends this fallback rule at the end:
|
||
# - guestIP: "127.0.0.1"
|
||
# proto: "any"
|
||
# guestPortRange: [1, 65535]
|
||
# hostIP: "127.0.0.1"
|
||
# hostPortRange: [1, 65535]
|
||
# # Any port still not matched by a rule will not be forwarded (ignored)
|
||
|
||
# Copy files from the guest to the host. Copied after provisioning scripts have been completed.
|
||
# copyToHost:
|
||
# - guest: "/etc/myconfig.cfg"
|
||
# host: "{{.Dir}}/copied-from-guest/myconfig"
|
||
# # skipIfMissing: false
|
||
# # deleteOnStop: false
|
||
# # "guest" can include these template variables: {{.Home}}, {{.Name}}, {{.Hostname}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
# # "host" can include {{.Home}}, {{.Dir}}, {{.Name}}, {{.UID}}, {{.User}}, and {{.Param.Key}}.
|
||
# # "skipIfMissing" will skip copying the file from the guest if the file is missing.
|
||
# # "deleteOnStop" will delete the file from the host when the instance is stopped.
|
||
|
||
# Message. Information to be shown to the user, given as a Go template for the instance.
|
||
# The same template variables as for listing instances can be used, for example {{.Dir}}.
|
||
# You can view the complete list of variables using `limactl list --list-fields` command.
|
||
# It also includes {{.HostOS}} and {{.HostArch}} vars, for the runtime GOOS and GOARCH.
|
||
# 🟢 Builtin default: ""
|
||
# message: |
|
||
# This will be shown to the user.
|
||
|
||
# Extra environment variables that will be loaded into the VM at start up.
|
||
# These variables are consumed by internal init scripts, and also added
|
||
# to /etc/environment.
|
||
# If you set any of "ftp_proxy", "http_proxy", "https_proxy", or "no_proxy", then
|
||
# Lima will automatically set an uppercase variant to the same value as well.
|
||
# 🟢 Builtin default: {}
|
||
# env:
|
||
# KEY: value
|
||
|
||
# Defines variables used for customizing the functionality.
|
||
# Key names must start with an uppercase or lowercase letter followed by
|
||
# any number of letters, digits, and underscores.
|
||
# Values must not contain non-printable characters except for spaces and tabs.
|
||
# These variables can be referenced as {{.Param.Key}} in lima.yaml.
|
||
# In provisioning scripts and probes they are also available as predefined
|
||
# environment variables, prefixed with "PARAM_" (so `Key` → `$PARAM_Key`).
|
||
# param:
|
||
# Key: value
|
||
|
||
# Lima will override the proxy environment variables with values from the current process
|
||
# environment (the environment in effect when you run `limactl start`). It will automatically
|
||
# replace the strings "localhost" and "127.0.0.1" with the host gateway address from inside
|
||
# the VM, so it stays routable. Use of the process environment can be disabled by setting
|
||
# propagateProxyEnv to false.
|
||
# 🟢 Builtin default: true
|
||
propagateProxyEnv: null
|
||
|
||
# The host agent implements a DNS server that looks up host names on the host
|
||
# using the local system resolver. This means changing VPN and network settings
|
||
# are reflected automatically into the guest, including conditional forward,
|
||
# and mDNS lookup. By default, only IPv4 addresses will be returned. IPv6 addresses
|
||
# can only work when using a vmnet network interface and the host has working
|
||
# IPv6 configured as well.
|
||
hostResolver:
|
||
# 🟢 Builtin default: true (except for hcs driver; it should be always false with hcs driver)
|
||
enabled: null
|
||
# 🟢 Builtin default: false
|
||
ipv6: null
|
||
# Static names can be defined here as an alternative to adding them to the hosts /etc/hosts.
|
||
# Values can be either other hostnames, or IP addresses. The host.lima.internal name is
|
||
# predefined to specify the gateway address to the host.
|
||
# 🟢 Builtin default: {}
|
||
hosts:
|
||
# guest.name: 127.1.1.1
|
||
# host.name: host.lima.internal
|
||
|
||
# If hostResolver.enabled is false, then the following rules apply for configuring dns:
|
||
# Explicitly set DNS addresses for qemu user-mode networking. By default, qemu picks *one*
|
||
# nameserver from the host config and forwards all queries to this server. On macOS
|
||
# Lima adds the nameservers configured for the first host interface in service order,
|
||
# that has an IPv4 address, to the list. In case this still doesn't work (e.g. VPN
|
||
# setups), the servers can be specified here explicitly. If nameservers are specified
|
||
# here, then the configuration from network preferences will be ignored.
|
||
# 🟢 Builtin default: []
|
||
# dns:
|
||
# - 1.1.1.1
|
||
# - 1.0.0.1
|
||
|
||
# Prefix to use for installing guest agent, and containerd with dependencies (if configured)
|
||
# 🟢 Builtin default: /usr/local
|
||
guestInstallPrefix: null
|
||
|
||
# When the "plain" mode is enabled:
|
||
# - the YAML properties for mounts, port forwarding, containerd, etc. will be ignored
|
||
# - guest agent will not be running
|
||
# - dependency packages like sshfs will not be installed into the VM
|
||
# User-specified provisioning scripts will be still executed.
|
||
# See https://lima-vm.io/docs/config/plain/ for the full behavior.
|
||
# 🟢 Builtin default: false
|
||
plain: null
|
||
|
||
# When the "nestedVirtualization" feature is enabled:
|
||
# - Allows running a VM inside the guest VM.
|
||
# - The guest VM must configure QEMU with the `-cpu host` parameters to run a nested VM:
|
||
# qemu-system-aarch64 -accel kvm -cpu host -M virt
|
||
# - Without specifying `-cpu host`, nested virtualization may fail with the error:
|
||
# qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument
|
||
# - Supported with `vmType: vz` or `vmType: krunkit` on Apple M3 or later (macOS 15 or later).
|
||
# - Supported with `vmType: qemu` for aarch64 guests (`-machine virt,virtualization=on`):
|
||
# - macOS (HVF): QEMU 11.1 or later, on Apple M3 or later (macOS 15 or later).
|
||
# - Linux (KVM): QEMU 10.1 or later, and a host kernel (6.16 or later) booted with `kvm-arm.mode=nested`.
|
||
# - For x86_64 guests with `vmType: qemu` on Linux (KVM), nested virtualization is controlled by the host
|
||
# (the `nested` parameter of the kvm_intel / kvm_amd module) and is exposed to the guest via `-cpu host`.
|
||
# 🟢 Builtin default: false
|
||
nestedVirtualization: null
|
||
|
||
networkOpts:
|
||
# When false, the guest cannot reach the host's loopback services (those bound to 127.0.0.1 or
|
||
# to all interfaces) via "host.lima.internal" (192.168.5.2) on the default user-mode network.
|
||
# DNS, outbound access to other hosts and `limactl shell` keep working.
|
||
# Set this to false for a guest that runs untrusted code, such as a CI runner.
|
||
# - Only supported with `vmType: vz`. Not supported with a `user-v2` network, which is shared by instances.
|
||
# - Does not restrict the host's other addresses: a host service bound to all interfaces is still
|
||
# reachable through the host's LAN IP.
|
||
# - A proxy on the host's loopback (e.g. `http_proxy=http://127.0.0.1:3128`), whether it comes from
|
||
# the host's network settings, `env`, or `propagateProxyEnv`, becomes unreachable from the guest.
|
||
# 🟢 Builtin default: true (since Lima v2.3)
|
||
hostLoopback: null
|
||
|
||
# EXPERIMENTAL
|
||
# When enabled, an emulated TPM 2.0 device is provided to the guest via swtpm.
|
||
# Requires swtpm to be installed on the host. Only supported with vmType: qemu.
|
||
# Currently not supported on Windows hosts as swtpm doesn't support Windows.
|
||
# 🟢 Builtin default: false
|
||
tpm: null
|
||
|
||
# ===================================================================== #
|
||
# GLOBAL DEFAULTS AND OVERRIDES
|
||
# ===================================================================== #
|
||
|
||
# The builtin defaults can be changed globally by creating a $LIMA_HOME/_config/default.yaml
|
||
# file. It will be used by ALL instances under the same $LIMA_HOME, and it
|
||
# will be applied on each `limactl start`, so can affect instance restarts.
|
||
|
||
# A similar mechanism is $LIMA_HOME/_config/override.yaml, which will take
|
||
# precedence even over the settings in an instances lima.yaml file.
|
||
# It also applies to ALL instances under the same $LIMA_HOME, and is applied
|
||
# on each restart. It can be used to globally override settings, e.g. make
|
||
# the mount of the home directory writable.
|
||
|
||
# EXPERIMENTAL
|
||
# A third mechanism is $LIMA_HOME/_config/base.yaml. It is similar to
|
||
# `default.yaml` but will be merged during the `base` template embedding
|
||
# when the instance is created, and not on every start. It becomes part
|
||
# of the lima.yaml file.
|
||
|
||
# On each instance start the config settings are determined: If a value is
|
||
# not set in `lima.yaml`, then the `default.yaml` is used. If that file
|
||
# doesn't exist, or the value is not defined in the file, then the builtin
|
||
# default is used. If `override.yaml` exists and defines the value, then
|
||
# it overrides whatever has been chosen so far.
|
||
|
||
# For slices (e.g. `mounts`, `provision`) and maps (`env`) the entries are
|
||
# combined instead of replacing each other. Slices are produced from override
|
||
# settings, followed by lima.yaml, followed by default.yaml (but NOT from
|
||
# builtin defaults). Maps are produced starting with default.yaml values,
|
||
# overwriting with lima.yaml ones, overwriting with override.yaml.
|
||
|
||
# Exceptions:
|
||
# - `dns` will use the list from the highest priority file; they are not
|
||
# combined. If override.yaml defines a list of `dns` entries, then the
|
||
# settings in default.yaml and lima.yaml are ignored.
|
||
#
|
||
# - `mounts` will update the `writable` setting when 2 entries have the
|
||
# same `location` value. For this reason they are processed in the opposite
|
||
# order: starting with default, followed by lima, and then override.
|
||
#
|
||
# -`networks` will replace lower priority entries with the same `interface`
|
||
# name with higher priority definitions. This does not apply if the
|
||
# `interface` field is empty. `networks` are therefore also processed
|
||
# in lowest to highest priority order.
|
||
|
||
# ===================================================================== #
|
||
# END OF TEMPLATE
|
||
# ===================================================================== #
|