Back to the news overview

LXD 4.22 リリースのお知らせ

15th of January 2022

はじめに

LXD チームは LXD 4.22 のリリースをお知らせできることにとてもワクワクしています!

このリリースは今年初めてのリリースです。まったく新しい lxd-user デーモン、ドキュメントの改良、その他多くの小さな機能や改良を含む、かなり忙しいリリースでした。

Enjoy!

新機能とハイライト

最小要件の更新

LXD 5.0 LTS のリリースが近づきましたので、LXD をビルドして実行する最小要件を引き上げました。この理由は、依存しているもののいくつかが、古いバージョンの Go をサポートしなくなったという外部要因がほとんどです。

新しい要件は次の通りです:

  • Go 1.16 以上(LXD 5.0 では 1.17 に上がる可能性があります)
  • LXC 4.0.x
  • Linux 5.4

詳細はこちらにあります: https://linuxcontainers.org/lxd/docs/master/requirements/

ドキュメントの改良

LXD はドキュメントジェネレーターを Sphinx に変更しました。より複雑なマークアップとより良いレンダリングができるようになりました。

この結果は https://linuxcontainers.org/lxd/docs/master/ で見ることができます。

このリリースでは、コンテンツに関しては Getting started のセクションを再構築し、既存コンテンツの一部をシャッフルして改良しました。

これから数週間から数ヶ月の間で、より多くのドキュメントを再構築し、これまでより質の高い、情報が見つけやすいコンテンツを提供したいと考えています。

ユーザー用プロジェクトの管理デーモン

このリリースには、新しいオプショナルなデーモンである lxd-user が含まれます。このデーモンは、メインの LXD デーモンのプロキシーとして動作し、信頼度が低いユーザーが安全な方法で LXD とやりとりできるようにします。

その使用例として、すべてのユーザーが完全に信頼されているわけではないデスクトップシステム上での使用があります(必要なら root アクセスが与えられます)。LXD のセキュリティモデルでは、これらのユーザーは LXD への直接のアクセス権を与えられるべきではありません。LXD を使って特権を昇格させ、システムを乗っ取る可能性があるからです。

この代わりに、lxd グループに属するメンバーだけが直接 LXD と対話でき(そして、LXD に対するフルアクセスを取得し)、一方で users に属するユーザーは lxd-user と対話できるようにシステムを設定できます。

ユーザーが lxd-user に接続すると、自動的に次のようになります:

  • デーモンは LXD が初期化されているかどうかをチェックし、されていない場合は次を作成します:
    • default ストレージプール(zfs を優先的に試行し、dir にフォールバックします)
    • lxdbr0 ネットワーク
    • ストレージプールとネットワークで使う default プロファイル
  • 特定のユーザーが初めて lxd-user に接続する際は、次が行われます:
    • そのユーザーの TLS 証明書の生成
    • そのユーザー専用の新プロジェクトの生成
    • 生成した TLS 証明書をプロジェクトにひもづける
    • プロジェクトの default プロファイルのセットアップ
  • 最後に生成した認証用の TLS 証明書を使って、そのユーザーのリクエストを実際の LXD デーモンに転送します

エンドユーザーは、lxd-user との最初の対話は次のようになります:

foo@v1:~$ lxc list
To start your first container, try: lxc launch ubuntu:20.04
Or for a virtual machine: lxc launch ubuntu:20.04 --vm

+------+-------+------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+------+-------+------+------+------+-----------+

foo@v1:~$ lxc launch ubuntu:20.04
Creating the instance
Instance name is: welcome-earwig        
Starting welcome-earwig

