Skip to content

Latest commit

 

History

History
492 lines (350 loc) · 26.9 KB

README.ja.md

File metadata and controls

492 lines (350 loc) · 26.9 KB

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をご覧ください。


[📖始める] [❓FAQとトラブルシューティング]

Limaロゴ

Lima: Linux virtual machines (多くの場合、macOSで)

Limaは自動的なファイル共有とポートフォワード機能つきでLinux仮想マシンとcontainerd を起動します(WSL2と同様)。

Limaはある種の非公式な「containerd for Mac」とみなすことができます。

LimaはmacOSホストで使用されることを想定していますが、Linuxホストでも使用できます。

✅ 自動的なファイル共有

✅ 自動的なポートフォワーディング

containerdの組み込みサポート(他のコンテナエンジンも使えます)

✅ Intelマシン上でのIntel仮想マシン

Intelマシン上でのARM仮想マシン

✅ ARMマシン上でのARM仮想マシン

ARMマシン上でのIntel仮想マシン

✅ 様々なゲスト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

コミュニケーション方法

行動規範

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

Intelマシン上でのARM仮想マシン、ARMマシン上でのIntel仮想マシンについては、./docs/multi-arch.mdを参照してください。

macOS と Linux の間でファイルを共有する

$ 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の両方から書き込めます。

containerd のコンテナを動かす ( Doker コンテナ互換 )

$ 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/containerdhttps://github.com/containerd/nerdctl を参照してください。

始める

インストール

Homebrewパッケージがあります。

brew install lima
手動でのインストール方法

QEMU をインストールする

QEMU 7.0 以降をインストールしてください。

Lima をインストールする

  • 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

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

limactl shell <INSTANCE> <COMMAND>: <COMMAND> を Linux で実行します。

"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補完を有効にするには、~/.bash_profilesource <(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

動作する仕組み

開発者ガイド

Lima に貢献する

  • git commit -sとあなたの実名でサインをすることによってあなたの Developer Certificate of Origin (DCO)を証明してください。
  • コミットをsquashしてください。

助けを求めています

🙏

  • ドキュメント
  • CLIのユーザエクスペリエンス
  • パフォーマンス最適化
  • Windows ホスト
  • SSHを置き換えるvsock(QEMU側リポジトリで作業をする必要があります)

FAQとトラブルシューティング

Generic

一般

"私のログインパスワードは何ですか?"

デフォルトではパスワードは無効化されロックされています。シェルを開くためにはlimactl shell bash(またはlima bash)を使う必要があります。

代わりに、ゲストに直接SSHすることもできます: ssh -p 60022 -i ~/.lima/_config/user -o NoHostAuthenticationForLocalhost=yes 127.0.0.1

"Lima はARM Macでも動作しますか?"

はい。動くでしょう。ただ、ARM Macでの定期的なテストはなされていません(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も含んでいます。LXDを設定するにはlima sudo lxc initを実行します。

Limaをもとにしたサードパーティのcontainerdプロジェクトも確認してください。

  • Rancher Desktop: デスクトップで管理できるKubernetesとコンテナ
  • Colima: 小さく始めるDocker(とKubernetes)

"LimaをリモートのLinuxマシンで動かせますか?"

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のDocker for Macに対する優位性は?"

Limaは自由ソフトウェア(フリーソフトウェア) (Apacheライセンス 2.0)ですが、Docker for Macはそうではありません。彼らのEULAはベンチマークの結果を公開することすら禁じています。

一方で、 Moby、またの名をDocker for Linux、は自由ソフトウェア(フリーソフトウェア)ですが、Moby/Dockerにはcontainerdのいくつかの新機能が欠けています。例えば:

QEMU

"HV_ERRORでQEMUがクラッシュします"

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/>

"QEMUが遅いです"

  • com.apple.security.hypervisorentitlementでHVFバイナリが有効になっていることを確認してください。"HV_ERRORでQEMUがクラッシュします"を参照してください。
  • ネイティブでないマシン(Intelマシン上でARM仮想マシン、ARMマシン上でIntel仮想マシン)のエミュレーションは設計からして遅いです。ワークアラウンドについては docs/multi-arch.md を参照してください。

"killed -9" エラー

  • QEMUバイナリが署名されていることを確認してください。 "HV_ERRORでQEMUがクラッシュします"を参照してください。
  • macOS 10.15.7または11.0またはそれ以降のmacOSを使用している場合、com.apple.vm.hypervisorentitlementが追加されていないことを確認してください。このentitlementは古いmacOSのバージョンでのみ動作します。codesign --remove-signature /usr/local/bin/qemu-system-x86_64で署名をクリアできます。そして、最初からやり直してください

"vmx_write_mem: mmu_gva_to_gpa XXXXXXXXXXXXXXXX failedでQEMUがクラッシュします"

このエラーは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 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をご覧ください。

"ファイルシステムに書き込めない"

ホームディレクトリはデフォルトでは読み込み専用でマウントされます。 書き込みを有効化するには、YAMLに writable: true を指定してください:

mounts:
- location: "~"
  writable: true

既存のインスタンスのYAMLを編集するには limactl edit <インスタンス> を実行してください。

外部プロジェクト

"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

シェルを開くには、次のコマンドを実行します:

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.