ニュース

Incus 6.15 リリースのお知らせ

2025/08/01

はじめに

Incus チームは、Incus 6.15 のリリースのアナウンスができてうれしいです!

このリリースは、アプリケーションコンテナに対する改良、VM、クラスタリング、ネットワーキング、さらにはいくつかの CLI の機能強化など、色々なものが少しずつ含まれたリリースです。

image|690x336

いつものように、オンラインでご自身で試せます: 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

ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/instance_options/#instance-resource-limits:limits.memory.hotplug

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

これは新機能ではありません。しかしかなり大きな変更点です。
このリリースで、iproute2 コマンド(iptc など)を使ったすべての呼び出しを、すべて 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 を使用するユーザーに影響するセキュリティ上の問題をいくつか修正しています。

image|690x263

いつものように、オンラインでご自身で試せます: 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 createincus 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 はメモリーマイグレーションの進捗も提供します。

image|689x247

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

Incus 6.13 リリースのお知らせ

2025/05/30

はじめに

Incus チームは、Incus 6.13 のリリースのアナウンスができてうれしいです!

このリリースは、さまざまな規模やユーザーに向けた多数の新機能が盛り込まれた非常に充実したリリースです。誰にとっても何かがあるはずです!

image|690x247

いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/

Enjoy!

新機能

Windows エージェントのサポート

Incus VM エージェントのロジックは、Linux 以外のオペレーティングシステム上でビルドできるようにリファクタリングされました。そして、Windows 用のエージェントが初期実装されました。

残念ながら、Windows にはまだ、Incus が通常エージェントとの通信に利用する vsock 通信メカニズム用の署名済み VirtIO ドライバーがないため、これはまだかなり初期の取り組みです。

幸いなことに、vsock で使っているプロトコルは HTTPS なので、代わりに VM へ直接(ネットワーク経由で) HTTPS を使えました。これは、Incus は Windows VM の IP アドレスを把握しており、その IP アドレスに Incus ホストから直接アクセスできる場合のみ動作します。将来的には、これをネイティブの vsock 接続に置き換える予定です。

サポートされている機能としては、incus exec を通してコマンドを実行したり、incus info で OS の詳細を取得したり、incus file でファイルを転送したりすることができるようになります。

これを動作させるには通常、source=agent:config ディスクデバイスを Windows VM に追加する必要があります。これにより、(ホストディストリビューションでパッケージ化されている場合)Windows エージェントと、必要な構成ファイルを含む CD-ROM ドライブが提供されます。

その時点から、そこから手動で直接エージェントを起動するか、手動でシステムサービスを追加できます。

Windows の経験がある方で、CD-ROM ドライブに含めることができるインストール PowerShell を通して、エクスペリエンスを磨き上げてくれる方を歓迎します。また、エージェント自体の Windows ビルドを Linux 版と完全に同等にするための作業も歓迎します。

この数ヶ月にわたる取り組みは、Sovereign Tech Fund からの資金提供により実現しました。

incus-migrate の改良

スタンドアローンツールである incus-migrate にかなりの改良が加えられました。

なお、このツールは Incus コンテナや VM に変換する必要があるリモートサーバー上、または Incus にインポートする必要がある既存のコンテナや VM を実行しているリモートサーバー上で実行できます。

このリリースで、incus-migrate に次のサポートを追加しました:

  • ファイルシステムツリーやディスクイメージを新しいカスタムボリュームとしてアップロードする
  • 新しいインスタンスの一部として追加のディスクやファイルシステムをインポートする
  • OVA イメージを新しいインスタンスとしてインストールする
  • Incus サーバーがクラスターの場合、特定のサーバーやクラスターグループを選択する

incus-migrate のスタティックビルドが GitHub上で取得できます。これは Incus を実行していないシステムを変換する時に役に立ちます。

カスタムボリューム上の SFTP

インスタンスの場合と同様のファイル API をサポートするために、徐々にカスタムストレージボリューム(ファイルシステム各種)を取得しようとしています。

その第一歩として、Incus はそれらのボリューム上の SFTP 操作をサポートするようになりました。これは、現時点では incus storage volume file mount コマンドに相当します。残りの API とコマンドは Incus 6.14 でサポートされる予定です。

これは University of Texas in Austin の学生による作業です。

OVN ネットワーク上の設定可能なインスタンス外部 IP アドレス

新しい NIC の設定キーを 2 つ追加しました:

  • ipv4.address.external
  • ipv6.address.external

これは、インスタンス起点の外部トラフィックに使う IP アドレスを設定するのに使えます。通常、これはネットワークの外部アドレス(デフォルト)か、インスタンスを指すネットワーク転送アドレスのいずれかです。

ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nictype-ovn

これは University of Texas in Austin の学生による作業です。

OVN ネットワークのゲートウェイ MAC アドレスを固定する機能

OVN は MAC バインディングのリスト、つまり IP アドレスと MAC アドレスのマッピング(ARP テーブルや NDP テーブルに相当)を管理します。これは通常、OVN が特定のアドレスと通信する必要があるときに作成され、データベースに保存されます。

VRRP や同様の仮想 MAC アドレスで動作するネットワークでは、ゲートウェイの予想される MAC アドレスを事前に設定し、OVN が保持する必要がある場合があるため、これは必ずしも理想的ではありません。

このような場合のために、physical タイプの OVN アップリンクネットワークに設定できる 2 つの新しい設定キーが追加されました:

  • ipv4.gateway.hwaddr
  • ipv6.gateway.hwaddr

ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/network_physical/

これは University of Texas in Austin の学生による作業です。

仮想マシン内のクロック処理

Incus は、移行しないことが想定されている仮想マシンに invtsc QEMU オプションを自動的に設定するようになりました。

さらに、Incus は VM の RTC クロックを永続化するために、QEMU から送出される RTC イベントをリッスンするようになりました。これにより、Windows VM だけでなく、UTC ハードウェアクロックに依存しない他の VM の処理も改善できます。

新しい get-client-certificateget-client-token コマンド

CLI に新たに incus remote get-client-certificateincus remote get-client-token コマンドが追加されました。これにより、クライアント証明書の抽出やクライアント証明書からの JWT の発行が簡単になるため、スクリプト作成に役立ちます。

これは University of Texas in Austin の学生による作業です。

OCI での DHCPv6 サポート

OCI コンテナで使用されるビルトインの DHCP クライアントは、ステートフルとステートレスの両方の DHCPv6 に対応できるようになりました。

これは University of Texas in Austin の学生による作業です。

routed NIC のネットワークホストテーブルの設定

Incus は routed NIC デバイスをどのルーティングテーブルに配置するかの制御をサポートしていますが、少し柔軟性に欠けていました。

代わりに、いくつか新しい設定キーが追加されました:

  • ipv4.host_tables
  • ipv6.host_tables

ルートを保存するテーブルのカンマ区切りのリストを設定できます。

ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nictype-routed

これは University of Texas in Austin の学生による作業です。

Support for split image publishing