foo@v1:~$ lxc list
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
|      NAME      |  STATE  |        IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| welcome-earwig | RUNNING | 10.31.36.109 (eth0) | fd42:fa4a:d38d:1c7b:216:3eff:fed1:63aa (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+

foo@v1:~$ lxc project list
+---------------------+--------+----------+-----------------+----------+------------------------------------------+---------+
|        NAME         | IMAGES | PROFILES | STORAGE VOLUMES | NETWORKS |               DESCRIPTION                | USED BY |
+---------------------+--------+----------+-----------------+----------+------------------------------------------+---------+
| user-1001 (current) | YES    | YES      | YES             | NO       | User restricted project for "foo" (1001) | 3       |
+---------------------+--------+----------+-----------------+----------+------------------------------------------+---------+

foo@v1:~$ lxc project show user-1001
config:
  features.images: "true"
  features.networks: "false"
  features.profiles: "true"
  features.storage.volumes: "true"
  restricted: "true"
  restricted.containers.nesting: allow
  restricted.devices.disk: allow
  restricted.devices.disk.paths: /home/foo
  restricted.devices.gpu: allow
  restricted.idmap.gid: "1003"
  restricted.idmap.uid: "1001"
description: User restricted project for "foo" (1001)
name: user-1001
used_by:
- /1.0/instances/welcome-earwig?project=user-1001
- /1.0/images/ced57a80f2b761c3cdab867c2296b801c6adfe521f811bacdd61410da4bc2734?project=user-1001
- /1.0/profiles/default?project=user-1001

これは、通常の LXD の使用とは少し異なります:

  • CLI は lxd init の実行は推奨しません(ユーザーには許可されていないため)
  • ユーザーは特定のプロジェクト(上記の例では user-1001)にロックされています
  • このプロジェクトはいくつかの安全で、ユーザー固有の設定に制限されています

この機能で、共有環境での LXD のインテグレーションがより簡単になることを期待しています。また、すべてがオンデマンドで行われ、ソケットアクティベーションをサポートしているので、LXD をその設定で出荷でき、システム上で必要になるまでリソースを使用することはありません。

エージェントなしでの VM メトリクス取得

VM の実行時のメトリクス取得のためのエージェントとのやりとりを無効化できるように、新たに security.agent.metrics 設定オプションを追加しました。仮想マシンでは、現在 LXD はゲスト内で動作する lxd-agent プロセスを使い、正確な CPU、メモリー、ディスク、プロセスの使用量を提供しています。

しかし、すべてのゲストが信用できるわけではなく、悪意のあるゲストが lxd-agent プロセスへの依存を悪用して、不正なリソース消費データをホストに送信するかもしれません。ある環境でメトリクスがどのように使われるかによりますが、これは課金に影響したり、どのゲストがすべてのシステムリソースを消費しているのかを追跡するのが非常に難しくなったりします。

この新しい設定オプションを false に設定すると、LXD は execfile セッションを確立するときだけエージェントとの通信を行います。それ以外の場合は、QEMU が報告するリソース消費量だけを使います。

MIG GPU UUID

A100 および同様の MIG をサポートする GPU の最近のバージョンでは、特定の MIG インスタンスを追跡するために使うデバイス識別子が変更されています。

以前は、各 MIG インスタンスが物理 GPU の UUID を使用していたので、特定の GPU インスタンス(GI)とコンピュートインスタンス(CI)を含めるために、LXD には mig.gimig.ci がありました。

最近のドライバーは各 MIG に専用の UUID を割り当てるので、mig.uuid オプションを追加する必要が出てきました。

クラスター待避のためのライブマイグレーション

LXD はいくつかのリリースで VM のライブマイグレーションをサポートするようになり、クラスター待避ロジックに接続するときがやってきました。

今回のリリースから、migration.statefultrueに設定(ライブマイグレーション、ステートフルスナップショット、ステートフルストップに必要)された仮想マシンは、停止→移動→再起動という処理ではなく、新しいクラスターメンバーへライブマイグレーションされるようになりました。

また、cluster.evacuatelive-migrate に設定して、この特定の動作を強制できるようになりました。以前の動作である停止→移動→再起動という動作を強制するには、代わりに cluster.evacuatemigrate に設定できます。

整合性のないインスタンスのコピー

インスタンス全体を停止またはフリーズすることなしに、簡単には一貫性のあるファイルシステムビューを提供できない dirlvmceph のようなストレージバックエンドを使っている場合、実行中にインスタンスをコピーすると、転送中にファイルがいくつか変更されたことを示す rsync のエラーで失敗する可能性があります。

実際にインスタンスを停止して再試行する代わりに、新たにコマンドライン引数 --allow-inconsistentlxc copy に追加されました。これは LXD に前述のような rsync のエラー(そのようなエラーのみ)を無視するように指示します。これは --refresh と組み合わせて使うと特に便利です。最後のわずかな変更を切り取って転送する準備が整うまで、繰り返し転送できます。

最適化されたインスタンス詳細情報 API

GET /1.0/instances/NAME エンドポイントに新たに ?recursion=1 モードを追加しました。これにより 1 つのリクエストで効率的に応答を提供する GET /1.0/instances での ?recursion=2 と同様の応答を提供します:

  • インスタンスの情報と設定
  • 現在の実行状態
  • スナップショットのリスト
  • バックアップのリスト

これは、1 つのクエリーを使って特定のインスタンスに関するすべての情報を取得したい場合に便利で、lxc CLI のいくつかのコマンドでも、この機能を使用するように変更を行っています。

TLS over unix socket

最後にとてもニッチな機能ですが、lxd-user デーモンで必要になった機能です。Unix ソケット経由で TLS 証明書を使った認証ができるようになりました。これは、ローカルソケット上で標準のクリアテキストセッションを使うのではなく、STARTTLS を使って LXD に TLS への切り替えを指示し、認証を行います。

lxd-user では、通常の(この特定のケースでは制限された)ユーザー証明書を使って、特定のユーザーとしてローカルの LXD に安全に接続し、ネットワーク経由で送信されたかのように LXD 処理させるためにこの機能を使えます。

すべての変更点(翻訳なし)

このリリースでの完全な変更点のリストは次の通りです:

すべてのChangeLogを見る
  • lxd/db/generate/db/mapping: Add Identifier method
  • tests: Bump pg_num to 16
  • lxd/events/events: Don't mention node in user facing error
  • lxd/events/event: Error quoting
  • lxd/cluster/events: Adds EventListenerWait to allow waiting for a event listener to connect
  • lxd/cluster/connect: Switch Connect to use EventListenerWait
  • lxd/cluster/heartbeat: Removes deprecated Raft field from heartbeat
  • test: Add 1s between running non-interactive exec and checking for exit status in operation
  • lxd: Add recursion=1 support for instanceGet
  • doc/rest-api: Refresh swagger YAML
  • api: Add instance_get_full extension
  • lxd/cluster/membership: Move notifyNodesUpdate call out of transaction in Join
  • lxc/list: Better handle --all-projects
  • doc: Fixed incorrect type of ceph.rbd.clone_copy.
  • lxd/cluster: Update not clustered error
  • lxd/db: Update comments
  • lxd/cluster: Handle no available migration target
  • fuidshift: Remove accidental binary build
  • lxd/device/nic/routed: Enable IP forwarding on veth host_name interface
  • test: Restores old routed NIC IPv4 forwarding behaviour
  • lxd/cluster/upgrade: Don't panic in UpgradeMembersWithoutRole in raft ID not found
  • lxd/cluster/upgrade: Comment clean up in UpgradeMembersWithoutRole
  • lxd/cluster/upgrade: Removes empty line in UpgradeMembersWithoutRole
  • lxd/cluster/upgrade: Improve variable naming in UpgradeMembersWithoutRole
  • lxd/cluster/upgrade: Error wrapping and dont use node term in user facing errors
  • lxd/cluster/upgrade: Adds additional logging to UpgradeMembersWithoutRole
  • gitignore: Ignore potential binaries
  • lxd/network/driver/bridge: Adds UsesDNSMasq function
  • lxd/network/driver/bridge: Improve comments
  • lxd/device/nic/bridged: Don't depend on dnsmasq pid file existence to write static allocation file
  • lxd/device/nic/bridged: Removes duplicated pid check when killing dnsmasq
  • lxc/utils: Make byName sort all columns
  • lxd/db/generate/db/method: Generate URIs from get-objects stmt
  • lxd/db: Replace 'name' generation comments and tags with 'objects'
  • shared/api/url: Don't allow 'none' as target
  • lxd/db/projects: Pass both project ID and Name to networks
  • lxd/db: Use api.NewURL for non-generated GetURIs
  • lxd/db: Remove unused URI fetching methods
  • lxd/db/generate/db/stmt: Remove 'name' statement generation
  • lxd/db/db: Duplicate urlsToResourceNames from client/util.go
  • lxd/db/projects: Add generator comment for fetching projects by ID
  • lxd/db: Update generated code
  • lxd/db/node: Fix handling of groups
  • lxd/db/node: Support limiting to set of groups
  • lxd: Update GetNodeWithLeastInstances usage
  • lxd/instances: Rework cluster group handling
  • tests: Fix clustering_groups tests
  • lxd/db/instance/profiles: Add missing error to stmt.Exec
  • lxd/api/cluster: Only take clusterMembershipMutex on leader
  • doc: use customized Furo theme
  • doc: customize footer
  • doc: add a header
  • doc: remove Vanilla theme from Makefile
  • lxd/db/cluster: Removes unused database views.
  • lxd/endpoints: Make socketUnixListen return a UnixListener
  • lxd/db/node: nodeIsOffline should always use UTC
  • lxd/api/cluster: Improve logging
  • lxd/cluster/heartbeat: Adds NewAPIHearbeat function
  • lxd/cluster/heartbeat: Adds HearbeatCancelFunc
  • lxd/cluster/heartbeat: Export HeartbeatRestart
  • lxd/cluster/membership: Set tx.SetNodeHeartbeat in Join
  • lxd/cluster/membership: Renames notifyNodesUpdate to NotifyHeartbeat
  • lxd/cluster/gateway: Moves heartbeatLock to other heartbeat related variables
  • lxd/daemon: Use contextual logging with local address in NodeRefreshTask
  • lxd/daemon: Adds heartbeatHandler function
  • lxd/daemon: Update nodeRefreshTask to only perform role changes if called from leader heartbeat send
  • lxd/cluster/gateway: Pass HeartbeatHandler into HandlerFuncs
  • lxd/cluster/gateway: Error message and log improvements
  • lxd/api: d.gateway.HandlerFuncs usage
  • lxd/cluster/heartbeat: Initialise unavailableMembers as empty slice in heartbeat
  • lxd/cluster/heartbeat: Updates HeartbeatTask to skip starting new heartbeat if already running
  • lxd/endpoints: Add STARTTLS and BufferedUnixConn wrappers
  • lxd/ucred: Add support for BufferedUnixConn
  • lxd/endpoints: Add STARTTLS support on unix socket
  • lxd: Allow TLS auth on unix socket
  • lxd/device/nic/routed: Don't setup auto gateway if IP family not in use
  • test: Adds test for single family routed NIC operation
  • lxd/db: Updates GetInstanceNamesByNodeAddress to also return project name.
  • lxd: Prevents overwriting instances with same name but different project.
  • test: Adds tests for passing through unix socket with disk device
  • lxd/device/disk: Open source with O_PATH to support directories and unix sockets
  • lxd/events/events: Renames noForward to localOnly
  • lxd/cluster/membership: Call EventsUpdateListeners locally from NotifyHeartbeat
  • lxd/cluster/heartbeat: Improve logging
  • lxd: Uses api.NewURL and sets project when querying other nodes.
  • doc: reuse content from the repo README in the doc index
  • doc: move relevant files out of .github folder
  • lxd/bgp: Port to v3 of gobgp
  • gomod: Update dependencies
  • lxd/instance/drivers/qemu: Move network state to separate function
  • shared/instance: Add security.agent.metrics
  • doc/instances: Add security.agent.metrics
  • lxd/instance/drivers/qmp: Extend commands
  • lxd/db/cluster: Adds not null constraint to all description columns.
  • lxd/db/cluster: Adds empty description to node 1 when opening the db.
  • lxd/db: Adds empty description where null constraints are violated.
  • lxd/db: Removes usages of sql.NullString with descriptions.
  • lxd/instance/drivers: Add QEMU metrics
  • lxd/instance/drivers/qemu: Add agentMetricsEnabled helper function
  • lxd/instance/drivers/qemu: Use qemu metrics if set
  • lxd/instance/drivers/qemu: Validate security.agent.metrics for state
  • doc/api-extensions: Fix header formatting
  • api: Add qemu_metrics extension
  • doc: fix link in README
  • lxd/clustert/heartbeat: Logging improvements in Send
  • lxd/cluster/info: Logging improvement in loadInfo
  • lxd/cluster/membership: Logging improvement
  • lxd/api/cluster: No need to call cluster.EventsUpdateListeners in internalClusterPostRebalance
  • test: Add short sleep for clustering rebalance to allow raft nodes to settle after join
  • lxd/migrate: Change allConnected channel in migrationSourceWs to be struct{}
  • lxd/migrate: Change allConnected channel in migrationSink to be struct{}
  • lxd/util/net: Adds SetTCPTimeouts and ExtractTCPConn functions
  • lxd/cluster/gateway: Updates dqliteProxy to use util.ExtractTCPConn and util.SetTCPTimeouts
  • lxd/migrate: Updates migrationSourceWs to use util.ExtractTCPConn and util.SetTCPTimeouts
  • lxd/migrate/instance: Defers a call to disconnect in migrationSourceWs Do
  • lxd/daemon: Introduce daemonStorageSplitVolume
  • lxd/images: Don't cleanup unknown images from shared volume
  • lxd: Checks that the host node is clustered before editing.
  • lxc/alias: Allows users to reference specific arguments.
  • lxd/cluster/heartbeat: Cancel APIHeartbeat Send during spread sleep if context is cancelled
  • lxd/cluster/heartbeat: Detect aborted heartbeat round quicker
  • lxd/cluster/heartbeat: Move defer setup to after lock is released
  • lxd/cluster/heartbeat: Move clustered check before locking and context setup
  • lxd/cluster/events: Rework listener connect notification to support multiple addresses
  • lxd/cluster/connect: EventListenerWait usage in Connect
  • client/events: Get lock before checking e.disconnected in Disconnect
  • client/lxd: Adds eventConn to store events websocket connection
  • client/lxd/events: Store events websocket connection in getEvents
  • lxd/cluster/membership: Update NotifyHeartbeat to have access to gateway so it can cancel ongoing heartbeat
  • lxd/cluster/events: Close client connection on events get failure in eventsConnect
  • lxd/cluster/events: Use looked up listener rather than doing another map retrieval
  • client/events: Replace chActive and disconnected with context
  • lxd/events/events: Improve logging in Listener
  • lxd/events: Removes duplicate event connection logging
  • lxd-agent/events: Removes unnecessary logging in eventsSocket
  • lxd/cluster/events: Clarify event connections are clients to another server
  • lxd/cluster/recover: Return separate error if no raft role found
  • lxd: Fix progress indicator for 'lxc export'
  • doc: Bump minimum Go to 1.16
  • doc: Bump minimum LXC to 4.0.0
  • doc: Bump minimum kernel to 5.4
  • gomod: Update dependencies
  • lxd/device/gpu: Add support for mig.uuid
  • api: gpu_mig_uuid
  • doc/instances: Add mig.uuid on MIG GPU
  • shared/network: Differentiate websocket network errors
  • lxd/instance/exec: Simplify websocket error handling
  • lxd/instance/drivers/driver/qemu/cmd: Don't attempt to send signal to lxd-agent exec process if finished
  • lxd/instance/drivers/driver/qemu/cmd: Run cleanup function after command has finished in Wait
  • lxd/instance/exec: Close attachedChildIsDead channel first in finisher
  • lxd/instance/exec: Only attempt to kill process if still running when a control connection error occurs
  • lxd-agent/exec: Close attachedChildIsDead channel first in finisher
  • lxd-agent/exec: Only attempt to kill process if still running when a control connection error occurs
  • daemon: fix feature indentation
  • lxd: Fix overriding public property by auto-update
  • lxd/db/storage/volumes/snapshots: Update GetExpiredStorageVolumeSnapshots to support sql.NullTime ExpiryDate field
  • lxd/instance/drivers: Specify number of USB ports
  • doc: improve placement of header
  • lxd/db/backups: Fixes GetStoragePoolVolumeBackups to handle null StoragePoolVolumeBackup.ExpiryDate
  • doc: fix broken include
  • doc: fix links in contributing docs
  • shared/network: Differentiate websocket handler function debug messages
  • lxd-agent/exec: Treat websocket.CloseMessage the same as websocket disconnection
  • lxd/instance/exec: Treat websocket.CloseMessage the same as websocket disconnection
  • doc: change file inclusion to use comments instead of text
  • automatically add labels to PRs that contain doc changes
  • api: Move storage_volume Writable() function
  • api: Add Writable() function for storage snapshot
  • lxc/storage_volume: Properly handle snapshots in set
  • i18n: Update translation templates
  • lxd/instance: Prevent nvidia.runtime on privileged containers
  • shared/usbid: Document reasons to fork
  • shared/log15: Remove fork
  • lxd: Update imports for log15
  • lxd-agent: Update imports for log15
  • client: Update imports for log15
  • lxc: Update imports for log15
  • shared/logging: Update imports for log15
  • shared: Update imports for log15
  • shared/logging: Update for current log15
  • gomod: Update dependencies
  • gomod: Update go-dqlite dependency to include fix for local timezone conversion removal
  • doc: fix scrolling in tables
  • doc: remove spaces at the end of the line
  • doc: prevent linking of .ci, .as and similar
  • doc: remove manual list of components
  • api: Adds event_project extension
  • shared/api/event: Adds Project field to Event struct
  • doc/rest-api: Refresh swagger YAML
  • lxd/events/events: Rename group concept to projectName
  • lxd/events/events: Store project name inside event and update broadcast to use it
  • client/lxd: Change eventListeners to be keyed on project name using map[string][]*EventListener
  • client/events: Add projectName field to store project that event listener is using
  • client/events: Update Disconnect to use listener projectName to clear listeners
  • client/lxd/events: Use connection's project and allProjects argument to maintain listeners keyed on project name
  • client/lxd: Convert eventConn to map of connections keyed on project
  • client/connection: Initialise eventListeners and eventConns
  • client/lxd/events: Save websocket connections by project
  • client/lxd/server: Initialise websocket event listeners and connections in UseProject and UseTarget
  • lxd/lifecycle/instance: Use URL builder in Event
  • lxd/instance/drivers/driver/lxc: Update devlxdEventSend to use map[string]interface{}
  • lxd/instance/drivers/driver/qemu: Update devlxdEventSend to use map[string]interface{}
  • lxd/events: Move common functionality between external and devlxd servers into common file and types
  • lxd/events/devlxdEvents: Adds devlxd event server
  • lxd/events/common: listenerCommon
  • lxd/events/events: Server
  • lxd/events/devlxdEvents: DevLXDServer
  • lxd/state/state: Update DevlxdEvents to events.DevLXDServer
  • lxd/daemon: Switch to using events.DevLXDServer for devlxdEvents
  • lxd/devlxd: d.devlxdEvents.AddListener usage
  • lxd/instance/drivers/driver/lxc: d.state.DevlxdEvents.Send usage in devlxdEventSend
  • lxd-agent/events: Remove lxd-agent as location in eventsSocket and subscribe to all project events
  • github: Add API label to labeler
  • lxd/device/disk: Ensure disk FDs are marked CLOEXEC
  • lxd/fsmonitor/drivers/driver/fanotify: Ensure FDs are marked CLOEXEC
  • lxd/seccomp/seccomp: Ensure FDs are marked CLOEXEC
  • lxd/storage/drivers/utils/cgo: Ensure FD is opened with CLOEXEC in get_unused_loop_dev_legacy
  • lxd/util/net: Fix return value in ExtractTCPConn
  • lxd/events/common: Import ordering
  • lxd/events/common: Adds support for receiving events from listener client
  • lxd/events/events: Adds receive event handler to AddListener
  • lxd/events: d.events.AddListener usage
  • lxd-agent/events: d.events.AddListener usage
  • client/interfaces: Adds SendEvent function signature
  • client/lxd: Adds eventConnsLock to control write access to eventConns
  • client/lxd/events: Use r.eventConnsLock to control access to r.eventConns
  • client/lxd/events: Implement SendEvent function
  • lxd/instance/qemu: Always set memory sharing on memory-backend-file
  • lxc/exec: Expose interactive to handler
  • lxc/exec: Don't send SIGWINCH when non-interactive
  • fsmonitor: s/syscall.CloseOnExec()/unix.CloseOnExec()/g
  • fsmonitor: close fd from open_by_handle_at()
  • lxd/main: Automatically attempt live-migration during cluster evacuation.
  • doc: Update cluster.evacuate to include new 'live-migrate' option
  • api: Add 'live-migrate' config option to cluster.evacuate.
  • lxd: Export storage pool availability functions
  • lxd-user: Initial implementation
  • lxd-user: use atomic operations
  • lxd-user: Fix default network name
  • lxc: Support for restricted projects on unix socket
  • lxd-user: Reduce verbosity
  • lxd: ensure file descriptors are closed before starting container
  • lxd/db/cluster: Fixes v19 migration for sqlite 3.37.
  • lxd/network: Fixes misspelling of interface.
  • api: Adds instance_allow_inconsistent_copy extension.
  • shared/api: Adds AllowInconsistent to instance source.
  • client: Adds AllowInconsistent to InstanceCopyArgs.
  • lxd/migration: Adds AllowInconsistent flag to VolumeSourceArgs.
  • lxd/storage/drivers: Ignore rsync error 24 if allowInconsistent.
  • lxd/storage: Adds allowInconsistent to pool interface.
  • lxd: Passes allowInconsistent from instance source to pool method.
  • lxc/copy: Adds --allow-inconsistent flag.
  • lxc/move: Adds --allow-inconsistent flag.
  • i18n: Updates translation templates.
  • doc/rest-api: Refresh swagger YAML
  • lxd/storage/ceph: Align standard arguments
  • lxd/storage/ceph: Always pass user/id to ceph/rbd
  • doc: only link the Swagger files that we actually need
  • lxd/device: Adds ping check for nic routed device.
  • i18n: Update translations from weblate
  • gomod: Update dependencies

試用環境

この新しい LXD リリースは私たちの デモサービス で利用できます。

ダウンロード

このリリースの tarball は ダウンロードページ から取得できます。

ビルド済みバイナリーは次のように使えます:

  • Linux: snap install lxd
  • MacOS: brew install lxc
  • Windows: choco install lxc