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