ニュース

Incus 6.11 リリースのお知らせ

2025/03/28

はじめに

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

間違いなくこのリリースの目玉機能は、Ceph の代わりを探している人のための新しいストレージドライバー Linstor の初期サポートです。
しかし、この Incus リリースが提供するのはこれだけではありません。多数の新しい VM、OCI、ネットワーク機能も搭載されています。

image|690x251

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

Enjoy!

新機能

Linstor ストレージドライバー

Incus は、クラスターストレージ用の Ceph の代替として、Linstor を新たにサポートしました。
Linstor 自体については、Linstor のウェブサイトをご覧ください: https://linbit.com/linstor/

簡単に言うと、Linstor は Linux の DRBD メカニズムの上にある管理レイヤーであり、複数のサーバー間のブロックデバイスのレプリケーションに使用します。

この機能により、コンテナや仮想マシンのためのブロックボリュームを生成できるようになります。通常、プライマリーコピーはインスタンスを実行しているサーバー上に存在し、レプリカはクラスター内の他のサーバーに存在します。

ドライバードキュメント : https://linuxcontainers.org/incus/docs/main/reference/storage_linstor/
Howto: https://linuxcontainers.org/incus/docs/main/howto/storage_linstor_setup/
ドライバーの内部 : https://linuxcontainers.org/incus/docs/main/reference/storage_linstor_internals/

新しい MAC アドレスの範囲

LXC と Incus は、どちらも 00:16:3e ではじまる MAC アドレスを使っています。

このアドレスは Xen プロジェクト由来であり、実際の物理デバイスの MAC アドレスと衝突する危険性はありません。しかし、LXC/Incus インスタンスと Xen で実行されているインスタンスを簡単に判別できないという欠点があります。

今後よりクリーンにするために、Zabbly は LXC と Incus 専用の MAC アドレス帯 10:66:6a を IEEE から取得しました。

新しい範囲は、すべての新しいインスタンスとネットワークに自動的に使用されます。
既存のインスタンスとネットワークは変更されません。

VM 上の USB NIC

新しく io.bus 設定キーを VM のネットワークインターフェースに追加しました。
この設定は 2 つの値をサポートします。virtio(デフォルト)と usb です。

io.bus=usb と設定すると、ネットワークインターフェースは通常の PCI デバイスではなく、汎用の USB ネットワークアダプターとして現れます。

これにより、古いゲスト OS がネットワークに接続できるようになるだけでなく、新しいゲスト OS がオンラインになり virtio ドライバーを取得し、その後デフォルトの virtio バスに戻すことができるようになります。

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

VM 上の USB ディスク

USB バス経由で VM にディスクをアタッチできるようになりました。
このようにすると、それらのディスクは汎用 USB 大容量ストレージデバイスとして出現します。

これは、ディスクデバイス上で io.bus=usb と設定することで行われます。

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

VM マシン定義のトラッキング

Incus は起動時に正確に QEMU マシン定義をトラッキングするようになりました。これにより、ターゲットが同じ QEMU リリースか、それ以降のリリースである限り、QEMU バージョン間のライブマイグレーションが可能になります。

これは、新しく追加された volatile.vm.definition 設定キーを通して行われます。

設定可能な OCI エントリーポイント

OCI コンテナのエントリーポイントが構成できるようになりました。

コンテナの作成時、エントリーポイントデータが OCI 設定から抽出され、コンテナ上で編集可能な設定に変換されます。

これは、次の 4 つの新しい設定オプションを通して行われます:

  • oci.entrypoint
  • oci.cwd
  • oci.uid
  • oci.gid

これらは、インスタンスの作成時に上書きすることも、あとで自由に変更することもできます。

stgraber@castiana:~$ incus launch oci-docker:nginx nginx
Launching nginx
stgraber@castiana:~$ incus config show nginx | grep oci\\.
  oci.cwd: /
  oci.entrypoint: /docker-entrypoint.sh nginx -g 'daemon off;'
  oci.gid: "0"
  oci.uid: "0"

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

OCI コンテナ内の非特権 ICMP(ping)

OCI コンテナは、一般ユーザーとして ICMP パケットを送れるようになりました。
これは、アプリケーションコンテナが単一のアプリケーションを実行するように設計されているので、これを root ユーザーに制限してもあまりメリットがないために許可されています。

OCI コンテナ内の非特権ローポート

OCI コンテナは、一般ユーザーとしてローポートにバインドできるようになりました。
これは、アプリケーションコンテナが単一のアプリケーションを実行するように設計されているので、これを root ユーザーに制限してもあまりメリットがないために許可されています。

インスタンスステート API 内の割り当てられた CPU 時間

新たに allocated_time という値が CPU インスタンス状態の情報の一部として提供されるようになりました。
これは、コンテナが許可されるだけの CPU 時間を使っている場合、1 秒あたりに消費される CPU 時間(ナノ秒単位)を報告するために使われます。

これにより、既知の期間における複数の CPU 使用率の計測値(data points)と組み合わせることで、コンテナの CPU 使用率を効果的に計算できるようになります。

stgraber@castiana:~$ incus query /1.0/instances/nginx/state | jq .cpu
{
  "allocated_time": 1000000000,
  "usage": 163062000
}

設定可能な DNS サーバー

bridgeovn ネットワークの両方で、新たに dns.nameservers 設定オプションが利用できるようになりました。これは、コンマ区切りの DNS サーバーのリストを設定します。

これは、すべてのインスタンスで直接使う専用の DNS リゾルバーを実行する場合や、特定のネットワークで、すべてのローカルの名前解決をバイパスして代わりにパブリックなリゾルバーにアクセスするような環境で役立ちます。

ドキュメント (bridge): https://linuxcontainers.org/incus/docs/main/reference/network_bridge/
ドキュメント (OVN): https://linuxcontainers.org/incus/docs/main/reference/network_ovn/

DHCP 経由の追加 IPv4 ルート

bridgeovn ネットワークの両方で、新たに ipv4.dhcp.routes 設定オプションが利用できるようになりました。これにより、DHCP を通して追加のルートを広告できるようになります。

ドキュメント (bridge): https://linuxcontainers.org/incus/docs/main/reference/network_bridge/
ドキュメント (OVN): https://linuxcontainers.org/incus/docs/main/reference/network_ovn/

OVN での設定可能な IPv4 DHCP リース有効期限

ipv4.dhcp.expiry 設定オプションが OVN ネットワークでも利用可能になりました。
これにより、デフォルトの DHCP リース期間の増減ができるようになりました。

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

OVN 論理スイッチ名がネットワーク状態の一部に

OVN 論理スイッチ名が、OVN ネットワーク情報の一部として報告されるようになりました。
これにより、特に分離された(アップリンクがない)ネットワークで、論理ルーターが不足している可能性がある場合のデバッグがかなり簡単になります。

root@server01:~# incus network info default
Name: default
MAC address: 00:16:3e:54:62:a9
MTU: 1500
State: up
Type: broadcast

IP addresses:
  inet  10.104.61.1/24 (link)
  inet6 fd42:73ae:9013:c530::1/64 (link)

OVN:
  Chassis: server01
  Logical router: incus-net20-lr
  Logical switch: incus-net20-ls-int
  IPv4 uplink address: 172.31.254.10
  IPv6 uplink address: fd00:1e4d:637d:1234:216:3eff:fe54:62a9

パッケージ作成者への注意

このリリースで、Incus は ACME を扱うために外部的に lego ツールを使うようになりました。
これは、Incus 自身のバイナリーサイズを大幅に削減しますが、lego を依存関係として追加する必要があることを意味します。

すべての変更点

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