これまで、incus publish を実行すると、生成されるイメージは常に統合タイプのイメージでした。つまり、通常はルートディスクと Incus の設定の両方を含む圧縮された tarball 形式の単一ファイルでした。

しかし、分割イメージの生成をサポートするようになりました。分割イメージは、Incus 固有のメタデータとルートディスクデータの 2 つのファイルを生成します。

CLI では、incus publish--format=split を与えて制御します。

これは University of Texas in Austin の学生による作業です。

事前に与える証明書

Incus サーバーに事前に与える構成ファイルに証明書を含めることができるようになりました。

次のようになります:

certificates:
  - type: client
    name: my-client
    certificate: |-
      PEM ENCODED CERTIFICATE

この機能は、Incus OS のようなシステムを自動的にプロビジョニングするときに役立ちます。

これは University of Texas in Austin の学生による作業です。

リスト形式の設定

Incus CLI の設定ファイル(通常は ~/.config/incus/config.yml)で、優先するリストの出力フォーマットを選択できるようになりました。

たとえば、次のようになります:

defaults:
  list_format: compact

これは list コマンドに --format=compact を渡すのと同じです。

これは University of Texas in Austin の学生による作業です。

create/add、delete/remove/rm のエイリアスの追加

Incus CLI は次のようにデザインされています:

  • 重要な状態を持っているオブジェクトは create したあと、delete しなければなりません
  • 状態がほとんどないか、全くないオブジェクトは added したあと、removed します

これは、特定のアクションに関係したリスクの一部を伝えることを目的にしていますが、一貫性を欠いている印象を与え、Incus のスクリプトの作成が少し難しくなる可能性があります。

この問題を解決するために、CLI に多数のエイリアスを追加しました。これにより、必要なコマンドを見つけられる可能性が大幅に高まります。

これは University of Texas in Austin の学生による作業です。

マニュアルで記述していた DB 関数のコードジェネレーターへの移行

Incus のコードベースには、データベースへのアクセス関数用のコードジェネレーターが含まれています。
これは、動作の一貫性を保証することと、データベースクエリーを手動で記述する際に起こりやすいイージーミスを防ぐのに非常に役立ちます。

すべての新しいデータベーステーブルでジェネレーターを使うことは事実上の要件ですが、まだジェネレーターを使用していないオブジェクトがかなりあります。

このリリースでは、次のオブジェクトの生成された関数への移行が完了しました:

  • ネットワーク ACL
  • ネットワークロードバランサー
  • ネットワークゾーン

すべてのテストはパスしていますが、この手のリファクタリングは簡単には気づけないリグレッションを起こすリスクが高いです。Incus 6.13 で、これらのオブジェクトの動作に通常と異なる変化に気づいた場合は問題報告をください。調査します。

これは University of Texas in Austin の学生による作業です。

サーバーサイドフィルタリング

このリリースでは、Incus 全体を通して可能な限りサーバーサイドフィルタリングを使う取り組みを継続しています。

このリリースで、次がサポートされました:

  • incus network list
  • incus storage bucket list
  • incus project list
  • incus config trust list

これは University of Texas in Austin の学生による作業です。

コードから生成するドキュメント

設定キーが関係するすべての場所でドキュメントを自動生成する実装を行う取り組みを続けています。今回のリリースでは、次の項目が自動生成されるようになりました:

  • PCI デバイス
  • OVN ネットワーク
  • 物理ネットワーク
  • SR-IOV ネットワーク
  • Macvlan ネットワーク

これは University of Texas in Austin の学生による作業です。

Incus OS 上の Incus メトリクスと統合された OS メトリクス

Incus OS 上で Incus を実行すると、(node-exporter からの)ホストメトリクスが Incus のメトリクス API に自動的に含まれるようになりました。

これは、Incus OS が可能な限り開いているポート数を制限しようとし、すべてのトラフィックを単一のスタック(Incus 自身)を通して認証・認可しようとするために行われます。

パッケージャーに向けた注意

外部の umoci コマンドの使用から、Go パッケージを使用するように変更しました。

新しい Windows エージェントのサポートを受けるには、エージェントを Windows 用にビルドし、通常の Linux 用と共に、Incus で利用できるようにする必要があります。

すべての変更点

このリリースのすべての変更のリストは次の通りです(翻訳なし):

すべてのChangeLogを見る
  • client: Add server-side filtering for networks
  • incus/network: Use server-side filtering
  • i18n: Update translation templates for network list cmd
  • 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/firewall: Clear correct table for address sets
  • incusd/firewall: Remove unused part of nftables structs
  • 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/firewall/nftables: Fix handling of address set deletion
  • 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 to router so it does not collide with the package of the same name
  • cmd/incus-agent: rename variable mux to router 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
  • client: Fix required extension for GetNetworkAddressSetsAllProjects
  • incusd: Move cluster resource caching logic
  • incusd/main_forknet: Implement stateful DHCPv6
  • incusd/main_forknet: Add delay to wait for IPv6 link-local
  • incusd/main_forknet: Add stateless DHCPv6 support
  • gomod: Update dependencies
  • 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
  • i18n: Update translation templates
  • doc/rest-api: Refresh swagger YAML
  • incus/remote: Add "get-client-certificate" and "get-client-token"
  • i18n: Update translation templates
  • 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/main_forknet: Don't touch resolv.conf when no leases
  • incusd/storage/ceph: Fix typo in parseParent
  • tests: Switch clustering test subnet
  • incusd/storage/linstor: Prevent mounting unreachable pools
  • 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
  • Translated using Weblate (Spanish)
  • 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
  • Makefile: Pin tablewriter (API breakage)
  • client: Use the umoci Go package instead of the command
  • doc: Remove mentions of the umoci 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: 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
  • tests: Fix LINSTOR preconfiguration
  • 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
  • po: Update translation template
  • 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
  • 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.13.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.12 リリースのお知らせ

2025/04/25

はじめに

Incus チームは、Incus 6.12 のリリースのアナウンスができてうれしいです!

このリリースには、仮想マシンメモリーのオンライン拡張、ネットワーク ACL をより簡単にするネットワークアドレスセット、ロギングの改良などの期待されたいくつかの改良点が含まれています。

新機能に加えて、このリリースには多数のスナップショットを持つシステムに特にうれしいパフォーマンスの改善や、ZFS を使うシステム向けのさらなるパフォーマンス強化もかなり行われています。

image|690x303

いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/

Enjoy!

新機能

ネットワークアドレスセット

複雑なネットワーク ACL ルールの管理を簡単にするために、Incus はアドレスセットをサポートするようになりました。

アドレスセットは、ACL と同様にプロジェクトにひもづけられ、それぞれのセットは IPv4 と IPv6 アドレスを含めることができます。セットは ACL のソースとデスティネーションフィールドから参照できます。

stgraber@dakara:~$ incus network address-set create cloudflare-dns
Network address set cloudflare-dns created
stgraber@dakara:~$ incus network address-set add cloudflare-dns 1.0.0.1
stgraber@dakara:~$ incus network address-set add cloudflare-dns 1.1.1.1
stgraber@dakara:~$ incus network address-set add cloudflare-dns 2606:4700:4700::1001
stgraber@dakara:~$ incus network address-set add cloudflare-dns 2606:4700:4700::1111

