返回新闻概览

Incus 0.5 已发布

2024 年 1 月 26 日

简介

Incus 团队很高兴宣布发布 Incus 0.5!

这是我们在 2024 年发布的第一个版本,而且非常繁忙! 也是第一个没有来自 LXD 的更改的版本,继他们决定将许可证重新授权给 AGPLv3

此版本对 Incus CLI 进行了一些受欢迎的改进,并加入了一些新的虚拟机功能,更多用于处理集群撤离和主机关机的选项以及其他一些较小的功能和改进!

除此之外,我们还修复了许多错误,并进行了一些数据库改进,这些改进应能显著提高性能,尤其是在集群中。

image|690x459

与往常一样,您可以在线试用它:https://linuxcontainers.cn/incus/try-it/

享受!

亮点

Ansible、Terraform/OpenTofu 和 Packer

在过去的几个月里,Incus 在常用工具中的支持有了很大的增长!

Linux 发行版软件包

自 Incus 上次发布以来,现在可用于以下系统:

  • Arch Linux
  • Debian (testing/unstable)
  • Ubuntu (noble)
  • Void Linux

您可以在我们的安装指南中找到所有说明。

翻译

我们花了一些时间清理翻译并为 Incus 设置了Weblate
现在比以往任何时候都更容易登录 Weblate 并将 Incus CLI 翻译成您的语言。
所有更改都会自动提交到 Github 以供包含。

Translation status

升级说明

subuid/subgid 条目

idmap 解析器中的一个长期存在的错误会导致在解析/etc/subuid/etc/subgid时,除了 root 用户的第一个大型条目之外的所有条目都被丢弃。

这会导致那些有正当理由将自己的 uid/gid 分配分成两半的用户出现问题,主要是那些在主机系统上使用远程身份验证的用户。

此错误已解决,但其副作用会导致 Incus 容器在具有无效 subuid/subgid 配置的系统上无法启动。

如果您发现容器无法启动,请查看/etc/subuid/etc/subgid,并确保存在一个用于root用户的巨大条目,它至少要大65536 uid/gid。更重要的是,确保分配给root用户的分配没有冲突或重叠。

在大多数情况下,最简单的方法是删除这两个文件中的所有root条目,并用一个非常大的条目替换它们。

root:1000000:1000000000

新功能

新的incus file create命令

添加了一个新的incus file create命令,它提供了一种简单的方法来创建空文件、符号链接和目录,而无需传输现有的本地目录树。

stgraber@dakara:~$ incus file create demo/root/file
stgraber@dakara:~$ incus file create --type=symlink demo/root/symlink /etc/hosts
stgraber@dakara:~$ incus file create --type=directory demo/root/dir
stgraber@dakara:~$ incus exec demo -- ls -lh /root
total 2.5K
drwxr-xr-x 2 root root  2 Jan 26 03:38 dir
-rw-r--r-- 1 root root  0 Jan 26 03:37 file
lrwxrwxrwx 1 root root 10 Jan 26 03:38 symlink -> /etc/hosts
新的incus snapshot show命令

新的incus snapshot show命令使查看包含在 Incus 实例快照中的配置数据变得容易。

提醒一下,Incus 快照不仅包含文件系统状态,还包含快照时的所有实例配置(配置密钥、设备等)。

stgraber@dakara:~$ incus snapshot create demo s1
stgraber@dakara:~$ incus snapshot list demo
+------+----------------------+----------------------+----------+
| NAME |       TAKEN AT       |      EXPIRES AT      | STATEFUL |
+------+----------------------+----------------------+----------+
| s1   | 2024/01/25 22:39 EST | 0000/12/31 19:03 LMT | NO       |
+------+----------------------+----------------------+----------+
stgraber@dakara:~$ incus snapshot show demo s1
expires_at: 0001-01-01T00:00:00Z
architecture: x86_64
config:
  image.architecture: amd64
  image.description: Ubuntu jammy amd64 (20240125_07:42)
  image.os: Ubuntu
  image.release: jammy
  image.serial: "20240125_07:42"
  image.type: squashfs
  image.variant: default
  volatile.base_image: f9e9abeb4fc8691edf48078616a1aae628c6d5938b715e361c6b47cda0474679
  volatile.cloud-init.instance-id: f724feba-245a-424b-bc51-43167258dc2a
  volatile.eth0.host_name: vethecbb346e
  volatile.eth0.hwaddr: 00:16:3e:06:67:f0
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
  volatile.uuid: 8b8a1c75-977b-4197-9ad7-507b899432e9
  volatile.uuid.generation: 8b8a1c75-977b-4197-9ad7-507b899432e9
