diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3211dbc4e59..a98377ec293 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -219,18 +219,18 @@ jobs: strategy: fail-fast: false matrix: + # Most templates use 9p as the mount type template: - alpine.yaml - - debian.yaml + - debian.yaml # reverse-sshfs - fedora.yaml # cloud-init 24.3.1-1 package has a regression: https://github.com/lima-vm/lima/issues/2714 # - archlinux.yaml - opensuse.yaml - - experimental/net-user-v2.yaml - - experimental/9p.yaml - docker.yaml - ../hack/test-templates/alpine-iso-9p-writable.yaml # Covers alpine-iso.yaml - - ../hack/test-templates/test-misc.yaml + - ../hack/test-templates/net-user-v2.yaml + - ../hack/test-templates/test-misc.yaml # TODO: merge net-user-v2 into test-misc steps: - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: @@ -347,13 +347,15 @@ jobs: run: make - name: Install run: make install + - name: "Adjust LIMACTL_CREATE_ARGS" + run: echo "LIMACTL_CREATE_ARGS=${LIMACTL_CREATE_ARGS} --network=lima:shared" >>$GITHUB_ENV - name: "Inject `no_timer_check` to kernel cmdline" # workaround to https://github.com/lima-vm/lima/issues/84 - run: ./hack/inject-cmdline-to-template.sh templates/vmnet.yaml no_timer_check - - name: Cache image used by vmnet.yaml + run: ./hack/inject-cmdline-to-template.sh templates/default.yaml no_timer_check + - name: Cache image used by default .yaml uses: ./.github/actions/setup_cache_for_template with: - template: templates/vmnet.yaml + template: templates/default.yaml - name: Install test dependencies run: brew install qemu bash coreutils iperf3 - name: Install socket_vmnet @@ -378,7 +380,7 @@ jobs: timeout_minutes: 30 retry_on: error max_attempts: 3 - command: ./hack/test-templates.sh templates/vmnet.yaml + command: ./hack/test-templates.sh templates/default.yaml - if: always() uses: ./.github/actions/upload_failure_logs_if_exists diff --git a/cmd/limactl/start.go b/cmd/limactl/start.go index e7311d5ab70..3825bc5e683 100644 --- a/cmd/limactl/start.go +++ b/cmd/limactl/start.go @@ -132,10 +132,20 @@ func loadOrCreateInstance(cmd *cobra.Command, args []string, createOnly bool) (* templateName := filepath.Join(templateURL.Host, templateURL.Path) logrus.Debugf("interpreting argument %q as a template name %q", arg, templateName) switch templateName { + case "experimental/vz": + logrus.Warn("template://experimental/vz was merged into the default template in Lima v1.0. See also .") case "experimental/riscv64": logrus.Warn("template://experimental/riscv64 was merged into the default template in Lima v1.0. Use `limactl create --arch=riscv64 template://default` instead.") case "experimental/armv7l": logrus.Warn("template://experimental/armv7l was merged into the default template in Lima v1.0. Use `limactl create --arch=armv7l template://default` instead.") + case "vmnet": + logrus.Warn("template://vmnet was removed in Lima v1.0. Use `limactl create --network=lima:shared template://default` instead. See also .") + case "experimental/net-user-v2": + logrus.Warn("template://experimental/net-user-v2 was removed in Lima v1.0. Use `limactl create --network=lima:user-v2 template://default` instead. See also .") + case "experimental/9p": + logrus.Warn("template://experimental/9p was removed in Lima v1.0. Use `limactl create --vm-type=qemu --mount-type=9p template://default` instead. See also .") + case "experimental/virtiofs-linux": + logrus.Warn("template://experimental/virtiofs-linux was removed in Lima v1.0. Use `limactl create --mount-type=virtiofs template://default` instead. See also .") } if st.instName == "" { // e.g., templateName = "deprecated/centos-7" , st.instName = "centos-7" diff --git a/examples/README.md b/examples/README.md index fe3c8d0209c..d72a0e5b5b4 100644 --- a/examples/README.md +++ b/examples/README.md @@ -49,11 +49,6 @@ Container orchestration: - [`experimental/u7s`](./experimental/u7s.yaml): [Usernetes](https://github.com/rootless-containers/usernetes): Rootless Kubernetes Optional feature enablers: -- [`vmnet`](./vmnet.yaml): ⭐enable [`vmnet.framework`](../docs/network.md) -- [`experimental/9p`](./experimental/9p.yaml): [experimental] use 9p mount type -- [`experimental/virtiofs-linux`](./experimental/9p.yaml): [experimental] use virtiofs mount type for Linux -- [`experimental/net-user-v2`](./experimental/net-user-v2.yaml): [experimental] user-v2 network - to enable VM-to-VM communication without root privilege - [`experimental/vnc`](./experimental/vnc.yaml): [experimental] use vnc display and xorg server - [`experimental/alsa`](./experimental/alsa.yaml): [experimental] use alsa and default audio device @@ -68,8 +63,13 @@ Lost+found: - ~`nomad`~: Removed in Lima v0.17.1, as Nomad is [no longer free software](https://github.com/hashicorp/nomad/commit/b3e30b1dfa185d9437a25830522da47b91f78816) - ~`centos-stream-8`~: Remove in Lima v0.23.0, as CentOS Stream 8 reached [EOL](https://blog.centos.org/2023/04/end-dates-are-coming-for-centos-stream-8-and-centos-linux-7/). - ~`deprecated/centos-7`~: Remove in Lima v0.23.0, as CentOS 7 reached [EOL](https://blog.centos.org/2023/04/end-dates-are-coming-for-centos-stream-8-and-centos-linux-7/). +- ~`experimental/vz`~: Merged into the default template in Lima v1.0. See also . - ~`experimental/armv7l`~: Merged into the `default` template in Lima v1.0. Use `limactl create --arch=armv7l template://default`. - ~`experimental/riscv64`~: Merged into the `default` template in Lima v1.0. Use `limactl create --arch=riscv64 template://default`. +- ~`vmnet`~: Removed in Lima v1.0. Use `limactl create --network=lima:shared template://default` instead. See also . +- ~`experimental/net-user-v2`~: Removed in Lima v1.0. Use `limactl create --network=lima:user-v2 template://default` instead. See also . +- ~`experimental/9p`~: Removed in Lima v1.0. Use `limactl create --vm-type=qemu --mount-type=9p template://default` instead. See also . +- ~`experimental/virtiofs-linux`~: Removed in Lima v1.0. Use `limactl create --mount-type=virtiofs-linux template://default` instead. See also . ## Tier diff --git a/examples/experimental/9p.yaml b/examples/experimental/9p.yaml deleted file mode 100644 index bb10abe5745..00000000000 --- a/examples/experimental/9p.yaml +++ /dev/null @@ -1,37 +0,0 @@ -# ⚠️ ⚠️ ⚠️ `template://experimental/9p` will be removed in Lima v1.0, -# as 9p will graduate from experimental and will be the default mount type for QEMU. -# -# For Lima v1.0 and later, use the following command instead: -# ``` -# limactl create --vm-type=qemu template://default -# ``` - -# This template requires Lima v0.10.0 or later. -# On macOS hosts, QEMU needs to be v7.0.0 or later. Homebrew's QEMU v6.2.0_1 can be used too. -# This template is planned to be merged to default.yaml in Lima v1.0 (ETA: 2022 Q2). -images: -# Try to use release-yyyyMMdd image if available. Note that release-yyyyMMdd will be removed after several months. -- location: "https://cloud-images.ubuntu.com/releases/24.04/release-20240821/ubuntu-24.04-server-cloudimg-amd64.img" - arch: "x86_64" - digest: "sha256:0e25ca6ee9f08ec5d4f9910054b66ae7163c6152e81a3e67689d89bd6e4dfa69" -- location: "https://cloud-images.ubuntu.com/releases/24.04/release-20240821/ubuntu-24.04-server-cloudimg-arm64.img" - arch: "aarch64" - digest: "sha256:5ecac6447be66a164626744a87a27fd4e6c6606dc683e0a233870af63df4276a" -# Fallback to the latest release image. -# Hint: run `limactl prune` to invalidate the cache -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img" - arch: "x86_64" -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-arm64.img" - arch: "aarch64" - -mounts: -- location: "~" - 9p: - # Try choosing "mmap" or "none" if you see a stability issue with the default "fscache". - cache: "fscache" -- location: "/tmp/lima" - writable: true - 9p: - cache: "mmap" - -mountType: "9p" diff --git a/examples/experimental/virtiofs-linux.yaml b/examples/experimental/virtiofs-linux.yaml deleted file mode 100644 index 51afc2e5420..00000000000 --- a/examples/experimental/virtiofs-linux.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# This template requires Lima v0.17.0 or later, running on Linux with: -# - QEMU v4.2.0 or later. -# - virtiofsd's Rust implementation: https://gitlab.com/virtio-fs/virtiofsd -# The QEMU version (qemu-virtiofsd) will *not* work, as it requires root access -# for all operations. -images: -# Try to use release-yyyyMMdd image if available. Note that release-yyyyMMdd will be removed after several months. -- location: "https://cloud-images.ubuntu.com/releases/24.04/release-20240821/ubuntu-24.04-server-cloudimg-amd64.img" - arch: "x86_64" - digest: "sha256:0e25ca6ee9f08ec5d4f9910054b66ae7163c6152e81a3e67689d89bd6e4dfa69" -- location: "https://cloud-images.ubuntu.com/releases/24.04/release-20240821/ubuntu-24.04-server-cloudimg-arm64.img" - arch: "aarch64" - digest: "sha256:5ecac6447be66a164626744a87a27fd4e6c6606dc683e0a233870af63df4276a" -# Fallback to the latest release image. -# Hint: run `limactl prune` to invalidate the cache -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img" - arch: "x86_64" -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-arm64.img" - arch: "aarch64" - -mounts: -- location: "~" -- location: "/tmp/lima" - writable: true - -mountType: "virtiofs" diff --git a/examples/experimental/vz.yaml b/examples/experimental/vz.yaml deleted file mode 100644 index 8620a8d19db..00000000000 --- a/examples/experimental/vz.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# ⚠️ ⚠️ ⚠️ `template://experimental/vz` will be removed in Lima v1.0, -# as vz will graduate from experimental and will be the default vmType. -# -# For Lima v1.0 and later, use the following command instead: -# ``` -# limactl create template://default -# ``` - -# A template to run ubuntu using vmType: vz instead of qemu (Default) -# This template requires Lima v0.14.0 or later and macOS 13. -vmType: "vz" -rosetta: - # Enable Rosetta for Linux. - # Hint: try `softwareupdate --install-rosetta` if Lima gets stuck at `Installing rosetta...` - enabled: true - # Register rosetta to /proc/sys/fs/binfmt_misc - binfmt: true - -# Note: On Intel Mac, macOS >= 13.5 is required to boot kernel v6.2 (used by Ubuntu 23.04, Fedora 38, etc.) with vz. -# https://github.com/lima-vm/lima/issues/1577 -images: -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img" - arch: "x86_64" -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-arm64.img" - arch: "aarch64" - -mounts: -- location: "~" -- location: "/tmp/lima" - writable: true -mountType: "virtiofs" - -networks: -# The "vzNAT" IP address is accessible from the host, but not from other guests. -- vzNAT: true diff --git a/examples/vmnet.yaml b/examples/vmnet.yaml deleted file mode 100644 index cd92752fe6a..00000000000 --- a/examples/vmnet.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# A template to enable vmnet.framework. - -# Install socket_vmnet: https://lima-vm.io/docs/config/network/#socket_vmnet - -# This template requires Lima v0.7.0 or later. -# Older versions of Lima were using a different syntax for supporting vmnet.framework. -images: -- location: "https://cloud-images.ubuntu.com/releases/24.04/release-20240821/ubuntu-24.04-server-cloudimg-amd64.img" - arch: "x86_64" - digest: "sha256:0e25ca6ee9f08ec5d4f9910054b66ae7163c6152e81a3e67689d89bd6e4dfa69" -- location: "https://cloud-images.ubuntu.com/releases/24.04/release-20240821/ubuntu-24.04-server-cloudimg-arm64.img" - arch: "aarch64" - digest: "sha256:5ecac6447be66a164626744a87a27fd4e6c6606dc683e0a233870af63df4276a" -# Fallback to the latest release image. -# Hint: run `limactl prune` to invalidate the cache -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img" - arch: "x86_64" -- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-arm64.img" - arch: "aarch64" - -mounts: -- location: "~" -- location: "/tmp/lima" - writable: true -networks: -# The instance can get routable IP addresses from the vmnet framework using -# https://github.com/lima-vm/socket_vmnet (since Lima v0.12). -# -# Available networks are defined in -# $LIMA_HOME/_config/networks.yaml. Supported network types are "host", -# "shared", or "bridged". -# -# Interface "lima0": shared mode (IP is assigned by macOS's bootpd) -- lima: shared -# Interface "lima1": bridged mode (IP is assigned by a DHCP server on the physical network) -# - lima: bridged diff --git a/hack/common.inc.sh b/hack/common.inc.sh index f8aee55949d..9cfdf9e52a0 100644 --- a/hack/common.inc.sh +++ b/hack/common.inc.sh @@ -22,3 +22,5 @@ if [[ ${BASH_VERSINFO:-0} -lt 4 ]]; then ERROR "Bash version is too old: ${BASH_VERSION}" exit 1 fi + +: "${LIMA_HOME:=$HOME/.lima}" diff --git a/hack/test-templates.sh b/hack/test-templates.sh index 3e3aa25b0ca..37455a2a1f9 100755 --- a/hack/test-templates.sh +++ b/hack/test-templates.sh @@ -56,9 +56,6 @@ case "$NAME" in # ● run-r2b459797f5b04262bfa79984077a65c7.service loaded failed failed /usr/bin/systemctl start man-db-cache-update CHECKS["systemd-strict"]= ;; -"vmnet") - CHECKS["vmnet"]=1 - ;; "test-misc") CHECKS["disk"]=1 CHECKS["snapshot-online"]="1" @@ -67,10 +64,6 @@ case "$NAME" in CHECKS["provision-ansible"]="1" CHECKS["param-env-variables"]="1" ;; -"net-user-v2") - CHECKS["port-forwards"]="" - CHECKS["user-v2"]=1 - ;; "docker") CONTAINER_ENGINE="docker" ;; @@ -81,6 +74,22 @@ if limactl ls -q | grep -q "$NAME"; then exit 1 fi +# Create ${NAME}-tmp to inspect the enabled features. +# TODO: skip downloading and converting the image here. +# Probably `limactl create` should have "dry run" mode that just generates `lima.yaml`. +# shellcheck disable=SC2086 +"${LIMACTL_CREATE[@]}" ${LIMACTL_CREATE_ARGS} --set ".additionalDisks=null" --name="${NAME}-tmp" "$FILE" +case "$(yq '.networks[].lima' "${LIMA_HOME}/${NAME}-tmp/lima.yaml")" in +"shared") + CHECKS["vmnet"]=1 + ;; +"user-v2") + CHECKS["port-forwards"]="" + CHECKS["user-v2"]=1 + ;; +esac +limactl rm -f "${NAME}-tmp" + if [[ -n ${CHECKS["port-forwards"]} ]]; then tmpconfig="$HOME/lima-config-tmp" mkdir -p "${tmpconfig}" @@ -381,7 +390,7 @@ fi if [[ -n ${CHECKS["user-v2"]} ]]; then INFO "Testing user-v2 network" secondvm="$NAME-1" - "${LIMACTL_CREATE[@]}" "$FILE" --name "$secondvm" + "${LIMACTL_CREATE[@]}" --set ".additionalDisks=null" "$FILE" --name "$secondvm" if ! limactl start "$secondvm"; then ERROR "Failed to start \"$secondvm\"" diagnose "$secondvm" diff --git a/examples/experimental/net-user-v2.yaml b/hack/test-templates/net-user-v2.yaml similarity index 100% rename from examples/experimental/net-user-v2.yaml rename to hack/test-templates/net-user-v2.yaml