stgraber@dakara:~$ incus network acl create my-acl
Network ACL my-acl created
stgraber@dakara:~$ incus network acl rule add my-acl egress action=allow state=enabled
stgraber@dakara:~$ incus network acl rule add my-acl egress action=reject state=enabled destination='$cloudflare-dns'

stgraber@dakara:~$ incus config device override d13 eth0 security.acls=my-acl
Device eth0 overridden for d13

stgraber@dakara:~$ incus exec d13 -- ping linuxcontainers.org -c1 -W1
PING linuxcontainers.org (2602:fc62:a:1::7) 56 data bytes
64 bytes from rproxy.dcmtl.stgraber.org (2602:fc62:a:1::7): icmp_seq=1 ttl=59 time=8.60 ms

--- linuxcontainers.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.599/8.599/8.599/0.000 ms

stgraber@dakara:~$ incus exec d13 -- ping one.one.one.one -c1 -W1
PING one.one.one.one (2606:4700:4700::1111) 56 data bytes

--- one.one.one.one ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

ドキュメント : https://linuxcontainers.org/incus/docs/main/howto/network_address_sets/

仮想マシンのメモリーホットプラグ

Incus でのコンテナと VM との利用上の数少ない違いの 1 つに、VM でメモリーを減らすことはできても増やすことはできなかった点があります。

この違いは改良され、ゲストへのメモリーホットプラグがサポートされるようになりました。limits.memory を実行時に増やすことができ、そのメモリーを VM 内ですぐに使えるようになりました。

stgraber@dakara:~$ incus launch images:debian/13 d13 --vm
Launching d13
stgraber@dakara:~$ incus exec d13 -- free -m
               total        used        free      shared  buff/cache   available
Mem:             879         238         662          19         102         640
Swap:              0           0           0
stgraber@dakara:~$ incus config set d13 limits.memory=4GiB
stgraber@dakara:~$ incus exec d13 -- free -m
               total        used        free      shared  buff/cache   available
Mem:            3951         351        3684          19         102        3600
Swap:              0           0           0

ログの処理とリモート syslog の再実装

Incus のロギングは、今まで 2 つの選択肢に限られていました:

  • ローカル syslog ロギング
  • リモート Loki ロギング(単一エンドポイント)

このリリースではそれが変わりました。新しい、より柔軟なロギングメカニズムが提供され、無制限のロギングターゲットが loki または syslog で許可され、含めるイベントが選択できるようになりました。

:

logging.loki01.target.type: loki
logging.loki01.target.address: https://loki01.int.example.net
logging.loki01.target.username: foo
logging.loki01.target.password: bar
logging.loki01.types: lifecycle,network-acl
logging.loki01.lifecycle.types: instance

logging.syslog01.target.type: syslog
logging.syslog01.target.address: syslog01.int.example.net
logging.syslog01.target.facility: security
logging.syslog01.types: logging
logging.syslog01.logging.level: warning

この例では、loki01syslog01 という 2 つのロギングターゲットが定義されています。前者は認証済みエンドポイント(リバースプロキシ)を通して Loki ロギングトラフィックを受信し、lifecycle(特にインスタンスに影響するイベント)と network-acl のイベントのみを送信します。後者は syslog ロギングを使用し、priority(優先度)が warning 以上のメッセージを送信します。

ドキュメント : https://linuxcontainers.org/incus/docs/main/server_config/#server-options-logging

複雑なネットワーク転送での SNAP サポート

ネットワーク転送では、ポートとポートレンジの指定方法を非常に柔軟に選択できます。
例えば、外部の 80443 番ポートを内部 IP のそれぞれ 12342345 番ポートに転送できます。

これはほとんどのケースでうまく機能します。しかし、UDP ポートを使用する WebRTC アプリケーションのような特定の状況では、トラフィックの一部が外部のクライアントからではなく、インスタンスから開始されます。このようなシナリオでは、インスタンスの 2345 番ポートから外に出るトラフィックは、転送アドレスの 443 番ポートから送信されたものとして外部に表示される必要があります。

これを実現するために準備されたのが、ネットワーク転送内の個々のポートに新たに追加された snat プロパティです。このプロパティは、インスタンスから出るトラフィックに対して、対応する SNAT ルールを設定します。

この機能は、(OVN ではない)通常のブリッジ上のネットワークのみ、そしてファイアウォールとして nftables を使っているシステム上でのみに限定して使えます。

ドキュメント : https://linuxcontainers.org/incus/docs/main/howto/network_forwards/#port-properties

access_token パラメーター経由での認証

Incus は主に 2 つの認証メカニズムをサポートしています:

  • TLS クライアント証明書
  • OpenID Connect (OIDC)

前者の場合、ほとんどのクライアントは TLS クライアント証明書を直接取得し、TLS 接続の一部としてクライアント証明書を使用します。しかし、クライアント側での処理が難しかったり(Web ブラウザーなど)、TLS 終端プロキシーが存在することが問題になったりするため、この方法は必ずしも常に機能するとは限りません。

このような理由から、Incus では TLS 証明書から署名付き Bearer トークンを生成し、それを HTTP の Authorization ヘッダーに渡す方法もサポートしています。

このリリースでは、同じ Bearer トークンを HTTP ヘッダーではなく、URL パラメーターの access_token として渡すことができるようになりました。

この主な理由は、JavaScript WebSocket API ではカスタムの HTTP ヘッダーを渡すことが許可されていないため、Web クライアントから認証済み WebSocket エンドポイントに接続できるようにするためです。

:

stgraber@dakara:~$ curl -k -s https://127.0.0.1:8443/1.0 | jq -r .metadata.auth
untrusted
stgraber@dakara:~$ curl -k -s https://127.0.0.1:8443/1.0?access_token=eyJhbGciOiJFUzM4NCIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZjQ3MzRhYzY3YzAzMDYxY2Y1Yzg5Y2UxYTQ2NDAwYjc4MzQ2MWRiOGI3MjlkMDhjNDZhYjE5MmM3ZDc2NTMxIiwiZXhwIjoxNzQ1NTMxOTA4LCJuYmYiOjE3NDU1MzE4NDgsImlhdCI6MTc0NTUzMTg0OH0.WcsG48XQ41fNhLUlf-nqwAyJrZKpCrfM-W8mOSNpt7cwPH-QhKZkiBDa3sFWIVOdo15_cOZBeNy1QbJu6rCnYYQ18LpNJNkSKPkcwi65-yBo7U7ync5BQCuhsOgxAQap | jq -r .metadata.auth
trusted

CLI におけるサーバーサイドフィルタリングの改善

Incus API 内で単一のオブジェクトタイプすべてのサーバーサイドフィルタリングを最近追加しました。これに続いて、CLI でも徐々にこのサポートを追加しています。これにより、特定のアイテムのみをリクエストする際、データベースとネットワークトラフィックを削減できます。

