Actualités¶
Incus 6.15 est maintenant disponible¶
1 août 2025
Introduction¶
L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.15 !
Cette nouvelle version apporte des améliorations un peu partout, que ce soit pour les conteneurs d’application, les VM, le clustering, le réseau, ou encore l’outil en ligne de commande.
Comme d’habitude, vous pouvez l’essayer vous-même en ligne : https://linuxcontainers.org/incus/try-it/
Ajoutons que nous avons fait de gros progrès sur Incus OS, et l’utilisons à présent pour faire tourner l’environnement de démonstration. Nous avons également conçu un outil de téléchargement, avec des instructions disponibles ici.
Nouvelles fonctionnalités¶
Support de l’authentification pour les registres OCI¶
Incus supporte désormais l’utilisation de modules d’authentification pour interagir avec les registres OCI. Les modules peuvent être spécifiés par l’intermédiaire de la nouvelle option --credentials-helper
dans la commande incus remote add
.
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: []
Utilisation de webhooks comme cibles de journalisation¶
Nous avons récemment retravaillé notre système de journalisation pour supporter l’ajout de plusieurs cibles, avec divers filtres, et avons ajouté le support de la journalisation par l’intermédiaire de syslog, en plus du support préexistant pour loki.
Dans cette version, nous ajoutons un nouveau type de cible : les webhooks.
Le système supporte les mêmes fonctionnalités que pour les deux autres types de cibles, et envoie les événements en JSON à la cible webhook. La syntaxe JSON est la même que celle utilisée dans notre API d’événements.
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
Suite à cela, le serveur cible reçoit les événements ainsi :
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"}
Documentation : https://linuxcontainers.org/incus/docs/main/server_config/#server-options-logging
Meilleur contrôle du hotplug mémoire¶
Il y a quelques versions, nous avons ajouté le support du hotplug mémoire dans les machines virtuelles.
Cette fonctionnalité entraînait une certaine difficulté à déterminer la quantité maximale de mémoire qu’une VM peut recevoir en hotplug.
Cela est assez complexe, puisque nous nous confrontons à des limites physiques (les tailles des adresses mémoire physiques et virtuelles), ainsi qu’à un certain coût difficilement prédictible. Nous avons fait quelques ajustements dans la logique de hotplug au cours des dernières versions, et sommes arrivés à quelque chose qui semble fonctionner correctement dans la grande majorité des cas.
Cela dit, ils est apparu qu’avoir plus de contrôle sur la quantité de mémoire qui peut être ajoutée à chaud, et même permettre de désactiver la fonctionnalité dans certains cas, pouvait être une bonne idée.
Nous avons donc ajouté la clef de configuration limits.memory.hotplug
, correspondant à la quantité maximale de mémoire (incluant la mémoire rajoutée à chaud) qu’une VM peut avoir. La valeur 0
désactive complètement la fonctionnalité.
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
Documentation : https://linuxcontainers.org/incus/docs/main/reference/instance_options/#instance-resource-limits:limits.memory.hotplug
Persistance de l’éjection des CD-ROM dans les VM¶
Nous gardons désormais en mémoire le fait qu’un CD-ROM a été éjecté par l’OS invité.
Cela se fait par l’intermédiaire de la nouvelle propriété attached
pour les périphériques de type disk
, qui est automatiquement définie à false
à l’éjection de ceux-ci.
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: ""
Documentation : https://linuxcontainers.org/incus/docs/main/reference/devices_disk/#devices-disk:attached
Configuration du WWN pour les disques des VM¶
Il s’agit d’une fonctionnalité de niche : il est désormais possible de définir le World Wide Name (WWN) des périphériques disque des VM. Cela ne fonctionne que lorsque le disque est attaché au bus virtio-scsi
.
Cela peut être utile à certaines applications lorsqu’un LUN ou disque physique est monté dans une VM. La fonctionnalité peut également être utilisée pour tester le multipath dans une VM, en exhibant plusieurs disques avec le même WWN.
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
Documentation : https://linuxcontainers.org/incus/docs/main/reference/devices_disk/#devices-disk:wwn
Adresses IPv6 dynamiques¶
Il s’agit d’une autre fonctionnalité utile dans un nombre très réduit de cas.
Dans les environnements en cluster, il est commun de devoir lancer un certain nombre de services en support du cluster, comme un control plane OVN, des composants Ceph, des outils de supervision…
Pour assurer leur bon fonctionnement, ils doivent pouvoir être contactés depuis tous les serveurs du cluster, tout en étant facilement déplaçables d’un serveur à l’autre, en cas de maintenance ou d’incident. Généralement, cela est assuré par un réseau physique, avec un VLAN routé accessible à tous les serveurs, mais ça n’est pas le cas partout.
Pour les environnements qui ne suivent pas cette architecture, nous proposons un bridge au sein du cluster qui, combiné à notre support VXLAN multicast, donne lieu à un réseau virtuel léger disponible pour tous les serveurs.
Vient ensuite la question de l’adressage. Nous ne pouvons pas faire tourner un serveur DHCPv4 sur ce réseau sans coordination entre les serveurs, mais nous pouvons faire du SLAAC dérivé à partir des adresses MAC.
Pour que cela fonctionne, les serveurs doivent utiliser une adresse MAC différente pour ce bridge, et, plus important encore, utiliser une adresse IPv6 différente (dans le même sous-réseau).
Nous avons ainsi étendu la syntaxe de ipv6.address
pour permettre d’y spécifier un sous-réseau seul. Quand c’est le cas, le serveur va générer une adresse MAC unique pour le bridge, puis en dériver une adresse IPv6 (avec EUI64).
Voici le résultat :
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
Configuration du mode keepalive dans la CLI¶
L’outil en ligne de commande d’Incus a un mode keepalive depuis un certain moment.
Celui-ci permet de garder une connexion active avec un serveur Incus distant, même après l’arrêt du processus de la CLI, rendant l’exécution des commandes suivantes plus rapide.
Il est désormais possible d’activer ce mode à l’ajout d’un serveur distant en passant l’argument --keepalive
, avec le délai souhaité pour le processus en arrière-plan.
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
Support de Markdown comme format de sortie de la CLI¶
Il est à présent possible de formatter le retour des commandes d’Incus en Markdown, simplifiant leur inclusion dans des documents ou encore sur notre forum.
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 |
Le rendu est le suivant :
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 |
Davantage de filtrage côté serveur¶
Dans cette version, nous achevons le support dans la CLI du filtrage côté serveur des objets de l’API.
Les deux commandes qui supportent à présent le filtrage sont :
incus cluster list
incus storage list
Utilisation de netlink pour la configuration réseau¶
Il ne s’agit pas d’une nouvelle fonctionnalité en soi, mais cela représente toutefois un changement conséquent.
Avec cette nouvelle version, nous avons remplacé nos appels manuels à iproute2 (ip
, tc
…) par des interactions directes avec le noyau Linux au travers de son API netlink.
Cela enlève un certain nombre de surcouches, et nous permet de ne plus avoir à nous soucier des versions des outils utilisés, mais ce genre de grands changements vient avec un risque de régression.
Pour cette raison, nous avons migré immédiatement après la version 6.14, nous laissant un mois complet pour identifier et corriger ces régressions. Nous en avons identifié un certain nombre, que nous avons résolues, mais il est possible que nos tests en aient manqué.
Si vous repérez une quelconque régression ou un changement de comportement sur les interfaces réseau ou le routage, merci de nous le faire savoir pour que nous analysions le problème.
Liste complète des changements¶
Voici une liste complète de tous les changements apportés par cette version :
Liste complète des commits
- 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
Documentation¶
La documentation d’Incus peut être consultée sur :
https://linuxcontainers.org/incus/docs/main/
Paquets¶
Incus ne fournit pas de paquet d’installation mais bien un tarball à chaque version. Vous trouverez ci-dessous différentes solutions pour mettre Incus en service.
Installation du serveur Incus sous Linux¶
Incus est disponible sur la plupart des distributions Linux courantes. Vous trouverez des instructions d’installation détaillées dans notre documentation.
https://linuxcontainers.org/incus/docs/main/installing/
Paquet Homebrew du client Incus¶
Le client Incus est disponible sur Homebrew pour Linux et macOS.
https://formulae.brew.sh/formula/incus
Paquet Chocolatey du client Incus¶
Le client Incus est disponible sur Chocolatey pour les utilisateurs de Windows.
https://community.chocolatey.org/packages/incus/6.15.0
Paquet Winget du client Incus¶
Le client Incus est aussi disponible sur Winget pour les utilisateurs de Windows.
https://winstall.app/apps/LinuxContainers.Incus
Support¶
Les versions de fonctionnalité d’Incus ne sont supportées que jusqu’à la sortie de la suivante. Les personnes souhaitant un support plus long et des changements moins fréquents devraient plutôt envisager d’utiliser Incus 6.0 LTS.
Le support communautaire est disponible sur : https://discuss.linuxcontainers.org
Un support commercial est disponible sur : https://zabbly.com/incus
Les bugs peuvent être signalés sur : https://github.com/lxc/incus/issues
Incus 6.14 est maintenant disponible¶
28 juin 2025
Introduction¶
L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.14 !
C’est une version avec de plus modestes apports : quelques corrections de bugs et améliorations de performances, concluant une partie du travail mené avec les étudiants de l’Université du Texas, et quelques nouvelles fonctionnalités.
Elle corrige également quelques vulnérabilités affectant les personnes utilisant des ACL sur des réseaux bridge avec un pare-feu nftables.
Comme d’habitude, vous pouvez l’essayer vous-même en ligne : https://linuxcontainers.org/incus/try-it/
Correctifs de sécurité¶
Cette nouvelle version corrige deux vulnérabilités rapportées par Olivier BAL-PETRE, de l’ANSSI (agence française de sécurité des systèmes d'information).
Les deux vulnérabilités étaient liées à l’utilisation par Incus d’ACL réseau sur des bridges locaux utilisant un pare-feu nftables, en combinaison avec certaines de nos fonctionnalités d’isolation réseau.
Un changement récent dans la logique des ACL dans Incus 6.12 permettait d’outrepasser certains mécanismes d’isolation et d’autoriser l’utilisateur root sur une instance à causer une attaque par déni de service ou à se faire passer pour l’hôte et potentiellement intercepter du trafic d’instances du même réseau.
- CVE-2025-52890 (Incus creates nftables rules that partially bypass security options)
- CVE-2025-52889 (Incus Allocation of Resources Without Limits allows firewall rule bypass on managed bridge networks)
Comme mentionné, les versions concernées sont Incus 6.12 et Incus 6.13. Ces deux versions mensuelles d’Incus ne sont à présent plus supportées du fait de la sortie d’Incus 6.14.
La dernière version LTS n’est pas affectée par ces vulnérabilités.
Nouvelles fonctionnalités¶
Téléversement de sauvegardes d’instances et de volumes via S3¶
Les sauvegardes d’instances et de volumes peuvent désormais être automatiquement téléversées dans un bucket S3. Cette fonctionnalité est pour l’instant uniquement disponible au travers de l’API, pour une éventuelle utilisation par des systèmes de sauvegarde.
Incus générera comme d’habitude un fichier de sauvegarde, puis le téléversera vers le bucket cible avant de supprimer sa copie locale.
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" }
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Personnalisation de l’expiration des instantanés à leur création¶
Une nouvelle option --expiry
a été ajoutée aux commandes incus snapshot create
et incus storage volume snapshot create
. Celle-ci permet de modifier la date d’expiration d’un instantané à sa création, changeant la valeur par défaut du serveur.
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 | +------+----------------------+----------------------+----------+
Modification du délai d’expiration par défaut pour les instantanés créés manuellement¶
Le délai d’expiration par défaut peut maintenant être modifié par l’intermédiaire de la clef de configuration snapshots.expiry.manual
. Lorsqu’elle n’est pas définie, Incus utilise la valeur snapshots.expiry
, qui est également utilisée pour les instantanés créés automatiquement.
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 | +--------+----------------------+----------------------+----------+
Ajustements dans la migration à chaud et information d’avancement¶
Pour réduire le temps de migration pour les VM qui modifient activement leur mémoire, nous avons effectué quelques ajustements dans la logique de transfert de la mémoire.
Incus va à présent limiter plus agressivement le CPU des VM en cours de migration, en commençant par une limitation à 50 % de sa capacité après la première tentative de migration, puis en la limitant davantage si beaucoup de changements ont eu lieu en RAM.
Enfin, Incus va à présent fournir des informations sur l’avancement de la migration.
Information sur la taille des adresses CPU dans l’API des ressources¶
D’un CPU et d’une plateforme à l’autre, les adresses physiques et virtuelles peuvent avoir des tailles différentes.
Cela contraint la quantité de mémoire maximale disponible pour une machine virtuelle, que ce soit au démarrage ou après un hotplug.
Pour cette raison, Incus a besoin de surveiller ces valeurs pour ajuster la quantité maximale de mémoire hotpluggable dans les VM.
stgraber@castiana:~$ incus query /1.0/resources | jq .cpu.sockets[0].address_sizes { "physical_bits": 48, "virtual_bits": 48 }
Transition des traitements en base de données vers notre générateur de code¶
Nous avons procédé à la transition d’un certain nombre d’objets réseau vers notre générateur de code pour les traitements en base de données.
Dans cette version, les deux objets suivants ont été convertis :
- Redirections réseau
- Peers réseau
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Liste complète des changements¶
Voici une liste complète de tous les changements apportés par cette version :
Liste complète des commits
- 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)
Documentation¶
La documentation d’Incus peut être consultée sur :
https://linuxcontainers.org/incus/docs/main/
Paquets¶
Incus ne fournit pas de paquet d’installation mais bien un tarball à chaque version. Vous trouverez ci-dessous différentes solutions pour mettre Incus en service.
Installation du serveur Incus sous Linux¶
Incus est disponible sur la plupart des distributions Linux courantes. Vous trouverez des instructions d’installation détaillées dans notre documentation.
https://linuxcontainers.org/incus/docs/main/installing/
Paquet Homebrew du client Incus¶
Le client Incus est disponible sur Homebrew pour Linux et macOS.
https://formulae.brew.sh/formula/incus
Paquet Chocolatey du client Incus¶
Le client Incus est disponible sur Chocolatey pour les utilisateurs de Windows.
https://community.chocolatey.org/packages/incus/6.14.0
Paquet Winget du client Incus¶
Le client Incus est aussi disponible sur Winget pour les utilisateurs de Windows.
https://winstall.app/apps/LinuxContainers.Incus
Support¶
Les versions de fonctionnalité d’Incus ne sont supportées que jusqu’à la sortie de la suivante. Les personnes souhaitant un support plus long et des changements moins fréquents devraient plutôt envisager d’utiliser Incus 6.0 LTS.
Le support communautaire est disponible sur : https://discuss.linuxcontainers.org
Un support commercial est disponible sur : https://zabbly.com/incus
Les bugs peuvent être signalés sur : https://github.com/lxc/incus/issues
Incus 6.13 est maintenant disponible¶
30 mai 2025
Introduction¶
L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.13 !
Cette version apporte BEAUCOUP de nouvelles fonctionnalités de toutes tailles et pour tous les cas d’utilisation, donc tout le monde devrait être servi !
Comme d’habitude, vous pouvez l’essayer vous-même en ligne : https://linuxcontainers.org/incus/try-it/
Nouvelles fonctionnalités¶
Agent pour les VM Windows¶
La logique de l’agent Incus pour les VM a été refactorisée pour que celui-ci soit construit pour des systèmes d’exploitation autres que Linux, et une première implémentation pour Windows a été réalisée.
Il s’agit encore d’un travail préliminaire, puisque Windows ne possède pas de driver VirtIO signé pour vsock, qu’Incus utilise normalement pour communiquer avec son agent.
Cependant, le protocole que nous utilisons par-dessus vsock est HTTPS, donc nous nous en sommes contentés pour nous connecter (via le réseau donc) à l’agent Windows. Cela ne peut fonctionner que si Incus connaît l’adresse IP de la VM, et que celle-ci est directement joignable depuis l’hôte. Nous avons pour espoir de remplacer cette solution par une connexion vsock native dans le futur.
Cet agent permet de lancer des commandes avec incus exec
, d’obtenir les détails de l’OS avec incus info
et de transférer des fichiers avec incus file
.
Pour que l’agent fonctionne, il faut attacher un disque avec source=agent:config
à la VM Windows, qui se présente à l’OS comme un CD-ROM content l’agent Windows (s’il a été packagé dans la distribution de l’hôte) ainsi que les fichiers de configuration nécessaires.
À partir de là, vous pouvez démarrer l’agent manuellement ou le configurer comme un service système.
Nous aimerions des retours de personnes ayant de l’expérience dans les systèmes Windows pour améliorer l’utilisabilité de l’agent, par exemple en fournissant un script d’installation dans le CD-ROM, ou encore en y incluant les fonctionnalités qui manquent par rapport à l’agent Linux.
Cet effort de plusieurs mois a été rendu possible grâce au soutien financier du Sovereign Tech Fund.
Améliorations dans incus-migrate
¶
Un certain nombre d’améliorations ont été apportées à notre outil incus-migrate
.
Pour rappel, cet outil peut être lancé sur un serveur distant afin de le convertir en conteneur ou VM Incus, ou de convertir des conteneurs ou VM qu’il virtualise en instances importables dans Incus.
Avec cette nouvelle version, incus-migrate
supporte à présent :
- Le téléversement d’arbres de fichiers ou d’images disques comme volumes personnalisés
- L’import de disques additionnels ou de systèmes de fichiers lors de la création d’une nouvelle instance
- L’import d’une image OVA comme nouvelle instance
- La sélection d’un serveur ou d’un groupe de serveurs spécifique lorsqu’Incus est clusterisé
Des binaires statiques de incus-migrate
sont disponibles sur GitHub, utiles pour procéder à la conversion d’un système qui n’utilise pas déjà Incus.
Accès aux volumes personnalisés en SFTP¶
Nous cherchons progressivement à ce que les volumes personnalisés (de type système de fichiers) supportent une API similaire à celle que nous avons déjà pour les fichiers des instances.
Nous avons fait un premier pas dans ce sens : Incus supporte désormais les opérations en SFTP sur ces volumes, avec la commande incus storage volume file mount
. Les autres APIs et commandes devraient débarquer dans Incus 6.14.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Configuration des adresses IP externes des instances sur les réseaux OVN¶
Deux nouvelles clefs de configuration pour les cartes réseau des instances ont été ajoutées :
ipv4.address.external
ipv6.address.external
Ces clefs peuvent être utilisées pour configurer quelle adresse IP une instance doit utiliser pour le trafic sortant initié par celle-ci. Il s’agit typiquement de l’adresse externe du réseau (par défaut) ou d’une adresse de forward qui pointe sur l’instance.
Documentation : https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nictype-ovn
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Possibilité de fixer l’adresse MAC de la gateway sur les réseaux OVN¶
OVN gère une table d’association entre les adresses IP et les adresses MAC (équivalente aux tables ARP et NDP). Cette table est peuplée la première fois qu’OVN a besoin d’interagir avec une adresse donnée.
Ce n’est pas toujours idéal, dans la mesure où les réseaux utilisant VRRP ou d’autres mécanismes de MAC virtuelles peuvent avoir besoin de préconfigurer une adresse MAC donnée pour la gateway, et enregistrer l’information dans OVN.
Deux nouvelles clefs de configuration rendent cela possible sur les uplinks OVN de type physical
:
ipv4.gateway.hwaddr
ipv6.gateway.hwaddr
Documentation: https://linuxcontainers.org/incus/docs/main/reference/network_physical/
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Gestion de l’horloge dans les machines virtuelles¶
Incus définit désormais automatiquement l’option invtsc
de QEMU sur les machines virtuelles qui n’ont pas pour vocation à être migrées.
De plus, Incus écoute à présent les événements RTC provenant de QEMU afin de rendre persistantes les horloges RTC des VM. Cela permet de mieux gérer les VM Windows ainsi que les autres VM qui n’utilisent pas d’horloge matérielle UTC.
Nouvelles commandes get-client-certificate
et get-client-token
¶
L’outil en ligne de commande possède deux nouvelles commandes, incus remote get-client-certificate
et incus remote get-client-token
, permettant de simplifier l’extraction des certificats clients et l’émission de JWT à partir d’un certificat client depuis des scripts externes.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Support de DHCPv6 pour les conteneurs OCI¶
Le client DHCP intégré utilisé pour les conteneurs OCI est maintenant capable de faire du DHCPv6 stateful et stateless.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Configuration des tables réseau de l’hôte pour les cartes réseau routées¶
Incus permettait de contrôler dans quelle table de routage injecter les routes pour les cartes réseau de type routed
, mais cela manquait de flexibilité.
Désormais, nous avons de nouvelles clefs de configuration :
ipv4.host_tables
ipv6.host_tables
Celles-ci prennent une liste de tables, séparées par des virgules, dans lesquelles injecter les routes.
Documentation: https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nictype-routed
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Support de la publication d’images scindées¶
Jusqu’à présent, lancer incus publish
générait des images unifiées, à savoir un seul fichier, souvent un tarball compressé, qui contenait à la fois le disque racine et la configuration Incus.
Désormais, nous supportons la génération d’images scindées, composées de deux fichiers, l’un pour les métadonnées Incus et l’autres pour les données du disque racine.
Dans l’outil en ligne de commande, il suffit de passer l’option --format=split
à incus publish
.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Preseed de certificats¶
Les preseeds des serveurs Incus peuvent désormais inclure des certificats.
Par exemple :
certificates: - type: client name: my-client certificate: |- PEM ENCODED CERTIFICATE
Cette fonctionnalité est particulièrement utile lors du provisionnement automatique de systèmes comme Incus OS.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Configuration du formattage des listes¶
Le fichier de configuration de l’outil en ligne de commande d’Incus (habituellement ~/.config/incus/config.yml
) peut maintenant être utilisé pour définir un format d’affichage pour les listes.
Par exemple :
defaults: list_format: compact
Cet exemple est équivalent à passer --format=compact
à toutes les commandes list
.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Ajout d’alias pour les commandes de création et de suppression¶
L’invite de commande Incus a été conçue de telle sorte que :
- Un objet portant un état a besoin d’être créé (
create
) et supprimé (delete
) - Un objet ou une relation sans état a besoin d’être ajouté (
add
) et enlevé (remove
)
Cette distinction a été faite pour signaler le risque associé à chaque action, mais peut également donner une impression de manque de cohérence, rendant ainsi plus complexe la création de scripts autour d’Incus.
Pour résoudre ce problème, nous avons ajouté un certain nombre d’alias dans l’outil en ligne de commande afin de trouver plus rapidement la commande voulue.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Conversion des appels SQL codés en dur vers notre générateur de code¶
La base de code d’Incus inclut un générateur de code pour les appels à la base de données.
Ce générateur est utile pour garantir la cohérence du comportement et éviter un certain nombre d’erreurs qui peuvent être commises en écrivant des requêtes à la main.
Bien qu’il soit de fait requis que toutes les nouvelles tables de la base utilisent le générateur, nous avons toujours un certain nombre d’objets qui ne l’utilisent pas.
Avec cette nouvelle version, nous avons terminé la migration des objets suivants :
- ACL réseau
- Load-balancers réseau
- Zones réseau
Bien que tous nos tests soient au vert, ce genre de refonte présente un certain risque d’introduction de régressions. Si vous notez le moindre changement de comportement avec ces objets dans Incus 6.13, merci d’ouvrir une issue pour que nous puissions investiguer.
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Filtrage côté serveur¶
Cette nouvelle version étend davantage les fonctionnalités de filtrage côté serveur.
Le filtrage est maintenant supporté pour :
incus network list
incus storage bucket list
incus project list
incus config trust list
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Documentation générée à partir du code¶
Nous avons également continué notre projet de génération automatique de documentation pour les clefs de configuration. Dans cette version, nous avons à présent de la documentation générée pour :
- Les périphériques PCI
- Les réseaux OVN
- Les réseaux physiques
- Les réseaux SR-IOV
- Les réseaux macvlan
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Intégration des métriques d’Incus OS dans l’API d’export des métriques Incus¶
Lorsqu’Incus est lancé depuis Incus OS, les métriques de l’hôte (extraites avec node-exporter) sont désormais automatiquement incluses dans l’API d’export de métriques d’Incus.
Ce choix a été fait car Incus OS essaie de limiter au maximum le nombre de ports ouverts, et d’imposer au trafic d’être authentifié et autorisé au travers d’une pile logicielle unique (Incus lui-même).
Avis pour les packagers¶
Nous n’utilisons plus la commande externe umoci
et lui avons préféré le paquet Go équivalent.
Pour bénéficier du support du nouvel agent Windows, celui-ci doit également être compilé pour Windows, et rendu disponible à Incus en complément de l’agent Linux.
Liste complète des changements¶
Voici une liste complète de tous les changements apportés par cette version :
Liste complète des commits
- 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
torouter
so it does not collide with the package of the same name - cmd/incus-agent: rename variable
mux
torouter
so it does not collide with the package of the same name - incusd: rename all instances of sha256.New() to hash256 so they dont collide with the package name
- client: rename all instances of sha256.New() to hash256 so they dont collide with the package name
- cmd/incus-migrate: add missing switch case with explicit comment
- incusd: internalize the default case into the switch so it covers all iota constants
- internal/filter: internalize the default case into the switch so it covers all iota constants
- incusd: add missing err handling for transactions
- incusd/storage: Fix migration error due to rounding
- incusd/storage/zfs: Optimize snapshot deletion
- incusd: add more ErrorList tests for error formatting
- incusd: refactor Error implementation of ErrorList
- incusd: make all functions on ErrorList take a pointer receiver
- incusd: rename Error struct and make it private
- internal/iprange: add tests for the iprange.Range struct
- internal/dnsutil: remove unused package dnsutil
- incusd: rename instanceActionToOptype to instanceActionToOpType
- incusd/instance/drivers: Rewrite QEMU config override logic
- incusd/instance/drivers: Adapt the tests to the new override logic
- incusd/instance/drivers: Drop old RegEx parser and return proper errors
- incusd/instance/drivers: Update tests
- tools: Add govulncheck
- incusd: remove redundant size 0 initialization for maps
- cmd/generate-config: remove redundant size 0 initialization for maps
- cmd/lxc-to-incus: remove redundant size 0 initialization for maps
- incusd/certificates: Properly handle PEM encoding on POST
- incusd/network/macvlan: Add gendoc comments
- doc: Update configs
- doc: Use gendoc for macvlan
- incusd/instance/qemu: Don't allow QEMU RSS to exceed memory limit
- lint: Exclude generated docs from codespell
- lint: Exclude generated manpages from codespell
- incusd/network/macvlan: Run gofumpt
- client: Add server-side filtering for certificates
- incus/config_trust: Use server-side filtering
- incus-migrate: introduce Migrator interface with separate structs
- incus-migrate: Add support for additional disks
- cmd/generate-database/lex: Support pluralizing entities ending in y
- cmd/generate-database/db: Support multi-word association tables
- cmd/generate-database/db: Don't duplicate join statements
- incusd/dns: Restart DNS server on failure
- incusd/instance/qemu: Limit memory hotplug slots to 8
- incusd/network/sriov: Port to gendoc
- doc: Use gendoc for network sriov
- doc: Update configs
- api: instance_publish_split
- shared/api: Add field for image type to ImagePost struct
- incusd/instance: Change instance interface to add support for exporting to split images
- incusd/instance/lxc: Add support for publishing split images for containers
- incusd/instance/qemu: Add support for publishing split images for VMs
- incusd/images: Add support for publishing split images
- incus/publish: Add new flag to publish command for split images
- shared/cliconfig: Added DefaultSettings to Config Struct
- incus: Added defaultListFormat helper function
- incus: Added Default List Format calls in List Commands
- tests: Add test for publishing split images
- i18n: Update translation templates
- doc/rest-api: Refresh swagger YAML
- incusd/device/sriov: Handle cards without configurable spoof checking
- incusd/firewall/nftables: disable UDP checksum validation for packets on bridged network
- cmd/generate-database/db: Use snake case entity names for ID column names
- incusd/db/network_acls: Move to generated functions
- incusd: Switch to new GetNetworkACLs
- api: init_preseed_certificates
- client: Add certificate handling to ApplyServerPreseed
- shared/api: Add Certificates to InitLocalPreseed
- doc/rest-api: Refresh swagger YAML
- incusd: Switch to new GetNetworkACLsAllProjects
- shared/api: Add URL function on NetworkACL
- incusd: Switch to new GetNetworkACLURIs
- incusd: Switch to new DeleteNetworkACL
- incusd: Switch to new RenameNetworkACL
- incusd: Switch to new CreateNetworkACL
- incusd: Switch to new GetNetworkACLNameAndProjectWithID
- incusd: Switch to new GetNetworkACLIDsByNames
- incusd: Move remaining network ACLs DB functions
- 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
Documentation¶
La documentation d’Incus peut être consultée sur :
https://linuxcontainers.org/incus/docs/main/
Paquets¶
Incus ne fournit pas de paquet d’installation mais bien un tarball à chaque version. Vous trouverez ci-dessous différentes solutions pour mettre Incus en service.
Installation du serveur Incus sous Linux¶
Incus est disponible sur la plupart des distributions Linux courantes. Vous trouverez des instructions d’installation détaillées dans notre documentation.
https://linuxcontainers.org/incus/docs/main/installing/
Paquet Homebrew du client Incus¶
Le client Incus est disponible sur Homebrew pour Linux et macOS.
https://formulae.brew.sh/formula/incus
Paquet Chocolatey du client Incus¶
Le client Incus est disponible sur Chocolatey pour les utilisateurs de Windows.
https://community.chocolatey.org/packages/incus/6.13.0
Paquet Winget du client Incus¶
Le client Incus est aussi disponible sur Winget pour les utilisateurs de Windows.
https://winstall.app/apps/LinuxContainers.Incus
Support¶
Les versions de fonctionnalité d’Incus ne sont supportées que jusqu’à la sortie de la suivante. Les personnes souhaitant un support plus long et des changements moins fréquents devraient plutôt envisager d’utiliser Incus 6.0 LTS.
Le support communautaire est disponible sur : https://discuss.linuxcontainers.org
Un support commercial est disponible sur : https://zabbly.com/incus
Les bugs peuvent être signalés sur : https://github.com/lxc/incus/issues
Incus 6.12 est maintenant disponible¶
25 avr. 2025
Introduction¶
L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.12 !
Cette version apporte des améliorations attendues depuis longtemps, comme l’augmentation à chaud de la mémoire des machines virtuelles, la définition d’ensembles d’adresses pour simplifier l’écriture d’ACL réseau, un nouveau système de journalisation, et plus encore !
En plus de ces nouvelles fonctionnalités, cette version propose un certain nombre d’améliorations en matière de performances, en particulier pour les systèmes comportant beaucoup de snapshots, et encore davantage d’améliorations pour ZFS.
Comme d’habitude, vous pouvez l’essayer vous-même en ligne : https://linuxcontainers.org/incus/try-it/
Nouvelles fonctionnalités¶
Ensembles d’adresses réseau¶
Pour faciliter la gestion des ACL réseau complexes, Incus prend désormais en charge la définition d’ensembles d’adresses.
Tout comme les ACL, les ensembles d’adresses sont liés à chaque projet, et chaque ensemble peut contenir un certain nombre d’adresses IPv4 et IPv6. Les ensembles peuvent ensuite être utilisés dans les ACL comme source ou comme destination.
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
Documentation : https://linuxcontainers.org/incus/docs/main/howto/network_address_sets/
Support du hotplug de mémoire dans les VM¶
L’un des rares points de divergence entre l’expérience utilisateur des conteneurs et des VM sous Incus était que la mémoire pouvait uniquement être réduite dans les VM, jamais augmentée.
C’est un problème désormais résolu : nous supportons à présent le hotplug de mémoire, de sorte que limits.memory
puisse être augmenté à chaud, permettant aux VM d’utiliser immédiatement la RAM ajoutée.
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
Refonte de la gestion des journaux et syslog distant¶
Jusqu’à présent, la journalisation d’Incus était limitée à deux options :
- Journalisation locale via syslog
- Journalisation distante via Loki (avec un seul endpoint)
Avec cette nouvelle version, nous avons mis en place mécanisme de journalisation bien plus flexible, permettant un nombre illimité de cibles de journalisation, via loki
ou syslog
, permettant de sélectionner quels événement inclure dans les journaux.
Exemple :
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
Cet exemple définit deux cibles pour les journaux, loki01
et syslog01
. La première reçoit le trafic au travers d’un endpoint authentifié (reverse proxy), avec uniquement les événements liés au cycle de vie des instances et aux ACL réseau. La seconde reçoit via syslog les messages d’avertissement et de priorité supérieure.
Documentation : https://linuxcontainers.org/incus/docs/main/server_config/#server-options-logging
Support du SNAT pour les redirections réseau¶
Les redirections réseau peuvent être assez flexibles dans la manière dont les plages de ports sont autorisées.
Par exemple, vous pouvez rediriger les ports 80
et 443
externes vers une IP interne sur les ports 1234
et 2345
respectivement.
Cela fonctionne bien dans la plupart des cas, mais dans des situations spécifiques, comme les applications WebRTC utilisant des ports UDP, une partie du trafic sera initiée depuis l’instance plutôt que depuis un client externe. Dans ce scénario, le trafic sortant de l’instance depuis le port 2345
devrait apparaître à l’extérieur comme provenant de l’adresse externe sur le port 443
.
La nouvelle propriété snat
, qui peut être appliquée à une redirection donnée, permet de mettre en place un tel comportement. Elle définit une règle de SNAT pour le trafic provenant d’une instance.
La fonctionnalité est limitée aux redirections sur des bridges standards (OVN n’est pas supporté), et uniquement sur les systèmes utilisant nftables
pour les règles de pare-feu.
Documentation: https://linuxcontainers.org/incus/docs/main/howto/network_forwards/#port-properties
Authentification via le paramètre access_token
¶
Incus supporte deux mécanismes d’authentification :
- Via des certificats client TLS
- Via OpenID Connect (OIDC)
En ce qui concerne les certificats client TLS, la plupart des clients se servent directement du certificat utilisé dans la connexion TLS. Cependant, cela ne fonctionne pas toujours, soit parce que le client a du mal à le gérer (par exemple, un navigateur web), soit parce qu’un proxy terminant la connexion TLS est présent dans la chaîne.
Pour cette raison, nous supportons l’utilisation d’un jeton signé Bearer
dérivé du certificat TLS, dans l’en-tête HTTP Authorization
.
Dans cette nouvelle version, ce même jeton Bearer
peut être passé dans le paramètre d’URL access_token
plutôt que dans l’en-tête HTTP.
Cela permet à des clients web tels que l’API websocket de JavaScript de se connecter à des endpoints websocket authentifiés, lorsque ceux-ci ne prennent pas en charge l’utilisation d’en-têtes HTTP personnalisés.
Exemple :
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
Meilleur support du filtrage côté serveur dans la CLI¶
Nous avons récemment ajouté le support du filtrage côté serveur pour tous les objets dans l’API d’Incus. Pour continuer dans cette lancée, nous sommes en train petit à petit d’ajouter le support pour ce filtrage dans la CLI, permettant de réduire les accès à la base de données et le trafic réseau lorsque seuls certains éléments sont demandés.
Dans cette version, les objets suivants supportent à présent le filtrage côté serveur :
- Instances
- Images
- Volumes personnalisés
- Profils
Exemple :
stgraber@dakara:~$ incus profile list description=bar +------+-------------+---------+ | NAME | DESCRIPTION | USED BY | +------+-------------+---------+ | foo | bar | 0 | +------+-------------+---------+
Ce travail a été en partie mené par des étudiants de l’Université du Texas à Austin.
Davantage de documentation automatiquement générée¶
Nous avons poursuivi nos efforts pour porter la plupart de nos tables de configuration afin qu’elles soient générées directement à partir du code, évitant ainsi tout risque d'oubli de clefs de configuration.
Dans cette version, la documentation de la configuration des objets suivants est désormais générée automatiquement :
- Bridges réseau
- Redirections réseau
- Périphériques TPM
- Périphériques proxy
- Périphériques GPU
- Interfaces réseau
- Périphériques Infiniband
Ce travail a été mené par des étudiants de l’Université du Texas à Austin.
Liste complète des changements¶
Voici une liste complète de tous les changements apportés par cette version :
Liste complète des commits
- 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
Documentation¶
La documentation d’Incus peut être consultée sur :
https://linuxcontainers.org/incus/docs/main/
Paquets¶
Incus ne fournit pas de paquet d’installation mais bien un tarball à chaque version. Vous trouverez ci-dessous différentes solutions pour mettre Incus en service.
Installation du serveur Incus sous Linux¶
Incus est disponible sur la plupart des distributions Linux courantes. Vous trouverez des instructions d’installation détaillées dans notre documentation.
https://linuxcontainers.org/incus/docs/main/installing/
Paquet Homebrew du client Incus¶
Le client Incus est disponible sur Homebrew pour Linux et macOS.
https://formulae.brew.sh/formula/incus
Paquet Chocolatey du client Incus¶
Le client Incus est disponible sur Chocolatey pour les utilisateurs de Windows.
https://community.chocolatey.org/packages/incus/6.12.0
Paquet Winget du client Incus¶
Le client Incus est aussi disponible sur Winget pour les utilisateurs de Windows.
https://winstall.app/apps/LinuxContainers.Incus
Support¶
Les versions de fonctionnalité d’Incus ne sont supportées que jusqu’à la sortie de la suivante. Les personnes souhaitant un support plus long et des changements moins fréquents devraient plutôt envisager d’utiliser Incus 6.0 LTS.
Le support communautaire est disponible sur : https://discuss.linuxcontainers.org
Un support commercial est disponible sur : https://zabbly.com/incus
Les bugs peuvent être signalés sur : https://github.com/lxc/incus/issues
Incus 6.0.4 LTS est maintenant disponible¶
4 avr. 2025
Introduction¶
L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.0.4 !
Il s’agit de la quatrième version apportant des corrections de bugs pour Incus 6.0, dont le support est assuré jusqu’en juin 2029
Changements¶
Comme d’habitude, cette version se concentre sur la stabilité et le hardening.
Des améliorations mineures ont également été rétroportées, en particulier tout ce qui ne nécessite pas de migrations de données, de modifications dans la base de données, ou ne cause pas de changements inattendus dans le comportement observé par l’utilisateur.
Le nombre de ces améliorations pour la branche LTS est amené à diminuer avec le temps.
Les points marquants de cette version sont :
- ACL réseau par instance pour les réseaux de type bridge
- Scriptlets QEMU améliorés
- Dumps de mémoire pour les VM
- Informations supplémentaires sur l’état des réseaux OVN
- Amélioration du fichier de preseed du serveur
- Support de ACME DNS-01
- Support du provisionnement des VM via SMBIOS11
- Support de l’IOMMU pour les VM
- Support des VRF pour les cartes réseau routées
- Nouvelle plage d’adresses MAC
- Cartes réseau USB pour les VM
- Disques USB pour les VM
- Serveurs DNS configurables par réseau
- Routes IPv4 supplémentaires en DHCP
La liste complète des commits est présentée ci-dessous :
Liste détaillée des changements
- 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
Avis pour les packagers : Incus utilise à présent l’outil externe lego
pour la gestion du protocole ACME, plutôt que d’en intégrer la logique dans le binaire incusd
. Veuillez prendre en compte cette dépendance si vous souhaitez préserver le support des certificats via ACME.
Support et mise à niveau¶
La branche Incus 6.0 est supportée jusqu’en juin 2029. Il est toujours fortement recommandé d’utiliser la dernière version de correction de bugs.
Téléchargements¶
- Tarball d’Incus : incus-6.0.4.tar.xz
- Signature GPG : incus-6.0.4.tar.xz.asc
Remerciements¶
Cette version LTS a été rendue possible grâce au financement du Sovereign Tech Fund (qui fait maintenant partie de la Sovereign Tech Agency).
Le Sovereign Tech Fund soutient le développement, l'amélioration et la maintenance des infrastructures numériques ouvertes. Son objectif est de renforcer durablement l'écosystème open source, en mettant l'accent sur la sécurité, la résilience, la diversité technologique et les personnes qui sont derrière le code.
Pour en savoir plus, consultez https://www.sovereign.tech