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:alpine
http://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_64
realpath
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:
curl
sudo
sshfs
newuidmap
and newgidmap
apt-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.