3 Star 3 Fork 0

Gitee 极速下载 / lima

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/lima-vm/lima
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

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

[📖开始使用] [❓FAQs & 疑难解答]

Lima logo

Lima: Linux virtual machines (多数情况下在 macOS 上)

Lima 启动了具有自动文件共享和端口转发功能的 Linux 虚拟机(类似于 WSL2),以及 containerd

Lima 可以被认为是某种非官方的 "Mac 上的 containerd"。

Lima 预期是在 macOS 宿主上使用,但它在 Linux 宿主上也运行良好。

✅ 自动文件共享

✅ 自动端口转发

✅ 对 containerd 的内建支持 (其他的容器引擎也可以使用)

✅ Intel 宿主上的 Intel 虚拟机

Intel 宿主上的 ARM 虚拟机

✅ ARM 宿主上的 ARM 虚拟机

ARM 宿主上的 Intel 虚拟机

✅ 各种虚拟机 Linux 发行版:AlmaLinuxAlpineArch LinuxDebianFedoraopenSUSEOracle LinuxRockyUbuntu (默认),……

相关项目:sshocker (带有文件共享和端口转发的 ssh)

这个项目与 The Lima driver project (driver for ARM Mali GPUs) 无关。

Talks 页面包含 Lima 相关会议演讲的幻灯片和视频的链接。

动机

Lima 的目标是向 Mac 用户推广 containerd (包括 nerdctl (contaiNERD ctl)),但 Lima 也可以用于非容器应用。

社区

相关项目

容器环境:

  • Rancher Desktop: 在桌面上进行 Kubernetes 和容器的管理
  • Colima: 用最小化的安装来在 Mac 上使用 Docker (和 Kubernetes)
  • Finch: Finch 是一个用于本地容器开发的命令行客户端

GUI:

交流渠道

行为准则

Lima 遵循 CNCF 行为准则

例子

uname

$ 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 虚拟机 的执行情况。

在 macOS 和 Linux 之间共享文件

$ 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

运行 containerd 容器 (与 Docker 容器兼容)

$ 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/containerdhttps://github.com/containerd/nerdctl。

开始使用

安装

可以直接使用 Homebrew 上的包 进行安装。

brew install lima
手动安装的步骤

安装 QEMU

安装 QEMU 7.0 或更新的版本。

安装 Lima

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
  • 如果想从源码安装 Lima,可以运行 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

:warning: 警告:确保做好数据备份

Lima 可能存在导致数据丢失的 bug。

确保在运行 Lima 前做好数据备份。

尤其需要注意的是,以下数据可能很容易丢失:

  • 共享可写目录下的数据(默认路径/tmp/lima), 可能在宿主休眠之后发生(比如,在关闭和重新打开笔记本电脑的盖子之后)
  • 虚拟机镜像中的数据,绝大部分发生在升级 Lima 的版本时

配置

请参考 ./examples/default.yaml

当前虚拟机默认配置:

  • OS: Ubuntu 22.10 (Kinetic Kudu)
  • CPU: 4 cores
  • 内存:4 GiB
  • 硬盘:100 GiB
  • 挂载目录:~(只读), /tmp/lima(可写)
  • SSH: 127.0.0.1:60022

它是怎么工作的?

开发者指南

给 Lima 做贡献

帮助我们

:pray:

  • 文档
  • CLI 用户体验
  • 性能优化
  • Windows 宿主
  • 使用 vsock 替换 SSH(这份工作需要在 QEMU repo 内完成)

FAQs & 疑难解答

Generic

普遍问题

"我的登录密码是什么?"

默认情况下,密码是被禁用和锁定的。 你应该执行 limactl shell bash(或者 lima bash)来打开 shell。

还有一种方法,你可以直接 ssh 进虚拟机:ssh -p 60022 -i ~/.lima/_config/user -o NoHostAuthenticationForLocalhost=yes 127.0.0.1

"Lima 能在 ARM Mac 上运行吗?"