すべてのChangeLogを見る
  • doc: Clarify virtiofsd requirements
  • incusd/instance/lxc: Allow unprivileged users to use ping in application containers
  • incusd/instance/lxc: Allow unprivileged users in application containers to bind to all ports
  • incusd/migration: Change field type of Snapshots in VolumeTargetArgs
  • incusd: Adjust code for VolumeTargetArgs Snapshots type change
  • incusd/instance/drivers: Adjust code for VolumeTargetArgs Snapshots type change
  • incusd/storage: Adjust code for VolumeTargetArgs Snapshots type change
  • incusd/db: Add missing go:generate directive
  • incusd/db: Update generated code
  • incusd/device/disk: Do not allow mounting of custom block volume snapshots
  • generate-database: Abstract DB connection / DB transaction
  • incusd/db: Update generated code
  • lint: Add short import exception for *.mapper.go
  • generate-database: Accept interface instead of concrete type for PrepareStmts
  • incusd/db: Update generated code
  • cmd/list: Simplify evaluateShorthandFilter by reducing nesting levels
  • incusd/storage: Don't use sparse writer on thick LVM
  • shared/util: Add IsTruthy
  • generate-database: Validate struct tags
  • generate-database: Add marshal=json
  • generate-database: Update generated code
  • incusd/instance/edk2: Fix typo in function name
  • incusd/instance/edk2: Fix EDK2 path overwrite issue
  • incusd/instance/qemu: Propagate errors from edk2
  • incusd/instance_types: Introduce INCUS_SKIP_INSTANCE_TYPES
  • doc/environment: Add INCUS_SKIP_INSTANCE_TYPES
  • doc/environment: Sort the environment variables
  • incusd/ip: Error message styling
  • incusd/ip: Only parse MAC on ethernet links
  • internal/instance: Clarify security.secureboot setting
  • doc: Update configs
  • incusd/network/ovn: Fallback to OVN router address as DNS server
  • api: network_ipv4_dhcp_routes
  • shared/validate: Add IsDHCPRouteList
  • incusd/network/ovn: Add ipv4.dhcp.routes
  • incusd/network/bridge: Add ipv4.dhcp.routes
  • cmd/incusd/forknet: Add classless static route support to the forknet dhcp client
  • tests: Add tests for ipv4.dhcp.routes
  • doc: Add documentation for ipv4.dhcp.routes config
  • github: Pass shell type to shellcheck
  • incusd/instance: Revert on OCI creation failure
  • generate-database: Handle constraint err in Create
  • incusd/db: Update generated code
  • generate-database: Check for tx if necessary
  • incusd/db: Update generated code
  • cmd/incus: Use the file extension of the edited file for the temp file, to help with syntax highlighting
  • incusd/api_internal: Centralize all internal API endpoints
  • tests: Update for re-organized internal endpoints
  • incus/drivers: Fix ZFS CreateVolume deletes pre-existing data on failure
  • incus/rebuild: Correct help message
  • i18n: Update translation templates
  • incusd/cluster/config: Set default value for acme.ca_url
  • incusd/cluster/config: Return acme.provider.environment as a slice
  • incusd/acme: Remove DNS-01 provider (now using lego externally)
  • incusd/acme: Move DNS-01 to external lego binary
  • incusd/api_1_0: Trigger ACME on all ACME config options
  • gomod: Update dependencies
  • incus/file: Always use 1MB chunks for SFTP
  • incusd/instance/lxc: Fail immediately if no idmap found
  • incusd/acme: use correct path
  • incusd/bgp: Rework start/stop logic
  • incusd/network/ovn: Skip existing static routes
  • incusd/instance/qemu: Set caching-mode with intel-iommu
  • incus-agent: Improve SFTP performance
  • incusd/instance/qemu: Move Windows check to a function
  • incusd/instance/qemu: Set RTC base to localtime on Windows
  • doc/api-extensions: Fix formatting
  • api: network_state_ovn_ls
  • incusd/network/ovn: Export LogicalRouter and LogicalSwitch names as needed
  • shared/api: Add LogicalSwitch to OVN state
  • incus/network: Add Logical Switch for OVN
  • i18n: Update translation templates
  • incus/network: Better handle partial OVN state
  • doc/rest-api: Refresh swagger YAML
  • incus/network: Support for missing counters
  • shared/api: Make NetworkStateCounters a pointer
  • incusd/resources: Update for Counters being a pointer
  • incus/copy: Clear full device when overriding with type=none
  • doc/instance/create: Cover behavior on Windows
  • api: network_dns_nameservers
  • incusd/network/bridge: Add dns.nameservers
  • incusd/network/ovn: Add dns.nameservers
  • doc/network: Add dns.nameservers to bridge and OVN
  • incusd/network/ovn: Correctly remove individual DHCP options from OVN when they are unset
  • incusd/ports: Cleanup consts
  • api: acme_http01_port
  • incusd/cluster/config: Add acme.http.port
  • doc/rest-api: Refresh swagger YAML
  • incusd/acme: Use lego for HTTP-01
  • gomod: Update dependencies
  • incusd/instance/qmp: Add MachineDefinition function
  • internal/instance: Add volatile.vm.definition
  • doc: Update configs
  • incusd/instance/qemu: Use saved machine definition when restoring running VM
  • incusd/instance/qemu: Handle firmware vars name matching internal one
  • incusd: Switch MAC generation to Zabbly prefix
  • incusd: Switch to new MAC prefix
  • doc: Switch to new MAC prefix
  • incus: Switch to new MAC prefix
  • lxc-to-incus: Switch to new MAC prefix
  • shared/api: Switch to new MAC prefix
  • tests: Switch to new MAC prefix
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates
  • client: Fix spelling errors found by codespell
  • incusd/instance/edk2: Select SecureBoot capable firmware on Debian
  • api: network_ovn_ipv4_dhcp_expiry
  • incusd/network/ovn: Add option ipv4.dhcp.expiry for OVN networks
  • doc/reference/network_ovn: Add ipv4.dhcp.expiry
  • incusd/main_forknet: Remove unreachable code
  • incusd/dns: Use shared mutex
  • incusd/network/ovn: Add UpdateLogicalSwitchPortDHCP
  • incusd/network/ovn: Reconfigure DHCP option on existing logical switch ports when DHCP is enabled on the network
  • client: Fix gofumpt
  • generate-config: Fix gofumpt
  • lxd-to-incus: Fix gofumpt
  • incus-agent: Fix gofumpt
  • incus-benchmark: Fix gofumpt
  • incus-migrate: Fix gofumpt
  • incus-simplestreams: Fix gofumpt
  • incus-user: Fix gofumpt
  • lxc-to-incus: Fix gofumpt
  • incus: Fix gofumpt
  • incusd: Fix gofumpt
  • shared/tls: Fix gofumpt
  • shared/termios: Fix gofumpt
  • shared/subprocess: Fix gofumpt
  • shared/simplestreams: Fix gofumpt
  • shared/logger: Fix gofumpt
  • shared/idmap: Fix gofumpt
  • shared/cliconfig: Fix gofumpt
  • internal/version: Fix gofumpt
  • internal/util: Fix gofumpt
  • internal/usbid: Fix gofumpt
  • internal/rsync: Fix gofumpt
  • internal/linux: Fix gofumpt
  • internal/io: Fix gofumpt
  • incusd/storage: Fix gofumpt
  • incusd/network: Fix gofumpt
  • incusd/instance: Fix gofumpt
  • incusd/apparmor: Fix gofumpt
  • incusd/backup: Fix gofumpt
  • incusd/cgroup: Fix gofumpt
  • incusd/cluster: Fix gofumpt
  • incusd/config: Fix gofumpt
  • incusd/db: Fix gofumpt
  • incusd/device: Fix gofumpt
  • incusd/dnsmasq: Fix gofumpt
  • incusd/endpoints: Fix gofumpt
  • incusd/events: Fix gofumpt
  • incusd/firewall: Fix gofumpt
  • incusd/ip: Fix gofumpt
  • incusd/metrics: Fix gofumpt
  • incusd/operations: Fix gofumpt
  • incusd/resources: Fix gofumpt
  • incusd/scriptlet: Fix gofumpt
  • incusd/seccomp: Fix gofumpt
  • incusd/sys: Fix gofumpt
  • incusd/util: Fix gofumpt
  • Makefile: Switch to gofumpt
  • golangci: Switch to gofumpt
  • generate-config: Use RunE
  • internal/linux: Fix missing export comments
  • incusd/seccomp: Fix import shadowing
  • incusd/cluster: Remove duplicate type declaration
  • incusd/bgp: Fix comment
  • incusd/network/ovn: Don't run bgpSetup twice
  • incusd/network/physical: Do full start following change of parent
  • incusd/apparmor: Move AppArmor profiles to separate files
  • cmd: Fix spelling errors found by codespell
  • doc: Fix spelling errors found by codespell
  • internal: Fix spelling errors found by codespell
  • shared: Fix spelling errors found by codespell
  • tests: Fix spelling errors found by codespell
  • lint: Run codespell automatically
  • i18n: Update translation templates
  • incusd/instance/common: Check PID validity
  • incus/file: Properly handle relative source paths
  • cmd/storage: Typo 'Examples:' create storage
  • i18n: Update translation templates
  • incusd/events: Don't open needless transactions
  • incusd/instances: Re-order evacuated check to limit DB calls
  • incusd: Limit calls to LocalNodeIsEvacuated
  • incusd/instances_post: Move non-DB logic outside of transaction
  • incusd/network/ovn: Fix default DNS IPv4 server
  • shared/osarch: Extend OS detection logic
  • incus-agent: Update for osarch change
  • incusd: Update for osarch change
  • internal/version: Update UserAgent logic for osarch change
  • api: instance_state_cpu_time
  • shared/api: Add AllocatedTime CPU field
  • incusd/cgroup: Add GetCPUCfsLimit
  • incusd/instance/lxc: Add AllocatedTime CPU field
  • incusd/instance/qemu: Add AllocatedTime CPU field
  • doc/rest-api: Refresh swagger YAML
  • test: Check CPU allocated time
  • incusd/certificates: Properly handle bad PEM data
  • cmd/generate-database/lex: Fix pluralization
  • cmd/generate-database/db: Consider marshal tagged fields as columns
  • cmd/generate-database/db: Support multi-package parsing
  • cmd/generate-database/db: Import entities from non-local packages
  • cmd/generate-database/db: Add GetNames
  • cmd/generate-database: Update docs
  • cmd/generate-database/file/boilerplate: Use tx for multi-queries
  • internal/server/db/cluster: Update generated code
  • cmd/generate-database/db: Fix generator tests
  • incusd/network/common: Handle missing BGP peer
  • incusd/cluster/evacuate: Don't live-migrate stopped instances
  • cmd/generate-database/db: Directly pass reference table and column names
  • internal/server/db/cluster: Specify table name on method declarations
  • internal/server/db/cluster: Update generated code
  • cmd/incusd: Update calls to generated code
  • cmd/generate-database/db: Make linter happy (defer loops)
  • api: network_io_bus
  • incusd/device/config: Add USB bus override
  • incusd/instance: Add support for USB NICs
  • incusd/device/nic: Add support for io.bus
  • incusd/storage/s3 Fixed minio client mc too ambious issue
  • doc/device/nic: Add support for io.bus
  • incusd/instance/qemu enable s4 by default
  • doc/instance_options: Updates raw.qemu.conf example
  • incusd/networks: Validate configuration on join too
  • Makefile: Bump base Go 1.23 version
  • gomod: Update dependencies
  • cmd/generate-database/db: Fix GetNames spacing
  • github: Rework issue templates
  • internal/server/storage/s3: Add minio-client to list of potential binary names
  • doc: Update Debian installation documentation
  • internal/server/storage/s3: Update logic for checking MinIO version from multiple possible binary names
  • incusd/auth: Tweak SQL queries
  • incusd/auth: Properly handle network integrations
  • incusd/db/cluster/entities: Sort maps
  • doc/network-integration: Document properties
  • incusd/instance/lxc: Cleanup OCI mount paths
  • api: disk_io_bus_usb
  • incusd/device/disk: Add support for USB bus
  • incusd/instance/qemu: Add support for USB disks
  • doc: Update configs
  • golangci: Upgrade to version 2
  • incusd/storage/s3 minio client check enhancement
  • golangci: Disable STI005 error checks
  • test: Fix deprecated chown syntax
  • test: Fix test cleanup
  • shared/validate: Add string length validator
  • shared/validate: Add minimum duration validator
  • incusd/sys: Add Hostname to OS struct
  • incusd/instance/drivers: Populate StorageMove and StoragePool when migrating lxc instances
  • incusd/storage: Populate StorageMove and StoragePool when migrating volumes
  • incusd/storage: Add more parameters to MigrationTypes
  • incusd/network/ovn: Remove internal routes to forward/load-balancers
  • doc/ref/storage_ceph: Fix typo
  • tests: Tweak volume sizes
  • tests: Be more specific on selecting property
  • incusd/instance/edk2: Always prefer the EDK2 override
  • api: storage_driver_linstor
  • doc: Linstor driver documentation
  • incusd/cluster/config: Add cluster-level LINSTOR config options
  • incusd/node/config: Add node-level LINSTOR config options
  • incusd/migration: Add linstor to migration protobuf
  • incusd/storage/linstor: Linstor client setup
  • incusd/storage/linstor: Wrap golinstor logger
  • incusd/state: Add Linstor client to server state
  • incusd: Trigger Linstor client setup on server config changes
  • incusd/storage/linstor: Storage pool creation and deletion
  • incusd/storage/linstor: Volume creation and deletion
  • incusd/storage: Implement the Filler function for Linstor volumes
  • incusd/storage/linstor: Add mount and unmount support for volumes
  • incusd/storage/linstor: Add trivial renaming support for volumes
  • incusd/storage/linstor: Remove filesystem volume and mount path
  • incusd/storage/linstor: Add common volume config validation
  • incusd/storage/linstor: Copy volumes on the same pool
  • incusd/storage/linstor: Add basic snapshot support
  • incusd/storage/linstor: Add support for mounting and unmounting snapshot volumes
  • incusd/storage/linstor: Add support for resizing volumes
  • incusd/storage/linstor: Add basic support for same-pool migration
  • incusd/storage/linstor: Add support for optimized images
  • incusd/storage/linstor: List snapshots to support non optimized copying of volumes with snapshots
  • incusd/storage/linstor: Implement GetResources
  • incusd/storage/linstor: Add support for updating storage pool config
  • incusd/storage/linstor: Add support for generic refreshing of volumes
  • incusd/storage/linstor: Add support for fetching volume disk usage
  • incusd/storage/linstor: Add support for non optimized backups
  • incusd/storage/linstor: Encode snapshot names in metadata
  • incusd/storage/linstor: Add support for listing volumes
  • incusd/storage/linstor: Use aux property to map incus names to linstor resource definitions
  • incusd/storage/linstor: Ensure volumes are available locally when retrieving device paths
  • incusd/storage/linstor: Fallback to generic migration implementation
  • incusd/storage/linstor: Freeze and sync filesystem when snapshotting volumes
  • incusd/storage/linstor: Cleanup temporary resource definitions from snapshots
  • incusd/storage/linstor: Delete diskless resources when unmounting volumes
  • incusd/storage/linstor: Add drbd resource config options
  • tests: Add standalone LINSTOR tests
  • tests: Add clustered LINSTOR tests
  • internal/migration: Update protobuf
  • doc: Update configs
  • gomod: Tidy dependencies and add LINSTOR
  • github: Add LINSTOR CI tests
  • incusd/storage/linstor: Add linstor.remove_snapshots config option
  • doc: Document linstor.remove_snapshots config option
  • test: Add tests for linstor.remove_snapshots config option
  • doc/support: Update feature release version
  • incusd/instance: Don't enforce device/config validation on snapshots
  • gomod: Update dependencies
  • api: instance_oci_entrypoint
  • internal/instance: Add OCI entrypoint configuration
  • incusd/instance/lxc: Add OCI entrypoint configuration
  • incusd/instance: Set instance OCI config from OCI data
  • doc: Update config

