Incus
関連記事
Incus はコンテナ ( LXC 経由) と仮想マシン ( QEMU 経由) の管理/ハイパーバイザーです。
これは元の保守者による LXD のフォークです。LXD Wiki ページのドキュメントはまだ大部分が関連しており、読むことを推奨します。
インストール
incus パッケージをインストールし、incus.socket
を有効化します。
また、例えばインスタンスを自動起動させたい場合は、incus.service
を直接、有効化/起動することもできます。
コンテナ作成をユーザーに委任するには、incus-user.socket
ユニットを有効化/起動します。グループ委任については #非特権ユーザーとして Incus にアクセスするを参照してください。
LXD からの移行
既存の LXD インストールから移行する場合は、この時点で行う必要があります。移行ツールは空のターゲット Incus サーバーに対してのみ実行されるためです。
lxc info
と incus info
コマンドが正しく動作していることを確認した後、上流のドキュメントを読み、その後で移行ツールを実行してください:
# 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
コンテナの作成
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
ヒントとコツ
ホスト上で名前でコンテナにアクセスする
これは、デフォルトのブリッジが incusbr0
という名前であり、systemd-resolved を使用していると仮定しています。
# systemd-resolve --interface incusbr0 --set-domain '~incus' --set-dns $(incus network get incusbr0 ipv4.address | cut -d / -f 1)
これで、名前でコンテナにアクセスできるようになります:
$ 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 launch
や incus image
コマンドがイメージをダウンロードする際に *_proxy
/*_PROXY
変数の値を使用していません。
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
ユニットを再/起動します。
恒久的
incus サービスユニットを編集する
Incus デーモンが一部の静的環境変数、例えば *_proxy
で常に起動するようにしたい場合、systemd の Environment
ディレクティブを使用できます。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"
アンインストール
サービスを停止して無効にし、その後 incus パッケージをアンインストールします。
すべてのデータを削除したい場合:
# rm -r /var/lib/incus
例示したネットワーク設定を使用していた場合は、それも削除する必要があります。