Incusをデバッグするには

インスタンスの問題をデバッグする際の情報については、インスタンスの起動に失敗する問題のトラブルシューティング方法を参照してください。

incusincusd のデバッグ

incusincusd のコードをトラブルシューティングするのに役立ついくつかの異なる方法を説明します。

incus --debug

クライアントのどのコマンドにも --debug フラグを追加することで内部についての追加情報を出力することができます。 もし有用な情報がない場合はログ出力の呼び出しで追加することができます:

logger.Debugf("Hello: %s", "Debug")

incus monitor

このコマンドはメッセージがリモートのサーバーに現れるのをモニターします。

ローカルソケット経由でのREST API

サーバーサイドで Incus とやりとりするのに最も簡単な方法はローカルソケットを経由することです。 以下のコマンドはGET /1.0にアクセスし、jqユーティリティを使って JSON を人間が読みやすいように整形します:

curl --unix-socket /var/lib/incus/unix.socket incus/1.0 | jq .

利用可能な API についてはRESTful APIをご参照ください。

HTTPS経由でのREST API

Incus への HTTPS 接続には、有効なクライアント証明書が必要で、最初の incus remote add で生成されます。 この証明書は、認証と暗号化のための接続ツールに渡す必要があります。

必要に応じて、opensslを使って証明書(~/.config/incus/client.crt)を調べることができます:

openssl x509 -text -noout -in client.crt

表示される行の中に以下のようなものがあるはずです:

Certificate purposes:
SSL client : Yes

コマンドラインツールを使う

wget --no-check-certificate --certificate=$HOME/.config/incus/client.crt --private-key=$HOME/.config/incus/client.key -qO - https://127.0.0.1:8443/1.0

ブラウザを使う

いくつかのブラウザ拡張はウェブのリクエストを作成、修正、リプレイするための便利なインターフェースを提供しています。 Incus サーバーに対して認証するにはincusのクライアント証明書をインポート可能な形式に変換しブラウザにインポートしてください。

たとえば Windows で利用可能な形式のclient.pfxを生成するには以下のようにします:

openssl pkcs12 -clcerts -inkey client.key -in client.crt -export -out client.pfx

上記のコマンドを実行し、(訳注:変換後の証明書をインポートしてから)ブラウザでhttps://127.0.0.1:8443/1.0を開けば期待通り動くはずです。

Incusデータベースをデバッグ

グローバルデータベースのファイルは Incus のデータディレクトリー(/var/lib/incus/database/global)の./database/globalサブディレクトリーの下に格納されます。

クラスタの各メンバーもそのメンバー固有の何らかのデータを保持する必要があるため、Incus は通常の SQLite のデータベース(「ローカル」データベース)も使用します。 これは./database/local.dbに置かれます。

アップグレードの前にはグローバルデータベースのディレクトリーとローカルデータベースのファイルのバックアップが作成され、 .bak のサフィックス付きでタグ付けされます。 アップグレード前の状態に戻す必要がある場合は、このバックアップを使うことができます。

データベースのデータとスキーマをダンプする

データベースのデータまたはスキーマの SQL テキスト形式でのダンプを取得したい場合は、incus admin sql <local|global> [.dump|.schema] コマンドを使ってください。 これによりsqlite3コマンドラインツールの.dumpまたは.schemaディレクティブと同じ出力を生成できます。

コンソールからカスタムクエリを実行する

ローカルまたはグローバルデータベースに SQL クエリ(例 SELECT, INSERT, UPDATE)を実行する必要がある場合、incus admin sqlコマンドを使うことができます(詳細はincus admin sql --helpを実行してください)。

ただ、これが必要になるのは壊れたアップデートかバグからリカバーするときだけでしょう。 その場合、まず Incus チームに相談してみてください(GitHubのイシューを作成するかフォーラムに投稿)。

Incusデーモン起動時にカスタムクエリを実行する

SQL のデータマイグレーションのバグあるいは関連する問題のためにアップグレード後に Incus デーモンが起動に失敗する場合、壊れたアップデートを修復するクエリを含んだ.sqlファイルを作成することで、その状況からリカバーできる可能性があります。

ローカルデータベースに対して修復を実行するには、修復に必要なクエリを含む./database/patch.local.sqlというファイルを作成してください。 同様にグローバルデータベースの修復には./database/patch.global.sqlというファイルを作成してください。

これらのファイルはデーモンの起動シーケンスの非常に早い段階で読み込まれ、クエリが成功したときは削除されます(クエリは SQL トランザクション内で実行されるので、クエリが失敗したときにデータベースの状態が変更されることはありません)。

上記のとおり、まず Incus チームに相談してみてください。

クラスタデータベースをディスクに同期

クラスタデータベースの内容をディスクにフラッシュしたいなら、incus admin sql global .syncコマンドを使ってください。これは通常の SQLite 形式のデータベースのファイルを./database/global/db.binに書き込みます。 その後sqlite3コマンドラインツールを使って中身を見ることができます。