This is an informal translation of README.md
(revision c1368f45, 2022-Dec-12) in Japanese.
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仮想マシンとcontainerd を起動します(WSL2と同様)。
Limaはある種の非公式な「containerd for 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 GPUのためのドライバ)とは無関係です。
Limaに関する講演のスライド及びビデオへのリンクがtalksのページにあります。
Limaの目的は、Macユーザにnerdctl (contaiNERDctl)を含めcontainerdを広めることです。が、Limaではコンテナでないアプリケーションも使用できます。
コンテナ環境:
- Rancher Desktop: デスクトップで管理できるKubernetesとコンテナ
- Colima: macOSで小さく始めるDocker(とKubernetes)
- Finch: Finchはローカルでのコンテナ開発用のコマンドラインクライアント
GUI:
- Lima xbar plugin: xbar メニューバーから仮想マシンを開始・終了でき、稼働状態を確認できるプラグイン
- lima-gui: LimaのQt GUI
- GitHub Discussions
- CNCF Slackの
#lima
チャンネル- 新規アカウント: https://slack.cncf.io/
- ログイン: https://cloud-native.slack.com/
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
Intelマシン上でのARM仮想マシン、ARMマシン上でのIntel仮想マシンについては、./docs/multi-arch.mdを参照してください。
$ echo "macOSの/Users以下にあるファイルはLinuxから読めます。" > some-file
$ lima cat some-file
macOSの/Users以下にあるファイルはLinuxから読めます。
$ lima sh -c 'echo "/tmp/limaはmacOSとLinuxの両方から書き込めます。" > /tmp/lima/another-file'
$ cat /tmp/lima/another-file
/tmp/limaはmacOSとLinuxの両方から書き込めます。
$ lima nerdctl run -d --name nginx -p 127.0.0.1:8080:80 nginx:alpine
"lima nerdctl"を毎回実行する必要はありません。代わりに"nerdctl.lima"という名前の特別なショートカットを使って同じことを実行できます。 デフォルトでは、limaと同時にショートカットがインストールされるので、特に何かをする必要はありません。 nerdctl.limaを指すnerdctlというシンボリックリンクがあるでしょう。このリンクはディレクトリにnerdctlエントリがない場合に限ってのみ作成されますけれども。 make installをしてインストールしたときにのみこれは作成されることに言及しておいたほうがよいでしょう。Homebrew/MacPorts/nixパッケージには含まれていません。
http://127.0.0.1:8080 はmacOSとLinuxの両方からアクセス可能です。
containerd とnerdctl (contaiNERD ctl)の使い方については、 https://github.com/containerd/containerd と https://github.com/containerd/nerdctl を参照してください。
Homebrewパッケージがあります。
brew install lima
手動でのインストール方法
QEMU 7.0 以降をインストールしてください。
- https://github.com/lima-vm/lima/releases からLimaのバイナリアーカイブをダウンロードしてください。そして、アーカイブを
/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
- 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 [--name=NAME] [--tty=false] <template://TEMPLATE>
: start the Linux instance
$ 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
フラグで対話的ユーザインターフェースを無効化できます。
インスタンス "default" を テンプレート "docker" から作成するには:
$ 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
インスタンス "default" を リモートのURLから作成するには (信頼できるソースで慎重に使ってください):
$ limactl start --name=default https://raw.githubusercontent.com/lima-vm/lima/master/examples/alpine.yaml
limactl shell <INSTANCE> <COMMAND>
: <COMMAND>
を Linux で実行します。
"default" インスタンスについては, このコマンドは lima <COMMAND>
に短縮できます。.
lima
コマンドは、インスタンス名を環境変数 $LIMA_INSTANCE
としても受け付けます。
limactl copy <SOURCE> ... <TARGET>
: ファイルをインスタンス間、もしくはインスタンスとホストとの間でコピーします。
インスタンス内のコピー元もしくはコピー先を指定するには、<INSTANCE>:<FILENAME>
を使ってください。
limactl list [--json]
: インスタンス一覧を表示します
limactl stop [--force] <INSTANCE>
: インスタンスを停止します
limactl delete [--force] <INSTANCE>
: インスタンスを削除します
limactl factory-reset <INSTANCE>
: インスタンスを初期化します
limactl edit <INSTANCE>
: インスタンスを編集します
limactl disk create <DISK> --size <SIZE>
: 新しい外部ディスクを作成しインスタンスに取り付けます
limactl disk delete <DISK>
: 既存のディスクを削除します
limactl disk list
: 既存のディスクの一覧を表示します
-
bash補完を有効にするには、
~/.bash_profile
へsource <(limactl completion bash)
を追加します。 -
zsh補完を有効にするには、
limactl completion zsh --help
を参照してください。
Limaにはデータの喪失を引き起こすバグが含まれているかもしれません。
Limaを動かす前にデータを確実にバックアップしてください。
特に、次のようなデータは簡単に失われます:
- 共有の書き込み可能なディレクトリ内のデータ(デフォルトでは
/tmp/lima
)。おそらくはホストマシンのハイバネーション (例: ノートPCの画面を閉じて再度開けた後) のあと - 仮想マシンのイメージ内のデータ、特にlimaのバージョンをアップグレードしたとき
./examples/default.yaml
を見てください。
現在のデフォルト構成:
- OS: Ubuntu 22.10 (Kinetic Kudu)
- CPU: 4 コア
- メモリ: 4 GiB
- ストレージ: 100 GiB
- マウント:
~
(読み取りのみ),/tmp/lima
(書き込み可能) - SSH: 127.0.0.1:60022
- ハイパーバイザ: QEMU + HVFアクセラレータ(デフォルト)、もしくはVirtualization.framework
- ファイルシステム共有: リバースsshfs (デフォルト)、もしくは virtio-9p-pci またの名を virtfs、もしくはvirtiofs
- ポートフォワーディング: ゲストの
/proc/net/tcp
とiptables
を自動的に見つつssh -L
git commit -s
とあなたの実名でサインをすることによってあなたの Developer Certificate of Origin (DCO)を証明してください。- コミットをsquashしてください。
🙏
- ドキュメント
- CLIのユーザエクスペリエンス
- パフォーマンス最適化
- Windows ホスト
- SSHを置き換えるvsock(QEMU側リポジトリで作業をする必要があります)
デフォルトではパスワードは無効化されロックされています。シェルを開くためにはlimactl shell bash
(またはlima bash
)を使う必要があります。
代わりに、ゲストに直接SSHすることもできます: ssh -p 60022 -i ~/.lima/_config/user -o NoHostAuthenticationForLocalhost=yes 127.0.0.1
。
はい。動くでしょう。ただ、ARM Macでの定期的なテストはなされていません(CIがないため)。
AlmaLinux, Alpine, Arch Linux, Debian, Fedora, openSUSE, Oracle Linux, Rocky が動くことが知られています。./examples/
を見てください。
イメージは次の要件を満たす必要があります。
- systemdまたはOpenRC
- cloud-init
- 次ののバイナリがプリインストールされていること
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も含んでいます。LXDを設定するにはlima sudo lxc init
を実行します。
Limaをもとにしたサードパーティのcontainerdプロジェクトも確認してください。
- Rancher Desktop: デスクトップで管理できるKubernetesとコンテナ
- Colima: 小さく始めるDocker(とKubernetes)
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ライセンス 2.0)ですが、Docker for Macはそうではありません。彼らのEULAはベンチマークの結果を公開することすら禁じています。
一方で、 Moby、またの名をDocker for Linux、は自由ソフトウェア(フリーソフトウェア)ですが、Moby/Dockerにはcontainerdのいくつかの新機能が欠けています。例えば:
macOS 11の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バージョンのみ、追加でこのentitlementを追加する必要があるかもしれません。
<key>com.apple.vm.hypervisor</key>
<true/>
com.apple.security.hypervisor
entitlementでHVFバイナリが有効になっていることを確認してください。"HV_ERROR
でQEMUがクラッシュします"を参照してください。- ネイティブでないマシン(Intelマシン上でARM仮想マシン、ARMマシン上でIntel仮想マシン)のエミュレーションは設計からして遅いです。ワークアラウンドについては
docs/multi-arch.md
を参照してください。
- QEMUバイナリが署名されていることを確認してください。 "
HV_ERROR
でQEMUがクラッシュします"を参照してください。 - macOS 10.15.7または11.0またはそれ以降のmacOSを使用している場合、
com.apple.vm.hypervisor
entitlementが追加されていないことを確認してください。このentitlementは古いmacOSのバージョンでのみ動作します。codesign --remove-signature /usr/local/bin/qemu-system-x86_64
で署名をクリアできます。そして、最初からやり直してください
このエラーはRocky Linux 8.x などのようなRHEL8互換ディストリビューションのイメージをIntel Macで動かしたときに発生することが知られています。ワークアラウンドは、$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
をご覧ください。
ホームディレクトリはデフォルトでは読み込み専用でマウントされます。
書き込みを有効化するには、YAMLに writable: true
を指定してください:
mounts:
- location: "~"
writable: true
既存のインスタンスのYAMLを編集するには limactl edit <インスタンス>
を実行してください。
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
シェルを開くには、次のコマンドを実行します:
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内にタブとスペースを混在させていないことを確認してください。
私たちは Cloud Native Computing Foundation sandbox project です。
The Linux Foundation® (TLF) has registered trademarks and uses trademarks. For a list of TLF trademarks, see Trademark Usage.