This is an informal translation of README.md
(revision c1368f45, 2022-Dec-12) in Chinese.
This translation might be out of sync with the English version.
Please refer to the English README.md
for the latest information.
这是 README.md
(修订版 c1368f45, 2022-12-12) 的非正式中文翻译,与英文版相比可能有所延迟。
最新情况请查看英文版 README.md
。
Lima 启动了具有自动文件共享和端口转发功能的 Linux 虚拟机(类似于 WSL2),以及 containerd。
Lima 可以被认为是某种非官方的 "Mac 上的 containerd"。
Lima 预期是在 macOS 宿主上使用,但它在 Linux 宿主上也运行良好。
✅ 自动文件共享
✅ 自动端口转发
✅ 对 containerd 的内建支持 (其他的容器引擎也可以使用)
✅ Intel 宿主上的 Intel 虚拟机
✅ ARM 宿主上的 ARM 虚拟机
✅ 各种虚拟机 Linux 发行版:AlmaLinux,Alpine,Arch Linux,Debian,Fedora,openSUSE,Oracle Linux,Rocky,Ubuntu (默认),……
相关项目:sshocker (带有文件共享和端口转发的 ssh)
这个项目与 The Lima driver project (driver for ARM Mali GPUs) 无关。
Talks 页面包含 Lima 相关会议演讲的幻灯片和视频的链接。
Lima 的目标是向 Mac 用户推广 containerd (包括 nerdctl (contaiNERD ctl)),但 Lima 也可以用于非容器应用。
容器环境:
GUI:
#lima
频道
Lima 遵循 CNCF 行为准则。
$ uname -a
Darwin macbook.local 20.4.0 Darwin Kernel Version 20.4.0: Thu Apr 22 21:46:47 PDT 2021; root:xnu-7195.101.2~1/RELEASE_X86_64 x86_64
$ lima uname -a
Linux lima-default 5.11.0-16-generic #17-Ubuntu SMP Wed Apr 14 20:12:43 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ LIMA_INSTANCE=arm lima uname -a
Linux lima-arm 5.11.0-16-generic #17-Ubuntu SMP Wed Apr 14 20:10:16 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
请查看 ./docs/multi-arch.md
,获取 ARM 宿主上的 Intel 虚拟机 和 Intel 宿主上的 ARM 虚拟机 的执行情况。
$ echo "files under /Users on macOS filesystem are readable from Linux" > some-file
$ lima cat some-file
files under /Users on macOS filesystem are readable from Linux
$ lima sh -c 'echo "/tmp/lima is writable from both macOS and Linux" > /tmp/lima/another-file'
$ cat /tmp/lima/another-file
/tmp/lima is writable from both macOS and Linux
$ lima nerdctl run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
你不用每次都运行 "lima nerdctl",相反,你可以使用特殊的快捷方式 "nerdctl.lima" 来做同样的事情。默认情况下,它将和 Lima 一起安装,所以,你不需要做任何额外的事情。会有一个名为 nerdctl 的符号链接指向 nerdctl.lima。但这只在目录中没有 nerdctl 条目时才会创建。值得一提的是,它只能通过 make install 创建。不包括在 Homebrew/MacPorts/nix 软件包中。
在 macOS 和 Linux 都可以通过 http://127.0.0.1:8080 访问。
关于如何使用 containerd 和 nerdctl(contaiNERD ctl),请访问 https://github.com/containerd/containerd 和 https://github.com/containerd/nerdctl。
可以直接使用 Homebrew 上的包 进行安装。
brew install lima
安装 QEMU 7.0 或更新的版本。
/usr/local
(或其他地方)。比如:brew install jq
VERSION=$(curl -fsSL https://api.github.com/repos/lima-vm/lima/releases/latest | jq -r .tag_name)
curl -fsSL "https://github.com/lima-vm/lima/releases/download/${VERSION}/lima-${VERSION:1}-$(uname -s)-$(uname -m).tar.gz" | tar Cxzvm /usr/local
make && make install
。注意 Lima 没有定期在 ARM Mac 进行测试(因为缺乏 CI)。
[macOS]$ limactl start
...
INFO[0029] READY. Run `lima` to open the shell.
[macOS]$ lima uname
Linux
limactl start
limactl start [--name=NAME] [--tty=false] <template://TEMPLATE>
: 启动 Linux 实例
$ limactl start
? Creating an instance "default" [Use arrows to move, type to filter]
> Proceed with the current configuration
Open an editor to review or modify the current configuration
Choose another example (docker, podman, archlinux, fedora, ...)
Exit
...
INFO[0029] READY. Run `lima` to open the shell.
选择 Proceed with the current configuration
,然后等待宿主终端上显示 "READY" 。
如果想做自动化,--tty=false
flag 可以禁用用户交互。
从 "docker" 模板创建一个 "default" 实例:
$ limactl start --name=default template://docker
注意:
limactl start template://TEMPLATE
需要 Lima v0.9.0 或更新版本。 老版本应该用limactl start /usr/local/share/doc/lima/examples/TEMPLATE.yaml
替代。
查看模板列表:
$ limactl start --list-templates
从本地文件创建 "default" 实例:
$ limactl start --name=default /usr/local/share/lima/examples/fedora.yaml
从远程 URL(小心使用,一定要确保来源是可信的)创建 "default" 实例:
$ limactl start --name=default https://raw.githubusercontent.com/lima-vm/lima/master/examples/alpine.yaml
limactl shell
limactl shell <INSTANCE> <COMMAND>
: 在 Linux 上执行 <COMMAND>
。
对于 "default" 实例,这条命令可以缩写为 lima <COMMAND>
。
lima
命令也接受环境变量 $LIMA_INSTANCE
作为实例名。
limactl copy
limactl copy <SOURCE> ... <TARGET>
: 在实例之间,或者宿主与实例之间复制文件
使用 <INSTANCE>:<FILENAME>
指定一个实例内的源文件或者目标文件。
limactl list
limactl list [--json]
: 列出实例
limactl stop
limactl stop [--force] <INSTANCE>
: 停止实例
limactl delete
limactl delete [--force] <INSTANCE>
: 删除实例
limactl factory-reset
limactl factory-reset <INSTANCE>
: 将实例恢复为初始设置
limactl edit
limactl edit <INSTANCE>
: 编辑实例
limactl disk
limactl disk create <DISK> --size <SIZE>
: 创建一个要附加到某个实例的外部磁盘
limactl disk delete <DISK>
: 删除一个已有的磁盘
limactl disk list
: 列出所有已有的磁盘
limactl completion
要启用 bash 中的自动补全,添加 source <(limactl completion bash)
到 ~/.bash_profile
内。
要启用 zsh 中的自动补全,请查看 limactl completion zsh --help
Lima 可能存在导致数据丢失的 bug。
确保在运行 Lima 前做好数据备份。
尤其需要注意的是,以下数据可能很容易丢失:
/tmp/lima
),
可能在宿主休眠之后发生(比如,在关闭和重新打开笔记本电脑的盖子之后)当前虚拟机默认配置:
~
(只读), /tmp/lima
(可写)ssh -L
,通过监视虚拟机的 /proc/net/tcp
和 iptables
事件来自动化git commit -s
来用你的真实姓名签名你的提交,
以此确认你的 Developer Certificate of Origin (DCO)。默认情况下,密码是被禁用和锁定的。
你应该执行 limactl shell bash
(或者 lima bash
)来打开 shell。
还有一种方法,你可以直接 ssh 进虚拟机:ssh -p 60022 -i ~/.lima/_config/user -o NoHostAuthenticationForLocalhost=yes 127.0.0.1
。
可以的。不过我们没有定期在 ARM 上进行测试(因为缺乏 CI)。
AlmaLinux,Alpine,Arch Linux,Debian,Fedora,openSUSE,Oracle Linux,和 Rocky 都是可以运行的。
请查看 ./examples/
。
一个镜像必须满足下面的需求:
sudo
sshfs
newuidmap
和 newgidmap
apt-get
, dnf
, apk
, pacman
, 或者 zypper
(如果你想贡献对其他包管理器的支持,请执行 git grep apt-get
来确定哪里需要改动)是的,任何容器引擎都可以和 Lima 配合使用。
容器运行时例子:
./examples/docker.yaml
: Docker./examples/podman.yaml
: Podman./examples/apptainer.yaml
: Apptainer容器镜像构建器例子:
./examples/buildkit.yaml
: BuildKit容器业务流程协调程序例子:
./examples/k3s.yaml
: Kubernetes (k3s)./examples/k8s.yaml
: Kubernetes (kubeadm)./examples/nomad.yaml
: Nomad默认的 Ubuntu 镜像也包含了 LXD。运行 lima sudo lxc init
来设置 LXD。
也可以看看第三方基于 Lima 的 containerd 项目:
Lima 本身不支持连接到远程 Linux 计算机,但是 Lima 的前身 sshocker 为远程 Linux 计算机提供了类似的功能。
例如,运行 sshocker -v /Users/foo:/home/foo/mnt -p 8080:80 <USER>@<HOST>
将 /Users/foo
作为 /home/foo/mnt
向远程计算机公开,并将 localhost:8080
转发到远程计算机的 80 端口。
Lima 是免费软件(Apache License 2.0),但 Docker for Mac 不是。 他们的 EULA 甚至禁止披露 benchmark 的结果。
另一方面来说,Moby,即 Docker for Linux,也是免费软件,但 Moby/Docker 没有 containerd 的几个新特性,比如:
HV_ERROR
"如果你在 macOS 上通过 homebrew 安装了 QEMU v6.0.0 或更新的版本,你的 QEMU 二进制文件应该已经自动签名以启用 HVF 加速。
但是,如果你看到 HV_ERROR
,你可能需要对二进制文件进行手动签名。
cat >entitlements.xml <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.hypervisor</key>
<true/>
</dict>
</plist>
EOF
codesign -s - --entitlements entitlements.xml --force /usr/local/bin/qemu-system-x86_64
注意:只有 10.15.7 之前版本的 macOS 上你才可能需要额外添加这个授权:
<key>com.apple.vm.hypervisor</key>
<true/>
com.apple.security.hypervisor
授权进行启用。参见 "QEMU 崩溃,提示 HV_ERROR
"
docs/multi-arch.md
了解解决方法。HV_ERROR
"。com.apple.vm.hypervisor
没有被添加。它只在旧版本 macOS 上生效。你可以通过执行 codesign --remove-signature /usr/local/bin/qemu-system-x86_64
来清理签名然后重新开始
vmx_write_mem: mmu_gva_to_gpa XXXXXXXXXXXXXXXX failed
"已知在 Intel Mac 上运行 RHEL8 兼容发行版(如 Rocky Linux 8.x)的镜像时会发生此错误。
解决方式是设置环境变量:QEMU_SYSTEM_X86_64="qemu-system-x86_64 -cpu Haswell-v4"
。
https://bugs.launchpad.net/qemu/+bug/1838390
默认虚拟机 IP 192.168.5.15 对宿主和其他虚拟机来说是不可访问的。
要添加另一个 IP 地址给宿主和其他虚拟机访问的话,请启用 socket_vmnet
(从 Lima v0.12 起可用)
或者 vde_vmnet
(已弃用).
请查看 ./docs/network.md
。
Lima 使用的是 QEMU 的 SLIRP 网络,它不支持开箱即用 ping
。
$ ping google.com
PING google.com (172.217.165.14): 56 data bytes
64 bytes from 172.217.165.14: seq=0 ttl=42 time=2395159.646 ms
64 bytes from 172.217.165.14: seq=0 ttl=42 time=2396160.798 ms (DUP!)
更多细节请查看 Documentation/Networking。
试试 virtiofs。请查看 docs/mount.md
。
默认情况下,home 目录是以只读形式挂载的。
如果想启用可写,请在 YAML 中指定 writable: true
。
mounts:
- location: "~"
writable: true
运行 limactl edit <INSTANCE>
来为一个实例打开 YAML 编辑器进行编辑。
在 macOS 宿主上,Rancher Desktop(从 v1.0 开始)以以下配置启动 Lima:
$LIMA_HOME
目录:$HOME/Library/Application Support/rancher-desktop/lima
limactl
二进制文件:/Applications/Rancher Desktop.app/Contents/Resources/resources/darwin/lima/bin/limactl
0
如果想要开启一个 shell,运行下面的命令:
LIMA_HOME="$HOME/Library/Application Support/rancher-desktop/lima" "/Applications/Rancher Desktop.app/Contents/Resources/resources/darwin/lima/bin/limactl" shell 0
在 Linux 宿主上,试试以下命令:
LIMA_HOME="$HOME/.local/share/rancher-desktop/lima" /opt/rancher-desktop/resources/resources/linux/lima/bin/limactl shell 0
如果你已经安装了 Rancher Desktop 作为一个 AppImage 的话:
LIMA_HOME="$HOME/.local/share/rancher-desktop/lima" "$(ls -d /tmp/.mount_ranche*/opt/rancher-desktop/resources/resources/linux/lima/bin)/limactl" shell 0
limactl --debug start
$HOME/.lima/<INSTANCE>/serial.log
/var/log/cloud-init-output.log
(虚拟机内)/var/log/cloud-init.log
(虚拟机内)我们是一个 Cloud Native Computing Foundation 沙盒项目。
The Linux Foundation® (TLF) has registered trademarks and uses trademarks. For a list of TLF trademarks, see Trademark Usage.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型