Actualités¶
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
Incus 6.11 est maintenant disponible¶
28 mars 2025
Introduction¶
L’équipe d’Incus est heureuse d’annoncer la sortie d’Incus 6.11 !
La fonctionnalité phare de cette version est sans aucun doute la prise en charge initiale de LINSTOR comme nouveau driver de stockage pour les personnes cherchant une alternative à Ceph !
Mais c’est loin d’être la seule nouveauté de cette version, avec un grand nombre de fonctionnalités pour les VM, les conteneurs d’application, et le réseau.
Comme d’habitude, vous pouvez l’essayer vous-même en ligne : https://linuxcontainers.org/incus/try-it/
Nouvelles fonctionnalités¶
Driver de stockage LINSTOR¶
Incus supporte à présent LINSTOR comme alternative à Ceph pour le stockage en cluster.
Vous pouvez en apprendre plus sur LINSTOR sur leur site web : https://linbit.com/linstor/
En résumé, LINSTOR est une couche logicielle reposant sur DRBD, permettant la réplication de périphériques en mode bloc entre plusieurs serveurs.
Cela permet aux volumes en bloc d’être créés pour les conteneurs et les machines virtuelles, avec une copie primaire présente typiquement sur le serveur sur lequel l’instance tourne, et une copie répliquée présente sur un autre serveur du cluster.
Documentation du driver : https://linuxcontainers.org/incus/docs/main/reference/storage_linstor/
Guide d’utilisation : https://linuxcontainers.org/incus/docs/main/howto/storage_linstor_setup/
Documentation technique : https://linuxcontainers.org/incus/docs/main/reference/storage_linstor_internals/
Nouvelle plage d’adresses MAC¶
LXC et Incus utilisaient tous deux jusqu’à présent la plage d’adresses MAC 00:16:3e
.
Cette plage était en réalité allouée au projet Xen et, bien qu’il n’y ait pas de risque de collision avec des adresses MAC de périphériques physiques, celle-ci ne permettait pas de distinguer facilement entre des instances LXC/Incus et des instances Xen.
Pour rendre cela plus propre, Zabbly a obtenu de l’IEEE une plage d’adresses MAC pour un usage par LXC et Incus, 10:66:6a
.
La nouvelle plage sera automatiquement utilisée pour les instances et réseaux nouvellement créés.
Les instances et les réseaux existants restent inchangés.
Cartes réseau USB pour les VM¶
Une nouvelle clef de configuration, io.bus
, a été ajoutée pour les interfaces réseau des VM.
Elle peut prendre deux valeurs : virtio
(par défaut) et usb
.
En définissant io.bus=usb
, l’interface réseau apparaîtra comme un adaptateur réseau USB générique plutôt qu’un périphérique PCI.
Cela devrait permettre à certains anciens OS invités d’accéder au réseau, ainsi qu’aux plus récents de se connecter à Internet pour récupérer les drivers VirtIO avant de retourner sur le bus virtio
par défaut.
Documentation : https://linuxcontainers.org/incus/docs/main/reference/devices_nic/
Disques USB pour les VM¶
Il est maintenant également possible d’attacher des disques aux VM via un bus USB.
Ce faisant, les disques apparaîtront comme des périphériques de stockage de masse USB.
Pour utiliser la fonctionnalité, il faut définir io.bus=usb
sur le périphérique disque.
Documentation : https://linuxcontainers.org/incus/docs/main/reference/devices_disk/
Suivi des définitions des machines QEMU¶
Incus garde désormais en mémoire la définition des machines QEMU au démarrage des VM, permettant la migration à chaud entre plusieurs versions de QEMU dès lors que le service QEMU cible est au moins aussi récent que le service source.
Cela se fait par l’intermédiaire d’une nouvelle clef de configuration, volatile.vm.definition
.
Configuration du point d’entrée pour les conteneurs OCI¶
Il est désormais possible de configurer le point d’entrée des conteneurs OCI.
À la création d’un conteneur OCI, le point d’entrée est extrait de la configuration OCI et est transformé en clefs de configuration du conteneur.
Les clefs de configuration sont les suivantes :
oci.entrypoint
oci.cwd
oci.uid
oci.gid
Celles-ci peuvent être modifiées à la création de l’instance, ou changées par la suite.
stgraber@castiana:~$ incus launch oci-docker:nginx nginx Launching nginx stgraber@castiana:~$ incus config show nginx | grep oci\\. oci.cwd: / oci.entrypoint: /docker-entrypoint.sh nginx -g 'daemon off;' oci.gid: "0" oci.uid: "0"
Documentation : https://linuxcontainers.org/incus/docs/main/reference/instance_options/
Accès à l’ICMP (ping) dans les conteneurs OCI pour les utilisateurs non privilégiés¶
Les conteneurs OCI peuvent désormais envoyer des paquets ICMP en tant qu’utilisateurs ordinaires.
Les conteneurs d’application étant conçus pour exécuter une seule application, il n’y a pas grand intérêt à restreindre les pings au seul utilisateur root.
Accès aux ports privilégiés dans les conteneurs OCI pour les utilisateurs non privilégiés¶
Les conteneurs OCI peuvent désormais utiliser les ports privilégiés en tant qu’utilisateurs ordinaires.
Les conteneurs d’épplication étant conçus pour exécuter une seule application, il n’y a pas grand intérêt à restreindre les ports privilégiés au seul utilisateur root.
Temps CPU alloué dans l’API de consultation de l’état des instances¶
Une nouvelle valeur allocated_time
est exposée dans l’API permettant de consulter l’état des instances.
Elle donne combien de temps CPU (en nanosecondes) peut être utilisé par seconde par l’instance, au maximum de ses capacités allouées.
Cela permet de calculer un pourcentage d’utilisation CPU lorsque cette valeur est combinée avec plusieurs mesures de l'utilisation CPU sur une période de temps donnée.
stgraber@castiana:~$ incus query /1.0/instances/nginx/state | jq .cpu { "allocated_time": 1000000000, "usage": 163062000 }
Configuration des serveurs DNS¶
Une nouvelle option de configuration, dns.nameservers
, est désormais disponibles pour les réseaux bridge
et ovn
.
Cela peut être utile lorsqu’un ensemble de résolveurs DNS dédiés doivent être utilisés par l’intégralité des instances, ou dans des environnements dans lesquels certains réseaux doivent ignorer la résolution locale pour utiliser des résolveurs publics.
Documentation (bridge) : https://linuxcontainers.org/incus/docs/main/reference/network_bridge/
Documentation (OVN) : https://linuxcontainers.org/incus/docs/main/reference/network_ovn/
Routes IPv4 supplémentaires en DHCP¶
Une nouvelle option de configuration, ipv4.dhcp.routes
, est désormais disponible sur les réseaux bridge
et ovn
. Elle permet d’annoncer des routes supplémentaires en DHCP.
Documentation (bridge) : https://linuxcontainers.org/incus/docs/main/reference/network_bridge/
Documentation (OVN) : https://linuxcontainers.org/incus/docs/main/reference/network_ovn/
Configuration de l’expiration des baux DHCP en IPv4 pour OVN¶
L’option de configuration ipv4.dhcp.expiry
est à présent aussi disponible pour les réseaux OVN.
Elle permet de réduire ou d’étendre la durée par défaut des baux DHCP.
Documentation : https://linuxcontainers.org/incus/docs/main/reference/network_ovn/
Extension de l’état des réseaux pour inclure le nom du switch local OVN¶
Le nom du switch local OVN fait désormais partie des informations réseau OVN.
Cela simplifie le débogage, en particulier pour des réseaux isolés (sans uplink) ou qui n’ont pas de routeur logique.
root@server01:~# incus network info default Name: default MAC address: 00:16:3e:54:62:a9 MTU: 1500 State: up Type: broadcast IP addresses: inet 10.104.61.1/24 (link) inet6 fd42:73ae:9013:c530::1/64 (link) OVN: Chassis: server01 Logical router: incus-net20-lr Logical switch: incus-net20-ls-int IPv4 uplink address: 172.31.254.10 IPv6 uplink address: fd00:1e4d:637d:1234:216:3eff:fe54:62a9
Avis pour les packagers¶
Dans cette version, Incus utilise l’outil externe lego
pour la gestion du protocole ACME.
Cela a pour effet de réduire significativement la taille du binaire d’Incus, mais l’outil lego
devient donc une dépendance qu’il s’agirait de déclarer comme telle.
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: Clarify virtiofsd requirements
- incusd/instance/lxc: Allow unprivileged users to use ping in application containers
- incusd/instance/lxc: Allow unprivileged users in application containers to bind to all ports
- 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
- cmd/incusd/forknet: Add classless static route support to the forknet dhcp client
- tests: Add tests for ipv4.dhcp.routes
- doc: Add documentation for ipv4.dhcp.routes config
- github: Pass shell type to shellcheck
- incusd/instance: Revert on OCI creation failure
- 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
- i18n: Update translation templates
- 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
- gomod: Update dependencies
- 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
- i18n: Update translation templates
- 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
- 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
- i18n: Update translation templates
- 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/main_forknet: Remove unreachable code
- 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
- client: Fix gofumpt
- 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
- incusd: 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/instance: 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
- cmd: Fix spelling errors found by codespell
- doc: Fix spelling errors found by codespell
- internal: Fix spelling errors found by codespell
- shared: Fix spelling errors found by codespell
- tests: Fix spelling errors found by codespell
- lint: Run codespell automatically
- i18n: Update translation templates
- incusd/instance/common: Check PID validity
- incus/file: Properly handle relative source paths
- cmd/storage: Typo 'Examples:' create storage
- i18n: Update translation templates
- 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
- incusd/instance/lxc: Cleanup OCI mount paths
- 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
- api: storage_driver_linstor
- doc: Linstor driver documentation
- incusd/cluster/config: Add cluster-level LINSTOR config options
- incusd/node/config: Add node-level LINSTOR config options
- incusd/migration: Add linstor to migration protobuf
- incusd/storage/linstor: Linstor client setup
- incusd/storage/linstor: Wrap golinstor logger
- incusd/state: Add Linstor client to server state
- incusd: Trigger Linstor client setup on server config changes
- incusd/storage/linstor: Storage pool creation and deletion
- incusd/storage/linstor: Volume creation and deletion
- incusd/storage: Implement the Filler function for Linstor volumes
- incusd/storage/linstor: Add mount and unmount support for volumes
- incusd/storage/linstor: Add trivial renaming support for volumes
- incusd/storage/linstor: Remove filesystem volume and mount path
- incusd/storage/linstor: Add common volume config validation
- incusd/storage/linstor: Copy volumes on the same pool
- incusd/storage/linstor: Add basic snapshot support
- incusd/storage/linstor: Add support for mounting and unmounting snapshot volumes
- incusd/storage/linstor: Add support for resizing volumes
- incusd/storage/linstor: Add basic support for same-pool migration
- incusd/storage/linstor: Add support for optimized images
- incusd/storage/linstor: List snapshots to support non optimized copying of volumes with snapshots
- incusd/storage/linstor: Implement GetResources
- incusd/storage/linstor: Add support for updating storage pool config
- incusd/storage/linstor: Add support for generic refreshing of volumes
- incusd/storage/linstor: Add support for fetching volume disk usage
- incusd/storage/linstor: Add support for non optimized backups
- incusd/storage/linstor: Encode snapshot names in metadata
- incusd/storage/linstor: Add support for listing volumes
- incusd/storage/linstor: Use aux property to map incus names to linstor resource definitions
- incusd/storage/linstor: Ensure volumes are available locally when retrieving device paths
- incusd/storage/linstor: Fallback to generic migration implementation
- incusd/storage/linstor: Freeze and sync filesystem when snapshotting volumes
- incusd/storage/linstor: Cleanup temporary resource definitions from snapshots
- incusd/storage/linstor: Delete diskless resources when unmounting volumes
- incusd/storage/linstor: Add drbd resource config options
- tests: Add standalone LINSTOR tests
- tests: Add clustered LINSTOR tests
- internal/migration: Update protobuf
- doc: Update configs
- gomod: Tidy dependencies and add LINSTOR
- github: Add LINSTOR CI tests
- incusd/storage/linstor: Add linstor.remove_snapshots config option
- doc: Document linstor.remove_snapshots config option
- test: Add tests for linstor.remove_snapshots config option
- doc/support: Update feature release version
- incusd/instance: Don't enforce device/config validation on snapshots
- gomod: Update dependencies
- api: instance_oci_entrypoint
- internal/instance: Add OCI entrypoint configuration
- incusd/instance/lxc: Add OCI entrypoint configuration
- incusd/instance: Set instance OCI config from OCI data
- doc: Update config
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.11.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