Lima - подсистема macOS для Linux
Lima запускает виртуальные машины Linux на macOS с автоматическим общим доступом, переадресацией портов и средой выполнения контейнеров containerd.
Lima можно рассматривать как своего родна неофициальную подсистему macOS для Linux или containerd для Mac.
Ожидается, что Lima будет использоваться на хостах macOS, но может использоваться и на хостах Linux.
✅Автоматический обмен файлами
✅Автоматическая переадресация портов
✅Встроенная поддержка containerd ( можно использовать и другие контейнерные движки )
✅Intel на Intel
✅ARM на ARM
✅Разные дистрибутивы Linux: AlmaLinux , Alpine , Arch Linux , Debian , Fedora , openSUSE , Oracle Linux , Rocky , Ubuntu ...
Связанный проект: sshocker (ssh с общим доступом к файлам и переадресацией портов)
Этот проект не имеет отношения к проекту драйвера Lima (драйвер для графических процессоров ARM Mali) .
Страница докладов содержит ссылки на слайды и видео из презентаций конференции о Лимa.
Примеры
Консольная UNIX-утилита 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
Совместное использование файлов в 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
http://127.0.0.1:8080 доступен как из macOS, так и из Linux.
Примечание: привилегированные порты (0-1023) не могут быть перенаправлены. Используйте containerd и nerdctl (containerd ctl).
Установка
Пакет Homebrew доступен.
brew install lima
Применение
[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
и подождите, пока сообщение «ГОТОВО» не будет напечатано на хост-терминале. Для автоматизации --tty=false
можно использовать флаг для отключения интерактивного пользовательского интерфейса.
Расширенное использование
Чтобы создать экземпляр «по умолчанию» из шаблона «докер»:
$ limactl start --name=default template://docker
ПРИМЕЧАНИЕ:
limactl start template://TEMPLATE
требуется Lima версии 0.9.0 или выше.limactl start /usr/local/share/doc/lima/examples/TEMPLATE.yaml
Вместо этого требуются более старые выпуски .
Чтобы просмотреть список шаблонов:
$ limactl start --list-templates
Чтобы создать экземпляр «по умолчанию» из локального файла:
$ limactl start --name=default /usr/local/share/lima/examples/fedora.yaml
Чтобы создать экземпляр «по умолчанию» из удаленного URL-адреса (используйте осторожно, с надежным источником):
$ limactl start --name=default https://raw.githubusercontent.com/lima-vm/lima/master/examples/alpine.yaml
limactl shell
limactl shell <INSTANCE> <COMMAND>
: запуск <COMMAND>
в Linux.
Для экземпляра «по умолчанию» эту команду можно сократить до 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 могут быть ошибки, приводящие к потере данных.
Обязательно сделайте резервную копию своих данных перед запуском Lima.
В частности, следующие данные могут быть легко потеряны:
- Данные в общих доступных для записи каталогах (
/tmp/lima
по умолчанию), возможно, после перехода хост-компьютера в спящий режим (например, после закрытия и повторного открытия крышки ноутбука). - Данные в образе ВМ, в основном при обновлении версии lima
Конфигурация
См ./examples/default.yaml
. .
Текущая спецификация по умолчанию:
- OS: Ubuntu 22.10 (Кинетик Куду)
- CPU: 4 ядра
- RAM: 4 ГиБ
- HDD: 100 ГиБ
- Mounts:
~
(только чтение),/tmp/lima
(доступно для записи) - SSH: 127.0.0.1:60022
Как это работает
- Гипервизор: QEMU с ускорителем HVF (по умолчанию) или Virtualization.framework
- Общий доступ к файловой системе: обратная SSHFS (по умолчанию) или virtio-9p-pci, также известная как virtfs, или virtiofs
- Перенаправление портов:
ssh -L
автоматизировано путем просмотра/proc/net/tcp
иiptables
событий в гостевой
FAQ
"Какой у меня пароль для входа?"
Пароль отключен и заблокирован по умолчанию. Вы должны использовать limactl shell bash
(или lima bash
), чтобы открыть оболочку.
Кроме того, вы также можете напрямую подключиться к гостевой системе по ssh: ssh -p 60022 -i ~/.lima/_config/user -o NoHostAuthenticationForLocalhost=yes 127.0.0.1
.
«Работает ли Лима на ARM Mac?»
Да, должно работать, но регулярно не тестировалось на ARM (из-за отсутствия CI).
«Могу ли я запускать другие OS, отличных от Ubuntu?»
Также известно, что AlmaLinux, Alpine, Arch Linux, Debian, Fedora, openSUSE, Oracle Linux и Rocky работают. См ./examples/
. .
Образ должен удовлетворять следующим требованиям:
- systemd или OpenRC
- облачная инициализация
- Следующие бинарники должны быть предустановлены:
sudo
- Следующие двоичные файлы должны быть предварительно установлены или установлены через менеджер пакетов:
sshfs
newuidmap
иnewgidmap
apt-get
,dnf
,apk
,pacman
илиzypper
(если вы хотите внести свой вклад в поддержку другого менеджера пакетов, запустите,git grep apt-get
чтобы узнать, где изменить)
«Могу ли я запускать другие контейнерные движки, такие как Docker и Podman? Или Kubernetes?»
Да, любой контейнерный движок должен работать с Lima.
Примеры среды выполнения контейнера:
./examples/docker.yaml
: Docker./examples/podman.yaml
: Podman./examples/apptainer.yaml
: Apptainer
Примеры конструктора образов контейнеров:
./examples/buildkit.yaml
: Комплект для сборки
Примеры оркестратора контейнеров:
./examples/k3s.yaml
: Kubernetes (k3s)./examples/k8s.yaml
: Kubernetes (kubeadm)./examples/nomad.yaml
: Nomad
Образ Ubuntu по умолчанию также содержит LXD. Запустите lima sudo lxc init
для настройки LXD.
См. также сторонние проекты containerd на основе Lima:
- Rancher Desktop : Kubernetes и управление контейнерами на рабочем столе
- Colima : Docker (и Kubernetes) на macOS с минимальной настройкой
«Могу ли я запустить Lima на удаленной машине с Linux?»
Сама Lima не поддерживает подключение к удаленному Linux-компьютеру, но sshocker , предшественник Lima, предоставляет аналогичные функции для удаленных Linux-машин.
например, запустите sshocker -v /Users/foo:/home/foo/mnt -p 8080:80 <USER>@<HOST>
для доступа /Users/foo
к удаленной машине как /home/foo/mnt
и перенаправьте localhost:8080
на порт 80 удаленной машины.
«Преимущества по сравнению с Docker для Mac?»
Lima — это бесплатное программное обеспечение (лицензия Apache 2.0), а Docker для Mac — нет. Их EULA даже запрещает раскрытие результатов бенчмаркинга.
С другой стороны, Moby , также известный как Docker для Linux, является бесплатным программным обеспечением, но в Moby/Docker отсутствуют некоторые новые функции containerd.
Сеть
«Не удается получить доступ к гостевому 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!)
Дополнительные сведения см. в разделе Документация/Сеть .
Общий доступ к файловой системе
"Файловая система работает медленно"
Попробуйте виртуозы. Видетьdocs/mount.md
"Файловая система недоступна для записи"
По умолчанию домашний каталог монтируется как доступный только для чтения. Чтобы включить запись, укажите writable: true
в YAML:
mounts:
- location: "~"
writable: true
Запустите limactl edit <INSTANCE>
, чтобы открыть редактор YAML для существующего экземпляра.
Внешние проекты
«Я использую Rancher Desktop. Как быть с лежащим в основе Lima?»
На хостах macOS Rancher Desktop (начиная с версии 1.0) запускает Lima со следующей конфигурацией:
$LIMA_HOME
каталог:$HOME/Library/Application Support/rancher-desktop/lima
limactl
бинарный:/Applications/Rancher Desktop.app/Contents/Resources/resources/darwin/lima/bin/limactl
- Имя экземпляра Лимы:
0
Чтобы открыть оболочку, выполните следующую команду:
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.