可以的。不过我们没有定期在 ARM 上进行测试(因为缺乏 CI)。

"我能运行非 Ubuntu 虚拟机吗"

AlmaLinux,Alpine,Arch Linux,Debian,Fedora,openSUSE,Oracle Linux,和 Rocky 都是可以运行的。 请查看 ./examples/

一个镜像必须满足下面的需求:

  • systemd 或者 OpenRC
  • cloud-init
  • 下面的二进制包应该被预装:
    • sudo
  • 下面的二进制包应该被预装,或者可以通过包管理器安装:
    • sshfs
    • newuidmapnewgidmap
  • apt-get, dnf, apk, pacman, 或者 zypper (如果你想贡献对其他包管理器的支持,请执行 git grep apt-get 来确定哪里需要改动)

"我能运行其他容器引擎,比如 Docker 和 Podman 吗?Kubernetes 呢?"

是的,任何容器引擎都可以和 Lima 配合使用。

容器运行时例子:

容器镜像构建器例子:

容器业务流程协调程序例子:

默认的 Ubuntu 镜像也包含了 LXD。运行 lima sudo lxc init 来设置 LXD。

也可以看看第三方基于 Lima 的 containerd 项目:

  • Rancher Desktop: 在桌面上进行 Kubernetes 和容器的管理
  • Colima: 用最小化的安装来在 Mac 上使用 Docker (和 Kubernetes)

"我能在远程 Linux 计算机上运行 Lima 吗?"

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 端口。

"与 Docker for Mac 相比有什么优点?"

Lima 是免费软件(Apache License 2.0),但 Docker for Mac 不是。 他们的 EULA 甚至禁止披露 benchmark 的结果。

另一方面来说,Moby,即 Docker for Linux,也是免费软件,但 Moby/Docker 没有 containerd 的几个新特性,比如:

QEMU

"QEMU 崩溃,提示 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/>

"QEMU 很慢"

  • 确保 HVF 已经通过 com.apple.security.hypervisor 授权进行启用。参见 "QEMU 崩溃,提示 HV_ERROR"
  • 模拟非原生计算机(Intel 宿主上的 ARM 虚拟机,ARM 宿主上的 Intel 虚拟机)在设计上就很慢。查看 docs/multi-arch.md 了解解决方法。

错误 "killed -9"

  • 确保 QEMU 已经签名过。参见 "QEMU 崩溃,提示 HV_ERROR"
  • 如果你是在 macOS 10.15.7 或者 11.0 或者更新的版本上运行,请确保授权 com.apple.vm.hypervisor 没有被添加。它只在旧版本 macOS 上生效。你可以通过执行 codesign --remove-signature /usr/local/bin/qemu-system-x86_64 来清理签名然后重新开始

"QEMU 崩溃,提示 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 192.168.5.15 对宿主和其他虚拟机来说是不可访问的。

要添加另一个 IP 地址给宿主和其他虚拟机访问的话,请启用 socket_vmnet (从 Lima v0.12 起可用) 或者 vde_vmnet (已弃用).

请查看 ./docs/network.md

"Ping 显示重复的数据包和大量的响应时间"

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 编辑器进行编辑。

外部项目

"我在使用 Rancher Desktop。怎么处理底层的 Lima?"

在 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
  • Lima 实例名: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 (虚拟机内)
  • 确保你没有在 YAML 文件内混合使用空格和 tab。

我们是一个 Cloud Native Computing Foundation 沙盒项目。

The Linux Foundation® (TLF) has registered trademarks and uses trademarks. For a list of TLF trademarks, see Trademark Usage.

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

Lima 是一个 macOS 上的 Linux 虚拟机(其他非正式名称包括有“Linux-on-Mac”、“macOS subsystem for Linux”、“containe 展开 收起
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Perl
1
https://gitee.com/mirrors/lima.git
git@gitee.com:mirrors/lima.git
mirrors
lima
lima
master

搜索帮助