ニュース¶
Incus 6.0 LTS リリースのお知らせ¶
4th of April 2024
はじめに ¶
Incus チームが Incus 6.0 LTS のリリースをお知らせできることは、大きな誇りであり喜びです。
Incus は、最新のシステムコンテナおよび仮想マシンのマネージャーで、LXD を最初に開発したチームにより開発とメンテナンスが行われています。Apache 2.0 ライセンスのもとでリリースされており、Linux Containersプロジェクトの一部として、コミュニティ主導で運営されています。
Incus はクラウドのような環境を提供し、あらかじめ作成されたイメージからインスタンスを作成し、最大 50 台のサーバーをシームレスにクラスター化する機能を含む、さまざまな機能を提供します。
複数の異なるローカルもしくはリモートのストレージオプション、従来型もしくは完全分散ネットワークをサポートし、完全な REST API と、Ansible や Terraform/OpenTofu などの一般的なツールとの統合を含む、一般的なクラウド機能を提供します。
このリリースは Incus にとって大きなマイルストーンであり、毎月のフィーチャーリリースが適さない本番環境での使用に適した、拡張サポート付きの最初のリリースです。
このリリースが、LXC 6.0 LTS と LXCFS 6.0 LTS に加わり、今回の LTS リリースを締めくくります。
姉妹プロジェクトと同様に、Incus 6.0 LTS は 2029 年 6 月までサポートされます。
最初の 2 年間は、バグとセキュリティの修正に加えて、小規模なユーザビリティの改善が行われ、不定期のポイントリリース(6.0.x)を通して提供されます。その最初の 2 年間の後、Incus 6.0 LTS は、サポート期間の 5 年間の残りはセキュリティ修正のみのメンテナンスに移行します。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
PS: Incus は 70 名を超える個人コントリビューターの作業のおかげで可能になりました。
Incus 0.7 からの変更 ¶
コンテナのスワップに対する制限 ¶
コンテナ向けの既存の設定である limits.memory.swap
が拡張され、バイト単位でも指定できるようになりました。
今回の機能追加で、動作は次のようになります:
limits.memory.swap=true
=> コンテナはスワップ可能(デフォルト)limits.memory.swap=false
=> コンテナはスワップされるべきではない(最小限のスワップ)limits.memory.swap=256MiB
=> コンテナは(limits.memory
で設定されたメモリー制限に加えて)256MiB までのスワップスペースを使用できる
例(cgroup2 を使ったシステム):
stgraber@dakara:~$ incus launch images:debian/12 d12 -c limits.memory=1GiB Launching d12 stgraber@dakara:~$ incus exec d12 bash root@d12:~# free -m total used free shared buff/cache available Mem: 1024 21 983 0 19 1002 Swap: 0 0 0 root@d12:~# exit stgraber@dakara:~$ incus config set d12 limits.memory.swap=128MiB stgraber@dakara:~$ incus exec d12 bash root@d12:~# free -m total used free shared buff/cache available Mem: 1024 21 983 0 19 1002 Swap: 128 0 128 root@d12:~# exit
新しいシェル補完メカニズム ¶
このリリースで、手動でメンテナンスしてた bash 補完(completion)スクリプトからの移行を完了し、コマンドラインツールから直接補完スクリプトを生成できるようになりました。
補完プロファイルが次に対して利用できるようになりました:
- bash
- fish
- powershell
- zsh
プロファイルは incus completion <shell>
(例: incus completion bash
)で呼び出せます。しかしこれは通常、Incus パッケージのビルドプロセスの一部としてパッケージャーによって行われます。
外部ブリッジインターフェースの作成 ¶
外部インターフェース向けの管理ネットワークブリッジの設定構文である bridge.external_interfaces
が拡張され、VLAN インターフェースの作成と接続ができるようになりました。
stgraber@dakara:~$ incus network set incusbr0 bridge.external_interfaces=vlan60/enp35s0/60 stgraber@dakara:~$ ip link show dev vlan60 269: vlan60@enp35s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue master incusbr0 state LOWERLAYERDOWN mode DEFAULT group default qlen 1000 link/ether 00:23:a4:01:01:6f brd ff:ff:ff:ff:ff:ff stgraber@dakara:~$ incus network unset incusbr0 bridge.external_interfaces stgraber@dakara:~$ ip link show dev vlan60 Device "vlan60" does not exist. stgraber@dakara:~$
リモートストレージからのディスクがアタッチされたVMのライブマイグレーション ¶
改善を続ける VM のライブマイグレーションサポートの拡張として、"remote" のストレージプール(ceph
もしくは lvmcluster
)から追加ディスクがアタッチされた仮想マシンが、仮想マシンと一緒にライブマイグレーションされるようになりました。
これを行うためのユーザーアクションは不要です。以前は、マニュアルによる incus move --target
やクラスター退避によるライブマイグレーションを拒絶していた仮想マシンが、別のサーバーに適切にライブマイグレーションされるのがわかります。
incus info --resources
中のシステム情報 ¶
incus info --resources
の出力に、新たに System
セクションが追加されました。
stgraber@dakara:~$ incus info --resources System: UUID: 88eecd60-34fc-9f97-48f5-fc34979f48f6 Vendor: ASUS Product: System Product Name Family: To be filled by O.E.M. Version: System Version SKU: SKU Serial: System Serial Number Type: physical Chassis: Vendor: Default string Type: Desktop Version: Default string Serial: Default string Motherboard: Vendor: ASUSTeK COMPUTER INC. Product: ProArt B550-CREATOR Serial: 210382121300122 Version: Rev X.0x Firmware: Vendor: American Megatrends Inc. Version: 2803 Date: 04/28/2022 [snip...]
この情報にアクセスできることは、incus info --resources
を --target
引数とともに使い、特定のサーバーについて問い合わせたり、すべてのファームウェアが最新であることを確認したり、どのマシンを扱っているかをチェックしたりというように、クラスター環境で特に役に立ちます。
この機能は University of Texas at Austin の学生によるコントリビューションです。
incus info --resources
中の USB デバイス ¶
incus info --resources
の出力に、新たに USB devices
セクションが追加されました。
stgraber@dakara:~$ incus info --resources [snip...] USB devices: Device 0: Vendor: Intel Corp. Vendor ID: 8087 Product: AX200 Bluetooth Product ID: 0029 Bus Address: 1 Device Address: 6 Device 1: Vendor: Corsair Vendor ID: 1b1c Product: H150iRGBPROXT Product ID: 0c22 Bus Address: 1 Device Address: 5 Device 2: Vendor: ASUSTek Computer, Inc. Vendor ID: 0b05 Product: AURA LED Controller Product ID: 19af Bus Address: 1 Device Address: 2 Device 3: Vendor: Realtek Semiconductor Corp. Vendor ID: 0bda Product: TX42C500 Product ID: 4933 Bus Address: 5 Device Address: 2 Device 4: Vendor: Blue Microphones Vendor ID: b58e Product: Yeti Stereo Microphone Product ID: 9e84 Bus Address: 5 Device Address: 15 Device 5: Vendor: Yubico.com Vendor ID: 1050 Product: YubiKey FIDO+CCID Product ID: 0406 Bus Address: 5 Device Address: 29 Device 6: Vendor: Logitech, Inc. Vendor ID: 046d Product: HD Pro Webcam C920 Product ID: 082d Bus Address: 5 Device Address: 17 Device 7: Vendor: Powerware Corp. Vendor ID: 0592 Product: Powerware UPS Product ID: 0002 Bus Address: 7 Device Address: 2
この情報は、USB デバイスをコンテナや仮想マシンに追加する場合に非常に役に立ちます。
この機能は University of Texas at Austin の学生によるコントリビューションです。
LXD 5.0 LTS からの変更点 ¶
LXD 5.0 LTS リリースからのユーザー向けに、削除された機能と、その後の LXD 機能リリースと Incus で追加された機能についての簡単なリストを示します。
削除された機能 ¶
Ubunttu や Canonical 固有の多数の機能が、Incus プロジェクト設立の一環として削除されました。
Incus 0.1 リリースのお知らせ に、削除された機能の全リストがあります。
ハイライト:
- VFS idmap shifting 機能を使うようにして、(同じ機能である)
shiftfs
を削除しました - OpenID Connect を使うようにして、
Canonical Candid
を削除しました - OpenFGA を使うようにして、
Canonical RBAC
認証を削除しました Canonical MAAS
機能を削除しました(使用されていない機能)- OVN を使うようにして、
Ubuntu Fan
を削除しました - セキュリティ上の理由から、信頼トークンを使用するようにし、
core.trust_password
は削除しました
追加された機能 ¶
次は、LXD 5.0 LTS のリリース以来 2 年間で導入した多数の新機能から、いくつかハイライトを紹介します。
- API
- プロジェクトをまたがったオブジェクトをリストする機能(CLI の
?all-projects=true
や--all-projects
) - JWT 認証 (TLS証明書から取得)
- プロジェクトをまたがったオブジェクトをリストする機能(CLI の
- インスタンス
- 配置スクリプトレット
- インスタンスのリビルド
- インスタンス状態
READY
- NUMA 対応のインスタンス配置 (
limits.cpu.nodes
) - (コンテナ)
sysinfo
システムコールのインターセプション (security.syscalls.intercept.sysinfo
) - (VM)CPU ホットプラグサポート(
limits.cpu
) - (VM)「オンライン」ライブマイグレーションのサポート
- (VM)AMD SEV のサポート (
security.sev
) - (VM)レガシー BIOS サポート (
security.csm
) - (VM)ディスクにあるディレクトリーのホットプラグ機能
- (VM)I/O バスオプションの NVME と VirtIO
- インテグレーション
- ネットワーク
- ネットワークインテグレーション (OVN)
- IPAM データエクスポート API
- オフロードされた OVN ネットワークの VDPA
- ストレージ
- クラスター LVM ストレージドライバー
- ストレージバケット (S3 API)
- ISO イメージカスタムボリューム
- ZFS 委任管理(delegation)
- ZFS ブロックモード
すべての変更点 ¶
Incus 0.7 からのすべての変更のリストは次のとおりです(翻訳なし):
すべてのChangeLogを見る
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- incus/image: Fix column handling with --all-projects
- Replace util.ValueInSlice with slices.Contains
- shared/util: Delete ValueInSlice function
- incus/image: Fix column handling with --all-projects
- incusd/instance/qemu: Relocate image requirement checks
- doc/images: Add requirements.cdrom_agent
- incusd/instance/qemu: Add support for requirements.cdrom_agent
- incusd/device/disk: Fix incorrect block volume usage
- Translated using Weblate (Japanese)
- incusd/network/ovn: Use ParseIPToNet instead of manual IPToNet and net.ParseIP
- incusd/network/ovn: Use listenAddressNet in family check
- incusd/instance/drivers: Disable architecture check on incus cp with snapshots
- Translated using Weblate (French)
- incusd/network/bridge: Set local address on all VXLAN tunnels
- incus/instance/qemu: Fix RecordOutput
- incus: add completions for instance actions and snapshots
- incus: add completions for profiles
- incusd/network/ovn: Introduce get helper
- incusd/network/ovn: Add some missing indices
- incusd/network/ovn: Use get helper
- incusd/network/ovn: Fix LogicalSwitchPortIPs logic
- incusd/network/bridge: Fix gofmt
- incusd/network/ovn: Fix gofmt
- cmd/incus: Use proper timestamp check
- cmd/incus: Use consistent date format and timezone
- client: Rename network_peer for consistency
- cmd/incusd: Rename network_peer to network_peers
- shared/api: Rename network_allocation for consistency
- incusd/db: Fix comment typoes
- incusd/db/generate: Fix bad camel case handling
- incusd/db/network_peers: Fix duplicate type definitions
- incusd/auth: Drop Permission type
- incusd/auth: Add boilerplate doc strings
- incusd/images: Properly handle null creation and expiry dates
- incus: add completions for remotes
- incus: add completions for projects
- incusd/images: Fix reporting of images in multiple projects
- github: Add static build of lxd-to-incus
- lxd-to-incus: Add support for Alpine service name
- lxd-to-incus: Re-organize target list
- lxd-to-incus: Add support for APK
- Makefile: Add OVN IC to update-ovsdb
- incusd/network: Update OVS/OVN schemas
- incusd/network/ovn: Add IC clients
- incusd/network/ovn: Add GetName to NB client
- incusd/network/ovn: Add GetGateways to ICSB
- incusd/network/ovn: Introduce new errors
- incusd/network/ovn: Add CreateTransitSwitch and DeleteTransitSwitch to ICNB
- incusd/device/gpu_sriov: Add locking
- incusd/device/gpu_sriov: Re-locate vfio-pci loading
- incusd/device/gpu_sriov: Rework VF allocation logic
- incus/remote: Add a generate-certificate sub-command
- i18n: Update translation templates
- incusd/drivers/qmp: Add SetBlockThrottle
- incusd/device/disk/config: Add DiskLimits
- incusd/device/disk: Re-shuffle limit parsing
- incusd/device/disk: Add disk limits on VMs
- incusd/device/disk: Support live limits update for VMs
- incusd/instance/qemu: Support disk I/O limits
- incus/remote: Add missing docstrings
- incusd/certificates: Improve token handling when clustered
- cmd/incusd/api_1.0: Update context
- cmd/incusd/api_cluster: Update context
- cmd/incusd/api_internal: Update context
- cmd/incusd/daemon: Update context
- cmd/incusd/api_project: Update context
- cmd/incusd/certificates: Update context
- cmd/incusd/images: Update context
- cmd/incusd/instance: Update context
- cmd/incusd/network: Update context
- cmd/incusd/operations: Update context
- cmd/incusd/profiles: Update context
- cmd/incusd/storage: Update context
- cmd/incusd/warnings: Update context
- incusd/devices: Skip isolated threads from NUMA CPUs
- incusd/devices: Restrict CPU threads by NUMA node
- incusd/instance/qemu: Add support for limits.cpu.nodes
- incusd/device/gpu: Add support for limits.cpu.nodes for VF selection
- incusd: Fix import shadowing
- incusd/images: Fix potential race condition
- incusd/instance/qemu: Add support for NUMA node restrictions for memory
- incusd/apparmor/qemu: Silence apparmor failures
- incusd/network/ovs: Introduce new errors
- incusd/network/ovn/nb: Move SetChassisGroupPriority to new function signature
- incusd/network/ovn/sb: Move GetLogicalRouterPortActiveChassisHostname to new function signature
- incusd/network/ovs: Move GetBridge to new function signature
- incusd/network/ovs: Move CreateBridge to new function signature
- incusd/network/ovs: Move DeleteBridge to new function signature
- incusd/network/ovs: Move CreateBridgePort to new function signature
- incusd/network/ovs: Move GetChassisID to new function signature
- incusd/network/ovs: Move GetOVNBridgeMappings to new function signature
- incusd/network: Update for function changes
- incusd/device/nic: Update for function changes
- incusd: Update for function changes
- doc: Fix bad snapshot syntax
- Translated using Weblate (French)
- doc: Fix token creation procedure
- incusd/network/ovn/nb: Add GetLogicalSwitch
- incusd/network/ovn/nb: Replace ChassisGroupChassisDelete with SetChassisGroupPriority
- incusd/network/ovn/nb: Port CreateLogicalRouterPort to OVSDB
- incusd/network/ovn/nb: Replace LogicalRouterPortLinkChassisGroup with CreateLogicalRouterPort
- incusd/network/ovn/nb: Port CreateChassisGroup to OVSDB
- incusd/network/ovn/nb: Port CreateLogicalSwitch to OVSDB
- incusd/network/ovn: Update for function changes
- incusd/network/ovn: Remove state references
- incusd/state: Add OVNNB and OVNSB handles
- incusd: Update to use state for OVN
- incusd/device: Make init function return error
- incusd/device: Add OVN check on nicOVN
- client: Still return response on RawQuery error
- incus/query: Respect --raw for errors
- incusd/network/acl: Add OVN check
- incusd/network: Make init function return error
- incusd/network: Add OVN check on ovn driver
- incusd/api: Re-order config checks
- incusd: Add OVN loader
- Translated using Weblate (French)
- incusd/network/ovn/nb: Port CreateLogicalSwitchPort to OVSDB
- incusd/network/ovn/nb: Port DeleteLogicalSwitchPort to OVSDB
- incusd/network/ovn/nb: Port DeleteLogicalRouterPort to OVSDB
- incusd/network/ovn: Update for function changes
- incusd/network/ovs: Port GetOVNSouthboundDBRemoteAddress to OVSDB
- incusd/network/ovs: Port DeleteBridgePort to OVSDB
- incusd/network/ovs: Port GetInterfaceAssociatedOVNSwitchPort to OVSDB
- incusd/network/ovs: Align GetChassisID with other functions
- incusd: Update for OVS function changes
- incusd/network/ovn/icsb: Fix bad DB schema
- incusd/network/ovn/nb: Introduce GetLogicalRouterPort
- incusd/network/ovn/nb: Extend OVNSwitchPortOpts to handle router ports
- incusd/network/ovn/nb: Change type of RouterPort field to OVNRouterPort
- incusd/network/ovn/nb: Port DeleteChassisGroup to OVSDB
- incusd/network/ovn/icnb: Update DeleteTransitSwitch to handle missing switches
- incusd/network/ovn: Update for function changes
- Translated using Weblate (French)
- incus/completion: do not add a space after remote names completion
- incusd/device/disk: Disable virtiofsd caching
- incus-agent: Cleanup mount logic
- Translated using Weblate (French)
- incus: expose parseVolume to entire package
- incus: add completions for storage pools and volumes
- incusd/device/gpu_sriov: Fix default handling
- doc/packaging: Add mention of documentation
- incusd/auth: Fix --all-projects for restricted users
- doc: Add third party tools page
- gomod: Update dependencies
- incusd/auth/tls: Prevent project modifications
- doc: Update wordlist
- internal/usbid: allow path override of usb.ids path
- incus/completion: fix image names completion
- doc/environment: document INCUS_USBIDS_PATH
- incusd/instance/qemu/agent: Check for semanage
- incusd/project: Fix config name in ImageProjectFromRecord
- incus/restart: Fix long description
- i18n: Update translations
- lxd-to-incus: Handle common existing bridges
- shared/simplestreams: Remove defaultOS
- shared/simplestreams: Add NewLocalClient
- incus-simplestreams: Introduce new command
- incus-simplestreams: Simplify delete logic
- doc: Re-organize image server doc
- doc: Add section for incus-simplestreams
- incusd/seccomp: Add support for pidfd threads
- incus: add completions for clusters
- incus: add completions for cluster groups
- incus: add completions for cluster roles
- incus: add completions for config devices
- incus: add completions for config templates
- update translations
- doc: Update references to mage docs
- doc/backup: Remove bad reference
- incus: add completions for network acls
- shared/api: Add new structs to support configuration metadata
- client: Add GetMetadataConfiguration
- incusd: Rename documentation.go -> metadata.go
- doc/rest-api: Refresh swagger YAML
- shared/api/metadata: Add GetKeys to simplify usage
- incusd: Add support for JWT authentication
- gomod: Update dependencies
- tests: Add tls2jwt tool
- tests: Add JWT authentication test
- api: auth_tls_jwt
- doc/authentication: Add section on JWT
- doc/instances: Remove size.state requirement for live migration
- incusd/instance/qemu: Allow live migration without size.state
- shared/idmap: Support uid/gid in subuid/subgid
- shared/cliconfig: Copy clientcerts on remote copy
- shared/cliconfig: Add HasRemoteClientCertificate
- shared/cliconfig: Support per-remote client certificates
- doc: Add clientcerts
- incusd/cluster/config: Add oidc.claim
- incusd/auth/oidc: Add support for using a specific claim as username
- incusd: Pass OIDC claim to verifier
- api: oidc_claim
- doc: Update configs
- doc/howto/instances: Mention extra resources in ISO guidea
- doc/installing: Add Debian backport
- doc: Add backported to dictionary
- lxd-to-incus: Add support for LXD 5.21
- shared/cliconfig: Ensure client certificate key is 0600
- api: device_usb_serial
- doc: Add busnum, devnum and serial to USB devices
- shared/api: Add Serial to ResourcesUSBDevice
- incusd/resources: Add USB Serial
- incusd/devices/usb: Add serial, busnum and devnum options
- doc/rest-api: Refresh swagger YAML
- incusd/instance/qemu: Fix handling of > 64 limits.cpu
- incusd/device/gpu_sriov: Implement NUMA fallback
- incus: add completions for network forwards
- incus: add completions for network load balancers
- shared/validate: Remove stringInSlice
- shared/validate: Add And and Or functions
- shared/util: Move ParseUint32Range
- incusd/project: Update for ParseUint32Range
- doc/instance_options: Remove mention of limits.cpu.nodes from container-only section
- incusd/devices: Better handle bad config
- api: numa_cpu_balanced
- internal/instance: Add support for balanced NUMA nodes
- doc: Update configs
- incusd/instance/common: Add NUMA balancing
- incusd/instance/lxc: Add support for balanced NUMA allocation
- incusd/instance/qemu: Add support for balanced NUMA allocation
- incusd/devices: Add support for balanced NUMA allocation
- incusd/device/gpu_sriov: Simplify NUMA logic
- doc/cloud-init: Don't mention non-existing remotes
- doc/howto/images_remote: Fix wording around image servers
- doc/benchmark: Fix install command
- incusd/instance/common: Fix CanMigrate mutating devices
- incusd/instance/qemu: Reduce agent queries
- incusd/metrics: Don't filter out all server metrics
- incusd/auth/tls: Include project restrictions for metrics certificates
- incusd/auth/tls: Return project-aware checker for metrics
- incusd/metrics: Use project-specific checker if no global access
- internal/server/instance/lxd: add support for image.requirments.nesting
- api: add image_restriction_nesting
- doc/images: introduce requirements.nesting
- Show the count values in snapshot count mismatch error
- incus/admin/init: Use btrfs subvol in --auto
- incus-migrate: Clarify that disk image files must be raw
- incusd/network/ovn/icnb: Fix comment
- incusd/project: Re-format the comments
- incusd/project: Fix bad default value
- doc: Update configs
- incus/migrate: Add CSM support
- incusd/storage/backend: Better handle name conflicts
- incus-migrate: Support using the local server
- api: network_integrations
- shared/api: Add type and target_integration fields to NetworkPeersPost
- incusd/db/cluster: Add networks_integrations
- incusd/db/cluster: Re-generate schema
- incusd/db/cluster: Add generated DB code for network integrations
- incusd/db: Update network peer DB query functions
- client: Add check for network_integrations in CreateNetworkPeer
- incus/network/peer: Add support for network peer types
- shared/api: Add network integrations
- client: Add network integration functions
- incus/network: Introduce support for integrations
- incusd/auth: Add network integration functions
- shared/api: Add lifecycle events for network integrations
- incusd/lifecycle: Add network integration events
- incusd: Add network integration API
- incusd/db: Add GetNetworkPeersURLByIntegration
- incusd/network_integration: Add UsedBy field
- incusd/network_integrations: Add validator
- incusd/network/ovn: Add support for peering with OVN IC
- incusd/project: Add restricted.networks.integrations
- incusd/project: Add NetworkIntegrationAllowed
- incusd/network/integrations: Respect project restrictions
- incusd/network/ovn: Add support for integration restrictions
- incusd/auth/openfga: Update the model
- incusd/auth/openfga: Update the generated model
- incusd/auth/openfga: Handle model updates
- incusd: Remove openfga.store.model_id
- incusd/db/cluster: Remove openfga.store.model_id
- doc/ovn_peers: Add remote peering
- doc: Add documentation for network integrations
- doc/rest-api: Refresh swagger YAML
- i18n: Update translation templates
- doc: Update configs
- gomod: Update dependencies
ドキュメント ¶
Incus のドキュメントはこちらです:
https://incus-ja.readthedocs.io/ja/latest/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/ (原文)
インストール ¶
Incus の開発元は、通常リリースの tarball のみをリリースするため、公式の Incus パッケージはありません。Incus を実行するために使えるオプションを以下にいくつか示します。
Linux パッケージ ¶
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.0.0
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
LXD からの移行 ¶
マイグレーションツールである lxd-to-incus
を使って、LXD から Incus への移行が適切に行えます。
このツールは 4.0 LTS からバグフィックスリリースである LXD 5.21 までのバージョンでテストされています。
このツールで、LXD から Incus への非常に速いマイグレーションが可能になり、潜在的なコンフリクトを事前に自動的にチェックします。
詳細はこちらでご覧いただけます:
https://incus-ja.readthedocs.io/ja/latest/howto/server_migrate_lxd/ (日本語訳)
https://linuxcontainers.org/incus/docs/main/howto/server_migrate_lxd/) (原文)
サポート ¶
Incus 6.0 LTS はトータルで 5 年間(2029 年 6 月)までサポートされます。
最初の 2 年間は、バグとセキュリティ修正、細かな使い勝手の改良を含む新しいポイントリリースが発行されます。最初の 2 年間のあと(Incus 7.0 LTS がリリースされたあと)、Incus 6.0 LTS は、残りの 3 年間はセキュリティ修正のみの提供に移行します。
これは、これまで 10 年間にわたって、我々の他のプロジェクトである LXC や LXCFS で行ってきたことと同じです。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 0.7 リリースのお知らせ¶
26th of March 2024
はじめに ¶
Incus チームは、Incus 0.7 のリリースのアナウンスができてうれしいです!
このリリースは、来週を予定している Incus 6.0 LTS のリリース前の最後のリリースです。リリースが進むにつれ、非常に忙しくなっています。LTS リリース前には、LTS に含める新機能の量を最小限にしようとしており、このような形にするのが我々が望む形です。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能 ¶
ネットワークインテグレーション ¶
新しいトップレベルのコンセプトである、ネットワークインテグレーションは、デプロイした Incus を、自身が管理するところの外のネットワークに接続する方法です。
現時点では、このコンセプトの唯一の実装が OVN インターコネクション です。これにより、Incus クラスターが、他の Incus クラスターが実行されている同等のネットワークや、OpenStack や Kubernetes のような他の OVN ユーザーと直接ピアリングできるようになります。
OVN インターコネクションゲートウェイを使用して、新しいネットワークインテグレーションを作成し、それを通して既存のネットワークをピアリングしている例を次に示します。
root@az01-server01:~# incus network integration create ovn-region ovn Network integration ovn-region created root@az01-server01:~# incus network integration set ovn-region ovn.northbound_connection tcp:[10.50.1.12]:6645,tcp:[10.50.2.13]:6645,tcp:[10.50.3.19]:6645 root@az01-server01:~# incus network integration set ovn-region ovn.southbound_connection tcp:[10.50.1.12]:6646,tcp:[10.50.2.13]:6646,tcp:[10.50.3.19]:6646 root@az01-server01:~# incus network peer create default region ovn-region --type=remote Network peer region created
ドキュメント: https://linuxcontainers.org/incus/docs/main/howto/network_integrations/
イメージサーバー管理ツール ¶
Incus イメージサーバーを実行する一般的な方法は、内部サーバーとして実行する場合でも、一般的に利用可能な公開サーバーとして実行する場合でも、simplestreams
を使って Incus イメージを提供する Web サーバーを通して実行することです。
これを簡単にセットアップできるように、新しいツールである incus-simplestreams
を導入しました。これは、シンプルなイメージサーバーを簡単に管理でき、利用可能なイメージの一覧表示、イメージの追加や削除、必要なメタデータファイルの生成ができます。
stgraber@dakara:~$ mkdir image-server stgraber@dakara:~$ cd image-server/ stgraber@dakara:~/image-server$ incus-simplestreams generate-metadata ~/Downloads/incus.tar.xz Operating system name: Red Hat Enterprise Linux Release name: 9 Variant name [default="default"]: Architecture name: x86_64 Description [default="Red Hat Enterprise Linux 9 (default) (x86_64) (202403260239)"]:· stgraber@dakara:~/image-server$ incus-simplestreams add ~/Downloads/incus.tar.xz ~/Downloads/rhel9.qcow2· stgraber@dakara:~/image-server$ incus-simplestreams list +------------------------------------------------------------------+--------------------------------------------------+--------------------------+---------+---------+--------------+-----------------+----------------------+ | FINGERPRINT | DESCRIPTION | OS | RELEASE | VARIANT | ARCHITECTURE | TYPE | CREATED | +------------------------------------------------------------------+--------------------------------------------------+--------------------------+---------+---------+--------------+-----------------+----------------------+ | 7d256e4fac6fc63fb47bc1e07e1c6ee234281cdf1ed21788c920d763b7bd93ba | Red Hat Enterprise Linux 9 x86_64 (202403252239) | Red Hat Enterprise Linux | 9 | default | x86_64 | virtual-machine | 2024/03/25 00:00 UTC | +------------------------------------------------------------------+--------------------------------------------------+--------------------------+---------+---------+--------------+-----------------+----------------------+ stgraber@dakara:~/image-server$ find . | sort . ./images ./images/ef6cf538776b05a64c789f16f235a757522724f2c490c7e118645be2eb920d30.incus.tar.xz ./images/ef6cf538776b05a64c789f16f235a757522724f2c490c7e118645be2eb920d30.qcow2 ./streams ./streams/v1 ./streams/v1/images.json ./streams/v1/index.json
HTTPS 対応の Web サーバーに置き、次のように追加します。
incus remote add my-server https://xyz.example.net --protocol=simplestreams
JSON Web トークン認証 ¶
Incus は基本的にリモート認証のために 2 つのメカニズムをサポートしています。
- TLS クライアント証明書(制限あり、もしくはなしでローカルのトラストストアに追加)
- OpenID コネクト外部認証(認可に OpeFGA を使用、もしくは使用しない)
前者は、リモートの Incus サーバーとシンプルに通信するのにもっとも一般的な方法です。
Incus の CLI ツールとサードパーティのツールは、TLS 鍵ペアを使って HTTPS 接続を確立し、その方法で認証を得ることに問題はありません。
しかし、Incus がリバース HTTP(S) プロキシーの背後で動くような場合など、TLS クライアント証明書が少し問題になる状況があります。
これに対応するため、HTTP の Authorization
フィールドを使った JSON Web Token (JWT) bearer トークンのサポートをするようになりました。有効な TLS クライアント証明書を持つユーザーは、Subject フィールドを証明書フィンガープリントに設定し、適切な NotBefore/NotAfter 値を設定し、秘密鍵で JWT に署名することで、このトークンを生成できます。
Incus はそのような接続を TLS クライアント証明書を使っているのと同等に扱います。
stgraber@dakara:~$ openssl req -x509 -newkey rsa:4096 -sha384 -keyout client.key -nodes -out client.crt -days 1 -subj "/CN=test.local" .+.........+...+...+..+....+......+........+.+.....+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+.+......+...+......+......+..+...+...+...............+.......+...+......+...+.....+......+....+......+..+...+......+....+............+.....+....+.....+.+............+..+.........+......+....+......+...........+....+........+...+...+.+...+..+..........+.....+...+......+............+...+.......+........+....+.....+.+..+.......+......+..+....+........+..........+...+..+.+.....+.+......+..+.......+.....+.+..+..........+..+....+..............+.+..+...........................+...+....+......+...+..............+.+..+....+.....+.+.........+...+..+....+..+.............+.........+.....+...+..........+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+...+...+..+...+.........+.+...+............+..+............+.+.......................................+.....+...+......+.........+......+.+.....+...+.+...........+......+.......+.....+.......+......+.....+..........+...+..+.........+....+.........+...........+......+.+..................+..+....+...........+.............+.....+....+..+......+............+..........+......+......+......+..+.............+.....+...+.+........+............+....+.................+.........+......+.......+...+.........+.....+....+......+........+.+..+....+......+........+....+...+.................+.+..+.........+....+............+.....+.........+....+.....+.......+.....+...............+..............................+....+........+.......+...........+.......+.....+......+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...+...............+.+...+...+...+.........+..+.+...+..+.......+.....+.+..+...+...................+...........+......+....+..+............+...+.......+..+.........+....+...+.........+.....+...+...+....+...........+...+.+.........+.....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+......+..+...+......+.+..+.............+..+.......+........+...+...+....+...............+..+....+..+....+...+.....+.+.....+..........+.....+.+.....+....+............+.........+...+.....+......+......+.............+..+.+..+.......+...+........+...+.......+.........+......+..+.+......+...........+...+.........+...+...+....+..+.........+....+.....+.+......+.........+..+..........+..+...+...+....+..+...+.+.....+......+.+...+......+.....+.+.....+.......+........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*........+..+.......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ----- stgraber@dakara:~$ incus config trust add-certificate client.crt --restricted --projects demo stgraber@dakara:~$ tls2jwt client.key client.crt now 120 eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2MzI3Y2Q5YmIxYTFmN2ExMWM3ODBkZjc4YjVkNjg5YzhkMGQ5YzcwZGQxOGQ1YTMyYzI1M2ZiODA0N2U2M2E0IiwiZXhwIjoxNzExNDcyMjE2LCJuYmYiOjE3MTE0NzIwOTYsImlhdCI6MTcxMTQ3MjA5Nn0.pNQ4AcgoymxWHROXVjcYX8QMKdf9QgRH3zex7qc16avX7_Ax1q_WFWzQWfP48Fh-ooeh9hBQKCQkZxjVxYx8Sy-cNqmkf1AI9KGh5uemHh3FYAbvebCTaIXan0B6glWHVnDSwLZKBWTDDai2VXOmUfntyV9yPJdTqxt1J0j8PNuIWzNVdFlcTxzpggcJMhbcqtf4GRwSMKx69HU5sP4AQ7GJ2cBvN7Im-nkRXTc7xiyYnIsFx0vIWJzojC4zwg0-C1LHKQD4DyEKhqOVISIKUSa3GhD6ajcDuGDS8af4Iz19sNPsSoSULBUG-a7E5lXx2vk802vOFFWV68ZHugsJHpdSpLFwTVixipQ1-QdKRozlMjNPguu-5CYxhZVR1p32lbN9D879xGbFXUgPJVwK25NILvbEMcrqnGPgKcRUjJlHtVljGOgXrjmG7dMiW5QOsyy1eIvJ1D1sNsG02fDTbchTzXHmIybxQTK0FXCyNDLOAl6xgW0Jundg7AN1uJU2cLEWy1x3TusqC7lyeTeF3WYT-G8xE2CU4GpLBeYWyLwuJgxRkaWcg9IXiivguPbWpcT0RMl1bmpn0TJ2VgEPCuSG0mJxMBp8HbAgxwgar8AHdpoZ43dCCwZnB0a0O_kmGkBE2xGKKvgTx_U6eSixZzyyNmHDC1KH1Vy1WW1ZcF0stgraber@dakara:~$· stgraber@dakara:~$ curl -s -k -H 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI2MzI3Y2Q5YmIxYTFmN2ExMWM3ODBkZjc4YjVkNjg5YzhkMGQ5YzcwZGQxOGQ1YTMyYzI1M2ZiODA0N2U2M2E0IiwiZXhwIjoxNzExNDcyMjE2LCJuYmYiOjE3MTE0NzIwOTYsImlhdCI6MTcxMTQ3MjA5Nn0.pNQ4AcgoymxWHROXVjcYX8QMKdf9QgRH3zex7qc16avX7_Ax1q_WFWzQWfP48Fh-ooeh9hBQKCQkZxjVxYx8Sy-cNqmkf1AI9KGh5uemHh3FYAbvebCTaIXan0B6glWHVnDSwLZKBWTDDai2VXOmUfntyV9yPJdTqxt1J0j8PNuIWzNVdFlcTxzpggcJMhbcqtf4GRwSMKx69HU5sP4AQ7GJ2cBvN7Im-nkRXTc7xiyYnIsFx0vIWJzojC4zwg0-C1LHKQD4DyEKhqOVISIKUSa3GhD6ajcDuGDS8af4Iz19sNPsSoSULBUG-a7E5lXx2vk802vOFFWV68ZHugsJHpdSpLFwTVixipQ1-QdKRozlMjNPguu-5CYxhZVR1p32lbN9D879xGbFXUgPJVwK25NILvbEMcrqnGPgKcRUjJlHtVljGOgXrjmG7dMiW5QOsyy1eIvJ1D1sNsG02fDTbchTzXHmIybxQTK0FXCyNDLOAl6xgW0Jundg7AN1uJU2cLEWy1x3TusqC7lyeTeF3WYT-G8xE2CU4GpLBeYWyLwuJgxRkaWcg9IXiivguPbWpcT0RMl1bmpn0TJ2VgEPCuSG0mJxMBp8HbAgxwgar8AHdpoZ43dCCwZnB0a0O_kmGkBE2xGKKvgTx_U6eSixZzyyNmHDC1KH1Vy1WW1ZcF0' https://localhost:8443/1.0/projects | jq { "type": "sync", "status": "Success", "status_code": 200, "operation": "", "error_code": 0, "error": "", "metadata": [ "/1.0/projects/demo" ] }
設定可能な OIDC ユーザー名フィールド ¶
OpenID コネクトを使っている方は、ユーザーの識別子として利用可能な場合、Incus が e-mail
クレームを使うことに気づいたかもしれません。見つからない場合、Subject に依存します。
異なるデプロイで OIDC クレームを通して異なる情報が利用可能になる可能性があるため、oidc.claim
をクレームに設定し、ユーザー識別子として使えるようになりました。
stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name stgraber@stgraber.org stgraber@dakara:~$ incus config set oidc.claim=name stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name Stéphane Graber stgraber@dakara:~$ incus config set oidc.claim=sub stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name 99cb8caa-3640-45b9-b87a-55266366aaf3 stgraber@dakara:~$ incus config set oidc.claim=email stgraber@dakara:~$ incus query s-dakara:/1.0 | jq -r .auth_user_name stgraber@stgraber.org
NUMA ハンドリングの改良 ¶
このリリースでは、大規模システムでのコンテナと仮想マシン両方のパフォーマンスを改善するためにかなりの時間を費やしました。これには明らかにマルチソケットシステムが含まれます。それだけでなく、各 CPU が複数の NUMA ノードとして公開される、NPS4 や同様のモードで動作する AMD システムも含まれます。
一般的に、私たちの目標は、CPU とメモリを適切に固定し、NUMA ノードに最も近い PCIe リソースを選択しながら、NUMA ノード間でワークロードを簡単に分散できるようにすることです。
その一環として、いくつかのことを行いました:
limits.cpu.nodes
が仮想マシンでもサポートされるようになりました- 新たに
limits.cpu.nodes
の設定値としてbalanced
を追加しました。これにより Incus は、そのノードを使うように設定されたインスタンスがもっとも少ない NUMA ノードを使います - SR-IOV CPU の選択で、選択ロジックの一部として NUMA ノードも考慮されるようになりました。一致するものが見つからない場合、同じ CPU ソケットに接続されている PCIe デバイスが優先されます
例 :
stgraber@gputest:~$ incus list stgraber-gpu -cns4,limits.cpu.nodes,volatile.cpu.nodes,volatile.gpu.last_state.pci.parent,volatile.gpu.last_state.vf.id +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | NAME | STATE | IPV4 | LIMITS CPU NODES | VOLATILE CPU NODES | VOLATILE GPU LAST STATE PCI PARENT | VOLATILE GPU LAST STATE VF ID | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu01 | RUNNING | 10.232.44.8 (enp5s0) | balanced | 0 | 0000:63:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu02 | RUNNING | 10.232.44.9 (enp5s0) | balanced | 2 | 0000:03:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu03 | RUNNING | 10.232.44.10 (enp5s0) | balanced | 4 | 0000:e3:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu04 | RUNNING | 10.232.44.11 (enp5s0) | balanced | 5 | 0000:c3:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu05 | RUNNING | 10.232.44.12 (enp5s0) | balanced | 6 | 0000:c3:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu06 | RUNNING | 10.232.44.13 (enp5s0) | balanced | 7 | 0000:83:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu07 | RUNNING | 10.232.44.15 (enp5s0) | balanced | 1 | 0000:43:00.0 | 3 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu08 | RUNNING | 10.232.44.16 (enp5s0) | balanced | 2 | 0000:03:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu09 | RUNNING | 10.232.44.17 (enp5s0) | balanced | 3 | 0000:03:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu10 | RUNNING | 10.232.44.18 (enp5s0) | balanced | 4 | 0000:e3:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu11 | RUNNING | 10.232.44.19 (enp5s0) | balanced | 5 | 0000:c3:00.0 | 0 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu12 | RUNNING | 10.232.44.20 (enp5s0) | balanced | 6 | 0000:83:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu13 | RUNNING | 10.232.44.21 (enp5s0) | balanced | 7 | 0000:83:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu14 | RUNNING | 10.232.44.22 (enp5s0) | balanced | 1 | 0000:43:00.0 | 1 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu15 | RUNNING | 10.232.44.23 (enp5s0) | balanced | 2 | 0000:43:00.0 | 2 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+ | stgraber-gpu16 | RUNNING | 10.232.44.24 (enp5s0) | balanced | 3 | 0000:03:00.0 | 3 | +----------------+---------+-----------------------+------------------+--------------------+------------------------------------+-------------------------------+
この場合、それぞれ NUMA ノードの新しい balanced
オプションを使用し、8 つの NUMA ノード(2 ソケット AMD NPS4)にわたってスケジュールされ、一致するように GPU が選択されていることがわかります。
USB デバイスを選択するための追加の方法 ¶
コンテナと仮想マシンの両方向けの USB デバイスパススルーには、vendorid
と productid
フィールドが使われてきました。これは、いずれか 1 つのタイプの USB デバイスが 1 つだけシステムに接続されている限りは、正常に動作します。
同一のデバイスが複数存在する場合、それらを区別できないことが問題になっていました。
これに対応するため、usb
デバイスに 3 つの新しいフィールドが追加されました:
- busnum
は USB バス番号を参照します
- devnum
は(バス上の)USB デバイス番号を参照します
- serial
は USB デバイスのシリアル番号を参照します(すべてのデバイスに存在するわけではない)
同じフィールドは、次のような Incus リソースの完全なリストで見つけられます:
incus query /1.0/resources
VM 向けのディスク I/O スロットリング ¶
コンテナと仮想マシンの差がまた 1 つ埋まりました。
disk
デバイスの limits.write
と limits.read
プロパティは、QEMU の I/O スロットルを Incus が設定することで、仮想マシンに適切に適用されるようになりました。
1 秒あたりのバイト数、1 秒あたりの I/O 回数の両方の制限をサポートしています。
リモートごとのクライアント証明書 ¶
Incus のコマンドラインクライアントの設定ディレクトリー(通常は ~/.config/incus/
)内の新しい clientcerts
フォルダーに、<remote>.crt
と <remote>.key
ファイルを配置できるようになりました。特定のリモートと通信するときに、それらの証明書が使われるようにします。
これは、それ自身も便利ですが、/etc/incus/config.yml
内に追加する、グローバルリモートと組み合わせるとさらに便利になります。この機能により、それらのグローバルリモートも /etc/incus/clientcerts
で利用できるクライアント証明書を持つことができ、システム上のすべてのユーザーがこれらの証明書を使えるようになります。
クライアント証明書証明書キーペアのマニュアル生成 ¶
メインの client.crt
と client.key
キーペアの生成を手動でトリガーする新しいコマンドが利用できるようになりました。
incus remote generate-certificate
を実行すると行えます。
lxd-to-incus
の改良 ¶
lxd-to-incus
はリリースごとに進化し続けています。
今回は、新たにリリースされた LXD 5.21 LTS からのユーザーの移行や、Alpine インストールの処理をサポートを追加しました。
さらに、このツールの静的バイナリーバージョンが Github から取得できるようになりました。これにより、ユーザーはこのツールの最新版を簡単に取得できるようになり、Incus リリースの間にバグが修正されるのに役立ちます。
incus-migrate
の改良 ¶
ワークロード移行ツールである incus-migrate
にもいくつかの小さな改良が加えられています。
ローカルの Incus システムを移行のターゲットシステムとして使えるようになりました。仮想マシンイメージを他の仮想化ツールからインポートするのに便利です。
インポートする仮想マシンが UEFI ファームウェアを使うか、代わりにレガシーな BIOS を使うかのプロンプトを表示するようにもなりました。
イメージ制限の追加 ¶
少し内部的で詳細な話で、少なくともパブリックなイメージサーバーのオペレーターだけに関係しますが、2 つの新しいイメージの制限が追加されました:
requirements.nesting
: コンテナにsecurity.nesting=true
が設定されていることを要求するrequirements.cdrom_agent
:source=agent:config
デバイスを仮想マシンに追加することを要求する
これら 2 つは、適切に動作するために、追加のユーザー操作が必要な特定のイメージにフラグを立てるために使用できます。その結果、壊れている可能性があるインスタンスが起動するのではなく、明確なクライアントサイドのエラーが発生します。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- incus/image: Fix column handling with --all-projects
- Replace util.ValueInSlice with slices.Contains
- shared/util: Delete ValueInSlice function
- incus/image: Fix column handling with --all-projects
- incusd/instance/qemu: Relocate image requirement checks
- doc/images: Add requirements.cdrom_agent
- incusd/instance/qemu: Add support for requirements.cdrom_agent
- incusd/device/disk: Fix incorrect block volume usage
- Translated using Weblate (Japanese)
- incusd/network/ovn: Use ParseIPToNet instead of manual IPToNet and net.ParseIP
- incusd/network/ovn: Use listenAddressNet in family check
- incusd/instance/drivers: Disable architecture check on incus cp with snapshots
- Translated using Weblate (French)
- incusd/network/bridge: Set local address on all VXLAN tunnels
- incus/instance/qemu: Fix RecordOutput
- incus: add completions for instance actions and snapshots
- incus: add completions for profiles
- incusd/network/ovn: Introduce get helper
- incusd/network/ovn: Add some missing indices
- incusd/network/ovn: Use get helper
- incusd/network/ovn: Fix LogicalSwitchPortIPs logic
- incusd/network/bridge: Fix gofmt
- incusd/network/ovn: Fix gofmt
- cmd/incus: Use proper timestamp check
- cmd/incus: Use consistent date format and timezone
- client: Rename network_peer for consistency
- cmd/incusd: Rename network_peer to network_peers
- shared/api: Rename network_allocation for consistency
- incusd/db: Fix comment typoes
- incusd/db/generate: Fix bad camel case handling
- incusd/db/network_peers: Fix duplicate type definitions
- incusd/auth: Drop Permission type
- incusd/auth: Add boilerplate doc strings
- incusd/images: Properly handle null creation and expiry dates
- incus: add completions for remotes
- incus: add completions for projects
- incusd/images: Fix reporting of images in multiple projects
- github: Add static build of lxd-to-incus
- lxd-to-incus: Add support for Alpine service name
- lxd-to-incus: Re-organize target list
- lxd-to-incus: Add support for APK
- Makefile: Add OVN IC to update-ovsdb
- incusd/network: Update OVS/OVN schemas
- incusd/network/ovn: Add IC clients
- incusd/network/ovn: Add GetName to NB client
- incusd/network/ovn: Add GetGateways to ICSB
- incusd/network/ovn: Introduce new errors
- incusd/network/ovn: Add CreateTransitSwitch and DeleteTransitSwitch to ICNB
- incusd/device/gpu_sriov: Add locking
- incusd/device/gpu_sriov: Re-locate vfio-pci loading
- incusd/device/gpu_sriov: Rework VF allocation logic
- incus/remote: Add a generate-certificate sub-command
- i18n: Update translation templates
- incusd/drivers/qmp: Add SetBlockThrottle
- incusd/device/disk/config: Add DiskLimits
- incusd/device/disk: Re-shuffle limit parsing
- incusd/device/disk: Add disk limits on VMs
- incusd/device/disk: Support live limits update for VMs
- incusd/instance/qemu: Support disk I/O limits
- incus/remote: Add missing docstrings
- incusd/certificates: Improve token handling when clustered
- cmd/incusd/api_1.0: Update context
- cmd/incusd/api_cluster: Update context
- cmd/incusd/api_internal: Update context
- cmd/incusd/daemon: Update context
- cmd/incusd/api_project: Update context
- cmd/incusd/certificates: Update context
- cmd/incusd/images: Update context
- cmd/incusd/instance: Update context
- cmd/incusd/network: Update context
- cmd/incusd/operations: Update context
- cmd/incusd/profiles: Update context
- cmd/incusd/storage: Update context
- cmd/incusd/warnings: Update context
- incusd/devices: Skip isolated threads from NUMA CPUs
- incusd/devices: Restrict CPU threads by NUMA node
- incusd/instance/qemu: Add support for limits.cpu.nodes
- incusd/device/gpu: Add support for limits.cpu.nodes for VF selection
- incusd: Fix import shadowing
- incusd/images: Fix potential race condition
- incusd/instance/qemu: Add support for NUMA node restrictions for memory
- incusd/apparmor/qemu: Silence apparmor failures
- incusd/network/ovs: Introduce new errors
- incusd/network/ovn/nb: Move SetChassisGroupPriority to new function signature
- incusd/network/ovn/sb: Move GetLogicalRouterPortActiveChassisHostname to new function signature
- incusd/network/ovs: Move GetBridge to new function signature
- incusd/network/ovs: Move CreateBridge to new function signature
- incusd/network/ovs: Move DeleteBridge to new function signature
- incusd/network/ovs: Move CreateBridgePort to new function signature
- incusd/network/ovs: Move GetChassisID to new function signature
- incusd/network/ovs: Move GetOVNBridgeMappings to new function signature
- incusd/network: Update for function changes
- incusd/device/nic: Update for function changes
- incusd: Update for function changes
- doc: Fix bad snapshot syntax
- Translated using Weblate (French)
- doc: Fix token creation procedure
- incusd/network/ovn/nb: Add GetLogicalSwitch
- incusd/network/ovn/nb: Replace ChassisGroupChassisDelete with SetChassisGroupPriority
- incusd/network/ovn/nb: Port CreateLogicalRouterPort to OVSDB
- incusd/network/ovn/nb: Replace LogicalRouterPortLinkChassisGroup with CreateLogicalRouterPort
- incusd/network/ovn/nb: Port CreateChassisGroup to OVSDB
- incusd/network/ovn/nb: Port CreateLogicalSwitch to OVSDB
- incusd/network/ovn: Update for function changes
- incusd/network/ovn: Remove state references
- incusd/state: Add OVNNB and OVNSB handles
- incusd: Update to use state for OVN
- incusd/device: Make init function return error
- incusd/device: Add OVN check on nicOVN
- client: Still return response on RawQuery error
- incus/query: Respect --raw for errors
- incusd/network/acl: Add OVN check
- incusd/network: Make init function return error
- incusd/network: Add OVN check on ovn driver
- incusd/api: Re-order config checks
- incusd: Add OVN loader
- Translated using Weblate (French)
- incusd/network/ovn/nb: Port CreateLogicalSwitchPort to OVSDB
- incusd/network/ovn/nb: Port DeleteLogicalSwitchPort to OVSDB
- incusd/network/ovn/nb: Port DeleteLogicalRouterPort to OVSDB
- incusd/network/ovn: Update for function changes
- incusd/network/ovs: Port GetOVNSouthboundDBRemoteAddress to OVSDB
- incusd/network/ovs: Port DeleteBridgePort to OVSDB
- incusd/network/ovs: Port GetInterfaceAssociatedOVNSwitchPort to OVSDB
- incusd/network/ovs: Align GetChassisID with other functions
- incusd: Update for OVS function changes
- incusd/network/ovn/icsb: Fix bad DB schema
- incusd/network/ovn/nb: Introduce GetLogicalRouterPort
- incusd/network/ovn/nb: Extend OVNSwitchPortOpts to handle router ports
- incusd/network/ovn/nb: Change type of RouterPort field to OVNRouterPort
- incusd/network/ovn/nb: Port DeleteChassisGroup to OVSDB
- incusd/network/ovn/icnb: Update DeleteTransitSwitch to handle missing switches
- incusd/network/ovn: Update for function changes
- Translated using Weblate (French)
- incus/completion: do not add a space after remote names completion
- incusd/device/disk: Disable virtiofsd caching
- incus-agent: Cleanup mount logic
- Translated using Weblate (French)
- incus: expose parseVolume to entire package
- incus: add completions for storage pools and volumes
- incusd/device/gpu_sriov: Fix default handling
- doc/packaging: Add mention of documentation
- incusd/auth: Fix --all-projects for restricted users
- doc: Add third party tools page
- gomod: Update dependencies
- incusd/auth/tls: Prevent project modifications
- doc: Update wordlist
- internal/usbid: allow path override of usb.ids path
- incus/completion: fix image names completion
- doc/environment: document INCUS_USBIDS_PATH
- incusd/instance/qemu/agent: Check for semanage
- incusd/project: Fix config name in ImageProjectFromRecord
- incus/restart: Fix long description
- i18n: Update translations
- lxd-to-incus: Handle common existing bridges
- shared/simplestreams: Remove defaultOS
- shared/simplestreams: Add NewLocalClient
- incus-simplestreams: Introduce new command
- incus-simplestreams: Simplify delete logic
- doc: Re-organize image server doc
- doc: Add section for incus-simplestreams
- incusd/seccomp: Add support for pidfd threads
- incus: add completions for clusters
- incus: add completions for cluster groups
- incus: add completions for cluster roles
- incus: add completions for config devices
- incus: add completions for config templates
- update translations
- doc: Update references to mage docs
- doc/backup: Remove bad reference
- incus: add completions for network acls
- shared/api: Add new structs to support configuration metadata
- client: Add GetMetadataConfiguration
- incusd: Rename documentation.go -> metadata.go
- doc/rest-api: Refresh swagger YAML
- shared/api/metadata: Add GetKeys to simplify usage
- incusd: Add support for JWT authentication
- gomod: Update dependencies
- tests: Add tls2jwt tool
- tests: Add JWT authentication test
- api: auth_tls_jwt
- doc/authentication: Add section on JWT
- doc/instances: Remove size.state requirement for live migration
- incusd/instance/qemu: Allow live migration without size.state
- shared/idmap: Support uid/gid in subuid/subgid
- shared/cliconfig: Copy clientcerts on remote copy
- shared/cliconfig: Add HasRemoteClientCertificate
- shared/cliconfig: Support per-remote client certificates
- doc: Add clientcerts
- incusd/cluster/config: Add oidc.claim
- incusd/auth/oidc: Add support for using a specific claim as username
- incusd: Pass OIDC claim to verifier
- api: oidc_claim
- doc: Update configs
- doc/howto/instances: Mention extra resources in ISO guidea
- doc/installing: Add Debian backport
- doc: Add backported to dictionary
- lxd-to-incus: Add support for LXD 5.21
- shared/cliconfig: Ensure client certificate key is 0600
- api: device_usb_serial
- doc: Add busnum, devnum and serial to USB devices
- shared/api: Add Serial to ResourcesUSBDevice
- incusd/resources: Add USB Serial
- incusd/devices/usb: Add serial, busnum and devnum options
- doc/rest-api: Refresh swagger YAML
- incusd/instance/qemu: Fix handling of > 64 limits.cpu
- incusd/device/gpu_sriov: Implement NUMA fallback
- incus: add completions for network forwards
- incus: add completions for network load balancers
- shared/validate: Remove stringInSlice
- shared/validate: Add And and Or functions
- shared/util: Move ParseUint32Range
- incusd/project: Update for ParseUint32Range
- doc/instance_options: Remove mention of limits.cpu.nodes from container-only section
- incusd/devices: Better handle bad config
- api: numa_cpu_balanced
- internal/instance: Add support for balanced NUMA nodes
- doc: Update configs
- incusd/instance/common: Add NUMA balancing
- incusd/instance/lxc: Add support for balanced NUMA allocation
- incusd/instance/qemu: Add support for balanced NUMA allocation
- incusd/devices: Add support for balanced NUMA allocation
- incusd/device/gpu_sriov: Simplify NUMA logic
- doc/cloud-init: Don't mention non-existing remotes
- doc/howto/images_remote: Fix wording around image servers
- doc/benchmark: Fix install command
- incusd/instance/common: Fix CanMigrate mutating devices
- incusd/instance/qemu: Reduce agent queries
- incusd/metrics: Don't filter out all server metrics
- incusd/auth/tls: Include project restrictions for metrics certificates
- incusd/auth/tls: Return project-aware checker for metrics
- incusd/metrics: Use project-specific checker if no global access
- internal/server/instance/lxd: add support for image.requirments.nesting
- api: add image_restriction_nesting
- doc/images: introduce requirements.nesting
- Show the count values in snapshot count mismatch error
- incus/admin/init: Use btrfs subvol in --auto
- incus-migrate: Clarify that disk image files must be raw
- incusd/network/ovn/icnb: Fix comment
- incusd/project: Re-format the comments
- incusd/project: Fix bad default value
- doc: Update configs
- incus/migrate: Add CSM support
- incusd/storage/backend: Better handle name conflicts
- incus-migrate: Support using the local server
- api: network_integrations
- shared/api: Add type and target_integration fields to NetworkPeersPost
- incusd/db/cluster: Add networks_integrations
- incusd/db/cluster: Re-generate schema
- incusd/db/cluster: Add generated DB code for network integrations
- incusd/db: Update network peer DB query functions
- client: Add check for network_integrations in CreateNetworkPeer
- incus/network/peer: Add support for network peer types
- shared/api: Add network integrations
- client: Add network integration functions
- incus/network: Introduce support for integrations
- incusd/auth: Add network integration functions
- shared/api: Add lifecycle events for network integrations
- incusd/lifecycle: Add network integration events
- incusd: Add network integration API
- incusd/db: Add GetNetworkPeersURLByIntegration
- incusd/network_integration: Add UsedBy field
- incusd/network_integrations: Add validator
- incusd/network/ovn: Add support for peering with OVN IC
- incusd/project: Add restricted.networks.integrations
- incusd/project: Add NetworkIntegrationAllowed
- incusd/network/integrations: Respect project restrictions
- incusd/network/ovn: Add support for integration restrictions
- incusd/auth/openfga: Update the model
- incusd/auth/openfga: Update the generated model
- incusd/auth/openfga: Handle model updates
- incusd: Remove openfga.store.model_id
- incusd/db/cluster: Remove openfga.store.model_id
- doc/ovn_peers: Add remote peering
- doc: Add documentation for network integrations
- doc/rest-api: Refresh swagger YAML
- i18n: Update translation templates
- doc: Update configs
- 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/0.7
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
現在は初期段階ですので、Incus の各リリースは、次のリリースが出るまでしかサポートされません。LXC と LXCFS のリリースと合わせて LTS リリースを計画していますので、この状況はここ数ヶ月で変わるでしょう。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 0.6 リリースのお知らせ¶
23rd of February 2024
はじめに ¶
Incus チームは、Incus 0.6 のリリースのアナウンスができてうれしいです!
このリリースは、2024 年の 2 回目のリリースで、大小さまざまな多数の改善が加えられています。
クラスターユーザー向けの新しいストレージドライバー、ストレージバケットのインポート・エクスポートのサポート、OVN ユーザー向けの多数の改善、新しいカーネルのコンテナ機能のサポート、移行ツールのかなりの改善などが含まれます。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
新機能 ¶
クラスター LVM ストレージドライバー ¶
lvmcluster
という名前の新しいストレージドライバーを追加しました。
名前のとおり、このドライバーは LVM ストレージドライバーをクラスター化して使うためのドライバーです。
llvmlockd
と sanlock
のようなロックマネージャーを使って、クラスター全体への共有ストレージデバイスへの同時アクセスを提供します。
これは、Incus クラスターを実行し、ファイバーチャンネル SAN、iSCSI エクスポート、NVMEoF/NVMEoTCP ディスクといった共有ストレージデバイスを使いたい人を対象にしています。
すべてのサーバーで同じストレージを使えるので、より高速なライブマイグレーション、サーバーの退避、サーバーが突然停止した場合の自動回復機能のようなことがサポートできます。
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/storage_lvm/#lvmcluster-driver-in-incus
ストレージバケットのバックアップとインポート ¶
ストレージバケット全体をバックアップし、あとで Incus に再度インポートできるようになりました。
stgraber@dakara:~$ incus storage bucket create default foo Storage bucket foo created Admin access key: HD2GWC1KX693MFVT3P30 Admin secret key: tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv stgraber@dakara:~$ dd if=/dev/random of=out.img bs=4M count=10 10+0 records in 10+0 records out 41943040 bytes (42 MB, 40 MiB) copied, 0.0975758 s, 430 MB/s stgraber@dakara:~$ s3cmd --host=127.0.0.1:8445 --host-bucket=127.0.0.1:8445 --no-check-certificate --access_key=HD2GWC1KX693MFVT3P30 --secret_key=tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv put out.img s3://foo upload: 'out.img' -> 's3://foo/out.img' [part 1 of 3, 15MB] [1 of 1] 15728640 of 15728640 100% in 0s 262.42 MB/s done upload: 'out.img' -> 's3://foo/out.img' [part 2 of 3, 15MB] [1 of 1] 15728640 of 15728640 100% in 0s 241.54 MB/s done upload: 'out.img' -> 's3://foo/out.img' [part 3 of 3, 10MB] [1 of 1] 10485760 of 10485760 100% in 0s 241.99 MB/s done stgraber@dakara:~$ s3cmd --host=127.0.0.1:8445 --host-bucket=127.0.0.1:8445 --no-check-certificate --access_key=HD2GWC1KX693MFVT3P30 --secret_key=tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv ls s3://foo 2024-02-23 03:26 41943040 s3://foo/out.img stgraber@dakara:~$ incus storage bucket export default foo Backup exported successfully! stgraber@dakara:~$ incus storage bucket delete default foo Storage bucket foo deleted stgraber@dakara:~$ incus storage bucket import default backup.tar.gz stgraber@dakara:~$ s3cmd --host=127.0.0.1:8445 --host-bucket=127.0.0.1:8445 --no-check-certificate --access_key=HD2GWC1KX693MFVT3P30 --secret_key=tX9+G9G5UlcuT21yatKIUImSGvcXzPyA7ONgkjUv ls s3://foo 2024-02-23 03:27 41943040 s3://foo/out.img
すべてのプロジェクトをまたいだイメージのリスト表示 ¶
--all-projects
を使って、すべてのプロジェクトをまたいでインスタンスのリスト表示ができるようになったのと同じように、イメージについても同じようなリスト表示ができるようになりました。
stgraber@dakara:~$ incus image list --all-projects +---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+ | PROJECT | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCHITECTURE | TYPE | SIZE | UPLOAD DATE | +---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+ | default | | 256f59a72af5 | no | Ubuntu jammy amd64 (20240222_07:42) | x86_64 | VIRTUAL-MACHINE | 267.19MiB | Feb 23, 2024 at 12:27am (UTC) | +---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+ | default | | 0941e441dbb9 | no | Alpine edge amd64 (20240222_13:00) | x86_64 | CONTAINER | 2.93MiB | Feb 23, 2024 at 12:27am (UTC) | +---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+ | default | | d5fc6024f0fa | no | Openwrt snapshot amd64 (20240222_11:57) | x86_64 | CONTAINER | 3.50MiB | Feb 23, 2024 at 2:55am (UTC) | +---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+ | demo | | f44a6b4e56f4 | no | Archlinux current amd64 (20240222_04:18) | x86_64 | CONTAINER | 188.86MiB | Feb 23, 2024 at 3:32am (UTC) | +---------+-------+--------------+--------+------------------------------------------+--------------+-----------------+-----------+-------------------------------+
API では、?all-projects=true
を与えることで行います。
非特権コンテナ内の binfmt_misc ¶
Linux 6.7 で、非特権コンテナ内部での binfmt_misc
のマウントサポートが追加されました。
Incus 0.6 では、この機能をサポートするカーネルを検出し、使える場合には、ホストシステムから binfmt_misc
でのバインドマウントを行わないようになり、代わりにコンテナ内から binfmt_misc
でのマウントを行えるようになります。
stgraber@castiana:~$ incus launch images:ubuntu/22.04 foo Launching foo stgraber@castiana:~$ incus exec foo bash root@foo:~# uname -a Linux foo 6.7.4-zabbly+ #debian12 SMP PREEMPT_DYNAMIC Mon Feb 5 23:37:46 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux root@foo:~# mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc/ root@foo:~# ls -lh /proc/sys/fs/binfmt_misc/ total 0 --w------- 1 root root 0 Feb 23 03:46 register -rw-r--r-- 1 root root 0 Feb 23 03:46 status
binfmt_misc
ファイルシステムは、エミューレーションのためのカスタムバイナリーフォーマットを定義するために使います。
これは、他のアーキテクチャーのバイナリーを実行するための方法として、qemu-user-static が特によく使われます。
共有ブロックストレージボリュームの制御 ¶
カスタムブロックボリュームを複数のインスタンスから使えるようにするかどうかを制御するために、新たに security.shared
というボリュームストレージオプションを導入しました。
カスタムブロックボリュームをプロファイルに追加する前、もしくは複数の仮想マシンに直接追加する前に、設定を行う必要があります。
stgraber@castiana:~$ incus config device add lvm01 shared disk pool=default source=shared-lvm io.bus=nvme Device shared added to lvm01 stgraber@castiana:~$ incus config device add lvm02 shared disk pool=default source=shared-lvm io.bus=nvme Error: Failed add validation for device "shared": Cannot add un-shared custom storage block volume to more than one instance stgraber@castiana:~$ incus storage volume set default shared-lvm security.shared=true stgraber@castiana:~$ incus config device add lvm02 shared disk pool=default source=shared-lvm io.bus=nvme Device shared added to lvm02 stgraber@castiana:~$ incus config device add lvm03 shared disk pool=default source=shared-lvm io.bus=nvme Device shared added to lvm03 stgraber@castiana:~$ incus start lvm01 lvm02 lvm03
ネットワーク情報で OVN 論理ルーター名を表示 ¶
OVN 内で何が起こっているかが簡単に確認できるように、incus network info
コマンドで、個別のネットワークに対する論理ルーター名が表示されるようになりました。
root@abydos:~# incus network info default Name: default MAC address: 00:16:3e:38:dd:28 MTU: 1500 State: up Type: broadcast IP addresses: inet 10.180.103.1/24 (link) inet6 2602:fc62:a:1004::1/64 (link) Network usage: Bytes received: 0B Bytes sent: 0B Packets received: 0 Packets sent: 0 OVN: Chassis: abydos Logical router: incus-net6-lr
イメージテンプレートのファイルの所有者とパーミッション ¶
テンプレートファイルに uid
、gid
、mode
を設定できるようになりました。
これは、テンプレートが実行可能なシェルスクリプトであることを意図している場合に特に便利です。
stgraber@castiana:~$ incus config metadata show foo architecture: amd64 creation_date: 1708588077 expiry_date: 1711180077 properties: architecture: amd64 description: Ubuntu jammy amd64 (20240222_07:42) name: ubuntu-jammy-amd64-default-20240222_07:42 os: ubuntu release: jammy serial: "20240222_07:42" variant: default templates: /etc/hostname: when: - create - copy create_only: false template: hostname.tpl properties: {} /etc/hosts: when: - create - copy create_only: false template: hosts.tpl properties: {} /root/hello.sh: when: - start create_only: false template: hello.tpl properties: {} uid: "1000" gid: "2000" mode: "0755" stgraber@castiana:~$ incus config template show foo hello.tpl #!/bin/sh echo "Hello world!" stgraber@castiana:~$ incus start foo stgraber@castiana:~$ incus exec foo bash root@foo:~# ls -lh /root/hello.sh -rwxr-xr-x 1 ubuntu 2000 30 Feb 23 04:07 /root/hello.sh root@foo:~# /root/hello.sh Hello world!
ドキュメント : https://linuxcontainers.org/incus/docs/main/reference/image_format/#template-rules
暗号化された EC クライアント証明書の鍵 ¶
リモートの Incus サーバーとやりとりしている方は、Incus の秘密鍵をパスワードで保護できることを知らないかもしれません。
これまで、RSA キーでのみ可能でしたが、Incus 0.6 では、EC キーのサポートが追加されました。ここしばらくで、EC キーがデフォルトになっているので、これは特に重要です。
Documentation: https://linuxcontainers.org/incus/docs/main/authentication/#encrypting-local-keys
この機能を使う場合、Incus の使用中にパスワードプロンプトが表示される回数を大幅に減らすために、最近導入された「キープアライブモード」(keepalive mode)も使いたいと思うでしょう。
lxd-to-incus の改良 ¶
最後に、lxd-to-incus
が大きく改良されました:
- Void Linux サポート
- 設定
boot.debug_edk2
の検出 - OVN SSL データベース接続の扱い
- マイグレーション中の simplestream キャッシュの自動クリーニング
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- incusd/instance/qemu/qmp: Don't risk blocking QMP on eject
- github: Switch to minio deb and pin working version
- github: Use stable MicroCeph
- incusd/db: Fix error handling in CreateNetworkPeer
- incusd/apparmor: Allow more mounts in unprivileged containers
- Translated using Weblate (Portuguese (Brazil))
- incusd/instance/qemu/agent-loader: Handle legacy lxd-agent-loader
- incusd/device/disk: Use genisoimage when mkisofs can't be found
- shared/api: Add example of Chassis in NetworkStateOVN
- doc/rest-api: Refresh swagger YAML
- api: network_state_ovn_lr
- shared/api: Add LogicalRouter field to NetworkStateOVN
- incusd/network/ovn: Expose LogicalRouter name
- incus: Add OVN logical router name
- i18n: Update translation templates
- doc/rest-api: Refresh swagger YAML
- scripts/bash: Don't follow aliases
- Translated using Weblate (Japanese)
- test: Adapt test_database_no_disk_space() to newer libraft versions
- incus/launch: Fix --console
- api: image_template_permissions
- doc: Add uid/gid/mode to image template metadata
- shared/api: Add owner/permission fields to ImageMetadataTemplate
- doc/rest-api: Refresh swagger YAML
- incusd/instance/lxc: Add support for template ownership/mode
- incus-agent: Add support for template ownership/mode
- lxd-to-incus: Add comment
- lxd-to-incus: Add cache cleanup logic
- .github: Bump minimum Go version to 1.21
- Makefile: Bump minimum Go version to 1.21
- gomod: Update dependencies
- doc: Bump minimum Go version to 1.21
- Translated using Weblate (French)
- incusd/daemon: Fix log format
- incusd/sys: Sort kernel features
- incusd/sys: Add doc strings
- incusd/checkfeature: Add unprivileged binfmt detection
- incusd/sys: Add UnprivBinfmt
- incusd/daemon: Detect unprivileged binfmt_misc
- incusd/api_1.0: Add unpriv_binfmt kernel feature
- incusd/instance/lxc: Support unpriv binfmt_misc
- incusd/apparmor: Support unpriv binfmt_misc
- Translated using Weblate (Italian)
- completion: support returning non-incus remotes
- incus/image: add dynamic command line completions
- shared/cliconfig: Support SSH encrypted keys
- tests: Add crypto/ssh
- doc/remotes: Add mention of keepalive
- doc: Add Ansible to wordlist
- doc/authentication: Hints on encrypting client key
- api: images_all_projects
- lxd-to-incus: Indicate what existing configuration was found
- shared/api: Add project property to Image
- client: Add GetImagesAllProjects
- incusd/images: Add support for all_projects
- doc/rest-api: Refresh swagger YAML
- incus/image: Add --all-projects flag to list
- i18n: Update translation templates
- shared/cliconfig: Fix static analysis
- gomod: Update dependencies
- Makefile: Pin rpc2 version due to OVN issue
- incusd/instance/qemu: Re-shuffle agent NIC handling
- incusd/instance/qemu/agent-loader: Handle SELinux
- incus/config: add completions
- incus-agent: Load virtio_net before configuring NICs
- incus: Run gofmt
- doc/storage/lvm: Cleanup tables
- incusd/patches: Move lvm.vg.force_reuse to be server-specific
- incusd/db: Mark lvm.vg.force_reuse as server-specific
- doc/faq: Add mention of the -mtu network interfaces
- incusd/device: Bump base VM filesystem volume to 500MiB
- incusd/storage: Create rootfs dir on empty instances
- incusd/storage/quota: Don't fail on missing project
- incusd/instances: Use correct project on cross-project copy
- incusd/patches: Fix bad SQL query
- incusd/instances: Don't bypass instance limit check
- Added translation using Weblate (Portuguese)
- incus-agent: Re-order imports
- api: Add storage_bucket_backup extension
- shared/api: Add storage bucket backup
- incusd/db: Add storage bucket backup functions
- incusd/db/operation: Add storage volume backup types
- incusd/lifecycle: Add storage bucket backup events
- incusd/project: Add StorageBucket function
- incusd/storage/s3: Add transfer manager
- incusd: Add storage bucket backup
- client: Add storage bucket backup
- incus: Add storage bucket import/export
- doc/rest-api: Refresh swagger YAML
- i18n: Update translation templates
- test: Add storage bucket backup
- client: Remove ceph-specific logic
- incusd/storage/s3: Fix typo
- incus: Fix import shadowing
- incus: Fix comments on exported functions
- client: Fix comments on exported functions
- incusd: Fix import shadowing
- incusd: Fix comments on exported functions
- incusd/cluster: Make remote storage volume logic generic
- incusd/db: Don't hardcode remote storage drivers
- incusd/storage_volumes: Don't hardcode ceph
- incusd/instances: Update ceph-specific comment
- incusd/cluster: Update ceph-specific comment
- incusd/instances: Generalize Ceph logic
- lxd-to-incus: Support SSL authentication in OVN
- lxd-to-incus: Don't fail on missing OVN bridge mapping
- lxd-to-incus: Ignore OVN chassis external_ids
- lxd-to-incus: Add boot.debug_edk2 to deprecated keys
- lxd-to-incus: Support Void Linux
- cmd/incusd: Disable the architecture check on incus cp/mv
- incusd/instance: Disable the architecture check on incus cp/mv
- api: storage_lvm_cluster
- incus/admin/init: Add LVM cluster logic
- i18n: Update translation templates
- lxd-to-incus: Add LVM cluster
- doc: Add LVM cluster
- shared/api: Add cephobject
- shared/api: Add lvmcluster
- doc/rest-api: Refresh swagger YAML
- incusd/storage/lvm: Add clustered LVM
- incusd/storage/lvm: Fix import shadowing
- incusd/storage/lvm: Tweak locking in cluster
- internal/server/device/config: Don't include empty values
- internal/server/device/config: Fix return values of Update function
- api: Add shared_custom_block_volumes API extension
- doc/reference: Add
security.shared
config key - instance/server/device: Validate shared block devices
- internal/server/storage: Handle
security.shared
update - internal/server/storage: Allow security.shared key for custom block volumes
- internal/server/storage/drivers: Handle security.shared in fillVolumeConfig
- incusd/instance/qemu: Cap hotplug CPU slots to 64
- incusd/storage/lvm: Make gofmt happy
- shared/subprocess: Improve error handling
- incusd/instance/qemu: Improve error handling
- incusd/network/ovs: Wait for bridge interface to appear
- incusd/storage/zfs: Fix refresh of VM volumes
- internal/instance: Fix volatile key definitions
- doc: Update configs
- incusd/network/ovn: Extend validateExternalSubnet to allow uplink subnets
- incusd/network/ovn: Add static routes to load-balancer and forwards
- 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/0.6
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
現在は初期段階ですので、Incus の各リリースは、次のリリースが出るまでしかサポートされません。LXC と LXCFS のリリースと合わせて LTS リリースを計画していますので、この状況はここ数ヶ月で変わるでしょう。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 0.5.1 リリースのお知らせ¶
29th of January 2024
はじめに ¶
Incus チームは、Incus 0.5.1 のリリースのアナウンスができてうれしいです!
通常、毎月の機能リリースに加えてポイントリリースを行わないため、このリリースは異例のリリースです。しかし、非常に重要なバグ修正のいくつかと、CentOS/Alma/Rocky 仮想マシンを実行するために必要なマイナーな機能追加があるので、今回のリリースが必要でした。
ほとんどの変更はサーバー側であるため、コマンドラインクライアントを使うのみの場合は、0.5 から 0.5.1 にアップグレードする強い理由はありません。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
ハイライト ¶
VM エージェントを取得するための別の方法 ¶
Incus 0.5 で、Incus の VM エージェントを配布するメカニズムが少し変わりました。
以前は、インスタンス固有のエージェント設定と incus-agent
バイナリーの両方を含む config
という名前の単一の共有がありました。
これは少し無駄であり、各 VM に 15-20MB の大きな incus-agent
のコピーが必要です。しかし、それでもある程度は管理できました。この共有は 9p
と virtiofs
の両方でも公開されます。Incus VM ごとにホストシステム上で 2 つのプロセスが実行されることになります。
複数のエージェントバイナリーのサポートで、全 VM にバイナリーをコピーすることは選択肢ではなくなりました。そのため、バイナリー向けに別の共有が導入されました。VM ごとにホスト上でさらに 2 つのプロセスが実行されることは本当に望ましくなかったので、それらの内部共有は 9p
を通して利用できるようにすることに決定しました。
CentOS 7 を含む、さまざまなイメージでテストしたところ、これで問題がないことがわかりました。
9p
は virtiofs
にくらべてパフォーマンスが劣りますが、これらの共有は VM の起動ごとに数秒しか使わないため、実際には問題にはなりませんでした。ユーザー定義の共有は、引き続き virtiofs
を通して公開されるため、この共有には引き続き高いパフォーマンスのオプションが提供されます。
われわれが気づかなかった問題は、CentOS 8-Stream、CentOS 9-Stream や他の RHEL 8/9 派生のディストリビューションでは、9p
カーネルドライバーが同梱されていないことでした…
これらのインスタンスでは、エージェントを取得する方法がなくなり、incus exec
と incus file
が正常に動かないことになりました。
いくつかのイメージ上で動かすために、Incus VM ごとに 4 つのホストプロセスを実行するのは気が進みません。その代わり、Incus 0.5.1 では新たなエージェントドライブを導入しました。これは、特定の VM にアタッチできる追加ディスクです。ネットワークファイルシステムからファイルを取得するのではなく、CD-ROM ドライブに見えるところからファイルを提供します。
このため、CentOS 9-Stream を動かすには、次のようにする必要があります:
incus create images:centos/9-Stream centos --vm incus config device add centos agent disk source=agent:config incus start centos
このような VM を多数動作させる場合、このような VM 用にプロファイルを作成するのが良いでしょう:
incus profile create vm-agent incus profile device add vm-agent agent disk source=agent:config
プロファイルを作成すると、次のようにできます:
incus launch images:centos/9-Stream centos --vm -p default -p vm-agent
これは、明らかに理想的ではなく、これらのディストリビューション用の VM を作成するときに、いくつか手順が追加されますが、この新しいメカニズムにより、ほぼすべての環境でエージェントを起動して実行する方法が提供できます。
注意: CD-ROM デバイスを生成するにはリソースが必要であり、ホスト上の追加ディスクを使います。このため、追加のデバイスを常に提供することは考えていません。必要なときだけ追加するのが最適です。
退避中の停止中インスタンスのハンドリングの修正 ¶
Incus 0.5 で混入したバグにより、インスタンスがそのままの場所にとどまるように設定されていても、退避中に他のシステムに移動してしまうことがありました。
この問題は修正され、stopped
、force-stop
、stateful-stop
使っているインスタンスは、現在のサーバーにとどまるようになりました。
データベースパフォーマンスの修正 ¶
Incus 0.5 で行われたデータベースの改善で、多数のインスタンスのネットワーク情報の詳細を取得する際、ネストしたデータベースのトランザクションが発生してしまうことがありました。
これは、DNS ゾーンを提供し、Prometheus がメトリクスを取得する Incus クラスターを使っているときのみ表面化します。このコンビネーションにより、15 秒程度ごとに API リクエストが急増し、タイムアウトとリトライがトリガーされはじめ、最終的には API リクエストが積み重なり、タイムアウトします。
このようなネストしたトランザクションを削除するためにロジックを変更しました。そして、インスタンスのコマンドインスタンスを実行するようなコマンド API 対話中の一部のデータベース処理を節約するようなさらなる最適化も行われました。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- Translated using Weblate (German)
- Translated using Weblate (Dutch)
- incus/action: Fix resume
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- doc: Remove net_prio
- incusd/cgroup: Fully remove net_prio
- incusd/warningtype: Remove net_prio
- incusd/cgroup: Look for full cgroup controllers list at the root
- incusd/dns: Serialize DNS queries
- incusd/network: Optimize UsedByInstanceDevices
- incusd/backups: Simplify missing backup errors
- tests: Update for current backup errors
- incusd/cluster: Optimize ConnectIfInstanceIsRemote
- incusd/instance/qemu/agent-loader: Fix to work with busybox
- doc/installing.md: add a gentoo-wiki link under Gentoo section
- Translated using Weblate (French)
- Translated using Weblate (Dutch)
- incusd/device/disk: Better cleanup cloud-init ISO
- incusd/instance/qemu/qmp: Add Eject command
- incusd/instance/qemu/qmp: Handle eject requests
- api: agent_config_drive
- doc/devices/disk: Add agent:config drive
- incusd/device/disk: Add agent config drive
- incusd/project: Add support for agent config drive
- incusd/instance/qemu/agent-loader: Handle agent drive
- incusd/db/warningtype: gofmt
- incusd/loki: Sort lifecycle context keys
- incusd/instance/qemu/agent-loader: Don't hardcode paths
- incusd/cluster: Fix evacuation of stopped instances
ドキュメント ¶
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/0.5
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
現在は初期段階ですので、Incus の各リリースは、次のリリースが出るまでしかサポートされません。LXC と LXCFS のリリースと合わせて LTS リリースを計画していますので、この状況はここ数ヶ月で変わるでしょう。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Incus 0.5 リリースのお知らせ¶
26th of January 2024
はじめに ¶
Incus チームは、Incus 0.5 のリリースのアナウンスができてうれしいです!
このリリースは 2024 年の最初のリリースで、非常に忙しいリリースでした!LXD が AGPLv3 に再ライセンスされることが決まったあと、LXD からの変更が加えられていない最初のリリースでもあります。
このリリースには、Incus CLI に対する歓迎すべきたくさんの改良、たくさんの新たな仮想マシンの機能、クラスター退避とホストシャットダウンを処理するためのオプションの追加、そしてその他の小さな機能や改良点がいくつか含まれています。
それに加えて、多数のバグフィックスと、データベースの改良が多数行われており、特にクラスター環境において顕著なパフォーマンスの向上が得られるはずです。
いつものように、オンラインでご自身で試せます: https://linuxcontainers.org/incus/try-it/
Enjoy!
ハイライト ¶
Ansible, Terraform/OpenTofu and Packer¶
ここ数ヶ月で、一般的に普及しているツールの Incus に対するサポートが大幅に増えました。
- 接続プラグインが Ansible にあります
- Terraform と OpenTofu の 公式プロバイダー があります
- Incus 用の Packer プラグイン が利用できます
Linux ディストリビューションパッケージ ¶
以前の Incus のリリース以降、次のディストリビューションで新たにパッケージが利用できるようになりました:
- Arch Linux
- Debian (testing/unstable)
- Ubuntu (noble)
- Void Linux
「Incus をインストールするには」(原文)ページでインストール方法をご覧いただけます。
翻訳 ¶
翻訳のクリーンアップと Incus 用の Weblate のセットアップに少し時間がかかってしまいました。
Weblate にログインすることで、Incus CLI をお使いの言語に翻訳することがこれまでより簡単になりました。
新機能 ¶
新しい incus file create
コマンド ¶
新たに incus file create
コマンドが追加されました。このコマンドにより、既存のディレクトリーツリーを転送せずに、簡単に空のファイルや、シンボリックリンク、ディレクトリーを簡単に作れます。
stgraber@dakara:~$ incus file create demo/root/file stgraber@dakara:~$ incus file create --type=symlink demo/root/symlink /etc/hosts stgraber@dakara:~$ incus file create --type=directory demo/root/dir stgraber@dakara:~$ incus exec demo -- ls -lh /root total 2.5K drwxr-xr-x 2 root root 2 Jan 26 03:38 dir -rw-r--r-- 1 root root 0 Jan 26 03:37 file lrwxrwxrwx 1 root root 10 Jan 26 03:38 symlink -> /etc/hosts
新しい incus snapshot show
コマンド ¶
新しい incus snapshot show
コマンドを使用すると、Incus のインスタンスのスナップショットの一部として含まれる構成データを簡単に確認できます。
なお、Incus のスナップショットには、ファイルシステムの状態だけでなく、スナップショットを取った時点のインスタンスの設定情報(設定、デバイス、…)がすべて含まれます。
stgraber@dakara:~$ incus snapshot create demo s1 stgraber@dakara:~$ incus snapshot list demo +------+----------------------+----------------------+----------+ | NAME | TAKEN AT | EXPIRES AT | STATEFUL | +------+----------------------+----------------------+----------+ | s1 | 2024/01/25 22:39 EST | 0000/12/31 19:03 LMT | NO | +------+----------------------+----------------------+----------+ stgraber@dakara:~$ incus snapshot show demo s1 expires_at: 0001-01-01T00:00:00Z architecture: x86_64 config: image.architecture: amd64 image.description: Ubuntu jammy amd64 (20240125_07:42) image.os: Ubuntu image.release: jammy image.serial: "20240125_07:42" image.type: squashfs image.variant: default volatile.base_image: f9e9abeb4fc8691edf48078616a1aae628c6d5938b715e361c6b47cda0474679 volatile.cloud-init.instance-id: f724feba-245a-424b-bc51-43167258dc2a volatile.eth0.host_name: vethecbb346e volatile.eth0.hwaddr: 00:16:3e:06:67:f0 volatile.idmap.base: "0" volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]' volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]' volatile.last_state.idmap: '[]' volatile.last_state.power: RUNNING volatile.uuid: 8b8a1c75-977b-4197-9ad7-507b899432e9 volatile.uuid.generation: 8b8a1c75-977b-4197-9ad7-507b899432e9 created_at: 2024-01-26T03:39:09.583020489Z devices: {} ephemeral: false expanded_config: image.architecture: amd64 image.description: Ubuntu jammy amd64 (20240125_07:42) image.os: Ubuntu image.release: jammy image.serial: "20240125_07:42" image.type: squashfs image.variant: default volatile.base_image: f9e9abeb4fc8691edf48078616a1aae628c6d5938b715e361c6b47cda0474679 volatile.cloud-init.instance-id: f724feba-245a-424b-bc51-43167258dc2a volatile.eth0.host_name: vethecbb346e volatile.eth0.hwaddr: 00:16:3e:06:67:f0 volatile.idmap.base: "0" volatile.idmap.current: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]' volatile.idmap.next: '[{"Isuid":true,"Isgid":false,"Hostid":1000000,"Nsid":0,"Maprange":1000000000},{"Isuid":false,"Isgid":true,"Hostid":1000000,"Nsid":0,"Maprange":1000000000}]' volatile.last_state.idmap: '[]' volatile.last_state.power: RUNNING volatile.uuid: 8b8a1c75-977b-4197-9ad7-507b899432e9 volatile.uuid.generation: 8b8a1c75-977b-4197-9ad7-507b899432e9 expanded_devices: eth0: name: eth0 network: incusbr0 type: nic root: path: / pool: default type: disk last_used_at: 0001-01-01T00:00:00Z name: s1 profiles: - default stateful: false size: 53760
シェル completion の新たな選択肢 ¶
私たちは、incus
コマンドラインツール用の単一の手書きの bash completion スクリプトから、代わりにシェル補完を処理するはるかに動的な方法を使用するようにゆっくりと移行しています。
初期の shell completion プロファイルは、次のコマンドで取得できます:
incus completion bash
incus completion fish
incus completion powershell
incus completion zsh
bash ユーザーはおそらく、現時点では手書きの completion スクリプトを使うほうが良いでしょう。しかし、次かその次のリリースでは、この動的に生成される新しいプロファイルが引き継ぐことに期待しています。
複数の VM エージェントバイナリーのサポート ¶
Incus は、仮想マシンに、複数のエージェントバイナリーを提供できるようになりました。
これは、次の 2 つのシナリオで役立ちます:
- 複数のオペレーティングシステムを扱う
- 複数のアーキテクチャーを扱う
現時点では、複数のアーキテクチャーに焦点を当てます。この新しい機能により、システム上で 32 ビットの仮想マシンを実行し、32 ビットのエージェントバイナリーをフェッチできるようになりました。
stgraber@castiana:~$ incus exec debian32 bash root@debian32:~# uname -a Linux debian32 6.1.0-17-686-pae #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) i686 GNU/Linux root@debian32:~# exit stgraber@castiana:~$ incus exec debian32 bash root@debian32:~# uname -m i686 root@debian32:~# mount -t 9p agent /mnt root@debian32:~# ls -lh /mnt total 34M -rwxr-xr-x 1 root root 17M Jan 24 10:10 incus-agent.linux.i686 -rwxr-xr-x 1 root root 18M Jan 24 10:10 incus-agent.linux.x86_64
デイスクの io.bus
で virtio-blk
をサポート ¶
Incus 0.2 での NVME サポートの追加後、メカニズムを拡張し、仮想マシンの disk I/O バスとして、virtio-blk
も提供するようになりました。
この機能を使うには、disk
デバイスの io.bus
プロパティを virtio-blk
に設定します。
stgraber@dakara:~$ incus launch images:debian/12 demo --vm Launching demo stgraber@dakara:~$ incus storage volume create default demo size=5GiB --type=block Storage volume demo created stgraber@dakara:~$ incus config device add demo extra disk pool=default source=demo io.bus=virtio-blk Device extra added to demo stgraber@dakara:~$ incus exec demo bash root@demo:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 10G 0 disk ├─sda1 8:1 0 100M 0 part /boot/efi └─sda2 8:2 0 3.9G 0 part / vda 253:0 0 5G 0 disk
VM への USB ネットワークデバイスのパススルーのサポート ¶
USB バス経由で親のネットワークデバイスが接続されている仮想マシンで nictype=physical
を使うと、Incus はそのような接続を検出し、仮想マシンへの USB デバイスパススルーに内部的に変換するようになりました。
stgraber@castiana:~$ incus launch images:debian/12 demo --vm Launching demo stgraber@castiana:~$ incus config device add demo eth1 nic nictype=physical parent=enx207bd2a0f9eb Device eth1 added to demo stgraber@castiana:~$ incus exec demo bash root@demo:~# apt install usbutils Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: libusb-1.0-0 The following NEW packages will be installed: libusb-1.0-0 usbutils 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 142 kB of archives. After this operation, 492 kB of additional disk space will be used. Do you want to continue? [Y/n]· Get:1 http://deb.debian.org/debian bookworm/main amd64 libusb-1.0-0 amd64 2:1.0.26-1 [62.6 kB] Get:2 http://deb.debian.org/debian bookworm/main amd64 usbutils amd64 1:014-1 [79.7 kB] Fetched 142 kB in 1s (124 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libusb-1.0-0:amd64. (Reading database ... 20425 files and directories currently installed.) Preparing to unpack .../libusb-1.0-0_2%3a1.0.26-1_amd64.deb ... Unpacking libusb-1.0-0:amd64 (2:1.0.26-1) ... Selecting previously unselected package usbutils. Preparing to unpack .../usbutils_1%3a014-1_amd64.deb ... Unpacking usbutils (1:014-1) ... Setting up libusb-1.0-0:amd64 (2:1.0.26-1) ... Setting up usbutils (1:014-1) ... Processing triggers for libc-bin (2.36-9+deb12u3) ... root@demo:~# lsusb -tv /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 5000M ID 1d6b:0003 Linux Foundation 3.0 root hub |__ Port 4: Dev 2, If 0, Class=Communications, Driver=cdc_ncm, 5000M ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet |__ Port 4: Dev 2, If 1, Class=CDC Data, Driver=cdc_ncm, 5000M ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 480M ID 1d6b:0002 Linux Foundation 2.0 root hub root@demo:~# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:e7:f7:2d brd ff:ff:ff:ff:ff:ff 3: enx207bd2a0f9eb: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 20:7b:d2:a0:f9:eb brd ff:ff:ff:ff:ff:ff
クラスター退避の新しいオプション(force-stop
と stateful-stop
) ¶
新たにクラスターの退避オプションがいくつか追加されました。
これらは、インスタンス設定の cluster.evacuate
を使って、インスタンスごとに選択します。
force-stop
を使用すると、クリーンなシャットダウンのチャンスを与えられず、インスタンスは即時に停止します。このオプションでは、実行中の状態をディスクにフラッシュする機会がないため、インスタンスが実質的にステートレスであるときのみ意味があります。
stateful-stop
を使用すると、インスタンスを停止する前に、インスタンスの状態がディスクに書き込まれます。リストア時、インスタンスの状態も復元され、インスタンスが中断したところから処理を続行します。
ホストインスタンスのシャットダウン動作を設定する機能 ¶
新たな設定として、boot.host_shutdown_action
が追加されました。次の値を設定できます:
stop
(普通のシャットダウン動作)force-stop
(前の説明を参照)stateful-stop
(前の説明を参照)
この機能により特に、ホストのシャットダウン時に多数の仮想マシンをステートフルに停止し、その後起動時に復元することが簡単になります。
インスタンス作成の一部として起動まで行う機能 ¶
小さな API の最適化が行われ、インスタンスの作成リクエストの一部として、インスタンスを開始できるようになりました。API 呼び出しが節約され、Incus API のスクリプト作成が容易になりました。
incus launch
も、この機能を使うようになりました。
Loki のインスタンス名が設定可能に ¶
イベントを Loki に送る際、Incus はデフォルトのラベルのセットを提供します。
これらには、instance
と location
ラベルが含まれます。ここで、instance
は、Incus のインスタンスではなく、Loki のイベントソースインスタンスを指すことに注意してください。
これまでのところこれらは、サーバーがクラスター内の別のサーバーから発信されたイベントを転送するという、あまり起こりそうもないイベントの場合のみ異なります。
代わりに、クラスター環境では、複数のクラスターが同じ Loki インスタンスを使う場合に簡単にフィルターできるように、何らかのクラスター名を提供する方法を準備するほうがはるかに合理的です。
その目的で、新たな設定として loki.instance
を導入しました。これを設定すると、instance
ラベルを上書きします。
デフォルトの Grafana ダッシュボードも更新されました。Loki の instance
ラベルが Prometheus のジョブ名と一致する前提で Loki イベントをフィルターできるようになりました。
file における HEAD サポートの拡張 ¶
Incus の file API の HEAD
メソッドが、Content-Length
ヘッダーでサイズを返すようになりました。
この機能の用途は主に、ファイル名とファイルタイプだけでなく、通常のファイルのサイズも表示できるようになったため、Incus のインスタンス file API 上にあるファイルマネージャーのようなものを構築するような場合です。
ランタイムデータの保存に /run/incus
を使用 ¶
これまで Incus は、インスタンスログのためのディレクトリーである /var/log/incus
以下に、ある種のランタイムデータを保存していました。これは明らかに適切な場所ではなく、ログファイルを頻繁にローテーションして expire するようなシステムで、いくつか問題を起こしていました。
この問題を解決するために、Incus 0.5 ではランタイムデータを /run/incus
に保存し、/var/log/incus
は実際のログファイル専用の場所にしました。
将来的には、より多くのデータが同様に /var/lib/incus
から /run/incus
へ移される可能性があります。
すべての変更点 ¶
このリリースのすべての変更のリストは次の通りです(翻訳なし):
すべてのChangeLogを見る
- incusd/instances/qemu: Don't fail event sending on missing agent
- incusd/network/ovsdb: Properly close the connections
- doc: Add Fedora installation instructions
- incusd/network/ovn: Use Mutate instead of Update
- incusd/network/ovs: Port BridgeDelete to OVSDB
- incusd/network/ovs: Port BridgeAdd to OVSDB
- incusd/network/ovs: Port BridgePortAdd to OVSDB
- incusd/network/ovn: Port LogicalSwitchPortIPs to OVSDB
- incus-doc: Don't try to guess types
- doc: Update configs
- doc/installing: Add Arch instructions
- lxd-to-incus: Clarify error messages
- doc/installing: Fix chocolatey link
- doc: Remove MicroCloud references
- incusd/network/ovn: Properly check transactions
- incusd/network/ovs: Properly check transactions
- incusd/network/ovn: Fix ChassisGroupChassisAdd
- incusd/network/ovn: Fix BridgeAdd
- incusd/network/ovn: Properly handle uplink with disabled DHCP/DHCPv6
- incus: Create config paths when no local daemons
- lxd-to-incus: Support alternative snap path
- incusd/device/pci: Detect USB bus
- incusd/device/nic: Support USB parents for physical NICs in VMs
- internal/instance: Add new volatile keys
- incusd/instance/qemu: Fix typo
- incusd/instance/qemu: Handle USB NIC hotremove
- incusd/networks: Don't Fill network configs when joining
- incus/create: Set Target after network/storage lookup
- doc/architectures: Add missing entries
- doc/architectures: Re-phrase headers
- doc/architectures: Fix typo
- doc/architectures: Add note about VM architectures
- doc/wordlist: Add Loongarch
- doc/migrate_lxd: Add mention of CLI configuration
- incus/snapshot: Fix format handling in list
- incus/snapshot: Add show sub-command
- i18n: Update translation templates
- incus: Enable cobra's completion support
- lxd-to-incus: Handle local OVN
- incusd/storage_pools: Don't crash on nil pool
- incusd/instance/lxc: Re-generate lxc.conf during Exec
- incusd/instance/qemu: Add ErrExecDisconnected
- incusd: Make VM shutdown/reboot exit cleanly
- lxd-to-incus: Fix incorrect directory name
- lxd-to-incus: Detect source daemon using symlink path
- lxd-to-incus: Remove trailing slashes from paths
- lxd-to-incus: touch completion file after migration
- incusd: Refresh the state on cluster put/join
- Makefile: Don't complain about shellcheck version
- golangci: Disable confusing-results
- shared/idmap: Remove Extend
- shared/idmap: Return all idmaps in DefaultIdmapSet
- shared/idmap: Split idrange
- shared/idmap: Split idmapset
- shared/idmap: Split idmap
- shared/idmap: Split ByHostid
- shared/idmap: Export non-Linux specific logic
- shared/idmap: Cleanup IdmapSet
- shared/idmap: Rename IdRange to IDRange
- shared/idmap: Cleanup IdmapEntry
- shared/idmap: Rename is_between to isBetween
- shared/idmap: Rename ByHostID and make it use IdmapSet
- shared/idmap: Update idmapset for modern standard
- shared/idmap: Rename the files
- shared/idmap: Move ByHostID back into set
- shared/idmap: Rename IdmapEntry to Entry
- shared/idmap: Rename IDRange to Range
- shared/idmap: Rename IdmapSet to Set
- shared/idmap: Fix import shadowing
- shared/idmap: Rename VFS3Fscaps to VFS3FSCaps
- shared/idmap: Add/tweak export function descriptions
- shared/idmap: Properly capitalize
- shared/idmap: Rename UIDShift to Shift
- shared/idmap: Update kernelDefaultMap to return multiple maps
- shared/idmap: Update comments
- shared/idmap: Add FilterPOSIX
- shared/idmap: Introduce NewSetFromIncusIDMap
- shared/idmap: Introduce NewSetFromJSON
- shared/idmap: Replace JSONMarshal with ToJSON
- shared/idmap: Introduce set_sort
- shared/idmap: Always use pointer receiver
- shared/idmap: Move remaining loaders to set_load
- shared/idmap: Run tests on all platforms
- shared/idmap: Introduce DefaultFullKernelSet
- shared/idmap: Introduce NewSetFromCurrentProcess
- shared/idmap: Remove GetSet
- shared/idmap: Introduce NewSetFromSystem
- shared/idmap: Remove kernelDefaultMap
- shared/idmap: Add Clone to Entry
- shared/idmap: Add Split to Set
- shared/idmap: Replace Shift functions with ShiftPath/UnshiftPath
- fuidshift: Update for idmap changes
- incusd: Update for idmap changes
- incus-user: Don't set raw.idmap when uid/gid aren't in system map
- shared/idmap: Add Includes to Set
- incusd: Simplify idmap serialization
- incusd/instance/lxc: Detect bad idmap and find new one
- shared/cliconfig: Improve error handling
- incusd/instance/qemu: Don't hardcode UEFI firmware in checkFeatures
- incusd/firewall/xtables: Fix iptablesClear on nft shim
- incus/network: add dynamic completions
- shared/idmap: Fix typo in comments
- incus/project: Get current project from connection info
- incusd/cluster: Ensure the cluster member config is always sorted
- Update madmin-go to support loong64
- server/seccomp: Add loongarch64
- shared/cgo: Add loongarch64
- shared/idmap: Don't change the json format
- shared/idmap: Document AddSafe and fix double records
- incusd: Update instance_test for shared/idmap fix
- incusd/instance/file: Add type and size to HEAD
- shared/idmap: Fix typo in comment
- api: disk_io_bus_virtio_blk
- doc: Add virtio-blk as option to io.bus
- incusd/device/disk: Add virtio-blk
- incusd/instance/qemu: Add virtio-blk support
- Move db backup functions to ClusterTx
- Move db image functions to ClusterTx
- Move db instance functions to ClusterTx
- Move db network ACL functions to ClusterTx
- Move db network forward functions to ClusterTx
- Move db network load balancer functions to ClusterTx
- Move db network peer functions to ClusterTx
- Move db profile functions to ClusterTx
- Move db network zone functions to ClusterTx
- Move db network functions to ClusterTx
- Move db snapshot functions to ClusterTx
- Move db storage bucket functions to ClusterTx
- Move db storage pool functions to ClusterTx
- Move db volume snapshot functions to ClusterTx
- Move db storage volume functions to ClusterTx
- Move db warning functions to ClusterTx
- cmd/incusd: Fix bulk unfreezing
- cmd/incus: Add
resume
command - i18n: Update translations
- incusd/loki: Replace complex backoff with simple loop
- gomod: Update dependencies
- incus-agent: Handle built-in vsock module
- gomod: Update dependencies
- README: Re-introduce weblate
- incusd/network/acl: Avoid nested DB transactions
- incusd/instance/qemu: Start using seabios as CSM firmware
- incusd/forknet: Handle wifi detach
- doc/CONTRIBUTING: Fix incorrect comamnd paths
- i18n: Manual update to french translation
- i18n: Update translation templates
- Translated using Weblate (French)
- tests: Add license check
- Revert "Update madmin-go to support loong64"
- gomod: Update dependencies
- incusd: Correctly update event location
- incusd/events: Upgrade to websocket as late as possible
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- api: loki_config_instance
- incusd/config: Add loki.instance
- incusd/loki: Add support for overriding instance name
- incusd: Add support for loki.instance
- doc: Update configs
- grafana: Add instance filters for Loki
- incusd/loki: Fix variable shadowing
- Translated using Weblate (Japanese)
- Translated using Weblate (Japanese)
- cmd/incusd/api_cluster: Join cluster transactions
- i18n: Remove empty translations
- api: instance_create_start
- shared/api: Add Start to InstnacesPost
- doc/rest-api: Refresh swagger YAML
- incusd/instance: Add support for Start property
- incus/launch: Use the Start property
- i18n: Update translation templates
- doc: Updates Windows install with Winget instructions
- doc: Add Winget to wordlist
- incusd/migration: Properly forward errors
- cmd/incus: Get owner mode only if
--gid
or--uid
is unset - cmd/incus: Add
incus file create
subcommand - test: Add tests for
incus file create
- i18n: Update translation templates
- Translated using Weblate (Japanese)
- Add note about scrape_interval and update examples
- cmd/incus: Remove unused
flagContent
variable inincus file create
- build(deps): bump actions/dependency-review-action from 3 to 4
- incusd/storage_volumes: Properly target refreshes
- incusd/storage_volumes: Use a single POST handler
- lxd-to-incus: Use Incus API client for LXD
- lxd-to-incus: Handle non-string LXD configs
- lxd-to-incus: Remove separate go package
- lxd-to-incus: Fix various issues
- Makefile: Update for lxd-to-incus
- gomod: Update dependencies
- incus/alias: Make default aliases visible
- incus: Mention aliases in help message
- i18n: Update translation templates
- incus: Handle non-existent home directory
- lxd-to-incus: Don't export internal functions
- lxd-to-incus: Fix error checking
- lxd-to-incus: Check that casting succeeded
- lxd-to-incus: Fix typo
- lxd-to-incus: Fix variable shadowing
- lxd-to-incus: Remove spurious printf
- lxd-to-incus: Add required comments
- lxd-to-incus: Simplify presence checks
- lxd-to-incus: Use field names in DottedVersion
- internal/util: Re-order path functions
- internal/util: Add RunPath
- incusd/sys: Add runtime directory
- incusd/seccomp: Move seccomp.socket to /run
- incusd/instance_logs: Drop conf files
- doc/rest-api: Refresh swagger YAML
- incusd/instance/common: Add RunPath
- incusd/instance/lxc: Move lxc.conf
- incusd/instance/qemu: Move qemu.conf
- doc: Update qemu.conf path
- incusd/apparmor: Add runtime directory
- incusd/instance/utils: Cleanup runtime path
- incusd/instance/lxc: Move files to runtime path
- incusd/instance/qemu: Move files to runtime path
- incusd/patches: Move files to runtime directory
- incusd/instance/qemu: Move agent loader to separate files
- incusd/apparmor/qemu: Remove mention of userns
- incusd/instance/qemu: Make config drive name configurable
- incusd/instance/qemu: Add new agent share
- incusd/apparmor/qemu: Allow access to agent path
- doc: Add INCUS_AGENT_PATH
- incusd/instance/qemu: Only expose config/agent drives over 9p
- incusd/instance/qemu/agent-loader: Remove virtiofs
- doc/getting_started: Point users to installing guide
- doc/installing: Cleanup distro instructions
- api_cluster: Optimize db transactions
- daemon_images: Optimize db transactions
- daemon_storage: Optimize db transactions
- images: Optimize db transactions
- storage_volumes_snapshot: Optimize db transactions
- instance/drivers: Optimize db transactions
- driver_ovn: Optimize db transactions
- network/acl: Optimize db transactions
- network/zone: Optimize db transactions
- storage_volumes: Optimize db transactions
- incusd/instance/qemu: Add some ArchLinux EDK2 filenames
- api_internal: Remove unreachable code
- doc/installing: Add Void Linux
- internal/instance: Don't use the node terminology
- doc: Update configs
- api: clustering_evacuation_stop_options
- internal/instance: Extend cluster.evacuate
- incusd/cluster: Add evacuation mode validation
- incusd/instance: Use a string for CanMigrate
- incusd/cluster: Update for CanMigrate
- incusd/cluster: Add stateful-stop and force-stop
- doc: Update configs
- api: boot_host_shutdown_action
- internal/instance: Add boot.host_shutdown_action
- doc: Update configs
- scripts/bash: Add boot.host_shutdown_action
- incusd/project: Add boot.host_shutdown_action
- incusd/instances: Add support for boot.host_shutdown_action
- incusd/instance: Fallback to stateless start when no state available
- internal/archive: Fix squashfs error handling
- 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/0.5
Incus クライアントの Winget パッケージ ¶
Winget 経由で、Windows ユーザー向けにクライアントツールが利用できます。
https://winstall.app/apps/LinuxContainers.Incus
サポート ¶
現在は初期段階ですので、Incus の各リリースは、次のリリースが出るまでしかサポートされません。LXC と LXCFS のリリースと合わせて LTS リリースを計画していますので、この状況はここ数ヶ月で変わるでしょう。
コミュニティサポートはこちらから : https://discuss.linuxcontainers.org
商用サポートはこちらから : https://zabbly.com/incus
バグはこちらから報告できます : https://github.com/lxc/incus/issues
Older news¶
- Incus 6.0 LTS リリースのお知らせ
- コンテナのスワップに対する制限
- 新しいシェル補完メカニズム
- 外部ブリッジインターフェースの作成
- リモートストレージからのディスクがアタッチされたVMのライブマイグレーション
- incus info --resources 中のシステム情報
- incus info --resources 中の USB デバイス
- 削除された機能
- 追加された機能
- Linux パッケージ
- Incus クライアントの Homebrew パッケージ
- Incus クライアントの Chocolatey パッケージ
- Incus クライアントの Winget パッケージ
- Incus 0.7 リリースのお知らせ
- ネットワークインテグレーション
- イメージサーバー管理ツール
- JSON Web トークン認証
- 設定可能な OIDC ユーザー名フィールド
- NUMA ハンドリングの改良
- USB デバイスを選択するための追加の方法
- VM 向けのディスク I/O スロットリング
- リモートごとのクライアント証明書
- クライアント証明書証明書キーペアのマニュアル生成
- lxd-to-incus の改良
- incus-migrate の改良
- イメージ制限の追加
- Linux 上に Incus サーバーをインストールする
- Incus クライアントの Homebrew パッケージ
- Incus クライアントの Chocolatey パッケージ
- Incus クライアントの Winget パッケージ
- Incus 0.6 リリースのお知らせ
- クラスター LVM ストレージドライバー
- ストレージバケットのバックアップとインポート
- すべてのプロジェクトをまたいだイメージのリスト表示
- 非特権コンテナ内の binfmt_misc
- 共有ブロックストレージボリュームの制御
- ネットワーク情報で OVN 論理ルーター名を表示
- イメージテンプレートのファイルの所有者とパーミッション
- 暗号化された EC クライアント証明書の鍵
- lxd-to-incus の改良
- Linux 上に Incus サーバーをインストールする
- Incus クライアントの Homebrew パッケージ
- Incus クライアントの Chocolatey パッケージ
- Incus クライアントの Winget パッケージ
- Incus 0.5.1 リリースのお知らせ
- VM エージェントを取得するための別の方法
- 退避中の停止中インスタンスのハンドリングの修正
- データベースパフォーマンスの修正
- Linux 上に Incus サーバーをインストールする
- Incus クライアントの Homebrew パッケージ
- Incus クライアントの Chocolatey パッケージ
- Incus クライアントの Winget パッケージ
- Incus 0.5 リリースのお知らせ
- Ansible, Terraform/OpenTofu and Packer
- Linux ディストリビューションパッケージ
- 翻訳
- 新機能
- Linux 上に Incus サーバーをインストールする
- Incus クライアントの Homebrew パッケージ
- Incus クライアントの Chocolatey パッケージ
- Incus クライアントの Winget パッケージ
- Older news