Incus

提供: ArchWiki
2024年5月11日 (土) 15:25時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (→‎Troubleshooting: 飜訳)
ナビゲーションに移動 検索に移動

関連記事

Incus はコンテナ ( LXC 経由) と仮想マシン ( QEMU 経由) の管理/ハイパーバイザーです。

これは元の保守者による LXD のフォークです。LXD Wiki ページのドキュメントはまだ大部分が関連しており、読むことを推奨します。

インストール

incus パッケージをインストールし、incus.socket有効化します。

また、例えばインスタンスを自動起動させたい場合は、incus.service を直接、有効化/起動することもできます。

コンテナ作成をユーザーに委任するには、incus-user.socket ユニットを有効化/起動します。グループ委任については #Accessing Incus as an unprivileged user を参照してください。

LXD からの移行

既存の LXD インストールから移行する場合は、この時点で行う必要があります。移行ツールは空のターゲット Incus サーバーに対してのみ実行されるためです。

lxc infoincus info コマンドが正しく動作していることを確認した後、上流の documentation を読み、その後で移行ツールを実行してください:

# lxd-to-incus

設定

非特権コンテナ

非特権コンテナの使用を推奨します (違いの説明については Linux コンテナ#特権コンテナと非特権コンテナ を参照)。

これを行うには、コンテナ化された uid/gid ペアに対するマッピングを含むように /etc/subuid/etc/subgid (これらのファイルが存在しない場合は作成する) を変更します。以下の例は単に root ユーザー (および systemd システムユニット) 用です:

以下のように usermod を使用することもできます:

usermod -v 1000000-1000999999 -w 1000000-1000999999 root

または、上記のファイルを直接以下のように変更します:

/etc/subuid
root:1000000:1000000000
/etc/subgid
root:1000000:1000000000

これで、すべてのコンテナはデフォルトで非特権で起動されます。

代替案については LXD#特権コンテナ を参照してください。

Incus の設定

最初の起動時に、Incus を設定する必要があります。

root として実行:

# incus admin init

これにより、ストレージ、ネットワークなどの異なるトピックをカバーする対話式の設定ガイドがターミナルで開始されます。

公式の Getting Started Guide で概要を確認できます。

非特権ユーザーとして Incus にアクセスする

Incus は2つのユーザーグループを定義しています:

  • incus "基本的なユーザーアクセスを許可し、設定なしで全てのアクションはユーザープロジェクトごとに制限されます。"
  • incus-admin "Incus の完全な制御を許可します。"

すべてのコマンドを root として実行する必要なく Incus を制御するためには、あなたのユーザーをこれらのグループに追加します。

警告: incus-admin グループに追加された人は root と同等です。詳細は [1][2] を参照してください。

使用方法

コマンドの概要

使用可能なすべてのコマンドの概要を表示するには、以下を入力します:

$ incus

コンテナの作成

incus launch を使用してコンテナを作成できます。例えば:

$ incus launch ubuntu:20.04

コンテナはイメージサーバーまたはリモート LXD サーバーからダウンロードされたイメージに基づいています。

既に追加されたサーバーのリストを表示するには:

$ incus remote list

サーバー上のすべてのイメージをリストするには incus image list を使用します。例えば:

$ incus image list images:

これにより、デフォルトサーバーの一つである images.linuxcontainers.org のすべてのイメージが表示されます。

ディストリビューション名などの用語を追加してイメージを検索することもできます:

$ incus image list images:debian

特定のサーバーからのイメージでコンテナを起動するには:

$ incus launch servername:imagename

例えば:

$ incus launch images:centos/8/amd64 centos

amd64 Arch コンテナを作成するには:

$ incus launch images:archlinux/current/amd64 arch

Tips and tricks

Access the containers by name on the host

This assumes that you are using the default bridge that it is named incusbr0 and that you are using systemd-resolved.

# systemd-resolve --interface incusbr0 --set-domain '~incus' --set-dns $(incus network get incusbr0 ipv4.address | cut -d / -f 1)

You can now access the containers by name:

$ ping containername.incus

トラブルシューティング

仮想マシンの起動に失敗する

以下のエラーが表示された場合:

Error: Couldn't find one of the required UEFI firmware files: [{code:OVMF_CODE.4MB.fd vars:OVMF_VARS.4MB.ms.fd} {code:OVMF_CODE.2MB.fd vars:OVMF_VARS.2MB.ms.fd} {code:OVMF_CODE.fd vars:OVMF_VARS.ms.fd} {code:OVMF_CODE.fd vars:qemu.nvram}]

これは、Arch Linux がセキュアブート署名された ovmf ファームウェアを配布していないためです。仮想マシンを起動するためには、現時点ではセキュアブートを無効にする必要があります:

$ incus launch ubuntu:18.04 test-vm --vm -c security.secureboot=false

これをデフォルトプロファイルに追加する方法は以下の通りです:

$ incus profile set default security.secureboot=false

Incus が Shell の環境プロキシ変数を尊重しない

例えば incus launchincus image コマンドがイメージをダウンロードする際に *_proxy/*_PROXY variables の値を使用していません。

Incus はサーバークライアントパラダイムを採用しています。これは、操作が Incus server として機能する incusd によって行われ、対話型シェルから呼び出されない限り通常はバックグラウンドで実行されることを意味します。そして、incus コマンドラインインターフェイスは Incus client として Incus サーバーと通信するために使用されます。

これにより、通常サービスとして開始される incusd は、クライアントのシェルの環境変数を継承せず、代わりに呼び出された環境の変数を尊重します。[3] Arch Linux では、Incus サーバーは systemd によって開始されます。

この問題には多くの回避策があります。いくつかの例を以下に示します。詳細は Incus の issue#574 を参照してください。

一時的

Shell 変数を systemd の環境にインポートする

まず、*_PROXY 変数をエクスポートします:

$ export ALL_PROXY="socks://proxy_server_address:port/"

これらを systemd の環境にインポートします:

# systemctl import-environment ALL_PROXY

incus.service ユニットを再/起動します。

ヒント: 変数を解除するには systemctl unset-environment コマンドを使用し、サービスを再起動してください。

恒久的

incus サービスユニットを編集する

Incus デーモンが一部の静的環境変数、例えば *_proxy で常に起動するようにしたい場合、systemdEnvironment ディレクティブを使用できます。systemctl set-property コマンドでは Environment ディレクティブを操作することはできません。incus.service編集 し、適切な variableテンプレート:=value ペアを含む Environment キーを追加します。例えば:

# systemctl edit incus.service
...

[Service]
Environmentテンプレート:=ALL_PROXYテンプレート:="socks://proxy_server_address:port/"

...
Incus core.proxy オプションを使用する

Incus サーバーが望むプロキシを使用するようにするには、Incus サーバーを設定する際に core.proxy オプションを使用します。例えば:

# incus config set core.proxy_http "proxy_address:proxy_port"
ノート: core.proxy オプションはグローバルスコープを持ちます。つまり、クラスタメンバーに即座に適用されます。

Uninstall

Stop and disable the services. Then uninstall the incus package.

If you want to remove all data:

# rm -r /var/lib/incus

If you used any of the example networking configuration, you should remove those as well.

See also