Incus 0.2 已发布¶
2023年10月28日
简介¶
Incus 团队很高兴地宣布 Incus 0.2 发布!
此版本包含了大部分合并到 LXD 5.19 的更改,并引入了一些额外的功能和改进。
您可以在线试用:https://linuxcontainers.cn/incus/try-it/
尽情享受!
新功能和亮点¶
虚拟机中的 NVME 存储支持¶
一个新的 io.bus
配置键已添加到虚拟机的 disk
类型设备中。
默认为 virtio-scsi
,但现在也可以设置为 nvme
,以便磁盘在虚拟机内部显示为 NVME SSD。
来自 LXD 的迁移的集群支持¶
lxd-to-incus
迁移工具现在支持集群环境。
此外,它还更新为支持 LXD 5.19 作为源版本。
这意味着任何使用 LXD 4.0 及更高版本(直至 5.19)的用户现在都可以通过安装 Incus 并运行 lxd-to-incus
轻松迁移到 Incus!
无特权容器的新镜像要求¶
在添加对 NixOS 作为容器镜像的支持时,发现此特定镜像目前无法在特权容器内工作。
与其让它对这些用户静默失败,不如添加一个新的镜像要求。
可以将 requirements.privileged
设置为 false
以阻止使用特权容器使用该镜像。
stgraber@dakara:~$ incus launch images:nixos nixos-priv -c security.privileged=true Creating nixos-priv Starting nixos-priv Error: The image used by this instance is incompatible with privileged containers. Please unset security.privileged on the instance Try `incus info --show-log local:nixos-priv` for more info stgraber@dakara:~$
服务器端自定义卷复制¶
Incus 现在支持服务器端自定义卷的复制。通过消除客户端充当中继的需要,这大大加快了自定义卷的复制速度。
命令行工具会自动检测对该功能的支持,并在可用时使用它。
此功能最初是在 LXD 中引入的。
64 位 Arm 现在提供静态二进制文件¶
作为我们发布和测试的一部分提供的所有静态二进制文件现在都提供了针对 Intel 64 位和 Arm 64 位的支持。
完整变更日志¶
以下是此版本中所有更改的完整列表
完整提交列表
- doc: 将 Incus_DIR 更改为大写 INCUS_DIR
- README: 修复指向入门指南的链接
- doc: 添加 start-after 以包含来自 contributing.md 的 CONTRIBUTING.md
- Makefile: 在生产模式下构建文档
- doc: 修复查找 incus 的逻辑
- lxd-to-incus: 移植到当前 Incus
- gomod: 更新依赖项
- doc: 添加“然后运行以下命令:”
- incus-user: 修复错误路径
- doc: 从 reference/network_external/ 中删除 direct
- doc: 在 howto/network_create 中删除“配置网络部分”
- doc: 对齐 IPAM 表的输出
- doc: 将 Incus_INSECURE_TLS 设为大写
- doc: 删除所有关于信任密码的提及
- doc: 更新 Grafana 屏幕截图
- build(deps): 升级 redhat-plumbers-in-action/differential-shellcheck
- github: 为 x86_64 和 aarch64 构建静态二进制文件
- cmd/incus/admin_cluster: 修复重新执行逻辑
- [lxd-import] client: 从格式字符串 API 路径中删除项目。
- [lxd-import] client: 向操作添加一个标志以跳过事件侦听器设置。
- [lxd-import] client: 将 useEventListener 标志传递到 queryOperation。
- [lxd-import] client/certificates: 更新对 queryOperation 的调用。
- [lxd-import] client/cluster: 更新对 queryOperation 的调用。
- [lxd-import] client/images: 更新对 queryOperation 的调用。
- [lxd-import] client/instances: 更新对 queryOperation 的调用。
- [lxd-import] client/projects: 更新对 queryOperation 的调用。
- [lxd-import] client/storage_volumes: 更新对 queryOperation 的调用。
- cmd/incusd: 正确转发重建请求
- tests: 修复存储卷恢复测试
- tests: 修复 syslog 测试
- doc: 删除 UI 选项卡
- tests: 添加 incus-user 测试
- gomod: 更新依赖项
- github: 防止与镜像服务器交互
- internal/server/seccomp: 修复 clang 构建
- [lxd-import] scripts/bash: 添加缺失的
incus config trust
子命令 - [lxd-import] lxd/storage: 防止重复的 usedBy 配置文件设备条目
- [lxd-import] doc/projects: 修复错字“profiles”改为“projects”
- instance/qemu: 微调 incus-agent 的 systemd/udev 单元
- github: 最多重试 10 分钟的 golang-tip
- [lxd-import] doc/projects: 指出新项目没有配置文件
- [lxd-import] lxd-agent: 添加操作等待端点。
- [lxd-import] lxd: 将证书类型移动到 certificate 包。
- [lxd-import] lxd/certificate: 添加线程安全的证书缓存。
- [lxd-import] lxd: 在守护进程中使用 certificate.Cache。
- [lxd-import] lxd/resources: 如果
SCSI_IDENT_SERIAL
可用,则在ID_SERIAL_SHORT
之前将其用作序列号 - [lxd-import] doc/doc-lint: 为新版本的 mdl 修复 lint 脚本
- internal/server/storage: 删除剩余的 LXD 引用
- internal/server/config: 删除剩余的 LXD 引用
- doc: 删除对容器/虚拟机 API 的提及
- doc: 删除对 LXD 版本的提及
- lxd-to-incus: 报告源名称
- lxd-to-incus: 添加手动源
- shared/osarch: 添加 loongarch64
- [lxd-import] tests: 修复存储卷恢复测试
- [lxd-import] github: 提高 ceph 测试可靠性
- [lxd-import] github: 重新排序 microceph 设置步骤以删除 sleep
- [lxd-import] github: 为速度调整 ext4 并回收一些空间
- [lxd-import] shared/version: 添加 API 扩展。
- [lxd-import] client: 检查操作等待扩展并有条件地恢复到事件 API。
- [lxd-import] lxd/locking/lock: 如果上下文被取消则返回错误
- [lxd-import] lxd/api: 处理来自锁的错误
- [lxd-import] lxd/daemon: 处理来自锁的错误
- [lxd-import] lxd/images: 处理来自锁的错误
- [lxd-import] lxd/instance: 处理来自锁的错误
- [lxd-import] lxd/instance/drivers: 处理来自锁的错误
- [lxd-import] lxd/storage/drivers: 处理来自锁的错误
- [lxd-import] lxd/network/driver/ovn: 处理来自锁的错误
- [lxd-import] lxd/storage/backend: 处理来自锁的错误
- [lxd-import] lxd/storage/s3/miniod: 处理来自锁的错误
- [lxd-import] shared/ws/mirror: 在 MirrorRead 中 io.Copy 完成后立即记录
- [lxd-import] shared/ws/mirror: 从 Mirror*() 中删除未使用的上下文参数
- [lxd-import] client: ws.Mirror*() 用法
- [lxd-import] lxc-to-lxd: ws.Mirror*() 用法
- [lxd-import] lxd-agent: ws.Mirror*() 用法
- [lxd-import] lxd-migrate: ws.Mirror*() 用法
- [lxd-import] lxd: ws.Mirror*() 用法
- [lxd-import] shared/util/linux: 部分恢复 54e3da881103c42d6b4813e8930bde1b10edb236 并重新引入 GetPollRevents
- [lxd-import] shared/util/linux: 添加 execWrapper 用于 ws.MirrorRead() 和 ws.Mirror()
- [lxd-import] lxd/instance/exec: 使用 context.WithCancel 而不是 cancel
- [lxd-import] lxd/instance/exec: 使用 shared.NewExecWrapper
- [lxd-import] lxd-agent/exec: 使用 shared.NewExecWrapper 并与容器执行保持一致
- [lxd-import] patches: 修复关于取消设置 zfs 块设置的补丁
- gomod: 更新依赖项
- cmd/lxd-to-incus: 处理备份/镜像卷
- Makefile: 为 lxd-to-incus 生成供应商树
- Makefile: 使用 tar.xz 创建更小的 tarball
- gitignore: 更新为 .tar.xz
- doc: 添加打包说明
- [lxd-import] lxd/storage/backend: 允许在没有卷快照的情况下生成备份配置
- [lxd-import] lxd/instance/drivers: 更新函数调用
- [lxd-import] client: 等待操作时取消设置响应标头超时。
- [lxd-import] test/suites/backup: 使用 instance-only 标志测试实例导出
- [lxd-import] test/main: 添加实例导出测试的调用
- [lxd-import] github: 使用 ppa:ubuntu-lxc/daily 而不是 ppa:ubuntu-lxc/lxc-git-master
- [lxd-import] lxd-agent: 修复由于 vsock 模块未完全初始化导致引导时 vsock 侦听器重新启动的问题
- [lxd-import] lxd/vsock/vsock: 删除未使用的 ContextID 函数
- [lxd-import] lxd-agent: 修复引导后立即重新启动 vsock 侦听器时间歇性执行 EOF 关闭的问题
- [lxd-import] shared/api/url: 修复双路径编码问题
- [lxd-import] lxc: 当要删除多个临时实例时避免过早返回
- [lxd-import] test: 测试多个临时删除
- [lxd-import] lxc/storage/volume: 如果设置了目标集群成员名称,则移动卷
- [lxd-import] test: 重命名集群中的存储卷
- [lxd-import] lxd/network/driver/bridge: 不要将代理侦听地址的 IP 解析失败视为错误
- [lxd-import] github: 仅在主分支和发布分支上运行推送操作
- [lxd-import] lxd/daemon: 在补丁之前初始化服务器名称和全局配置
- [lxd-import] lxd/patches: 仅更新 patchStorageZfsUnsetInvalidBlockSettingsV2 中需要更新的卷
- [lxd-import] lxd/patches: 仅更新 patchStorageZfsUnsetInvalidBlockSettings 中需要更新的卷
- doc/images: 修复 requirements.secureboot 的类型
- api: 添加 image_restriction_privileged
- doc/images: 引入 requirements.privileged
- doc/images: 对镜像要求进行排序
- internal/server/instance/lxc: 添加对 image.requirements.privileged 的支持
- shared/cliconfig: 在缺少套接字时显示更友好的错误
- instance/lxc: 修复交换限制处理
- [lxd-import] doc: 添加关于 INC_DEVEL=1 时 go-incus 构建问题的说明
- [lxd-import] lxd/firewall: 修复 nftables ACL 模板
- [lxd-import] lxd/api: 将数字文字 301 替换为 http.StatusMovedPermanently
- [lxd-import] lxd/auth/oidc: 将数字文字 301 替换为 http.StatusMovedPermanently
- [lxd-import] lxd/dev_incus: 将数字文字 401 替换为 http.StatusUnauthorized
- [lxd-import] lxd: 集群加入后再次更新证书缓存。
- [lxd-import] lxd/patches: 添加用于修复卷的补丁的集群检查
- [lxd-import] lxd/storage_pools: 获取存储池时修复 etag
- [lxd-import] Makefile: 添加 staticcheck 目标
- [lxd-import] 添加 staticcheck 配置
- [lxd-import] golangci: 对 lint 工具列表进行排序
- [lxd-import] doc/instances: 说明初始卷配置
- [lxd-import] lxd/instance/drivers: 使用
InitPID
检查 cgroups 的运行状态 - [lxd-import] lxd/instance/drivers: 扩展 deviceAddCgroupRules 中的错误消息
- [lxd-import] doc/networking/firewall: 添加更严格的 UFW 规则
- [lxd-import] loki: 如果提供 CA 证书则启用 TLS 验证
- [lxd-import] test/container_devices_unix: 使 unix 设备检查不太容易出错
- [lxd-import] api: 添加 cluster_internal_custom_volume_copy
- [lxd-import] shared/api: 将 Location 添加到 StorageVolumeSource
- [lxd-import] shared/api: 将 Source 添加到 StorageVolumePost
- [lxd-import] lxd/db: 添加用于更新存储卷节点的函数
- [lxd-import] lxd: 使用单个 API 调用处理复制存储卷
- [lxd-import] lxd: 支持单个 API 自定义卷重命名
- [lxd-import] client: 如果支持则设置 Source.Location
- [lxd-import] doc: 更新 API
- [lxd-import] lxd/instance/exec: 在非交互式执行中使用 linux.NewExecWrapper 进行 MirrorRead
- [lxd-import] shared/ws/mirror: 更新 Mirror*() 以返回错误通道
- [lxd-import] client: shared.Mirror*() 用法
- [lxd-import] lxd/instance/exec: 在 execWs 中记录来自 ws.Mirror*() 的错误
- [lxd-import] lxc/copy: 要求提供目标名称
- [lxd-import] po: 更新翻译
- [lxd-import] shared/api: 添加身份验证方法常量。
- gitignore: 移除 macaroon-identity
- [lxd-import] 客户端: 将 'oidc' 字符串替换为常量。
- [lxd-import] lxc/config: 将 'oidc' 字符串替换为常量。
- [lxd-import] lxc: 将 'oidc' 字符串替换为常量。
- [lxd-import] lxd: 将 'oidc' 字符串替换为常量。
- [lxd-import] 客户端: 将 'tls' 字符串替换为常量。
- [lxd-import] lxc/config: 将 'tls' 字符串替换为常量。
- [lxd-import] lxc: 将 'tls' 字符串替换为常量。
- [lxd-import] lxd: 将 'tls' 字符串替换为常量。
- [lxd-import] lxd-agent: 将 'tls' 字符串替换为常量。
- [lxd-import] lxd-migrate: 将 'tls' 字符串替换为常量。
- [lxd-import] shared/network: 移除 GetTLSConfig() 未使用的参数
- [lxd-import] lxd/migration_connection: 删除 localtls.GetTLSConfig() 未使用的参数
- [lxd-import] lxd/storage_volumes: 删除 localtls.GetTLSConfig() 未使用的参数
- [lxd-import] lxd/util/http: 删除 localtls.GetTLSConfig() 未使用的参数
- [lxd-import] shared/cert: 删除 GetTLSConfig() 未使用的参数
- [lxd-import] lxd/instance/driver/qemu: 在 blockNodeName() 中将 sha1 替换为 sha256
- [lxd-import] shared/api: 为默认项目名称添加常量。
- [lxd-import] lxd/cluster: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/db: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/device: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/instance/drivers: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/instance: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/network/acl: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/network: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/project: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd/storage: 将 project.Default 更新为 api.ProjectDefaultName。
- [lxd-import] lxd: 将 project.Default 更新为 api.ProjectDefaultName。
- 客户端: 使用 api.ProjectDefaultName
- cmd/incus: 使用 api.ProjectDefaultName
- cmd/incus-benchmark: 使用 api.ProjectDefaultName
- cmd/incus-migrate: 使用 api.ProjectDefaultName
- [lxd-import] lxd/project: 移除 project.Default。
- [lxd-import] lxd/request: 导出查询参数方法并移动到
lxd/request
。 - [lxd-import] lxd: 更新对 projectParam 和 queryParam 的调用。
- [lxd-import] shared/util/linux: 更新 NewExecWrapper.Read,在进程退出后等待输出时基于时间。
- [lxd-import] lxd/auth: 添加权限、对象和许可类型及常量。
- [lxd-import] lxd/auth: 添加创建授权对象的功能。
- [lxd-import] lxd/auth: 添加授权对象的测试。
- [lxd-import] lxd/auth: 扩展授权器接口。
- [lxd-import] lxd/auth: 更新通用授权器以适应授权器接口扩展。
- [lxd-import] lxd/auth: 为 TLS 驱动程序实现授权器。
- [lxd-import] lxd: 不要在请求上下文中设置用户访问数据。
- [lxd-import] lxd: 更新对 auth 包的调用。
- [lxd-import] lxd: 仅当 AllowUntrusted 为 true 时才允许缺少访问处理程序。
- [lxd-import] lxd: 更新 allowPermission 函数。
- [lxd-import] lxd: 更新 allowAuthenticated 函数。
- [lxd-import] lxd/db/operationtype: 更新 Permission 方法。
- [lxd-import] lxd/operations: 更新操作权限。
- [lxd-import] lxd/db/cluster: 重命名 constants.go 文件。
- [lxd-import] lxd/db/cluster: 添加存储桶实体类型。
- [lxd-import] lxd/db/cluster: 添加 URLToEntityType 函数。
- [lxd-import] lxd/db/cluster: 为 URLToEntityType 函数添加单元测试。
- [lxd-import] lxd/project: 更新项目的权限处理。
- [lxd-import] lxd/project: 更新权限测试。
- [lxd-import] lxd/events: 将 auth.PermissionChecker 传递给事件侦听器。
- [lxd-import] lxd-agent: 更新对 Incus Agent 的 AddListener 调用。
- [lxd-import] lxd: 更新 /1.0 端点的授权。
- [lxd-import] lxd: 更新集群端点的授权。
- [lxd-import] lxd: 更新内部端点的授权。
- [lxd-import] lxd/metrics: 添加使用权限检查器过滤指标的方法。
- [lxd-import] lxd: 更新指标的授权。
- [lxd-import] lxd: 更新项目 API 的授权。
- [lxd-import] lxd: 更新证书 API 的授权。
- [lxd-import] lxd: 更新事件 API 的授权。
- [lxd-import] lxd: 更新镜像 API 的授权。
- [lxd-import] lxd: 在授权器中添加/移除镜像和镜像别名。
- [lxd-import] lxd: 更新实例的授权。
- [lxd-import] lxd/instance/drivers: 在授权器中添加/移除/重命名实例。
- [lxd-import] lxd: 更新网络 ACL API 的授权。
- [lxd-import] lxd: 在授权器中更新网络 ACL。
- [lxd-import] lxd: 更新网络分配的授权。
- [lxd-import] lxd: 更新网络转发的授权。
- [lxd-import] lxd: 更新网络负载均衡器的授权。
- [lxd-import] lxd: 更新网络对等体的授权。
- [lxd-import] lxd: 更新网络区域的授权。
- [lxd-import] lxd: 在授权器中更新网络区域。
- [lxd-import] lxd: 更新网络 API 的授权。
- [lxd-import] lxd: 在授权器中更新网络。
- [lxd-import] lxd: 更新操作的授权。
- [lxd-import] lxd: 更新配置文件的授权。
- [lxd-import] lxd: 在授权器中更新配置文件。
- [lxd-import] lxd: 更新资源的授权。
- [lxd-import] lxd: 更新存储桶的授权。
- [lxd-import] lxd: 在授权器中更新存储桶。
- [lxd-import] lxd: 更新存储池的授权。
- [lxd-import] lxd: 在授权器中更新存储池。
- [lxd-import] lxd: 更新存储卷的授权。
- [lxd-import] lxd/storage: 在授权器中添加/移除/重命名存储卷。
- [lxd-import] lxd: 更新警告的授权。
- [lxd-import] lxd/cluster/config: 添加缺失的布尔默认值
- cmd/lxd-to-incus: 将最大版本提升到 5.19
- cmd/lxd-to-incus: 移除换行符
- cmd/lxd-to-incus: 验证存储工具是否存在
- cmd/lxd-to-incus: 修复多个池的 SQL 更新
- cmd/lxd-to-incus: 初始集群处理
- api: disk_io_bus
- doc: 将 io.bus 添加到磁盘设备
- doc: 重新格式化磁盘选项表
- incusd/device/disk: 添加 io.bus
- incusd/instance/qemu: 添加 NVMe 磁盘支持
- [lxd-import] gomod: 移除 github.com/pborman/uuid 依赖项
- [lxd-import] lxd/storage/drivers: 使用 github.com/google/uuid 生成和解析 UUID
- [lxd-import] lxd/instance/drivers: 使用 github.com/google/uuid 生成和解析 UUID
- [lxd-import] lxd/instance: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxc-to-lxd: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd-migrate: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/apparmor: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/bgp: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/db: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/device: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/events: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/firewall/drivers: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/operations: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/rsync: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd/storage/s3/miniod: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] shared/validate: 使用 github.com/google/uuid 解析 UUID
- [lxd-import] lxd/auth/oidc: 使用 github.com/google/uuid 生成 UUID
- [lxd-import] lxd: 处理 oidc.NewVerifier 的错误
- incusd/apparmor: 使用 github.com/google/uuid 生成 UUID
- gomod: 更新依赖项
- incusd/seccomp: 切换到 path/filepath
- incusd/seccomp: 将正确的路径和文件系统类型传递给 IdmappedStorage
- incusd/forksyscall: 修复 idmapped 挂载代码路径
- lxd-to-incus: 修复错误的检查
- doc: 添加迁移文档
- README: 更新 lxd-to-incus
- incusd/devices/disk: 始终应用磁盘选项
- 发布 Incus 0.2
文档¶
Incus 文档可以在以下位置找到
https://linuxcontainers.cn/incus/docs/main/
软件包¶
由于 Incus 上游仅发布常规发行版压缩包,因此没有官方的 Incus 软件包。以下是启动和运行 Incus 的一些可用选项。
适用于 Debian 和 Ubuntu 的 Zabbly 软件包¶
Zabbly 为 Debian 和 Ubuntu 用户提供 Incus 的每日构建和稳定构建
https://github.com/zabbly/incus
适用于 Incus 客户端的 Homebrew 软件包¶
客户端工具可以通过 HomeBrew 在 Linux 和 MacOS 上使用。
https://formulae.brew.sh.cn/formula/incus
适用于 Incus 客户端的 Chocolatey 软件包¶
客户端工具很快将通过 Chocolatey 提供给 Windows 用户。
在此之前,可以在此处找到二进制文件: https://github.com/lxc/incus/releases/tag/v0.2.0
支持¶
在这个早期阶段,每个 Incus 版本都只支持到下一个版本发布为止。这将在几个月内发生变化,因为我们计划在 LXC 和 LXCFS 的 LTS 版本发布时同步发布 LTS 版本。
社区支持在以下位置提供: https://discuss.linuxcontainers.org
错误可以在以下位置报告: https://github.com/lxc/incus/issues