このリリースでは、次の機能がサーバーサイドフィルタリングに完全に移行しました:

  • インスタンス
  • イメージ
  • カスタムボリューム
  • プロファイル

:

stgraber@dakara:~$ incus profile list description=bar
+------+-------------+---------+
| NAME | DESCRIPTION | USED BY |
+------+-------------+---------+
| foo  | bar         | 0       |
+------+-------------+---------+

この作業の一部は、テキサス大学オースティン校の学生によって行われました。

生成されたドキュメントの拡充

設定キーを忘れてしまうリスクを避けるため、ほとんどの設定テーブルをコードから直接生成できるように移植する取り組みを継続してきました。

このリリースでは、次の項目が直接コードから抽出されるようになりました:

  • ネットワークブリッジ
  • ネットワーク転送
  • TPM デバイス
  • プロキシーデバイス
  • GPU デバイス
  • NIC デバイス
  • Infiniband デバイス

この作業はテキサス大学オースティン校の学生によって行われました。

すべての変更点

このリリースのすべての変更のリストは次の通りです(翻訳なし):

すべてのChangeLogを見る
  • doc: Fix missing OCI section
  • internal/instance: Tweak wording
  • doc: Update config
  • 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
  • doc: Fix config option reference on LINSTOR driver
  • incusd/instance/lxc: Fix max gid when in a privileged container
  • incus: Replace interface{} by any
  • internal/server/ip: Replace interface{} by any
  • shared/logger: Replace interface{} by any
  • client: Use strings.ReplaceAll
  • lxd-to-incus: Use strings.ReplaceAll
  • generate-database: Use strings.ReplaceAll
  • incusd/db/cluster: Update generated code
  • incus: Use strings.ReplaceAll
  • internal/linux: Use strings.ReplaceAll
  • incusd/apparmor: Use strings.ReplaceAll
  • incusd/auth: Use strings.ReplaceAll
  • incusd/db/cluster: Use strings.ReplaceAll
  • incusd/db: Use strings.ReplaceAll
  • incusd/device: Use strings.ReplaceAll
  • incusd/instance: Use strings.ReplaceAll
  • incusd/ip: Use strings.ReplaceAll
  • incusd/network: Use strings.ReplaceAll
  • incusd/storage: Use strings.ReplaceAll
  • incus/utils: Check type assertion
  • incusd/instance: Remove needless embedded fields
  • incusd/storage/s3: Simplify variable declaration
  • README: Fix typo
  • lxd-to-incus: Fix typo in trigger
  • incusd/instance/edk2: Limit test to UEFI architectures
  • doc/devices/disk: Fix restriction on path option
  • doc: Update configs
  • doc: Tweak ACME documentation
  • incusd/instances/qemu: Handle deprecation of runas
  • incusd/main_forknet: Handle missing DNS in DHCP response
  • incusd/instance/lxc: Pass limited environment to forkstart
  • incusd/instance/lxc: Don't reset resolv.conf
  • incusd/main_forknet: Use Fprintf
  • 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
  • incusd/instance/qemu: Avoid unnecessary snapshot loading
  • incusd/migrate: Bump timeouts to 30s
  • incusd/storage: Add missing forwarding on snapshot list
  • client: Pass ETag in UpdateWarning
  • client: Pass ETag in UpdateCluster
  • 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
  • client/oci: Only replace the first match
  • incus: Remove unused functions
  • incusd/instance/common: Fix concurrent restarts
  • 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
  • generate-database: Fix documentation for ignore
  • incusd/response: Remove redundant line break in error
  • incusd/main_forknet: Don't add gateway route if classless static routes are provided (as required by RFC 3442)
  • incusd/network/ovn: Add plumbing for state through OVN ACL functions
  • api: network_address_set
  • doc: Add documentation for network address sets
  • shared/api: Add network address sets
  • shared/api/lifecycle: Add events for network address sets
  • incusd/auth: Add network address sets
  • incusd/auth/openfga: Rebuild model
  • incusd/network/ovn: Add GetAddressSet
  • incusd/network/ovn: Add address set support
  • incusd/network/bridge: Add address set support
  • incusd/db/cluster: Add network_address_sets tables
  • incusd/db: Add network address set functions
  • incusd/network/acl: Add address set support
  • incusd/lifecycle: Add network address set events
  • incusd/firewall: Add address set support
  • incusd/projects: Clear address sets on delete
  • incusd/network/address-set: Add new API
  • incusd/device/nic/ovn: Handle address set when cleaing ACLs
  • client: Add network address set functions
  • incus: Add network address-set sub-command
  • i18n: Update translation templates
  • tests: Add tests for address sets
  • doc/rest-api: Refresh swagger YAML
  • doc: Update configs
  • 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
  • i18n: Update translation templates
  • 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: Update configs
  • doc: Use $USER instead of YOUR-USERNAME
  • doc: Ignore link that's blocking Azure
  • incusd/storage: Avoid querying pending pool status
  • incusd/storage/linstor: Fix pool size reporting
  • incusd/patches: Refresh OpenFGA model for address sets
  • incusd/network/common: Add gendoc comments for forward configurations
  • doc: Update configs
  • doc/network/forward: Use gendoc for network forwards
  • 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
  • incusd/instance/lxc: Restrict unprivileged ping to recent kernels
  • 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/main_forknet: Add dhcp static routes via 0.0.0.0 as scope link
  • incusd/main_forknet: Use logrus for logging and add a command argument for the logfile path
  • incusd/instance/lxc: Pass log file to forknet dhcp
  • incusd/device/disk: Fix registration of custom volumes
  • client: Add server-side filtering for profiles
  • incus/profile: Use server-side filtering
  • i18n: Update translation templates
  • 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
  • i18n: Update translation templates
  • doc: Replace Ubuntu in documentation examples
  • doc/requirements: Refresh a bit
  • scriptlet: Return proper error
  • incusd/instance: Also consider local CPU flags
  • gomod: Update dependencies
  • incusd/instance/qemu: Cap maxmem to host mem maximum

ドキュメント

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.12.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.4 LTS リリースのお知らせ

2025/04/04

はじめに

Incus チームは、Incus 6.0.4 のリリースのアナウンスができてうれしいです!

このリリースは、Incus 6.0 に対する 4 度目のバグ修正リリースです。Incus 6.0 は 2029 年 6 月までサポートされます。

変更点

いつもどおり、このバグ修正リリースは、安定性とセキュリティー強化にフォーカスを当てています。

データのマイグレーションやデータベースの変更を必要とせず、ユーザーが予期しない動きの変化に直面するようなことにはならない、マイナーな改善もバックポートされています。

このような改良の数は、LTS ブランチ内では時間の経過とともに減少するでしょう。

このリリースのハイライトは次のとおりです:

  • ブリッジネットワーク上のインスタンスのネットワーク ACL
  • QEMU スクリプトレットの強化
  • VM メモリーダンプ
  • OVN ネットワーク状態情報の拡充
  • サーバーの事前に与える構成ファイルの拡充
  • ACME DNS-01 サポート
  • API 全体のコレクションフィルタリング
  • VM での SMBIOS11 プロビジョニングサポート
  • VM での IOMMU サポート
  • routed NIC の VRF サポート
  • 新しい MAC アドレス帯
  • VM 内の USB NIC
  • VM 内の USB ディスク
  • ネットワークでの設定可能な DNS サーバー
  • DHCP 経由の追加 IPv4 ルート