ドキュメント

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.11.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.10 リリースのお知らせ

2025/02/28

はじめに

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

このリリースでは、有効な HTTPS 証明書で Incus を実行する簡単な方法や、プロビジョニングデータを VM に送る新しい方法、とても歓迎される API の強化などが導入されています。

image|659x280

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

Enjoy!

新機能

ACME DNS-01 バリデーション

ACME(もっとも一般的には Let's Encrypt)を使った DNS-01 チャレンジを可能にするための新しい設定キーが追加されました。

これにより、Incus サーバー上で有効な TLS 証明書を取得するための簡単なパスが提供できます。

設定例:

acme.agree_tos: true
acme.domain: foo.example.net
acme.email: admin@foo.example.net
acme.challenge: DNS-01
acme.provider: cloudflare
acme.provider.environment: |-
  CLOUDFLARE_EMAIL=admin@foo.example.net
  CLOUDFLARE_API_KEY=XYZ

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

API 全体でフィルタリングをサポート

Incus は、インスタンス、イメージ、ストレージボリュームのサーバー側でのフィルタリングすでにサポートしています。同じロジックが残りすべての API コレクションに拡張されました。

これらはすべて同じ OData フィルターで filter パラメータをサポートしています。
今後数回のリリースで、Incus のコマンドラインツールがこれを使うようになるでしょう。

ドキュメント: https://linuxcontainers.org/incus/docs/main/rest-api/#filtering

VM で SMBIOS11 プロビジョニングをサポート

DMI テーブルを備えたシステム(x86_64 もしくは aarch64)では、SMBIOS タイプ 11 テーブルにデータを与えることができるようになりました。これは、ハイパーバイザーに対して別の通信チャンネル(ネットワーク、シリアルなど)を必要とせずに、システムにデータを提供する方法です。

これは特に systemd がサポートしており、プロビジョニングデータを渡すために使用できます: https://www.freedesktop.org/software/systemd/man/latest/smbios-type-11.html

例:

stgraber@dakara:~$ incus launch images:debian/12 d12 --vm -c smbios11.io.systemd.credential:foo=bar
Launching d12
stgraber@dakara:~$ incus exec d12 -- systemd-creds --system cat foo
bar

VM での IOMMU サポート

Incus の VM は、セキュリティやデバイスパススルーの助けになる IOMMU サポートを自動的に取得するようになりました。ほとんどのユーザーにとっては、これは完全に目に見えない変更です。

root@u1:~# dmesg | grep -i iommu
[    0.406474] iommu: Default domain type: Translated
[    0.406481] iommu: DMA domain TLB invalidation policy: strict mode
[    0.534812] virtio_iommu virtio0: input address: 48 bits
[    0.534820] virtio_iommu virtio0: page mask: 0xfffffffffffff000
[    0.637345] pcieport 0000:00:02.0: Adding to iommu group 0
[    0.642755] pcieport 0000:00:02.1: Adding to iommu group 1
[    0.649614] pcieport 0000:00:02.2: Adding to iommu group 2
[    0.656700] pcieport 0000:00:02.3: Adding to iommu group 3
[    0.663517] pcieport 0000:00:02.4: Adding to iommu group 4
[    0.669419] pcieport 0000:00:02.5: Adding to iommu group 5
[    0.675831] pcieport 0000:00:02.6: Adding to iommu group 6
[    0.682967] pcieport 0000:00:02.7: Adding to iommu group 7
[    0.688303] pcieport 0000:00:03.0: Adding to iommu group 8
[    0.695646] pcieport 0000:00:03.1: Adding to iommu group 9
[    0.700994] pcieport 0000:00:03.2: Adding to iommu group 10
[    0.709613] pcieport 0000:00:03.3: Adding to iommu group 11
[    0.715130] pcieport 0000:00:03.4: Adding to iommu group 12
[    0.722208] virtio-pci 0000:01:00.0: Adding to iommu group 13
[    0.728419] virtio-pci 0000:01:00.1: Adding to iommu group 13
[    0.732362] virtio-pci 0000:01:00.2: Adding to iommu group 13
[    0.737953] virtio-pci 0000:01:00.3: Adding to iommu group 13
[    0.746652] virtio-pci 0000:01:00.4: Adding to iommu group 13
[    0.752491] virtio-pci 0000:01:00.5: Adding to iommu group 13
[    0.781052] virtio-pci 0000:02:00.0: Adding to iommu group 14
[    0.791255] virtio-pci 0000:03:00.0: Adding to iommu group 15
[    0.799383] virtio-pci 0000:03:00.1: Adding to iommu group 15
[    0.809692] virtio-pci 0000:04:00.0: Adding to iommu group 16
[    0.820005] virtio-pci 0000:05:00.0: Adding to iommu group 17
[    1.399721] xhci_hcd 0000:01:00.6: Adding to iommu group 13

VRF support for routed NICs

複数の VRF(Virtual Routing and Forwarding)を使用するシステムでは、特定の routed NIC を任意の VRF に配置できるようになりました。

これは、routed タイプの nic デバイス上で、新しい vrf プロパティを使うことで行われます。

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

事前に与える構成ファイルでのプロジェクト内のプロファイルの作成

Incus サーバーの、事前に与える構成ファイル(preseed)を使うロジックが拡張されました。特定のプロジェクト内でプロファイルが作成できます。

これは、関連する profile エントリーの project キーを通して行えます。
そして、プロジェクトも事前に与える構成ファイル内で定義する必要があります。

ドキュメント : https://linuxcontainers.org/incus/docs/main/howto/initialize/#configuration-format

バックアップとイメージで LZ4 をサポート

lz4 が、Incus 内で完全にサポートされている圧縮フォーマットになりました。
対応するツールがシステムにインストールされている場合、インスタンス、ボリューム、バケットのバックアップ(インポート・エクスポート)とイメージの両方に LZ4 が使えるようになりました。

すべての変更点

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

すべてのChangeLogを見る
  • incusd/instance/drivers/qmp: Handle missing log directory
  • cmd/incus-user: keep track of socket path used to connect to the server
  • cmd/incus-user: unify logging, support --verbose and --debug
  • api: init_preseed_profile_project
  • shared/api: Add project support to profiles in preseed init
  • client: Add project support to profiles in preseed init
  • doc/rest-api: Refresh swagger YAML
  • incus/admin/init: use api.InitProfileProjectPost
  • incusd/network/ovn: Fix bad route check
  • incus/file/pull: Ensure we have a leading / in all paths
  • github: Fix shellcheck
  • doc/installing: mention incus group on NixOS
  • incus/file/pull: Read files in chunks
  • incus/file/pull: Actually make read buffer 1MiB
  • incusd/network/bridge: Fix deletion of tunnels and dummy devices
  • incusd/device/disk: Allow virtiofsd on non-x86
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • incusd/instance/drivers/qemu: Add IOMMU device
  • incus/file: Remove unused function
  • i18n: Update translation templates
  • incus/network/info (ovn): Fix object not found.
  • Translated using Weblate (Chinese (Simplified Han script))
  • incusd/instance/drivers: Improve NUMA balancing
  • incus/file: Move from path to filepath
  • github: Add linux-modules-extra (for vrf)
  • shared/archive: Added LZ4 support
  • api: instance_nic_routed_host_address
  • incus/server/ip: Add Master parameter for veth and tuntap
  • incus/server/ip: Add VRF parameter for IP Route
  • incus/server/device: Add vrf parameter for routed NIC devices
  • tests: Add test for routed NIC with VRF
  • doc: Add description for routed-nic VRF parameter
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • generate-database: Move into cmd package
  • generate-config: Move to cmd package
  • incus/storage/drivers: Fix issue with lvmcluster storage pool creation
  • generate-database: Rename from incus-generate
  • generate-config: Rename from incus-doc
  • github: Workaround permission problems
  • internal/instance: Move user config key doc string
  • internal/instance: Add environment config keys docstring
  • incusd/internal/server/instance: Add qemuEscapeCmdline
  • incusd/internal/server/instance: Use qemuEscapeCmdline
  • api: instance_smbios
  • internal/instance: Add smbios config keys
  • incusd/instance/drivers/qemu: Implement smbios config keys
  • doc: Update configs
  • incus: Fix instance copy error when using '--refresh' flag
  • doc/network_load_balancers: Fix backend add instructions
  • doc: Add frontend to wordlist
  • incusd/main_nsexec: Fix change_namespaces fallback to handle multiple namespaces
  • incusd/instance/utils: Only check uid/gid for containers
  • generate-database: Use types.Package
  • generate-database: Remove support for separate database package
  • generate-database: Separate Go package loading
  • incusd/instance/drivers: Check if disk is remote when migrating with an extra disk
  • incusd/instance/edk2: Look for bios.bin in /usr/share/seabios
  • generate-database: Add unified generate command
  • incusd/db: Use generate command
  • generate-database: Remove obsolete commands stmt and method
  • generate-database: Update README.md
  • generate-database: Reduce to single go:generate per package
  • incusd/db: Use Single generate per package
  • golangci: Update for new generate-database syntax
  • internal/cmd/table: Improve errors on modifiers
  • incusd: Add additional validation when joining a new cluster member
  • incusd: Upgrade flosch/pongo2 to v6
  • doc: Bump minimum kernel to 5.15
  • Makefile: Bump minimal Go to 1.23
  • doc: Bump minimum Go to 1.23
  • gomod: Update dependencies
  • github: Re-order code tests tasks
  • incusd/resources: Prevent concurrent runs and cache data for 10s
  • incusd/backup: Implement compatibility with old backups
  • incusd/backup: Detect incompatible backup files
  • fix: Don't attempt to download signatures for oci
  • incusd: Ensure directories have 755 permissions in 'incus file push -p' command
  • tests: Fix test for verifying directory permissions
  • devcontainer: Update Go to 1.23
  • generate-database: Make "Code generated" comment Go conformant
  • db/cluster: Update code generated by generate-database
  • generate-database: Add internal tool disclaimer
  • generate-config: Formatting README.md
  • generate-config: Add internal tool disclaimer
  • incusd/storage/drivers: Truncate the block file during custom volume migration
  • incusd/instance/qemu: Don't attempt to hotplug over the virtual IOMMU
  • incusd/device/disk: Remove diskAddRootUserNSEntry
  • incusd/device/disk: Use virtiofsd uid/gid handling
  • generate-database: Add error mapping
  • incusd/db: Use error mapping
  • incusd/db: Update generated code
  • generate-database: Make self-sufficient
  • incusd/db: Update generated code
  • generate-database: Improve case handling
  • incus/list: Remove unused arguments and parameters
  • incus/top: Fix handling of all-projects
  • incusd/storage/drivers: Refactor ceph discovery
  • incusd/instance/drivers: Let QEMU handle Ceph itself
  • incus/file: Simplify sftpCreateFile
  • incus/file: Change recursiveFilePush to use SFTP
  • incus/file: Change recursiveMkdir to use SFTP
  • incus/file: Change recursivePullFile to use SFTP
  • incus/file: Re-use SFTP as much as possible
  • internal/filter: Handle multiple in-line structs
  • api: api_filtering_extended
  • incusd: Add filtering to /1.0/networks
  • incusd: Add filtering to /1.0/networks/{networkName}/forwards
  • incusd: Add filtering to /1.0/networks/{networkName}/load-balancers
  • incusd: Add filtering to /1.0/networks/{networkName}/peers
  • incusd: Add filtering to /1.0/network-acls
  • incusd: Add filtering to /1.0/network-integrations
  • incusd: Add filtering to /1.0/network-zones
  • incusd: Add filtering to /1.0/network-zones/{zone}/records
  • incusd: Add filtering to /1.0/storage-pools
  • incusd: Add filtering to /1.0/storage-pools/{poolName}/buckets
  • incusd: Add filtering to /1.0/certificates
  • incusd: Add filtering to /1.0/profiles
  • incusd: Add filtering to /1.0/projects
  • doc/rest-api: Refresh swagger YAML
  • tests: Test more API filters
  • doc: Remove mention of limitations on filtering
  • gomod: Update dependencies
  • api: acme_dns01
  • incusd/cluster/config: Add extra ACME config keys
  • incusd/acme: Add DNS-01 support
  • gomod: Update dependencies
  • doc: Add resolvers to wordlist
  • doc: Update configs

ドキュメント

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.10.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.9 リリースのお知らせ

2025/01/24

はじめに

Happy new year!

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

休暇であったことを考えると、このリリースは少し軽めのリリースですが、通常の多くのバグ修正に加えて、優れた機能がいくつか追加されています。

image|690x429

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

Enjoy!

新機能

ブリッジネットワーク上のインスタンスネットワーク ACL

システムがファイアウォールに nft を使用している場合は(これは incus info で調べられます)、ネットワーク ACL を、マネージドネットワークブリッジ上で実行されているインスタンスに直接適用できるようになりました。

この機能により、同じブリッジネットワーク上で実行されているさまざまなインスタンスに、個別の内向き・外向きのファイアウォールルールを適用することで、ネットワークのマイクロセグメンテーション化ができるようになりました。

ネットワーク ACL は、incus network acl を使って作成と管理を行い、security.acls 設定キーを使用して、関連する NIC インターフェースに適用できます。

ACL ドキュメント : https://linuxcontainers.org/incus/docs/main/howto/network_acls/
ブリッジドキュメント : https://linuxcontainers.org/incus/docs/main/reference/network_bridge/
NIC ドキュメント: https://linuxcontainers.org/incus/docs/main/reference/devices_nic/#nic-bridged

QEMU スクリプトレットの機能強化

このリリースで、QEMU スクリプトレットがさらに改善されました。

すべてのスクリプトレット呼び出しで完全なインスタンス構造が提供され、インスタンス設定、プロファイルのリストなどにアクセスできるようになりました。

QEMU が起動する前に実行される、新しい config フックも追加されました。
このフックは QMP コマンドを送ることには使えませんが、新しい関数を呼び出して、QEMU 設定ファイルまたはコマンドライン引数を変更できます:

  • get_qemu_cmdline
  • set_qemu_cmdline
  • get_qemu_conf
  • set_qemu_conf

ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/instance_options/#advanced-use

VM のメモリーダンプ

新たに incus debug memory-dump コマンドと、それに対応する API が追加され、仮想マシンのメモリーダンプを簡単に取得できるようになりました。

Incus VM には、Windows 仮想マシンがメモリーデバッグ情報を提供できるようにするための必要なデバイスが含まれるようになりました。これにより、Windows デバッガーで読み込めるメモリーダンプが可能になります。

stgraber@dakara:~$ incus launch images:debian/12 v1 --vm
Launching v1
stgraber@dakara:~$ incus debug dump-memory v1 debug --format=elf
stgraber@dakara:~$ file debug
debug: ELF 64-bit LSB core file, x86-64, version 1 (SYSV), SVR4-style

OVM ネットワーク状態のアップリンクアドレス

アップリンクの IPv4、IPv6 アドレスを incus network info コマンドから直接得られるようになりました。

stgraber@athos:~# incus network info default
Name: default
MAC address: 00:16:3e:8d:51:b6
MTU: 1500
State: up
Type: broadcast

IP addresses:
  inet   10.22.45.1/24 (link)
  inet6  2602:fc62:b:8006::1/64 (link)

Network usage:
  Bytes received: 0B
  Bytes sent: 0B
  Packets received: 0
  Packets sent: 0

OVN:
  Chassis: delmak
  Logical router: incus-net13-lr
  IPv4 uplink address: 172.17.200.106
  IPv6 uplink address: 2602:fc62:b:200::106

サーバー構成ファイルからのストレージボリュームの作成

事前に与えるサーバー構成ファイル(preseed file)から直接、初期ストレージボリュームを定義できるようになりました。
この機能は、構成ファイルの一部でもあるプロファイルによって使用される共有ボリュームを設定する場合や、Incus イメージやバックアップストレージが使うボリュームを定義する場合に便利です。

ドキュメント : https://linuxcontainers.org/incus/docs/main/howto/initialize/#configuration-format

create コマンドでの説明の設定

すべての create コマンドに --description オプションが追加され、オブジェクトの設定(description)フィールドを直接設定できるようになりました。

stgraber@dakara:~$ incus profile create foo --description "Example profile"
Profile foo created
stgraber@dakara:~$ incus profile list
+---------+-----------------------+---------+
|  NAME   |      DESCRIPTION      | USED BY |
+---------+-----------------------+---------+
| default | Default Incus profile | 6       |
+---------+-----------------------+---------+
| foo     | Example profile       | 0       |
+---------+-----------------------+---------+

すべての変更点

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

すべてのChangeLogを見る
  • Translated using Weblate (Japanese)
  • incusd/scriptlet: Refactor load package
  • incusd/scriptlet: Add support for checking optional functions and improve error messages
  • Translated using Weblate (Japanese)
  • Translated using Weblate (Japanese)
  • incusd/storage/drivers: Force blkdiscard and ignore errors
  • incusd/auth: fix FGA online data race
  • incusd/storage/drivers: Log on blkdiscard failure
  • incusd/storage: Add storage volume db entries when storage is changed
  • client: Propagate HTTP TLS dialer to websocket
  • api: network_ovn_state_addresses
  • shared/api: Expand OVN state with uplink addresses
  • doc/rest-api: Refresh swagger YAML
  • internal/server: Add uplink addresses to ovn state
  • incus/network/info: Add uplink addresses for ovn network
  • i18n: Update translation templates
  • incus: Add --description flag to create commands
  • i18n: Update translation templates
  • tests: Add tests for --description flag on create commands
  • incusd/scriptlet: Fix qemu_hook required argument
  • doc: Fix qemu_hook required argument
  • Add simple shell.nix
  • client: Add proxy host to skopoe calls
  • incusd/cluster: Add missing error handling
  • incusd/cluster: Clarify error on DB failure
  • incusd/instance/qemu: Fix QMP arguments typing
  • incusd/instance/qemu: QEMU device naming consistency
  • Encode mc alias for storage buckets to match allowed characters
  • doc: Contributing section restructuring
  • incusd/network/ovn: Allow creation of OVN network with no uplink
  • incusd/network/ovn: Handle missing logical router in state
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • lxd-to-incus: Clear volatile.uuid from instances
  • Translated using Weblate (Chinese (Simplified Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • Added translation using Weblate (Chinese (Traditional Han script))
  • Translated using Weblate (Chinese (Traditional Han script))
  • Translated using Weblate (Chinese (Simplified Han script))
  • github: Bump most workflows to 24.04
  • github: Split testsuite to separate action
  • github: Add aarch64 tests
  • tests: Skip nftables test on old kernels
  • Added translation using Weblate (Tamil)
  • shared/util: Add IsNoneOrEmpty
  • incusd/network/bridge: Tweak dnsmasq startup condition
  • shared/cgo: Add finalize_userns
  • shared/cgo: Export in_same_namespace
  • incusd/main_forkproxy: Join all namespaces at once
  • incusd/main_forkfile: Join all namespaces at once
  • internal/linux: Add ClearBlock
  • incusd/storage: Switch to linux.ClearBlock
  • internal/linux/discard: Remove leftover debugging
  • internal/linux/discard: Use marker length for buffer
  • internal/linux/discard: Add support for offset
  • incusd/storage/generic: Pass offset to ClearBlock
  • incusd/storage/lvm: Discard the new blocks on resize
  • incusd/storage/lvm: Run ClearBlock on all new thick block volumes
  • cmd: support header line for csv output
  • cmd: update --format flag description
  • i18n: Update translation templates
  • cmd: add validation for --format flag
  • doc: fix ref for vendor-data
  • devcontainer: initial version
  • Makefile: add target for unit tests as root
  • Makefile: add missing installations for gotags and openfga
  • incusd/network/ovn: Skip remote peers when iterating peer networks
  • incusd/storage/lvm: Move resize clearing to SetVolumeQuota
  • incusd/storage: Make use of qemu-img's target-is-zero option
  • incusd/device/disk: Remove virtfs-proxy-helper dependency
  • tests: Remove 9p proxy driver
  • incusd/instance: Split startupHook function
  • incusd/main_cluster: Tweak to have help refer to correct command name
  • incusd/instance: Pass an *api.Instance to the scriptlet program
  • incusd/scriptlet/qemu: Add instance parameter to the QEMU scriptlet
  • incusd/instance: Rewire QEMU config generation
  • incusd/instance: Make QEMU config types public
  • incusd/scriptlet/qemu: Fix Starlark function name
  • incusd/scriptlet/qemu: Prevent calling QMP functions at config stage
  • incusd/device/disk: Better handle partitions
  • Fixed link to point to correct manpage.
  • lxd-to-incus: Be more lenient on database changes
  • incusd/storage/drivers: Handle 4k sector sizes
  • incusd/dnsmasq: Don't put the project name in the DNS record
  • incusd/device/disk: disable 9p if idmap requested
  • incusd/scriptlet/qemu: Add QEMU configuration getters
  • incusd/scriptlet/qemu: Add QEMU configuration setters
  • api: qemu_scriptlet_config
  • doc/ref/instance_options: Update QEMU scriptlet documentation
  • incusd/instance: Update unit test
  • incusd/instance/drivers: Introduce ReloadDevice
  • api: network_bridge_acl_devices
  • incusd/device/nic: ACL support for bridge NIC device
  • incusd/server/firewall: ACL for bridge NIC device
  • doc/device/nic: Add ACL support to bridge NICs
  • doc/network_acl: Document usage with bridged NICs
  • tests: nftable test with ACL rules
  • github: Switch to Github's hosted arm64 runners
  • doc: typo
  • doc: Updated storage_zfs.md
  • incusd/device/disk: Update correct mount options
  • incus/file/pull: Port to SFTP
  • i18n: Update translation templates
  • api: instance_debug_memory
  • incusd/instances/qemu: Add vmcoreinfo device
  • incusd/instances/qemu: Add dump-guset-memory implementation for instance memory debugging
  • incusd: Add GET /1.0/instances/NAME/debug/memory
  • doc/rest-api: Refresh swagger YAML
  • client: Add API implementation for instance memory debugging
  • incus: Add "debug dump-memory" command
  • i18n: Update translation templates
  • doc: Force white background for swagger API
  • gomod: Update dependencies
  • api: init_preseed_storage_volumes
  • client: Add storage volume initialization
  • shared/api: Add storage volume initialization
  • doc: Include storage initialization example
  • doc/rest-api: Refresh swagger YAML
  • tests: Include storage volume to init test
  • incusd/instance/qemu: Fix device_id warning on 9.2.x
  • incus: Fix example description for debug dump-memory command
  • i18n: Update translation templates

ドキュメント

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.9.0

Incus クライアントの Winget パッケージ

Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。

https://winstall.app/apps/LinuxContainers.Incus

サポート

月次のフィーチャーリリースは、次のリリースがリリースされるまでのみサポートされます。より長いサポート期間と少ない変更頻度が必要な場合、代わりに Incus 6.0 LTS の使用を検討すべきです。

コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues

Incus 6.0.3 LTS リリースのお知らせ

2024/12/19

はじめに

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

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

変更点

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

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

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

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

  • 仮想マシンの OS 情報(incus info
  • 仮想マシンのコンソールヒストリー(incus console --show-log
  • Incus から、直接クラスター化された LVM プールを作成する機能
  • incus-migrate の QCOW2 と VMDK サポート
  • 設定可能な macvlan モード(bridgevepapassthruprivate
  • ロードバランサーのヘルス情報(incus network load-balancer info
  • OVN ネットワークの外部インターフェース(bridge.external_interfacesのサポート)
  • クラスター退避・リストアの並列化(多数の CPU を持つシステム上)
  • Web インターフェースにすばやくアクセスするための incus webui の導入
  • 自動クラスターリバランシング
  • 部分的なインスタンスとボリュームの更新(incus copy --refresh-exclude-older --refresh
  • incus top のカラム、フォーマット、更新頻度の設定
  • OVN ネットワーク上での DHCP アドレス範囲のサポート(ipv4.dhcp.ranges
  • 管理物理ネットワークのバッキングインターフェースの変更のサポート
  • 拡張 QEMU スクリプトレット(追加関数)
  • QEMU QMP トラフィックの新しいログファイル(qemu.qmp.log:
  • 配置スクリプトレット内の新しい get_instances_count 関数
  • incus admin sql--format のサポート
  • 仮想マシンのストレージのライブマイグレーション
  • OpenFGA の代替としての新しい認証スクリプトレット
  • コンソールのスクリーンショットを撮るための API
  • カスタムストレージボリュームの設定可能な初期オーナー(initial.uidinitial.gidinitial.mode
  • インポート時のイメージエイリアスの再利用(incus image import --reuse --alias
  • 新しい incus-simplestreams prune コマンド
  • コンソールアクセスのロック(オーバーライドするには incus console --force を使用)

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

すべてのChangeLogを見る
  • incusd/network/ovn: Properly handle lack of a protocol on LB checker
  • doc/installing: Add link to Arch Wiki for Incus
  • internal/server/instance/drivers: Cleanup spice socket when VM stops
  • internal/server/instance/drivers: Switch default backend for QEMU console to ringbuf
  • incus/console: Add completion
  • internal/server/instance/drivers/qmp: Add commands for reading a ringbuf and swaping backends for chardevs
  • internal/server/instance/drivers: Implement ConsoleLog() for qemu driver
  • internal/server/instance/drivers: Add functions to switch console's backend
  • cmd/incusd: Allow VMs to pull console history similar to containers
  • cmd: Properly handle --project in error messages
  • incusd/project: Don't fail project deletion on authorizer
  • incusd/project: Don't fail project rename on authorizer
  • incus-user: Handle existing network
  • incusd/networks: Return HTTP Conflict on existing network
  • incusd/networks: Apply project restrictions to list of network names
  • incusd/auth/tls: Allow access to inherited resources
  • instance/config: Add @startup to documentation
  • doc: Update metadata
  • shared/validate: Better validate simple CPU limits
  • incusd/operations: Fix operation cancelation
  • incusd/storage_volumes: Handle rename of volumes with sub-paths
  • incusd/storage/utils: Only show actual errors in growFileSystem
  • internal/server/instance/drivers: Don't return an error if console log file doesn't exist
  • incusd/instance/qemu: Properly plumb I/O limits
  • incusd/apparmor: Allow all mounts in unprivileged containers
  • cleanup: Replace use of os.IsNotExist(err) with errors.Is(err, fs.ErrNotExist)
  • incusd/network: Allow to use dns.search when only IPv4 is enabled
  • incusd/apparmor: Remove nosymfollow check (unused)
  • doc: add notes for Nvidia gpu usage when installing in OpenSUSE
  • api: instances_state_os_info
  • shared/api: Add OSInfo to InstanceState
  • doc/rest-api: Refresh swagger YAML
  • cmd/incus-agent: Populate OS information when returning instance state
  • cmd/incus: Print OS info from state, if available
  • tests: Don't over-provision test volume
  • cmd/incus-migrate: Don't copy converted VM image
  • incusd/instance_console: Check result of type assertion
  • incusd/images: Fix image access through secret
  • doc: add prerequisites section for building documentation
  • api: network_load_balancer_state
  • shared/api: Add NetworkLoadBalancerState
  • incusd/network/ovn/sb: Add GetServiceHealth
  • incusd/network: Add LoadBalancerState
  • incusd/network/load-balancer: Add API for state
  • doc/rest-api: Refresh swagger YAML
  • client: Add GetNetworkLoadBalancerState
  • incus/network_load_balancer: Add info command
  • incusd: Only emit image-created if an image was actually created
  • incusd/instances: Call placement scriptlet when target specified
  • internal/server/instance/drivers/qmp: Ensure that the device passed to RingbufRead() is a ring buffer
  • internal/server/instance/drivers: Don't return an error if VM's console device isn't a ringbuf
  • internal/server/instance/drivers: Don't conflict with live migration operation
  • incus/alias: Handle quoted values
  • incus/alias: Stable sorting of alias names
  • incusd/instance/qemu: Fix issues with old NVRAM
  • incusd/device/nic: Add configuration for macvlan mode
  • doc/devices/nic: Add mode for macvlan devices
  • api: instance_nic_macvlan_mode
  • alpine linux enable edge repositories
  • cmd/incusd: gateway parameter wasn't actually used anywhere
  • cmd/incusd: Run cluster evacuate and restore in parallel
  • formatting: Move goroutines to their own functions
  • internal/instance: Allows the VM's limits.memory configuration to be set to a percentage value
  • incusd/network/ovn: Fix CIDR size check
  • doc: Add uncomment to the word list
  • incus/file/delete: Use SFTP client instead of file API
  • incus/file/delete: Add --force flag
  • doc/network/resolved: Fix systemd unit
  • internal/instance: Fix doc for boot.host_shutdown_action
  • doc: Update metadata
  • incus/file/delete: Cache the SFTP client
  • shared/subprocess: Add TryRunCommandAttemptsDuration() which allows the caller to specify the number of attempts and duration between each attempt
  • internal/server/storage/drivers: Add support for creating shared VGs
  • doc: Incus can now create a shared VG directly
  • api: storage_lvm_cluster_create
  • incusd/network/ovn: Allow adding external interfaces to an OVN network
  • doc/network/ovn: Add description for bridge.external_interfaces parameter
  • api: network_ovn_external_interfaces
  • incusd/network: De-duplicate external interfaces validation
  • incusd/instance/qemu: Simplify console switching
  • incusd/instance/qemu: Handle existing console connections
  • incusd/instance/qemu: Fix shutdown race
  • doc/devices/proxy: Fix incorrect bind= example
  • incusd/network/bridge: Bring up external interfaces
  • i18n: Update translation templates
  • doc: Correct name of macvlan modes
  • incusd/device/nic: Correct name of macvlan modes
  • fix: fix slice init length
  • internal/instance: fix live update VM's limits.memory configuration when use a percentage value
  • incus-simplestreams list -f json: output field names. fixes lxc#1308
  • incus-agent: Add timeout for DNS query
  • incusd/db/profiles: Support config caching
  • incusd: Update calls to profile ToAPI
  • incusd/cluster/profiles: Fix import shadowing
  • incusd/instance/qemu: Don't fail on console retrival issue
  • incusd/network: Make IsUsed configurable
  • incusd/network: Update for IsUsed argument
  • incusd/network/physical: Fix typo
  • incusd/network/physical: Handle changes in parent value
  • incus: Fix display of current project in projects list
  • incus/admin/sql: Add support for --format
  • incusd/instance/common: Cleanup volatile on device add failure
  • incusd/internal/server/instance/drivers: Add support for Chimera Linux edk2 pkg file names
  • shared: Move internal "revert" library into shared
  • incusd/network/bgp: Only advertise networks with BGP configuration
  • incusd/cluster: Fix resource data caching
  • incusd/cluster: Actually use YAML for resources cache
  • shared: Update import path for "revert" library
  • incusd/instance/lxc: Simplify idmapSize
  • incusd/instance/lxc: Simplify findIdmap
  • incusd/isntance/lxc: Respect restrict.idmap.size on un-isolated containers
  • incusd/instance/lxc: Refactor findIdmap
  • incusd/instance/lxc: Fix off by one idmap check
  • shared: Move internal "ask" library into shared
  • shared: Update import path for "ask" library
  • shared: Add godoc comment for NewAsker
  • doc/network/resolved: Add disabling DNSSEC and DNSOverTLS
  • incusd/device/nic/bridged: Handle invalid configuration
  • doc: Add Kubernetes to wordlist
  • incusd/storage_volumes_snapshots: Respect pattern on manual creation
  • tests: Add test for custom storage volume snapshots pattern
  • doc/installing: Update for Chimera Linux
  • incus/top: Fix usage
  • shared/util: Add OpenBrowser
  • incus/remote/proxy: Add token authentication
  • incusd/api: Only expose UI if index.html exists
  • incus: Add webui command
  • incusd/scriptlet: Make set_target fail with invalid members
  • tests: Update for scriptlet placement error handling
  • incusd/instance/qmp: Make Run public
  • incusd/scriptlet: Add useful QMP functions
  • doc/ref/instance_options: Mention QEMU raw QMP commands
  • incusd/network/ovn: Add support to ipv4.dhcp.ranges
  • api: instances_scriptlet_get_instances_count
  • incusd/scriptlet/instances: Fix error messages
  • incusd/db/instances: Add GetInstancesCount
  • incusd/scriptlet/instances: Add get_instances_count
  • doc/cluster/placement: Add get_instances_count
  • incusd/db/node: Sort members in GetCandidateMembers
  • incusd/instances: Rely on candidateMembers being sorted
  • incusd/db/node: Remove unused GetNodeWithLeastInstances
  • incusd/db/node: Update tests to use GetCandidateMembers
  • internal/server: Log QMP interaction to a file
  • incusd/instance/qemu: Log QEMU command line
  • tests: Update instance placement tests for new ordering
  • incusd/instance_logs: Update log file list
  • incusd/network/ovn/sb: Only monitor required tables
  • incusd/network/ovn: Implement OVN SB event handlers
  • incusd/instance/qmp: Handle disabling log file
  • incusd/instance/qemu: Don't use QMP log for feature checks
  • incusd/instance/lxc: Fix LXCFS per-instance path
  • doc/idmap: Clarify subuid/subgid configuration
  • incusd/instance/qmp: Fix logging with no log file
  • client: Add a GetOIDCTokens() method
  • cmd/project: Add get-current to show current project
  • tests: Add get-current to show current project
  • incus/file/create: Use SFTP client instead of file API
  • internal/instance: Allow 0 as value to limits.cpu.nodes
  • internal/linux: Add NetlinkInterfaces
  • incus-agent: Use NetlinkInterfaces
  • incus/top: Add additional flags
  • incus/monitor: Include location in cluster logging
  • incusd/instance: Add ResourceUsage
  • incusd/scriptlet/instance: Use ResourceUsage
  • api: cluster_rebalance
  • incusd/cluster/config: Add cluster re-balance configuration keys
  • incusd/instance/config: Add volatile re-balance configuration key
  • doc: Update configs
  • incusd: Add cluster rebalance task
  • incusd/internal: Add rebalance endpoint
  • doc/cluster: Add mention of re-balancing
  • api: custom_volume_refresh_exclude_older_snapshots
  • shared/api: Add RefreshExcludeOlder to InstanceSource and StorageVolumeSource
  • client: Add RefreshExcludeOlder flag to StoragePoolVolumeCopyArgs and InstanceCopyArgs
  • incus: Adding refresh-exclude-older flag to 'copy' and 'storage volume copy'
  • incusd/migration: Add refresh-exclude-older flag
  • internal: Adding refresh-exclude-older flag implementation
  • doc/rest-api: Refresh swagger YAML
  • incus/top: Fix gofmt
  • incusd/instance/drivers: Make Export return a pointer to metadata
  • incusd/images: Update for changes to Export
  • incusd/instances/publish: Fix base metadata
  • incusd/bgp: Don't add duplicates
  • incusd/network/bgp: Only skip BGP if unconfigured and not on OVN
  • incusd/network: Move loadBalancerBGPSetupPrefixes to OVN driver
  • incusd/network/ovn/sb: Add CheckLoadBalancerOnline
  • incusd/network/ovn/nb: Add GetLoadBalancer and GetLoadBalancersByStatusUpdate
  • incusd/network/ovn: Add load-balancer health event handler
  • incusd/network/ovn: Don't advertise offline load-balancers on startup
  • shared/subprocess: Allow overriding Cwd
  • incusd/device/tpm: Fix handling of long instance names
  • incusd/instance/qemu: Don't take over operations on console retrieval
  • incusd/instance_post: Provide target project to relocation scriptlet
  • incusd/cluster/request: Add new internal user-agent
  • incusd/instances_post: Don't re-run placement on internal requests
  • incusd/api: Handle new user agent
  • incusd/instance_post: Pass in internal user agent during relocation
  • Consume websocket pings for stderr
  • incus-simplestreams: Add prune command
  • internal/instance: Fix validation of volatile.cpu.nodes
  • shared/util: Add a function to clone maps
  • Use util.CloneMap where appropriate
  • golangci: Enable goimports
  • global: Initial goimports run
  • incusd: Fix duplicate imports
  • incusd: Fix import ordering
  • instance/config: Mark user keys as live updatable
  • doc: Update configs
  • Fix incorrect Vars file mapping in edk2 driver
  • incusd/storage/zfs: Fix deletion of unavailable pools
  • zfs: load keys for encrypted datasets during pool import
  • tests: zfs: add native zfs encryption tests
  • incusd/instance: Lock image access
  • incus/image: Make use of server-side alias handling
  • client: Fix image aliases in push mode
  • client: Fix image aliases in relay mode
  • incusd/cluster: Validate address on join too
  • incusd/network: Remove duplicated logic
  • incusd/util: Cover DNS and wildcard coverage
  • incusd/storage: Add initial.* config options for storage volume
  • incusd/storage/drivers: Add ability to set the initial owner of a custom volume
  • tests: Add test for setting initial owner of a cutom volume
  • api: Add storage_initial_owner extension
  • doc/reference: Add initial.* config keys
  • shared/cliconfig: Improve configuration loading
  • incus: Simplify configuration loading
  • incus: Add aliases completion
  • incusd/storage/drivers/lvm: Remove metadata info from space usage calculation
  • incus/migration: Add StoragePool to VolumeTargetArgs and StorageMove to VolumeSourceArgs
  • incus/instance: Add StoragePool to MigrateArgs
  • incus/drivers: Add support for local live-migration between storage pools
  • incusd: Add support for local live-migration between storage pools
  • api: Add storage_live_migration extension
  • golangci: Add local prefixes for goimports
  • client: invalidate simple streams cache
  • incusd/instances_post: Fix cluster internal migrations
  • incusd/instances_post: Only update pool in DB if pool is expected to change
  • incusd/instances_post: Account for profiles when overriding pool in DB
  • incus/image: Add reuse flag
  • incus/publish: Use common helper function deleteImagesByAliases
  • tests: Add a reuse flag test for the 'incus image import'
  • incusd/instance/qemu: Set instance path ownership on startup
  • api: instance_console_screenshot
  • incusd/instance/qmp: Add Screendump command
  • incusd/response: Allow overrriding Content-Type in FileResponse
  • incusd/instance: Add ConsoleScreenshot to VM interface
  • incusd/instance/qemu: Implement ConsoleScreenshot
  • incusd/instance_console: Add screenshot support to console API
  • doc/rest-api: Refresh swagger YAML
  • incusd/task: Fix wait group logic (more entries than running tasks)
  • incusd/instance: Add ETag function
  • incusd/instance/qemu: Fix random ordering in ETag
  • incusd/instance/lxc: Fix random ordering in ETag
  • incusd: Use new ETag instance function
  • api: image_import_alias
  • client: Set X-Incus-aliases on image imports
  • incusd/image: Allow passing alias list through X-Incus-aliases
  • doc/rest-api: Refresh swagger YAML
  • incusd/image: Fix context for alias add
  • incusd/image: Handle all alias cases
  • Makefile: Use fga for model conversion
  • incusd/auth: Introduce EntitlementCanViewSensitive
  • incusd/api_10: Use EntitlementCanViewSensitive
  • incusd/auth/openfga: Introduce server-wide read-only access
  • incusd/auth/openfga: Rebuild model
  • incusd/auth/openfga: Migrate public permissions
  • incusd/auth: Implement ApplyPatch
  • incusd/auth/fga: Change model refresh logic to rely on patches
  • incusd/patches: Add auth patch logic
  • incusd/patches: Skip patches until their assigned stage
  • doc/authorization: Remove outdated OpenFGA model description
  • tests: Tweak openfga test
  • incusd/migrate: Set CreationDate during custom volume snapshot copy with refresh
  • incusd/storage: Add CreatedAt during custom volume copy with refresh
  • tests: Update copy with refresh test
  • doc/instance/properties: Add missing instance properties
  • incusd/daemon_storage: Ensure corect symlinks for images/backups
  • incusd/storage/lvm: Handle newer LVM
  • doc/sphinx: Upgrade MyST
  • doc/manpage: Tweak manpage synopsis rendering
  • incusd/storage/lvm: Require 512-bytes physical block size for VM images
  • incus: Improve instance and remote names completion
  • incusd: Fill ExpiryDate and remove LastUsedDate in volumeSnapshotToProtobuf
  • incusd/device/tpm: Wait for swtpm to be ready
  • incus: Improve completion for file push and file pull
  • incusd/auth/tls: Restrict config access to non-admin
  • incusd/storage: Handle default disk size in GetInstanceUsage
  • incus: Improve completion for file create
  • incus: Improve completion for file delete
  • incus: Improve completion for file edit
  • incus: Improve completion for file mount
  • incus: Fix completion for profile copy
  • doc/installing: Update Fedora instructions
  • incus: Add a function to complete image fingerprints
  • incus: Add completion for image alias subcommands
  • incusd/daemon: Skip non-PKI issued trusted certificates when in PKI mode
  • incusd/cluster: Update tests for change to trustedCerts
  • tests: Validate all non-PKI certs are blocked in PKI mode
  • incus: Fix completion for image alias create
  • doc/network_forwards: Split configuration into own table
  • util: Improve readability with early return
  • incusd/db: Improve readability with eraly return
  • incus/top: Ignore CPU idle time
  • Makefile: Bump minimum to 1.22.7
  • gomod: Update dependencies
  • i18n: Update translation templates
  • incus/remote: Use errors.new
  • incus: Display the alias expansion when execution of an alias fails
  • util: code structure error handling
  • incusd/db: do not shadow Go builtin function
  • lint: disallow restricted licenses in go-licenses
  • incus: Fix alias arguments handling
  • incus/file: Expand setOwnerMode
  • incus/file/push Use SFTP client instead of file API
  • incusd/instance/qemu: Set CLOEXEC for TPM sockets
  • incusd/patches: Run auth patches on all servers
  • incusd/auth/openfga: Get rid of applyPatches
  • incusd/auth/openfga: Force OpenFGA update on initial config and patching
  • incus: Clarify device override syntax
  • incusd/auth/openfga: refresh model before applying patches
  • internal/scriptlet: Fix typo
  • incusd/scriptlet: refactor marshal
  • incusd/scriptlet: Refactor log
  • incusd/scriptlet: Add authorization scriptlet
  • incusd/auth: Refactor drivers
  • incusd/config: Add scriptlet authorization key
  • incusd/auth: Add authorization scriptlet driver
  • incusd/daemon: Handle authorization scriptlet reset
  • incusd/auth: Comment exported methods and types
  • incusd/scriptlet: Add project and instance authorization getters
  • doc: Update configs
  • api: authorization_scriptlet
  • doc/authorization: Add authorization scriptlet
  • tests: Authorization scriptlet
  • doc: add openSUSE installation instructions
  • incusd/scriptlet: Rename prefixAuthorization to nameAuthorization
  • incusd/scriptlet: Add function checks in scriptlet validation
  • client/oci: Add debug logging for subprocess commands
  • incusd/scriptlet: Add function args checks in scriptlet validation
  • incus/project: Fix get-current for default (unset) project
  • incusd: Add support for '--force' flag
  • cmd/console: Add '--force' flag
  • shared/api: Add Force field to InstanceConsolePost
  • client: Check 'console_force' API extenstion
  • api: Add console_force extension
  • doc/rest-api: Refresh swagger YAML
  • internal/cmd: Have RenderTable take in an io.Writer
  • incus: Update for RenderTable
  • incus-simplestreams: Update for RenderTable
  • incusd: Update for RenderTable
  • incusd: Cleanup in cmdClusterListDatabase
  • doc/reference/network_bridge: Add missing backsticks for variable escaping
  • incusd/instance/lxc: Skip instances without idmap allocation yet
  • incusd/cluster: Skip project restrictions during join
  • shared/ask: Add AskPassword/AskPasswordOnce to Asker
  • shared/ask: Fix redefinition of the built-in types
  • cmd/incus: Use AskPasswordOnce from asker
  • incusd/storage/drivers/common: Truncate/Discard ahead of sparse write
  • inucsd: Add additional check to Cancel method for ConsoleShow operation
  • incusd/instance_console: Remove redundant (and unsafe) write
  • incus/console: Make sure we leave the console in a clean state
  • incusd/instance_console: Don't fail on failure to write reset sequence
  • client: Improve SFTP performance
  • incusd/main_forkfile: Improve SFTP performance
  • incusd/network/ovn: Return ErrTooMany when getting multiple records
  • incusd/network/ovn: Clear all existing records
  • incusd/instance_post: Expand profiles in scriptlet context
  • i18n: Update translation templates
  • gomod: Update dependencies
  • incusd/scriptlet: Refactor load package
  • incusd/scriptlet: Add support for checking optional functions and improve error messages
  • incusd/storage/drivers: Force blkdiscard and ignore errors
  • incusd/auth: fix FGA online data race
  • incusd/storage/drivers: Log on blkdiscard failure
  • incusd/storage: Add storage volume db entries when storage is changed
  • client: Propagate HTTP TLS dialer to websocket
  • incusd/scriptlet: Fix qemu_hook required argument
  • doc: Fix qemu_hook required argument
  • incusd/cluster: Add missing error handling
  • incusd/cluster: Clarify error on DB failure
  • incusd/instance/qemu: Fix QMP arguments typing
  • incusd/instance/qemu: QEMU device naming consistency

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

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

ダウンロード

感謝

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

Sovereign Tech Fund Logo

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

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

Incus 6.8 リリースのお知らせ

2024/12/13

はじめに

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

このリリースは 2024 年の最後のリリースです。実行中の VM をストレージプール間で移動する機能、新しい認証バックエンド、アプリケーションコンテナのボリューム処理の改善など、VM に関係する多くの改善が加えられています。

image|689x232

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

Happy holidays!

新機能

VM ストレージのライブマイグレーション

VM の実行中に、ストレージプール間で VM を移動できるようになりました。
しかし、これを動作させるには、VM はクラスター内の別のサーバーに移動する必要があることに注意が必要です。これは、マイグレーション中に、同じ VM の 2 つの QEMU インスタンスが、1 つのサーバー上で実行されることを防ぐために必要です。

あるプールから別のプールへの移動は次のように実行できます:

incus move NAME --storage NEW-POOL --target ANOTHER-SERVER

認可スクリプトレット

新たな認可制御方法が、認可スクリプトレットの形で導入されました。これにより、TLS または OIDC 認証を組み合わせることができる、カスタムのビルトイン認証制御が可能になります。

ドキュメント : https://linuxcontainers.org/incus/docs/main/authorization/#scriptlet-authorization

VM コンソールのスクリーンショット

Incus 用の GUI や WebUI クライアントの開発を簡単にするために、VM の VGA コンソールの 1 回限りのスクリーンショットを簡単に取得できるようになりました。

これは非常に軽量で、ユーザーが VGA コンソールに接続しているときでも実行できるという利点があります。

VM の PNG スクリーンショットを取得するためには、GET /1.0/instances/NAME/console?type=vga でアクセスするだけです。

カスタムストレージボリュームの初期オーナーとモード

OCI コンテナのデータに使われるストレージボリュームの作成を簡単にするために、カスタムストレージボリュームの設定オプションがいくつか追加されました:

  • initial.uid
  • initial.gid
  • initial.mode

これらはボリューム作成時に与えることができます。名前が示すように、そのボリューム内のルート ディレクトリの uid、gid、モードの初期値を設定します。

:

incus storage volume create default my-volume size=5GiB initial.uid=1000 initial.gid=1000 initial.mode=0700

OpenFGA モデルの小規模なアップデート

このリリースで、OpenFGA アクセスモデルが少し調整されました。

user:* viewer server:incus の初期パーミッションは、認証されたユーザーに対してグローバルリソースへの読み取り専用アクセスを許可していました。これが同等の user:*authenticated server:incus に置き換えられました。

さらに viewer パーミッションがユーザーに直接与えられるようになり、(グローバルリソースだけでなく)サーバー全体の完全な読み取り専用アクセスが許可されます。

権限は更新時に自動的に更新されます。

さらに、新しい can_view_sensitive 資格が追加され、サーバー設定などの機密設定を読み取れるユーザーを制御できるようになりました。

インポート時のイメージエイリアス再利用

incus publish で行われていたのと同様に、incus image import --reuse --alias ALIAS image.tar.xz を実行してイメージをインポートし、ALIAS というエイリアスで識別されるイメージを置き換えられるようになりました。

新しい incus-simplestreams prune コマンド

simplestream サーバーをクリーンに保つため、新たに incus-simplestreams prune コマンドが追加されました。実行すると、次のものが認識され、クリーンアップされます:

  • インデックス内のどのイメージにも属さないイメージファイル
  • イメージファイルが存在しないインデックスエントリー
  • 古いインデックスエントリー(デフォルトでは前の 2 つのイメージが保持される)

コンソールアクセスのロック

コンソールへのアクセスは、常に 1 人のユーザーに限定されてきました。
以前は、最後に接続したユーザーが既存のセッションを引き継ぎました。

これはよく驚きや問題の原因になるため、コンソールアクセスはロックされるようになりました。セッションがすでにアクティブなときに接続するとエラーになります。このエラーは強制フラグでオーバーライドできます。

:

incus console remote-server:windows-2022 --force

すべての変更点

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

すべてのChangeLogを見る
  • Consume websocket pings for stderr
  • incus-simplestreams: Add prune command
  • internal/instance: Fix validation of volatile.cpu.nodes
  • shared/util: Add a function to clone maps
  • Use util.CloneMap where appropriate
  • cgo/process_utils: fix 32bit builds
  • golangci: Enable goimports
  • global: Initial goimports run
  • incusd: Fix duplicate imports
  • incusd: Fix import ordering
  • instance/config: Mark user keys as live updatable
  • doc: Update configs
  • Fix incorrect Vars file mapping in edk2 driver
  • incusd/storage/zfs: Fix deletion of unavailable pools
  • zfs: load keys for encrypted datasets during pool import
  • tests: zfs: add native zfs encryption tests
  • incusd/instance: Lock image access
  • incus/image: Make use of server-side alias handling
  • client: Fix image aliases in push mode
  • client: Fix image aliases in relay mode
  • incusd/cluster: Validate address on join too
  • incusd/network: Remove duplicated logic
  • incusd/util: Cover DNS and wildcard coverage
  • incusd/storage: Add initial.* config options for storage volume
  • incusd/storage/drivers: Add ability to set the initial owner of a custom volume
  • tests: Add test for setting initial owner of a cutom volume
  • api: Add storage_initial_owner extension
  • doc/reference: Add initial.* config keys
  • shared/cliconfig: Improve configuration loading
  • incus: Simplify configuration loading
  • incus: Add aliases completion
  • i18n: Update translation templates
  • incusd/storage/drivers/lvm: Remove metadata info from space usage calculation
  • incus/migration: Add StoragePool to VolumeTargetArgs and StorageMove to VolumeSourceArgs
  • incus/instance: Add StoragePool to MigrateArgs
  • incus/drivers: Add support for local live-migration between storage pools
  • incusd: Add support for local live-migration between storage pools
  • api: Add storage_live_migration extension
  • golangci: Add local prefixes for goimports
  • client: invalidate simple streams cache
  • incusd/instances_post: Fix cluster internal migrations
  • incusd/instances_post: Only update pool in DB if pool is expected to change
  • incusd/instances_post: Account for profiles when overriding pool in DB
  • incusd/main_forknet: Don't attach DHCP client to the container PID namespace
  • incusd/instance/lxc: Cleanup DHCP client
  • incusd/main_forknet: Tweak process title
  • incus/image: Add reuse flag
  • incus/publish: Use common helper function deleteImagesByAliases
  • i18n: Update translation templates
  • tests: Add a reuse flag test for the 'incus image import'
  • incusd/instance/qemu: Set instance path ownership on startup
  • api: instance_console_screenshot
  • incusd/instance/qmp: Add Screendump command
  • incusd/response: Allow overrriding Content-Type in FileResponse
  • incusd/instance: Add ConsoleScreenshot to VM interface
  • incusd/instance/qemu: Implement ConsoleScreenshot
  • incusd/instance_console: Add screenshot support to console API
  • doc/rest-api: Refresh swagger YAML
  • incusd/task: Fix wait group logic (more entries than running tasks)
  • incusd/instance: Add ETag function
  • incusd/instance/qemu: Fix random ordering in ETag
  • incusd/instance/lxc: Fix random ordering in ETag
  • incusd: Use new ETag instance function
  • api: image_import_alias
  • client: Set X-Incus-aliases on image imports
  • incusd/image: Allow passing alias list through X-Incus-aliases
  • doc/rest-api: Refresh swagger YAML
  • incusd/image: Fix context for alias add
  • incusd/image: Handle all alias cases
  • Makefile: Use fga for model conversion
  • incusd/auth: Introduce EntitlementCanViewSensitive
  • incusd/api_10: Use EntitlementCanViewSensitive
  • incusd/auth/openfga: Introduce server-wide read-only access
  • incusd/auth/openfga: Rebuild model
  • incusd/auth/openfga: Migrate public permissions
  • incusd/auth: Implement ApplyPatch
  • incusd/auth/fga: Change model refresh logic to rely on patches
  • incusd/patches: Add auth patch logic
  • incusd/patches: Skip patches until their assigned stage
  • doc/authorization: Remove outdated OpenFGA model description
  • tests: Tweak openfga test
  • incusd/migrate: Set CreationDate during custom volume snapshot copy with refresh
  • incusd/storage: Add CreatedAt during custom volume copy with refresh
  • tests: Update copy with refresh test
  • doc/instance/properties: Add missing instance properties
  • incusd/daemon_storage: Ensure corect symlinks for images/backups
  • incusd/storage/lvm: Handle newer LVM
  • doc/sphinx: Upgrade MyST
  • doc/manpage: Tweak manpage synopsis rendering
  • incusd/storage/lvm: Require 512-bytes physical block size for VM images
  • incus: Improve instance and remote names completion
  • incusd: Fill ExpiryDate and remove LastUsedDate in volumeSnapshotToProtobuf
  • incusd/device/tpm: Wait for swtpm to be ready
  • incus: Improve completion for file push and file pull
  • incusd/auth/tls: Restrict config access to non-admin
  • incusd/storage: Handle default disk size in GetInstanceUsage
  • incus: Improve completion for file create
  • incus: Improve completion for file delete
  • incus: Improve completion for file edit
  • incus: Improve completion for file mount
  • incus: Fix completion for profile copy
  • doc/installing: Update Fedora instructions
  • incus: Add a function to complete image fingerprints
  • incus: Add completion for image alias subcommands
  • incusd/daemon: Skip non-PKI issued trusted certificates when in PKI mode
  • incusd/cluster: Update tests for change to trustedCerts
  • tests: Validate all non-PKI certs are blocked in PKI mode
  • incus: Fix completion for image alias create
  • doc/network_forwards: Split configuration into own table
  • util: Improve readability with early return
  • incusd/db: Improve readability with eraly return
  • incus/top: Ignore CPU idle time
  • incus: Display the alias expansion when execution of an alias fails
  • i18n: Update translation templates
  • util: code structure error handling
  • incusd/db: do not shadow Go builtin function
  • lint: disallow restricted licenses in go-licenses
  • incus: Fix alias arguments handling
  • incus/file: Expand setOwnerMode
  • incus/file/push Use SFTP client instead of file API
  • incusd/instance/qemu: Set CLOEXEC for TPM sockets
  • incusd/patches: Run auth patches on all servers
  • incusd/auth/openfga: Get rid of applyPatches
  • incusd/auth/openfga: Force OpenFGA update on initial config and patching
  • incus: Clarify device override syntax
  • i18n: Update translation templates
  • incusd/auth/openfga: refresh model before applying patches
  • internal/scriptlet: Fix typo
  • incusd/scriptlet: refactor marshal
  • incusd/scriptlet: Refactor log
  • incusd/scriptlet: Add authorization scriptlet
  • incusd/auth: Refactor drivers
  • incusd/config: Add scriptlet authorization key
  • incusd/auth: Add authorization scriptlet driver
  • incusd/daemon: Handle authorization scriptlet reset
  • incusd/auth: Comment exported methods and types
  • incusd/scriptlet: Add project and instance authorization getters
  • doc: Update configs
  • api: authorization_scriptlet
  • doc/authorization: Add authorization scriptlet
  • tests: Authorization scriptlet
  • doc: add openSUSE installation instructions
  • incusd/scriptlet: Rename prefixAuthorization to nameAuthorization
  • incusd/scriptlet: Add function checks in scriptlet validation
  • client/oci: Add debug logging for subprocess commands
  • incusd/daemon_images: Fix error string typo for OCI connect errors
  • incusd/scriptlet: Add function args checks in scriptlet validation
  • incus/project: Fix get-current for default (unset) project
  • Translated using Weblate (Japanese)
  • incusd: Add support for '--force' flag
  • cmd/console: Add '--force' flag
  • shared/api: Add Force field to InstanceConsolePost
  • client: Check 'console_force' API extenstion
  • api: Add console_force extension
  • doc/rest-api: Refresh swagger YAML
  • i18n: Update translation templates
  • internal/cmd: Have RenderTable take in an io.Writer
  • incus: Update for RenderTable
  • incus-simplestreams: Update for RenderTable
  • incusd: Update for RenderTable
  • incusd: Cleanup in cmdClusterListDatabase
  • doc/reference/network_bridge: Add missing backsticks for variable escaping
  • incusd/instance/lxc: Skip instances without idmap allocation yet
  • incusd/cluster: Skip project restrictions during join
  • shared/ask: Add AskPassword/AskPasswordOnce to Asker
  • shared/ask: Fix redefinition of the built-in types
  • cmd/incus: Use AskPasswordOnce from asker
  • incusd/storage/drivers/common: Truncate/Discard ahead of sparse write
  • inucsd: Add additional check to Cancel method for ConsoleShow operation
  • incusd/instance_console: Remove redundant (and unsafe) write
  • incus/console: Make sure we leave the console in a clean state
  • incusd/instance_console: Don't fail on failure to write reset sequence
  • client: Improve SFTP performance
  • incusd/main_forkfile: Improve SFTP performance
  • incusd/network/ovn: Return ErrTooMany when getting multiple records
  • incusd/network/ovn: Clear all existing records
  • gomod: Update dependencies
  • incusd/instance_post: Expand profiles in scriptlet context

ドキュメント

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.8.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

以前のニュース