created_at: 2024-01-26T03:39:09.583020489Z
devices: {}
ephemeral: false
expanded_config:
  image.architecture: amd64
  image.description: Ubuntu jammy amd64 (20240125_07:42)
  image.os: Ubuntu
  image.release: jammy
  image.serial: "20240125_07:42"
  image.type: squashfs
  image.variant: default
  volatile.base_image: f9e9abeb4fc8691edf48078616a1aae628c6d5938b715e361c6b47cda0474679
  volatile.cloud-init.instance-id: f724feba-245a-424b-bc51-43167258dc2a
  volatile.eth0.host_name: vethecbb346e
  volatile.eth0.hwaddr: 00:16:3e:06:67:f0
  volatile.idmap.base: "0"
  volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
  volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]'
  volatile.last_state.idmap: '[]'
  volatile.last_state.power: RUNNING
  volatile.uuid: 8b8a1c75-977b-4197-9ad7-507b899432e9
  volatile.uuid.generation: 8b8a1c75-977b-4197-9ad7-507b899432e9
expanded_devices:
  eth0:
    name: eth0
    network: incusbr0
    type: nic
  root:
    path: /
    pool: default
    type: disk
last_used_at: 0001-01-01T00:00:00Z
name: s1
profiles:
- default
stateful: false
size: 53760
更多 shell 自动完成选项

我们正在逐步从为incus命令行工具编写单个手动 bash 自动完成脚本,转向使用更动态的方式来处理 shell 自动完成。

可以使用以下命令检索初始 shell 自动完成配置文件:

  • incus completion bash
  • incus completion fish
  • incus completion powershell
  • incus completion zsh

Bash 用户可能现在仍然最好使用手动编写的自动完成脚本,但我们希望新的动态生成的自动完成配置文件将在下一两个版本中取代它。

支持多个 VM 代理二进制文件

现在 Incus 可以为其虚拟机提供多个代理二进制文件。

这在两种情况下很有用:

  • 处理多个操作系统
  • 处理多个体系结构

在此阶段,重点是多个体系结构。 凭借这种新功能,您现在可以在系统上运行 32 位虚拟机,并让它们获取 32 位代理二进制文件。

stgraber@castiana:~$ incus exec debian32 bash
root@debian32:~# uname -a
Linux debian32 6.1.0-17-686-pae #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) i686 GNU/Linux
root@debian32:~# 
exit
stgraber@castiana:~$ incus exec debian32 bash
root@debian32:~# uname -m
i686
root@debian32:~# mount -t 9p agent /mnt
root@debian32:~# ls -lh /mnt
total 34M
-rwxr-xr-x 1 root root 17M Jan 24 10:10 incus-agent.linux.i686
-rwxr-xr-x 1 root root 18M Jan 24 10:10 incus-agent.linux.x86_64
支持virtio-blk作为磁盘io.bus

在 Incus 0.2 中添加 NVME 支持后,我们现在将此机制扩展到在虚拟机中提供virtio-blk作为磁盘 I/O 总线。

要使用它,请将disk设备的io.bus属性设置为virtio-blk

stgraber@dakara:~$ incus launch images:debian/12 demo --vm
Launching demo
stgraber@dakara:~$ incus storage volume create default demo size=5GiB --type=block
Storage volume demo created
stgraber@dakara:~$ incus config device add demo extra disk pool=default source=demo io.bus=virtio-blk
Device extra added to demo
stgraber@dakara:~$ incus exec demo bash
root@demo:~# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda      8:0    0   10G  0 disk 
├─sda1   8:1    0  100M  0 part /boot/efi
└─sda2   8:2    0  3.9G  0 part /
vda    253:0    0    5G  0 disk
支持 VM 中的 USB 网络设备直通

当对虚拟机使用nictype=physical并且父网络设备通过 USB 总线连接时,Incus 现在将检测这种情况并将此内部转换为对虚拟机的 USB 设备直通。