コミットのすべてのリストは次のとおりです:

すべてのChangeLogを見る
  • api: network_ovn_state_addresses
  • shared/api: Expand OVN state with uplink addresses
  • doc/rest-api: Refresh swagger YAML
  • internal/server: Add uplink addresses to ovn state
  • incus/network/info: Add uplink addresses for ovn network
  • incus: Add --description flag to create commands
  • tests: Add tests for --description flag on create commands
  • Add simple shell.nix
  • Encode mc alias for storage buckets to match allowed characters
  • doc: Contributing section restructuring
  • incusd/network/ovn: Allow creation of OVN network with no uplink
  • incusd/network/ovn: Handle missing logical router in state
  • lxd-to-incus: Clear volatile.uuid from instances
  • github: Bump most workflows to 24.04
  • github: Split testsuite to separate action
  • github: Add aarch64 tests
  • tests: Skip nftables test on old kernels
  • shared/util: Add IsNoneOrEmpty
  • incusd/network/bridge: Tweak dnsmasq startup condition
  • shared/cgo: Add finalize_userns
  • shared/cgo: Export in_same_namespace
  • incusd/main_forkproxy: Join all namespaces at once
  • incusd/main_forkfile: Join all namespaces at once
  • internal/linux: Add ClearBlock
  • incusd/storage: Switch to linux.ClearBlock
  • internal/linux/discard: Remove leftover debugging
  • internal/linux/discard: Use marker length for buffer
  • internal/linux/discard: Add support for offset
  • incusd/storage/generic: Pass offset to ClearBlock
  • incusd/storage/lvm: Discard the new blocks on resize
  • incusd/storage/lvm: Run ClearBlock on all new thick block volumes
  • cmd: support header line for csv output
  • cmd: update --format flag description
  • cmd: add validation for --format flag
  • doc: fix ref for vendor-data
  • devcontainer: initial version
  • Makefile: add target for unit tests as root
  • Makefile: add missing installations for gotags and openfga
  • incusd/network/ovn: Skip remote peers when iterating peer networks
  • incusd/storage/lvm: Move resize clearing to SetVolumeQuota
  • incusd/storage: Make use of qemu-img's target-is-zero option
  • incusd/device/disk: Remove virtfs-proxy-helper dependency
  • tests: Remove 9p proxy driver
  • incusd/instance: Split startupHook function
  • incusd/main_cluster: Tweak to have help refer to correct command name
  • incusd/instance: Pass an *api.Instance to the scriptlet program
  • incusd/scriptlet/qemu: Add instance parameter to the QEMU scriptlet
  • incusd/instance: Rewire QEMU config generation
  • incusd/instance: Make QEMU config types public
  • incusd/scriptlet/qemu: Fix Starlark function name
  • incusd/scriptlet/qemu: Prevent calling QMP functions at config stage
  • incusd/device/disk: Better handle partitions
  • Fixed link to point to correct manpage.
  • lxd-to-incus: Be more lenient on database changes
  • incusd/storage/drivers: Handle 4k sector sizes
  • incusd/dnsmasq: Don't put the project name in the DNS record
  • incusd/device/disk: disable 9p if idmap requested
  • incusd/scriptlet/qemu: Add QEMU configuration getters
  • incusd/scriptlet/qemu: Add QEMU configuration setters
  • api: qemu_scriptlet_config
  • doc/ref/instance_options: Update QEMU scriptlet documentation
  • incusd/instance: Update unit test
  • incusd/instance/drivers: Introduce ReloadDevice
  • api: network_bridge_acl_devices
  • incusd/device/nic: ACL support for bridge NIC device
  • incusd/server/firewall: ACL for bridge NIC device
  • doc/device/nic: Add ACL support to bridge NICs
  • doc/network_acl: Document usage with bridged NICs
  • tests: nftable test with ACL rules
  • github: Switch to Github's hosted arm64 runners
  • doc: typo
  • doc: Updated storage_zfs.md
  • incusd/device/disk: Update correct mount options
  • incus/file/pull: Port to SFTP
  • api: instance_debug_memory
  • incusd/instances/qemu: Add vmcoreinfo device
  • incusd/instances/qemu: Add dump-guset-memory implementation for instance memory debugging
  • incusd: Add GET /1.0/instances/NAME/debug/memory
  • doc/rest-api: Refresh swagger YAML
  • client: Add API implementation for instance memory debugging
  • incus: Add "debug dump-memory" command
  • doc: Force white background for swagger API
  • i18n: Update translation templates
  • gomod: Update dependencies
  • api: init_preseed_storage_volumes
  • client: Add storage volume initialization
  • shared/api: Add storage volume initialization
  • doc: Include storage initialization example
  • doc/rest-api: Refresh swagger YAML
  • tests: Include storage volume to init test
  • incusd/instance/qemu: Fix device_id warning on 9.2.x
  • incus: Fix example description for debug dump-memory command
  • incusd/instance/drivers/qmp: Handle missing log directory
  • cmd/incus-user: keep track of socket path used to connect to the server
  • cmd/incus-user: unify logging, support --verbose and --debug
  • api: init_preseed_profile_project
  • shared/api: Add project support to profiles in preseed init
  • client: Add project support to profiles in preseed init
  • doc/rest-api: Refresh swagger YAML
  • incus/admin/init: use api.InitProfileProjectPost
  • incusd/network/ovn: Fix bad route check
  • incus/file/pull: Ensure we have a leading / in all paths
  • github: Fix shellcheck
  • gomod: Update dependencies
  • doc/installing: mention incus group on NixOS
  • incus/file/pull: Read files in chunks
  • incus/file/pull: Actually make read buffer 1MiB
  • incusd/network/bridge: Fix deletion of tunnels and dummy devices
  • incusd/device/disk: Allow virtiofsd on non-x86
  • incusd/instance/drivers/qemu: Add IOMMU device
  • incus/file: Remove unused function
  • incus/network/info (ovn): Fix object not found.
  • incusd/instance/drivers: Improve NUMA balancing
  • incus/file: Move from path to filepath
  • github: Add linux-modules-extra (for vrf)
  • shared/archive: Added LZ4 support
  • api: instance_nic_routed_host_address
  • incus/server/ip: Add Master parameter for veth and tuntap
  • incus/server/ip: Add VRF parameter for IP Route
  • incus/server/device: Add vrf parameter for routed NIC devices
  • tests: Add test for routed NIC with VRF
  • doc: Add description for routed-nic VRF parameter
  • generate-database: Move into cmd package
  • generate-config: Move to cmd package
  • incus/storage/drivers: Fix issue with lvmcluster storage pool creation
  • generate-database: Rename from incus-generate
  • generate-config: Rename from incus-doc
  • github: Workaround permission problems
  • internal/instance: Move user config key doc string
  • internal/instance: Add environment config keys docstring
  • incusd/internal/server/instance: Add qemuEscapeCmdline
  • incusd/internal/server/instance: Use qemuEscapeCmdline
  • api: instance_smbios
  • internal/instance: Add smbios config keys
  • incusd/instance/drivers/qemu: Implement smbios config keys
  • doc: Update configs
  • incus: Fix instance copy error when using '--refresh' flag
  • doc/network_load_balancers: Fix backend add instructions
  • doc: Add frontend to wordlist
  • incusd/main_nsexec: Fix change_namespaces fallback to handle multiple namespaces
  • incusd/instance/utils: Only check uid/gid for containers
  • generate-database: Use types.Package
  • generate-database: Remove support for separate database package
  • generate-database: Separate Go package loading
  • incusd/instance/drivers: Check if disk is remote when migrating with an extra disk
  • incusd/instance/edk2: Look for bios.bin in /usr/share/seabios
  • generate-database: Add unified generate command
  • incusd/db: Use generate command
  • generate-database: Remove obsolete commands stmt and method
  • generate-database: Update README.md
  • generate-database: Reduce to single go:generate per package
  • incusd/db: Use Single generate per package
  • golangci: Update for new generate-database syntax
  • internal/cmd/table: Improve errors on modifiers
  • incusd: Add additional validation when joining a new cluster member
  • incusd: Upgrade flosch/pongo2 to v6
  • Makefile: Bump minimal Go to 1.23
  • doc: Bump minimum Go to 1.23
  • github: Re-order code tests tasks
  • incusd/resources: Prevent concurrent runs and cache data for 10s
  • incusd/backup: Implement compatibility with old backups
  • incusd/backup: Detect incompatible backup files
  • incusd: Ensure directories have 755 permissions in 'incus file push -p' command
  • tests: Fix test for verifying directory permissions
  • devcontainer: Update Go to 1.23
  • generate-database: Make "Code generated" comment Go conformant
  • db/cluster: Update code generated by generate-database
  • generate-database: Add internal tool disclaimer
  • generate-config: Formatting README.md
  • generate-config: Add internal tool disclaimer
  • incusd/storage/drivers: Truncate the block file during custom volume migration
  • incusd/instance/qemu: Don't attempt to hotplug over the virtual IOMMU
  • incusd/device/disk: Remove diskAddRootUserNSEntry
  • incusd/device/disk: Use virtiofsd uid/gid handling
  • generate-database: Add error mapping
  • incusd/db: Use error mapping
  • gomod: Update dependencies
  • incusd/db/cluster: Fix cluster group table
  • incusd/db: Update generated files
  • generate-database: Make self-sufficient
  • incusd/db: Update generated code
  • generate-database: Improve case handling
  • incus/list: Remove unused arguments and parameters
  • incus/top: Fix handling of all-projects
  • incusd/storage/drivers: Refactor ceph discovery
  • incusd/instance/drivers: Let QEMU handle Ceph itself
  • incus/file: Simplify sftpCreateFile
  • incus/file: Change recursiveFilePush to use SFTP
  • incus/file: Change recursiveMkdir to use SFTP
  • incus/file: Change recursivePullFile to use SFTP
  • incus/file: Re-use SFTP as much as possible
  • internal/filter: Handle multiple in-line structs
  • api: api_filtering_extended
  • incusd: Add filtering to /1.0/networks
  • incusd: Add filtering to /1.0/networks/{networkName}/forwards
  • incusd: Add filtering to /1.0/networks/{networkName}/load-balancers
  • incusd: Add filtering to /1.0/networks/{networkName}/peers
  • incusd: Add filtering to /1.0/network-acls
  • incusd: Add filtering to /1.0/network-integrations
  • incusd: Add filtering to /1.0/network-zones
  • incusd: Add filtering to /1.0/network-zones/{zone}/records
  • incusd: Add filtering to /1.0/storage-pools
  • incusd: Add filtering to /1.0/storage-pools/{poolName}/buckets
  • incusd: Add filtering to /1.0/certificates
  • incusd: Add filtering to /1.0/profiles
  • incusd: Add filtering to /1.0/projects
  • doc/rest-api: Refresh swagger YAML
  • tests: Test more API filters
  • doc: Remove mention of limitations on filtering
  • api: acme_dns01
  • incusd/cluster/config: Add extra ACME config keys
  • incusd/acme: Add DNS-01 support
  • doc: Add resolvers to wordlist
  • doc: Update configs
  • incusd/network/bridge: Fix deletion of tunnels and dummy devices
  • incusd/device/disk: Include cluster name and config path in RBD string
  • incusd/instance/qemu: Provide the RBD keyring to QEMU
  • api: security_iommu
  • internal/instance: Add security.iommu
  • doc: Update configs
  • incusd/instance/qemu: Simplify Windows detection
  • incusd/instance/qemu: Implement security.iommu
  • incusd/instance/qemu: Add IOMMU for Windows
  • incusd/instance/qemu: Configure irqchip for split mode with IOMMU
  • doc: Add passthrough and IOMMU to wordlist
  • incusd/storage/ceph: Re-introduce keyring parsing
  • doc: Clarify virtiofsd requirements
  • incusd/migration: Change field type of Snapshots in VolumeTargetArgs
  • incusd: Adjust code for VolumeTargetArgs Snapshots type change
  • incusd/instance/drivers: Adjust code for VolumeTargetArgs Snapshots type change
  • incusd/storage: Adjust code for VolumeTargetArgs Snapshots type change
  • incusd/db: Add missing go:generate directive
  • incusd/db: Update generated code
  • incusd/device/disk: Do not allow mounting of custom block volume snapshots
  • generate-database: Abstract DB connection / DB transaction
  • incusd/db: Update generated code
  • lint: Add short import exception for *.mapper.go
  • generate-database: Accept interface instead of concrete type for PrepareStmts
  • incusd/db: Update generated code
  • cmd/list: Simplify evaluateShorthandFilter by reducing nesting levels
  • incusd/storage: Don't use sparse writer on thick LVM
  • shared/util: Add IsTruthy
  • generate-database: Validate struct tags
  • generate-database: Add marshal=json
  • generate-database: Update generated code
  • incusd/instance/edk2: Fix typo in function name
  • incusd/instance/edk2: Fix EDK2 path overwrite issue
  • incusd/instance/qemu: Propagate errors from edk2
  • incusd/instance_types: Introduce INCUS_SKIP_INSTANCE_TYPES
  • doc/environment: Add INCUS_SKIP_INSTANCE_TYPES
  • doc/environment: Sort the environment variables
  • incusd/ip: Error message styling
  • incusd/ip: Only parse MAC on ethernet links
  • internal/instance: Clarify security.secureboot setting
  • doc: Update configs
  • incusd/network/ovn: Fallback to OVN router address as DNS server
  • api: network_ipv4_dhcp_routes
  • shared/validate: Add IsDHCPRouteList
  • incusd/network/ovn: Add ipv4.dhcp.routes
  • incusd/network/bridge: Add ipv4.dhcp.routes
  • tests: Add tests for ipv4.dhcp.routes
  • doc: Add documentation for ipv4.dhcp.routes config
  • github: Pass shell type to shellcheck
  • generate-database: Handle constraint err in Create
  • incusd/db: Update generated code
  • generate-database: Check for tx if necessary
  • incusd/db: Update generated code
  • cmd/incus: Use the file extension of the edited file for the temp file, to help with syntax highlighting
  • incusd/api_internal: Centralize all internal API endpoints
  • tests: Update for re-organized internal endpoints
  • incus/drivers: Fix ZFS CreateVolume deletes pre-existing data on failure
  • incus/rebuild: Correct help message
  • incusd/cluster/config: Set default value for acme.ca_url
  • incusd/cluster/config: Return acme.provider.environment as a slice
  • incusd/acme: Remove DNS-01 provider (now using lego externally)
  • incusd/acme: Move DNS-01 to external lego binary
  • incusd/api_1_0: Trigger ACME on all ACME config options
  • incus/file: Always use 1MB chunks for SFTP
  • incusd/instance/lxc: Fail immediately if no idmap found
  • incusd/acme: use correct path
  • incusd/bgp: Rework start/stop logic
  • incusd/network/ovn: Skip existing static routes
  • incusd/instance/qemu: Set caching-mode with intel-iommu
  • incus-agent: Improve SFTP performance
  • incusd/instance/qemu: Move Windows check to a function
  • incusd/instance/qemu: Set RTC base to localtime on Windows
  • doc/api-extensions: Fix formatting
  • api: network_state_ovn_ls
  • incusd/network/ovn: Export LogicalRouter and LogicalSwitch names as needed
  • shared/api: Add LogicalSwitch to OVN state
  • incus/network: Add Logical Switch for OVN
  • incus/network: Better handle partial OVN state
  • doc/rest-api: Refresh swagger YAML
  • incus/network: Support for missing counters
  • shared/api: Make NetworkStateCounters a pointer
  • incusd/resources: Update for Counters being a pointer
  • incus/copy: Clear full device when overriding with type=none
  • doc/instance/create: Cover behavior on Windows
  • api: network_dns_nameservers
  • incusd/network/bridge: Add dns.nameservers
  • incusd/network/ovn: Add dns.nameservers
  • doc/network: Add dns.nameservers to bridge and OVN
  • incusd/network/ovn: Correctly remove individual DHCP options from OVN when they are unset
  • incusd/ports: Cleanup consts
  • api: acme_http01_port
  • incusd/cluster/config: Add acme.http.port
  • doc/rest-api: Refresh swagger YAML
  • incusd/acme: Use lego for HTTP-01
  • gomod: Update dependencies
  • i18n: Update translation templates
  • incusd/db: Add missing error mapper
  • incusd/instance/qmp: Add MachineDefinition function
  • internal/instance: Add volatile.vm.definition
  • doc: Update configs
  • incusd/instance/qemu: Use saved machine definition when restoring running VM
  • incusd/instance/qemu: Handle firmware vars name matching internal one
  • incusd: Switch MAC generation to Zabbly prefix
  • incusd: Switch to new MAC prefix
  • doc: Switch to new MAC prefix
  • incus: Switch to new MAC prefix
  • lxc-to-incus: Switch to new MAC prefix
  • shared/api: Switch to new MAC prefix
  • tests: Switch to new MAC prefix
  • doc/rest-api: Refresh swagger YAML
  • client: Fix spelling errors found by codespell
  • incusd/instance/edk2: Select SecureBoot capable firmware on Debian
  • api: network_ovn_ipv4_dhcp_expiry
  • incusd/network/ovn: Add option ipv4.dhcp.expiry for OVN networks
  • doc/reference/network_ovn: Add ipv4.dhcp.expiry
  • incusd/dns: Use shared mutex
  • incusd/network/ovn: Add UpdateLogicalSwitchPortDHCP
  • incusd/network/ovn: Reconfigure DHCP option on existing logical switch ports when DHCP is enabled on the network
  • generate-config: Fix gofumpt
  • lxd-to-incus: Fix gofumpt
  • incus-agent: Fix gofumpt
  • incus-benchmark: Fix gofumpt
  • incus-migrate: Fix gofumpt
  • incus-simplestreams: Fix gofumpt
  • incus-user: Fix gofumpt
  • lxc-to-incus: Fix gofumpt
  • incus: Fix gofumpt
  • shared/tls: Fix gofumpt
  • shared/termios: Fix gofumpt
  • shared/subprocess: Fix gofumpt
  • shared/simplestreams: Fix gofumpt
  • shared/logger: Fix gofumpt
  • shared/idmap: Fix gofumpt
  • shared/cliconfig: Fix gofumpt
  • internal/version: Fix gofumpt
  • internal/util: Fix gofumpt
  • internal/usbid: Fix gofumpt
  • internal/rsync: Fix gofumpt
  • internal/linux: Fix gofumpt
  • internal/io: Fix gofumpt
  • incusd/storage: Fix gofumpt
  • incusd/network: Fix gofumpt
  • incusd/apparmor: Fix gofumpt
  • incusd/backup: Fix gofumpt
  • incusd/cgroup: Fix gofumpt
  • incusd/cluster: Fix gofumpt
  • incusd/config: Fix gofumpt
  • incusd/db: Fix gofumpt
  • incusd/device: Fix gofumpt
  • incusd/dnsmasq: Fix gofumpt
  • incusd/endpoints: Fix gofumpt
  • incusd/events: Fix gofumpt
  • incusd/firewall: Fix gofumpt
  • incusd/ip: Fix gofumpt
  • incusd/metrics: Fix gofumpt
  • incusd/operations: Fix gofumpt
  • incusd/resources: Fix gofumpt
  • incusd/scriptlet: Fix gofumpt
  • incusd/seccomp: Fix gofumpt
  • incusd/sys: Fix gofumpt
  • incusd/util: Fix gofumpt
  • Makefile: Switch to gofumpt
  • golangci: Switch to gofumpt
  • generate-config: Use RunE
  • internal/linux: Fix missing export comments
  • incusd/seccomp: Fix import shadowing
  • incusd/cluster: Remove duplicate type declaration
  • incusd/bgp: Fix comment
  • incusd/network/ovn: Don't run bgpSetup twice
  • incusd/network/physical: Do full start following change of parent
  • incusd/apparmor: Move AppArmor profiles to separate files
  • doc: Fix spelling errors found by codespell
  • shared: Fix spelling errors found by codespell
  • tests: Fix spelling errors found by codespell
  • lint: Run codespell automatically
  • incusd/instance/common: Check PID validity
  • client: Fix gofumpt
  • incusd: Fix gofumpt
  • incusd/instance: Fix gofumpt
  • cmd: Fix spelling errors found by codespell
  • internal: Fix spelling errors found by codespell
  • incus/file: Properly handle relative source paths
  • cmd/storage: Typo 'Examples:' create storage
  • incusd/events: Don't open needless transactions
  • incusd/instances: Re-order evacuated check to limit DB calls
  • incusd: Limit calls to LocalNodeIsEvacuated
  • incusd/instances_post: Move non-DB logic outside of transaction
  • incusd/network/ovn: Fix default DNS IPv4 server
  • shared/osarch: Extend OS detection logic
  • incus-agent: Update for osarch change
  • incusd: Update for osarch change
  • internal/version: Update UserAgent logic for osarch change
  • api: instance_state_cpu_time
  • shared/api: Add AllocatedTime CPU field
  • incusd/cgroup: Add GetCPUCfsLimit
  • incusd/instance/lxc: Add AllocatedTime CPU field
  • incusd/instance/qemu: Add AllocatedTime CPU field
  • doc/rest-api: Refresh swagger YAML
  • test: Check CPU allocated time
  • incusd/certificates: Properly handle bad PEM data
  • cmd/generate-database/lex: Fix pluralization
  • cmd/generate-database/db: Consider marshal tagged fields as columns
  • cmd/generate-database/db: Support multi-package parsing
  • cmd/generate-database/db: Import entities from non-local packages
  • cmd/generate-database/db: Add GetNames
  • cmd/generate-database: Update docs
  • cmd/generate-database/file/boilerplate: Use tx for multi-queries
  • internal/server/db/cluster: Update generated code
  • cmd/generate-database/db: Fix generator tests
  • incusd/network/common: Handle missing BGP peer
  • incusd/cluster/evacuate: Don't live-migrate stopped instances
  • cmd/generate-database/db: Directly pass reference table and column names
  • internal/server/db/cluster: Specify table name on method declarations
  • internal/server/db/cluster: Update generated code
  • cmd/incusd: Update calls to generated code
  • cmd/generate-database/db: Make linter happy (defer loops)
  • api: network_io_bus
  • incusd/device/config: Add USB bus override
  • incusd/instance: Add support for USB NICs
  • incusd/device/nic: Add support for io.bus
  • incusd/storage/s3 Fixed minio client mc too ambious issue
  • doc/device/nic: Add support for io.bus
  • incusd/instance/qemu enable s4 by default
  • doc/instance_options: Updates raw.qemu.conf example
  • incusd/networks: Validate configuration on join too
  • Makefile: Bump base Go 1.23 version
  • gomod: Update dependencies
  • cmd/generate-database/db: Fix GetNames spacing
  • github: Rework issue templates
  • internal/server/storage/s3: Add minio-client to list of potential binary names
  • doc: Update Debian installation documentation
  • internal/server/storage/s3: Update logic for checking MinIO version from multiple possible binary names
  • incusd/auth: Tweak SQL queries
  • incusd/auth: Properly handle network integrations
  • incusd/db/cluster/entities: Sort maps
  • doc/network-integration: Document properties
  • api: disk_io_bus_usb
  • incusd/device/disk: Add support for USB bus
  • incusd/instance/qemu: Add support for USB disks
  • doc: Update configs
  • golangci: Upgrade to version 2
  • incusd/storage/s3 minio client check enhancement
  • golangci: Disable STI005 error checks
  • test: Fix deprecated chown syntax
  • test: Fix test cleanup
  • shared/validate: Add string length validator
  • shared/validate: Add minimum duration validator
  • incusd/sys: Add Hostname to OS struct
  • incusd/instance/drivers: Populate StorageMove and StoragePool when migrating lxc instances
  • incusd/storage: Populate StorageMove and StoragePool when migrating volumes
  • incusd/storage: Add more parameters to MigrationTypes
  • incusd/network/ovn: Remove internal routes to forward/load-balancers
  • doc/ref/storage_ceph: Fix typo
  • tests: Tweak volume sizes
  • tests: Be more specific on selecting property
  • incusd/instance/edk2: Always prefer the EDK2 override
  • doc/support: Update feature release version
  • incusd/instance: Don't enforce device/config validation on snapshots
  • i18n: Update translation templates
  • incus: Replace interface{} by any
  • internal/server/ip: Replace interface{} by any
  • shared/logger: Replace interface{} by any
  • client: Capture original OCI image identifier
  • fix: Don't attempt to download signatures for oci
  • client/oci: Add errors for missing umoci
  • client: Add proxy host to skopoe calls
  • client/oci: Add errors for missing skopeo
  • client: Use strings.ReplaceAll
  • lxd-to-incus: Use strings.ReplaceAll
  • generate-database: Use strings.ReplaceAll
  • incusd/db/cluster: Update generated code
  • incus: Use strings.ReplaceAll
  • internal/linux: Use strings.ReplaceAll
  • incusd/apparmor: Use strings.ReplaceAll
  • incusd/auth: Use strings.ReplaceAll
  • incusd/db/cluster: Use strings.ReplaceAll
  • incusd/db: Use strings.ReplaceAll
  • incusd/device: Use strings.ReplaceAll
  • incusd/instance: Use strings.ReplaceAll
  • incusd/ip: Use strings.ReplaceAll
  • incusd/network: Use strings.ReplaceAll
  • incusd/storage: Use strings.ReplaceAll
  • incus/utils: Check type assertion
  • incusd/instance: Remove needless embedded fields
  • incusd/storage/s3: Simplify variable declaration
  • incusd: Fix missing line breaks
  • README: Fix typo
  • lxd-to-incus: Fix typo in trigger
  • incusd/instance/edk2: Limit test to UEFI architectures
  • doc/devices/disk: Fix restriction on path option
  • doc: Update configs
  • doc: Tweak ACME documentation
  • incusd/instances/qemu: Handle deprecation of runas
  • incusd/instance/lxc: Pass limited environment to forkstart
  • incusd/instance/qemu: Avoid unnecessary snapshot loading
  • incusd/migrate: Bump timeouts to 30s
  • incusd/storage: Add missing forwarding on snapshot list
  • client: Pass ETag in UpdateWarning
  • client: Pass ETag in UpdateCluster
  • client/oci: Only replace the first match
  • incusd/instance/common: Fix concurrent restarts
  • generate-database: Fix documentation for ignore
  • incus: Remove unused functions

パッケージ作成者への注意: Incus は、ACME サポートのロジックをすべて incusd バイナリー自体に組み込むのではなく、外部の lego コマンドに依存するようになりました。ACME 証明書の発行サポートを維持したい場合、Incus は lego に依存することに注意してください。

サポートとアップグレード

Incus 6.0 ブランチは 2029 年 6 月までサポートされます。常に最新の LTS バグ修正リリースを実行することを強く推奨します。

ダウンロード

感謝

この LTS リリースアップデートは、Sovereign Tech Fund(現在は Sovereign Tech Agency の一部)からの資金提供により実現しました。

Sovereign Tech Fund Logo

Sovereign Tech Fund は、オープンデジタルインフラストラクチャーの開発、改良、保守をサポートします。その目標は、セキュリティ、レジリエンス、技術の多様性、コードの背後にいる人々に焦点を当て、オープンソースエコシステムを持続的に強化することです。

詳細は https://www.sovereign.tech をご覧ください。

以前のニュース