AkihiroSuda / lima
- понедельник, 17 мая 2021 г. в 00:26:32
Lima: Linux-on-Mac ("macOS subsystem for Linux", "containerd for Mac")
Lima launches Linux virtual machines on macOS, with automatic file sharing, port forwarding, and containerd.
Lima can be considered as a some sort of unofficial "macOS subsystem for Linux", or "containerd for Mac".
Related project: sshocker (ssh with file sharing and port forwarding)
$ 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$ 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:alpinehttp://127.0.0.1:8080 is accessible from both macOS and Linux.
NOTE Privileged ports (0-1023) cannot be forwarded
For the usage of containerd and nerdctl (contaiNERD ctl), visit https://github.com/containerd/containerd and https://github.com/containerd/nerdctl.
coreutils (for realpath command) (brew install coreutils)
QEMU (brew install qemu)
Run the following commands to enable --accel=hvf:
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>
<!-- for OS X 10.10 - macOS 10.15 -->
<key>com.apple.vm.hypervisor</key>
<true/>
<!-- for macOS 11 and later -->
<key>com.apple.security.hypervisor</key>
<true/>
</dict>
</plist>
EOF
codesign -s - --entitlements entitlements.xml --force /usr/local/bin/qemu-system-x86_64realpath command) (brew install coreutils)--accel=hvf support, see https://gist.github.com/citruz/9896cd6fb63288ac95f81716756cb9aaNOTE Lima is not tested on ARM Mac.
Download the binary archive from https://github.com/AkihiroSuda/lima/releases ,
and extract it under /usr/local (or somewhere else).
To install from the source, run make && make install.
Run limactl start <INSTANCE> to start the Linux instance.
The default instance name is "default".
Lima automatically opens an editor (vi) for reviewing and modifying the configuration.
Wait until "READY" to be printed on the host terminal.
Run limactl shell <INSTANCE> <COMMAND> to launch <COMMAND> on Linux.
For the "default" instance, this command can be shortened as just lima <COMMAND>.
The lima command also accepts the instance name as the environment variable $LIMA_INSTANCE.
Run limactl ls to show the instances.
Run limactl delete <INSTANCE> to delete the instance.
To enable bash completion, add source <(limactl completion bash) to ~/.bash_profile.
Lima may have bugs that result in loss of data.
Make sure to back up your data before running Lima.
Especially, the following data might be easily lost:
/tmp/lima by default),
probably after hibernation of the host machine (e.g., after closing and reopening the laptop lid)See ./pkg/limayaml/default.TEMPLATE.yaml.
The current default spec:
~ (read-only), /tmp/lima (writable)ssh -L, automated by watching /proc/net/tcp in the guestPlease certify your Developer Certificate of Origin (DCO),
by signing off your commit with git commit -s and with your real name.
Please squash commits.
Password is disabled and locked by default.
You have to use limactl shell bash (or lima bash) to open a shell.
Alternatively, you may also directly ssh into the guest: ssh -p 60022 -o NoHostAuthenticationForLocalhost=yes 127.0.0.1.
Yes, it should work, but not tested on ARM.
Fedora is also known to work, see ./examples/fedora.yaml.
This file can be loaded with limactl start ./examples/fedora.yaml.
An image has to satisfy the following requirements:
curlsudosshfsnewuidmap and newgidmapapt-get or dnf (if you want to contribute support for another package manager, run git grep apt-get to find out where to modify)Yes, if you install it.
containerd can be stopped with systemctl --user disable --now containerd.
Lima itself does not support connecting to a remote Linux machine, but sshocker, the predecessor or Lima, provides similar features for remote Linux machines.
e.g., run sshocker -v /Users/foo:/home/foo/mnt -p 8080:80 <USER>@<HOST> to expose /Users/foo to the remote machine as /home/foo/mnt,
and forward localhost:8080 to the port 80 of the remote machine.
HV_ERROR"You have to add com.apple.security.hypervisor entitlement to qemu-system-x86_64 binary.
See Getting started.
com.apple.security.hypervisor entitlement. See Getting started.Privileged ports (0-1023) cannot be forwarded. e.g., you have to use 8080, not 80.
Make sure you have a ssh keypair in ~/.ssh. To create:
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<n 2>&1 >/dev/null
Make sure you have a ssh known_hosts file:
touch ~/.ssh/known_hosts
If you have a ~/.ssh/config with a username overwrite for all hosts, exclude 127.0.0.1 from it. Example:
Host * !127.0.0.1
User root
limactl --debug start/var/log/cloud-init-output.log (inside the guest)/var/log/cloud-init.log (inside the guest)~/.ssh, you will need to have ssh-agent running.