stgraber@castiana:~$ incus launch images:debian/12 demo --vm
Launching demo
stgraber@castiana:~$ incus config device add demo eth1 nic nictype=physical parent=enx207bd2a0f9eb
Device eth1 added to demo
stgraber@castiana:~$ incus exec demo bash
root@demo:~# apt install usbutils
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libusb-1.0-0
The following NEW packages will be installed:
  libusb-1.0-0 usbutils
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 142 kB of archives.
After this operation, 492 kB of additional disk space will be used.
Do you want to continue? [Y/n]·
Get:1 http://deb.debian.org/debian bookworm/main amd64 libusb-1.0-0 amd64 2:1.0.26-1 [62.6 kB]
Get:2 http://deb.debian.org/debian bookworm/main amd64 usbutils amd64 1:014-1 [79.7 kB]
Fetched 142 kB in 1s (124 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libusb-1.0-0:amd64.
(Reading database ... 20425 files and directories currently installed.)
Preparing to unpack .../libusb-1.0-0_2%3a1.0.26-1_amd64.deb ...
Unpacking libusb-1.0-0:amd64 (2:1.0.26-1) ...
Selecting previously unselected package usbutils.
Preparing to unpack .../usbutils_1%3a014-1_amd64.deb ...
Unpacking usbutils (1:014-1) ...
Setting up libusb-1.0-0:amd64 (2:1.0.26-1) ...
Setting up usbutils (1:014-1) ...
Processing triggers for libc-bin (2.36-9+deb12u3) ...
root@demo:~# lsusb -tv
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 5000M
    ID 1d6b:0003 Linux Foundation 3.0 root hub
    |__ Port 4: Dev 2, If 0, Class=Communications, Driver=cdc_ncm, 5000M
        ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
    |__ Port 4: Dev 2, If 1, Class=CDC Data, Driver=cdc_ncm, 5000M
        ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 480M
    ID 1d6b:0002 Linux Foundation 2.0 root hub
root@demo:~# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:16:3e:e7:f7:2d brd ff:ff:ff:ff:ff:ff
3: enx207bd2a0f9eb: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 20:7b:d2:a0:f9:eb brd ff:ff:ff:ff:ff:ff
新的集群撤离选项 (force-stopstateful-stop)

添加了几个新的集群撤离选项。

这些可以通过cluster.evacuate实例配置密钥在每个实例的基础上进行选择。

force-stop会导致立即停止实例,而不会让它有机会进行干净关机。 这只有在实例实际上是无状态的情况下才有意义,因为它没有机会将任何正在进行的状态刷新到磁盘。

stateful-stop会导致实例的状态在停止实例之前写入磁盘。 在恢复时,实例状态也会被恢复,导致实例从停止的地方继续运行。
此选项目前主要针对虚拟机,因为容器的状态保存停止很难实现。

能够配置主机实例关机操作

一个新的实例配置密钥boot.host_shutdown_action已被引入,它支持:

  • stop(正常关机行为)
  • force-stop(见上文)
  • stateful-stop(见上文)

这使得在主机关机时让多个虚拟机进行状态保存停止,然后在引导时恢复它们变得特别容易。

能够在创建过程中启动实例

进行了一项小的 API 优化,现在允许在创建请求期间启动实例,从而节省了一个 API 调用,并使为 Incus API 编写真更简单。

incus launch现在也使用了此功能。

可配置的 Loki 实例名称

当将事件发送到 Loki 时,Incus 提供一组默认标签。

这些标签包括instancelocation标签。 值得注意的是,这里的instance指的是 Loki 事件源实例,而不是 Incus 实例。

到目前为止,这些标签只有在服务器转发来自集群中另一台服务器的事件时才会有所不同,这种情况不太可能发生。

相反,在集群环境中,拥有某种方法来提供集群名称更有意义,这样如果多个集群使用相同的 Loki 实例,就可以轻松地进行过滤。

为此,我们引入了一个新的loki.instance服务器配置密钥,当设置时,它将覆盖instance标签。

默认 Grafana 仪表盘也已更新,以过滤 Loki 事件,前提是 Loki 的instance标签将与 Prometheus 作业名称匹配。

扩展文件上的 HEAD 支持

Incus 实例文件 API 上的HEAD方法现在通过Content-Length头返回文件大小。

这主要用于在 Incus 实例文件 API 之上构建某种文件管理器,因为它现在不仅允许显示名称和文件类型,还允许显示任何常规文件的大小。

使用/run/incus存储运行时数据

到目前为止,Incus 在实例日志目录(位于 /var/log/incus/)中存储了一些运行时数据。 除了它显然不是正确的位置之外,它还会导致一些问题,这些问题与积极轮换和过期日志文件的系统有关。

为了解决这个问题,Incus 0.5 现在将运行时数据放置在 /run/incus 中,将 /var/log/incus 保留用于实际日志文件。

将来,更多数据可能也会从 /var/lib/incus 迁移到 /run/incus。

完整更改日志

以下是此版本中所有更改的完整列表。

完整的提交列表
  • incusd/instances/qemu: 缺少代理时不要失败事件发送
  • incusd/network/ovsdb: 正确关闭连接
  • doc: 添加 Fedora 安装说明
  • incusd/network/ovn: 使用 Mutate 而不是 Update
  • incusd/network/ovs: 将 BridgeDelete 移植到 OVSDB
  • incusd/network/ovs: 将 BridgeAdd 移植到 OVSDB
  • incusd/network/ovs: 将 BridgePortAdd 移植到 OVSDB
  • incusd/network/ovn: 将 LogicalSwitchPortIPs 移植到 OVSDB
  • incus-doc: 不要尝试猜测类型
  • doc: 更新配置
  • doc/installing: 添加 Arch 说明
  • lxd-to-incus: 阐明错误消息
  • doc/installing: 修复 chocolatey 链接
  • doc: 删除 MicroCloud 引用
  • incusd/network/ovn: 正确检查事务
  • incusd/network/ovs: 正确检查事务
  • incusd/network/ovn: 修复 ChassisGroupChassisAdd
  • incusd/network/ovn: 修复 BridgeAdd
  • incusd/network/ovn: 正确处理禁用 DHCP/DHCPv6 的上行链路
  • incus: 在没有本地守护程序时创建配置路径
  • lxd-to-incus: 支持备用快照路径
  • incusd/device/pci: 检测 USB 总线
  • incusd/device/nic: 支持 VM 中物理 NIC 的 USB 父级
  • internal/instance: 添加新的易失性密钥
  • incusd/instance/qemu: 修复拼写错误
  • incusd/instance/qemu: 处理 USB NIC 热移除
  • incusd/networks: 加入时不要填充网络配置
  • incus/create: 在网络/存储查找后设置目标
  • doc/architectures: 添加缺失的条目
  • doc/architectures: 重新措辞标题
  • doc/architectures: 修复拼写错误
  • doc/architectures: 添加关于虚拟机体系结构的说明
  • doc/wordlist: 添加 Loongarch
  • doc/migrate_lxd: 添加 CLI 配置的提及
  • incus/snapshot: 修复列表中的格式处理
  • incus/snapshot: 添加 show 子命令
  • i18n: 更新翻译模板
  • incus: 启用 cobra 的完成支持
  • lxd-to-incus: 处理本地 OVN
  • incusd/storage_pools: 不要在空池上崩溃
  • incusd/instance/lxc: 在 Exec 期间重新生成 lxc.conf
  • incusd/instance/qemu: 添加 ErrExecDisconnected
  • incusd: 使虚拟机关机/重启干净退出
  • lxd-to-incus: 修复不正确的目录名称
  • lxd-to-incus: 使用符号链接路径检测源守护进程
  • lxd-to-incus: 从路径中删除尾部斜杠
  • lxd-to-incus: 迁移后触摸完成文件
  • incusd: 在集群 put/join 时刷新状态
  • Makefile: 不要抱怨 shellcheck 版本
  • golangci: 禁用 confusing-results
  • shared/idmap: 删除 Extend
  • shared/idmap: 在 DefaultIdmapSet 中返回所有 idmap
  • shared/idmap: 拆分 idrange
  • shared/idmap: 拆分 idmapset
  • shared/idmap: 拆分 idmap
  • shared/idmap: 拆分 ByHostid
  • shared/idmap: 导出非 Linux 特定逻辑
  • shared/idmap: 清理 IdmapSet
  • shared/idmap: 将 IdRange 重命名为 IDRange
  • shared/idmap: 清理 IdmapEntry
  • shared/idmap: 将 is_between 重命名为 isBetween
  • shared/idmap: 重命名 ByHostID 并使其使用 IdmapSet
  • shared/idmap: 为现代标准更新 idmapset
  • shared/idmap: 重命名文件
  • shared/idmap: 将 ByHostID 放回集合中
  • shared/idmap: 将 IdmapEntry 重命名为 Entry
  • shared/idmap: 将 IDRange 重命名为 Range
  • shared/idmap: 将 IdmapSet 重命名为 Set
  • shared/idmap: 修复导入遮蔽
  • shared/idmap: 将 VFS3Fscaps 重命名为 VFS3FSCaps
  • shared/idmap: 添加/调整导出函数描述
  • shared/idmap: 正确地大写
  • shared/idmap: 将 UIDShift 重命名为 Shift
  • shared/idmap: 更新 kernelDefaultMap 以返回多个映射
  • shared/idmap: 更新注释
  • shared/idmap: 添加 FilterPOSIX
  • shared/idmap: 引入 NewSetFromIncusIDMap
  • shared/idmap: 引入 NewSetFromJSON
  • shared/idmap: 用 ToJSON 替换 JSONMarshal
  • shared/idmap: 引入 set_sort
  • shared/idmap: 始终使用指针接收器
  • shared/idmap: 将剩余的加载器移动到 set_load
  • shared/idmap: 在所有平台上运行测试
  • shared/idmap: 引入 DefaultFullKernelSet
  • shared/idmap: 引入 NewSetFromCurrentProcess
  • shared/idmap: 删除 GetSet
  • shared/idmap: 引入 NewSetFromSystem
  • shared/idmap: 删除 kernelDefaultMap
  • shared/idmap: 向 Entry 添加 Clone
  • shared/idmap: 向 Set 添加 Split
  • shared/idmap: 用 ShiftPath/UnshiftPath 替换 Shift 函数
  • fuidshift: 更新 idmap 更改
  • incusd: 更新 idmap 更改
  • incus-user: 当 uid/gid 不在系统映射中时,不要设置 raw.idmap
  • shared/idmap: 向 Set 添加 Includes
  • incusd: 简化 idmap 序列化
  • incusd/instance/lxc: 检测错误的 idmap 并找到新的 idmap
  • shared/cliconfig: 改善错误处理
  • incusd/instance/qemu: 不要在 checkFeatures 中硬编码 UEFI 固件
  • incusd/firewall/xtables: 修复 nft shim 上的 iptablesClear
  • incus/network: 添加动态完成
  • shared/idmap: 修复注释中的拼写错误
  • incus/project: 从连接信息中获取当前项目
  • incusd/cluster: 确保集群成员配置始终排序
  • 更新 madmin-go 以支持 loong64
  • server/seccomp: 添加 loongarch64
  • shared/cgo: 添加 loongarch64
  • shared/idmap: 不要更改 json 格式
  • shared/idmap: 文档化 AddSafe 并修复双记录
  • incusd: 更新 shared/idmap 修复的 instance_test
  • incusd/instance/file: 向 HEAD 添加类型和大小
  • shared/idmap: 修复注释中的拼写错误
  • api: disk_io_bus_virtio_blk
  • doc: 添加 virtio-blk 作为 io.bus 的选项
  • incusd/device/disk: 添加 virtio-blk
  • incusd/instance/qemu: 添加 virtio-blk 支持
  • 将 db 备份函数移至 ClusterTx
  • 将 db 映像函数移至 ClusterTx
  • 将 db 实例函数移至 ClusterTx
  • 将 db 网络 ACL 函数移至 ClusterTx
  • 将 db 网络转发函数移至 ClusterTx
  • 将 db 网络负载均衡器函数移至 ClusterTx
  • 将 db 网络对等函数移至 ClusterTx
  • 将 db 配置文件函数移至 ClusterTx
  • 将 db 网络区域函数移至 ClusterTx
  • 将 db 网络函数移至 ClusterTx
  • 将 db 快照函数移至 ClusterTx
  • 将 db 存储桶函数移至 ClusterTx
  • 将 db 存储池函数移至 ClusterTx
  • 将 db 卷快照函数移至 ClusterTx
  • 将 db 存储卷函数移至 ClusterTx
  • 将 db 警告函数移至 ClusterTx
  • cmd/incusd: 修复批量解冻
  • cmd/incus: 添加 resume 命令
  • i18n: 更新翻译
  • incusd/loki: 用简单的循环替换复杂的回退
  • gomod: 更新依赖项
  • incus-agent: 处理内置 vsock 模块
  • gomod: 更新依赖项
  • README: 重新引入 weblate
  • incusd/network/acl: 避免嵌套 DB 事务
  • incusd/instance/qemu: 开始使用 seabios 作为 CSM 固件
  • incusd/forknet: 处理 wifi 分离
  • doc/CONTRIBUTING: 修复不正确的命令路径
  • i18n: 手动更新法语翻译
  • i18n: 更新翻译模板
  • 使用 Weblate (法语) 翻译
  • tests: 添加许可证检查
  • 还原“更新 madmin-go 以支持 loong64”
  • gomod: 更新依赖项
  • incusd: 正确更新事件位置
  • incusd/events: 尽可能晚地升级到 websocket
  • 使用 Weblate (日语) 翻译
  • 使用 Weblate (日语) 翻译
  • 使用 Weblate (日语) 翻译
  • 使用 Weblate (日语) 翻译
  • 使用 Weblate (日语) 翻译
  • api: loki_config_instance
  • incusd/config: 添加 loki.instance
  • incusd/loki: 添加对覆盖实例名称的支持
  • incusd: 添加对 loki.instance 的支持
  • doc: 更新配置
  • grafana: 为 Loki 添加实例过滤器
  • incusd/loki: 修复变量遮蔽
  • 使用 Weblate (日语) 翻译
  • 使用 Weblate (日语) 翻译
  • cmd/incusd/api_cluster: 加入集群事务
  • i18n: 删除空翻译
  • api: instance_create_start
  • shared/api: 向 InstnacesPost 添加 Start
  • doc/rest-api: 刷新 swagger YAML
  • incusd/instance: 添加对 Start 属性的支持
  • incus/launch: 使用 Start 属性
  • i18n: 更新翻译模板
  • doc: 使用 Winget 指令更新 Windows 安装
  • doc: 将 Winget 添加到 wordlist
  • incusd/migration: 正确转发错误
  • cmd/incus: 仅在 --gid--uid 未设置时获取所有者模式
  • cmd/incus: 添加 incus file create 子命令
  • test: 添加 incus file create 的测试
  • i18n: 更新翻译模板
  • 使用 Weblate (日语) 翻译
  • 添加关于 scrape_interval 的说明并更新示例
  • cmd/incus: 删除 incus file create 中未使用的 flagContent 变量
  • build(deps): 将 actions/dependency-review-action 从 3 提升到 4
  • incusd/storage_volumes: 正确地定位刷新
  • incusd/storage_volumes: 使用单个 POST 处理程序
  • lxd-to-incus: 使用 Incus API 客户端连接 LXD
  • lxd-to-incus: 处理非字符串 LXD 配置
  • lxd-to-incus: 删除单独的 go 包
  • lxd-to-incus: 修复各种问题
  • Makefile: 更新 lxd-to-incus
  • gomod: 更新依赖项
  • incus/alias: 使默认别名可见
  • incus: 在帮助消息中提及别名
  • i18n: 更新翻译模板
  • incus: 处理不存在的主目录
  • lxd-to-incus: 不要导出内部函数
  • lxd-to-incus: 修复错误检查
  • lxd-to-incus: 检查强制转换是否成功
  • lxd-to-incus: 修复拼写错误
  • lxd-to-incus: 修复变量遮蔽
  • lxd-to-incus: 删除多余的 printf
  • lxd-to-incus: 添加必需的注释
  • lxd-to-incus: 简化存在性检查
  • lxd-to-incus: 在 DottedVersion 中使用字段名称
  • internal/util: 重新排序路径函数
  • internal/util: 添加 RunPath
  • incusd/sys: 添加运行时目录
  • incusd/seccomp: 将 seccomp.socket 移动到 /run
  • incusd/instance_logs: 删除 conf 文件
  • doc/rest-api: 刷新 swagger YAML
  • incusd/instance/common: 添加 RunPath
  • incusd/instance/lxc: 移动 lxc.conf
  • incusd/instance/qemu: 移动 qemu.conf
  • doc: 更新 qemu.conf 路径
  • incusd/apparmor: 添加运行时目录
  • incusd/instance/utils: 清理运行时路径
  • incusd/instance/lxc: 将文件移动到运行时路径
  • incusd/instance/qemu: 将文件移动到运行时路径
  • incusd/patches: 将文件移动到运行时目录
  • incusd/instance/qemu: 将代理加载器移动到单独的文件
  • incusd/apparmor/qemu: 删除对 userns 的提及
  • incusd/instance/qemu: 使配置驱动程序名称可配置
  • incusd/instance/qemu: 添加新的代理共享
  • incusd/apparmor/qemu: 允许访问代理路径
  • doc: 添加 INCUS_AGENT_PATH
  • incusd/instance/qemu: 仅通过 9p 公开配置/代理驱动程序
  • incusd/instance/qemu/agent-loader: 删除 virtiofs
  • doc/getting_started: 指导用户安装指南
  • doc/installing: 清理发行版说明
  • api_cluster: 优化 db 事务
  • daemon_images: 优化 db 事务
  • daemon_storage: 优化 db 事务
  • images: 优化 db 事务
  • storage_volumes_snapshot: 优化 db 事务
  • instance/drivers: 优化 db 事务
  • driver_ovn: 优化 db 事务
  • network/acl: 优化 db 事务
  • network/zone: 优化 db 事务
  • storage_volumes: 优化 db 事务
  • incusd/instance/qemu: 添加一些 ArchLinux EDK2 文件名
  • api_internal: 删除无法访问的代码
  • doc/installing: 添加 Void Linux
  • internal/instance: 不要使用节点术语
  • doc: 更新配置
  • api: clustering_evacuation_stop_options
  • internal/instance: 扩展 cluster.evacuate
  • incusd/cluster: 添加疏散模式验证
  • incusd/instance: 使用字符串表示 CanMigrate
  • incusd/cluster: 更新 CanMigrate
  • incusd/cluster: 添加 stateful-stop 和 force-stop
  • doc: 更新配置
  • api: boot_host_shutdown_action
  • internal/instance: 添加 boot.host_shutdown_action
  • doc: 更新配置
  • scripts/bash: 添加 boot.host_shutdown_action
  • incusd/project: 添加 boot.host_shutdown_action
  • incusd/instances: 添加对 boot.host_shutdown_action 的支持
  • incusd/instance: 当没有状态可用时,回退到无状态启动
  • internal/archive: 修复 squashfs 错误处理
  • gomod: 更新依赖项

文档

Incus 文档可以在以下位置找到
https://linuxcontainers.cn/incus/docs/main/

软件包

由于 Incus 上游只发布常规发行版压缩包,因此没有官方的 Incus 软件包。以下是一些可用于启动和运行 Incus 的选项。

在 Linux 上安装 Incus 服务器

Incus 可用于大多数常见的 Linux 发行版。您可以在我们的文档中找到详细的安装说明。

https://linuxcontainers.cn/incus/docs/main/installing/

Incus 客户端的 Homebrew 软件包

客户端工具可通过 HomeBrew 在 Linux 和 MacOS 上使用。

https://formulae.brew.sh.cn/formula/incus

Incus 客户端的 Chocolatey 软件包

客户端工具可通过 Chocolatey 供 Windows 用户使用。

https://community.chocolatey.org/packages/incus/0.5

Incus 客户端的 Winget 软件包

客户端工具也通过 Winget 供 Windows 用户使用。

https://winstall.app/apps/LinuxContainers.Incus

支持

在这个早期阶段,每个 Incus 发行版只支持到下一个发行版发布为止。这将在几个月后改变,因为我们计划发布一个 LTS 发行版,以配合 LXC 和 LXCFS 的 LTS 发行版。

社区支持提供于:https://discuss.linuxcontainers.org
商业支持可通过以下方式获取:https://zabbly.com/incus
错误报告可提交至:https://github.com/lxc/incus/issues