News

LXD 2.20 release announcement 15th of November 2017

Features:

  • New lxc console subcommand and console API to attach to the container's boot console or retrieve the boot log
  • New lxc operation subcommand to list and cancel background operations.
  • Added support for SR-IOV network devices (nictype=sriov) including dynamic allocation of new virtual functions
  • Support for delegated external authentication through macarroons (using the go-bakery v2 protocol)

Bugfixes:

  • client: Add GetOperationUUIDs and GetOperations
  • client: Name all the return values in interfaces
  • doc: Fix markdown escaping
  • doc: Sort container config keys
  • doc: Sort network config keys
  • doc: Sort server.md config keys
  • doc: Sort storage config keys
  • extra: Update bash completion for all the new keys
  • global: Fix a number of unchecked variables
  • global: Fix some typos
  • global: Revert "Temporary workaround for log15 API breakage"
  • global: Switch to the built-in log15
  • lxc/file: Log downloads/uploads (Issue #4018)
  • lxc/network: Fix error message
  • lxd-benchmark: use NewConfig to get a default configuration
  • lxd/containers: Detect version at runtime (Issue #3934)
  • lxd/containers: Don't allow removing lxc.conf or lxc.log
  • lxd/containers: Rename container.StateObject() to container.DaemonObject()
  • lxd/daemon: Add a endpoints.Endpoints class for managing HTTP endpoints
  • lxd/daemon: Add cpu profiling and goroutines printing to the debug sub-package
  • lxd/daemon: Add error messages to lxdTestSuite setup and teardown
  • lxd/daemon: Add initial Go-level daemon integration-like test
  • lxd/daemon: Add lxd/config sub-package implementing structured config maps
  • lxd/daemon: Add lxd/task sub-package for running functions periodically
  • lxd/daemon: Add new debug sub-package with support for memory profiling
  • lxd/daemon: Add node.Config high-level API for modifying node-level config
  • lxd/daemon: Cleanup test state at every test, to improve isolation.
  • lxd/daemon: Control all goroutines spawned in Daemon.Ready() using task.Task
  • lxd/daemon: Don't skip Daemon.Ready() in tests, it can be run unconditionally
  • lxd/daemon: Don't use global path variables in sys.OS
  • lxd/daemon: Drop logging setup in Daemon.Init()
  • lxd/daemon: Drop support for "setup mode"
  • lxd/daemon: Drop the containerLXC.OS() convenience
  • lxd/daemon: Drop unnecessary checks on MockMode
  • lxd/daemon: Extract initialization of the REST and /dev/lxd http Server
  • lxd/daemon: Gracefully cancel tasks on daemon shutdown
  • lxd/daemon: Improve error on invalid config key (Issue #3925)
  • lxd/daemon: Move directory initialization to sys.OS.
  • lxd/daemon: Move execPath global variable to sys.OS.ExecPath
  • lxd/daemon: Move global aaAdmin global variable to sys.OS
  • lxd/daemon: Move global aaAvailable global variable to sys.OS
  • lxd/daemon: Move global aaConfined global variable to sys.OS
  • lxd/daemon: Move global aaStacking global variable to sys.OS
  • lxd/daemon: Move global cgBlkioController global variable to sys.OS
  • lxd/daemon: Move global cgCpuController global variable to sys.OS
  • lxd/daemon: Move global runningInUserns global variable to sys.OS
  • lxd/daemon: Move optional Daemon config values to DaemonConfig
  • lxd/daemon: Move remaining global cgXXX global variables to sys.OS
  • lxd/daemon: Move util.AppArmorCanStack to a private appArmorCanStack in lxd/sys
  • lxd/daemon: Streamline Daemon init and shutdownn
  • lxd/daemon: Track the lifecycle of the goroutine performing log expiration
  • lxd/daemon: Tweak schedule function for pruning images
  • lxd/daemon: Use instance-level cache dir variable instead of the environment one
  • lxd/daemon: Use instance-level log dir variable instead of the environment one
  • lxd/daemon: Use instance-level var dir variable instead of the environment one
  • lxd/daemon: Wire debug utilities into main_daemon.go
  • lxd/daemon: Wire endpoints.Endpoints into Daemon
  • lxd/db: Add a db.NodeTx structure to abstract away low-level transactions
  • lxd/db: Add a Schema.Fresh() method to set a "bootstrap" SQL statement
  • lxd/db: Add db APIs for fetching and changing node-local config values
  • lxd/db: Add db.NewTestNode helper for database-related unit tests
  • lxd/db: Add low-level query helpers for changing config tables
  • lxd/db: Add query.Count utility
  • lxd/db: Add Schema.ExerciseUpdate() for testing a individual update
  • lxd/db: Add support for gracefully aborting schema.Ensure
  • lxd/db: Complete moving schema creation logic to schema.Schema
  • lxd/db: Convert a few call sites of sql.DB.Begin to db.DB.Begin
  • lxd/db: Convert remaining call sites of the low-level db.Begin function
  • lxd/db: Drop all references to Daemon.nodeDB
  • lxd/db: Fix spurious tx.Exec argument in lxd/db/schema/query.go
  • lxd/db: Move certificate db APIs to the db.Node facade
  • lxd/db: Move container db APIs to the db.Node facade
  • lxd/db: Move devices db APIs to the db.Node facade
  • lxd/db: Move image db APIs to the db.Node facade
  • lxd/db: Move network db APIs to the db.Node facade
  • lxd/db: Move node-level schema updates to their own db/local/ sub-package.
  • lxd/db: Move patches db APIs to the db.Node facade
  • lxd/db: Move profile db APIs to the db.Node facade
  • lxd/db: Move storage db APIs to the db.Node facade
  • lxd/db: Remove direct use of the low-level db.Exec() func outside of lxd/db/
  • lxd/db: Rename Daemon.db to Daemon.nodeDB
  • lxd/db: Rename db.Exec to db.exec, making it unexported
  • lxd/db: Rename db.QueryScan to db.queryScan, making it unexported
  • lxd/db: Rename db_test.go to db_internal_test.go, since it's white box
  • lxd/db: Rename State.DB to State.NodeDB
  • lxd/db: Return the initial schema version in Schema.Ensure()
  • lxd/import: Use the right VG name on delete
  • lxd/main: Fix output of --print-goroutines-every
  • lxd/networks: Don't require a 1400 MTU with tunnels (Issue #3999)
  • lxd/seccomp: Fix security.syscalls.blacklist handling
  • lxd/storage: Drop the storageShared.OS() convenience
  • lxd/storage: Generate new UUID on thinpools for btrfs
  • lxd/storage/zfs: Try to import missing zpools (Issue #3976)
  • lxd/storage/zfs: Update for newer ZFS releases (Issue #3986)
  • shared: Add a shared.KeyPairAndCA function to get coventionally named certs
  • shared: Fix file transfers to/from stdin/stdout in snap
  • shared: Make current gofmt happy
  • shared/api: Add API extension label to AuthMethods
  • shared/log15: Vendor a copy of log15 in shared/log15
  • shared/logger: Add helper to redirect the global logger to the testing logger
  • shared/logging: Add freebsd build conditional to log_posix.go
  • shared/version: Extract the APIExtensions list from api10Get
  • shared/version: Split version declarations in shared/version into several files
  • tests: Add test for unique btrfs UUID generation
  • tests: Add test for unused variables
  • tests: Check for typos
  • tests: Don't use godeps for import check
  • tests: Skip prlimits on liblxc < 2.1
  • tests: Update for new dependencies

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.11 release announcement 19th of October 2017

This is the eleventh bugfix release for LXD 2.0.

The changes since LXD 2.0.10 are

Minor improvements:

  • LXD 2.0.11 is now snap aware and can be installed from the "2.0" track.
  • The documentation is now available on ReadTheDocs: https://lxd.readthedocs.io/en/stable-2.0/
  • It's now possible to interrupt image downloads.
  • Added a new security.idmap.base config key (overrides the base uid/gid of the container).
  • Added support for delta image downloads.
  • Implemented instance types as a proxy for resource limits.
  • The user-agent string was expanded to include OS and kernel information.
  • The client library and related code is now kept in sync with master.
  • The command line client has been ported to the new client library.

Bugfixes:

  • client: Add CancelTarget to RemoteOperation
  • client: Add CreateContainerFromImage function
  • client: Added insecureSkipVerify flag the ConnectionArgs struct
  • client: Add extra exec option to block on I/O
  • client: Add GetServerResources()
  • client: Add GetStoragePoolResources()
  • client: Add image_create_aliases backward compat
  • client: Add RenameStoragePoolVolume()
  • client: Allow canceling image download from LXDs
  • client: Allow specifying base http client
  • client: Cleanup code duplication in image download code
  • client: Commonize error handling
  • client: Don't live migrate stopped containers
  • client: Drop experimental tag from new client
  • client: Fail if source isn't listening on network
  • client: Fix crash in operation handler
  • client: Fix crash when missing cookiejar
  • client: Fix handling of public LXD remote
  • client: Fix image copy
  • client: Fix non-interactive exec hangs
  • client: Fix potential race in event handler setup
  • client: Fix race condition in operation handling
  • client: Implement container and snapshot copy
  • client: Implement push and relay container copy
  • client: Implement remote operations
  • client: Improve error on image copy
  • client: Improve migration relay code
  • client: Keep track of protocol
  • client: Make it possible to retrieve HTTP client
  • client: Make the authentication Interactor configurable
  • client: Move CopyImage to the target server
  • client: Only set file headers if value is provided
  • client: Properly handle remote disconnections
  • client: Reduce request logging to Debug
  • client: Simplify ConnectPublicLXD logic
  • client: Support for macaroons-based authentication
  • client: Sync with master branch
  • client: Use RemoteOperation for CopyImage
  • config: Add support for CookieJar
  • config: Try to be clever about ":" in snapshots
  • doc: Add a note about blkio limits
  • doc: Add section on macvlan vs bridge
  • doc: Add SUPPORT.md
  • doc: Document instance types
  • doc: Document that squashfs images can also be used
  • doc: Document the exec control API
  • doc: Extend/rework security-related documentation.
  • doc: Fix lxd.log location in issue template
  • doc: Fix spaces, commas, quotes, brackets where needed
  • doc: Initial documentation of container env
  • doc: Refresh the issue template
  • doc: Seriously rework the content of the README
  • doc: Sort container config keys
  • doc: Sort server.md config keys
  • doc: Update containers.md
  • extra/lxc-to-lxd: Fix bad test
  • extra/lxc-to-lxd: Ignore capabilities dropped by default
  • extra/lxc-to-lxd: Ignore sysfs/proc mounts
  • extra/lxc-to-lxd: Properly handle lxc.seccomp
  • i18n: Update Japanese translation (for stable-2.0)
  • lxc: Add plumbing for operation cancelation
  • lxc: Cross-platform HOME handling
  • lxc: Fix help to provide sample that actually works
  • lxc: Fix import crash when adding properties
  • lxc: Fix race in progress reporter
  • lxc: Properly record alias source on copy
  • lxc: Re-introduce remote protocol migration
  • lxc: Respect HOME if set
  • lxc/config: Removal of multiple devices at once
  • lxc/copy: Report progress data
  • lxc/delete: Fix lxc delete --force description
  • lxc/exec: Fix signal handler for Windows
  • lxc/exec: Fix Windows port
  • lxc/file: Fix file push/pull with names containing spaces.
  • lxc/file: Read file perms from Windows FS
  • lxc/file: Use shared.HostPath for push/pull
  • lxc/image: Always use long fingerprint in exported filenames
  • lxc/image: Expose the "cached" flag
  • lxc/image: Fix aliases with simplestreams remotes
  • lxc/image: Fix "lxc image copy" not recording the source
  • lxc/image: Fix regression in exported filename
  • lxc/image: Improve filter handling
  • lxc/image: Make "lxc image copy" fast again
  • lxc/image: Update image aliases when they already exist
  • lxc/image: Use shared.HostPath for import/export
  • lxc/init: Fix failure to launch containers with random names
  • lxc/list: Error if --columns and --fast are used together
  • lxc/move: Use force on delete
  • lxc/publish: Fix fingerprint printing
  • lxc/remote: Don't require a cert for public remotes
  • lxc/utils: Avoid potential progress race condition
  • lxc/utils: Println doesn't do format strings
  • lxd-benchmark: Add CreateContainers function
  • lxd-benchmark: Add csv reporting
  • lxd-benchmark: Add freezeContainer function
  • lxd-benchmark: Add processBatch function, use it in SpawnContainers and DeleteContainers
  • lxd-benchmark: Add "spawn" as equivalent but deprecated to "launch"
  • lxd-benchmark: Add start and stop commands
  • lxd-benchmark: Add StartContainers function
  • lxd-benchmark: Add StopContainers function
  • lxd-benchmark: Change name of spawn command to launch
  • lxd-benchmark: Extract deleteContainer and copyImage functions
  • lxd-benchmark: Extract ensureImage function
  • lxd-benchmark: Extract getBatchSize function
  • lxd-benchmark: Extract GetContainers function
  • lxd-benchmark: Extract logic to separate package
  • lxd-benchmark: Extract PrintServerInfo function
  • lxd-benchmark: Extract printTestConfig function
  • lxd-benchmark: Fix ensureImage when a local alias is passed
  • lxd-benchmark: Fix local image handling
  • lxd-benchmark: Return operations duration
  • lxd-benchmark: Split private functions to separate files
  • lxd-benchmark: Use NewConfig to get a default configuration
  • lxd: Add initial lxd/sys sub-package and OperatingSystem structure
  • lxd: Fix typo now -> know
  • lxd: Make .dir-locals.el play nice with flycheck
  • lxd: Replace some uses of InternalError with SmartError
  • lxd: Use sql.DB or sys.OS instead of Daemon where possible
  • lxd/apparmor: Drop useless apparmor denies
  • lxd/apparmor: Support new stacking syntax
  • lxd/containers: Allow passing disk devices with the LXD snap
  • lxd/containers: Better handle errors in memory reporting
  • lxd/containers: Check for container mountpoint too
  • lxd/containers: Check whether disk device exists
  • lxd/containers: Cleanup volatile keys on update
  • lxd/containers: Detect POLLNVAL when poll()ing during exec
  • lxd/containers: Fix readonly mode for directory mount
  • lxd/containers: Make "dev" work as a network interface name
  • lxd/containers: Remove from db on storage failure
  • lxd/containers: Show underlying error when container delete fails
  • lxd/containers: Update to support LXC 2.1 configuration keys
  • lxd/containers: Use lxc.network.N.
  • lxd/daemon: Don't update images while pruning
  • lxd/daemon: d.os.Init must be run after all paths are created
  • lxd/daemon: Extract Daemon.ExpireLogs into a standalone function
  • lxd/daemon: Extract Daemon.GetListeners into a standalone function
  • lxd/daemon: Extract Daemon.httpClient into a standalone HTTPClient function
  • lxd/daemon: Extract Daemon.ListenAddresses into a standalone function
  • lxd/daemon: Extract Daemon.PasswordCheck into a standalone function
  • lxd/daemon: Extract Daemon.SetupStorageDriver into a standalone function
  • lxd/daemon: Finish replacing Daemon with State also in higher-level entity APIs
  • lxd/daemon: Fix handling of config triggers
  • lxd/daemon: Improve error on invalid config key
  • lxd/daemon: Log a warning for unknown config keys and don't crash
  • lxd/daemon: Move Daemon.BackingFs to the OS struct
  • lxd/daemon: Move Daemon.IdmapSet to OS.IdmapSet
  • lxd/daemon: Move Daemon.isRecursionRequest to the lxd/util sub-package
  • lxd/daemon: Move Daemon.lxcpath to OS.LxcPath
  • lxd/daemon: Move Daemon.MockMode to OS.MockMode
  • lxd/daemon: Move Deamon.CheckTrustState and Deamon.isTrustedClient to lxd/util
  • lxd/daemon: Move filesystemDetect function into lxd/util subpackage.
  • lxd/daemon: Move lxd/util.go into its own lxd/util/ sub-package
  • lxd/daemon: Replace Daemon with State in all model entities
  • lxd/daemon: Reset the images auto-update loop when configuration changes
  • lxd/daemon: Simplify time channels
  • lxd/daemon: Use select and save goroutines
  • lxd/db: Add db/query sub-package with common query helpers
  • lxd/db: Add db/schema sub-package for managing database schemas
  • lxd/db: Add query.Transaction
  • lxd/db: Add Schema.Dump() method for flattening a series of schema updates
  • lxd/db: Add schema.NewFromMap convenience to create a schema from a map.
  • lxd/db: Automatically generate database schema from database updates
  • lxd/db: Don't special-case mock mode unnecessarily in db patches
  • lxd/db: Drop dependencies on Daemon
  • lxd/db: Fix bad DB schema update between schema 30 and 31
  • lxd/db: Fix database upgrade logic not inserting interim versions
  • lxd/db: Move db*.go files into their own db/ sub-package
  • lxd/db: Separate db-level update logic from daemon-level one
  • lxd/db: Wire new schema code into db.go
  • lxd/devices: Add support for isolcpu in CPU scheduler
  • lxd/devices: Don't mark all cpus isolated by default
  • lxd/devices: Fix handling of major and minor numbers in device IDs
  • lxd/devices: Fix sorting order of devices
  • lxd/devices: Handle empty isolcpus set
  • lxd/devices: Take all 32 bits of minor device number
  • lxd/events: Fix race condition in event handlers
  • lxd/images: Actually get the list of images to remove
  • lxd/images: Always expand fingerprint
  • lxd/images: Carry old "cached" value on refresh
  • lxd/images: Clear error for image not found
  • lxd/images: Don't access the returned struct in case of error
  • lxd/images: Fix image refresh when fingerprint is passed
  • lxd/images: Fix ordering of compressor arguments
  • lxd/images: Fix potential double unlock
  • lxd/images: Fix private image copy with partial fp
  • lxd/images: Fix regression in image auto-update logic
  • lxd/images: Initialize image info in direct download case
  • lxd/images: Properly extract the image expiry
  • lxd/images: Respect disabled cache expiry
  • lxd/images: Store UploadedAt as RFC3399
  • lxd/init: Add a cmd.Parser helper for parsing command line flags
  • lxd/init: Consolidate interactive/auto init logic with the preseed one
  • lxd/init: Extract code asking init questions to individual methods
  • lxd/init: Extract logic to fill init data to standalone methods
  • lxd/init: Extract validation of --auto args into a separate method
  • lxd/init: Make the log cmdInit unit-testable
  • lxd/init: Move state-changing inline functions to own methods
  • lxd/init: Plug cmd.Parser into main.go
  • lxd/init: Properly set default port
  • lxd/main: Fix error message when log path is missing
  • lxd/migration: Fix live migration (bad URL in dumpsuccess)
  • lxd/networks: Don't require ipt_checksum
  • lxd/patches: Convert UploadedAt to RFC3399
  • lxd/rsync: Handle sparse files when rsyncing
  • lxd/shutdown: Only timeout if told to
  • lxd/storage/btrfs: Workaround btrfs bug
  • lxd/storage/dir: Unfreeze on rsync error
  • lxd/storage/rsync: Ignore vanished file warnings
  • Makefile: Fix static-analysis target
  • Makefile: Update pot before po
  • network: Do not update limits unconditionally
  • shared: Add wrapper to translate host paths
  • shared: Cleanup use of log
  • shared: Fix bad check for snap paths
  • shared: Fix growing of buf in GroupId
  • shared: Fix new golint warning
  • shared: Move GetRemoteCertificate from lxc/remote
  • shared: Move idmap/acl functions to a separate package
  • shared: Move testhelpers into shared/osarch for now
  • shared: Use custom error type for RunCommand
  • shared: Vendor the subtest compatibility schim in shared/subtest
  • shared: Websocket proxy should proxy everything
  • shared/api: Add API for editing containers metadata.yaml and template files
  • shared/api: Add container template files operations.
  • shared/api: Add server resource api structs
  • shared/api: Add storage pool resource api structs
  • shared/api: Add StorageVolumePost
  • shared/api: Add support for macaroons-based authentication indicator
  • shared/api: Extensions go at the bottom
  • shared/api: Implement complete push migration
  • shared/api: Migration: state{ful,less} snapshot migration
  • shared/api: Split storage in separate files for pools and volumes
  • shared/api: Sync with master branch
  • shared/canceler: Support canceling with parallel downloads
  • shared/canceler: Fix return value ordering
  • shared/canceler: Use request Cancel channel
  • shared/cmd: Don't depend on testify in the cmd package
  • shared/cmd: Update to match master
  • shared/idmap: Disallow hostids intersecting subids
  • shared/idmap: Fix numerous issues
  • shared/idmap: Fix tests
  • shared/idmap: Make ACL failures more verbose
  • shared/logger: Temporary workaround for log15 API breakage
  • shared/network: Add some more TLS ciphers
  • shared/network: Sync TLS handling with master
  • shared/osarch: Add function for parsing /etc/os-release
  • shared/osarch: Add missing architecture aliases
  • shared/osarch: Fix uname handling on some architectures
  • shared/util: Add helper to create tempfiles
  • shared/util: Extract helper to get uname
  • shared/util: Guess size when sysconf() returns -1
  • shared/util: Guess size when sysconf() returns -1
  • shared/util: Implement mountpoint checking
  • shared/util: More snap handling logic
  • shared/util: Shift xattr ACLs uid/gid
  • shared/util: Sync ParseLXDFileHeaders with master
  • shared/version: Add helper to get platform-specific versions
  • shared/version: Only include kernel version, not build id
  • tests: Add a test for read-only disks
  • tests: Add new dependencies
  • tests: Add performance regression tests
  • tests: Add storage helpers
  • tests: Add support for LXD_TMPFS to perf.sh
  • tests: Add test for disallowing hostid in subuid
  • tests: Also measure batch startup time in perf.sh
  • tests: bump image auto update limit to 20min
  • tests: Clear database state in the mock daemon after each lxdSuiteTest
  • tests: Don't attempt to finger public remotes
  • tests: Don't attempt to finger public remotes
  • tests: Don't copy running lvm/ceph containers
  • tests: Fix bad raw.lxc test
  • tests: Fix dependency check
  • tests: Fix image_auto_update test
  • tests: Fix image expiry test
  • tests: Fix shell return value masking
  • tests: Function to include storage backends helpers
  • tests: include lvm in image auto update
  • tests: More apparmor presence checking
  • tests: Refactor cleanup functions
  • tests: Setup basic channel handler for triggers
  • tests: Skip apparmor tests when no kernel support
  • tests: Split out lxc and lxd related helper functions
  • tests: Split out network-related helper functions
  • tests: Split out storage-related helper functions
  • tests: Split out test setup related helper functions
  • tests: Support running individual testify test suites
  • tests: Switch to new storage helpers
  • tests: Update perf.sh to "lxd-benchmark launch"
  • tests: use "--force" everywhere on stop
  • tests: Use in-memory db for tests (makes them faster)
  • tests: Use testimage for perf testing
  • tests: Validate that the right busybox is present
  • tests: Wait up to 2 minutes for image updates

Downloads

The release tarballs can be found on our download page.

LXD 2.19 release announcement 17th of October 2017

Features:

  • The LXD documentation is now available at https://lxd.readthedocs.io
  • A new "resources" API was added allowing to get CPU and memory information as well as storage pool sizes from the API. In the client, this maps to "lxc info --resources" and "lxc storage show NAME --resources".
  • A new set of limits.kernel.[limit name] container configuration keys are available to tweak the various kernel process limits for the container.
  • The command line client now has a number of "rename" subcommands, for profiles, networks and image aliases. The toplevel "rename" command was also updated to match.
  • The LXD API now allows renaming of custom storage volumes. In the client tool, this can be done through "lxc storage volume rename".
  • Extended the LXD user-agent to include the kernel version, architecture and OS name and release. This will allow LXD image servers to show a filtered image list when applicable.
  • Added a new insecureSkipVerify flag to ConnectionArgs struct in the client allowing to connect to a LXD host bypassing any kind of TLS validation.

Bugfixes:

  • doc: Document instance types
  • doc: Document that squashfs images can also be used
  • github: Add SUPPORT.md
  • github: Refresh the issue template
  • global: Add some more TLS ciphers (Issue #3822)
  • lxc/file: Use shared.HostPath for push/pull
  • lxc/image: Fix regression in exported filename (Issue #3869)
  • lxc/image: Use shared.HostPath for import/export
  • lxc/storage: Fix remote operations
  • lxd-benchmark: Add "spawn" as equivalent but deprecated to "launch"
  • lxd-benchmark: Change name of spawn command to launch
  • lxd/apparmor: Drop useless apparmor denies
  • lxd/daemon: Don't update images while pruning
  • lxd/daemon: Fix handling of config triggers
  • lxd/daemon: Simplify time channels
  • lxd/db: Fix bad DB schema update between schema 30 and 31 (Issue #3878) (Issue #3890)
  • lxd/images: Actually get the list of images to remove
  • lxd/images: Fix bad error message
  • lxd/images: Respect disabled cache expiry
  • lxd/images: Store UploadedAt as RFC3399
  • lxd/import: Check for on-disk only snapshots
  • lxd/import: Re-create mountpoints and symlinks
  • lxd/import: Rewrite (Issue #3682)
  • lxd/init: Only nest btrfs if container is on btrfs
  • lxd/migration: Fix lvm stateful restores
  • lxd/migration: Fix stateless incremental containers (Issue #3798)
  • lxd/network: Better handle dnsmasq version checks (Issue #3837)
  • lxd/network: Do not update limits unconditionally (Issue #3920)
  • lxd/networks: Fix renaming networks (Issue #3912)
  • lxd/networks: Update dnsmasq on container renames
  • lxd/patches: Convert UploadedAt to RFC3399
  • lxd/resources: Deal with missing cpufreq directory
  • lxd/storage: Add growFileSystem helper
  • lxd/storage: Add shrinkFileSystem helper
  • lxd/storage: Add shrinkVolumeFilesystem helper
  • lxd/storage: Have "usedby" functions return empty slice
  • lxd/storage: Ignore vanished file warnings during rsync (Issue #3859)
  • lxd/storage: Move check for type into api
  • lxd/storage: Re-import image if volume filesystem has changed
  • lxd/storage: Rework container volume properties
  • lxd/storage: Rework storage pool updating (Issue #3834)
  • lxd/storage: Rework storage volume updating
  • lxd/storage: Support resizing btrfs-based volumes
  • lxd/storage/btrfs: Existence check before container delete (Issue #3775)
  • lxd/storage/btrfs: Existence check before custom delete (Issue #3775)
  • lxd/storage/btrfs: Existence check before image delete (Issue #3775)
  • lxd/storage/btrfs: Existence check before snapshot delete (Issue #3775)
  • lxd/storage/btrfs: Remove dependency on symlink
  • lxd/storage/btrfs: Workaround btrfs bug (Issue #3843)
  • lxd/storage/ceph: Check for mountpoint before calling umount
  • lxd/storage/ceph: Correctly implement (none-)live migration
  • lxd/storage/ceph: Existence check before container delete (Issue #3775)
  • lxd/storage/ceph: Existence check before custom delete (Issue #3775)
  • lxd/storage/ceph: Existence check before pool delete (Issue #3775)
  • lxd/storage/ceph: Existence check before snapshot delete (Issue #3775)
  • lxd/storage/ceph: Handle volume.block.filesystem update
  • lxd/storage/ceph: Remove size property from OSD pools
  • lxd/storage/ceph: Use [grow|shrink]FileSystem helpers
  • lxd/storage/dir: Check whether pool is already mounted (Issue #3938)
  • lxd/storage/dir: Make sure pool is mounted (Issue #3938)
  • lxd/storage/lvm: Existence check before container delete (Issue #3775)
  • lxd/storage/lvm: Existence check before custom delete (Issue #3775)
  • lxd/storage/lvm: Existence check before image delete (Issue #3775)
  • lxd/storage/lvm: Existence check before pool delete (Issue #3775)
  • lxd/storage/lvm: Mount xfs snapshots with "nouuid"
  • lxd/storage/lvm: Non-functional changes
  • lxd/storage/lvm: Re-import image on thinpool-based pools if volume filesystem has changed
  • lxd/storage/lvm: Use DottedVersion for version comparison
  • lxd/storage/zfs: Existence check before custom delete (Issue #3775)
  • lxd/storage/zfs: Existence check before delete for pools (Issue #3775)
  • shared: Cleanup use of the log package
  • shared: Move testhelpers into shared/osarch for now
  • shared/api: Consistent file names
  • shared/api: Split storage in separate files for pools and volumes
  • shared/canceler: Support canceling with parallel downloads
  • shared/idmap: Fix numerous issues (Issue #3946)
  • shared/idmap: Make ACL failures more verbose
  • shared/logger: Temporary workaround for log15 API breakage
  • shared/util: Implement mountpoint checking (Issue #3877)
  • shared/util: More snap handling logic
  • tests: Add stateless live migration tests
  • tests: Add tests for btrfs resize
  • tests: Add tests using btrfs on LVM and ceph volumes
  • tests: Fix bad raw.lxc test
  • tests: Fix dependency check
  • tests: Fix image expiry test
  • tests: Fix shell return value masking
  • tests: Setup basic channel handler for triggers
  • tests: Test mountpoint and symlink recreation
  • tests: Update and expand container import tests
  • tests: Update perf.sh to "lxd-benchmark launch"
  • tests: Use 50MB as minimal block dev size for xfs

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.18 release announcement 19th of September 2017

Features:

  • The btrfs filesystem can now be used on LVM and Ceph storage pools
  • Our internal "lxd-benchmark" tool is now a first class utility
  • "lxd-benchmark" can now generate performance reports
  • It's now possible to move a running container in the background, only stopping it at the last minute (using --stateless option)
  • A new "ceph.osd.force_reuse" storage pool property was added to limit accidental import of used Ceph pools

Bugfixes:

  • client: Reduce request logging to Debug level
  • doc: Link to release notes and downloads (Issue #3709)
  • doc: Tweak docker instructions (Issue #3712)
  • lxc/delete: Fix the --force description
  • lxc/image: Fix import crash when adding properties (Issue #3803)
  • lxc/move: Use force on delete
  • lxd-benchmark: Big code refactoring
  • lxd/apparmor: Support new stacking syntax
  • lxd/containers: Check for container mountpoint too
  • lxd/containers: Fix handling of major and minor numbers in device IDs
  • lxd/containers: Remove from db on storage failure (Issue #3782)
  • lxd/daemon: Refactoring of State as a separate package
  • lxd/daemon: Reset the images auto-update loop when configuration changes
  • lxd/db: Add db/query sub-package with common query helpers
  • lxd/db: Add db/schema sub-package for managing database schemas
  • lxd/db: Automatically generate database schema from database updates
  • lxd/events: Fix race condition in event handlers (Issue #3770)
  • lxd: Fix typo in comment
  • lxd/images: Fix ordering of compressor arguments
  • lxd/images: Fix private image copy with partial fp
  • lxd/images: Properly extract the image expiry
  • lxd/init: Code refactoring
  • lxd/init: Fix btrfs subvolume creation
  • lxd/init: Improve default storage backend selection
  • lxd/init: Re-order btrfs questions
  • lxd/main: Fix error message when log path is missing
  • lxd/migration: Fix live migration (bad URL in dumpsuccess) (Issue #3715)
  • lxd/networks: Allow for duplicate IPs (Issue #3721)
  • lxd/networks: Don't require ipt_checksum
  • lxd/networks: Fix bridging devices with IPv6 link-local (Issue #3727)
  • lxd/networks: Make dnsmasq quiet when not in debug mode
  • lxd/networks: Only add --quiet options to dnsmasq if version supports them
  • lxd/networks: Switch to a directory based dhcp-host (Issue #3694)
  • lxd/patches: Make dir pool use bind-mount
  • lxd/patches: Move patch to the right part of the file
  • lxd/storage: Don't mask error messages
  • lxd/storage: Extend makeFSType, remove duplicated mkfs.* code
  • lxd/storage: If volume creation fails, delete DB entry
  • lxd/storage: Only validate config changes
  • lxd/storage/ceph: Add note about filesystems for Ceph cluster
  • lxd/storage/ceph: Fix divide error in size calculation
  • lxd/storage/ceph: Generate a new xfs UUID (Issue #3752)
  • lxd/storage/ceph: Implement resizing (Issue #3760)
  • lxd/storage/ceph: Sanitize path return from rbd map (Issue #3726)
  • lxd/storage/ceph: Set ACL on container copy
  • lxd/storage/ceph: Use Storage{Start,Stop}()
  • lxd/storage/ceph: Use UUID when creating zombie storage volumes (Issue #3780)
  • lxd/storage/dir: Use bind-mount for pools outside ${LXD_DIR}
  • lxd/storage/dir: Use correct function
  • lxd/storage/lvm: Generate a new xfs UUID on thinpool copy
  • lxd/storage/lvm: Report error on wrong storage type
  • lxd/storage/lvm: Require resize request to be at least 1MB
  • lxd/storage/zfs: Use "referenced" property when zfs.use_refquota=true
  • shared: Add helpers to parse/compare versions
  • shared: Fix growing of buf in GroupId (Issue #3711)
  • shared: Guess size when sysconf() returns*1
  • shared/api: Fix new golint warning
  • shared/idmap: Disallow hostids intersecting subids
  • shared/idmap: Move idmap/acl functions to a separate package
  • shared/subtest: Vendor the subtest package
  • tests: Add more ceph tests
  • tests: Add support for LXD_TMPFS to perf.sh
  • tests: Add test for disallowing hostid in subuid (Issue #3416)
  • tests: Also measure batch startup time in perf.sh
  • tests: Bump image auto update limit to 20min
  • tests: Ceph test volume resizing
  • tests: Container import fixes
  • tests: Don't copy running lvm/ceph containers
  • tests: Include LVM in image auto update
  • tests: Limit ceph volumes to 25MB
  • tests: Lower pg number for OSD pools
  • tests: Non-functional changes
  • tests: Resize block size to 200MB
  • tests: Use "--force" everywhere on stop
  • tests: Use testimage for perf testing
  • tests: Wait up to 2 minutes for image updates

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.17 release announcement 22nd of August 2017

Features:

  • Add support for specifying the ceph user (using the "ceph.user.name" property)
  • Implement "instance types" as an easy way to specify limits (e.g. "lxc launch ubuntu:16.04 -t t2.micro")
  • Add a new "lxc query" command as a low level query tool for the LXD API (similar to curl but with LXD knowledge)
  • Filesystem ACLs are now rewritten when the container changes uid/gid map
  • LXD now supports using binary deltas when refreshing daily images
  • "lxc image info" now shows whether an image was automatically cached by LXD

Bugfixes:

  • client: Cleanup code duplication in image download function
  • client: Remove deprecated client code
  • client: Simplify ConnectPublicLXD logic
  • doc: Add storage documentation for volatile.pool.pristine
  • doc: Add the volatile.initial_source key
  • doc: Fix bad JSON in rest-api.md (Issue #3654)
  • doc: Properly escape path params
  • extra/lxc-to-lxd: Ignore capabilities that are dropped by default
  • extra/lxc-to-lxd: Ignore sysfs/proc mounts
  • extra/lxc-to-lxd: Properly handle lxc.seccomp
  • i18n: Update translations from weblate
  • lxc: Fix race in progress reporter
  • lxc: Re-introduce remote protocol migration
  • lxc/config: Expose extra certificate functions (Issue #3606)
  • lxc/image: Fix copy of image aliases
  • lxc/image: Wait for the refresh to complete
  • lxc/remote: Don't require a crt for public remotes (Issue #3627)
  • lxd: Move lxd/util.go into its own lxd/util/ sub-package
  • lxd/containers: Allow passing disk devices with the LXD snap (Issue #3660)
  • lxd/containers: Another LXC 2.1 key rename, lxc.idmap
  • lxd/containers: Fix a typo: now -> know
  • lxd/containers: Fix gpu attach when mixing GPU vendors (Issue #3642)
  • lxd/containers: Fix sorting order of devices (Issue #2895)
  • lxd/containers: Fix support for isolcpu in CPU scheduler (Issue #3624)
  • lxd/containers: Make stateful snapshot restores work again
  • lxd/daemon: Add initial lxd/sys sub-package and OperatingSystem structure
  • lxd/daemon: d.os.Init must be run after all paths are created
  • lxd/daemon: Extract Daemon.ExpireLogs into a standalone function
  • lxd/daemon: Extract Daemon.GetListeners into a standalone function
  • lxd/daemon: Extract Daemon.httpClient into a standalone HTTPClient function
  • lxd/daemon: Extract Daemon.ListenAddresses into a standalone function
  • lxd/daemon: Extract Daemon.PasswordCheck into a standalone function
  • lxd/daemon: Extract Daemon.SetupStorageDriver into a standalone function
  • lxd/daemon: Log a warning for unknown config keys instead of crashing
  • lxd/daemon: Move Daemon.BackingFs to the OS struct
  • lxd/daemon: Move Daemon.IdmapSet to OS.IdmapSet
  • lxd/daemon: Move Daemon.isRecursionRequest to the lxd/util sub-package
  • lxd/daemon: Move Daemon.lxcpath to OS.LxcPath
  • lxd/daemon: Move Daemon.MockMode to OS.MockMode
  • lxd/daemon: Move Deamon.CheckTrustState and Deamon.isTrustedClient to lxd/util
  • lxd/daemon: Move filesystemDetect function into lxd/util subpackage
  • lxd/daemon: Replace Daemon with State in all model entities
  • lxd/daemon: Use select and save a few goroutines
  • lxd/daemon: Use sql.DB or sys.OS instead of Daemon where possible
  • lxd/db: Drop dependencies on Daemon in db.go
  • lxd/db: Move db*.go files into their own db/ sub-package
  • lxd/images: Carry old "cached" value on refresh (Issue #3698)
  • lxd/import: Don't use un-initialized structs
  • lxd/networks: Allow starting LXD without dnsmasq (Issue #3678)
  • lxd/networks: Fix networkIptablesClear with missing ip{6}tables (Issue #3688)
  • lxd/networks: Make "dev" work as a network name
  • lxd/networks: Set dnsmasq.raw to be 0644 (Issue #3652)
  • lxd/networks: Stop networks on clean shutdown
  • lxd/patches: Fix canmount=noauto patch (Issue #3594)
  • lxd/patches: Unset "size" for ZFS containers + images (Issue #3679)
  • lxd/storage: Count custom volumes in pool UsedBy
  • lxd/storage: Enable "volume.size" for {btrfs,zfs}
  • lxd/storage: Fix "size" property
  • lxd/storage: Fix wrong driver name for log output
  • lxd/storage: Non-functional changes
  • lxd/storage/ceph: Fix double --cluster
  • lxd/storage/ceph: Unmap until EINVAL
  • lxd/storage/ceph: Use "/dev/rbd" via sysfs
  • lxd/storage/ceph: Use minimal image feature set for clones
  • lxd/storage/dir: Check if directory is empty (Issue #3680)
  • lxd/storage/zfs: Always require existing datasets to be empty (Issue #3657)
  • lxd/storage/zfs: Refactoring
  • shared: Add wrapper to translate host paths
  • shared: Move GetRemoteCertificate from lxc/remote (Issue #3606)
  • tests: function to include storage backends helpers
  • tests: Refactor cleanup functions
  • tests: Split out lxc and lxd related helper functions
  • tests: Split out network-related helper functions
  • tests: Split out storage-related helper functions
  • tests: Split out test setup related helper functions
  • tests: Use $storage_backends variable

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.16 release announcement 25th of July 2017

New features:

  • Ceph RBD can now be used as a LXD storage backend (including "lxd init" support).
  • A new security.idmap.base key has been added to control what base uid/gid to use on the host when using security.idmap.isolated.
  • Image downloads can now be interrupted.
  • File transfers now support sending symlinks
  • "lxc copy" and "lxc move" will now show progress information
  • "lxc copy" and "lxc move" now support "relay" and "push" modes to go around firewalls and NAT (--mode option)
  • Custom storage volumes can now have their size set and modified
  • "lxc image import" now supports reading from a directory containing an unpacked image
  • The "vlan" property can now be set on "physical" network interfaces (was previously restricted to "macvlan")
  • It's now possible to delete image volumes from a storage pool. This allows removing a storage pool without having to remove the images from the image store.
  • The image metadata and template files can now be created or modified through the API prior to publish a container as an image.
  • Stateful snapshots can now be restored as a new container on a remote host.

Bugfixes:

  • client: Allow specifying base http client (Issue #3580)
  • client: Commonize error handling
  • client: Don't live migrate stopped containers
  • client: Fix crash in operation handler
  • client: Fix file push/pull with names containing spaces
  • client: Fix handling of public LXD remote (Issue #3464)
  • client: Fix race condition in operation handling
  • client: Improve migration relay code
  • client: Make it possible to retrieve HTTP client (Issue #3580)
  • client: Properly handle remote disconnections
  • client.go: Make deprecation warnings visible in godoc (Issue #3466)
  • config: Try to be clever about ":" in snapshots
  • doc: Add note on use of previous image from cache (Issue #3590)
  • doc: Document storage_images_delete API extension (Issue #3539)
  • doc: Document the exec control API (Issue #3574)
  • doc: Expand lxd import documentation
  • doc: Extend/rework security-related documentation.
  • doc: Fix help to provide sample that actually works
  • doc: Fix spaces, commas, quotes, brackets where needed
  • doc: Initial documentation of container env (Issue #477)
  • doc: Need quotes for /1.0/networks/ "config"."ipv6.nat"
  • doc: Remove extraneous backslash
  • doc: Update containers.md
  • github: ISSUE_TEMPLATE.md: Fix lxd.log location
  • global: Fix a few typos
  • lxc/config: Removal of multiple devices at once
  • lxc: Create missing config paths
  • lxc: Cross-platform HOME handling (Issue #3573)
  • lxc/exec: Fix signal handler for Windows (Issue #3496)
  • lxc/file: Don't specify mode for intermediate directories created with push -p
  • lxc/image: Always use long fingerprint in exported filenames.
  • lxc/image: Fix "lxc image copy" not recording the source
  • lxc/image: Improve "lxc image list" filter handling (Issue #3555)
  • lxc/image: Missing error handling
  • lxc/image: Properly record alias source on copy (Issue #3586)
  • lxc/image: Update image aliases when they already exist
  • lxc/launch: Fix failure to launch containers with random names
  • lxc/list: Error if --columns and --fast are used together
  • lxc/publish: Change compression_algorithm to compressionAlgorithm
  • lxc/publish: Fix fingerprint printing
  • lxc/utils: Avoid potential progress race condition
  • lxc/utils: Println doesn't do format strings
  • lxd/container: Fix broken error handling
  • lxd/containers: Better handle errors in memory reporting (Issue #3482)
  • lxd/containers: Show underlying error when container delete fails
  • lxd/containers: Support for LXC 2.1 configuration keys (and fallback)
  • lxd/images: Clear error for image not found
  • lxd/images: Fix image refresh when fingerprint is passed.
  • lxd/import: Keep volatile keys
  • lxd/import: Remove last dependency on symlink
  • lxd/init: Detect LVM thin provisioning tools (Issue #3497)
  • lxd/networks: Don't fail on non-process PIDs
  • lxd/storage: Check idmaps of all attaching containers (Issue #3548)
  • lxd/storage: Fix ETag handling of volumes
  • lxd/storage: Fix readonly mode for directory mount
  • lxd/storage: Fix UsedBy for containers and images
  • lxd/storage: Fix volume config logic
  • lxd/storage: Introduce a new storagePoolVolumeUsedByContainersGet function
  • lxd/storage: Move db deletion to driver implementation
  • lxd/storage: Restrict size property in pool config
  • lxd/storage/lvm: Convert to RunCommand (Issue #3507)
  • lxd/storage/lvm: Fix broken error handling
  • lxd/storage/lvm: Fix non-thinpool container creation (Issue #3543)
  • lxd/storage/lvm: Non-functional changes
  • lxd/storage/zfs: Moved all the helper functions to storage_zfs_utils.go (Issue #3471)
  • lxd/storage/zfs: Removed s.zfsPoolVolumeCreate() and changed all s.zfsPoolVolumeCreate() to use zfsPoolVolumeCreate()
  • lxd/storage/zfs: Set canmount=noauto on all mountable datasets (Issue #3437)
  • lxd/storage/zfs: Used s.getOnDiskPoolName() instead of s.pool.Name
  • README: Fix broken links
  • README: Seriously rework the content
  • shared/cancel: Fix crash if no canceler is setup
  • shared/cancel: Fix return value ordering
  • shared/cancel: Use request Cancel channel
  • shared: Use custom error type for RunCommand (issue #3502)
  • shared/util: Guess size when sysconf() returns -1 (Issue #3581)
  • shared: Websocket proxy should proxy everything
  • tests: Add a test for "lxc storage volume set"
  • tests: Add a test for read-only disks
  • tests: Add import test when symlink has been removed
  • tests: Add test for push and relay mode
  • tests: Allow running tests without lxdbr0
  • tests: Always pass --force to stop/restart
  • tests: More apparmor presence checking
  • tests: Skip apparmor tests when no kernel support
  • tests: Validate that the right busybox is present
  • zfs: Use tryMount when mounting filesystem

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.15 release announcement 27th of June 2017

New features:

  • "lxc image list" now support column customization.
  • "lxc list" and "lxc image list" now both support table, json, yaml and csv as output formats.
  • It's now possible to cancel (DELETE) some background operations while they're downloading content.
  • The "lxc" command line tool was ported from our old client code to the new client package. This was the last bit of code which needed porting and we're now planning on removing the old client package from our tree with LXD 2.16.
  • New CopyContainer and CopyContainerSnapshot functions were added to the client package.
  • LXD will now dynamically remap custom storage volumes when attached to containers.

Bugfixes:

  • client: Add extra exec option to block on I/O
  • client: Fail copy if the source isn't listening on network
  • client: Fix potential race in event handler setup
  • client: Only set file headers if value is provided
  • doc: Add a note for blkio limits (Issue #3378)
  • doc: Document image refresh API call
  • doc: Fix missing markdown escaping
  • doc: Tweak storage formatting (Issue #3376)
  • lxc/file: Clean source path for recursive push
  • lxc/file: Properly read file permissions on Windows (Issue #3363)
  • lxd/containers: Also support lxc.net.<n>.* configuration keys on newer LXC
  • lxd/containers: Check whether the disk device exists on the host before unmount
  • lxd/containers: Detect POLLNVAL when polling during exec (Issue #2964)
  • lxd/containers: Fail if we get EBUSY during startup (Issue #3412)
  • lxd/containers: Use the lxc.network.<n>.* configuration keys
  • lxd/db: Replace some uses of InternalError with SmartError
  • lxd/images: Always expand the fingerprint (Issue #3424)
  • lxd/images: If multiple cache hits, pick the latest
  • lxd/images: Properly initialize image info in direct case
  • lxd/images: Skip cached images without auto-update
  • lxd/networks: Always pass --conf-file to dnsmasq (Issue #3367)
  • lxd/networks: Only generate DHCP fw rules if enabled (Issue #3432)
  • lxd/networks: Remove IPv6 leases on container delete
  • lxd/networks: Tweak error in subnet auto detection
  • lxd/patches: Fix bad upgrade for ZFS pools (Issue #3386)
  • lxd/patches: Make sure localdevices are properly updated (Issue #3169)
  • lxd/shutdown: Only timeout if told to (Issue #3434)
  • lxd/storage: Fix ETag calculation for pools
  • lxd/storage: Insert driver correctly (Issue #3386)
  • lxd/storage/btrfs: Apply default flags BEFORE detecting type (Issue #3409)
  • lxd/storage/btrfs: Enable filesystem quotas on demand
  • lxd/storage/dir: Still create the needed symlinks on freeze failure
  • lxd/storage/dir: Unfreeze on rsync errors
  • lxd/storage/lvm: Allow non-empty VGs when thinpool exists (Issue #3456)
  • lxd/storage/rsync: Handle sparse files when rsyncing (Issue #3287)
  • lxd/storage/zfs: Fix container snapshot copy (Issue #3395)
  • lxd/storage/zfs: Improve dummy dataset creation (Issue #3399)
  • Makefile: Update pot before po
  • shared/api: API extensions go at the bottom
  • tests: Add more copy/migration tests
  • tests: Add tests for custom storage volume attach
  • tests: Add tests for "lxc file push -r ./"
  • tests: Don't attempt to finger public remotes
  • tests: Don't run migration tests again on LVM when backend is random
  • tests: Use in-memory database for tests

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.14 release announcement 30th of May 2017

New features:

  • New client library
    • Add a CreateContainerFromImage function
    • Implement image upload
    • Implement remote operations
  • API additions
    • New "description" field for containers, networks, storage pools and storage volumes
    • Allow for image refreshes (lxc image refresh)
  • When launching containers, an existing cached image is now preferred over downloading a refreshed one
  • "lxd init" can now be preseeded with "--preseed" and a yaml config file
  • Introduce a new btrfs.mount_options pool property
  • Implement volume resizing for LVM (grow/shrink for ext4, grow only for xfs)
  • LXD doesn't create a "docker" profile anymore as it's not needed with current Docker and AppArmor.

Bugfixes:

  • client: Add image_create_aliases backward compat
  • client: Always pass pointer to queryStruct
  • client: Don't return cache on GetServer
  • client: Fill the server fingerprint if missing
  • client: Fix private image handling
  • client: Fix race condition in operation handler
  • client: Improve error on image copy
  • client: Keep track of protocol
  • client: Move CopyImage to the target server
  • client: Remove unneeded condition
  • client: Require the volume type for storage volume
  • client: Support partial fingerprints
  • client: Track the server certificate, not client
  • client: Use RemoteOperation for CopyImage
  • doc: Add documentation about the init preseed feature
  • doc: Correct typo in device type name
  • doc: Fix markdown escaping
  • doc: Update README.md Docker instructions
  • doc/network: Add section on macvlan vs bridge (Issue #3273)
  • doc/storage: Correct grammer
  • doc/storage: Document zfs quota vs refquota (Issue #2959)
  • doc/storage: Fix ordering
  • extra/lxc-to-lxd: Don't crash on missing mount file (Issue #3237)
  • global: Fix typos
  • global: Replace file Chmod() with os.Chmod() (Issue #3275)
  • global: Use containerGetParentAndSnapshotName() everywhere
  • i18n: Pre-release update
  • i18n: Update translations from weblate
  • lxc: Fix obscure error on missing object name (Issue #3230)
  • lxc: Implement progress tracking for operations
  • lxc/copy: Improve error handling (Issue #3243)
  • lxc/copy: Simplify the code
  • lxc/file: Fix broken file push on Windows
  • lxc/file: Fix recursive file push on Windows
  • lxc/init: Drop unnecessary else statement
  • lxc/remote: Show the fingerprint as string not hex (Issue #3293)
  • lxc/storage: Don't ignore yaml errors
  • lxd: Support running individual testify test suites
  • lxd/containers: Also clear the host_name volatile key
  • lxd/containers: Cleanup volatile keys on update (Issue #3231)
  • lxd/containers: Disable IPv6 on created macvlan parents
  • lxd/containers: fillNetworkDevice is only for nic
  • lxd/containers: Use networkSysctl whenever possible
  • lxd/daemon: Fix ETag handling for /1.0
  • lxd/daemon: Actually set ServerFingerprint
  • lxd/db: Add a testify test suite for db tests, rework existing tests
  • lxd/db: Clear database state in the mock daemon after each lxdSuiteTest
  • lxd/db: Don't special-case mock mode unnecessarily in db patches
  • lxd/db: Return NoSuchObjectError on missing storage pools (Issue #3257)
  • lxd/db: Separate db-level update logic from daemon-level one
  • lxd/images: Check if the image already exists on upload
  • lxd/images: Fix potential double unlock
  • lxd/images: Fix regression in image auto-update logic
  • lxd/images: Save image source certificate and pass it to the download
  • lxd/images: Split autoUpdateImage function
  • lxd/import: Error on out missing name
  • lxd/init: Extract validation of --auto args into a separate method
  • lxd/init: Move state-changing inline functions to own methods
  • lxd/init: Rollback to initial state if anything goes wrong
  • lxd/init: Properly set the default port (Issue #3341)
  • lxd/networks: Fix ETag regression
  • lxd/patches: Drop unused variable
  • lxd/storage: Add helper to detect if pool is in use
  • lxd/storage: Add lxdResolveMountoptions()
  • lxd/storage: Add MS_LAZYTIME to mount options
  • lxd/storage: Add permission helpers
  • lxd/storage: Avoid an infinite loop
  • lxd/storage: Fix bad internal types
  • lxd/storage: Move mount helpers to storage utils
  • lxd/storage: Only delete custom volumes
  • lxd/storage: Pass container struct to ContainerMount()
  • lxd/storage: Re-order storage pool checks
  • lxd/storage/btrfs: Add getBtrfsPoolMountOptions()
  • lxd/storage/btrfs: Handle migration on different LXDs (Issue #3323)
  • lxd/storage/btrfs: Remove unused variable
  • lxd/storage/btrfs: Use lxdResolveMountoptions()
  • lxd/storage/lvm: Allow re-using existing thinpools (Issue #3351)
  • lxd/storage/lvm: Check whether volume group is already in use
  • lxd/storage/lvm: Disallow using non-empty volume groups (Issue #3351)
  • lxd/storage/lvm: Only delete VG when empty (Issue #3351)
  • lxd/storage/lvm: Resolve mount options properly (Issue #3284)
  • lxd/storage/lvm: Simplify and improve pool creation
  • lxd/storage/zfs: Create image dataset with mountpoint=none (Issue #3359)
  • lxd/storage/zfs: Fix folder permissions after dataset creation (Issue #3090)
  • lxd/storage/zfs: Try to work around zfs EBUSY bug (Issue #3228)
  • Makefile: Add update-po to i18n target
  • Makefile: Fix static-analysis target
  • shared: Add yaml-mode marker in template for "lxc edit" actions
  • shared/cmd: Add new package with initial command I/O logic
  • shared/cmd: Complete cmd.Context support for various AskXXX methods
  • shared/cmd: Don't depend on testify
  • shared/cmd: Make the log cmdInit unit-testable
  • shared/logger: Make golint clean
  • shared/logger: Replace PrintStack with GetStack
  • shared/logging: Export LogfmtFormat
  • shared/logging: Make golint clean
  • shared/termios: Make golint clean
  • tests: Add btrfs.mount_options test (Issue #3264)
  • tests: Add LV resizing tests
  • tests: Add mount option test for LVM (Issue #3284)
  • tests: Add quota tests
  • tests: Allow random storage backend selection
  • tests: Don't rely on busybox shutting down nicely
  • tests: Drop jenkins-specific check again
  • tests: Explicitly pass shell type to shellcheck
  • tests: Honor the LXD_BACKEND environment variable in storage tests
  • tests: Make sure storage volume is mounted
  • tests: Remove invalid test for Jenkins
  • tests: Test suites use space indent
  • tests/deps: Make golint clean

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.10 release announcement 11th of May 2017

This is the tenth bugfix release for LXD 2.0.

The changes since LXD 2.0.9 are

Minor improvements:

  • client: Backported the new client library and ported some of the internal commands over to it
  • lxc: Add a manpage command
  • lxc: Allow --version to be passed with any command
  • lxc: Reworked all help messages in the client to be compatible with help2man
  • lxd: AppArmor namespacing is now also enabled for privileged containers

Bugfixes:

  • build: Add debug logging
  • client: Fix profile list
  • client: Remove unneeded condition
  • doc: Add instructions to grow ZFS loop
  • doc: Add note about escaping btrfs qgroups
  • doc: Add note about restricting access to kernel ring buffer
  • doc: Extract containers documentation to containers.md
  • doc: Extract profiles documentation to profiles.md
  • doc: Extract server documentation to server.md
  • doc: Fix badly named example device
  • doc: Fix broken table
  • doc: Note that LXD assumes full control over the pool
  • doc: Update configuration.md with links to other documents
  • doc: Update README.md for new API client
  • extra/lxc-to-lxd: Don't crash on missing mount file
  • extra/lxc-to-lxd: Typo in description of --move-rootfs
  • extra/vagrant: Trailing whitespace
  • global: Fix error handling in all filepath.Walk calls
  • global: Fix a number of typos
  • global: Forward user-agent and other headers on redirect
  • global: Replace file Chmod() with os.Chmod()
  • global: Use containerGetParentAndSnapshotName()
  • global: Use RunCommand everywhere
  • lxc: Don't include spaces in translated strings
  • lxc: Improve batch mode
  • lxc: Make help/usage a bit more consistent
  • lxc: Move common functions/types to utils.go
  • lxc: Properly clear transfer stats on error
  • lxc: Rework for better manpages
  • lxc/config: Add new config handling code
  • lxc/config: Always use "simplestreams" for images:
  • lxc/config: Fix path handling
  • lxc/config: Fix SaveConfig's DeepCopy call
  • lxc/copy: Improve error handling
  • lxc/copy: Return the source error too
  • lxc/copy: Simplify
  • lxc/copy: Wait asynchronously
  • lxc/image: Show the alias description
  • lxc/image: Trailing whitespace
  • lxc/init: Drop unnecessary else statement
  • lxc/list: Document list format options
  • lxc/list: Fix regression in json output
  • lxc/list: Move common data extraction to a helper function
  • lxc/profile: Properly implement "profile unset"
  • lxc/publish: Wait for the conainer to be running
  • lxc/remote: Show the fingerprint as string not hex
  • lxc/utils: Implement progress tracking for operations
  • lxd: Drop use of logger.Log when not needed
  • lxd/apparmor: Fix AppArmor stack handling with nesting
  • lxd/containers: Add containerGetParentAndSnapshotName()
  • lxd/containers: Added soft limit in initLXD()
  • lxd/containers: Added soft memory limit even when hard is selected
  • lxd/containers: Add extra validation for unix-block/unix-char
  • lxd/containers: Add function to detect root disk device
  • lxd/containers: Allow for stable host interface names
  • lxd/containers: Clarify uid/gid error
  • lxd/containers: Cleanup root device validation
  • lxd/containers: Disable IPv6 on host side veth when bridged
  • lxd/containers: Don't ignore snapshot deletion failures
  • lxd/containers: Don't parse id ranges as int32
  • lxd/containers: Don't report migration success on failure
  • lxd/containers: Don't use FindProcess, just pass exec.Cmd
  • lxd/containers: Find current max snapshot value
  • lxd/containers: Fix bad root device detection code
  • lxd/containers: Fix base image tracking
  • lxd/containers: Fix concurent read/write to s.conns in exec
  • lxd/containers: Fix error handling on FileRemove
  • lxd/containers: Fix handling of devices with minor>255
  • lxd/containers: Fix override of Devices during copy
  • lxd/containers: Fix soft limit logic to use float64
  • lxd/containers: Initialize idmap on demand
  • lxd/containers: Kill forkexec on abnormal websocket closure
  • lxd/containers: Path may only be used by one disk
  • lxd/containers: Properly invalidate the idmap cache
  • lxd/containers: Properly revert memory limits on failure
  • lxd/containers: Properly validate architectures
  • lxd/containers: Set default values for USER, HOME and LANG
  • lxd/containers: This condition has already been deal
  • lxd/containers: Use int64 for uid and gid everywhere
  • lxd/containers: Validate container idmap as early as possible
  • lxd/containers: Validate expanded configuration after root setup
  • lxd/containers: Validate the expanded config at container create
  • lxd/daemon: Check for the validity of the id maps at startup
  • lxd/daemon: Fix some race conditions
  • lxd/daemon: Mount a tmpfs under devlxd
  • lxd/daemon: s/Default map/Available map/
  • lxd/daemon: Set ServerFingerprint
  • lxd/daemon: Use a tmpfs for shmounts
  • lxd/db: Actually enable foreign keys per connection
  • lxd/db: Deal with the case where no updates exist
  • lxd/db: Detect downgrades with newer DB and fail
  • lxd/db: Raise DB lock timeout to 30s, retry every 30ms
  • lxd/db: Rely on CASCADE
  • lxd/db: Remove some extra cleanup code
  • lxd/devlxd: Fix extraction of fd from UnixConn with go tip
  • lxd/events: Improve formatting in events API
  • lxd/images: Check if the image already exists
  • lxd/images: Drop leftover debug statement
  • lxd/images: Fix partial image fingerprint matches
  • lxd/images: Move imagesDownloading out of the daemon struct
  • lxd/images: Properly return the alias description
  • lxd/images: Record the server certificate in the cache
  • lxd/images: Refactor code a bit
  • lxd/images: Save image source certificate and pass it to the download
  • lxd/images: Split autoUpdateImage function
  • lxd/init: Only show userns message if lacking uid/gid
  • lxd/init: The 'storageBackend' has already been checked
  • lxd/main: Fix comment in activateifneeded
  • lxd/main_forkexec: Remove os.FindProcess
  • lxd/main_netcat: Implement logging
  • lxd/main_netcat: Switch to new helper
  • lxd/main_nsexec: cgo: Free allocated memory
  • lxd/main: Restrict daemon and activateifneeded to root
  • lxd/migration: Better handle rsync errors (subprocesses)
  • lxd/migration: Clarify CRIU related errors
  • lxd/migration: Handle EAGAIN properly
  • lxd/migration: Make our netcat handle EAGAIN
  • lxd/migration: Tweak rsync logging a bit
  • lxd/operations: Remove useless for loops
  • lxd/profiles: Verify root disk devices
  • lxd/storage/btrfs: Always use the recursive subvol functions
  • lxd/storage/btrfs: Cleanup empty migration dirs
  • lxd/storage/btrfs: Fix recursive subvol deletion
  • lxd/storage/btrfs: Properly handle nested subvolumes
  • lxd/storage: Ensure the container directory has the right permission
  • lxd/storage: Move mount helpers to storage utils
  • lxd/storage: Optimize containerGetRootDiskDevice a bit
  • Makefile: Always include gorilla/context
  • Makefile: Drop repeated calls to "go get"
  • Makefile: Use system libsqlite3 if available
  • shared: coding-style pedantry
  • shared/api: Add the Stateful field to ContainerPut
  • shared/api: Properly define the image creation source
  • shared/api: Use consistent json and yaml field names
  • shared/cmd: Add a new shared/cmd package with initial command I/O logic
  • shared/cmd: Complete cmd.Context support for various AskXXX methods
  • shared/gnuflag: Fix golint
  • shared/i18n: Simplify and make golint clean
  • shared/idmap: DefaultIdmapSet is always for root
  • shared/idmap: Drop GetOwner
  • shared/idmap: Fix various issues
  • shared/idmap: Implement parsing of kernel id maps
  • shared/idmap: Implement Usable() functions
  • shared/idmap: Improve parsing of the shadow id files
  • shared/idmap: Make more of an effort to find a default
  • shared/idmap: Remove debugging during idmap changes
  • shared/ioprogress: Simplify and make golint clean
  • shared/logger: Add pretty formatting
  • shared/logger: Create new package for logger
  • shared/logger: Make golint clean
  • shared/logger: Replace PrintStack with GetStack
  • shared/logging: Export LogfmtFormat
  • shared/logging: Make golint clean
  • shared/simplestreams: Always prefer squashfs when available
  • shared/simplestreams: Export image file list
  • shared/simplestreams: Improve error handling
  • shared/simplestreams: Properly handle image rebuilds
  • shared/termios: Make golint clean
  • shared/util: Add function to detect errno
  • shared/util: Add yaml-mode marker in template for "lxc edit" actions.
  • shared/util: Don't do chown on windows
  • shared/util: FileCopy should also keep owner
  • shared/util: FileCopy should keep the same mode
  • shared/version: Make golint clean
  • tests: Add a testify test suite for db tests, rework existing tests
  • tests: Add golint
  • tests: Add lxd init --auto tests
  • tests: Allow random storage backend selection
  • tests: Also unmount the devlxd path
  • tests: Always cleanup loop devices
  • tests: Avoid a zfs race
  • tests: Don't leak zpools in "lxd init" test
  • tests: Explicitly pass shell type to shellcheck
  • tests: Fix lxd auto init test suite
  • tests: Fix typo
  • tests: Give more time to reboot test
  • tests: Honor the LXD_BACKEND environment variable in storage tests
  • tests: Improve performance of deadcode test
  • tests: Make sure a client certificate is generated
  • tests: Make sure storage volume is mounted
  • tests: Properly cleanup in template testsuite
  • tests: Record how long the tests take
  • tests: Remove invalid test for Jenkins
  • tests: Run golint on client/ and lxc/config/
  • tests: Switch to use gofmt instead of "go fmt"
  • tests: Testsuites are sourced, not executed
  • tests: The monitor can exit on its own
  • tests: Trailing whitespaces
  • tests: Update for new client
  • tests: Update init test for stable branch
  • tests: Use flake8 instead of separate pyflakes and pep8
  • tests/deps: Make golint clean
  • tests/lxd-benchmark: Fix --help and --version handling

Downloads

The release tarballs can be found on our download page.

LXD 2.13 release announcement 25th of April 2017

The changes in this release include

New features:

  • lxc/copy: Allow copying a container without its snapshots (--container-only)
  • lxd/storage/zfs: Introduce a new "zfs.clone_copy" property (will make a full copy rather than using a clone)
  • client: New, better designed, client library available for testing
  • lxd/containers: unix-char/unix-block devices can now be mapped to a different name in the container (set "source" and "path" keys)
  • lxd/containers: AppArmor namespacing is now enabled for privileged containers too
  • lxd/storage/lvm: Implement non-thinpool LVM storage pools (set "lvm.use_thinpool" to "false")
  • lxc/list: Support for CSV as an output format
  • lxd/init: Support for creating a subvolume in an existing btrfs environment
  • lxd/storage: Implement the "rsync.bwlimit" pool property to restrict rsync bandwidth
  • lxd/network: Allow overriding the VXLAN multicast interface (set "tunnel.NAME.interface")

Bugfixes:

  • client: Add basic logging code
  • client: Fix file push path handling (Issue #3153)
  • doc/api-extensions: Properly escape markdown
  • doc/configuration: Drop deprecated config options
  • doc/configuration: Extract containers documentation to containers.md
  • doc/configuration: Extract networking documentation to networks.md
  • doc/configuration: Extract profiles documentation to profiles.md
  • doc/configuration: Extract server documentation to server.md
  • doc/configuration: Extract storage documentation to storage.md
  • doc/configuration: Fix storage volume configuration (Issue #3140)
  • doc/configuration: Update with links to other documents
  • doc/lxd-ssl-authentication: Drop mention of PKI CRL (not implemented)
  • doc/production-setup: Fix broken table
  • doc/README: Update for new API client
  • doc/storage: Add note about escaping btrfs qgroups (Issue #3135)
  • doc/storage: Re-format a bit
  • i18n: Update translations from weblate
  • lxc/copy: Return the source error too (Issue #3086)
  • lxc/copy: Wait for operations asynchronously
  • lxc/list: Document list format options
  • lxc/manpage: Show all commands in "man lxc" (Issue #3214)
  • lxd/containers: Add containerGetParentAndSnapshotName()
  • lxd/containers: Added soft memory limit even when hard is selected
  • lxd/containers: Allow for stable host interface names (Issue #3143)
  • lxd/containers: Fix handling of devices with minor>255
  • lxd/containers: Fix typo in securtiy.syscalls.blacklist
  • lxd/containers: Fix unix device removal (bad cgroup.deny entry) (Issue #3107)
  • lxd/containers: Improve storage error messages on creation (issue #3110)
  • lxd/containers: Properly invalidate the idmap cache
  • lxd/daemon: Improve PKI certificate handling (Issue #3162)
  • lxd/db: Deal with the case where no updates exist
  • lxd/images: Drop leftover debug statement
  • lxd/init: Add all storage options
  • lxd/main_activateifneeded: Port to new client code
  • lxd/main_callhook: Port to new client code
  • lxd/main_daemon: Port to new client code
  • lxd/main_forkexec: Remove use of os.FindProcess (Issue #3037)
  • lxd/main_import: Handle non-existing snapshots path (Issue #3198)
  • lxd/main_import: Port to new client code
  • lxd/main_init: Port to new client code
  • lxd/main_migratedumpsuccess: Port to new client code
  • lxd/main_netcat: Implement logging (Issue #2494)
  • lxd/main_netcat: Switch to new helper
  • lxd/main_ready: Port to new client code
  • lxd/main_shutdown: Port to new client code
  • lxd/main_waitready: Port to new client code
  • lxd/migration: Fix stateful restore
  • lxd/operations: Remove useless for loops
  • lxd/profiles: Fix ETag handling
  • lxd/rsync: Make our netcat handle EAGAIN (Issue #3168)
  • lxd/storage: Check that pool exists on profile changes (Issue #3137)
  • lxd/storage: Fix and improve config validation
  • lxd/storage/lvm: Improve snapshot handling
  • lxd/storage/lvm: Tweak {Try}RunCommand() calls
  • shared/api: Add the Stateful field to ContainerPut
  • shared/api: Properly define the image creation source
  • shared/gnuflag: Fix golint
  • shared/i18n: Simplify and make golint clean
  • shared/ioprogress: Simplify and make golint clean
  • shared/logger: Add line number logging
  • shared/logger: Add pretty formatting
  • shared/logger: Create new package for logger
  • shared/util_linux: Add function to detect errno (Issue #2494)
  • shared/version: Make golint clean
  • tests/lxd-benchmark: Port to new client code
  • tests: Add additional "file push -p" tests
  • tests: Add additional import tests (Issue #3198)
  • tests: Add additional storage pool tests
  • tests: Add migration tests for copy and move (Issue #3006)
  • tests: Keep testsuite non-executable (they're sourced)
  • tests: Make sure a client certificate is generated
  • tests: Make sure we also delete dependent records in import tests
  • tests: Record how long the tests take
  • tests: Run golint on client/ and lxc/config/
  • tests: Stop containers before modifying the DB
  • tests: Use flake8 instead of separate pyflakes and pep8
  • tests: Use shutdown/respawn helpers to simplify import tests

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.12 release announcement 20th of March 2017

The changes in this release include

New features:

  • lxc/exec: Implement ssh-style -t/-T/-n
  • lxd/init: Support all storage drivers

Bugfixes:

  • doc: Add a note about restricting access to kernel ring buffer
  • doc: Document backup strategies
  • doc: Document that X-LXD-type is valid for POST
  • lxc: Properly clear transfer stats on error
  • lxc/copy: Don't attempt to live migration on copy
  • lxc/list: Add a simple list formatting example
  • lxd/backup: Improve backup handling
  • lxd/backup: Record container's storage volume
  • lxd/backup: Record storage pool struct
  • lxd/containers: Find max value currently used
  • lxd/daemon: Allow unsetting deprecated keys with default
  • lxd/daemon: Skip StoragePoolCheck() broken patch
  • lxd/images: Record the server certificate in the cache
  • lxd/init: Better render available storage backends
  • lxd/internal: Check for container storage volume
  • lxd/patches: Check if config is empty before update
  • lxd/patches: Ensure existing pool config is kept
  • lxd/storage: Adapt SetupStorageDriver()
  • lxd/storage: Fix container_lxc to match shared/api
  • lxd/storage: Make Storage{Start,Stop}() return bool and error
  • lxd/storage/btrfs: Add isBtrfsFilesystem()
  • lxd/storage/lvm: Force lvmetad cache update
  • lxd/storage/zfs: Create a volume entry for re-used images
  • lxd/storage/zfs: Load kernel module in case it isn't
  • lxd/storage/zfs: Prevent removal of the snapshot mountpoint
  • lxd/storage/zfs: Try lazy umount if zfs umount fails
  • scripts/lxc-to-lxd: Typo in description of --move-rootfs
  • shared/api: Update storage.go to cover POST too
  • shared/simplestreams: Export image file list
  • tests: Add tests for lxd import
  • tests: Fix btrfs detection code
  • tests/lxd-benchmark: Fix --help and --version handling

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.11 release announcement 8th of March 2017

The changes in this release include

New features:

  • New "aliases" field in POST /1.0/images allowing for an initial set of aliases to be passed.
  • Reworked help messages and "lxc manpage" command to generate manpages for the client.
  • New "vlan" nic property for "macvlan" devices, allowing to connect to a particular VLAN on the host device.

Bugfixes:

  • doc: Add instructions to grow ZFS loop
  • doc: Improve storage doc (Issue #3013)
  • global: Use RunCommand everywhere
  • i18n: Refresh templates
  • i18n: Update translations from weblate
  • i18n: Update translation templates
  • lxc: Allow --version to be passed with any command
  • lxc: Make help/usage a bit more consistent
  • lxc: Rework for better manpages
  • lxc/image: Show the alias description
  • lxc/profile: Properly implement "profile unset"
  • lxd/containers: Don't use FindProcess, just pass exec.Cmd (Issue #3037)
  • lxd/containers: Properly revert memory limits on failure (Issue #3017)
  • lxd/images: Properly return the alias description
  • lxd/images: Refactor code a bit
  • lxd/migration: Actually unset the storage pool if unavailable (Issue #3036)
  • lxd/migration: Better handle rsync errors (subprocesses)
  • lxd/migration: Set correct pool property for btrfs (Issue #3036)
  • lxd/migration: Set correct pool property for zfs (Issue #3036)
  • lxd/migration: Tweak rsync logging a bit
  • lxd/patches: Call tryMount() if not already mounted (Issue #3026)
  • lxd/patches: Conditionalize lvrename (Issue #3026)
  • lxd/patches: Delete image db entry if LV is missing (Issue #3026)
  • lxd/patches: Detect the logical volume size
  • lxd/patches: Fix incorrect btrfs source properties (Issue #3020)
  • lxd/patches: Handle mixed-storage upgrade (Issue #3026)
  • lxd/patches: Use MNT_DETACH for lvm (Issue #3026)
  • lxd/patches: Use RemoveAll() for lvm snapshots dir (Issue #3026)
  • lxd/storage/btrfs: Correctly handle loop-backed pools (Issue #3020)
  • lxd/storage/btrfs: Handle custom subvolume paths (Issue #3020)
  • lxd/storage/dir: Limit valid pool source paths (Issue #3023)
  • lxd/storage/lvm: Call {pv,vg}scan
  • lxd/storage/lvm: Dumb down functions from methods to functions (Issue #3026)
  • lxd/storage: Deal with source not being btrfs (Issue #3024)
  • lxd/storage: Ensure correct pool for snapshots (Issue #3036)
  • lxd/storage: Harden the btrfs migration code (Issue #3024)
  • lxd/storage: Report prepareLoopDev() error directly
  • shared/idmap: Fix various issues
  • tests: Add more dir and btrfs tests (Issue #3023)
  • tests: Improve lvm part of storage tests

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.10.1 release announcement 2nd of March 2017

The changes in this release include

This is a bugfix release for LXD 2.10, fixing a number of issues reported after release.

Bugfixes:

  • global: Fix error handling in all filepath.Walk calls
  • lxd/images: Fix base image tracking (Issue #2999)
  • lxd/init: Allow running as non-root
  • lxd/storage: Add set_autoclear_loop_device()
  • lxd/storage/lvm: Allow loop-backed lvm storage pools
  • lxd/storage/lvm: Fix defer calls
  • lxd/storage/lvm: Make sure loop devices stays around on volume delete
  • lxd/storage/lvm: Set LO_FLAGS_AUTOCLEAR before file removal
  • lxd/storage/lvm: Use lvmized container name for LV
  • lxd/storage/zfs: Do not revert on success
  • lxd/storage/zfs: Import loop-backed storage pools on startup
  • shared/simplestreams: Improve error handling
  • shared/util: Check for err in {UUID, BlockDev} lookup
  • tests: Fix yet another LVM pool's volume size
  • tests: Give more time to reboot
  • tests: Rely on "lxc storage" create only for lvm

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.10 release announcement 28th of February 2017

The changes in this release include

New features:

  • With the LVM backend, lvm.vg_name and lvm.thinpool_name can now be modified
  • "lxd init" can now be run even after containers and images are present

Bugfixes:

  • doc: Escape markdown
  • doc: Fix badly named example device
  • global: Use int64 for uid and gid everywhere
  • i18n: Refresh translations and templates
  • i18n: Update translations from weblate
  • lxc: Move common functions/types to utils.go
  • lxc/action: Improve batch mode (Issue #2966)
  • lxc/file: Detect and fail to transfer symlinks (Issue #2970)
  • lxc/publish: Wait for the container to be running
  • lxd/containers: Clarify uid/gid error
  • lxd/containers: Don't parse id ranges as int32
  • lxd/containers: Fix override of Devices during copy (Issue #2872)
  • lxd/containers: Fix uint32 check
  • lxd/containers: Initialize idmap on demand
  • lxd/containers: Kill forkexec on abnormal websocket closure
  • lxd/containers: Properly validate architectures (Issue #2971)
  • lxd/containers: Remove debugging during idmap changes
  • lxd/containers: Simplify container storage init
  • lxd/containers: Validate container idmap as early as possible
  • lxd/containers: Validate the expanded config at container create
  • lxd/daemon: Check for the validity of the id maps at startup (Issue #2885)
  • lxd/daemon: Detect downgrades with newer DB and fail
  • lxd/daemon: Fix some race conditions
  • lxd/events: Improve formatting in events API
  • lxd/images: Properly handled non-optimized stores
  • lxd/init: Only show userns message if lacking uid/gid
  • lxd/patches: Activate volume group and logical volumes
  • lxd/patches: Do not parse volume.size for lvm
  • lxd/patches: Fix zfs upgrade from existing dataset
  • lxd/storage: Add proper logging
  • lxd/storage: Check if profiles use pool or volume
  • lxd/storage: Detect if loop file is already in use
  • lxd/storage: Improve storage volume attachment
  • lxd/storage: Make flag argument configurable
  • lxd/storage: Move storage drivers cache to storage.go
  • lxd/storage: Remove unused function argument
  • lxd/storage: Return correct error messages
  • lxd/storage: Simplifiy StoragePoolInit()
  • lxd/storage/btrfs: Quotas can't be enabled when unprivileged
  • lxd/storage/lvm: Activate volume groups and logical volumes
  • lxd/storage/lvm: Don't set volume size
  • shared/idmap: Drop GetOwner
  • shared/idmap: Implement Usable() functions
  • shared/idmap: Make more of an effort to find a default
  • tests: Add test for storage volume {attach,detach}
  • tests: Don't leak zpools in "lxd init" test

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.9.3 release announcement 24th of February 2017

The changes in this release include

This is another bugfix release for LXD 2.9, fixing migration issues reported by our users.

Bugfixes:

  • client: Always use "simplestreams" for the images: remote
  • doc: Add client tool examples to storage.md
  • doc: Add lvm.{thinpool,vg}_name pool properties
  • lxd: Cleanup root device validation
  • lxd/containers: Add extra validation for unix-block/unix-char
  • lxd/containers: Check whether storage is ready before applying quota
  • lxd/containers: Don't ignore snapshot deletion failures
  • lxd/daemon: s/Default map/Available map/
  • lxd/init: "lxd init" can now be run as a normal user
  • lxd/main: Fix comment in activateifneeded
  • lxd/main: Restrict daemon and activateifneeded to root
  • lxd/patches: Fix pool and volume configuration on upgrade
  • lxd/patches: Move to lvm.thinpool_name pool key
  • lxd/storage: Add ContainerStorageReady()
  • lxd/storage: Call storageVolumeFillDefault() on demand
  • lxd/storage: Don't modify configuration during config check
  • lxd/storage: Ensure image is wiped from DB on error
  • lxd/storage: Fill in default configuration for images
  • lxd/storage: Implement correct config inheritance for pools and volumes
  • lxd/storage: Only fill in defaults on creation
  • lxd/storage: Only set size property on lvm
  • lxd/storage: Properly report UsedBy
  • lxd/storage: Store size values as given to us
  • lxd/storage/btrfs: Always pass the mount options
  • lxd/storage/btrfs: Always use the recursive subvol functions
  • lxd/storage/btrfs: Drop dead code
  • lxd/storage/btrfs: Improve upgrade
  • lxd/storage/btrfs: Only use size in the loop case
  • lxd/storage/btrfs: Properly handle nested subvolumes
  • lxd/storage/btrfs: Set loop file if "source" is empty
  • lxd/storage/dir: Handle cross-device upgrade
  • lxd/storage/lvm: Add lvm.thinpool_name and lvm.vg_name
  • lxd/storage/lvm: Allow to reuse existing volume groups
  • lxd/storage/lvm: Always set lvm.thinpool_name
  • lxd/storage/lvm: Don't unmount the container twice on delete
  • lxd/storage/lvm: Handle "i" in sizes
  • lxd/storage/lvm: Parse "volume.size" not "size" property
  • lxd/storage/lvm: Remove volume.lvm.thinpool_name
  • lxd/storage/lvm: Lock during StoragePoolVolume{M,Um}ount
  • lxd/storage/zfs: Lock during StoragePoolVolume{M,Um}ount
  • lxd/storage/zfs: Correctly handle configuration keys
  • lxd/storage/zfs: Only use size property in the loop case
  • lxd/storage/zfs: Remove very repetitive log message
  • lxd/storage/zfs: Set mountpoint=none on old images
  • shared/idmap: DefaultIdmapSet is always for root
  • shared/idmap: Implement parsing of kernel id maps
  • shared/idmap: Improve parsing of the shadow id files
  • shared/simplestreams: Properly handle image rebuilds
  • tests: Adapt to command line unification
  • tests: Add LVM specific storage pool tests
  • tests: Also unmount the devlxd path
  • tests: Always cleanup loop devices
  • tests: Always use 25MB volumes for LVM
  • tests: Fix lxd auto init test suite
  • tests: Improve performance of deadcode test
  • tests: Test custom storage volume creation

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.9.2 release announcement 20th of February 2017

The changes in this release include

This is another bugfix release for LXD 2.9, fixing migration issues reported by our users.

Bugfixes:

  • lxd/containers: Add fun to detect root disk device
  • lxd/containers: Ensure proper root disk device
  • lxd/containers: Helper to retrieve pool from devices
  • lxd/containers: Path may only be used by one disk
  • lxd/init: Fix regressions caused by storage work
  • lxd/init: Small fixes
  • lxd/migration: Call helper to detect valid storage pool
  • lxd/migration: Fix moving containers with storage api
  • lxd/patches: Handle partial upgrades + pool fixes
  • lxd/patches: Handle partial upgrades + pool fixes
  • lxd/patches: Improve btrfs upgrade
  • lxd/patches: Improve dir upgrade
  • lxd/patches: Only rerun pool updates
  • lxd/profiles: Verify root disk devices
  • lxd/storage/btrfs: Enable quotas on the pools we create
  • lxd/storage/dir: Delete image from database
  • Makefile: Always include gorilla/context
  • Makefile: Drop repeated calls to "go get"
  • tests: Add lxd init --auto tests
  • tests: Add test for root disk devices in profiles
  • tests: Execute tests based on available tools
  • tests: Fix mixed tab/spaces again

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.9.1 release announcement 16th of February 2017

The changes in this release include

We made this follow-up bugfix release to correct a few regressions introduced by LXD 2.9.

Bugfixes:

  • doc: Document the "pool" property for disk devices
  • lxc/storage: Fix help output for create
  • lxc/storage: simplify
  • lxd/daemon: Allow unsetting the deprecated storage keys
  • lxd/patches: Add more comments to storage upgrade code
  • lxd/storage: Improve logging
  • lxd/storage: Rename and add opcode functions
  • lxd/storage: Use existing ZFS {pool, dataset} or create it
  • lxd/storage: Use unified operation ids when locking
  • tests: Use dataset as pool or existing pool for ZFS

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.9 release announcement 15th of February 2017

The changes in this release include

New features:

  • Introduce the LXD storage management API
    • Allows for multiple storage pools in LXD
    • Pools can be used to store containers and custom volumes
    • New /1.0/storage-pools API (see rest-api.md)
    • New "lxc storage" set of commands
    • Updated "lxd init" to support creating storage pools
  • Allow setting network interface name with "lxc network attach"
  • New "lxc file delete" command and API
  • Ability to append to rather than overwrite a file through the API
  • New "ipv4.dhcp.expiry" and "ipv6.dhcp.expiry" config options for DHCP lease time

Bugfixes:

  • doc: Clarify PUT vs PATCH (Issue 2873)
  • doc: Note that LXD assumes full control over its ZFS dataset
  • doc: Update database.md to match current DB schema
  • lxc: Don't include spaces in translated strings
  • lxc/list: Fix regression in json output (Issue 2887)
  • lxd/containers: Disable IPv6 on host side veth when bridged (issue 2845)
  • lxd/containers: Don't block resolution on non-existing paths
  • lxd/containers: Don't check the image fingerprint twice
  • lxd/containers: Fix concurent read/write to s.conns in exec (Issue 2862)
  • lxd/containers: Fix error handling on FileRemove
  • lxd/containers: Set default values for USER, HOME and LANG (Issue 2830)
  • lxd/daemon: Mount a tmpfs under devlxd (Issue 2877)
  • lxd/daemon: Use a tmpfs for shmounts
  • lxd/db: Actually enable foreign keys per connection
  • lxd/db: Raise DB lock timeout to 30s, retry every 30ms (Issue 2826)
  • lxd/db: Rely on CASCADE (Issue 2844)
  • lxd/db: Remove some extra cleanup code
  • lxd/devlxd: Fix extraction of fd from UnixConn with go tip
  • lxd/images: Fix partial image fingerprint matches
  • lxd/images: Move imagesDownloading out of the daemon struct
  • lxd/init: Don't check the storage backend twice
  • lxd/migration: Clarify CRIU related errors
  • lxd/migration: Don't report migration success on failure
  • lxd/nsexec: Close *DIR stream returned by fdopendir()
  • lxd/nsexec: Free allocated memory
  • lxd/storage/btrfs: Fix recursive subvol deletion
  • lxd/storage/zfs: Simplify device tracking logic
  • Makefile: Use system libsqlite3 if available
  • network: Skip ip6tables clear on non-ipv6 hosts (Issue 2842)
  • shared: Forward user-agent and other headers on redirect (Issue 2805)
  • shared/api: Use consistent json and yaml field names
  • shared/simplestreams: Always prefer squashfs when available
  • shared/utils: Don't do chown on windows
  • shared/utils: FileCopy should also keep owner
  • shared/utils: FileCopy should keep the same mode
  • tests: Add golint for shared/api
  • tests: Avoid a zfs race
  • tests: Empty and validate network tables
  • tests: Fix typo
  • tests: Properly cleanup in template testsuite
  • tests: Switch to use gofmt instead of "go fmt"
  • tests: The monitor can exit on its own (ignore kill failure)

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.9 release announcement 26th of January 2017

This is the ninth bugfix release for LXD 2.0.

The changes since LXD 2.0.8 are

Minor improvements:

  • Exec sessions being killed by a signal will now report the signal number as part of their exit code.
  • VLAN device types are now properly reported in the API and client.
  • The client will now show the date an image was last used at (in lxc image info).
  • The client will now let you delete multiple images at once.
  • LXD is now using Weblate for its translations.

Bugfixes:

  • client: Add a done signal to Monitor API
  • client: Better handle http errors
  • client: Commonize update methods
  • doc: Add Documentation on Network Configuration via cloud-init
  • doc: Added reference to godoc to README.md
  • doc: Update README.md for CI and Weblate status
  • extra/lxc-to-lxd: Add more unsupported config keys
  • extra/lxc-to-lxd: All properties must be strings
  • extra/lxc-to-lxd: Copy the rootfs by default, don't move it
  • extra/lxc-to-lxd: Show nicer error on missing python3-lxc
  • extra/lxc-to-lxd: Switch to using a config whitelist
  • global: Fix typos
  • global: "gofmt -s" run
  • lxc: Better handle timestamps
  • lxc: Make help messages more consistent
  • lxc: Properly check yaml errors
  • lxc/init: Fix example
  • lxc/init: Properly replace args list
  • lxc/launch: Just use init.go's flags()
  • lxc/list: Sort IPv4 and IPv6 addresses
  • lxc/remote: Update help
  • lxd-bridge: Add ip6tables filter rules
  • lxd-bridge: DHCP happens over UDP only
  • lxd-bridge: Make IPv4 firewalling optional (default is enabled)
  • lxd/containers: Add basic logging to container creation
  • lxd/containers: Allow passing in-memory buffers to a FileResponse
  • lxd/containers: Also call setgroups when attaching to the container
  • lxd/containers: Avoid race condition in network fill function
  • lxd/containers: Blacklist lxc.syslog and lxc.ephemeral in raw.lxc
  • lxd/containers: Detect background tasks to allow clean exit
  • lxd/containers: Do mounts in the right order
  • lxd/containers: Don't attempt to read xattrs from symlinks
  • lxd/containers: Don't block resolution on non-existing paths
  • lxd/containers: Don't record last_state.power twice
  • lxd/containers: Exec() return attached PID && take bool arg
  • lxd/containers: Fix container state recording
  • lxd/containers: Fix device hotplug with major/minor set
  • lxd/containers: Fix file push error handling
  • lxd/containers: Fix generated seccomp profile
  • lxd/containers: Fix logging for file_manip commands
  • lxd/containers: Improve error handling and reporting during export
  • lxd/containers: Return a clear error when replacing a directory
  • lxd/daemon: Common codepath for http client
  • lxd/daemon: Don't set InsecureSkipVerify on daemon's tls config
  • lxd/daemon: Log daemon version
  • lxd/daemon: Make directories with stricter permissions
  • lxd/daemon: Make LXD_DIR with +x for group and everyone
  • lxd/daemon: Only mark ready once containers are up
  • lxd/daemon: Properly validate daemon keys on unset
  • lxd/daemon: Use our custom http server when updating HTTPS address too
  • lxd/db: Drop unused code from db.go
  • lxd/images: Close race condition in image download
  • lxd/images: Track speed during network transfers
  • lxd/main: Move activateifneeded to own file
  • lxd/main: Move callhook to own file
  • lxd/main: Move daemon to own file
  • lxd/main: Move forkexec to own file
  • lxd/main: Move forkgetnet to own file
  • lxd/main: Move forkmigrate to own file
  • lxd/main: Move forkstart to own file
  • lxd/main: Move init to own file
  • lxd/main: Move migratedumpsuccess to own file
  • lxd/main: Move netcat to own file
  • lxd/main: Move ready to own file
  • lxd/main: Move shutdown to own file
  • lxd/main: Move waitready to own file
  • lxd/main: Rename nsexec.go to main_nsexec.go
  • lxd/migrate: Use the generated snapshot list
  • lxd/patches: Mark all patches as applied on create
  • lxd/profiles: Fix unusued variable
  • lxd/storage: btrfs: Don't assume a path is a subvolume
  • lxd/storage: Change ContainerStart to take the name and path to start
  • lxd/storage: Rework EEXISTS detection on create
  • lxd/storage: zfs: Simplify device tracking logic
  • Makefile: Rework "make dist" to be more reliable
  • shared: add GetPollRevents()
  • shared: Add WebsocketExecMirror()
  • shared: Centralize all cert fingerprint generation
  • shared: Convert TransferProgress to ReadCloser
  • shared: ExecReaderToChannel() use sync.Once
  • shared: Give Architecture handling its own package
  • shared: Give IO progress tracker its own package
  • shared: Give simplestreams client its own package
  • shared: Give version handling its own package
  • shared: Implement write tracking
  • shared: Make a helper to compute cert fingerprint
  • shared: Move Device/Devices types to lxd package
  • shared: Move FromLXCState out of shared
  • shared: Move REST API to new package: certificate
  • shared: Move REST API to new package: container
  • shared: Move REST API to new package: godoc
  • shared: Move REST API to new package: image
  • shared: Move REST API to new package: network
  • shared: Move REST API to new package: operation
  • shared: Move REST API to new package: profile
  • shared: Move REST API to new package: response
  • shared: Move REST API to new package: server
  • shared: Move REST API to new package: status
  • shared: Move WebsocketUpgrader to network.go
  • shared: Remove GroupName function and add UserId one
  • shared: Rename idmapset_test_linux.go to idmapset_linux_test.go
  • shared: Support absolute file transfer tracking
  • shared/idmapset: Drop debugging code
  • shared/idmapset: Fix intersection test
  • shared/logging: Introduce our own formatter
  • shared/logging: Make PrintStack print at the Error level
  • shared/simplestreams: Don't depend on custom http handler
  • shared/simplestreams: Pass UserAgent as argument
  • shared/util: Add Int64InSlice()
  • shared/util: GetByteSizeString() take precision argument
  • shared/util: Improve byte parsing
  • shared/util: ParseByteSizeString() deal with bytes
  • tests: Don't ignore errors in db tests
  • tests: Fix bad variable name
  • tests: Fix deadcode to work with new upstream
  • tests: Fix shellcheck being confused by cd
  • tests: Fix standalone remote test
  • tests: Shorten test name to fit on Jenkins
  • tests: Simplify testsuite spawn code
  • tests: Test lxd shutdown
  • tests: Use lxc restart instead of reboot

Downloads

The release tarballs can be found on our download page.

LXD 2.8 release announcement 24th of January 2017

The changes in this release include

New features:

  • Exec sessions being killed by a signal will now report the signal number as part of their exit code.
  • The first stage of our Go client API rework is now done with a new api module containing all REST API definitions.
  • The dnsmasq instance used for LXD managed bridges is now running as an unprivileged user.
  • VLAN device types are now properly reported in the API and client.
  • The client will now show the date an image was last used at (in lxc image info).
  • LXD is now using Weblate for its translations.

Bugfixes:

  • client: Add a done signal to Monitor API
  • client: Better handle http errors
  • doc: Add Documentation on Network Configuration via cloud-init
  • doc: Update README.md for CI and Weblate
  • doc: Update README.md for godoc
  • global: Fix typos
  • global: "gofmt -s" run
  • i18n: Improved and completed french translation
  • i18n: Update message catalogs and Japanese translation
  • i18n: Update translations from weblate
  • lxc: Better handle timestamps
  • lxc/file: Fix directory permissions on recursive push (Issue #2759)
  • lxc/init: Properly replace args list
  • lxc/list: Fix unused variable
  • lxc/list: Sort IP addresses in output
  • lxc/network: Better handle network modifications (Issue #2785)
  • lxc/network: Sort UsedBy list on show
  • lxc: Properly check yaml errors
  • lxc/remote: Update help
  • lxd/containers: Allow passing in-memory buffers to a FileResponse
  • lxd/containers: Don't attempt to read xattrs from symlinks (Issue #2801)
  • lxd/containers: Improve error handling and reporting during export
  • lxd/containers: Report -1 (255) on signal exit during exec
  • lxd/containers: Report exit code when we got killed by signal
  • lxd/db: Drop unused code from db.go
  • lxd/devices: Don't ignore regexp failures
  • lxd/images: Close race condition in image download (Issue #2739)
  • lxd/init: We need an address in CIDR notation instead of CIDR subnet
  • lxd/migrate: Use the generated snapshot list
  • lxd/network: Clean up leases for static assignments (Issue #2781)
  • lxd/networks: Handle empty dnsmasq pid file (Issue #2767)
  • lxd/network: Update permissions of network directories (Issue #2804)
  • lxd/patches: Mark all patches as applied on create
  • lxd/profiles: Fix unusued variable
  • lxd/storage: Don't assume a path is a subvolume (Issue #2748)
  • shared: Add Int64InSlice()
  • shared: Have GetByteSizeString() take a precision argument
  • shared: Improve byte parsing in GetByteSizeString() and ParseByteSizeString()
  • shared: Move Device/Devices types to lxd package
  • shared: ParseByteSizeString() deal with bytes
  • shared: Remove GroupName function and add UserId one
  • tests: Don't ignore errors in db tests
  • tests: Fix deadcode to work with new upstream
  • tests: Fix shellcheck being confused by cd
  • tests: Use lxc restart whenever possible

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.7 release announcement 20th of December 2016

The changes in this release include

New features:

  • New "ipv4.firewall" and "ipv6.firewall" network attributes controlling the generation of iptables FORWARD rules
  • New "ipv4.routes" and "ipv6.routes" network attributes allowing for additional static routes to be set to the network.
  • New "lxd import" command allowing importing of containers when all that exists is the "containers" directory.

Bugfixes:

  • client: Commonize update methods and add PATCH
  • extra/lxc-to-lxd: Add more unsupported config keys
  • extra/lxc-to-lxd: All properties must be strings (Issue #2663)
  • extra/lxc-to-lxd: Copy rootfs by default, do not move
  • extra/lxc-to-lxd: Show nicer error on missing python3-lxc
  • extra/lxc-to-lxd: Switch to using whitelist
  • i18n: Update french translation
  • lxc/file: Fix off by one error in push
  • lxc: Improve help messages (Issue #2719)
  • lxc/init: Fix example
  • lxc/launch: Just use init.go's flags()
  • lxd: Common codepath for http client
  • lxd: Don't set InsecureSkipVerify on daemon's tls config
  • lxd: Log daemon version
  • lxd: Make LXD_DIR 711 by default (needed for unprivileged containers)
  • lxd: Only mark daemon ready once containers are up
  • lxd: Properly validate daemon keys on unset (Issue #2698)
  • lxd: Refactoring of sub-command code
  • lxd: Use our custom http server when updating HTTPS address too
  • lxd/containers: Add basic logging to container creation
  • lxd/containers: Avoid race condition in network fill function
  • lxd/containers: Blacklist lxc.syslog and lxc.ephemeral
  • lxd/containers: Cleanup leftover temp file
  • lxd/containers: Detect background tasks to allow clean exit on exec
  • lxd/containers: Do mounts in the right order (Issue #2717)
  • lxd/containers: Don't record last_state.power twice
  • lxd/containers: Fix container state recording (Issue #2686)
  • lxd/containers: Fix device hotplug with major/minor set
  • lxd/containers: Fix file push error handling
  • lxd/containers: Fix logging for file_manip commands
  • lxd/containers: Move FromLXCState out of shared
  • lxd/containers: Return a clear error when replacing a directory (Issue #2668)
  • lxd/containers: Rework EEXISTS detection on create
  • lxd/networks: Allow for network-specific lease updates
  • lxd/networks: DHCP over TCP has never been implemented
  • lxd/nsexec: Also call setgroups (Issue #2724)
  • lxd/seccomp: Fix generated seccomp profile
  • lxd/storage: Change ContainerStart to take the name and path to start
  • Makefile: Rework "make dist"
  • shared: Give Architecture handling its own package
  • shared: Give IO progress tracker its own package
  • shared: Give simplestreams client its own package
  • shared: Give version handling its own package
  • shared: Introduce our own formatter
  • shared: Make a helper to compute cert fingerprint
  • shared: Make PrintStack print at the Error level
  • shared: Move WebsocketUpgrader to network.go
  • shared: Rename idmapset_test_linux.go to idmapset_linux_test.go
  • shared/idmap: Drop debugging code
  • shared/idmap: Fix intersection test
  • shared/simplestreams: Don't depend on custom http handler
  • shared/simplestreams: Pass UserAgent as argument
  • tests: Add pki test
  • tests: Only attach lxdbr0 if it is present on the host
  • tests: Simplify testsuite spawn code
  • tests: Test lxd shutdown

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.8 release announcement 24th of November 2016

Follow-up bugfix release to fix a regression introduced by the rushed 2.0.7 release.

The changes since LXD 2.0.7 are

Bugfixes:

  • Don't grab addresses from public remotes

Downloads

The release tarballs can be found on our download page.

LXD 2.6.2 release announcement 24th of November 2016

Follow-up bugfix release to fix a regression introduced by the rushed 2.6.1 release.

The changes in this release include

Bugfixes:

  • Don't grab addresses from public remotes

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.7 release announcement 24th of November 2016

This is an emergency bugfix release to fix a critical regression in LXD 2.0.6.

The regression was causing pre-existing unprivileged containers to potentially start as privileged containers upon restart.

The changes since LXD 2.0.6 are

Bugfixes:

  • extra/bash: Better parse containers list
  • lxc/copy: Make container copy more robust (Issue #2640)
  • lxd/containers: Don't assign idmaps to privileged containers
  • lxd/containers: Don't break when parsing old containers
  • lxd/containers: Don't double apply templates
  • lxd/containers: Fix concurrent map iteration+modification
  • lxd/containers: Fix idmap handling of pre-idmap containers (Issue #2644)
  • tests: Add tests for file templating (Issue #2642)

Downloads

The release tarballs can be found on our download page.

LXD 2.6.1 release announcement 24th of November 2016

This is an emergency bugfix release to fix a critical regression in LXD 2.6.

The regression was causing pre-existing unpriivleged containers to potentially start as privileged containers upon restart.

The changes in this release include

Bugfixes:

  • extra/bash: Better parse containers list
  • lxc/copy: Make container copy more robust (Issue #2640)
  • lxc/init: Remove unicode character from lxc warning
  • lxd/containers: Don't assign idmaps to privileged containers
  • lxd/containers: Don't break when parsing old containers
  • lxd/containers: Don't double apply templates
  • lxd/containers: Fix concurrent map iteration+modification
  • lxd/containers: Fix idmap handling of pre-idmap containers (Issue #2644)
  • tests: Add tests for file templating (Issue #2642)

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.6 release announcement 23rd of November 2016

This is the sixth bugfix release for LXD 2.0.

The changes since LXD 2.0.5 are

Minor improvements:

  • Support for container specific uid/gid maps (see userns-idmap.md)

Bugfixes:

  • appveyor: Add config to git (Issue #2537)
  • appveyor: Cleanup appveyor.yml before modifications
  • appveyor: Create archive with platform specifier in its name
  • appveyor: Do verbose testing for test names and timings
  • appveyor: Publish compiled binaries for download
  • client: Rework progress handling
  • doc: Add hacking guide (debugging.md)
  • doc: Add official Windows support in README
  • doc: Bump liblxc version required in README
  • doc: Sort API endpoints in rest-api.md
  • doc: Update README to specify docker installation details
  • doc: Update requirements, we actually require 2.0.0 or higher
  • doc: Use consistent method ordering in rest-api.md
  • extra/bash: Allow dash in parameters to lxc-client bash-completion
  • extra/bash: Fix _lxd_profiles in lxc-client bash-completion
  • extra/lxc-to-lxd: Better output with no container
  • extra/lxc-to-lxd: Check that source path exists (disk) (Issue #2572)
  • extra/lxc-to-lxd: Consistent logging
  • extra/lxc-to-lxd: Don't fail dry-run with runnning containers
  • extra/lxc-to-lxd: Drop dependency on pylxd
  • extra/lxc-to-lxd: Fix lxdpath handling
  • extra/lxc-to-lxd: Formatting
  • extra/lxc-to-lxd: Migrate lxc.aa_profile if set
  • extra/lxc-to-lxd: Print summary and proper exit code
  • lxc/copy: Don't use the operation as a marker of success
  • lxc/copy: Wait on the source operation too
  • lxc/delete: update help text
  • lxc/exec: Set term to "dumb" on windows (Issue #2288)
  • lxc/finger: update help text
  • lxc: Fix tests on Windows/Mac
  • lxc/list: Fix typo in help message
  • lxc/remote: Fix remote add with Go tip
  • lxc/restore: update help text
  • lxc: Use .yaml as the yaml extension in examples
  • lxd/certificates: Export all documented certificate fields
  • lxd/containers: Add /snap/bin to PATH even if only /snap exists
  • lxd/containers: Also clean up apparmor stuff in OnStart when something fails
  • lxd/containers: Attach to userns on file operations
  • lxd/containers: Be more verbose on mkdir failure
  • lxd/containers: Better handle concurrent stop/shutdown
  • lxd/containers: Catch and return more errors in OnStop
  • lxd/containers: Clarify container delete failure error
  • lxd/containers: Don't destroy ephemeral container on restart (Issue #2555)
  • lxd/containers: Don't double delete ephemeral containers
  • lxd/containers: Don't show invalid logs
  • lxd/containers: Fix forkmount to work with 4.8 and higher
  • lxd/containers: Fix invalid filename of metadata on export (Issue #2467)
  • lxd/containers: Improve config validation on update
  • lxd/containers: Improve container error handling
  • lxd/containers: Improve container locking mechanism (Issue #2612)
  • lxd/containers: log OnStart/OnStop hook errors
  • lxd/containers: More reliable container autostart (Issue #2469)
  • lxd/containers: Only load kernel modules if not loaded
  • lxd/containers: Properly validate CPU allowance
  • lxd/containers: Properly validate memory limits (Issue #2483)
  • lxd/containers: Record the err from go-lxc
  • lxd/containers: Remove legacy code from OnStop
  • lxd/containers: Remove unused code
  • lxd/containers: Save properties on publish
  • lxd/containers: Set LXC loglevel to match daemon (Issue #2528)
  • lxd/containers: Skip leading whitespace in raw.lxc
  • lxd/containers: Start storage when necessary in stateful start
  • lxd/containers: Timeout container freeze on stop
  • lxd/images: Detect out of disk space unpack errors (Issue #2201)
  • lxd/images: Don't make unnecessary image copies (Issue #2508)
  • lxd/images: Don't update images at all if interval is 0
  • lxd/images: Store the simplestreams cache to disk (Issue #2487)
  • lxd/init: Detect zfs kernel support
  • lxd/init: Ignore ZFS if in a container
  • lxd/main: Immediately exit when no DB in activateifneeded
  • lxd/migration: Fix a race for collecting logs
  • lxd/migration: Remove debugging by file creation
  • lxd/migration: Start migration storage at the right time (Issue #2505)
  • lxd/storage: Fix 10s delay on removing used ZFS images (Issue #2617)
  • lxd/storage: Freeze before copying in dir backend
  • lxd/storage: Simplify rsync code
  • shared/certificates: Be more thorough when parsing ip addr
  • shared: Disable keepalives in http.Transports
  • shared: Move Linux specific tests away (Issue #2449)
  • shared/simplestreams: Cleanup unused properties
  • tests: Better fix LXD_DEBUG
  • tests: Cleanup leftover containers
  • tests: Don't depend on main.sh for filemanip
  • tests: Implement LXD_VERBOSE
  • tests: Reduce verbosity under LXD_DEBUG
  • travis: Run the client tests
  • travis: Update to match Jenkins Go versions

Downloads

The release tarballs can be found on our download page.

LXD 2.6 release announcement 22nd of November 2016

The changes in this release include

New features:

  • Support for container specific uid/gid maps (see userns-idmap.md)
  • Send progress notification during container migration (API only)
  • Copy the source image properties into the container properties (image. namespace)

Bugfixes:

  • doc: Add hacking guide (debugging.md)
  • doc: Add missing pci options for gpu in configuration.md
  • doc: Bump liblxc version required in README
  • doc: Document user.network-config
  • doc: Exec recording needs an API extension
  • doc: Specify docker installation details in README
  • lxc/delete: Update help text
  • lxc/file: Fix recursive file pull/push on Windows
  • lxc/finger: Update help text
  • lxc/restore: Update help text
  • lxc: Rework progress handling
  • lxd/containers: Actually surface the last used update error
  • lxd/containers: Add /snap/bin to PATH even if only /snap exists
  • lxd/containers: Attach to userns on file operations
  • lxd/containers: Better handle concurent stop/shutdown
  • lxd/containers: Clarify container delete failure error
  • lxd/containers: Correctly set liblxc loglevel to debug when in --debug mode
  • lxd/containers: Don't double delete ephemeral containers
  • lxd/containers: Improve container error handling
  • lxd/containers: Improve container locking mechanism (Issue #2612)
  • lxd/containers: Save properties on publish
  • lxd/containers: Skip leading whitespace in raw.lxc
  • lxd/containers: Start storage when necessary during stateful start
  • lxd/containers: Timeout container freeze on stop
  • lxd/containers: Track speed during network transfers
  • lxd/images: Don't update images at all if interval is 0
  • lxd/main: Immediately exit when no DB in activateifneeded
  • lxd/networks: Fixed minor typo in checkNetwork
  • lxd/networks: Spawn dnsmasq on FAN bridges
  • lxd/storage: Fix 10s delay on removing ZFS used images (Issue #2617)
  • lxd/storage: Freeze container during copy on directory backend
  • scripts/lxc-to-lxd: Better output with no container
  • scripts/lxc-to-lxd: Check that source path exists (disk) (Issue #2572)
  • scripts/lxc-to-lxd: Consistent logging
  • scripts/lxc-to-lxd: Don't fail dry-run with runnning containers
  • scripts/lxc-to-lxd: Drop dependency on pylxd
  • scripts/lxc-to-lxd: Fix lxdpath handling
  • scripts/lxc-to-lxd: Formatting
  • scripts/lxc-to-lxd: Migrate lxc.aa_profile if set
  • scripts/lxc-to-lxd: Print summary and proper exit code
  • shared/idmapset: Fix typo in Intersects
  • shared/simplestreams: Cleanup unused properties
  • tests: Cleanup leftover containers
  • tests: Don't depend on main.sh for filemanip
  • tests: Implement LXD_VERBOSE for reduced verbosity
  • tests: Reduce verbosity under LXD_DEBUG

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.5 release announcement 25th of October 2016

The changes in this release include

New features:

  • lxc/remote: Allow adding a new remote just by FQDN/IP (without a name)
  • lxd/containers: Implement exec output recording in the API
  • lxd/images: Store the simplestreams cache to disk (allows for offline use of those remote images)
  • lxd/certificates: Add support for PUT/PATCH of certificates
  • lxd/containers: Support signal forwarding in exec session
  • lxd/containers: Add support for GPU hotplug ("gpu" device type)

Bugfixes:

  • appveyor: Add appveyor config to git (Issue #2537)
  • client: Disable keepalives in http.Transports
  • client: Fix tests of client on Windows/Mac
  • doc: Add official Windows support to README
  • doc: Sort API endpoints in rest-api
  • doc: Use consistent method ordering in rest-api
  • doc: Use spaces everywhere
  • doc: We actually require 2.0.0 or higher
  • doc: Workaround github markdown renderer
  • examples: Use .yaml as the yaml extension
  • extra: Added the command network to lxc-client bash-completion
  • extra: Allow dash in parameters to lxc-client bash-completion
  • extra: Fix _lxd_profiles in lxc-client bash-completion
  • lxc/copy: Don't use the operation as a marker of success
  • lxc/copy: Wait on the source operation too
  • lxc/exec: Set term to "dumb" on windows (Issue #2288)
  • lxc/file: Fix help typo
  • lxc/file: Fix mkdir -p /
  • lxc/file: Normalize paths before sending them to the server (Issue #2557)
  • lxc/init: Fix typo in nictype value for -n
  • lxc/list: Fix typo in lxc list help
  • lxc/push: Fix typo (Issue #2501)
  • lxc/remote: Fix remote add with Go tip
  • lxd/certificates: Export all documented certificate fields
  • lxd/containers: Be more verbose on mkdir failure
  • lxd/containers: Catch and return more errors in OnStop
  • lxd/containers: Clean up apparmor stuff in OnStart when something fails
  • lxd/containers: Don't destroy ephemeral container on restart (Issue #2555)
  • lxd/containers: Don't show invalid logs
  • lxd/containers: exec: Remove unused code
  • lxd/containers: Fix forkmount to work with 4.8 and higher
  • lxd/containers: Fix wording of seccomp error message
  • lxd/containers: Improve config validation on update
  • lxd/containers: Log OnStart/OnStop hook errors
  • lxd/containers: More reliable container autostart (Issue #2469)
  • lxd/containers: Only load kernel modules if not loaded
  • lxd/containers: Properly validate CPU allowance
  • lxd/containers: Properly validate memory limits (Issue #2483)
  • lxd/containers: Record the err from go-lxc
  • lxd/containers: Remove legacy code from OnStop
  • lxd/containers: Report correct dev type in log
  • lxd/containers: Set LXC loglevel to match daemon (Issue #2528)
  • lxd/containers: USB vendorid is mandatory, productid isn't
  • lxd/devices: Be less optimistic about netlink info
  • lxd/devices: Use DEVNAME entry of netlink for usb
  • lxd/images: Detect out of disk space unpack errors (Issue #2201)
  • lxd/images: Don't make unnecessary image copies (Issue #2508)
  • lxd/images: Fix invalid filename of metadata on export (Issue #2467)
  • lxd/init: Detect zfs kernel support
  • lxd/init: Ignore ZFS if in a container
  • lxd/migration: Fix a race for collecting logs
  • lxd/migration: Remove debugging by file creation
  • lxd/migration: Start migration storage at the right time (Issue #2505)
  • lxd/networks: Always allow communication with dnsmasq (Issue #2506)
  • lxd/networks: Always pass --enable-ra with IPv6 (Issue #2481)
  • lxd/networks: Fill DHCP checksums
  • lxd/networks: Fix IPv6 DHCP logic
  • shared/cert: be more thorough when parsing ip addr
  • shared: Move Linux specific tests away (Issue #2449)
  • travis: Run the client tests
  • travis: Update to match Jenkins Go versions

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.4.1 release announcement 5th of October 2016

The primary goal for this release is to publish release tarballs that actually report LXD as "2.4.1" rather than "2.3" as the release ones mistakenly did.

We're including a couple of bugfixes in the process too.

The changes in this release include

Bugfixes:

  • shared: Remove logging import
  • tests: add a test to make sure we don't accidentally include new deps
  • extras: Added the command shell to lxc-client bash-completion

Downloads

The release tarballs can be found on our download page.

LXD 2.0.5 release announcement 5th of October 2016

This is the fifth bugfix release for LXD 2.0.

The changes since LXD 2.0.4 are

Note that several migration fixes included in this release depend on a newer go-lxc. If building manually, you may need to update your copy of go-lxc. If building for a distribution, you may need to update your packaged version of go-lxc to a newer snapshot.

Minor improvements:

  • Support for AppArmor namespacing and stacking
  • Rework LXD daemon logging to be cleaner and more generally useful (Issue #1928)
  • "lxc info CONTAINER" now shows the name of the remote for the container
  • Client errors now include the remote the container is on
  • /snap/bin is included to PATH if present in the container

Bugfixes:

  • doc: Add txqueuelen tweak.
  • doc: Clarify that user_subvol_rm_allowed is needed for btrfs nesting (Issue #2338)
  • doc: Fix the table style of environment.md (Issue: #2410)
  • doc: Fix typos in production-setup.md
  • doc: Remove trailing spaces in production-setup.md
  • doc: Spacing cleanup
  • extras: Containers state checking for start, stop and exec commands
  • extras: Fixed container convert from LXC to LXD
  • fuidshift: expand symlinks to last path component
  • lxc: Drop unused httpAddr property
  • lxc/exec: Document lxc exec -- args
  • lxc/exec: Use os.LookupEnv from go 1.5 to find environment vars
  • lxc: Fix spacing alignment in config.go's examples
  • lxc/help: Send error to stdout (Issue #2301)
  • lxd/apparmor: Be less restrictive when unprivileged
  • lxd-bridge: Fail on dnsmasq failure
  • lxd-bridge: Fix crash in lxd-bridge-proxy
  • lxd: Consistently handle name conflicts
  • lxd/container: Allow unsetting any config key
  • lxd/container_lxc: handle xattrs
  • lxd/container: Retry generating petnames
  • lxd/container: Return an error on "restart" without force of a paused container (Issue #2311)
  • lxd/container: Rework container operation locking (Issue #2297)
  • lxd/daemon: Do our own socket activation (Issue #2333)
  • lxd/db: Fix int64 handling
  • lxd/db: Make a database backup on schema updates (Issue #2299)
  • lxd/db: Rework DB schema updates
  • lxd/image: Fix support for lzma alone file format (Issue #2360)
  • lxd/image: Tweak squashfs for low-memory systems (Issue #2382)
  • lxd/init: Change default host to all (::)
  • lxd/init: Change validation functions for consistency
  • lxd/init: Default to "dir" when "zfs" isn't available (Issue #2340)
  • lxd/init: Don't fail when passed "all" as an IP
  • lxd/init: Enable compression on new zfs pools
  • lxd/init: Fix listed default value for ZFS pool (Issue #2339)
  • lxd/init: use more intelligent logic for partition sizing
  • lxd/migration: Actually support copying across different CoW based backend types (Issue #2359)
  • lxd/migration: Also show warnings on c/r errors
  • lxd/migration: Bump ghost limit
  • lxd/migration: Don't use ActionScript if it's not available
  • lxd/migration: Preserve snapshot configuration
  • lxd/migration: Resume dumped container on failed restore
  • lxd/migration: Use liblxc's new preserves_inodes feature
  • lxd/network: Detect bonds
  • lxd/network: Detect openvswitch
  • lxd/network: Fix networkIsInUse
  • lxd/network: Move and rename isOnBridge
  • lxd/profile: Cleaner error on existing profile name
  • lxd/profile: Properly cleanup on profile removal (Issue #2347)
  • lxd/storage: Copy everything on container copy (Issue #2371)
  • lxd/storage: Extra checks and config for ZFS pools
  • Makefile: Don't recursively include test deps
  • README: Add AppVeyor badge (Windows testing)
  • shared: Add GetOwner stub for Windows (fixes #2438)
  • shared: Generate client certificate with proper extended usage info
  • shared: Make TestReaderToChannel transfer smaller
  • shared: New RunCommand wrapper function
  • tests: Add a test to make sure we don't accidentally include new deps
  • tests: add test for GetAllXattr()
  • tests: Fix apparmor version check
  • tests: Fix for newer shellcheck
  • tests: Force UTC timezone
  • tests: Only check leftovers on active LXD
  • tests: skip tests when xatts are not supported

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.4 release announcement 4th of October 2016

The changes in this release include

New features:

  • Add API support for push based migration (with a client acting as relay)
  • Add a new used_by property to profiles (similar to networks)
  • Update "lxc profile list" to show a table
  • Support configuring NAT through "lxd init"

Bugfixes:

  • lxd/init: Actually add new network to profile
  • lxd/init: Typo fix
  • lxd/migration: Don't use ActionScript if it's not available
  • lxd/network: Allow nil network config
  • lxd/network: Better deal with partially disabled IPv6
  • lxd/network: Fix automatic nat settings
  • lxd/network: Fix IPv6 forwarding logic
  • lxd/network: Fix rare race condition with sysctl
  • lxd/network: Fix typo discovered by lintian
  • lxd/zfs: Extra checks and config for ZFS pools
  • doc: Add AppVeyor badge (Windows testing)
  • Makefile: Don't recursively include test deps
  • shared: Add GetOwner stub for Windows
  • shared: Generate client certificate with proper extended usage info
  • test: Fix apparmor version check
  • test: Fix shellcheck warning
  • test: Force UTC timezone
  • test: Make container cleanup more reliable

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.3 release announcement 27th of September 2016

LXD 2.3 includes a few major features we've been working on for months.

The main one is a completely new set of API endpoints, configuration options and commands. This allows creating and configuring bridges through LXD, including IPv4 and IPv6 connectivity, Ubuntu FAN support, cross-host tunnels with GRE or VXLAN, various DNS modes, DHCP configuration and MAC filtering.

The other feature we're very excited about is support for AppArmor namespaces and stacking. This will allow containers to load apparmor profiles and further confine their workloads.

The changes in this release include

New features:

  • Introduce the new network management API
    • POST to /1.0/networks (see rest-api.md)
    • PUT to /1.0/networks/NAME (see rest-api.md)
    • PATCH to /1.0/networks/NAME (see rest-api.md)
    • DELETE to /1.0/networks/NAME (see rest-api.md)
    • "lxc network" commands
    • Network configuration in "lxd init"
    • The default profile now comes without network configuration
    • The old lxd-bridge code has been removed
    • Details of configuration options in configuration.md
  • Support for AppArmor namespaces and profile stacking
    • On supported kernels, containers will now be able to use apparmor
  • Introduce a new storage.lvm_mount_options daemon configuration option
  • Rework log message priorities and add more context to log messages
  • "lxc info" now shows the remote name in its output
  • The client now includes the remote name in error messages

Bugfixes:

  • apparmor: Be less restrictive when unprivileged
  • apparmor: create an apparmor namespace for each container
  • doc: Fix rest-api for PATCH addition
  • doc: Fix the table sytle of environment.md
  • extras: Containers state checking for start, stop and exec commands in bash completion
  • extras: Fixed container convert from LXC to LXD
  • extras: Update bash completion for current options
  • lxc: Drop unused httpAddr property
  • lxc/exec: Document lxc exec -- args
  • lxc/file: Make the target directory on recursive pull
  • lxd/db: Don't try to backup the database when running tests
  • lxd/db: Fix int64 handling
  • lxd/images: Tweak squashfs for low-memory systems
  • lxd/init: Change validation functions for consistency
  • lxd/init: Enable compression on new zfs pools
  • lxd/log: Add format wrappers for log functions
  • lxd/log: Add wrappers for log functions
  • lxd/log: Transition to new wrappers
  • lxd/migration: Actually support copying across different CoW based backend types
  • lxd/migration: Also show warnings on c/r errors
  • lxd/migration: Preserve snapshot configuration during copy
  • lxd/network: Detect bonds
  • lxd/network: Detect openvswitch
  • lxd/network: Fix networkIsInUse
  • lxd/network: Move and rename isOnBridge
  • shared: Export type checking functions
  • shared: fuidshift: Expand symlinks to last path component
  • shared: New RunCommand wrapper function
  • snappy: Add /snap/bin to PATH if present

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.2 release announcement 14th of September 2016

The changes in this release include

New features:

  • client: Add a "manpage" command (Issue #2280)
  • client: Add a "rename" alias (Issue #2320)
  • client/file: Recursive file push/pull (-r) (Issue #1218)
  • client/file: Support recursive directory creation (-p) (Issue #2290)
  • client/info: Add cpu usage (Issue #1867)
  • client/publish: Allow overriding compression algorithm (Issue #2296)
  • daemon: Make a database backup on schema updates (Issue #2299)
  • daemon/container: Expose CPU usage (Issue #1867)
  • daemon/container: Recursive file push/pull (Issue #1218)
  • daemon/image: Allow overriding compression algorithm (Issue #2296)
  • daemon/init: Ask for images.auto_update_interval (Issue #2167)
  • daemon/storage: Add new storage.zfs_use_refquota option (Issue #2354)

Bugfixes:

  • client/exec: Use os.LookupEnv from go 1.5 to find environment vars
  • client/help: Change lxc help to to go to stdout (Issue #2301)
  • daemon: Consistently handle name conflicts
  • daemon/container: Allow unsetting any config key
  • daemon/container: Fix USB transposed major/minor
  • daemon/container: Handle xattrs on publish
  • daemon/container: Retry generating petnames on conflict
  • daemon/container: Return an error on "restart" without force of a paused container (Issue #2311)
  • daemon/container: Rework container operation locking (Issue #2297)
  • daemon/container: Try to remove the usb bus dir after device disconnect (Issue #2306)
  • daemon/container: Various USB hotplug fixes (Issue #2312)
  • daemon/dir: Copy everything on container copy (Issue #2371)
  • daemon: Do our own socket activation (Issue #2333)
  • daemon/image: Fix support for lzma alone file format (Issue #2360)
  • daemon/init: Change default host to all (::)
  • daemon/init: Default to "dir" when "zfs" isn't available (Issue #2340)
  • daemon/init: Fix listed default value for ZFS pool (Issue #2339)
  • daemon/init: Use more intelligent logic for partition sizing
  • daemon/profile: Cleaner error on existing profile name
  • daemon/profile: Properly cleanup on profile removal (Issue #2347)
  • doc: Add txqueuelen tweak
  • doc: Clarify that user_subvol_rm_allowed is needed for btrfs nesting (Issue #2338)
  • doc: Fix typos in production-setup.md
  • doc: Rename api_extensions to api-extensions
  • i18n: Update po files and Japanese translation
  • lxd-bridge: Fix crash in lxd-bridge-proxy
  • tests: Fix race in alias test
  • tests: Make TestReaderToChannel transfer smaller
  • tests: Only check leftovers on active LXD

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.1 release announcement 16th of August 2016

LXD 2.1 is the first feature release following LXD 2.0 LTS.

Note that this release does not have LTS status and as such will not benefit from multi-year support or bugfix releases.

For production environments, we recommend that you stick to the LXD 2.0 LTS release.

The changes in this release include

New features:

  • client: Add a lxc shell alias by default
  • client: Build unix-like aliases directly into LXC (lxc {cp,ls,mv,rm}, lxc image {cp,ls,rm}, lxc image alias {ls,rm}, lxc remote {ls,mv,rm} and lxc config device {ls,rm})
  • client: Generate the client certificate on-demand
  • client/copy: Allow additional profiles and config to be set
  • client/copy: Pick a random name if not specified and same host
  • client/image: Add --format and json output
  • client/image: Allow deleting multiple images at once
  • client/list: Add support for config key columns (e.g. lxc list -c ns,security.privileged:privileged)
  • client/profile: lxc profile apply is now lxc profile assign
  • client/profile: New lxc profile add and lxc profile remove sub-commands
  • client/version: Do not show the version command by default
  • daemon: Add a global core.https_allowed_credentials key
  • daemon: Implement ETag support for all PUT calls
  • daemon: Implement PKI authentication (see doc/lxd-ssl-authentication.md)
  • daemon: Implement the PATCH method for all endpoints already supporting PUT
  • daemon/container: : Add config key for container force shutdown timeout (boot.host_shutdown_timeout)
  • daemon/container: Add some seccomp knobs (security.syscalls.{blacklist,blacklist_default,blacklist_compat,whitelist} and raw.seccomp)
  • daemon/container: Add support for the "usb" device type (see doc/configuration.md)
  • daemon/container: Record the last used date for containers (also expose in lxc info and lxc list)
  • daemon/zfs: Allow forcing snapshot removal through configuration (storage.zfs_remove_snapshots)

Bugfixes:

  • All the bugfixes listed as part of LXD 2.0.1, 2.0.2, 2.0.3 and 2.0.4
  • tests: Fix for newer shellcheck
  • lxd-bridge: Fail on dnsmasq failure
  • c/r: switch to the new ->migrate API
  • c/r: use liblxc's new preserves_inodes feature
  • c/r: bump ghost limit

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.4 release announcement 15th of August 2016

This is the fourth bugfix release for LXD 2.0.

The changes since LXD 2.0.3 are

Minor improvements:

  • /dev/net/tun is now a default device (always present)
  • lxd-bridge: dnsmasq is now configured with IPv6 name resolution
  • lxd-bridge: iptables rules now have a comment (Issue #2125)
  • "lxd init" now comes with reasonable defaults (Issue #1933)
  • The "images:" remote now uses simplestreams on new installations
  • "lxc image export" now always uses the image fingerprint as filename
  • Import progress is now reported for URL imports in "lxc image import"

Bugfixes:

  • apparmor: Add feature detection and clean things a bit
  • apparmor: Don't depend on the LXC apparmor profile (Issue #1942)
  • apparmor: Rename main two chunks of rules (Issue #1942)
  • apparmor: Setup a more modular apparmor profile (Issue #1942)
  • client: Don't share http client with go routines (Issue #2186)
  • client: Error when trying to remove a non-existent device (Issue #2277)
  • client: Fix API info reporting in "lxc info"
  • client: Fix spelling: permisson -> permission (Issue #2211)
  • client: Make client.websocket a public API
  • client: Make --version option visible (Issue #2171)
  • client: Relax constraints on WebsocketRecvStream args
  • client: Use named args for actionCmds
  • client/finger: Remove unused field from finger cmd (Issue #2170)
  • client/image: Fix image import from URL (Issue #2272)
  • client/list: fix concurrent read/write (Issue #2183)
  • client/list: Fix error handling and race in "lxc list" (Issue #1753)
  • client/pause: Add some additional help to lxc pause
  • client/profile: Add "lxc profile unset" to help message (Issue #2227)
  • daemon/container: Actually handle containers list error
  • daemon/container: Add sanity checks for common problems (Issue #2190)
  • daemon/container: Alphabetize device processing (Issue #2233)
  • daemon/container: Better errors when sanity checking devices
  • daemon/container: Better handle missing or invalid device types (Issue #2210)
  • daemon/container: Document and validate limits.*.priority values (Issue #2231)
  • daemon/container: Document image export target behavior and fix bugs (Issue #2205)
  • daemon/container: Don't unfreeze a container on stop (Issue #2164)
  • daemon/container: Fix flag name in init error message
  • daemon/container: Fix limits.disk.priority when set to 0 (Issue #2230)
  • daemon/container: Fix nic hotplug with openvswitch (Issue #2106)
  • daemon/container: Fix unix-char/unix-block in nested containers (Issue #2279)
  • daemon/container: Improve check for invalid physical devices
  • daemon/container: Remember the return code in the non wait-for-websocket case (Issue #2243)
  • daemon/container: Remove unused "name" argument from {create,remove}UnixDevice
  • daemon/container: Return more error information back to the user (Issue #2190)
  • daemon/container: Sort disk devices by their path before their names (Issue #2249)
  • daemon/container: Unfreeze frozen container on shutdown (Issue #2164)
  • daemon/db: Don't fail db upgrade if $LXD_DIR/containers doesn't exist (LP: #1602025)
  • daemon/db: remove fuse device from docker profile (Issue #2213)
  • daemon/migration: fix tempdir handling
  • daemon/profile: Prevent using invalid profile names (Issue #2274)
  • daemon/zfs: Fix ZFS volume size on 32bit architectures (Issue #2158)
  • daemon/zfs: Only delete copy- snapshots on delete (Issue #2127)
  • daemon/zfs: Remove subvolume in zfs.ImageCreate error flow (Issue #2194)
  • doc: Add /dev/net/tun and /dev/fuse to docs
  • doc: Added command to install squashfs-tools in README.md
  • doc: Document config_get in pongo templates
  • doc: Fixed errors on api examples with curl
  • doc: Initial documentation for production use of LXD (Issue #2256)
  • doc: Shuffle packages a bit in README.md
  • lxd-bridge-proxy: Remove unused code
  • Makefile: Also have "make dist" run multiple go get
  • scripts: Make lxc-to-lxd work inside virtualenv (Issue #2175)
  • simplestreams: Fix size reporting (Issue #2223)
  • simplestreams: Handle images without labels
  • simplestreams: List images available as both squashfs and tar.xz
  • simplestreams: Properly deal with unset expiry
  • simplestreams: Set proper user-agent
  • simplestreams: Use the hashes in the right order (Issue #2239)

Downloads

The release tarballs can be found on our download page.

LXD 2.0.3 release announcement 28th of June 2016

This is the third bugfix release for LXD 2.0.

The changes since LXD 2.0.2 are

Notes:

  • The "unsquashfs" command is now a LXD requirement as it is needed to unpack the newer Ubuntu images.
  • The REST API will now return a 201 code accompanied with a Location header following a POST to an endpoint returning an Sync response. It used to be sometimes returning a 200 without the Location header.
  • Containers now get a /dev/fuse device by default.

Minor improvements:

  • extras: Better bash completion coverage
  • client/delete: Allow -f as a shortcut of --force
  • client/info: Include the certificate fingerprint in server info (Issue #2098)
  • client/info: Show remote in the --show-log example provided on error
  • core: Add squashfs support as needed by newer Ubuntu images
  • core: Tweak TLS cipher list a bit to allow browsers to talk to LXD (Issue #2034)
  • daemon/container: Setup /dev/fuse by default

Bugfixes:

  • client: Better handle connection errors
  • client: Check all alias args to support subcommand aliases (Issue #2095)
  • client/file: Don't modify file permissions on edit
  • client/image: Use the daemon provided fingerprint on image copy (Issue #2162)
  • client: Normalize the URLs in the client (Issue #2112)
  • client/remote: Fix a panic in 'remote add' (Issue #2089)
  • client/remote: Fix parsing of <FQDN>:<PORT>
  • core: Better handle PEM decoding errors (Issue #2119)
  • core: Check for zero byte send in ReaderToChannel (Issue #2072)
  • core: Fix a concurrent websocket write crash
  • core: Use default buffer size for WebsocketUpgrader
  • daemon: Add missing linebreak to lxd help
  • daemon/api: Set Location on sync POST requests (Issue #2092)
  • daemon/btrfs: Fix failure to restore on btrfs (Issue #2058)
  • daemon/certificate: Fail to add an existing certificate
  • daemon/config: Allow "none" as compression algorithm (regression fix)
  • daemon/container: Add target path to rootfs tarball in image export (Issue #1980)
  • daemon/container: Better handle bind mounts
  • daemon/container: GET of a nonexistent file now 404s (Issue #2059)
  • daemon/container: Make devices cgroup config more readable
  • daemon/container: Improve error message on disk setup failure
  • daemon/container: Use defer to undo changes on failed update
  • daemon/db: Don't try to chmod zfs.img when testing db upgrades
  • daemon/db: Don't try to update /var/lib/lxd/containers in go tests
  • daemon/init: Actually unset the storage keys
  • daemon/lvm: Don't call lvextend with recent LVM versions
  • daemon/migration: Setup some buffering for zfs/btrfs send
  • daemon/migration: Simplify checkpoint/restore code everywhere
  • daemon/migration: switch to the new LXC migrate API
  • daemon/zfs: Improve block device detection
  • daemon/zfs: Mount if not mounted (Issue #1888)
  • doc: Clarify ZFS snapshot shortcomings (Issue #2055)
  • doc: Drop JSON example from configuration.md
  • doc: Fix certificates JSON examples to cover all fields
  • doc: Fix typo in "unix-block" description
  • doc: Improve shared folder documentation (README) (Issue #2123)
  • lxd/patches: Add support for one-time patches (separate from DB schema updates)
  • Makefile: go get has become worse, now need 3 runs
  • Makefile: Update repository URL for xgettext-go
  • migration: Consolidate error handling
  • test: 201 is a valid return code for alias creation
  • test: Add a test for ReaderToChannel
  • test: Add test for "lxc file edit" target file owner and permission

Downloads

The release tarballs can be found on our download page.

LXD 2.0.2 release announcement 30th of May 2016

This is the second bugfix release for LXD 2.0 and its first security update.

CVE-2016-1581

Robie Basak noticed that after setting up a loop based ZFS pool through "lxd init" the resulting file (/var/lib/lxd/zfs.img) was world readable.

This would allow any user on the system, and a potential attacker to copy and then read the data of any LXD container, regardless of file permissions inside the container.

LXD 2.0.2 fixes the "lxd init" logic to always set the mode of zfs.img to 0600.

Additionally a one-time upgrade step will trigger on first run and reset any existing zfs.img mode to be 0600.

If you manage an affected system and suspect an unauthorized user may have accessed the zfs.img file, you should consider replacing any secret that was stored in the affected containers (private keys and similar credentials).

CVE-2016-1582

Robie Basak noticed that when switching an unprivileged container (default, security.privileged=false) into privileged mode (by setting security.privileged to true), the container rootfs is properly remapped but the container directory itself (/var/lib/lxd/containers/XYZ) remains at 0755.

This is a problem because it allows an unprivileged user on the host to access any world readable path under /var/lib/lxd/containers/XYZ which may include setuid binaries.

Such setuid binaries could then be used on the host to access otherwise unaccessible data or to escalate one's privileges.

LXD 2.0.2 fixes this behavior by making sure all privileged containers are always root-owned and have their mode set to 0700 to prevent traversal by unprivileged users.

Additionally a one-time upgrade step will trigger on first run and reset any existing privileged containers' ownership and mode to root:root 0700

Downloads

The release tarballs can be found on our download page.

Commits

LXD 2.0.1 release announcement 16th of May 2016

This is the first bugfix release for LXD 2.0.

The bugfixes since LXD 2.0.0 are

  • Don't fail to start when shmounts can't be mounted, instead fail container startup
  • Invalidate the simplestreams cache on proxy change
  • Write the container's config file on start to the log path directly
  • Fix crash in list due to empty responses (Issue #1903)
  • Fail when removing non-existent profiles (Issue #1886)
  • Document --alias to image import (Issue #1900)
  • Fix "lxc start" and "lxc stop" options (stateful/stateless)
  • Give better error on invalid source stream (simplestreams)
  • Add basic REST API usage example to README.md
  • Fix typo in lxc stop --help
  • Convert lxc-to-lxd to stable supported pylxd API (Issue #1901)
  • Properly log image update failures
  • Better validate and rollback bad images (Issue #1913)
  • Send operation return value through SmartError
  • Fix basic filtering in lxc list (Issue #1917)
  • Tell the user how to launch a container on first start (Issue #1931)
  • Redirect "remote" to "remote:" when not conflicting (Issue #1931)
  • Don't load the LXC config for snapshots (Issue #1935)
  • list: Allow filtering by unset key (Issue #1917)
  • Fix example in lxc launch
  • Update Japanese translation and other po files
  • Fall back to cpuset.cpus on older kernels (Issue #1929)
  • Properly validate the server configuration keys (Issue #1939)
  • Fix daemonConfig handling of storage
  • Don't remove config file on forkmigrate
  • Fix config handling following config validation change
  • Fixed Markdown syntax in documentation
  • Don't fail early when removing disks (Issue #1964)
  • Don't recursively delete devices
  • Don't fail when some unix devices fail to be deleted
  • Use the same config checks for unix-char and unix-block
  • Allow removing when fs object no longer exists (Issue #1967)
  • Do proper logfile expiry (Issue #1966)
  • Make logging a bit more consistent
  • Don't ignore zfs errors
  • Properly update the mode, uid and gid on existing files (Issue #1975)
  • Detect invalid certificate files (Issue #1977)
  • Fix broken apparmor status check
  • Allow on/off as boolean strings
  • Properly validate the container configuration keys (Issue #1940)
  • Don't mask rsync transfer errors
  • Move execPath to a global variable
  • Use custom netcat instead of nc -U for rsync over websocket (Issue #1944)
  • Fix wrong state dir path in migration
  • Don't fail deleting images when the storage delete fails
  • Improve messages in the Japanese translation
  • Add more checks for the criu binary
  • Rework (live) migration tests
  • Make it explicit in documentation that devices on create are optional
  • Properly record the source of all image copies (Issue #2010)
  • Don't mark containers as ERROR while being created (Issue #1988)
  • Cleanup events sent for operations (Issue #1992)
  • Fix ZFS refcounting issues (Issue #1916 and Issue #2013)
  • Propagate snapshot config when copying a snapshot (Issue #2017)
  • Implement lxc config show for snapshots
  • Add Unix socket example to REST API usage.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0 release announcement 11th of April 2016

This is the final release of LXD 2.0!

LXD 2.0 is a Long Term Support release, similar to LXC 2.0 and LXCFS 2.0 and so comes with a 5 years support commitment from upstream, ending on 1st of June 2021.

A walkthrough of the LXD 2.0 features can be found here: LXD 2.0: Blog post series

Packages for LXD 2.0 should be available in Ubuntu and other Linux distributions shortly.

Until then, you can just try it online using our demo service

The main changes since LXD 2.0.0 rc9 are

  • client: Add a json format option to "lxc list".
  • client: Recommend running lxd init
  • lxd: Allow setting security.privileged when nested

The bugfixes since LXD 2.0.0 rc9 are

  • client: Filter on expanded config rather than local config
  • client: Fix wrong mode being passed by file push
  • client: Show the snapshot name instead of the path
  • client: Tweak help messages
  • client: Update Japanese translation
  • core: Don't let umask mess with modes
  • core: Fix uid, gid and mode of retrieved files
  • core: zfs: Clean any leftover snapshot
  • core: zfs: Ignore non-LXD paths in user count
  • doc: Mark API as stable for release

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc9 release announcement 6th of April 2016

The main changes for this release are

  • The 1.0 API is now considered stable
  • A new lxd-benchmark tool has been added as part of the testsuite
  • The client has been translated into Japanese

Bugfixes

  • core: Check that the target is set on alias update
  • core: Don't use the cpu map from /proc/self/status
  • core: Fix all non-gzip compression algorithms
  • core: Improve ZFS reliability and performance
  • core: lxcbr0 is no more, replace it by lxdbr0
  • core: Prevent container actions while in setup mode
  • core: Set lxc.rootfs.bdev (performance improvement)
  • core: Stop the storage code after we're done remapping
  • core: Support holes in CPU usage (disabled CPUs)
  • core: Throttle the event listeners
  • core: Workaround bad go-lxc Start() behavior
  • extra: Update bash completion to use --fast (performance improvement)
  • list: Don't crash on missing disk or network info
  • lxd-bridge: Don't set link-local without a proxy
  • lxd-bridge-proxy: Bump port number to 13128
  • lxd-bridge: Run dnsmasq as the lxd user instead of the non-existing lxd-dnsmasq user
  • main: Have ActiveIfNeeded trigger if we have running containers
  • specs: Images are auto-updated every 6 hours
  • tests: Don't rely on the filesystem so much

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc8 release announcement 31st of March 2016

The main changes for this release are

  • The LVM volume size is now configurable through configuration rather than environment variables
  • "lxc image alias list" now supports filtering like the other list commands

Bugfixes

  • Fix initial exec size
  • Fix wrong packets sent value
  • Workaround RemoveAll failures on long paths
  • doc: Fix bad markdown
  • Apply all templates at container startup time
  • simplestreams: cleanup
  • Use fork for command execution
  • Failure to unload the apparmor profile isn't fatal
  • Prevent deadlock on container stop failure

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc7 release announcement 28th of March 2016

The main changes for this release are

  • "lxc info" now reports resource consumption
  • Improved bash completions
  • Implement container creation from image properties

Bugfixes

  • exec: remove dead code path
  • exec: send initial window size
  • exec: client: don't always send window size
  • exec: only access terminal size in interactive mode
  • docs: s/initial/Initial
  • Tests: Don't translate lxc output for parsing it.
  • Workaround a URL parser issue
  • Clarify the ZFS restore error
  • lxd-bridge: Don't fail due to missing IPv6

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc6 release announcement 23rd of March 2016

The main changes for this release are

  • New daemon "setup mode" to be used to feed configuration to the LXD daemon after startup and before it starts spawning containers.
  • The "get", "set" and "unset" commands have been added to "lxc config device" and "lxc profile device"
  • Broken containers are now marked as "ERROR" in "lxc list" rather than being hidden

Bugfixes

  • lxd init: clarify no port is wanted with server address
  • lxd init: accept empty trust password
  • lxd init: recommend port 8443
  • README: document composing docker and default profiles.
  • Rename IsMock to MockMode
  • Cleanup daemon initialization
  • Remove the startDaemon function
  • Cleanup function names in main.go
  • Improve waitready
  • Fix permissions of new devices nodes
  • Allow the bridge to be brought down even if disabled
  • Some more lxd-bridge fixes
  • lxd-bridge: Make shellcheck happy

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc5 release announcement 21st of March 2016

The main changes for this release are

  • Fix DELETE /1.0/images/ to actually be Async. This is a minor API change to match the specification and will break backward compatibility with older clients (only when performing image deletion).
  • The deprecated lxd-images script has now been entirely removed.

Bugfixes

  • Improve error reporting on image POST
  • Fix error handling logic around snapshots
  • Fix container shutdown to actually happen in parallel
  • Document 'auto_update' parameter for 'POST /1.0/images'
  • stateful start: rework behavior
  • stateful snapshots: rework behavior
  • Bind-mount mqueue if unprivileged
  • update documentation on using docker in containers
  • bump the monitor timeout to 5s
  • lxd-bridge: Some tweaks

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc4 release announcement 16th of March 2016

The main changes for this release are

  • Support for recursive bind-mounts (recursive property on disk entries)
  • Add a new "ERROR" state for containers, used to indicate a communication problem with LXC
  • Make it possible to have templates only apply for non-existing files (create_only property)
  • All the specifications have been updated and moved to the doc/ directory
  • /dev/lxd access is now restricted to uid 0 in the container

Bugfixes

  • devices client: only print success message when successful
  • Fix devlxd failing to detect container
  • Have "device show" print yaml
  • specs: Clarify image handling
  • specs: Remove command-line-user-experience
  • specs: Remove dia database diagram
  • specs: Clarify the daemon spec
  • specs: Update /dev/lxd spec to match current state
  • specs: Update environment variables list
  • specs: Update SSL spec to match current state
  • specs: Re-format the migration document
  • specs: Update requirements
  • specs: Update storage backend spec
  • specs: Update userns to match reality
  • docker profile: add the apparmor enabled overmount
  • More strictly parse remote URLs
  • Fix devlxd access outside of an exec session
  • Return better errors for public and simplestream remotes
  • Block sys_rawio by default

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc3 release announcement 11th of March 2016

The main changes for this release are

  • GET /1.0/containers/NAME/snapshots/SNAPNAME now returns the configuration and devices included in the snapshot
  • Three new configuration options have been introduced to configure the daemon to use an HTTP proxy
    • core.proxy_https (if not set, uses HTTPS_PROXY env variable)
    • core.proxy_http (if not set, uses HTTP_PROXY env variable)
    • core.proxy_ignore_hosts (if not set, uses NO_PROXY env variable)
  • Cache remote simplestream data for an hour in the daemon so we don't hammer the remote server
  • Allow for auto-update of images coming from a LXD server

Bugfixes

  • Change ConnectInfo to take a RemoteConfig.
  • Workaround kernel overmounting protection
  • migration: attempt to be slightly smart about moving filesystems
  • tests: disarm the gremlins by comparing things in UTC
  • zfs: fix handling of the "snapshot only" send case
  • Allow reducing the LVM LV size and update tests
  • profiles: don't mask error message when not found
  • mounting: only block devices hold filesystems
  • Rework event locking
  • Fix panic due to concurrent read/edit of container lock
  • zfs: Skip the pool header line
  • Make it clear that the init arguments only apply in auto mode
  • Fix error message when snapshotting with existing name
  • lvm: make errors log as errors
  • Don't generate client certificates when calling NewClient
  • Fix parsing image names
  • Forward errors from forkgetfile and forkputfile
  • Make changing https_address more reliable
  • migration: don't defer cleanup of sending snapshots

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc2 release announcement 7th of March 2016

The main changes for this release are

  • Add configuration keys for the rest of the CORS headers
  • Get one step closer to dropping lxd-images, lxd-images is now just a shim
  • Deprecate support for Go < 1.5 as some of our dependencies dropped 1.4 support

Bugfixes

  • Fix image import from remote lxd using aliases
  • Fix creation of extra volatile entries
  • Fix testsuite for when stdout is a file
  • Initialize the storage driver before messing with images
  • Restrict lxd init to root
  • Only attempt to load containers AFTER the socket is setup
  • Fix default protocol in image download
  • Only setup forwarding when an IP is set
  • client: add default config in NewClientFromInfo
  • Fix incorrect device type in dbUpdateFromV26

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.rc1 release announcement 2nd of March 2016

This is the first release candidate for LXD 2.0. This means that we believe all features required for LXD 2.0 have now been merged and we only expect bugfixes and minor usability improvements to land between now and final release.

The main changes for this release are

  • Support for the Cgroup namespace.
  • It is now possible to set the lxc.network.X.ipv{4,6}[.gateway] raw.lxc keys (with usual caution with regard to raw.lxc)
  • /proc and /sys are now clean straight mounts when the container is unprivileged
  • The scope of IP addresses is now exported and used to filter local addresses out by default
  • lxc exec now defaults to non-interactive mode when stdout isn't a tty
  • All the tables rendered by the client now look alike
  • Simplestreams is now natively supported by both the client and the server, eliminating the need for lxd-images
  • Background image syncronization is now supported by the server and done by-default for all cached images
  • The last time an image was used and whether it's stored in the cached is now exported over the API and visible in "lxc image info"
  • Profiles now have a description field
  • It is now possible to do a stateful container stop where the container is checkpointed to disk rather than killed, then resumed on next start.
  • A "docker" profile is now present by default with those settings required to be able to run Docker inside a LXD container.
  • Image import now reports upload progress.

Bugfixes

  • Refactor the GenCert function so it can be reused.
  • tests: get rid of commented out code
  • Rework lxd.NewClient so we don't need a disk cache.
  • shared: export limit parsing function
  • Add upgrade procedure to README
  • websocket: fix panic() on concurrent writes
  • Don't allow the state functions to fail
  • specs: Remove section on Etag (not implemented)
  • specs: Fix rest-api layout
  • list: Fix crash on PID column
  • Fix name printing on lxc init
  • Fix a variety of issues with blkio limits
  • Fix hardcoded architecture path in apparmor profile
  • tests: Fix failure on networked test
  • tests: Fix the number of certs check
  • Fix snapshot configuration
  • Don't rely on the filesystem to check if stateful
  • Catch checkpoint failures
  • Fix DB test
  • Better lock around event listeners
  • Fix container not rebooting properly
  • Add package "make" to build dependencies installation command
  • Don't stop at an unsatisfactory sub?id entry
  • client: better error on lxc stop remote:
  • Just use the shared struct whenever possible in the client
  • Fix download progress on launch
  • Fix alignment of numbers in tables

Upgrade notes

  • This release deprecates the lxd-images tool, instead use the ubuntu: and ubuntu-daily: default remotes to achieve the same feature. If you absolutely must copy an image into the local store, it can be done with "lxc image copy ubuntu:14.04 local: --alias ubuntu".

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.beta4 release announcement 23rd of February 2016

The main changes for this release are

  • REST API changes
    • The API versioning data at /1.0 has changed, now includes, api_status, api_version and api_extensions
    • Architecture fields are now returned as strings instead of obscure integer
    • GET /1.0/containers/NAME/state has been reworked, now includes more detailed network information, disk usage information as well as memory consumption data.
  • New --fast mode for "lxc list" which only lists "cheap" fields
  • The container architecture is now listed in "lxc info"
  • Add process count limit (pids cgroup)

Bugfixes

  • Fix container creation from remote image alias
  • Fix Content-Type value for errors
  • Don't stop containers before asking the user
  • Re-implement terminal functions through cgo (fixes ppc64el)
  • Allow access to /dev/zero
  • tests: Keep pprof self-contained
  • Use iproute2 instead of bridge-utils
  • lxd-images: Fix sync
  • allow cgroupfs mounting on cgns kernels
  • Optimize container process count (use pid cgroup)
  • Fix file push permissions
  • list: Query containers by batch of 10
  • Only re-balance on host network changes
  • list: Attempt to optimize the go routines slightly

Upgrade notes

  • This release breaks backward compatibility with older LXD versions. Please make sure all your clients and servers run the same version.
  • See notes above for changes to the REST API.

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.beta3 release announcement 18th of February 2016

The main changes for this release are

  • "lxc publish" can now be forced to publish running containers (it will temporarily stop them)
  • "lxc image list" now shows images sorted by description
  • Complete review of the REST API and update to make it all match the specification.
    • GET /1.0 now shows the "public" field
    • GET /1.0/certificates now returns a valid list of endpoints
    • GET /1.0/containers/NAME for performance reasons no longer returns the detailed container runtime status ("status" key), a separate query to /1.0/containers/NAME/state is now needed
    • GET /1.0/containers/NAME/logs now returns a valid list of endpoints
    • POST /1.0/containers/NAME/snapshots no longer requires the "stateful" field to be set (defaults to false)
    • POST /1.0/images now lets you override "properties" and "filename" for all supported input types
    • GET /1.0/images/aliases/NAME now returns valid data (the "name" and "target" fields were swapped)
    • POST /1.0/images/aliases/NAME has been implemented
    • PUT /1.0/images/aliases/NAME has been implemented
    • GET /1.0/images/FINGERPRINT no longer shows an empty "target" field for aliases
    • GET /1.0/networks/NAME has been re-designed
    • GET /1.0/operations/UUID/wait?timeout=X now actually times out
    • POST /1.0/profiles/NAME has been implemented
    • All timestamps are now RFC3339 strings and consistently named (created_at, updated_at, expires_at, uploaded_at)
    • Syncronous replies no longer contain an empty "operation" field
  • Extra security now applies for cross-server communication:
    • Unless a certificate is passed along with the query, the following operations now require the remote certificate to be valid according to system CA:
      • Container creation from migration (copy, move & live migration)
      • Container creation from remote image
      • Image copy from other LXD server
      • Image import from https
    • The command client will automatically set the necessary "certificate" field for you for those requests
  • Starting with this release, Go 1.3 is no longer supported by LXD.

Bugfixes

  • Fix invalid container name in lxc file
  • tests: Add test for aliases with slashes
  • Fix updating ephemeral and architecture flags
  • Clarify publish error message a bit
  • Fix interacting with aliases with a trailing slash
  • specs: Update rest-api to match reality
  • Don't move the image into place until it's been parsed
  • Make sure we always use the right dialer and proxy
  • specs: Fix wrong key name
  • Fix lxc file on Windows
  • Fix broken DB migration when upgrading from LXD 0.27 or older
  • Avoid global variables in client tool
  • Fix errors due to early failure to connect
  • Always export the file size on transfer
  • Fixed some typos
  • lxd-images: Register atexit at init time
  • specs: Update storage spec for btrfs send/receive
  • Use upstream go-systemd (this breaks backward compatibility with Go 1.3)

Upgrade notes

  • This release breaks backward compatibility with older LXD versions. Please make sure all your clients and servers run the same version.
  • See notes above for changes to the REST API and security policies.

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.beta2 release announcement 10th of February 2016

The main changes for this release are

  • /dev/console has been re-enabled
  • The btrfs backend now supports optimized container transfer (send/receive)
  • Source file ownership and permissions are conserved by default on "lxc file push"
  • Both "lxc list" and "lxc image list" now accept regular expressions as filter
  • lxc info now shows the container creation date (if known), the list of profiles and detailed snapshot information
  • Recursive aliases are now supported in the client (e.g. "delete: delete -f")
  • "lxc delete" now requires a "-f/--force" flag when run against a running container
  • "lxc delete" now has a -i option to always request user confirmation on delete

Bugfixes

  • Fix building LXD on arm64
  • Fix "make dist" for new version numbers
  • specs: Re-sync database spec with reality
  • Fail when unsetting a key that's not currently set
  • Remove backward compatibility code
  • Fix copying snapshot as new container root
  • Fix failure to stop snapshots on migration failure
  • Fix migration of snapshots using rsync
  • Implement migration fallback to rsync
  • Change ShiftIfNecessary to shift on startup
  • make i18n for profiles output in info
  • reduce verbiage to fit help text more efficiently
  • Make blkio limits more robust
  • add eth0 "name" to the default profile
  • only print profile applied message on success
  • init: Attempt to modprobe the zfs module
  • init: Use zpool create -f to work on unformatted disks
  • init: Improve detection of available backends
  • zfs: Fix cross-backend copies
  • fix stresstest.sh to use byte suffix for limits.memory
  • fix command-line-user-experience examples of limits.memory to include byte suffix

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 2.0.0.beta1 release announcement 26th of January 2016

The main changes for this release are

  • "lxc config edit" now works to edit the local server configuration
  • Add support for block I/O limits
  • Add support for network I/O limits

Bugfixes

  • error out on deleting nonexistent alias
  • Fix LXC config rendering
  • Improve detection of text editor
  • Fix "lxc file edit"
  • Add network limits
  • Fix IPv6 handling in daemon code
  • Update specs and documentation on file pull/push
  • Better deal with broken LXC
  • Update README to avoid setting a mountpoint for zfs
  • Print message on successful copy of image
  • Fix small typo s/sucessfully/successfully
  • Improve forkstart debugging
  • Always call Rename() when not migrating
  • Use a tempfile for image uploads
  • report errors if the restore call's start command fails
  • Truncate the target on file transfer
  • Mention that raw keys are risky
  • Allow writes to /dev/tty in privileged containers
  • implement stateful snapshot restore
  • don't fail to delete when deleting snapshots fails

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 0.27 release announcement 19th of January 2016

The main changes for this release are

  • Support for container disk quota (zfs and btrfs only)
  • Download progress during image copy and container launch
  • Initial work on a LXC to LXD script (supports almost every configuration except for unprivileged containers)
  • New linux.kernel_modules container property (list of modules to load before starting the container)
  • New core.https_allowed_origin server property (controls the Access-Control-Allow-Origin header)
  • Profile changes are now live-applied to all affected containers
  • "lxc config edit" now works against servers too
  • Changes to security.nesting are now live-applied
  • Support for xfs with the lvm backend
  • "lxc image list" now supports filtering (by name, hash and properties)
  • Improved bash completion profile
  • The default remote is now visible in "lxc remote list"
  • "lxc info" now indicates whether a container is ephemeral or persistent
  • Various improvement to help messages

Bugfixes

  • Set a default http timeout of 10s
  • Don't crash during publish when metadata.yaml is missing
  • Improve error reporting during migration
  • Improve error reporting during copy
  • Make sure containers are only removed from the database once removed from disk
  • Make sure images are only removed from the database once removed from disk
  • Fix LVM backend on LVM > 2.02.99
  • Improve DB performance when under heavy load
  • Correctly uidshift unprivileged CRIU images
  • Fix a race in forkmigrate
  • Fix race condition in event interface
  • Fix screen corruption when lxd-images hits an error
  • Don't ignore provided devices at create time
  • Fix web server to support all URLs with and without trailing slash
  • Make it possible to unset the zfs pool
  • lxd-setup-lvm-storage: Add default size of 10G
  • api: {Save|Load}Config should take a path as an argument
  • Fix automatically adding veth interface to the host bridge
  • Fix unsetting zfs pool when snapshots used to exist

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 0.26 release announcement 4th of January 2016

The main changes for this release are

  • New "host_name" network interface property that specifies the name of the host side veth device
  • It is now possible to pull/push/edit files of a stopped container
  • It's now possible to specify what "lxc list" columns to show (including a new PID column)

Bugfixes

  • Properly inherit the active CPU map rather than assuming all CPUs are usable
  • zfs: Fix a couple of race conditions
  • lvm: Fix creation of container from an image
  • Cut down network round trips in half by not calling Finger() every time
  • Fix invalid permissions on container shmounts and devices directories
  • Fix container teardown not always cleaning up devices & mounts
  • Improve performance of host-triggered container stop/restart (5s faster)
  • Make lxd callhook timeout after 30s (instead of hanging indefinitely on failure)
  • Cleanup and document the testsuite
  • Fix remote certificate handling on add/rename/remove

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 0.25 release announcement 21st of December 2015

The main changes for this release are

  • New --mode argument to "lxc exec", makes it possible to force non-interactive mode.
  • Full support of the s390x architecture (IBM z/series 64bit)
  • Command aliases can now move the command arguments by using the @ARGS@ keyword
  • Full support for CPU limits (defaults to all CPUs, maximum priority and no time limit):
    • limits.cpu: Number of CPUs (e.g. 2) or range of core (e.g. 0,2-3)
    • limits.cpu.allowance: Percentage of CPU time under load (e.g. 50%) or hard time limit (10ms/50ms)
    • limits.cpu.priority: Container priority when host is under load as a value between 1 (lowest) and 10 (highest) (e.g. 5)
  • Full support for memory limits (defaults to all memory, hard enforcement, swap enabled and maximum priority):
    • limits.memory: Limit in bytes (kB, MB, GB, TB, PB, EB suffixes supported) (e.g. 256MB) or in percentage of the host memory (e.g. 20%)
    • limits.memory.enforce: hard (container cannot use more memory than allocated) or soft (limit only applies under load)
    • limits.memory.swap: true or false, indicates whether the container may use the swap
    • limits.memory.swap.priority: Priority for swap usage, from 1 to 10, with 1 causing the most data to be swapped out to disk
  • All CPU and memory limits are now applied live.
  • Support for optimized (send/receive) ZFS container & snapshot migration

Bugfixes

  • Fix a variety of storage race conditions as identified by new tests
  • lxd-images: Give clearer error messages
  • Fix image expiry logic
  • Refactor logging code
  • Fix migration code to be spec-compliant
  • Detect available CGroup controllers
  • zfs: Prevent restoring from old (not latest) snapshosts
  • Report clearer errors when adding devices to containers
  • zfs: Fix container rename
  • lvm: Fix container rename
  • lvm: Workaround failure on older LVM versions
  • lvm: Hide fdleak messages
  • Move some directories around for consistency
  • exec: lock fds map for exclusive writes
  • lvm: Fix snapshot rename handling
  • lvm: Fix container snapshot migration
  • Fix container DB cleanup (leftover records)
  • Fix image cleanup (leftover records)
  • Use the host architecture when container arch == 0
  • Do config & device validation upstream
  • Cleanup DB leftovers
  • Return a clear error message when an image already exists
  • Only return remote_cache_expiry if set
  • Flush volatile when they don't apply

Testsuite

  • The testsuite can now be run with all storage backends
  • Several race conditions have been eliminated
  • The testsuite now checks that the filesystem structure is clean
  • The testsuite now checks that the database tables are clean
  • Fix a couple of tests whose failure was being ignored
  • Dramatically speed up testsuite by using --force-local
  • Use shutdown and waitready commands

Upgrade notes

  • limits.memory suffixes are now kB, MB, GB, TB, EB and PB. Old suffixes are upgraded as a one-time operation on the next LXD startup.
  • The migrate REST API call now takes a https URL to the source operation rather than a wss URL to the secrets. This was changed to match the specification.

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 0.24 release announcement 8th of December 2015

The main changes for this release are

  • Support for macvlan network interfaces
  • Support for physical network interfaces
  • Support for building on s390x
  • Snapshots are now transfered along with their parent container on copy/move
  • A CPU scheduler for limits.cpu has been implemented
  • "lxc config unset/set" now works against a remote server

Bugfixes

  • Improved IP rendering in "lxc list"
  • Fix apparmor handling in nested containers
  • Fix various hangs and failures during device hotplug
  • Image publishing from a snapshot now produces the exact same output every time
  • Fix publishing of snapshots
  • Fix our translation layer by switching to an alternative gettext implementation
  • Switch UUID implementation to an alternative implementation
  • Drop migratable profile (current CRIU can migrate a standard container)
  • Create missing directories when mounting a disk into a container
  • Serialize image creation (reduces overall load)
  • Various ZFS bugfixes (load kernel module when missing, re-try destroys and better handle mounts)
  • Completely rework the LXC container driver to be simpler and more reliable
  • Prevent setting volatile keys on profiles
  • Automatically cleanup stale volatile keys
  • Fix launching un-named (randomly named) containers

Upgrade notes

  • Older lxc clients will hang on exec against a newer server, make sure to update the client.
  • limits.cpus is now called limits.cpu, a one-time migration is done at LXD startup.

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 0.23 release announcement 24th of November 2015

The main changes for this release are

  • A new "lxd init" command is available to help setup storage, network and password on new LXD installations
  • Log messages are now sent over the events API
  • New process count metric available in the containers API and in "lxc info"
  • Console color support on Windows
  • Rewritten operations handling, now includes events for each changes and includes download status
  • "lxc image import" can now take the URL to an https webserver advertising a LXD image through HTTP headers
  • The minimal HTTP proxy shipped by LXD has been rewritten to be even lighter

Bugfixes

  • "lxc config get \<server-config-key>" now works as expected
  • lxd-images: Much lower memory usage when importing an image
  • More readable log entries over the events API
  • Event filtering in "lxc monitor" now works properly
  • Container architectures are now properly tracked
  • LXD now ensures that published containers will always have metadata in their image
  • Container copy now copies devices and config properly
  • Image import failure now result in proper error messages
  • "lxc info --show-log" is now also suggested on "lxc launch" failures

Upgrade notes

Users of the operations API may have to update their code to suit the new operation code. The new implementation is now specification-compliant, meaning that all operation queries always return a full operation object wrapped in an Async reply and with operation-specific properties inside the metadata.

The "lxc" client was updated to be backward compatible when possible.

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 0.22 release announcement 10th of November 2015

The main changes for this release are

  • Freeze containers before killing them (helps with fork bombs)
  • Configurable image compression algorithm (also supports no compression)
  • Support using an HTTP proxy when downloading a remote image
  • Initial implementation of the events interface and minimal client for it (lxc monitor)

Bugfixes

  • Don't remove the main LXD socket when starting a second daemon
  • On failure to add a remote, cleanup the cached certificate
  • LXD no longer requires a client certificate to talk to public endpoints
  • Better error and debug messages for checkpoint/restore and container startup
  • Fixed a race condition during container startup
  • Update the busybox test image to avoid an occasional hang
  • lvm-setup: Update to work on older Ubuntu releases
  • Fix extraction of bz2 compressed images
  • Fix a number of fd leaks
  • Fix shmount handling to avoid creating an extra mount everytime LXD starts
  • lxd-images: Fallback to the daily stream if an image can't be found in the releases stream
  • Fix a uid/gid mapping issue on container copy
  • Fix a LXD hang on invalid LXC configuration key

Upgrade notes

This LXD version corrects a problem in the implementation of the images API, as a result, some actions against older servers or using older clients may fail.

Try it for yourself

This new LXD release is already available for you to try on our demo service.

Downloads

The release tarballs can be found on our download page.

LXD 0.21 release announcement 27th of October 2015

The main changes for this release are:

  • Client is now buildable on Windows.
  • Default LVM volume size has been reduced to 10GB.
  • Command aliases can be setup in the client.
  • "lxc info" now prints server information too.
  • It's now possible to use a nested LXD on btrfs storage.

Additionally:

  • Various storage backend fixes
  • Better error handling and error reporting
  • A lot of bugfixes (no known bugs left at time of release)

Downloads

The release tarballs can be found on our download page.

LXD 0.20 release announcement 14th of October 2015

The main changes for this release are:

  • Container restart is now implemented as stop + start (reloads all config)
  • Config key=value can now be passed at launch time using --config/-c
  • A new "pause" command is now available to temporarily freeze a container
  • Cached images are now private by default
  • You can now publish a remote container into the local image store
  • It is now possible to add character or block devices to a container
  • The image size is now shown in the image list

Additionally:

  • Various storage backend fixes
  • Better error handling and error reporting
  • Improved testsuite
  • A lot of bugfixes (no known bugs left at time of release)

Downloads

The release tarballs can be found on our download page.

LXD 0.19 release announcement 29th of September 2015

The main changes for this release are:

  • ZFS support
  • Support for container nesting
  • Allow setting multi-line configuration keys by reading from stdin (using "-" as the value)
  • It's now possible to make an ephemeral copy of a container (-e/--ephemeral flag)
  • Public read-only servers are now auto-detected (no more --public needed)
  • lxd-images now supports updating existing images (when using the --sync flag)
  • It is now possible to mark/unmark images as public (through the edit command)

Additionally:

  • A completely reworked testsuite
  • Some refactoring in preparation for a Windows client
  • Updated documentation and specifications
  • A lot of bugfixes (no known bugs left at time of release)

Note that due to an API implementation problem in past releases, older command line clients will fail to interact with LXD 0.19's image store. Such clients should be upgraded to 0.19.

Downloads

The release tarballs can be found on our download page.

LXD 0.18 release announcement 15th of September 2015

The main changes for this release are:

  • lxc: Add a new --force-local argument
  • lxc: Allow file push/pull using stdin/stdout
  • lxc: Rework translation template
  • lxd/core: Fix image creation of privileged containers
  • lxd/core: implement per-container apparmor profiles
  • lxd/core: implement per-container seccomp profiles
  • lxd/core: Fix socket-activation on exit
  • lxd/core: Add support for nested LXD
  • lxd/btrfs: Fix shared mount detection on btrfs
  • lxd: Implement new "shutdown" sub-command
  • lxd: Implement new "activateifneeded" sub-command
  • scripts: Add script to set up and delete LVM storage
  • A bunch more fixes, tests and other improvements

Downloads

The release tarballs can be found on our download page.

LXD 0.17 release announcement 1st of September 2015

The main changes for this release are:

  • lxc: Add a new "lxc file edit" command
  • lxc: Add support for public remotes
  • lxc: Support adding a remote by its IPv6 address
  • lxd/core: Fix building with Go 1.5
  • lxd/core: Allow renaming snapshots
  • lxd/core: Add a new /logs REST API to containers
  • lxd/core: Export the storage backend name and version
  • lxd/btrfs: Support for recursive subvolume snapshot and removal
  • lxd/lvm: Add snapshot support
  • lxd/lvm: Add container copy support
  • lxd/lvm: Add container rename support
  • lxd/lvm: Disallow changing LVM config if pool is in use.
  • lxd/lvm: Document LVM config keys in specs
  • lxd-images: Deprecate "lxd images import lxc"
  • lxd-images: Print the manifest URL
  • lxd-images: Default to the "releases" stream for Ubuntu images
  • vagrant: Support running in vmware
  • A bunch more fixes, tests and other improvements

Note that as of this release, the use of "lxd-images import lxc" is deprecated in favor of using the images.linuxcontainers.org remote.

For example:

lxd-images import lxc centos 7 amd64 --alias centos
lxc launch centos my-container

Now becomes:

lxc remote add images images.linuxcontainers.org    # one-time setup
lxc launch images:centos/7/amd64 my-container

Downloads

The release tarballs can be found on our download page.

LXD 0.16 release announcement 18th of August 2015

The main changes for this release are:

  • Added container auto-start support, includes start delay and start ordering
  • Support copying container and images from a local (unix socket) to a remote (https) daemon
  • Remap the unprivileged containers when transferring between hosts with differing allocations
  • Remap existing containers when their idmap changes or when they're switched between privileged and unprivileged
  • The EDITOR variable is now properly respected
  • When starting a container from a remote image, the cached image now expires
  • New --public flag added to lxd-images
  • Allow --stateful snapshots
  • And a lot of bugfixes, performance and test improvements

Downloads

The release tarballs can be found on our download page.

LXD 0.15 release announcement 4th of August 2015

The main changes for this release are:

  • Added storage and network hotplug
  • Improved logging
  • Improved LVM and btrfs backend
  • /dev/lxd now works with gccgo
  • Added new environment.* configuration namespace to set environment variables inside the container
  • Init and launch now print the container name
  • lxd-images now defaults to Ubuntu 14.04 LTS
  • --tcp has now been replaced by the core.https_address config option
  • Improved LVM and btrfs support
  • Add some LXD speed tests
  • New "make client" target to only build the LXD client (use this for MacOS X)
  • Introduce new scripts and http proxy code for a lxdbr0 bridge
  • Rework internal storage representation
  • Rework internal container representation
  • Rework internal database representation
  • Various testsuite improvements
  • A lot more bugfixes and other small improvements

This release moves containers from /var/lib/lxd/lxc to /var/lib/lxd/containers and snapshots from /var/lib/lxd/lxc/\<name>/snapshots to /var/lib/lxd/snapshots/\<name>. To do so, LXD will stop all containers on the next startup, then start them again after moving everything to the new location.

The --tcp daemon option has been replaced by the core.https_address option allowing users to change the address and port LXD binds to. Changes are now applied immediately.

Downloads

The release tarballs can be found on our download page.

LXD 0.14 release announcement 21st of July 2015

The main changes for this release are:

  • Improve command line help
  • Improve LVM backend (only mount/umount storage while the container is running, ...)
  • Rework certificate handling (user interface, generation and recursive query support)
  • Fix a publish bug that would lead to invalid images
  • Fix IPv6 support of container copy/migration
  • New logging code (syslog support, logfile support and log levels)
  • Implement support for "split" images (separate metadata and rootfs)
  • Add download progress tracking to lxd-images
  • Detect and report architecture mismatches
  • Direct image copy between servers is now supported
  • /dev/lxd now supports the meta-data interface
  • Ubuntu cloud images may now be imported using lxd-images
  • Other code improvements (golint, refactoring, compression handling, tests, ...)

This is the first LXD release to support the official Ubuntu Cloud images. At this time, those are only available for the current development release (wily) but we hope to have images for all supported Ubuntu releases over the next few days.

To import one of those images into your LXD image store, run:

lxd-images import ubuntu --alias ubuntu-cloud

Downloads

The release tarballs can be found on our download page.

LXD 0.13 release announcement 7th of July 2015

The main changes for this release are:

  • Add support for LVM thin pools as a storage backend.
  • Add basic bash completion
  • Implement the "publish" command, turning a container into an image
  • Improve file push/pull reliability
  • Make it possible to start/stop/restart/delete multiple containers at once
  • Fix build under gccgo (currently disabling /dev/lxd in such case)
  • Improve btrfs performance during container copy
  • A lot of other bugfixes, minor improvements and cleanups

This is the first release of LXD where the client may be built on operating systems other than Linux. At the moment, MacOS X has been confirmed to work and Windows is known not to work, other Unix may work too but haven't been tested.

Downloads

The release tarballs can be found on our download page.

LXD 0.12 release announcement 23rd of June 2015

The main changes for this release are:

  • Implement /dev/lxd
  • Fix initial console size on exec
  • Reduce memory footprint of migration
  • Use user readable date strings in the API
  • Allow unset for server config keys
  • Fix various race conditions with exec
  • Switch to a pure-go gettext implementation
  • Set proper Content-Type on all replies
  • Show the host veth device in info
  • Some changes to better support Snappy ubuntu
  • Various other bugfixes
  • Improve help messages
  • Improve testsuite
  • Initial German translation

Downloads

The release tarballs can be found on our download page.

LXD 0.11 release announcement 9th of June 2015

The main changes for this release are:

  • File templating support in images
  • Socket activation with Systemd
  • Support for clean shutdown and container restart on startup
  • Implement "lxc image show"
  • Implement SIGWINCH support in exec (terminal resize event)
  • Make all configuration keys spec-compliant
  • Fix "lxc image edit"
  • Allow running the testsuite without any outside connectivity
  • Improve testsuite output to be more readable
  • And the usual set of bugfixes.

NOTE: The key to set a server password is now, core.trust_password. On first startup of LXD 0.11, all the old supported names will be converted to the official one.

Downloads

The release tarballs can be found on our download page.

LXD 0.10 release announcement 26th of May 2015

The main changes for this release are:

  • Implemented snapshot restore
  • New --accept-certificate flag to lxc remote add
  • New --password flag to lxc remote add
  • Added "lxc profile device show" and " lxc config device show"
  • "lxc config show" and "lxc config set" now work for server configuration
  • lxc profile edit and lxc config edit now accept configuration on stdin
  • Added recursion support to /1.0/images/aliases API
  • Added recursion support to /1.0/containers/{name}/snapshots API
  • The command line client no longer depends on go-lxc
  • Re-worked uid/gid allocation and uid/gid shifting
  • Improved help and usage
  • Improved lxc list rendering
  • Improved lxc profile show and lxc config show
  • Improved debug messages
  • The LXD version is now exported on /1.0
  • Improved README
  • SSL certificates now expire after 10 years
  • Various test improvements and bugfixes

Downloads

The release tarballs can be found on our download page.

LXD 0.9 release announcement 12th of May 2015

The main changes for this release are:

  • Fixed memory and file descriptior leaks (and add extra tests for those)
  • Fallback to chmod when setfacl fails (filesystem without ACLs support)
  • Fixed container logging and make it available through lxc info (--show-log)
  • Setup the right uid/gid map for privileged containers
  • Report invalid configuration in "lxc config edit" and "lxc profile edit"
  • Improved the first use experience and the profile/config examples
  • Rename "lxc config profile *" to "lxc profile *" (old syntax is still supported)
  • More reliable database handling
  • Container copies get a new MAC address
  • USER is now set in the container environment (on exec)
  • Track the image used to build the container and use this to optimize copy/migration
  • Improved database testing
  • Fixed pts device owneship on exec
  • Fixed raw.lxc being applied too early (resulted in broken lxc.network.script and others)
  • Better argument parsing in both lxc and lxd
  • Improved performance in container and network listing
  • Fixed certificate name conflicts in the trust database

Downloads

The release tarballs can be found on our download page.

LXD 0.8.1 release announcement 29th of April 2015

Bugfix only release on top of 0.8 fixing some regressions:

  • Fix building on all architectures
  • Change the go-protobuf repository URL

Downloads

The release tarballs can be found on our download page.

LXD 0.8 release announcement 28th of April 2015

The major changes for this release are:

  • Fixed uid/gid in lxc file push
  • Respect PROXY environment variables
  • Fix database locking issues
  • Add more debugging options
  • Various fixes to ephemeral containers
  • Fix creating a new container from a snapshot
  • When available, use btrfs subvolumes for faster container creation

Downloads

The release tarballs can be found on our download page.

LXD 0.7 release announcement 14th of April 2015

The major changes for this release are:

  • Containers can now be started from a private image
  • Ephemeral containers are supported
  • Improved debugging
  • Some documentation update
  • A few more minor fixes

Please note that it's still early in the LXD development and that current LXD isn't intended for production use and comes with no support statement from upstream. (reported bugs and patches will be included in the next release)

Downloads

The release tarballs can be found on our download page.

LXD 0.6 release announcement 7th of April 2015

The major changes for this release are:

  • Added a vagrant configuration file
  • The container's MAC address is now persistent
  • Variety of fixes regarding remote servers handling
  • Recursive query support (massive speed improvement for image servers)
  • TLS now configured to only support strong ciphers
  • Support setting aliases at image import time
  • Improved test coverage
  • Improved error messages on the client
  • Fix privileged containers handling
  • LXD can now be built on powerpc
  • And a lot more bugfixes and tweaks

Please note that it's still early in the LXD development and that current LXD isn't intended for production use and comes with no support statement from upstream. (reported bugs and patches will be included in the next release)

Downloads

The release tarballs can be found on our download page.

LXD 0.5 release announcement 24th of March 2015

The major changes for this release are:

  • IPv6 support for remote servers
  • Check if the remote server happens to have a certificate which is trusted by the system
  • Implemented "lxc image copy"
  • Improved remote handling (default configuration, support for https:// and unix:// and a bunch of convenient aliases)
  • API consistency for key/value storage (always exported as dictionaries)
  • Remote images can now be started by their long or short hash
  • Remote image properties are now properly mirrored in the local cache
  • A lot of database locking issues have been resolved

Please note that it's still early in the LXD development and that current LXD isn't intended for production use and comes with no support statement from upstream. (reported bugs and patches will be included in the next release)

At this point, most core LXD features are present but many of the particular options aren't implemented yet (don't match our specifications), we expect to make great progress in supporting all of the expected options over the next couple of releases.

Downloads

The release tarballs can be found on our download page.

LXD 0.4 release announcement 17th of March 2015

The major changes for this release are:

  • Support for starting a container from a remote image
  • Support for copying/moving containers between hosts
  • Improved command line (listing, aliases, profiles, partial hashes, ...)
  • Improved error logging
  • API fixes to more closely match the spec
  • A lot of bugfixes

Please note that it's still early in the LXD development and that current LXD isn't intended for production use and comes with no support statement from upstream. (reported bugs and patches will be included in the next release)

At this point, most core LXD features are present but many of the particular options aren't implemented yet (don't match our specifications), we expect to make great progress in supporting all of the expected options over the next couple of releases.

Downloads

The release tarballs can be found on our download page.

LXD 0.3 release announcement 10th of March 2015

The major changes for this release are:

  • lxd:
    • Reworked exec, now with separate interactive and non-interactive modes and proper support for escape sequences.
    • Improved image handling, now supporting more compression algorithms and support for image export.
    • Initial support of live migration (requires particular container configuration)
    • Initial support of container configuration and profiles
      • Support for disks and network interfaces
      • Support for creating/deleting/assigining profiles
    • Introduce a "default" profile which is applied to all new containers unless otherwise specified.
  • lxc:
    • Improved user experience for the various "list" commands
    • Improved info command, now showing PID and IP addresses
    • Implement the image info command, shows all image properties and aliases.
    • Early (partial) french translation as an example translation of LXD.
    • Support of the "edit" command for images and profiles.
  • lxd-images:
    • Now supports creating a minimal busybox image.
    • Vastly improved image imports from images.linuxcontainers.org by no longer requiring repacking.
    • Now working with python3.2
  • Testsuite:
    • Added tests for container configuration, profiles, devices, migration, exec and database.
    • Now running using a minimal busybox image, making it run in just a few seconds.
  • Many bugfixes

Please note that it's still early in the LXD development and that current LXD isn't intended for production use and comes with no support statement from upstream. (reported bugs and patches will be included in the next release)

At this point, most core LXD features are present but many of the particular options aren't implemented yet (don't match our specifications), we expect to make great progress in supporting all of the expected options over the next couple of releases.

Downloads

The release tarballs can be found on our download page.

LXD 0.2 release announcement 27th of February 2015

The major changes for this release are:

  • Initial version of the built-in image store
    • All containers must now be created from images
    • Images can be imported into LXD by using the provided "lxd-images" tool
    • Image aliases can be setup to make it easier to find your images
  • Database backend (all LXD data is now stored in a SQLite database)
  • Early stage of container configuration (partial API only)
  • Support for building for many architectures through gcc-go (not all dependencies are compatible)
  • Reworked exec mechanism
  • A lot of bugfixes

Please note that it's still early in the LXD development and that current LXD isn't intended for production use and comes with no support statement from upstream. (reported bugs and patches will be included in the next release)

We are still busy working on container migration, proper container configuration and a stable REST API.

Downloads

The release tarballs can be found on our download page.

LXD 0.1 release announcement 13th of February 2015

This is the initial LXD release.

With this first release of LXD, it is possible to:

  • List containers
  • create, destroy, start, stop and execute commands into an Ubuntu 14.04 LTS amd64 container
  • Transfer files in and out of containers
  • Management of multiple LXD hosts through the lxc command line tool
  • Experiment with the LXD REST API

Support for other container images, container migration, container configuration and profiles and a stable REST API will be coming in the next few releases.

This release is our first development snapshot and isn't intended for production use and comes with no support statement from upstream. (reported bugs and patches will be included in the next release)

Downloads

The release tarballs can be found on our download page.