ニュース¶
Incus 6.17 リリースのお知らせ¶
2025/09/26
はじめに ¶
Incus チームは、Incus 6.17 のリリースのアナウンスができてうれしいです!
このリリースでは、IncusOS ユーザー向けの初期の CLI、OVN ネットワークに対する優れた機能強化、クラスターユーザー向けの柔軟性の向上が行われ、新しいインスタンスオプションがいくつか追加されています。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能 ¶
IncusOS管理コマンド ¶
incus admin os
から始まる新しいコマンド群が追加され、リモートの IncusOS システムが簡単に設定できるようになりました。
stgraber@castiana:~$ incus admin os system show laptop:storage
WARNING: The IncusOS API and configuration is subject to change
config: {}
state:
drives:
- boot: true
bus: nvme
capacity_in_bytes: 5.12110190592e+11
id: /dev/disk/by-id/nvme-Samsung_SSD_970_PRO_512GB_S5JYNS0RB08237J
model_family: ""
model_name: Samsung SSD 970 PRO 512GB
remote: false
removable: false
serial_number: S5JYNS0RB08237J
smart:
enabled: true
passed: true
pools:
- devices:
- /dev/disk/by-partlabel/local-data
encryption_key_status: available
name: local
pool_allocated_space_in_bytes: 7.03410176e+08
raw_pool_size_in_bytes: 4.7244640256e+11
state: ONLINE
type: zfs-raid0
usable_pool_size_in_bytes: 4.7244640256e+11
現時点では、CLI の非常に初期の段階のバージョンであり、多くの機能がまだ実装されていません。しかし、すでにネットワーク、ストレージ、システムサービスまわりの一般的な設定の一部に使用できます。
OVN ネットワークのトンネルサポート ¶
OVN ネットワークで、従来のブリッジネットワークでは長い間提供されていたトンネル設定キーが使えるようになりました。
これにより、GRE また VXLAN 経由で OVN ネットワークを拡張できるようになりました。
root@server04:~# incus network show ovn-vxlan
config:
bridge.mtu: "1450"
ipv4.address: 10.12.125.1/24
ipv4.nat: "true"
ipv6.address: fd42:ce36:66f9:5ec2::1/64
ipv6.nat: "true"
network: UPLINK
tunnel.sta.id: "100"
tunnel.sta.protocol: vxlan
volatile.network.ipv4.address: 172.31.254.15
volatile.network.ipv6.address: fd00:1e4d:637d:1234:1266:6aff:fe98:b8db
description: ""
name: ovn-vxlan
type: ovn
used_by: []
managed: true
status: Created
locations:
- server04
- server03
- server01
- server02
project: default
ドキュメント: https://linuxcontainers.org/incus/docs/main/reference/network_ovn/
OOM(Out-of-memory)優先度の制御 ¶
OOM(メモリ不足)イベントが発生した場合のプロセスの優先度を制御するために、コンテナと仮想マシンの両方に新しい設定キーが追加されました。
その設定キーは limits.memory.oom_priority
です。この値はカーネルの OOM 優先度に対応しており、値が小さいほど、メモリ不足の際にメモリの解放対象として選ばれる可能性が低くなります。
ドキュメント: https://linuxcontainers.org/incus/docs/main/reference/instance_options/#instance-options-limits
バックアップをインポートする際に上書き可能な設定とデバイス ¶
バックアップをインポートする際(incus import
)、構成とデバイスを上書きして適用できるようになりました。これは、インスタンスコピー(incus copy
)と同じように機能します。
stgraber@castiana:~$ incus config show a1
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine edge amd64 (20250925_13:00)
image.os: Alpine
image.release: edge
image.requirements.secureboot: "false"
image.serial: "20250925_13:00"
image.type: squashfs
image.variant: default
volatile.base_image: aba1610b7aca5e68952511100e2652423baaa326d66d8a81efafb9385b322976
volatile.cloud-init.instance-id: 3da65657-1355-40ec-88b0-c69cee657ddb
volatile.eth0.host_name: veth18d71455
volatile.eth0.hwaddr: 10:66:6a:fd:cc:96
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: dc392e6f-e1dd-42cd-af81-3491eebac20e
volatile.uuid.generation: dc392e6f-e1dd-42cd-af81-3491eebac20e
devices:
root:
path: /
pool: default
size: 1GiB
type: disk
ephemeral: false
profiles:
- default
stateful: false
description: ""
stgraber@castiana:~$ incus export a1
Backup exported successfully!
stgraber@castiana:~$ incus delete -f a1
stgraber@castiana:~$ incus import a1.tar.gz -c limits.cpu=4 -d root,size=5GiB
stgraber@castiana:~$ incus config show a1
architecture: x86_64
config:
image.architecture: amd64
image.description: Alpine edge amd64 (20250925_13:00)
image.os: Alpine
image.release: edge
image.requirements.secureboot: "false"
image.serial: "20250925_13:00"
image.type: squashfs
image.variant: default
limits.cpu: "4"
volatile.base_image: aba1610b7aca5e68952511100e2652423baaa326d66d8a81efafb9385b322976
volatile.cloud-init.instance-id: 3da65657-1355-40ec-88b0-c69cee657ddb
volatile.eth0.host_name: veth18d71455
volatile.eth0.hwaddr: 10:66:6a:fd:cc:96
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: dc392e6f-e1dd-42cd-af81-3491eebac20e
volatile.uuid.generation: dc392e6f-e1dd-42cd-af81-3491eebac20e
devices:
root:
path: /
pool: default
size: 5GiB
type: disk
ephemeral: false
profiles:
- default
stateful: false
description: ""
database-client
クラスターロール ¶
新たに database-client
クラスターロールが追加されました。
クラスター内のサーバーにこのロールを与えると、このサーバーはデータベースのコピーを取得せず、常にデータベースのクライアントとしてのみ機能するようになります。
このロールの主なユースケースは、クラスター内の一部のサーバーが、実際はクラスターに所属する物理サーバー上で実行されている仮想マシンであるような環境を扱う際です。このようなシナリオでは、このような仮想マシンがデータベースのクラスターにならないようにする必要があります。物理サーバーの 1 つが失われると、1 つ以上のデータベースサーバーが失われ、クラスターが即座にクォーラムを失い、デッドロックが発生する可能性があります。
root@server04:~# incus cluster list
+----------+----------------------------------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| NAME | URL | ROLES | ARCHITECTURE | FAILURE DOMAIN | DESCRIPTION | STATUS | MESSAGE |
+----------+----------------------------------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| server01 | https://[2602:fc62:b:8006:216:3eff:fe1a:ed0d]:8443 | database | x86_64 | default | | ONLINE | Fully operational |
+----------+----------------------------------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| server02 | https://[2602:fc62:b:8006:216:3eff:fe56:5276]:8443 | database | x86_64 | default | | ONLINE | Fully operational |
+----------+----------------------------------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| server03 | https://[2602:fc62:b:8006:216:3eff:fec6:eaa8]:8443 | database-leader | x86_64 | default | | ONLINE | Fully operational |
| | | database | | | | | |
+----------+----------------------------------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| server04 | https://[2602:fc62:b:8006:216:3eff:fea3:6d]:8443 | database-standby | x86_64 | default | | ONLINE | Fully operational |
+----------+----------------------------------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
root@server04:~# incus cluster role add server04 database-client
root@server04:~# incus cluster list
+----------+----------------------------------------------------+-----------------+--------------+----------------+-------------+--------+-------------------+
| NAME | URL | ROLES | ARCHITECTURE | FAILURE DOMAIN | DESCRIPTION | STATUS | MESSAGE |
+----------+----------------------------------------------------+-----------------+--------------+----------------+-------------+--------+-------------------+
| server01 | https://[2602:fc62:b:8006:216:3eff:fe1a:ed0d]:8443 | database | x86_64 | default | | ONLINE | Fully operational |
+----------+----------------------------------------------------+-----------------+--------------+----------------+-------------+--------+-------------------+
| server02 | https://[2602:fc62:b:8006:216:3eff:fe56:5276]:8443 | database | x86_64 | default | | ONLINE | Fully operational |
+----------+----------------------------------------------------+-----------------+--------------+----------------+-------------+--------+-------------------+
| server03 | https://[2602:fc62:b:8006:216:3eff:fec6:eaa8]:8443 | database-leader | x86_64 | default | | ONLINE | Fully operational |
| | | database | | | | | |
+----------+----------------------------------------------------+-----------------+--------------+----------------+-------------+--------+-------------------+
| server04 | https://[2602:fc62:b:8006:216:3eff:fea3:6d]:8443 | database-client | x86_64 | default | | ONLINE | Fully operational |
+----------+----------------------------------------------------+-----------------+--------------+----------------+-------------+--------+-------------------+
ドキュメント : https://linuxcontainers.org/incus/docs/main/explanation/clustering/
OVN アップリンクネットワークにおける parent=none
のサポート ¶
クラスター内の一部のサーバーのみに OVN アップリンクネットワークを設定できるようになりました。対象の物理ネットワークにアクセスできないサーバーには、parent=none を設定する必要があります。
これにより、OVN はアップリンクに物理的に接続されたサーバー上でのみ論理ルーターを実行しますが、残りのサーバーではインスタンスを実行でき、すべてのトラフィックは他のサーバーにトンネリングされます。
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/network_ovn/
事前に与える構成(preseed)内のクラスターグループ ¶
Incus サーバーの事前に与える構成のロジックが拡張され、クラスターグループを含めるようになりました。
これにより、デフォルトのグループを構成したり、初期化中に追加のグループを定義したり、更新したりできるようになります。
root@server01:~# cat seed.yaml
cluster_groups:
- name: default
description: Default cluster group
config:
instances.vm.cpu.x86_64.baseline: host
- name: test2
description: Test
config:
instances.vm.cpu.x86_64.baseline: core2duo
root@server01:~# incus admin init --preseed < seed.yaml
root@server01:~#
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- tests: Skip XFS on ZFS with Ubuntu 24.04
- doc: Remove unnecessary backquotes around commands in TrueNAS doc
- incusd/device/disk: Allow mounting individual files from custom volumes
- tests: Test mounting individual files from custom volumes
- network/incusd: Allow parent=none physical networks, bypass chassis enablement
- incusd/cluster/evacuate: Clarify error
- doc/instance-create: Mention TLS for the agent
- devcontainer: Update Go to 1.24 and Debian to trixie
- incusd/db: Add 'database-client' role
- incusd/cluster: Add support for rebalancing nodes with 'database-client' role
- incusd: Add logic for selecting nodes with 'database-client' role to process
- incusd: Allow rebalancing when there are too many voters or stand-by nodes
- docs: Fix markdown linting issues for tables
- incusd/cluster: Rename dqlite to cowsql in header
- incus: Add incus admin os command
- i18n: Update translation templates
- incusd/cluster: Clarify comment for cluster rebalancing
- incusd/instance_patch: Fix description field not respecting PATCH semantics
- Translated using Weblate (Portuguese)
- client/oci: Allow OCI image names with a pinned hash
- doc: Add Rocky 10 Copr Repository
- shared/tls: Remove tls.Config.Time override
- build(deps): bump actions/setup-go from 5 to 6
- build(deps): bump actions/labeler from 5 to 6
- incusd/storage/lvm: Don't use pvcreate with cluster
- incus/admin/os: Fix list commands
- incus/admin/os: Don't require remote name in debug
- incus/admin/os: Rename commands for consistency
- doc: Update third party tool URLs
- doc: Hashicorp web servers don't like Github Runners
- incusd/api_os: Set X-IncusOS-Proxy prefix
- incus/export: Fail fast if target already exists
- i18n: Update translation templates
- tests: Cleanup backup files after use
- docs: Clarify clustered storage pools
- api: instance_limits_oom
- incusd/instance/validate: Add OOM priority validation
- incusd/instance/config: Add limits.memory.oom_priority config key
- doc: Update metadata
- incusd/instance/driver_common: Add setOOMPriority shared method
- incusd/instance/driver_lxc: Apply OOM priority to containers
- incusd/instance/driver_qemu: Apply OOM priority to VMs
- incusd/project/permissions: Forbid limits.memory.oom_priority in restricted projects
- api: backup_override_config
- client: Allow config/device override on backup import
- incus/import: Add override config and device
- incusd/instances/import: Add device and config overrides
- i18n: Update translation templates
- po: Manual import from weblate
- internal/incusos: Introduce IncusOS API client
- incusd/sys/os: Make use of IncusOS client
- incusd: Update for OS struct change
- incusd/networks: Use IncusOS API client
- incusd/storage: Add IncusOS service checks
- incusd/network: Add IncusOS service checks
- incusd/config: Prevent unsetting core.https_address on IncusOS
- incusd: Consistent spelling of IncusOS
- incusd/certificates: Add check for IncusOS
- incusd/db: Add UpdateStoragePoolConfig
- incusd/storage/drivers: Add SameSource field to Info struct
- incusd: Update configs of all members when SameSource is true
- incusd/storage: Fix unmount calls for ISO volumes
- incusd/storage/lvm: Fix locking changes
- incusd/instance/qemu: Re-enable vsock on Windows
- shared/idmap: Skip xattrs on EINVAL
- Makefile: Bump minimal Go to 1.24.7 and remove pins
- gomod: Update dependencies
- Makefile: Use latest go-swagger (for Go 1.25 support)
- Revert "github: Disable go-swagger on Go 1.25+"
- incusd/network/driver: Add support for network tunnels to OVN networks
- incusd/networks: Validate config keys only for ClientTypeNormal requests
- api: Add network_ovn_tunnels extension
- doc: Update config
- client/oci: Set the umoci logger on init
- incusd/instances/oci: Properly handle environment from profiles
- shared/api: Add missing YAML tag
- api: init_preseed_cluster_groups
- shared/api: Add support for cluster group preseeding
- client: Add support for cluster group preseeding
- doc/rest-api: Refresh swagger YAML
- client: Implement IdenticalCertificate
- incusd/cluster: Set IdenticalCertificate for intra-cluster connections
- incusd/cluster: Rework tlsTransport to handle cluster certificate validation
- incusd/cluster: Make use of updated tlsTransport
- gomod: Update dependencies
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
Homebrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.17.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 6.16 has been released¶
2025/08/29
はじめに ¶
Incus チームは、Incus 6.16 のリリースのアナウンスができてうれしいです!
このリリースでは、新しいストレージドライバー、再パックされた ISO に依存せずに Windows VM をインストールする機能、コンテナ内の一時ストレージのサポートが追加されています。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能 ¶
TrueNAS ストレージドライバー ¶
Incus で、リモートの TrueNAS ストレージサーバーをストレージプールとして使えるようになりました。
これは、TrueNAS が使用する ZFS ストレージドライバーと非常に似た動作をします。しかし、ローカルで ZFS とやりとりするのではなく、TrueNAS API を使用してさまざまなアクションをリモートでストレージサーバー上で実行します。そして、iSCSI を使用して TrueNAS からボリュームをエクスポートし、Incus サーバーへ接続します。
(Ceph や Linstor やクラスター化された LVM と並んで)リモートストレージドライバーとしてこれをクラスターで使用すると、データの移動が不要なため、サーバー間でインスタンスのシームレスなマイグレーションができるようになります。
注意: この機能は TrueNAS Scale のプレリリースバージョンに依存しています。
root@truenas-incus:~# incus storage create demo truenas source=test/demo truenas.host=192.0.2.10 truenas.api_key=MY-KEY truenas.allow_insecure=true
Storage pool demo created
root@truenas-incus:~# incus launch images:debian/13 d13 --storage demo
Launching d13
root@truenas-incus:~# incus list
+------+---------+---------------------+------------------------------------------------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+---------+---------------------+------------------------------------------------+-----------+-----------+
| d13 | RUNNING | 10.2.165.159 (eth0) | fd42:a815:51cf:d4bb:1266:6aff:fe51:ae56 (eth0) | CONTAINER | 0 |
+------+---------+---------------------+------------------------------------------------+-----------+-----------+
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/storage_truenas/
VM に対する USB CD-ROM の処理 ¶
ディスクデバイス向けの USB デバイスのセットアップを見直しました。
従来のように基本的な USB マスストレージドライバーを使うのではなく、USB ブロック転送レイヤーの一部を直接セットアップするようになりました。
この変更の主な利点は、USB バス上で VM に ISO をアタッチすると、仮想 CD-ROM ドライブが VM に正しく公開されるようになりました。
これにより、io.bus=usb
を使って VM に Windows のインストールメディアや、VirtIO ドライバーのメディアを直接アタッチし、distrobuilder
によるリパッケージを行った ISO を使う必要がなく、Windows を直接ブートして、インストールできるようになりました。
コンテナ向けの tmpfs
と tmpfs-overlay
ディスク ¶
コンテナで使用できる新しい「特別な」ディスクソースが 2 つサポートされるようになりました:
source=tmpfs:
source=tmpfs-overlay:
どちらも次のプロパティーをサポートします:
size
(tmpfs レイヤーのサイズ)initial.uid
(マウント時の初期ユーザー)initial.gid
(マウント時の初期グループ)initial.mode
(マウント時の初期パーミッション)path
(ディスクのマウントパス)
これは、コンテナに編集可能な /etc/fstab がなく、ブート時に init システムによってマウントが追加される OCI コンテナで特に有用です。
tmpfs-overlay
では、追加・変更を tmpfs レイヤーに保存することで、マウントパスの既存のコンテンツへのアクセスを維持できます。
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/devices_disk/
CLI でのコンソールの動作の設定 ¶
最近導入されたデフォルトの CLI 設定を拡張し、コンソールの動作を制御する設定オプションをいくつか追加しました。
console_type
(vga
とconsole
が設定可能)console_spice_command
(コマンドを設定可能。ソケットパスのプレースホルダー値としてSOCKET
を使用)
これらのオプションを使用すると、CLI 内でデフォルトのコンソールタイプを変更したり、SPICE を使って VGA コンソールに接続する際に実行されるコマンドを完全に上書きしたりできます
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- incus/cmd/incus/config_template.go: Adding ls alias to list command
- incus/cmd/incus/snapshot.go: Adding ls alias to snapshot command
- incus/cmd/incus/storage_volume.go: Adding ls alias to list command
- incusd/instance/lxc: Fix handling of multiple USB device removal
- Translated using Weblate (German)
- incusd/device: Fix logic for checking if parent is a bridge in IsPhysicalWithBridge
- incusd/device/disk: Enable posix ACL support for virtiofsd
- incusd/os: Forward within cluster
- incusd/ip/neigh: Fix MAC filtering
- incusd: Move IncusOS detection to OS struct
- incusd/networks: Filter network list on Incus OS
- incusd/storage: Fix EnsureMountPath to avoid resetting permissions
- shared/tls: Ignore expiration date of trusted certificates
- incus: Replace IsNetworkName with IsInterfaceName
- shared/validate: Remove unused IsNetworkName
- shared/validate: Implement IsAPIName
- doc/installing: Update Ubuntu versions in Zabbly repository
- incusd: Consistently validate object names
- tests: Fix invalid image alias name
- tests: We no longer allow slashes in zones
- incusd/instance: Move migration.stateful check to CanLiveMigrate
- incusd/instance/qemu: Fix zero-value check regression
- internal/instance: Add volatile..io.bus
- incusd/device/disk: Refactor bus=XXX setting logic
- incusd/network/bridge: Always set DHCPv6 dns-server field
- incusd/device/disk: Revamp virtiofs+9p handling
- doc: Update metadata
- incusd/instance/qemu: Allocate ports for 9p and virtiofs
- incusd/instance/qemu: Fix typing regression
- incusd/instance/qemu: Make virtiofs shares fully hotpluggable and refactor 9p logic
- Make the agent aware of the actual FSType
- incus-agent: Remove dual mount type handling
- shared/scriptlet: Move scriptlet utils to shared
- internal/server/scriptlet: Update usages
- incusd/sys/os: Tweak IncusOS detection
- Translated using Weblate (Japanese)
- generate-database: Fix sqlite3 error detection
- incusd/database: Re-generate code
- incusd/instances: Improve instance creation errors
- incusd/storage_volumes: Fix error message
- incusd/instance/qemu: Fix vTPM on arm64 systems
- incus/console: Add default console command in configuration file
- incusd/storage/zfs: Use compression and large-blocks on backups
- incusd/apparmor: Add support for abi4.0
- incusd/networks: Only include Incus OS interfaces if not already listed
- incusd/networks: Tweak access control
- incusd/network/sriov: Fix spacing
- incusd/network: Pass request type to validator
- tests/openfga: Tweak check (user is able to see local interfaces)
- incusd/network/ovn: Don’t validate uplink network on server-specific notification
- incusd/network/bridge: Don’t require dnsmasq on link-local IPv6
- build(deps): bump actions/checkout from 4 to 5
- docs: Clarify type and scope of user.* config keys
- incusd/server/network: Fix update config regression
- tests/basic_usage: Improve auto-restart test loop
- api: storage_driver_truenas
- incusd/storage/truenas: Introduce TrueNAS driver
- docs: Update word list
- docs: Add TrueNAS storage driver
- tests: Add TrueNAS tests (and tweak testsuite)
- incusd/resources: Clean golangci-lint
- internal/usbid: Clean golangci-lint
- incusd/resources: Move usbid as sub-package
- incusd: Move resources package to shared package
- shared/resources: Restrict to Linux
- dhcp: stop 60s renew spam; request 51/58/59, derive sane T1, add jitter
- incus/file: Add some examples with stdin/stdout
- i18n: Update translation templates
- incusd/apparmor: Don’t use abi4.0
- incusd/config: Fix import shadowing
- Translated using Weblate (Portuguese)
- Fix typo and add clarity for project param
- incusd/instance/lxc: Avoid issues with nested containers and ping group range
- doc: Mention nft in Docker part of firewall doc
- doc: Tweak Docker recommendations
- incusd/instance/qemu: Ensure cdrom is always read-only
- incusd/instance/qmp: Use USB block transport to handle CD-ROM
- incusd/instance/qemu: Fix USB CDROM handling
- incus/dhcp: run DHCP on all container interfaces and aggregate DNS from all leases
- incusd/storage: Restrict setting description to global record
- incusd/main_forknet: Fix gofumpt
- incusd/network: Restrict setting description to global record
- incusd/networks: Set the description when completing the record
- incusd/project: Don’t empty global default profile on force deletion
- doc/requirements: Document minimum OVS/OVN versions
- lxd-to-incus: Handle typo in trigger name
- incus/dhcp: default routes and multiple DHCP clients for OCI containers
- incusd/instance_exec: Relax connection timeout
- incusd/network: Fix logic for UsedByInstanceDevices
- incusd/network/ovn: Support for directional port groups
- incusd/network/acl: Support for directional port groups
- Makefile: Bump Go to 1.24.0
- gomod: Update dependencies
- github: Disable go-swagger on Go 1.25+
- github: Disable Linstor tests for now
- incusd/instance/utils: Don’t fail instance startup due to incomplete CPU baseline
- incusd/patches: Migrate port groups to directional
- incusd/device/disk: Add tmpfs support for disk devices
- gomod: Update dependencies
- incusd/auth/tls: Don’t spam with warnings
- incusd/fsmonitor: Fix handler issue when flooded
- incusd/device/nic: Don’t apply MTU if none detected
- incusd/ip/tuntap: Fix handling of Master property
- incusd/network/ovn: Fix behavior when ACL name is used as match source
- incusd/network/acl: Fix behavior when ACL name is used as match source
- api: container_disk_tmpfs
- doc/device: Add documentation for tmpfs disk
- tests: Add test for tmpfs disk
- doc/installing: Update Debian install instructions
- shared/api: Add missing Description field to InstanceSnapshots
- incusd: Correctly fill in the instance snapshot description
- doc/rest-api: Refresh swagger YAML
- incusd/cluster: Don’t use the proxy for internal connections
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
Homebrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.16.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 6.0.5 LTS リリースのお知らせ¶
2025/08/15
はじめに ¶
Incus チームは、Incus 6.0.5 のリリースのアナウンスができてうれしいです!
このリリースは、Incus 6.0 に対する 5 度目のバグ修正リリースです。Incus 6.0 は 2029 年 6 月までサポートされます。
変更点 ¶
いつもどおり、このバグ修正リリースは、安定性とセキュリティー強化にフォーカスを当てています。
データの移行や、データベースの変更を必要としない、ユーザー側の動作に予期しない変更を起こさないようなマイナーな改善もバックポートされています。
このような改善の数は、LTS ブランチ内での時間経過とともに減っていくでしょう。
このリリースのハイライトは次のとおりです:
- VM でのメモリーホットプラグのサポート
- ロギングサブシステムの再構築
- 複雑なネットワーク転送での SNAT のサポート
- すべてのコレクションに対するサーバーサイドフィルタリングの CLI サポート
- VM での Windows エージェントサポート
- incus-migrate のサポートの改善(追加ディスクや OVA など…)
- カスタムストレージボリュームでの SFTP API サポート
- インスタンスを分割イメージとして公開する機能のサポート
- インスタンスとボリュームバックアップの S3 アップロード
- より柔軟なスナップショット設定
コミットのすべてのリストは次のとおりです(翻訳なし):
すべてのChangeLogを見る
- incus/utils: Added support for server-side filtering by instance name
- incus/list: Added support for server-side filtering by instance name
- incus/image: Adjustments made after modifying getServerSupportedFilters
- tests: Adjustments made after modifying getServerSupportedFilters
- cmd/list: Support server-side filtering
- cmd/image: Support server-side filtering
- cmd/utils: Support server-side filtering
- internal/filter: Support server-side filtering
- tests: Added/Fixed tests for server-side filtering
- client: Add GetImagesAllProjectsWithFilter
- cmd/image: Use GetImagesAllProjectsWithFilter to filter images across all projects
- client: Make golangci-lint clean
- shared/api: Make golangci-lint clean
- shared/idmap: Remove unused rootfs argument to NewSetFromSystem
- incus-user: Update for change to shared/idmap
- incusd/sys: Update for change to shared/idmap
- shared/idmap: Rename IdmapStorageType to StorageType
- shared/idmap: Make golangci-lint clean
- incusd: Update for shared/idmap changes
- shared/ws: Make golangci-lint clean
- shared/ask: Remove deprecated functions (and clear golangci-lint)
- shared/validate: Make golangci-lint clean
- shared/tls: Make golangci-lint clean
- shared/osarch: Make golangci-lint clean
- shared/osarch: Rename ArchitectureId to ArchitectureID
- shared/simplestreams: Update for ArchitectureID
- incusd: Update for ArchitectureID
- client: Update for ArchitectureID
- incus-simplestreams: Update for ArchitectureID
- lxc-to-incus: Update for ArchitectureID
- internal/version: Update for ArchitectureID
- shared/osarch: Keep our all-caps architecture names
- incus: Make golangci-lint clean
- shared/subprocess: Make golangci-lint clean
- shared/simplestreams: Make golangci-lint clean
- shared/cliconfig: Make golangci-lint clean
- shared/ask: Make golangci-lint clean
- shared/util: Make golangci-lint clean
- shared/revert: Make golangci-lint clean
- shared/proxy: Make golangci-lint clean
- shared/logger: Make golangci-lint clean
- shared/archive: Make golangci-lint clean
- incusd/instance/lxc: Fix import shadowing in IdmappedStorage
- doc/rest-api: Refresh swagger YAML
- incusd/response: Remove redundant line break in error
- incusd/network/ovn: Add plumbing for state through OVN ACL functions
- incus-agent: Retry mounts to avoid kernel races
- incusd/instance: Add Name to ConfigReader interface
- incusd/storage: Use ConfigReader when possible
- incusd/response: Remove unused nolint
- incusd/storage: Add infrastructure to cache pre-fetch snapshot data
- incusd/instance: Use storage instance snapshot caching
- incusd/instance/lxc: Use existing storage pool in diskState
- incusd/storage/zfs: Implement snapshot size caching
- incusd/instance: Move instance disk usage to driver logic
- incusd/config: Update list of supported compressors
- incusd/project: Update list of supported compressors
- doc: Update configs
- incusd/operations: Fix WaitGet on op failure
- incusd/instance/lxc: Use pre-existing PATH when not overridden
- incusd/acme: Include CA in generate certificate
- shared/ask: Fix bad validation logic
- incus-migrate: Fix golangci-lint warnings
- incus-migrate: Rework command validation
- incus-migrate: Require an instance type
- incus-migrate: Clarify arguments
- client/incus: Fix non-constant format strings
- doc/cluster: mDNS setup for cluster access
- cmd/storage_volume: Support filtering by a single keyword
- incusd/instance/qemu: Clean leftover sockets on startup
- incusd: Implement Incus OS API forwarding
- incusd/network/bridge: Port to gendoc
- doc/network/bridge: Use gendoc
- doc: Use
$USER
instead of YOUR-USERNAME - doc: Ignore link that's blocking Azure
- incusd/storage: Avoid querying pending pool status
- incusd/network/common: Add gendoc comments for forward configurations
- doc/network/forward: Use gendoc for network forwards
- doc: Update configs
- api: server_logging
- incus/server/logging: Add new logging mechanism with syslog and loki support
- incus/server/config: Support for new logging.* config keys
- incusd: Use new logging mechanism
- incus/server/events: Fix issue with race condition
- incus/server/loki: Remove loki package
- doc: Documentation for new logging mechanism
- doc: Update configs
- incusd/device/tpm: Add gendoc comments
- doc: Update configs
- doc: Use gendoc for TPM devices
- incusd/firewall/nftables: Cleanup rule formatting
- incusd/firewall: Add basic rules on nftables
- incusd/storage/zfs: Make CacheVolumeSnapshots failures non-fatal
- api: network_forward_snat
- doc/network_forwards: Add snat key
- shared/api: Add SNAT to NetworkForwardPort
- doc/rest-api: Refresh swagger YAML
- incusd/network/common: Add validation for SNAT
- incusd/network: Pass SNAT field to firewall driver
- incusd/firewall: Add support for forward SNAT rules
- doc: Add SNAT/DNAT to wordlist
- incusd/apparmor/lxc: Allow write access to /proc/sys/user
- incusd/instance/lxc: Defer calls to the scheduler
- shared/archive: Prevent xattr errors from crashing unsquashfs
- incusd/storage/zfs: Extend use of the cache
- incusd/instance: Pre-fetch snapshot data in RenderFull
- incus-simplestreams: Add import and delete aliases to add and remove
- incus: Add remove alias to delete
- incusd/http: Support passing bearer authentication token through access_token parameter
- tests: Test the access_token handling
- incusd/instance/qmp: Add utility functions for memory manipulation
- incusd/instance/drivers: Extract getCPUOpts for reuse
- incusd/instance/drivers: Add support for memory hotplug
- api: memory_hotplug
- tests: Add tests for memory hotplug helper functions
- incusd/instances_post: Properly handle refresh migrations
- incusd/storage/zfs: Rework ZFS setting enforcement
- incusd: Remove old routing logic
- incusd/instances_post: Fix bad function call
- incusd/devices: Don't require a serial number for USB hotplug
- Move tls testing functions to tlstest
- incusd/device/proxy: Add gendoc comments
- doc: Update generated configs
- doc/devices/proxy: Use gendoc for docs
- Remove Rican7/retry dependency
- shared/tls: Fix gofumpt
- incusd/device/gpu: Added gendoc comments
- doc: Updated configs
- doc: Use gendoc for gpu
- incusd/device/nic_bridged: Port to gendoc
- incusd/device/nic_macvlan: Port to gendoc
- incusd/device/nic_sriov: Port to gendoc
- incusd/device/nic_ovn: Port to gendoc
- incusd/device/nic_physical: Port to gendoc
- incusd/device/nic_ipvlan: Port to gendoc
- incusd/device/nic_p2p: Port to gendoc
- incusd/device/nic_routed: Port to gendoc
- doc/devices_nic: Update to use gendoc
- doc: Update configs
- incusd/device: Replace j-keck/arping with mdlayher/arp
- Makefile: Hold back go-jose
- gomod: Update dependencies
- incusd/sys: Remove gocapability dependency
- gomod: Update dependencies
- incusd/server/device/infiniband: Added gendoc for parent, mtu, hwaddr
- incusd/device/device_load.go: Added gendoc for nicType
- doc: Update configs
- doc: Use gendoc for infiniband
- shared/validate: Move to adhocore/gronx
- incusd: Move to adhocore/gronx
- gomod: Update dependencies
- incus/storage: Correct help messsage for
incus storage list
- i18n: Update translation templates
- api/scriptlet: Add yaml struct tags
- incusd/storage/migration: Check instance size during migration
- incusd/device/disk: Fix registration of custom volumes
- client: Add server-side filtering for profiles
- incus/profile: Use server-side filtering
- Fix reference passing when yaml unmarshal
- Limit new() calls
- incusd/network/bridge: Fix children interface delete issue
- doc/reference/instance: Clarify VM memory behavior
- incus/admin/init: Allow passing a file to --preseed
- incusd/network/ovn: Notify whole cluster on uplink changes
- incus: Use a random image in first use message
- incus-benchmark: Replace default distro
- incus: Replace distro examples
- doc: Replace Ubuntu in documentation examples
- doc/requirements: Refresh a bit
- scriptlet: Return proper error
- incusd/instance: Also consider local CPU flags
- incusd/instance/qemu: Cap maxmem to host mem maximum
- incusd/auth/oidc: Update for current zitadel
- cli/list: Add markdown format support
- i18n: Update translation templates
- cmd/list: Crude tablewriter error handling
- client: Add server-side filtering for networks
- incus/network: Use server-side filtering
- i18n: Update translation templates
- incus/network: Add config-based server-side filtering
- doc: Fix default value of ipv4.dhcp.gateway to IPv4 address
- doc: Update configs
- doc: Fix default value of ipv6.routes network_bridge
- doc: Update configs
- doc: Fix Debian 12 nickname
- incusd/dns: fix typo in error log
- incusd/device/pci: Port to gendoc
- doc: Update PCI documentation to use Gendoc
- doc: Update configs
- incusd/device/infiniband: Fix gendoc entity
- incusd/device/tpm: Fix gendoc entity
- doc: Update config
- doc: Update TPM device gendoc
- doc: Update Infiniband device gendoc
- incusd: Rename reverters from revert to reverter
- incus-user: Rename reverters from revert to reverter
- incus-agent: Rename reverters from revert to reverter
- internal/linux: Rename reverters from revert to reverter
- incusd: Rename reverters from revert to reverter
- incusd: Use errors.Is instead of direct error comparison Replace direct error comparison with errors.Is checks to avoid potential bugs with wrapped errors.
- incusd: Use errors.As instead of type switching Replace type switching on an error with errors.As to avoid potential bugs.
- incus-user: Use errors.Is instead of direct error comparison
- incus: Use errors.Is instead of direct error comparison
- internal/server: Use errors.Is instead of direct error comparison
- internal/linux: Use errors.Is instead of direct error comparison
- internal/eagain: Use errors.Is instead of direct error comparison
- internal/server: replace manual unwrap call with errors.As
- internal/rsync: replace manual unwrap call with errors.As
- internal/server: Use errors.As instead of type switching Replace type switching on an error with errors.As to avoid potential bugs.
- internal/linux: Use errors.As instead of type switching Replace type switching on an error with errors.As to avoid potential bugs.
- internal/server: make all methods on the zfs struct take a pointer
- internal/server: change method isAllowed on the dnsHandler struct into a static function
- shared/api: unify methods declared on the Instance struct to all take a pointer
- generate-database: unify methods declared on the Field struct to all take a pointer
- internal/server: refactor getting heartbeat mode name into a function
- internal/server: rename close to closeFunc
- internal/version: Rename variables to better represent what they are used for
- client: Rename variables because error is a builtin interface name
- incusd: Rename variables because recover and min are builtin functions
- incusd: Rename variables because they collide with builtin function names
- generate-database/db: Un-export joinConfig
- incusd: Introduce patchRun type
- incusd: Remove unused parameter names in cobra commands
- incusd: Remove unused parameters or rename unused parameters to _
- incusd: Un-export command functions
- incusd: Don't export internal websocket struct functions
- incusd: Don't export internal migration struct functions
- incusd: Fix import shadowing
- incusd/instance/drivers: Rewrite config entries as maps
- incusd/scriptlet/qemu: Remove legacy wrapper
- incusd/instance/drivers: Fix tests
- incusd/instance/drivers: Use fmt.Fprintf
- client: Add server-side filtering for storage buckets
- incus/storage_bucket: use server-side filtering
- incusd/instance/qemu: Handle agents with limited information
- incus/file: Handle Windows
- incus-agent: Split OS specific logic
- incus-agent: Set base directory
- incus-agent: Reduce code duplication
- incus-agent/exec: Move away from os.File
- incus-agent: Add initial Windows support
- incusd/instance/qemu: Add support for agent over HTTPS
- incusd/instance/qemu: Add agent drive support for Windows
- github: Build incus agent for Linux and Windows
- incusd: remove conditional check that is always true
- incusd: remove outdated comment about no longer existing force option
- incusd: remove code that was unreachable in api_internal.go
- incusd: remove code that was unreachable in api_internal.go
- shared/archive: remove unnecessary err check
- incusd: refactor condition checks that are always true or false respectively
- cmd/incus: refactor unnecessary err condition checks
- internal/linux: refactor unnecessary err condition check
- client: remove unnecessary err check and unused variable ioErr
- incusd: refactor process kill error being ignored
- incusd/instance: fix device finding logic
- incusd/instance/drivers: Make test ignore host-nodes order
- incus: refactor admin_init.go config initialization
- incusd/network/ovn: Wait up to 10s for OVN northd to allocate an IP
- incusd/dnsmasq: refactor DHCPValidIP condition checks
- incusd: Prevent panic when VolumeSize is missing
- incusd/migrate: Set write time limit for sendControl method
- client: Add CreateStoragePoolVolumeFromMigration
- incus-migrate: Prepare migration code for adding custom volume support
- incus-migrate: Support for uploading filesystems and disks as custom volumes
- incusd/network/bridge: Add missing line breaks
- client: Add GetProjectsWithFilter
- incus: Add filtering support for project list
- incusd/network/ovn: Port to gendoc
- doc/reference/network_ovn: Port to gendoc
- doc: Update configs
- incusd/network/bridge: Add BGP keys to gendoc
- doc/reference/network_bridge: Add BGP configuration
- incusd/network/physical: Port to gendoc
- doc/reference/network_physical: Convert to gendoc
- doc: Update configs
- Remove gopkg.in/tomb.v2 dependency
- incusd/instance/qemu: Don't allow hotplug when at maxmem
- incusd/device/nic_routed: Fix spacing
- incusd/network: Clear gofumpt
- api: instance_nic_routed_host_tables
- incusd/server/device/nic_routed.go: Added host_tables
- incusd/device/nic_routed: Deprecate ipv4.host_table and ipv6.host_table
- doc: Update configs
- incusd: rename variable
mux
torouter
so it does not collide with the package of the same name - cmd/incus-agent: rename variable
mux
torouter
so it does not collide with the package of the same name - incusd: rename all instances of sha256.New() to hash256 so they dont collide with the package name
- client: rename all instances of sha256.New() to hash256 so they dont collide with the package name
- cmd/incus-migrate: add missing switch case with explicit comment
- incusd: internalize the default case into the switch so it covers all iota constants
- internal/filter: internalize the default case into the switch so it covers all iota constants
- incusd: add missing err handling for transactions
- incusd/storage: Fix migration error due to rounding
- incusd/storage/zfs: Optimize snapshot deletion
- incusd: add more ErrorList tests for error formatting
- incusd: refactor Error implementation of ErrorList
- incusd: make all functions on ErrorList take a pointer receiver
- incusd: rename Error struct and make it private
- internal/iprange: add tests for the iprange.Range struct
- internal/dnsutil: remove unused package dnsutil
- incusd: rename instanceActionToOptype to instanceActionToOpType
- incusd/instance/drivers: Rewrite QEMU config override logic
- incusd/instance/drivers: Adapt the tests to the new override logic
- incusd/instance/drivers: Drop old RegEx parser and return proper errors
- incusd/instance/drivers: Update tests
- tools: Add govulncheck
- incusd: remove redundant size 0 initialization for maps
- cmd/generate-config: remove redundant size 0 initialization for maps
- cmd/lxc-to-incus: remove redundant size 0 initialization for maps
- incusd/certificates: Properly handle PEM encoding on POST
- incusd/network/macvlan: Add gendoc comments
- doc: Update configs
- doc: Use gendoc for macvlan
- incusd/instance/qemu: Don't allow QEMU RSS to exceed memory limit
- lint: Exclude generated docs from codespell
- lint: Exclude generated manpages from codespell
- incusd/network/macvlan: Run gofumpt
- client: Add server-side filtering for certificates
- incus/config_trust: Use server-side filtering
- incus-migrate: introduce Migrator interface with separate structs
- incus-migrate: Add support for additional disks
- cmd/generate-database/lex: Support pluralizing entities ending in y
- cmd/generate-database/db: Support multi-word association tables
- cmd/generate-database/db: Don't duplicate join statements
- incusd/dns: Restart DNS server on failure
- incusd/instance/qemu: Limit memory hotplug slots to 8
- incusd/network/sriov: Port to gendoc
- doc: Use gendoc for network sriov
- doc: Update configs
- api: instance_publish_split
- shared/api: Add field for image type to ImagePost struct
- incusd/instance: Change instance interface to add support for exporting to split images
- incusd/instance/lxc: Add support for publishing split images for containers
- incusd/instance/qemu: Add support for publishing split images for VMs
- incusd/images: Add support for publishing split images
- incus/publish: Add new flag to publish command for split images
- shared/cliconfig: Added DefaultSettings to Config Struct
- incus: Added defaultListFormat helper function
- incus: Added Default List Format calls in List Commands
- tests: Add test for publishing split images
- i18n: Update translation templates
- doc/rest-api: Refresh swagger YAML
- incusd/device/sriov: Handle cards without configurable spoof checking
- incusd/firewall/nftables: disable UDP checksum validation for packets on bridged network
- cmd/generate-database/db: Use snake case entity names for ID column names
- incusd/db/network_acls: Move to generated functions
- incusd: Switch to new GetNetworkACLs
- api: init_preseed_certificates
- client: Add certificate handling to ApplyServerPreseed
- shared/api: Add Certificates to InitLocalPreseed
- doc/rest-api: Refresh swagger YAML
- incusd: Switch to new GetNetworkACLsAllProjects
- shared/api: Add URL function on NetworkACL
- incusd: Switch to new GetNetworkACLURIs
- incusd: Switch to new DeleteNetworkACL
- incusd: Switch to new RenameNetworkACL
- incusd: Switch to new CreateNetworkACL
- incusd: Switch to new GetNetworkACLNameAndProjectWithID
- incusd: Switch to new GetNetworkACLIDsByNames
- incusd: Move remaining network ACLs DB functions
- incusd: Move cluster resource caching logic
- lint/govulncheck: Don't test stdlib
- incus: Move sshfs helpers to utils
- CONTRIBUTING: Clearly ban LLMs
- doc/wordlist: Extend acronyms
- incusd/response: Move SFTPResponse
- api: custom_volume_sftp
- incusd/storage_volumes: Add SFTP endpoint
- client: Add GetStoragePoolVolumeFileSFTPConn
- incus: Add incus storage volume file mount
- doc/rest-api: Refresh swagger YAML
- incus/remote: Add "get-client-certificate" and "get-client-token"
- incus-migrate: Add support for .OVA import
- incus: Add add aliases to incus commands
- incus: Add create aliases to add commands
- incus: Add delete and rm aliases to remove commands
- incus: Add remove aliases to delete commands
- incus-agent: Skip /dev/incus on Windows
- incusd/instance/qemu: Don't block on Windows agent
- internal/util: Add Incus OS detection
- incusd: Use IsIncusOS
- incusd/metrics: Include OS metrics on Incus OS
- incusd/instance/lxc: Refactor inheritInitPidFd
- Removed useless else in Makefile
- incusd/storage/ceph: Fix parent tracking for VMs
- incusd/storage/ceph: Fix typo in parseParent
- tests: Switch clustering test subnet
- incusd: Simplify code by using modern constructs
- internal/util: Simplify code by using modern constructs
- internal/linux: Simplify code by using modern constructs
- internal/filter: Simplify code by using modern constructs
- generate-config: Simplify code by using modern constructs
- generate-database: Simplify code by using modern constructs
- incus-agent: Simplify code by using modern constructs
- incus-benchmark: Simplify code by using modern constructs
- incusd: Simplify code by using modern constructs
- lxc-to-incus: Simplify code by using modern constructs
- incus: Simplify code by using modern constructs
- shared/api: Simplify code by using modern constructs
- shared/cliconfig: Simplify code by using modern constructs
- shared/idmap: Simplify code by using modern constructs
- shared/ioprogress: Simplify code by using modern constructs
- shared/osarch: Simplify code by using modern constructs
- shared/subprocess: Simplify code by using modern constructs
- test: Simplify code by using modern constructs
- incusd/instances: Tweak storage migration errors
- incusd/instances_post: Prevent pointless device overrides
- incusd/instance: Fix incorrect cluster.Connect call
- incusd/instance/qemu: Enable invtsc CPU extension when not migratable
- client: Use the umoci Go package instead of the command
- gomod: Update dependencies
- tests: Update godeps
- tests: Skip rootless-containers/proto/go-proto (Apache 2.0)
- internal/server/device: remove no-op rewriteHostAddr
- incusd/forkproxy: join the correct mntns for listen
- tests: add tests for bind=container with proxy device
- client: Add network address set functions
- client: Fix required extension for GetNetworkAddressSetsAllProjects
- client: Don't needlessly use format string functions
- tests: Don't needlessly use format string functions
- lxd-to-incus: Don't needlessly use format string functions
- lxc-to-incus: Don't needlessly use format string functions
- incus-simplestreams: Don't needlessly use format string functions
- generate-config: Don't needlessly use format string functions
- generate-database: Don't needlessly use format string functions
- incus-agent: Don't needlessly use format string functions
- fuidshift: Don't needlessly use format string functions
- incus-user: Don't needlessly use format string functions
- incus-migrate: Don't needlessly use format string functions
- incus: Don't needlessly use format string functions
- shared/validate: Don't needlessly use format string functions
- shared/util: Don't needlessly use format string functions
- shared/tls: Don't needlessly use format string functions
- shared/tcp: Don't needlessly use format string functions
- shared/subprocess: Don't needlessly use format string functions
- shared/simplestreams: Don't needlessly use format string functions
- shared/logger: Don't needlessly use format string functions
- shared/ioprogress: Don't needlessly use format string functions
- shared/idmap: Don't needlessly use format string functions
- shared/cliconfig: Don't needlessly use format string functions
- shared/cancel: Don't needlessly use format string functions
- shared/ask: Don't needlessly use format string functions
- shared/archive: Don't needlessly use format string functions
- shared/api: Don't needlessly use format string functions
- internal/util: Don't needlessly use format string functions
- internal/usbid: Don't needlessly use format string functions
- internal/rsync: Don't needlessly use format string functions
- internal/netutils: Don't needlessly use format string functions
- internal/migration: Don't needlessly use format string functions
- internal/linux: Don't needlessly use format string functions
- internal/instance: Don't needlessly use format string functions
- internal/filter: Don't needlessly use format string functions
- internal/cmd: Don't needlessly use format string functions
- incusd: Don't needlessly use format string functions
- incus-migrate: Prompt for cluster target
- incus/instance/qmp: Implement our own QMP client
- incusd/instance/qmp: Add tests for in-house QMP
- incusd/instance/qmp: Switch to our own QMP client
- gomod: Update dependencies
- incusd/instance/qmp: Don't export internal QMP implementation
- Make sure limits.memory <= root.size.state
- incusd/instance/qmp: if else if to switch case
- incusd/instance/qmp: Remove weird qemu qmp bug handling
- incusd/instance/qmp: Refactor qmpWriteMsg
- incusd/db/node: Add GetPendingNodeByName
- api: network_ovn_external_nic_address
- incusd/device/nic_ovn: Added the two new nic options
- incusd/network/ovn: Add support for applying external address
- doc: Update config
- incusd/db/cluster: Update generated files
- api: network_physical_gateway_hwaddr
- incusd/network/ovn: Bump base schema to 23.03.0
- incusd/network/physical: Add gateway hwaddr config
- incusd/network/ovn: Add StaticBinding functions
- incusd/network/ovn: Add support for static MAC binding
- doc: Update config
- typo: mountabble -> mountable
- typo: DIsk -> Disk
- typo: mount -> unmount
- incusd/storage: fix squashfs unpacking to NFS destinations
- incusd/cluster: Add support for pending nodes in Leave and Purge functions
- client: Add DeletePendingClusterMember
- incusd: Remove cluster member on join failure
- incusd/instance/qmp: Associate request/reply with a command ID
- incusd/instance/qmp: Add command ID to runWithFile
- incusd/instance/qmp: Add command ID to RunJSON
- incusd/instance/qemu: Use switch statement
- internal/instance: Add RTC volatile keys
- incusd/instance/qemu: Handle RTC base adjustments
- doc: Update config
- incusd: Return empty slice instead of nil when no storage pool is present
- incusd/instance/drivers: Clear the volatile.cpu.nodes if needed
- incusd/storage/drivers: Add support for specifying username in CephFS commands
- incusd/device: Pass username in CephFS commands
- incusd/db/cluster: Rename network ACL files
- incusd/db/cluster: Port load balancers to database generator
- vscode: Add VSCode launch.json for incusd "Run and Debug" functionality
- incusd: Update for generated load-balancer functions
- incus/network_zone: Fix typo in help description
- incusd/db: Port network zone to database generator
- incusd: Port to new database functions
- incusd/instance/drivers: Allow updating root disk size and root io.bus simultaneously
- incusd/db: Fix network ACL generation
- incusd/db: Properly remove node/location from load balancers
- incusd/network/load_balancer: Fix update logic
- incusd/network: Fix ACL regression
- incus: Make sure we parse the config early enough
- incus/main_aliases: Avoid parsing loops
- incusd/instance/qemu: Skip invtsc on non-x86 and when running nested
- incusd/instance/qmp remove net Conn
- i18n: Update translation templates
- shared/api: Add network address sets
- doc/rest-api: Refresh swagger YAML
- api: backup_s3_upload
- shared/api: Add backup target for instance and volume
- doc/rest-api: Refresh swagger YAML
- incusd/backup: Add upload function
- incusd: Add backup upload logic
- incusd/device/nic_physical: Check for parent being a bridge
- incusd/device/nic_physical: Handle managed physical network being a bridge
- incusd/network/ovn: Add dhcpv6_stateless flag
- incusd/network/ovn: Tweak DNS server logic
- incusd/network/ovn: Set stateless DHCPv6 flag
- incusd/server/network: correct complement range calculation for DHCP reservations
- test/storage/zfs: add test for incus:content_type after clone
- incusd/storage/zfs: Fix missing incus:content_type after cloning a custom volume
- incusd/instance/qmp move logfile to qmp
- incusd/instance/qmp add qmp log implementation
- incusd/instance/qmp base qmp log on new implementation
- incusd/instances: Fix operation plumbing
- incusd/instance/qemu/qmp: Add MigrateSetParameters
- incusd/instance/qemu: Tweak migration parameters
- incusd/instance/qemu/qmp: Add QueryMigrate
- incusd/instance/qemu: Report migration progress
- incus/profile: Fix a typo in profile set usage text
- i18n: Update translation templates for profile set cmd
- incusd/storage: Handle missing storage bucket listener
- incusd/instance/qmp added qmp event log
- incus-migrate: Fix calculating volume size for block device
- incusd/instance/qmp: Prevent initialization of qmpLog with an empty log file path
- incus/info: Fix --show-log
- incusd: Remove target check when server clustered
- client: Don't swallow error if incusParseResponse is successful
- incusd/cluster: Return the cluster certificate after bootstrap
- incusd/network/ovn: Fix regression in stateful DHCPv6 handling
- incusd/db/cluster: Port network peer to database generator
- incusd: Update for new network peer functions
- gomod: Update dependencies
- incusd/apparmor/forkproxy: Expand /dev exception
- internal/instance: Add exported error
- incus/snapshot: Implement --expiry
- incus/storage/snapshot: Implement --expiry
- i18n: Update translation templates
- api: snapshot_manual_expiry
- doc/storage: Add snapshots.expiry.manual
- internal/instance: Add snapshots.expiry.manual
- doc: Update config
- incusd/storage: Add snapshots.expiry.manual validation
- incusd/instance_snapshot: Add snapshots.expiry.manual
- incusd/storage_volume_snapshot: Add snapshots.expiry.manual
- shared/tls: Export TLSConfigWithTrustedCert
- internal/server/db/cluster: Generate functions using DB generator
- incusd/scriptlet: Allow sets
- internal/server/network: Port to generated functions
- lxc-to-incus: Add lxc.apparmor.allow_nesting
- tests: Workaround old socat bug
- tests: Update for newer easyrsa
- tests: Recent XFS requires a minimum volume size of 300MiB
- github: Switch tests to Ubuntu 24.04
- api: resources_cpu_address_sizes
- incusd/resources: Track CPU address sizes
- incusd/instance/qemu: Be smarter about max memory hotplug
- doc/rest-api: Refresh swagger YAML
- incusd/instance/qemu: Cap hotplug memory to 1TB
- incusd/cluster: Fix incorrect handling of server address
- incusd/instance/qmp: Fix typo
- incusd/device/disk: Allow degraded zpools
- incusd/storage_volumes: Fix cross-project cluster volume copy/move
- incusd/firewall/nftables: Fix rule ordering for ARP/NDP
- incusd/firewall/nftables: Fix ordering of basic rules
- incusd/storage/lvm: Avoid concurrent activation/deactivation
- devcontainer: Add gofumpt
- incus/config/set: Add example using stdin
- i18n: Update translation templates
- incusd/instance/qemu: Only compress qcow2 if publishing a split image
- incusd/instance/qemu: Don't flood the debug log
- incusd/storage/zfs: Handle re-use of delegated dataset
- incus/file: Remove OS-specific handling from SSHFS logic
- api: disk_attached
- incusd/ip/utils: Switch to netlink
- incusd/ip/addr: Switch to netlink
- incusd/ip/class: Switch to netlink
- incusd/ip/filter: Switch to netlink
- incusd/ip/link: Switch to netlink
- incusd/ip/neigh: Switch to netlink
- incusd/ip/neigh_proxy: Switch to netlink
- incusd/ip/qdisc: Switch to netlink
- incusd/ip/route: Switch to netlink
- incusd/ip/tuntap: Switch to netlink
- incusd/ip/vdpa: Switch to vishvananda/netlink library instead of doing netlink ourselves
- incusd/ip: Refactor family from string to
Family
type - incusd/ip: Merge GetLinkInfoByName and LinkFromName into LinkByName
- Use net.IP and net.IPNet instead of strings
- incusd/instance/qemu: On standalone systems, cap hotplug memory to system
- generate-database: Add create_timestamp and update_timestamp
- incusd/ip: Ignore ESRCH on route deletion
- incusd/ip: All multicast needs to be configured as a flag
- incusd/patches: Fix empty JSON columns
- incusd/instance/qemu: Fix memory calculation logic
- shared/idmap: Skip ACLs that are out of range
- incusd/device/nic_ovn: Fix bad check
- incusd/ip: Fix TC regressions
- incusd/device/nic_ovn: Allow specifying static IPv4/IPv6 when DHCP is disabled
- incusd/storage/lvm: Don't rely on udev paths
- cmd/incus_agent: Replace gorilla/mux with http.ServeMux
- client: Fixed non-constant format string in call to fmt.Errorf
- incusd/instance/qmp/log: Don't crash on log Write calls after Close
- incusd: Cluster join, ensure server address
- incusd: Cluster join, check cluster.https_address
- incusd: Centralize check for node specific network config
- incusd: Make network config keys node specific
- incusd/ip: All multicast needs to be configured after link creation
- doc: Pin a working version of the sphinx extensions
- incusd/instance/lxc: Fix usage reporting on relative disks
- internal/instance: Introduce SplitVolumeSource
- incusd: Use SplitVolumeSource
- i18n: Updated format argument descriptions
- incus/project/get-current: Rely on server reported project
- incus/remote: Support keepalive flag
- i18n: Update translation templates
- incusd/cluster/config: Update certificate also on change of acme.http.port
- incusd/instance_logs: Perform stricter path validation
- [lxd-import] lxd/daemon: Validate browser fetch metadata if supplied to reject non-same-origin requests
- [lxd-import] test/suites/serverconfig: Check fetch metadata header is validated
- incusd/dev_incus: Add extra validation for monitor
- incusd/device/disk: Add attached configuration key
- incusd/instance/qemu: Refactor qmp.Connect calls
- incusd/instance/qemu: Handle attached state statically
- incusd/images: Restrict public image listing to default project
- incusd/images: Use identical errors for all not-found cases on public endpoints
- internal/util: Add recursion limit to RenderTemplate
- internal/util: Tweak common pongo2 parser to block dangerous functions
- incus/list: Fix validation of 'L' shorthand column
- tests: only run tests if ovn is available
- incus/server: fix scan order
- incusd/instance/qemu: Rework ejection logic and pass ejection handler
- incusd/device/disk: Add live attach/detach logic
- doc: Update metadata
- incusd/instance/qemu: Add indirection level to detachDisk
- incusd/instance/agent-loader: Use ISO label rather than disk id
- incusd/storage: Fix ISO renaming
- incusd/project: Skip processing 'limits.processes' for VM instance types
- incusd/instance: Add 'limits.memory.hotplug' config
- incusd/instance/drivers: Support for 'limits.memory.hotplug' config
- api: limits_memory_hotplug
- doc: Update configs
- incusd/device/config: Fix issue with live updating of user keys
- incusd/device/disk: Pass nil if read/write limits are not set
- incusd/instance/drivers: Prevent calling 'deviceAttachBlockDevice' on the root disk
- incusd/instance: Allow setting lxc.net config keys through raw.lxc
- incusd/apparmor/qemu: Allow reading gid_map/uid_map
- incusd/apparmor/qemuimg: Fix typo in rules
- doc/instances_create: Extend the Incus VM agent instructions
- client: Add GetClusterMembersWithFilter
- incusd/cluster: Add server-side filtering
- incus/cluster: Use server-side filtering
- doc/rest-api: Refresh swagger YAML
- client: Add GetStoragePoolsWithFilter
- incus/storage: Use server-side filtering
- i18n: Update translation templates
- incusd/ip: Fix filtering of routes by interface
- incusd/operations: Add IsSameRequestor
- incusd/instance_console: Ensure requestor match
- incusd/instance_exec: Ensure requestor match
- incusd/auth/openfga: Restrict operations and events access
- incusd/auth/openfga: Rebuild model
- incusd/db/network_peers: Fix querying of integrations
- api: disk_wwn
- shared/validate: Add IsWWN
- incusd/device/disk: Add wwn property
- incusd/instance/qemu: Add support for setting WWN
- doc: Update config
- incusd/network/bridge: Allow automatic host-specific IPv6 addresses
- incusd/auth/oidc: Expose scopes list
- client: Use server-advertised OIDC scopes
- incusd/instance/qmp: Properly handle lost connections
- incusd/instance/qmp: Fix monitor failure test
- incusd/instance/qemu: Fix lifecycle events
- shared/cliconfig: Add support for credentials helper
- client/oci: Refactor skopeo logic and add credentials support
- incusd/device: Add IsPhysicalNICWithBridge and make hwaddr optional
- incusd/instance/drivers: Fill the MAC address for physical NIC with bridge parent
- api: server_logging_webhook
- incusd/logging/loki: Set default retry
- incusd/logging/webhook: Initial webhook logger
- doc: Update config
- doc/wordlist: Add webhook
- incusd/device/disk: prevent file mounts on VMs
- incusd/devices/disk: Improve documentation for the path key
- doc: Update metadata
- doc: Sort word list
- tests: Bump cleanup timeouts
- tests/clustering: Use elif in driver conditions
- incusd/instance/qemu: Cleanup volume eject/detach logic
- incusd/db/images: Associate image with default profile from default project
- incusd/db/images: Set cached option for projects with 'features.images' disabled
- incus-agent: Handle path mount removal
- incus-agent/events: Remove fmt import
- test: Fix mountpoint detection logic
- incusd/instance/lxc: Only remove mountpoints in /dev
- shared/cliconfig: Introduce GetClientCertificate
- incus/remote: Use GetClientCertificate
- tests: Standardize indentation
- client: Add SkipGetEvents
- incusd: Consistently set SkipGetEvents and SkipGetServer
- client: Add configurable temp directory
- incusd/daemon_images: Set temporary image path
- incus/cmd/incus/config_template.go: Adding ls alias to list command
- incus/cmd/incus/snapshot.go: Adding ls alias to snapshot command
- incus/cmd/incus/storage_volume.go: Adding ls alias to list command
- incusd/instance/lxc: Fix handling of multiple USB device removal
- incusd/device: Fix logic for checking if parent is a bridge in IsPhysicalWithBridge
- incusd/device/disk: Enable posix ACL support for virtiofsd
- incusd/os: Forward within cluster
- incusd/ip/neigh: Fix MAC filtering
- incusd: Move IncusOS detection to OS struct
- incusd/networks: Filter network list on Incus OS
- incusd/storage: Fix EnsureMountPath to avoid resetting permissions
- shared/tls: Ignore expiration date of trusted certificates
- incus: Replace IsNetworkName with IsInterfaceName
- shared/validate: Remove unused IsNetworkName
- shared/validate: Implement IsAPIName
- doc/installing: Update Ubuntu versions in Zabbly repository
- incusd: Consistently validate object names
- tests: Fix invalid image alias name
- tests: We no longer allow slashes in zones
- incusd/instance: Move migration.stateful check to CanLiveMigrate
- incusd/instance/qemu: Fix zero-value check regression
- internal/instance: Add volatile.
.io.bus - incusd/device/disk: Refactor bus=XXX setting logic
- incusd/network/bridge: Always set DHCPv6 dns-server field
- incusd/device/disk: Revamp virtiofs+9p handling
- doc: Update metadata
- incusd/instance/qemu: Allocate ports for 9p and virtiofs
- incusd/instance/qemu: Fix typing regression
- incusd/instance/qemu: Make virtiofs shares fully hotpluggable and refactor 9p logic
- Make the agent aware of the actual FSType
- incus-agent: Remove dual mount type handling
- shared/scriptlet: Move scriptlet utils to shared
- internal/server/scriptlet: Update usages
- incusd/sys/os: Tweak IncusOS detection
- generate-database: Fix sqlite3 error detection
- incusd/database: Re-generate code
- incusd/instances: Improve instance creation errors
- incusd/storage_volumes: Fix error message
- incusd/instance/qemu: Fix vTPM on arm64 systems
- incus/console: Add default console command in configuration file
- incusd/storage/zfs: Use compression and large-blocks on backups
- incusd/apparmor: Add support for abi4.0
- incusd/networks: Only include Incus OS interfaces if not already listed
- incusd/networks: Tweak access control
- incusd/network/sriov: Fix spacing
- incusd/network: Pass request type to validator
- tests/openfga: Tweak check (user is able to see local interfaces)
- incusd/network/ovn: Don't validate uplink network on server-specific notification
- incusd/network/bridge: Don't require dnsmasq on link-local IPv6
- build(deps): bump actions/checkout from 4 to 5
- docs: Clarify type and scope of user.* config keys
- incusd/server/network: Fix update config regression
- tests/basic_usage: Improve auto-restart test loop
- incusd/resources: Clean golangci-lint
- internal/usbid: Clean golangci-lint
- incusd/resources: Move usbid as sub-package
- incusd: Move resources package to shared package
- shared/resources: Restrict to Linux
- incusd/firewall/nftables: Fix golangci-lint
- incus/file: Add some examples with stdin/stdout
- i18n: Update translation templates
- incusd/apparmor: Don't use abi4.0
- incusd/config: Fix import shadowing
パッケージ作成者への注意: Incus は、ACME サポートのロジックをすべて incusd
バイナリー自体に組み込むのではなく、外部の lego
コマンドに依存するようになりました。ACME 証明書の発行サポートを維持したい場合、Incus は lego に依存することに注意してください。
サポートとアップグレード ¶
Incus 6.0 ブランチは 2029 年 6 月までサポートされます。常に最新の LTS バグ修正リリースを実行することを強く推奨します。
Downloads¶
- リリース tarball : incus-6.0.5.tar.xz
- GPG シグネチャー」 : incus-6.0.5.tar.xz.asc
感謝 ¶
この LTS リリースアップデートは、Sovereign Tech Fund(現在は Sovereign Tech Agency の一部)からの資金提供により実現しました。
Sovereign Tech Fund は、オープンデジタルインフラストラクチャーの開発、改良、保守をサポートします。その目標は、セキュリティ、レジリエンス、技術の多様性、コードの背後にいる人々に焦点を当て、オープンソースエコシステムを持続的に強化することです。
詳細は https://www.sovereign.tech をご覧ください。
Incus 6.15 リリースのお知らせ¶
2025/08/01
はじめに ¶
Incus チームは、Incus 6.15 のリリースのアナウンスができてうれしいです!
このリリースは、アプリケーションコンテナに対する改良、VM、クラスタリング、ネットワーキング、さらにはいくつかの CLI の機能強化など、色々なものが少しずつ含まれたリリースです。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
注目すべきは、Incus OS の開発も順調に進み、オンラインデモ環境の実行に使えるようになったということです。新しいダウンロードツールも作成しました。手順はこちらでご覧いただけます。
Enjoy!
新機能¶
OCI レジストリーの認証サポート ¶
Incus は、OCI レジストリーとのやりとりでクレデンシャルヘルパーの使用をサポートするようになりました。関連するヘルパーは、 incus remote add
の新しい引数である --credentials-helper
で指定できます。
stgraber@dakara:~$ incus remote add oci-demo https://northamerica-northeast1-docker.pkg.dev/stgraber-1525358518329/test-registry --protocol=oci --credentials-helper=docker-credential-gcloud·
stgraber@dakara:~$ incus image info oci-demo:alpine:latest
Fingerprint: ec1b05d1eac264d9204a57f4ad9d4dc35e9e756e9fedaea0674aefc7edb1d6a4
Size: 3.47MiB
Architecture: x86_64
Type: container
Public: yes
Timestamps:
Created: 2025/02/13 22:28 EST
Uploaded: 2025/02/13 22:28 EST
Expires: never
Last used: never
Properties:
description: northamerica-northeast1-docker.pkg.dev/stgraber-1525358518329/test-registry/alpine (OCI)
id: alpine:latest
type: oci
architecture: x86_64
Aliases:
- alpine:latest
Cached: no
Auto update: disabled
Profiles: []
ロギングターゲットとしての Webhook ¶
最近、ロギングサブシステムの刷新に着手し、多様なフィルターを備えた複数のロガーをサポートしました。その一環として、既存の Loki サポートとともに、syslog サポートも導入しました。
今回のリリースでは、さらにもう 1 つのログインターゲットとして、シンプルな Webhook を追加しました。Webhook ロガーは、他の 2 つのロガーと同じ選択とフィルタリングオプションをサポートし、マッチしたイベントを JSON 形式でターゲットに送信します。JSON の構文はイベント API で使われているものと同じです。
stgraber@dakara:~$ incus config set logging.demo.target.address=http://127.0.0.1:8080/hook
stgraber@dakara:~$ incus config set logging.demo.target.type=webhook
これにより、ターゲットサーバーは次のようなイベントの受信を開始します:
POST /hook (application/json, 231 bytes)
{"type":"lifecycle","timestamp":"2025-07-31T23:34:12.714974583-04:00","metadata":{"action":"config-updated","source":"/1.0","requestor":{"username":"stgraber","protocol":"unix","address":"@"}},"location":"none","project":"default"}
ドキュメント: https://linuxcontainers.org/incus/docs/main/server_config/#server-options-logging
メモリーホットプラグの動作のより細かなコントロール ¶
いくつか前のリリースで、仮想マシンにメモリホットプラグを導入しました。
これに伴い、ホットプラグを通して VM に割り当てできる最大のメモリー量を決定する際に、いくつか問題が発生しました。
これは、少し扱いづらい可能性があります。物理的な制限(物理メモリーと仮想メモリーのアドレス空間サイズ)が存在すると同時に、正確に予測できないオーバーヘッドが存在するためです。過去数回のリリースで、ロジックをかなり調整し、大多数のユーザーにとって概ね正常に動作するようになっています。
そうはいっても、ホットプラグ可能なメモリー量を細かく制御する機能や、状況によってはこの機能を完全に無効化する機能も提供することが有益であることがわかりました。
そこで、インスタンス設定キー limits.memory.hotplug
を導入しました。このキーには、VM にホットプラグされたメモリーを含むトータルのメモリー量を指定できます。0
に設定すると、この機能は完全に無効化されます。
stgraber@dakara:~$ incus config set d13 limits.memory.hotplug=0
stgraber@dakara:~$ incus start d13
stgraber@dakara:~$ incus config set d13 limits.memory=2GiB
Error: Failed updating memory limit: Memory hotplug feature is disabled
VM での永続的な CD-ROM 取り出し ¶
ゲスト OS で CD-ROM が取り出されたかどうかを追跡できるようになりました。
これは disk
デバイスの新しい attached
プロパティを通して行われ、メディアの取り出し後に自動的に false
にセットされます。
stgraber@dakara:~$ incus config device add d13 virtio disk pool=default source=virtio-drivers
Device virtio added to d13
stgraber@dakara:~$ incus config show d13
architecture: x86_64
config:
image.architecture: amd64
image.description: Debian trixie amd64 (20250731_05:24)
image.os: Debian
image.release: trixie
image.serial: "20250731_05:24"
image.type: disk-kvm.img
image.variant: default
volatile.base_image: 340aab0e87de46062c1363cab4beb7d30d0474adceca5bf450b5162d8c2cc2c5
volatile.cloud-init.instance-id: 5a79a550-143d-4db0-a223-74191e968ea3
volatile.eth0.host_name: tap8ca1eb54
volatile.eth0.hwaddr: 10:66:6a:8e:8e:93
volatile.last_state.power: RUNNING
volatile.uuid: af7f680b-7824-47ca-be9a-9189881ade90
volatile.uuid.generation: af7f680b-7824-47ca-be9a-9189881ade90
volatile.vm.definition: pc-q35-10.0
volatile.vm.rtc_adjustment: "0"
volatile.vm.rtc_offset: "-1"
volatile.vsock_id: "1524898578"
devices:
virtio:
pool: default
source: virtio-drivers
type: disk
ephemeral: false
profiles:
- default
stateful: false
description: ""
stgraber@dakara:~$ incus exec d13 -- eject /dev/cdrom
stgraber@dakara:~$ incus config show d13
architecture: x86_64
config:
image.architecture: amd64
image.description: Debian trixie amd64 (20250731_05:24)
image.os: Debian
image.release: trixie
image.serial: "20250731_05:24"
image.type: disk-kvm.img
image.variant: default
volatile.base_image: 340aab0e87de46062c1363cab4beb7d30d0474adceca5bf450b5162d8c2cc2c5
volatile.cloud-init.instance-id: 5a79a550-143d-4db0-a223-74191e968ea3
volatile.eth0.host_name: tap8ca1eb54
volatile.eth0.hwaddr: 10:66:6a:8e:8e:93
volatile.last_state.power: RUNNING
volatile.uuid: af7f680b-7824-47ca-be9a-9189881ade90
volatile.uuid.generation: af7f680b-7824-47ca-be9a-9189881ade90
volatile.vm.definition: pc-q35-10.0
volatile.vm.rtc_adjustment: "0"
volatile.vm.rtc_offset: "-1"
volatile.vsock_id: "1524898578"
devices:
virtio:
attached: "false"
pool: default
source: virtio-drivers
type: disk
ephemeral: false
profiles:
- default
stateful: false
description: ""
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/devices_disk/#devices-disk:attached
VM ディスクデバイスの設定可能な WWN ¶
かなりニッチな機能ですが、VM ディスクデバイスのワールドワイドネーム(WWN)を設定できるようになりました。これは virtio-scsi
バスにアタッチされているときだけサポートされます。
これは、物理 LUN やディスクを VM 内にパススルー接続するとき、一部のアプリケーションで役立つかもしれません。またこの機能は、複数のディスクを同じ WWN に設定することで、VM 内のストレージマルチパスをテストする方法としても使用できます。
stgraber@dakara:~$ incus launch images:debian/13 d13 --vm
Launching d13
stgraber@dakara:~$ incus storage volume create default demo --type=block
Storage volume demo created
stgraber@dakara:~$ incus config device add d13 demo disk pool=default source=demo wwn=0x50014ee20ce3848a
Device demo added to d13
stgraber@dakara:~$ incus exec d13 bash
root@d13:~# ls -lh /dev/disk/by-id/wwn-0x50014ee20ce3848a·
lrwxrwxrwx 1 root root 9 Aug 1 03:49 /dev/disk/by-id/wwn-0x50014ee20ce3848a -> ../../sdb
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/devices_disk/#devices-disk:wwn
ダイナミック IPv6 ネットワークアドレス ¶
非常に限定的なユースケースのみに関係する、もう 1 つの小さな新機能です。
クラスターを実行しているとき、OVN コントロールプレーン、Ceph コンポーネント、モニタリングスタックなど、複数のサポートサービスを実行する必要があることがよくあります。
これらのサービスを適切に動作させるには、クラスター内のすべてのサーバーから均等にアクセス可能であり、さらにメンテナンスとサーバー障害の両方に対応できるように、サーバー間で簡単に再配置可能である必要があります。通常は、これは物理ネットワーク上にルーターを設置し、すべてのサーバーからアクセス可能なように VLAN を提供することで実現できますが、すべての環境で実現できるとは限りません。
そこで私たちの解決策は、クラスター内に通常のブリッジネットワークを作成し、既存のマルチキャスト VXLAN サポートと組み合わせることで、クラスター全体で利用できる非常に軽量な仮想ネットワークを構築することでした。
するとアドレス割り当ての問題が発生します。かなりのサーバー間の調整が必要になるため、通常の IPv4 DHCP を実行できません。しかし、MAC アドレスから生成される IPv6 SLAAC は使用できます。
しかし、これを正しく動作させるには、各サーバーがブリッジに対して異なる MAC アドレスを使用し、さらに重要なことに、同一サブネット内で異なる IPv6 アドレスを使用する必要があることです。
これを実現するために、ipv6.address
の構文を拡張し、サブネットのみを指定できるようにしました。この場合、サーバーはブリッジ固有な MAC アドレスを生成し、そこから EUI64 を使用して自身の IPv6 アドレスを生成します。
この結果、次のようになります:
root@server01:~# incus network create meshbr0 tunnel.mesh.interface=enp5s0 --target server01
Network meshbr0 pending on member server01
root@server01:~# incus network create meshbr0 tunnel.mesh.interface=enp5s0 --target server02
Network meshbr0 pending on member server02
root@server01:~# incus network create meshbr0 tunnel.mesh.interface=enp5s0 --target server03
Network meshbr0 pending on member server03
root@server01:~# incus network create meshbr0 tunnel.mesh.interface=enp5s0 --target server04
Network meshbr0 pending on member server04
root@server01:~# incus network create meshbr0 ipv4.address=none ipv6.address=fd42:1234:1234:1234::/64 ipv6.nat=false tunnel.mesh.protocol=vxlan
Network meshbr0 created
root@server01:~# incus launch images:debian/13 c1 --network meshbr0
Launching c1
root@server01:~# incus launch images:debian/13 c2 --network meshbr0
Launching c2
root@server01:~# incus launch images:debian/13 c3 --network meshbr0
Launching c3
root@server01:~# incus list
+------+---------+------+------------------------------------------------+-----------+-----------+----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | LOCATION |
+------+---------+------+------------------------------------------------+-----------+-----------+----------+
| c1 | RUNNING | | fd42:1234:1234:1234:1266:6aff:fe60:6aa9 (eth0) | CONTAINER | 0 | server04 |
+------+---------+------+------------------------------------------------+-----------+-----------+----------+
| c2 | RUNNING | | fd42:1234:1234:1234:1266:6aff:fef8:b9ef (eth0) | CONTAINER | 0 | server04 |
+------+---------+------+------------------------------------------------+-----------+-----------+----------+
| c3 | RUNNING | | fd42:1234:1234:1234:1266:6aff:fe21:1203 (eth0) | CONTAINER | 0 | server01 |
+------+---------+------+------------------------------------------------+-----------+-----------+----------+
root@server01:~# incus exec c3 bash
root@c3:~# ping6 -n fd42:1234:1234:1234:1266:6aff:fe60:6aa9
PING fd42:1234:1234:1234:1266:6aff:fe60:6aa9 (fd42:1234:1234:1234:1266:6aff:fe60:6aa9) 56 data bytes
64 bytes from fd42:1234:1234:1234:1266:6aff:fe60:6aa9: icmp_seq=1 ttl=64 time=1.38 ms
^C
--- fd42:1234:1234:1234:1266:6aff:fe60:6aa9 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.375/1.375/1.375/0.000 ms
CLI で設定可能なキープアライブモード ¶
Incus CLI には、少し前からキープアライブモードが搭載されていました。
これにより、CLI が終了したあとも、リモートの Incus サーバーとの接続をアクティブに保てるので、後続のコマンドの実行が大幅に向上します。
リモートサーバーを追加する際、バックグラウンドプロセスに対するタイムアウトを --keepalive
引数に渡すことで、この機能を有効にできるようになりました。
stgraber@dakara:~$ incus remote add cloud https://shf.cloud.zabbly.com --keepalive=30
URL: https://sso.zabbly.com/realms/master/device?user_code=WGSI-NFRG
Code: WGSI-NFRG
stgraber@dakara:~$ incus list cloud: --project demo
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | LOCATION |
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
| haproxy01 | RUNNING | 45.45.148.243 (eth0) | 2602:fc62:b:8006:216:3eff:fe27:a8f4 (eth0) | CONTAINER | 0 | delmak |
| | | 10.22.45.7 (eth0) | 2602:fc62:b:8006:1::1 (eth0) | | | |
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
| ic-test | RUNNING | 10.47.238.2 (eth0) | fd42:4a11:5600:6807:216:3eff:feb5:2c79 (eth0) | CONTAINER | 0 | chulak |
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
| server01 | RUNNING | 10.46.12.1 (br-managed) | fd42:ea64:f916:62b0::1 (br-managed) | VIRTUAL-MACHINE | 0 | chulak |
| | | 10.22.45.3 (enp5s0) | fd42:1234:1234:1234:1266:6aff:fe6b:48d2 (meshbr0) | | | |
| | | | 2602:fc62:b:8006:216:3eff:fe1a:ed0d (enp5s0) | | | |
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
| server02 | RUNNING | 10.46.12.1 (br-managed) | fd42:ea64:f916:62b0::1 (br-managed) | VIRTUAL-MACHINE | 0 | chulak |
| | | 10.22.45.4 (enp5s0) | fd42:1234:1234:1234:1266:6aff:fea1:6d39 (meshbr0) | | | |
| | | | 2602:fc62:b:8006:216:3eff:fe56:5276 (enp5s0) | | | |
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
| server03 | RUNNING | 10.46.12.1 (br-managed) | fd42:ea64:f916:62b0::1 (br-managed) | VIRTUAL-MACHINE | 0 | chulak |
| | | 10.22.45.5 (enp5s0) | fd42:1234:1234:1234:1266:6aff:fe14:8b09 (meshbr0) | | | |
| | | | 2602:fc62:b:8006:216:3eff:fec6:eaa8 (enp5s0) | | | |
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
| server04 | RUNNING | 10.46.12.1 (br-managed) | fd42:ea64:f916:62b0::1 (br-managed) | VIRTUAL-MACHINE | 0 | chulak |
| | | 10.22.45.6 (enp5s0) | fd42:1234:1234:1234:1266:6aff:fef0:2a72 (meshbr0) | | | |
| | | | 2602:fc62:b:8006:216:3eff:fea3:6d (enp5s0) | | | |
+-----------+---------+-------------------------+---------------------------------------------------+-----------------+-----------+----------+
stgraber@dakara:~$ ps aux | grep remote.*proxy
stgraber 1411159 0.1 0.0 6258948 26704 ? Ssl 00:19 0:00 incus remote proxy cloud /home/stgraber/.config/incus/keepalive/cloud.socket --timeout=30
CLI の出力フォーマットでの Markdown サポート ¶
リスト出力を直接 Markdown フォーマットで直接出力できるようになりました。ドキュメントやこのサイトに組み込むのが簡単になりました。
stgraber@dakara:~$ incus list --format=markdown
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
|:-----------:|:-------:|:----------------------:|:--------------------------------------------:|:---------------:|:---------:|
| d13 | RUNNING | 172.17.250.33 (enp5s0) | 2602:fc62:c:250:1266:6aff:fe8e:8e93 (enp5s0) | VIRTUAL-MACHINE | 0 |
| incus-os | RUNNING | 10.87.35.1 (incusbr0) | fd42:6060:5090:8d31::1 (incusbr0) | VIRTUAL-MACHINE | 0 |
| | | | 2602:fc62:c:250:1266:6aff:fe91:c98 (enp5s0) | | |
| kernel-test | STOPPED | | | VIRTUAL-MACHINE | 0 |
| win2025 | STOPPED | | | VIRTUAL-MACHINE | 0 |
The markdown rendered version of this looks like:
NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
---|---|---|---|---|---|
d13 | RUNNING | 172.17.250.33 (enp5s0) | 2602:fc62:c:250:1266:6aff:fe8e:8e93 (enp5s0) | VIRTUAL-MACHINE | 0 |
incus-os | RUNNING | 10.87.35.1 (incusbr0) | fd42:6060:5090:8d31::1 (incusbr0) | VIRTUAL-MACHINE | 0 |
2602:fc62:c:250:1266:6aff:fe91:c98 (enp5s0) | |||||
kernel-test | STOPPED | VIRTUAL-MACHINE | 0 | ||
win2025 | STOPPED | VIRTUAL-MACHINE | 0 |
サーバーサイドフィルタリングの追加 ¶
このリリースで、API オブジェクトのサーバーサイドフィルタリングに対する CLI サポートが完成しました。
次の 2 つのコマンドでフィルタリングがサポートされるようになりました:
incus cluster list
incus storage list
ネットワーク設定で netlink を使用するように変更 ¶
これは新機能ではありません。しかしかなり大きな変更点です。
このリリースで、iproute2 コマンド(ip
、tc
など)を使ったすべての呼び出しを、すべて netlink API を通して Linux カーネルと直接やりとりするように変更しました。
これにより、オーバーヘッドが大幅に削減され、ツールのさまざまなバージョンに対応する必要がなくなりました。しかし、この手の大きな変更にはリグレッションのリスクが伴います。
このような理由で、6.14 リリース直後に変更を行い、リグレッションの検出と修正に丸々 1 ヶ月の期間を設けました。これまでに 6 件のリグレッションを検出し、すべてを解決しました。しかし、テストで検出できなかったリグレッションがまだ存在する可能性があります。
ネットワークインターフェースやルーティングの設定に関して、リグレッションやふるまいの変化に気づいた場合はお知らせください。調査します。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- api: disk_attached
- incusd/ip/utils: Switch to netlink
- incusd/ip/addr: Switch to netlink
- incusd/ip/class: Switch to netlink
- incusd/ip/filter: Switch to netlink
- incusd/ip/link: Switch to netlink
- incusd/ip/neigh: Switch to netlink
- incusd/ip/neigh_proxy: Switch to netlink
- incusd/ip/qdisc: Switch to netlink
- incusd/ip/route: Switch to netlink
- incusd/ip/tuntap: Switch to netlink
- incusd/ip/vdpa: Switch to vishvananda/netlink library instead of doing netlink ourselves
- incusd/ip: Refactor family from string to
Family
type - incusd/ip: Merge GetLinkInfoByName and LinkFromName into LinkByName
- Use net.IP and net.IPNet instead of strings
- incusd/instance/qemu: On standalone systems, cap hotplug memory to system
- generate-database: Add create_timestamp and update_timestamp
- incusd/ip: Ignore ESRCH on route deletion
- incusd/ip: All multicast needs to be configured as a flag
- incusd/patches: Fix empty JSON columns
- incusd/instance/qemu: Fix memory calculation logic
- shared/idmap: Skip ACLs that are out of range
- incusd/device/nic_ovn: Fix bad check
- incusd/ip: Fix TC regressions
- incusd/device/nic_ovn: Allow specifying static IPv4/IPv6 when DHCP is disabled
- incusd/storage/lvm: Don't rely on udev paths
- cmd/incus_agent: Replace gorilla/mux with http.ServeMux
- client: Fixed non-constant format string in call to fmt.Errorf
- incusd/instance/qmp/log: Don't crash on log Write calls after Close
- incusd: Cluster join, ensure server address
- incusd: Cluster join, check cluster.https_address
- incusd: Centralize check for node specific network config
- incusd: Make network config keys node specific
- incusd/ip: All multicast needs to be configured after link creation
- doc: Pin a working version of the sphinx extensions
- incusd/instance/lxc: Fix usage reporting on relative disks
- internal/instance: Introduce SplitVolumeSource
- incusd: Use SplitVolumeSource
- cli/list: Add markdown format support
- i18n: Updated format argument descriptions
- cmd/list: Crude tablewriter error handling
- incus/project/get-current: Rely on server reported project
- incus/remote: Support keepalive flag
- i18n: Update translation templates
- i18n: Manual translation update
- Translated using Weblate (Portuguese)
- incusd/cluster/config: Update certificate also on change of acme.http.port
- incusd/instance_logs: Perform stricter path validation
- [lxd-import] lxd/daemon: Validate browser fetch metadata if supplied to reject non-same-origin requests
- [lxd-import] test/suites/serverconfig: Check fetch metadata header is validated
- incusd/dev_incus: Add extra validation for monitor
- incusd/device/disk: Add attached configuration key
- incusd/instance/qemu: Refactor qmp.Connect calls
- incusd/instance/qemu: Handle attached state statically
- incusd/images: Restrict public image listing to default project
- incusd/images: Use identical errors for all not-found cases on public endpoints
- internal/util: Add recursion limit to RenderTemplate
- internal/util: Tweak common pongo2 parser to block dangerous functions
- incus/list: Fix validation of 'L' shorthand column
- tests: only run tests if ovn is available
- incus/server: fix scan order
- incusd/instance/qemu: Rework ejection logic and pass ejection handler
- incusd/device/disk: Add live attach/detach logic
- doc: Update metadata
- incusd/instance/qemu: Add indirection level to detachDisk
- incusd/instance/agent-loader: Use ISO label rather than disk id
- incusd/storage: Fix ISO renaming
- incusd/project: Skip processing 'limits.processes' for VM instance types
- incusd/instance: Add 'limits.memory.hotplug' config
- incusd/instance/drivers: Support for 'limits.memory.hotplug' config
- api: limits_memory_hotplug
- doc: Update configs
- incusd/device/config: Fix issue with live updating of user keys
- incusd/device/disk: Pass nil if read/write limits are not set
- incusd/instance/drivers: Prevent calling 'deviceAttachBlockDevice' on the root disk
- incusd/instance: Allow setting lxc.net config keys through raw.lxc
- incusd/apparmor/qemu: Allow reading gid_map/uid_map
- incusd/apparmor/qemuimg: Fix typo in rules
- doc/instances_create: Extend the Incus VM agent instructions
- client: Add GetClusterMembersWithFilter
- incusd/cluster: Add server-side filtering
- incus/cluster: Use server-side filtering
- doc/rest-api: Refresh swagger YAML
- client: Add GetStoragePoolsWithFilter
- incus/storage: Use server-side filtering
- i18n: Update translation templates
- incusd/ip: Fix filtering of routes by interface
- incusd/operations: Add IsSameRequestor
- incusd/instance_console: Ensure requestor match
- incusd/instance_exec: Ensure requestor match
- incusd/auth/openfga: Restrict operations and events access
- incusd/auth/openfga: Rebuild model
- incusd/db/network_peers: Fix querying of integrations
- api: disk_wwn
- shared/validate: Add IsWWN
- incusd/device/disk: Add wwn property
- incusd/instance/qemu: Add support for setting WWN
- doc: Update config
- Translated using Weblate (German)
- incusd/network/bridge: Allow automatic host-specific IPv6 addresses
- incusd/auth/oidc: Expose scopes list
- client: Use server-advertised OIDC scopes
- incusd/instance/qmp: Properly handle lost connections
- incusd/instance/qmp: Fix monitor failure test
- incusd/instance/qemu: Fix lifecycle events
- incus/remote: Add credentials helper support
- shared/cliconfig: Add support for credentials helper
- client/oci: Refactor skopeo logic and add credentials support
- i18n: Update translation templates
- incusd/device: Add IsPhysicalNICWithBridge and make hwaddr optional
- incusd/instance/drivers: Fill the MAC address for physical NIC with bridge parent
- api: server_logging_webhook
- incusd/logging/loki: Set default retry
- incusd/logging/webhook: Initial webhook logger
- doc: Update config
- doc/wordlist: Add webhook
- incusd/device/disk: prevent file mounts on VMs
- incusd/devices/disk: Improve documentation for the path key
- doc: Update metadata
- Translated using Weblate (Portuguese)
- doc: Sort word list
- tests: Bump cleanup timeouts
- tests/clustering: Use elif in driver conditions
- incusd/instance/qemu: Cleanup volume eject/detach logic
- incusd/db/images: Associate image with default profile from default project
- incusd/db/images: Set cached option for projects with 'features.images' disabled
- incus-agent: Handle path mount removal
- incus-agent/events: Remove fmt import
- test: Fix mountpoint detection logic
- incusd/instance/lxc: Only remove mountpoints in /dev
- shared/cliconfig: Introduce GetClientCertificate
- incus/remote: Use GetClientCertificate
- tests: Standardize indentation
- client: Add SkipGetEvents
- incusd: Consistently set SkipGetEvents and SkipGetServer
- client: Add configurable temp directory
- incusd/daemon_images: Set temporary image path
- gomod: Update dependencies
- incusd/auth/oidc: Update for current zitadel
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
Homebrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.15.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 6.14 リリースのお知らせ¶
2025/06/28
はじめに ¶
Incus チームは、Incus 6.14 のリリースのアナウンスができてうれしいです!
このリリースは、University of Texas の学生との作業のいくつかを終え、いくつかの小さな機能を追加した、多数の歓迎すべきバグ修正とパフォーマンスの改良を加えた軽量なリリースです。
また、nftables とネットワーク隔離で使用したブリッジネットワークのネットワーク ACL を使用するユーザーに影響するセキュリティ上の問題をいくつか修正しています。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
セキュリティ修正 ¶
このリリースでは、ANSSI(French Cybersecurity Agency)の Olivier BAL-PETRE によって報告された 2 つのセキュリティ問題が修正されています。
どちらの問題も、ファイアウォール用の nftables を使い、ネットワーク隔離機能の一部と組み合わせて、ローカルブリッジ上で Incus のネットワーク ACL を使用することに関連する問題です。
最近の Incus 6.12 での ACL ロジックの変更により、分離の一部がバイパスされ、その環境内の root が DoS 攻撃を引き起こしたり、ホストを偽装して同じネットワークを共有するインスタンスからのトラフィックの一部を傍受したりできました。
- CVE-2025-52890 (Incus がセキュリティオプションの一部をバイパスする nftables ルールを作成する )
- CVE-2025-52889 (Incus の制限なしのリソース割り当てにより、管理ブリッジネットワークでファイアウォールルールをバイパスできる )
前述の通り、影響を受けるバージョンは Incus 6.12 と 6.13 です。どちらも定期的なマンスリーリリースであり、Incus 6.14 以降はサポートされません。
最新の LTS リリースはこの問題の影響を受けません。
新機能 ¶
インスタンスとボリュームバックアップの S3 アップロード ¶
インスタンスとストレージボリュームのバックアップを S3 バケットに自動的にアップロードできるようになりました。この機能は、システムバックアップを取る時に興味を引く機能であるため、現時点では API 経由でのみ利用できます。
Incus は通常通りバックアップを作成し、ローカルコピーを削除する前に、すぐにターゲットとなるバケットにバックアップのアップロードを開始します。
stgraber@dakara:~$ incus launch images:alpine/edge a1
Launching a1
stgraber@dakara:~$ incus query -X POST /1.0/instances/a1/backups -d '{"optimized_storage": true, "target": {"protocol": "s3", "url": "https://storage.googleapis.com", "bucket_name": "incus_backups", "path": "my-backup.tar.gz", "access_key": "ACCESS-KEY", "secret_key": "SECRET-KEY"}}' --wait
{
"class": "task",
"created_at": "2025-06-28T13:46:21.781378949-04:00",
"description": "Backing up instance",
"err": "",
"id": "89936d87-25b3-44d2-930e-92b579cc2ee0",
"location": "none",
"may_cancel": false,
"metadata": null,
"resources": {
"backups": [
"/1.0/instances/a1/backups/backup0"
],
"instances": [
"/1.0/instances/a1"
]
},
"status": "Success",
"status_code": 200,
"updated_at": "2025-06-28T13:46:21.781378949-04:00"
}
これは University of Texas in Austin の学生による作業です。
スナップショット作成時の有効期限のカスタマイズ ¶
incus snapshot create
と incus storage volume snapshot create
コマンドの両方に、--expiry
フラグが追加されました。これにより、スナップショット作成時に有効期限を直接指定できるようになり、サーバー側で設定されているデフォルト値を上書きできるようになりました。
stgraber@dakara:~$ incus snapshot create a1 foo --expiry=2d
stgraber@dakara:~$ incus snapshot list a1
+------+----------------------+----------------------+----------+
| NAME | TAKEN AT | EXPIRES AT | STATEFUL |
+------+----------------------+----------------------+----------+
| foo | 2025/06/28 13:50 EDT | 2025/06/30 13:50 EDT | NO |
+------+----------------------+----------------------+----------+
手動で作成するスナップショットのデフォルト有効期限の変更 ¶
snapshots.expiry.manual
を使い、スナップショットのデフォルト有効期限を変更できるようになりました。この設定が指定されていない場合、Incus は、スケジュールされたスナップショットで使用する snapshot.expiry
の値を自動的に適用します。
stgraber@dakara:~$ incus config set a1 snapshots.expiry=7d
stgraber@dakara:~$ incus snapshot create a1 first
stgraber@dakara:~$ incus config set a1 snapshots.expiry.manual=2d
stgraber@dakara:~$ incus snapshot create a1 second
stgraber@dakara:~$ incus snapshot list a1
+--------+----------------------+----------------------+----------+
| NAME | TAKEN AT | EXPIRES AT | STATEFUL |
+--------+----------------------+----------------------+----------+
| first | 2025/06/28 13:53 EDT | 2025/07/05 13:53 EDT | NO |
+--------+----------------------+----------------------+----------+
| second | 2025/06/28 13:54 EDT | 2025/06/30 13:54 EDT | NO |
+--------+----------------------+----------------------+----------+
ライブマイグレーションの調整と進捗報告 ¶
メモリーを頻繁に変更する VM のマイグレーション時間を減らすため、メモリー転送ロジックにいくつか調整を加えました。
Incus は、マイグレーションする VM の CPU をより積極的にスロットルするようになりました。最初の試行後 50% のスロットルを適用し、変更がより高いレートで検出されると、徐々に制限値を下げていきます。
これに加え、Incus はメモリーマイグレーションの進捗も提供します。
resource API での CPU アドレスサイズの報告 ¶
CPU やプラットフォームが異なれば、メモリーを指定するための物理アドレスと仮想アドレスサイズも異なります。
これは、起動時やホットプラグ後、仮想マシンで利用できるメモリーの総量に影響します。
このため、Incus は VM 内でホットプラグ可能なメモリーの最大量を調整するために、これらの値を追跡し続ける必要があります。
stgraber@castiana:~$ incus query /1.0/resources | jq .cpu.sockets[0].address_sizes
{
"physical_bits": 48,
"virtual_bits": 48
}
データベースロジックのコードジェネレーターへの移動 ¶
さまざまなネットワークオブジェクトについて、そのデータベース関数にコードジェネレーターを使うようにする移行作業が完了しました。
このリリースでは、次の 2 つのオブジェクトが変換されました:
- ネットワークフォワード
- ネットワークピア
これは University of Texas in Austin の学生による作業です。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- incus: Make sure we parse the config early enough
- incus/main_aliases: Avoid parsing loops
- incusd/instance/qemu: Skip invtsc on non-x86 and when running nested
- incusd/instance/qmp remove net Conn
- api: backup_s3_upload
- shared/api: Add backup target for instance and volume
- doc/rest-api: Refresh swagger YAML
- incusd/backup: Add upload function
- incusd: Add backup upload logic
- incusd/device/nic_physical: Check for parent being a bridge
- incusd/device/nic_physical: Handle managed physical network being a bridge
- incusd/instance/lxc: Tweak OCI entrypoint escaping
- incusd/network/ovn: Add dhcpv6_stateless flag
- incusd/network/ovn: Tweak DNS server logic
- incusd/network/ovn: Set stateless DHCPv6 flag
- incusd/main_forknet: Don't crash on missing status code
- incusd/server/network: correct complement range calculation for DHCP reservations
- test/storage/zfs: add test for incus:content_type after clone
- incusd/storage/zfs: Fix missing incus:content_type after cloning a custom volume
- incusd/instance/qmp move logfile to qmp
- incusd/instance/qmp add qmp log implementation
- incusd/instance/qmp base qmp log on new implementation
- incusd/instances: Fix operation plumbing
- incusd/instance/qemu/qmp: Add MigrateSetParameters
- incusd/instance/qemu: Tweak migration parameters
- incusd/instance/qemu/qmp: Add QueryMigrate
- incusd/instance/qemu: Report migration progress
- incus/profile: Fix a typo in profile set usage text
- i18n: Update translation templates for profile set cmd
- incusd/storage: Handle missing storage bucket listener
- incusd/instance/qmp added qmp event log
- incus-migrate: Fix calculating volume size for block device
- incusd/instance/qmp: Prevent initialization of qmpLog with an empty log file path
- incus/info: Fix --show-log
- incusd: Remove target check when server clustered
- Translated using Weblate (Portuguese)
- client: Don't swallow error if incusParseResponse is successful
- Translated using Weblate (Portuguese)
- incusd/cluster: Return the cluster certificate after bootstrap
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- incusd/network/ovn: Fix regression in stateful DHCPv6 handling
- incusd/db/cluster: Port network peer to database generator
- incusd: Update for new network peer functions
- gomod: Update dependencies
- incusd/apparmor/forkproxy: Expand /dev exception
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- internal/instance: Add exported error
- incus/snapshot: Implement --expiry
- incus/storage/snapshot: Implement --expiry
- i18n: Update translation templates
- api: snapshot_manual_expiry
- doc/storage: Add snapshots.expiry.manual
- internal/instance: Add snapshots.expiry.manual
- doc: Update config
- incusd/storage: Add snapshots.expiry.manual validation
- incusd/instance_snapshot: Add snapshots.expiry.manual
- incusd/storage_volume_snapshot: Add snapshots.expiry.manual
- shared/tls: Export TLSConfigWithTrustedCert
- internal/server/db/cluster: Generate functions using DB generator
- incusd/scriptlet: Allow sets
- internal/server/network: Port to generated functions
- Translated using Weblate (Portuguese)
- Translated using Weblate (Portuguese)
- lxc-to-incus: Add lxc.apparmor.allow_nesting
- tests: Workaround old socat bug
- tests: Update for newer easyrsa
- tests: Recent XFS requires a minimum volume size of 300MiB
- github: Switch to ZFS backend for Linstor
- github: Switch tests to Ubuntu 24.04
- api: resources_cpu_address_sizes
- incusd/resources: Track CPU address sizes
- incusd/instance/qemu: Be smarter about max memory hotplug
- doc/rest-api: Refresh swagger YAML
- incusd/instance/qemu: Cap hotplug memory to 1TB
- incusd/cluster: Fix incorrect handling of server address
- incusd/instance/qmp: Fix typo
- incusd/device/disk: Allow degraded zpools
- incusd/storage_volumes: Fix cross-project cluster volume copy/move
- incusd/firewall/nftables: Fix rule ordering for ARP/NDP
- incusd/firewall/nftables: Fix ordering of basic rules
- incusd/storage/lvm: Avoid concurrent activation/deactivation
- devcontainer: Add gofumpt
- incus/config/set: Add example using stdin
- i18n: Update translation templates
- incusd/instance/qemu: Only compress qcow2 if publishing a split image
- incusd/instance/qemu: Don't flood the debug log
- incusd/storage/zfs: Handle re-use of delegated dataset
- incus/file: Remove OS-specific handling from SSHFS logic
- gomod: Update dependencies
- Translated using Weblate (Portuguese)
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
パッケージ ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux 上に Incus サーバーをインストールする ¶
Incus はほとんどの一般的な Linux ディストリビューションで利用できます。インストール手順の詳細は、Incus のドキュメントを参照してください。
https://incus-ja.readthedocs.io/ja/latest/installing/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/installing/ (原文)
Incus クライアントの Homebrew パッケージ ¶
Homebrew 経由で、Linux と macOS 向けにクライアントツールが利用できます。
https://formulae.brew.sh/formula/incus
Incus クライアントの Chocolatey パッケージ ¶
Chocolatey 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://community.chocolatey.org/packages/incus/6.14.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues