如何调试 Incus¶
有关调试实例问题的更多信息,请参阅 如何排查故障实例。
调试 incus
和 incusd
¶
以下是一些有助于排查 incus
和 incusd
代码的方法。
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
使用浏览器¶
一些浏览器插件提供了方便的界面来创建、修改和重放 Web 请求。要对 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 守护进程启动时运行自定义查询¶
如果 Incus 守护进程在升级后由于 SQL 数据迁移错误或类似问题而无法启动,可以通过创建包含修复损坏更新的查询的.sql
文件来恢复这种情况。
要对本地数据库执行修复,请编写一个包含相关查询的./database/patch.local.sql
文件,类似地,对于全局数据库修复,请编写一个./database/patch.global.sql
文件。
这些文件将在守护进程启动序列的早期加载,如果查询成功,则将其删除(如果失败,则不会更改任何状态,因为它们是在 SQL 事务中运行的)。
如上所述,请先咨询 Incus 团队。
将集群数据库同步到磁盘¶
如果要将集群数据库的内容刷新到磁盘,请使用incus admin sql global .sync
命令,该命令会将一个纯 SQLite 数据库文件写入./database/global/db.bin
,然后可以使用sqlite3
命令行工具检查该文件。