| Current Path : /proc/thread-self/root/snap/lxd/current/snap/ |
| Current File : //proc/thread-self/root/snap/lxd/current/snap/manifest.yaml |
snapcraft-version: 8.14.5
snapcraft-started-at: '2026-05-06T15:28:16.589894Z'
snapcraft-os-release-id: ubuntu
snapcraft-os-release-version-id: '24.04'
name: lxd
version: 6.8-5a1a287
summary: LXD - container and VM manager
description: |-
LXD is a system container and virtual machine manager.
It offers a simple CLI and REST API to manage local or remote instances,
uses an image based workflow and support for a variety of advanced features.
Images are available for all Ubuntu releases and architectures as well
as for a wide number of other Linux distributions. Existing
integrations with many deployment and operation tools, makes it work
just like a public cloud, except everything is under your control.
LXD containers are lightweight, secure by default and a great
alternative to virtual machines when running Linux on Linux.
LXD virtual machines are modern and secure, using UEFI and secure-boot
by default and a great choice when a different kernel or operating
system is needed.
With clustering, up to 50 LXD servers can be easily joined and managed
together with the same tools and APIs and without needing any external
dependencies.
Supported configuration options for the snap (snap set lxd [<key>=<value>...]):
- apparmor.unprivileged-restrictions-disable: Whether to disable restrictions on unprivileged user namespaces [default=true]
- ceph.builtin: Use snap-specific Ceph configuration [default=false]
- ceph.external: Use the system's ceph tools (ignores ceph.builtin) [default=false]
- daemon.debug: Increase logging to debug level [default=false]
- daemon.group: Set group of users that have full control over LXD [default=lxd]
- daemon.user.group: Set group of users that have restricted LXD access [default=lxd]
- daemon.preseed: Pass a YAML configuration to `lxd init` on initial start
- daemon.syslog: Send LXD log events to syslog [default=false]
- daemon.verbose: Increase logging to verbose level [default=false]
- db.trace: Enable dqlite trace logging (very verbose) [default=false]
- lvm.external: Use the system's LVM tools [default=false]
- lxcfs.loadavg: Start tracking per-container load average [default=false]
- lxcfs.cfs: Consider CPU shares for CPU usage [default=false]
- lxcfs.debug: Increase logging to debug level [default=false]
- openvswitch.builtin: Run a snap-specific OVS daemon [default=false]
- openvswitch.external: Use the system's OVS tools (ignores openvswitch.builtin) [default=false]
- ovn.builtin: Use snap-specific OVN configuration [default=false]
- zfs.external: Use the system's ZFS tools [default=false]
For system-wide configuration of the CLI, place your configuration in
/var/snap/lxd/common/global-conf/ (config.yml and servercerts)
base: core24
grade: stable
confinement: strict
apps:
activate:
command: commands/daemon.activate
daemon: oneshot
plugs:
- lxd-support
- system-observe
buginfo:
command: commands/buginfo
plugs:
- lxd-support
- system-observe
check-kernel:
command: commands/lxd-check-kernel
plugs:
- lxd-support
- system-observe
daemon:
command: commands/daemon.start
stop-command: commands/daemon.stop
stop-timeout: 600s
reload-command: commands/daemon.reload
daemon: simple
restart-condition: on-failure
slots:
- lxd
plugs:
- lxd-support
- network-bind
- system-observe
command-chain:
- bin/gpu-2404-custom-wrapper
sockets:
unix:
listen-stream: $SNAP_COMMON/lxd/unix.socket
socket-mode: 432
lxc:
command: commands/lxc
completer: lxc-completer.sh
plugs:
- lxd-support
- system-observe
lxd:
command: commands/lxd
plugs:
- lxd-support
- system-observe
user-daemon:
command: commands/lxd-user
stop-timeout: 600s
daemon: simple
restart-condition: on-failure
plugs:
- lxd-support
- network-bind
- system-observe
sockets:
unix:
listen-stream: $SNAP_COMMON/lxd-user/unix.socket
socket-mode: 432
parts:
amd-ctk:
build-snaps:
- go/1.26/stable
plugin: go
prime:
- bin/amd-ctk
source: https://github.com/ROCm/container-toolkit
source-commit: 3ab0394f71220e693ae016fa6581fbd04a51ed44
source-depth: 1
source-type: git
stage-packages: []
stage: []
build-packages: []
btrfs:
organize:
sbin/: bin/
plugin: nil
prime:
- bin/btrfs
- bin/btrfstune
- bin/mkfs.btrfs
stage-packages:
- btrfs-progs=6.6.3-1.1build2
- libreiserfscore0t64=1:3.6.27-7.1build1
stage: []
build-packages: []
ceph:
after:
- libatomic
organize:
usr/bin/: bin/
usr/lib/: lib/
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: nil
prime:
- bin/ceph
- bin/radosgw-admin
- bin/rbd
- lib/*/ceph
- lib/*/libcephfs*
- lib/python3
- lib/*/libboost_context.so*
- lib/*/libboost_filesystem.so*
- lib/*/libboost_iostreams.so*
- lib/*/libboost_program_options.so*
- lib/*/libboost_thread.so*
- lib/*/libboost_url.so*
- lib/*/libbrotlicommon.so*
- lib/*/libbrotlidec.so*
- lib/*/libcurl-gnutls.so*
- lib/*/libdaxctl.so*
- lib/*/libibverbs.so*
- lib/*/libicudata.so*
- lib/*/libicuuc.so*
- lib/*/liblber-2.5.so*
- lib/*/liblber.so*
- lib/*/libldap-2.5.so*
- lib/*/libldap.so*
- lib/*/liblmdb.so*
- lib/*/liblua5.4.so*
- lib/*/libncurses.so*
- lib/*/libndctl.so*
- lib/*/libnghttp2.so*
- lib/*/liboath.so*
- lib/*/libpmemobj.so*
- lib/*/libpmem.so*
- lib/*/libpsl.so*
- lib/*/librabbitmq.so*
- lib/*/librados.so*
- lib/*/librbd.so*
- lib/*/librdmacm.so*
- lib/*/librtmp.so*
- lib/*/libsasl2.so*
- lib/*/libsnappy.so*
- lib/*/libssh.so*
- lib/*/libtcmalloc.so*
- lib/*/libunwind.so*
stage-packages:
- adduser=3.137ubuntu1
- ceph-common=19.2.3-0ubuntu0.24.04.3
- libaio1t64=0.3.113-6build1.1
- libbabeltrace1=1.5.11-3build3
- libboost-context1.83.0=1.83.0-2.1ubuntu3.2
- libboost-filesystem1.83.0=1.83.0-2.1ubuntu3.2
- libboost-iostreams1.83.0=1.83.0-2.1ubuntu3.2
- libboost-locale1.83.0=1.83.0-2.1ubuntu3.2
- libboost-program-options1.83.0=1.83.0-2.1ubuntu3.2
- libboost-thread1.83.0=1.83.0-2.1ubuntu3.2
- libboost-url1.83.0=1.83.0-2.1ubuntu3.2
- libcephfs2=19.2.3-0ubuntu0.24.04.3
- libcurl3t64-gnutls=8.5.0-2ubuntu10.9
- libdaxctl1=77-2ubuntu2
- libdw1t64=0.190-1.1ubuntu0.1
- libgoogle-perftools4t64=2.15-3build1
- libibverbs1=50.0-2ubuntu0.2
- libicu74=74.2-1ubuntu3.1
- libldap2=2.6.10+dfsg-0ubuntu0.24.04.1
- liblmdb0=0.9.31-1build1
- liblua5.4-0=5.4.6-3build2
- libncurses6=6.4+20240113-1ubuntu2
- libndctl6=77-2ubuntu2
- libnghttp2-14=1.59.0-1ubuntu0.3
- liboath0t64=2.6.11-2.1ubuntu0.1
- libpmem1=1.13.1-1.1ubuntu2
- libpmemobj1=1.13.1-1.1ubuntu2
- libpsl5t64=0.21.2-1.1build1
- librabbitmq4=0.11.0-1build2
- librados2=19.2.3-0ubuntu0.24.04.3
- libradosstriper1=19.2.3-0ubuntu0.24.04.3
- librbd1=19.2.3-0ubuntu0.24.04.3
- librdmacm1t64=50.0-2ubuntu0.2
- librtmp1=2.4+20151223.gitfa8646d.1-2build7
- libsasl2-2=2.1.28+dfsg1-5ubuntu3.1
- libsasl2-modules-db=2.1.28+dfsg1-5ubuntu3.1
- libsnappy1v5=1.1.10-1build1
- libssh-4=0.10.6-2ubuntu0.4
- libtcmalloc-minimal4t64=2.15-3build1
- libunwind8=1.6.2-3build1.1
- python3-ceph-argparse=19.2.3-0ubuntu0.24.04.3
- python3-ceph-common=19.2.3-0ubuntu0.24.04.3
- python3-cephfs=19.2.3-0ubuntu0.24.04.3
- python3-certifi=2023.11.17-1
- python3-chardet=5.2.0+dfsg-1
- python3-idna=3.6-2ubuntu0.1
- python3-prettytable=3.6.0-2
- python3-rados=19.2.3-0ubuntu0.24.04.3
- python3-rbd=19.2.3-0ubuntu0.24.04.3
- python3-requests=2.31.0+dfsg-1ubuntu1.1
- python3-urllib3=2.0.7-1ubuntu0.6
- python3-wcwidth=0.2.5+dfsg1-1.1ubuntu1
- python3-yaml=6.0.1-2build2
stage: []
build-packages: []
dqlite:
autotools-configure-parameters:
- --prefix=
- --enable-build-raft
build-packages:
- liblz4-dev
- libsqlite3-dev
- libuv1-dev
- xfslibs-dev
organize:
usr/bin/: bin/
usr/lib/: lib/
plugin: autotools
prime:
- bin/sqlite3
- lib/libdqlite*so*
- lib/*/libsqlite3*so*
- lib/*/libuv*
source: https://github.com/canonical/dqlite
source-commit: f6058ba74838f89b3720c74b7bb4a944bfc36a09
source-depth: 1
source-type: git
stage-packages:
- liblz4-1=1.9.4-1build1.1
- libuv1t64=1.48.0-1.1build1
- sqlite3=3.45.1-1ubuntu2.5
stage: []
edk2:
after:
- qemu
build-packages:
- acpica-tools
- bc
- debhelper
- dosfstools
- g++
- grub-efi-amd64-signed
- jq
- lsb-release
- mtools
- nasm
- openssl
- python3
- python3-pexpect
- python3-virt-firmware
- quilt
- rsync
- sbsigntool
- shim-signed
- uuid-dev
- xorriso
override-build: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
set -eux
# Ensure staged libraries are found (needed for qemu to generate secure boot vars)
export LD_LIBRARY_PATH="/build/lxd/stage/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH):/build/lxd/stage/lib:${LD_LIBRARY_PATH:-}"
# Apply patches from Ubuntu sources.
QUILT_PATCHES=debian/patches quilt push -a
# Secboot firmware (SECURE_BOOT_ENABLE=TRUE) enforces strict W^X memory (NX protection)
# protection via EFI_MEMORY_ATTRIBUTE_PROTOCOL (new in EDK2 2025.11+).
# Older bootloaders might be unusable:
# * https://bugs.launchpad.net/ubuntu/+source/edk2/+bug/2149400 (Synchronous Exception)
# * https://github.com/canonical/lxd/issues/18187 (Exception Type - 0E(#PF - Page-Fault))
# Workaround: add $(NO_STRICTNX_COMMON_FLAGS) (i.e. --pcd PcdUninstallMemAttrProtocol=TRUE)
# to OVMF_4M_SECBOOT_FLAGS and AAVMF_SECBOOT_FLAGS so the protocol is
# uninstalled before the bootloader runs.
# Secure Boot signature verification (SECURE_BOOT_ENABLE=TRUE) remains active; only
# the W^X enforcement is disabled as if
# lxc config set <inst> raw.qemu="-fw_cfg name=opt/org.tianocore/UninstallMemAttrProtocol,string=y"
# had been used.
# The longer term plan is to stop disabling this protection and instead document that older guests
# require `boot.mode=uefi-nosecureboot`.
sed -i 's/^\(\(AAVMF\|OVMF_4M\)_SECBOOT_FLAGS = .*\)$/\1 $(NO_STRICTNX_COMMON_FLAGS)/' debian/rules
# Apply patches
patch -p1 < "/build/lxd/patches/edk2-0001-force-DUID-LLT.patch"
cp "/build/lxd/patches/edk2-0002-logo.bmp" MdeModulePkg/Logo/Logo.bmp
patch -p1 < "/build/lxd/patches/edk2-0003-boot-delay.patch"
# Install files destination
mkdir -p "${CRAFT_PART_INSTALL}/share/qemu/"
if [ "$(uname -m)" = "x86_64" ]; then
DSC="OvmfPkg/OvmfPkgX64.dsc"
BUILD_TARGET="install-ovmf"
SRC_DIR="debian/tmp/usr/share/OVMF"
SRC_CODE="OVMF_CODE_4M.secboot.fd"
SRC_VARS="OVMF_VARS_4M.fd"
SRC_VARS_MS="OVMF_VARS_4M.ms.fd"
# Add DEBUG_VERBOSE to print error level for DEBUG build
# * 0x80000000 (DEBUG_ERROR)
# * 0x00000040 (DEBUG_INFO)
# * 0x0000000F (Bits 0-3: DEBUG_INIT, DEBUG_WARN, DEBUG_LOAD, DEBUG_FS)
# = 0x8000004F
# Adding 0x00400000 (DEBUG_VERBOSE) gives 0x8040004F
SED_EXPR="s#PcdDebugPrintErrorLevel|0x8000004F#PcdDebugPrintErrorLevel|0x8040004F#g"
elif [ "$(uname -m)" = "aarch64" ]; then
DSC="ArmVirtPkg/ArmVirt.dsc.inc"
BUILD_TARGET="install-qemu-efi-aarch64"
SRC_DIR="debian/tmp/usr/share/AAVMF"
SRC_CODE="AAVMF_CODE.secboot.fd"
SRC_VARS="AAVMF_VARS.fd"
SRC_VARS_MS="AAVMF_VARS.ms.fd"
# See note in `x86_64` section for DEBUG_VERBOSE explanation
SED_EXPR="s#DEBUG_PRINT_ERROR_LEVEL = 0x8000004F#DEBUG_PRINT_ERROR_LEVEL = 0x8040004F#g"
fi
# Function to run build and install
run_build() {
local TYPE="${1}"
local SUFFIX="${2}"
# Clean up previous build stamps/artifacts to ensure clean rebuild with new TYPE
rm -f debian/setup-build-stamp
rm -rf debian/*-install debian/tmp
rm -rf Build
if [ "${TYPE}" = "DEBUG" ]; then
# Add `DEBUG_VERBOSE` to print error level for DEBUG build
sed --in-place=.bak "${SED_EXPR}" "${DSC}"
fi
/usr/bin/make -f debian/rules "${BUILD_TARGET}" BUILD_TYPE="${TYPE}"
if [ "${TYPE}" = "DEBUG" ] && [ -f "${DSC}.bak" ]; then
mv "${DSC}.bak" "${DSC}"
fi
cp "${SRC_DIR}/${SRC_CODE}" "${CRAFT_PART_INSTALL}/share/qemu/OVMF_CODE.4MB${SUFFIX}.fd"
cp "${SRC_DIR}/${SRC_VARS}" "${CRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.4MB${SUFFIX}.fd"
if [ "${TYPE}" = "RELEASE" ]; then
cp "${SRC_DIR}/${SRC_VARS_MS}" "${CRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.4MB.ms.fd"
fi
}
# Build Release
run_build RELEASE ""
# Build Debug
run_build DEBUG ".debug"
# Cleanup debug vars
rm "${CRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.4MB.debug.fd"
override-prime: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
plugin: nil
prime:
- share/qemu/*
source: https://git.launchpad.net/ubuntu/+source/edk2
source-commit: b922ebea8da4ddf4a59a652ac570f018672f4872
source-depth: 1
source-type: git
stage-packages: []
stage: []
gpu-2404:
after:
- lxd
- qemu
override-prime: |
${CRAFT_PART_SRC}/bin/gpu-2404-cleanup mesa-2404 nvidia-2404
plugin: dump
source: https://github.com/canonical/gpu-snap.git
stage-packages: []
stage: []
prime: []
build-packages: []
libatomic:
organize:
usr/lib/: lib/
override-prime: |-
[ "$(uname -m)" != "s390x" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" != "s390x" ] && exit 0
craftctl default
plugin: nil
prime:
- lib/*/libatomic.so*
stage-packages: []
stage: []
build-packages: []
logrotate:
organize:
usr/bin/: bin/
usr/lib/: lib/
usr/sbin/: bin/
plugin: nil
prime:
- bin/logrotate
stage:
- bin/logrotate
stage-packages:
- adduser=3.137ubuntu1
- cron-daemon-common=3.0pl1-184ubuntu2
- cron=3.0pl1-184ubuntu2
- logrotate=3.21.0-2build1
build-packages: []
lvm:
organize:
sbin/: bin/
usr/lib/: lib/
usr/sbin/: bin/
override-build: |-
# Patch lvm.conf to:
# 1) Disable bits that don't apply in a snap'ed env. Handle commented
# out variants that represent builtin values.
# * udev_sync
# * udev_rules
# * use_lvmetad
# * monitoring
# 2) Uncomment all executable directives to override their builtin
# values. Replace paths in /usr/bin, /usr/sbin, /bin and /sbin
# by /snap/lxd/current/bin to use executables from the snap.
sed -i \
-e "s%\(# \)\?udev_sync = 1%udev_sync = 0%" \
-e "s%\(# \)\?udev_rules = 1%udev_rules = 0%" \
-e "s%\(# \)\?use_lvmetad = 1%use_lvmetad = 0%" \
-e "s%\(# \)\?monitoring = 1%monitoring = 0%" \
-e "/# .*_\?executable =/s/# //" \
-e "s%\(/usr\)\?/s\?bin/%/snap/lxd/current/bin/%" \
"${CRAFT_PART_INSTALL}/etc/lvm/lvm.conf"
craftctl default
plugin: nil
prime:
- bin/cache_*
- bin/dmeventd
- bin/era_*
- bin/lv*
- bin/pdata_tools
- bin/pv*
- bin/thin_*
- bin/vg*
- -bin/vgimportclone
- -bin/lvmconf
- -bin/lvmdump
- -bin/lvmetad
- -bin/lvmpolld
- etc/lvm/lvm.conf
- etc/lvm/profile/*
- lib/*/device-mapper/*
- lib/*/libaio.so*
- lib/*/libdevmapper*
- lib/*/liblvm*
- lib/*/libreadline.so*
stage-packages:
- dmeventd=2:1.02.185-3ubuntu3.2
- libaio1t64=0.3.113-6build1.1
- libdevmapper-event1.02.1=2:1.02.185-3ubuntu3.2
- liblvm2cmd2.03=2.03.16-3ubuntu3.2
- lvm2=2.03.16-3ubuntu3.2
- thin-provisioning-tools=0.9.0-2ubuntu5.1
stage: []
build-packages: []
lxc:
build-packages:
- libapparmor-dev
- libcap-dev
- libseccomp-dev
- pkg-config
- meson
- ninja-build
meson-parameters:
- --buildtype=release
- -Dapparmor=true
- -Dcapabilities=true
- -Dcommands=false
- -Ddbus=false
- -Dexamples=false
- -Dinstall-init-files=false
- -Dinstall-state-dirs=false
- -Dlibdir=lib/x86_64-linux-gnu
- -Dman=false
- -Dmemfd-rexec=false
- -Dopenssl=false
- -Dprefix=/
- -Drootfs-mount-path=/var/snap/lxd/common/lxc/
- -Dseccomp=true
- -Dselinux=false
- -Dspecfile=false
- -Dtests=false
- -Dtools=false
organize:
share/lxc/hooks: lxc/hooks
snap/lxd/current/lxc: lxc
override-build: |
set -ex
# Git cherry-picks
cd ../src
git config user.email "noreply@lists.canonical.com"
git config user.name "LXD snap builder"
# lxc-checkconfig.in does not need any preprocessing
mkdir -p "${CRAFT_PART_INSTALL}/bin/"
install --mode=0755 src/lxc/cmd/lxc-checkconfig.in "${CRAFT_PART_INSTALL}/bin/lxc-checkconfig"
cd ../build
set +ex
craftctl default
set -ex
mkdir -p "${CRAFT_PART_INSTALL}/lxc/config/common.conf.d/"
ln -s /var/snap/lxd/common/lxc/local.conf "${CRAFT_PART_INSTALL}/lxc/config/common.conf.d/01-local.conf"
plugin: meson
prime:
- bin/lxc-checkconfig
- lib/*/liblxc.so.1
- lib/*/liblxc.so.1.*
- lxc/config/common.conf.d
- lxc/hooks/nvidia
source: https://github.com/lxc/lxc
source-commit: 2597434ae2472114c70ad2bdf4ae5580c9e22717
source-depth: 1
source-type: git
stage-packages: []
stage: []
lxcfs:
build-packages:
- libfuse3-dev
- pkg-config
- python3-jinja2
- meson
- ninja-build
meson-parameters:
- --prefix=/
- --datadir=/snap/lxd/current/
- --localstatedir=/var/snap/lxd/common/var/
- -Ddocs=false
- -Dinit-script=
- -Dtests=false
organize:
lib/*/lxcfs/liblxcfs.so: lib/
snap/lxd/current/lxc/config/common.conf.d/*: lxc/config/common.conf.d/
snap/lxd/current/lxcfs/: lxcfs/
usr/lib/: lib/
override-build: |
set -ex
# Git cherry-picks
cd ../src
git config user.email "noreply@lists.canonical.com"
git config user.name "LXD snap builder"
set +ex
craftctl default
set -ex
patch -p1 "${CRAFT_PART_INSTALL}/snap/lxd/current/lxcfs/lxc.mount.hook" < "/build/lxd/patches/lxcfs-0001-hook.patch"
plugin: meson
prime:
- bin/fusermount
- bin/fusermount3
- lib/*/libfuse3.so.*
- lib/*/libSegFault.so
- bin/lxcfs
- lib/liblxcfs.so
- lxc/config/common.conf.d/00-lxcfs.conf
- lxcfs/
source: https://github.com/lxc/lxcfs
source-commit: 7ff173bfdb01bc10ab92c3d083a868d8f7fdd94d
source-depth: 1
source-type: git
stage-packages:
- adduser=3.137ubuntu1
- fuse3=3.14.0-5build1
- glibc-tools=0.0~git3.23fd2b9-0ubuntu1
- libfuse3-3=3.14.0-5build1
stage: []
lxd:
after:
- lxc
- dqlite
build-packages:
- cmake
- libacl1-dev
- libudev-dev
- libxml2-dev
- libxslt1-dev
- libblas-dev
- libopenblas-dev
- liblapack-dev
- pkg-config
- pypy3-dev
- python3-dev
- python3-pip
- python3-venv
build-snaps:
- go/1.26/stable
organize:
sbin/sgdisk: bin/
usr/bin/: bin/
usr/lib/: lib/
usr/sbin/: bin/
usr/share/misc/: share/misc/
var/lib/usbutils/usb.ids: share/misc/
override-build: |
set -ex
# Git cherry-picks
cd ../src
git config user.email "noreply@lists.canonical.com"
git config user.name "LXD snap builder"
git cherry-pick -x 38dc234e940d2392c95c922f95a65fb85aa9534d # test/suites/clustering: use storage_backend in replicator tests
git cherry-pick -x 861755dd1f66d471e618fd68da93d12c323f5824 # test/includes/test-groups: run replicator tests against all storage drivers
git cherry-pick -x 35f18ffe6f4fd829af4acd4566fe1856850cd943 # test/suites/migration: refresh zfs clone via pull mode suceeds when no shared snapshots exist
git cherry-pick -x 611da07cf67749be9cee4e604799128c9a6bfc17 # lxd/storage/drivers: Delete ZFS clone volume before refresh migration
git cherry-pick -x 532039ff489c1fa0dadf3e9ff56bd5bd0d1b58e3 # lxd/api_replicators: Use Required validator for cluster config key
git cherry-pick -x 0b0fa6f2c34be5fa611ffeb07699c738ce3e6dcb # lxd/api_replicators: Restrict config merge to PATCH operations
git cherry-pick -x 993f7cf87ddb8b922cbc49104339d06ac1f2f126 # doc: Update metadata
git cherry-pick -x 88acf0535d7cdecb958e5a640a75badc37eab884 # lxd/api_replicators: Simplify operation scheduling conditional
git cherry-pick -x e940291dabd71f82b5a5c5ac8859c61100ff078c # lxd/cluster: Fix standBys parameter naming in test helper
git cherry-pick -x 59f48a8df4717e21431cce28875bb810f0ec92ac # lxd/db/cluster: add GetClusterLinkUsedBy
git cherry-pick -x bb1854de71e2e0ee77a09deec07ce56f02148265 # lxd/api_cluster_link: Prevent deletion and rename of in-use cluster links
git cherry-pick -x 490900913b3b3dab5fa464e548a5123f8b1b3924 # test/suites/clustering: verify cluster link cannot be deleted while referenced by a replicator
git cherry-pick -x cb0ffffd151e6a4b4e14dac35952faa99de28155 # lxd: use s.Endpoints.NetworkCert() when loading cluster cert for cluster links
git cherry-pick -x 1444c3fba8bb76ce8ae3d36cf7e11c20d058a648 # lxd/api: Don't mention node in error messages
git cherry-pick -x d94d0cba1512372959ffe9ecc6b89692edf07fed # lxd/api: Return HTTP 400 when trying to change cluster.https_address
git cherry-pick -x d3d59fa22c238e8e4de25619f270bb504da9436f # lxd/api: Only setup reverter if local config changed in doAPI10Update
git cherry-pick -x 8643250eeffbd9589829e75c9a57b84b00022d62 # lxd/api: Only setup reverter and cluster notification if global config changed
git cherry-pick -x c88b945f58d3c764ff9866877890360e6bf5677f # lxd/api: Remove unnecessary map.Copy in api10Put
git cherry-pick -x 38721c87b67607e9debc73e3b97959b1f3fc1490 # lxd/api: Remove unnecessary map.Copy in doAPI10Update
git cherry-pick -x 15a7c08914af1a5be54220a0abd1ddef7457f6f8 # lxd/api: Remove unnecessary map initialisation in doAPI10Update
git cherry-pick -x 6bf53893746bb3931a13f524eda661918df6b1fb # lxd/api: Use old config in revert rather than partial local config in PATCH requests
git cherry-pick -x 31bd70f472f05ea59be136abb13cf0af604705be # lxd/api: Use local var scope for reverters in doAPI10Update
git cherry-pick -x 98b01a30a979973424a27dd98bc77899a954b3f6 # lxd/api: Fix typo
git cherry-pick -x 3db81137d2ef5c35bdab9cd07b66c02e0c7754e5 # lxd/cluster/config/config: Fix incorrect mention of node config
git cherry-pick -x 77444b64a908d446c2ddbedd90c63f2d9defdcb8 # lxd: Don't mention node in errors
git cherry-pick -x e1bd711fc30b74538c1b6a4cd7a0aed56dd384ff # lxd/db/cluster/update: Remove trailing whitespace
git cherry-pick -x 41cfad1c05ccaa2f8a15f9d4b107ab803a6217db # test: Test that a covering core.https_address can be unset and the cluster.https_address is reinstated
git cherry-pick -x 116e7a2c3dfc1fe12eb14eadd35d6a0682da113b # lxd/api: Re-activate the cluster HTTPS address listener if a previously covering core.https_address is unset
git cherry-pick -x 5ee3f52c29e4263de165bcdb7787adcb4fa51fb6 # lxd/api: Fix potential crash if non string config sent as notification in api10Put
git cherry-pick -x a3f8ade2edadbd5826a73e5960b23aa7cfecb171 # lxd/endpoints: Improve logging of changes
git cherry-pick -x f8aa72ebc8efba4e9055b06648ed6fca5542f4c1 # lxd/endpoints/pprof: Fix incorrect address comparison when changing address
git cherry-pick -x 090fca5b6c11cd8494cd9dc967dbcc9ebb088fe8 # lxd: Add snapshot, backup, and "full name" to storage volume details.
git cherry-pick -x 5dc8db822a81fc44873140cd596a17967528a7a4 # lxd: Use storage volume details to decide auth check URL.
git cherry-pick -x 34acb8f44c963375e8019c93dcfc17ae57211562 # lxd: Use storage volume details for DevLXD handlers.
git cherry-pick -x e34b374d2ca84f94e9a9cb1fe085d84edecc2617 # lxd: Use storage volume details for backup handlers.
git cherry-pick -x 27566c17b7aa2ac3c1a2432849f1b4871db4632d # lxd: Use storage volume details for snapshot handlers.
git cherry-pick -x 709859c8734cccd1cd38e91c954edbf7a49a092c # lxd: If not clustered, shortcut remote volume check.
git cherry-pick -x eea862106f6a4e150372a728d613a8c78063c169 # lxd: Indicate that the location is the current member if clustered.
git cherry-pick -x 1db46aa76a429bb22e0a366deb9d8a4822569f3d # lxd: Set location on refresh based on source pool.
git cherry-pick -x f0a0e8fe32875cc7b1834aee52c3e26d1a06a35f # lxd: Set location on copy operation URLs based on source pool.
git cherry-pick -x e1eb53ed66a4bc9bf417da9460adac1793e49818 # lxd: Set project on copy operation URLs.
git cherry-pick -x ed8b95537286b87332194ce8faed8d4b720f8568 # lxd: Fix project and entity URL for migration.
git cherry-pick -x 03bfde0d34ff340aefb7aa510be563b3ba44246f # lxd: Update volume POST migration function.
git cherry-pick -x 8c01eb8e4287a0a1cd47d3f27c99589e0aac0362 # lxd: Update volume POST rename function.
git cherry-pick -x 62b7071397e8fdbb492e5eb3d56c02be9fc85463 # lxd: Update volume POST move function.
git cherry-pick -x 9ac5c7d575ea0cb1d010f64caab3e21373205e69 # lxd: Update calls to refactored volume helpers.
git cherry-pick -x 39cba2bb769bb4d85434e7b573fe94c2bc7590df # lxd: Set target parameter on volume migration operation URL.
git cherry-pick -x 20aa40854921acb71d09993ed0066ea3470ffa4a # lxd: Indicate why `details.location` is not used as target in volume deletion helper.
git cherry-pick -x 5e0923c2bacc6491df377a4ff61652256d61a75d # lxd: Fix operation URLs for backup creation.
git cherry-pick -x 054338fcb4557fb637189454b17882d68c0f05d7 # lxd: Fix operation URLs for backup rename.
git cherry-pick -x f1f322e1e9a479ca77a55188870b04246a94e88d # lxd: Fix operation URLs for snapshot rename.
git cherry-pick -x cb4e37d04acd0296620f7ab809a9821b075e5567 # lxd: Simplify operation URLs for snapshot edit/delete.
git cherry-pick -x 6287fb3397ee8c6ff9b8528c821b9909f594ae01 # lxd: Add missing error message override when getting volume over devlxd.
git cherry-pick -x f6d8b412c2e346afe84a244665ac9c35a30b635c # lxd/db/cluster: Allow an error return in identity group filter.
git cherry-pick -x 6a9868581d246143f240e7c0d869e834f9b3a629 # lxd: Update calls to get identity groups.
git cherry-pick -x 342030ff8c9f256ade381276e2cf86f24d469619 # lxd: Fix how groups are set on identity patch.
git cherry-pick -x dccd70fab8f7f0bd6698798b2e90b62893509093 # lxd: Enforce that editor can view all of an identities' groups.
git cherry-pick -x 3cb4628a9c899da96aaff16d0ccd630bcdf5f4b6 # test/suites: Test group management when not all groups are visible.
git cherry-pick -x b3ae1fd21bac9605bfa41d7bbe97051e1bed1ac0 # lxd/auth/drivers: Update entitlement comments.
git cherry-pick -x 4e1369b515bfc5e8e1a64e1be3cfcd1b5c838436 # lxd/auth: Update auth
git cherry-pick -x 2bd9741fa5e65770d5647cb3d74a1a7674f6fe43 # doc: Update metadata
git cherry-pick -x b014fe2187d1211646bb13f707eb097664a6cb90 # lxd/sys/os: check if the kernel is supports the modern CephFS mount syntax (5.17+)
git cherry-pick -x 2cdf9bfb8afcfda7f2e1c8bf08acf64937a8d608 # lxd/storage/drivers/utils_ceph: use legacy CephFS mount syntax on kernel < 5.17
git cherry-pick -x 8e8bef60a7b6361767f2016ebaf44f5ec93fc551 # lxd/storage/drivers/utils_ceph_test: extend test cases
git cherry-pick -x 03b6dc0ab69acaca7ffbef51d18ff5dc7940e597 # lxd/device/device_utils_disk: accept a new parameter for modern mount syntax
git cherry-pick -x c0f5da928edc9448efc92f869bc229329051d415 # lxd/device/disk: pass a new parameter for modern mount syntax
git cherry-pick -x 540b15680592efedb9d7baa6ab19281e7150b82e # lxd/instance/drivers: Fix backup file error handling for refresh
git cherry-pick -x e6843d8b8ea36b4d214bf7141430a80acecff011 # lxd/backup: Check for missing .Config in GetInfo
git cherry-pick -x 8cc93d51af3f49b87aa5166b9ed9b45a29b5d0d7 # lxd/backup: Validate all backup config slices for nil values
git cherry-pick -x 83685628089e431c7633cc4b03fa8e583d350f01 # lxd/backup: Perform a defensive check against the config itself before trying to convert
# Setup build environment
export GOTOOLCHAIN="local"
export GOPATH="$(realpath ./.go)"
export CGO_CFLAGS="-I/build/lxd/stage/include/ -I/build/lxd/stage/usr/local/include/"
export CGO_LDFLAGS="-L/build/lxd/stage/lib/ -L/build/lxd/stage/usr/local/lib/"
export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
# Build the binaries
go build -trimpath -o "${CRAFT_PART_INSTALL}/bin/lxc" github.com/canonical/lxd/lxc
# Build LXD server binary into ${CRAFT_PART_INSTALL}/sbin/lxd so that it does not conflict with the
# lxd-stophook wrapper script which is stored in ${CRAFT_PART_INSTALL}/bin/lxd.
# This way when a container stops it will call "/snap/lxd/current/bin/lxd callhook" which is handled by the
# lxd-stophook script, which in turn will execute "/snap/lxd/current/bin/lxd-user callhook" to notify LXD.
go build -trimpath -o "${CRAFT_PART_INSTALL}/sbin/lxd" -tags=libsqlite3 github.com/canonical/lxd/lxd
# Build static binaries
CGO_ENABLED=0 go build -trimpath -o "${CRAFT_PART_INSTALL}/bin/lxd-agent" -tags=agent,netgo github.com/canonical/lxd/lxd-agent
CGO_ENABLED=0 go build -trimpath -o "${CRAFT_PART_INSTALL}/bin/lxd-user" -tags netgo github.com/canonical/lxd/lxd-user
# Check which Go version was used to compile each of the lxc/lxd binaries
# XXX: fail if an unexpected version (like a Go toolchain) was used
GOVER="$(snap list go | awk '{if ($1 == "go") print $2}')"
UNEXPECTED_GO_VER="$(go version -v "${CRAFT_PART_INSTALL}/bin/lxc"* "${CRAFT_PART_INSTALL}/bin/lxd"* | grep -vF ": go${GOVER}" || true)"
if [ -n "${UNEXPECTED_GO_VER:-}" ]; then
echo "Some binaries were compiled with an unexpected Go version (!= ${GOVER}):"
echo "${UNEXPECTED_GO_VER}"
exit 1
fi
# Some python dependencies are not available for armhf/riscv64 or just require a build from source.
# Not worth the effort for now.
if [ "$(uname -m)" != "armv7l" ] && [ "$(uname -m)" != "riscv64" ]; then
# Build the static website
make doc
# Remove unneeded bits
rm doc/_build/objects.inv # only objects.inv.txt is used
# not needed once built
rm doc/_build/.buildinfo
rm -rf doc/_build/_sphinx_design_static/
# Copy the static website
mkdir -p "${CRAFT_PART_INSTALL}/share/lxd-documentation"
cp -a doc/_build/. "${CRAFT_PART_INSTALL}/share/lxd-documentation/"
fi
# Setup bash completion
mkdir -p "${CRAFT_PART_INSTALL}/etc/bash_completion.d/"
# Snapd requires the unaliased command `lxd.lxc` to be supplied as the first command for completion to be detected
set_cmds='s/^\s*complete.*__start_lxc /&lxd.lxc /'
# When executed by snapd, the COLUMNS shell value is unset, so use $(tput cols) instead
set_cols='s/# $COLUMNS.*/COLUMN="$(tput cols)" \# store the current shell width./'
# When executed by snapd, the `compopt` support detection doesn't work so fake that it is always `builtin`
set_compopt='s|$(type -t compopt)|"builtin"|'
# Modify requestComp variable to use lxc based on context ($SNAP/bin/lxc in Snap environment)
set_request_comp='s|requestComp="${words\[0\]} __complete ${args\[\*\]}"|requestComp="/snap/lxd/current/commands/lxc __complete ${args[*]}"|'
# Generate completions script
"${CRAFT_PART_INSTALL}/bin/lxc" completion bash | sed -e "${set_cmds}" -e "${set_cols}" -e "${set_compopt}" -e "${set_request_comp}" > "${CRAFT_PART_INSTALL}/lxc-completer.sh"
chmod +x "${CRAFT_PART_INSTALL}/lxc-completer.sh"
override-pull: |
craftctl default
set -ex
# Setup build environment
export GOTOOLCHAIN="local"
export GOPATH="$(realpath ./.go)"
# Setup the GOPATH
rm -Rf "${GOPATH}"
mkdir -p "${GOPATH}/src/github.com/canonical"
ln -s "$(pwd)" "${GOPATH}/src/github.com/canonical/lxd"
# Download the dependencies
go get -v ./...
plugin: nil
prime:
- bin/dnsmasq
- bin/getfattr
- bin/setfattr
- bin/iw
- bin/pigz
- bin/rsync
- bin/setfacl
- bin/sgdisk
- bin/xdelta3
- lib/*/libidn.so.*
- lxc-completer.sh
- share/lxd-documentation*
- share/misc/pci.ids
- share/misc/usb.ids
- bin/lxc
- bin/lxd-agent
- bin/lxd-user
- sbin/lxd
source: https://github.com/canonical/lxd
source-commit: 84705553d17aeb8e15032611c321127a06c2f2ff
source-depth: 0
source-type: git
stage-packages:
- acl=2.3.2-1build1.1
- attr=1:2.5.2-1build1.1
- dnsmasq-base=2.90-2ubuntu0.1
- gdisk=1.0.10-1build1
- iw=6.7-1build1
- libjansson4=2.14-2build2
- libnftables1=1.0.9-1ubuntu0.1
- lsb-base=11.6
- lshw=02.19.git.2021.06.19.996aaad9c7-2ubuntu0.24.04.1
- pci.ids=0.0~2024.03.31-1ubuntu0.1
- pigz=2.8-1
- rsync=3.2.7-1ubuntu1.2
- usb.ids=2024.03.18-1
- xdelta3=3.0.11-dfsg-1.2
stage: []
lxd-ui:
override-build: |
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
npm install yarn --global
yarn install
yarn build
mkdir -p "${CRAFT_PART_INSTALL}/share"
cp -R build/ui "${CRAFT_PART_INSTALL}/share/lxd-ui/"
override-prime: |-
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "riscv64" ] && exit 0
snap install node --channel=22/stable --classic
craftctl default
plugin: nil
prime:
- share/lxd-ui*
source: https://github.com/canonical/lxd-ui
source-commit: 9cbb82d985479d35c8fbf16816a3275996dd941b
source-depth: 1
source-type: git
stage-packages: []
stage: []
build-packages: []
nftables:
organize:
usr/lib/: lib/
usr/sbin/: bin/
plugin: nil
prime:
- bin/nft
- lib/*/libjansson*so*
- lib/*/libnftables*so*
stage-packages:
- libjansson4=2.14-2build2
- libnftables1=1.0.9-1ubuntu0.1
- nftables=1.0.9-1ubuntu0.1
stage: []
build-packages: []
nvidia-container:
build-environment:
- GIT_TAG: 1.19.0
build-packages:
- bmake
- curl
- libelf-dev
- libseccomp-dev
- lsb-release
- libtirpc-dev
build-snaps:
- go/1.26/stable
organize:
usr/local/bin/nvidia-container-cli: bin/nvidia-container-cli.real
usr/local/lib: lib/
override-build: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
set -ex
# Setup build environment
export GOTOOLCHAIN="local"
# Git cherry-picks
git config user.email "noreply@lists.canonical.com"
git config user.name "LXD snap builder"
patch -p1 < "/build/lxd/patches/nvidia-0001-Fix-for-22.04-build.patch"
patch -p1 < "/build/lxd/patches/nvidia-0002-pre-load-libdl.patch"
mkdir -p "${CRAFT_PART_INSTALL}/bin/"
cp "/build/lxd/snapcraft/wrappers/nvidia-container-cli" "${CRAFT_PART_INSTALL}/bin/"
set +ex
craftctl default
override-prime: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
plugin: make
prime:
- bin/nvidia-container-cli*
- lib/libnvidia-container.so*
- lib/libnvidia-container-go.so*
source: https://github.com/NVIDIA/libnvidia-container
source-commit: 7585946c6471402577e14474d7c56ca5be0348d7
source-depth: 1
source-type: git
stage-packages: []
stage: []
nvidia-container-toolkit:
build-snaps:
- go/1.26/stable
organize:
usr/bin/: bin/
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
set -ex
# Setup build environment
export GOTOOLCHAIN="local"
make binaries
mkdir -p "${CRAFT_PART_INSTALL}/bin/"
cp nvidia-ctk "${CRAFT_PART_INSTALL}/bin/"
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: make
prime:
- bin/nvidia-ctk
source: https://github.com/NVIDIA/nvidia-container-toolkit
source-commit: ec7b4e2fa2caecad6d89be4a26029b831fe7503a
source-depth: 1
source-type: git
stage-packages: []
stage: []
build-packages: []
nvme:
organize:
usr/lib/: lib/
usr/sbin/: bin/
plugin: nil
prime:
- bin/nvme
- lib/*/libnvme*
stage-packages:
- adduser=3.137ubuntu1
- libnvme1t64=1.8-3ubuntu1
- nvme-cli=2.8-1ubuntu0.1
- uuid-runtime=2.39.3-9ubuntu6.5
stage: []
build-packages: []
openvswitch:
organize:
sbin/: bin/
usr/bin/: bin/
usr/lib/: lib/
usr/share/: share/
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: nil
prime:
- bin/ovs-vsctl
- lib/*/libunbound*so*
- share/openvswitch/vswitch.ovsschema
stage-packages:
- adduser=3.137ubuntu1
- libnuma1=2.0.18-1ubuntu0.24.04.1
- libunbound8=1.19.2-1ubuntu3.7
- libxdp1=1.4.2-1ubuntu4
- openvswitch-common=3.3.4-0ubuntu0.24.04.2
- openvswitch-switch=3.3.4-0ubuntu0.24.04.2
- python3-netifaces=0.11.0-2build3
- python3-openvswitch=3.3.4-0ubuntu0.24.04.2
- python3-sortedcontainers=2.4.0-2
- uuid-runtime=2.39.3-9ubuntu6.5
stage: []
build-packages: []
ovn:
after:
- openvswitch
organize:
usr/bin/: bin/
usr/lib/: lib/
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: nil
prime:
- bin/ovn-nbctl
- bin/ovn-sbctl
- lib/*/libunbound*so*
stage-packages:
- libunbound8=1.19.2-1ubuntu3.7
- ovn-common=24.03.6-0ubuntu0.24.04.1
stage: []
build-packages: []
qemu:
after:
- libatomic
- spice-server
autotools-configure-parameters:
- --disable-auth-pam
- --disable-bochs
- --disable-brlapi
- --disable-cloop
- --disable-curl
- --disable-dmg
- --disable-docs
- --disable-fuse
- --disable-glusterfs
- --disable-gnutls
- --disable-gtk
- --disable-guest-agent
- --disable-libiscsi
- --disable-libnfs
- --disable-libpmem
- --disable-libssh
- --disable-nettle
- --disable-oss
- --disable-parallels
- --disable-qed
- --disable-sdl
- --disable-slirp
- --disable-tcg
- --disable-user
- --disable-vde
- --disable-vdi
- --disable-vmnet
- --disable-vnc
- --disable-vvfat
- --disable-xen
- --disable-xkbcommon
- --enable-attr
- --enable-cap-ng
- --enable-kvm
- --enable-libusb
- --enable-usb-redir
- --enable-linux-aio
- --enable-linux-io-uring
- --enable-numa
- --enable-pie
- --enable-rbd
- --enable-seccomp
- --enable-spice
- --enable-system
- --enable-tools
- --enable-vhost-crypto
- --enable-vhost-kernel
- --enable-vhost-net
- --enable-vhost-user
- --firmwarepath=/snap/lxd/current/share/qemu/
- --localstatedir=/var/
- --disable-install-blobs
build-packages:
- bison
- bzip2
- flex
- pkg-config
- libaio-dev
- libcap-ng-dev
- libfdt-dev
- libglib2.0-dev
- libnuma-dev
- libpixman-1-dev
- libseccomp-dev
- liburing-dev
- libusb-1.0-0-dev
- libusbredirparser-dev
- python3-pip
- quilt
- librbd-dev
organize:
usr/bin/: bin/
usr/lib/: lib/
usr/local/bin/: bin/
usr/local/lib/: lib/
usr/local/libexec/: bin/
usr/local/share/: share/
usr/share/qemu/kvmvapic.bin: share/qemu/
usr/share/qemu/s390-ccw.img: share/qemu/
usr/share/qemu/slof.bin: share/qemu/
usr/share/seabios/bios-256k.bin: share/qemu/
usr/share/seabios/vgabios-*: share/qemu/
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
set -ex
# Mangle the configure a bit
QEMUARCH="$(uname -m)"
[ "${QEMUARCH}" = "ppc64le" ] && QEMUARCH="ppc64"
# Apply patches from Ubuntu sources.
QUILT_PATCHES=debian/patches quilt push -a
sed -i "s/^unset target_list$/target_list=\"${QEMUARCH}-softmmu\"/" configure
sed -i 's#libseccomp_minver=".*#libseccomp_minver="0.0"#g' configure
# Extract efi-virtio.rom from ipxe-qemu.
# This doesn't work in the organize section below.
mkdir -p "${CRAFT_PART_INSTALL}"/share/qemu
mv "${CRAFT_PART_INSTALL}"/usr/lib/ipxe/qemu/efi-virtio.rom "${CRAFT_PART_INSTALL}"/share/qemu/
set +ex
craftctl default
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
set -eux
# Download meson Python wheel (normally shipped in upstream tarballs)
pip download --dest python/wheels meson==1.9.0
# Ensure the wheels were downloaded
[ "$(sha256sum python/wheels/meson-1.9.0-py3-none-any.whl | awk '{print $1}')" = "45e51ddc41e37d961582d06e78c48e0f9039011587f3495c4d6b0781dad92357" ] || { echo "Invalid sha256sum for meson"; exit 1; }
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: autotools
prime:
- bin/genisoimage*
- bin/mkisofs*
- bin/qemu-system-*
- bin/qemu-img*
- lib/*/libatomic.so*
- lib/*/libmagic*so*
- lib/*/libnuma*so*
- lib/*/libpixman*so*
- lib/*/liburing.so*
- lib/*/libusbredir*so*
- lib/*/libusb*so*
- lib/*/libfdt*.so*
- share/qemu/keymaps/*
- share/qemu/bios-256k.bin
- share/qemu/efi-virtio.rom
- share/qemu/kvmvapic.bin
- share/qemu/s390-ccw.img
- share/qemu/slof.bin
- share/qemu/vgabios-bochs-display.bin
- share/qemu/vgabios-qxl.bin
- share/qemu/vgabios-ramfb.bin
- share/qemu/vgabios-stdvga.bin
- share/qemu/vgabios-virtio.bin
source: https://git.launchpad.net/ubuntu/+source/qemu
source-commit: 96cda2bbb2f530d08f6bda1f0dc186a0e0ce9674
source-depth: 1
source-type: git
stage-packages:
- genisoimage=9:1.1.11-3.5
- ipxe-qemu=1.21.1+git-20220113.fbbdc3926-0ubuntu2
- libfdt1=1.7.0-2build1
- libmagic-mgc=1:5.45-3build1
- libmagic1t64=1:5.45-3build1
- libnuma1=2.0.18-1ubuntu0.24.04.1
- libpixman-1-0=0.42.2-1build1
- liburing2=2.5-1build1
- libusb-1.0-0=2:1.0.27-1
- libusbredirparser1t64=0.13.0-2.1build1
- qemu-system-data=1:8.2.2+ds-0ubuntu1.16
- seabios=1.16.3-2
stage: []
shmounts:
plugin: make
prime:
- bin/setup-shmounts
source: shmounts/
stage-packages: []
stage: []
build-packages: []
spice-server:
build-packages:
- libspice-protocol-dev
- libjpeg-turbo8-dev
- python3-pyparsing
- python3-six
- meson
- ninja-build
meson-parameters:
- --prefix=/
- -Dgstreamer=no
- -Dmanual=false
- -Dlz4=false
- -Dsasl=false
- -Dopus=disabled
- -Dsmartcard=disabled
- -Dtests=false
organize:
sbin/: bin/
usr/lib: lib/
usr/local/lib/: lib/
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
# Apply patches from Ubuntu sources.
cd ../src
QUILT_PATCHES=debian/patches quilt push -a
cd ../build
craftctl default
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: meson
prime:
- lib/*/libjpeg*so*
- lib/*/libspice-server*so*
- lib/*/libpixman*so*
source: https://git.launchpad.net/ubuntu/+source/spice
source-commit: 085ca6b2bf58014ad8be571f3b601465c85ae931
source-depth: 1
source-type: git
stage-packages:
- libjpeg-turbo8=2.1.5-2ubuntu2
- libpixman-1-0=0.42.2-1build1
stage: []
squashfs-tools-ng:
organize:
usr/bin/: bin/
usr/lib/: lib/
plugin: nil
prime:
- bin/sqfs2tar
- bin/tar2sqfs
- lib/*/libsquashfs.so*
stage-packages:
- libsquashfs1=1.2.0-1
- squashfs-tools-ng=1.2.0-1
stage: []
build-packages: []
strip:
after:
- amd-ctk
- btrfs
- ceph
- dqlite
- logrotate
- lvm
- nvidia-container
- openvswitch
- ovn
- spice-server
- squashfs-tools-ng
- swtpm
- virtiofsd
- xfs
- xz
- wrappers
- xtables
- zfs-2-2
- zfs-2-3
- zfs-2-4
- zstd
- lxc
- lxcfs
- lxd
- shmounts
- nvidia-container-toolkit
override-prime: |
set -x
# XXX: remove unneeded files/directories
rm -rf "/build/lxd/prime/lib/systemd/"
rm -rf "/build/lxd/prime/lib/udev/"
rm -rf "/build/lxd/prime/usr/local/"
rm -rf "/build/lxd/prime/usr/share/"
# Strip binaries (excluding shell scripts and LXCFS)
# The "/build/lxd/prime/bin/lxd" file is ignored as that is the lxd-stophook wrapper script.
find "/build/lxd/prime"/bin -type f \
-not -path "/build/lxd/prime/bin/ceph" \
-not -path "/build/lxd/prime/bin/editor" \
-not -path "/build/lxd/prime/bin/lxc-checkconfig" \
-not -path "/build/lxd/prime/bin/lxd" \
-not -path "/build/lxd/prime/bin/nvidia-container-cli" \
-not -path "/build/lxd/prime/bin/remote-viewer" \
-not -path "/build/lxd/prime/bin/snap-query" \
-not -path "/build/lxd/prime/bin/sshfs" \
-not -path "/build/lxd/prime/bin/virt-v2v-in-place" \
-not -path "/build/lxd/prime/bin/xfs_admin" \
-not -path "/build/lxd/prime/bin/uefivars.py" \
-not -path "/build/lxd/prime/bin/lxcfs" \
-not -path "/build/lxd/prime/bin/gpu-2404-custom-wrapper" \
-exec strip --strip-all {} +
# This is the actual LXD binary.
strip --strip-all "/build/lxd/prime/sbin/lxd"
# Strip binaries not under bin/ due to being dynamically
# Strip all versions of zfs utils
for v in "/build/lxd/prime"/zfs-*; do
[ -d "${v}" ] || continue
find "${v}/" -type f -exec strip -s {} +
done
# Strip libraries (excluding python3 scripts and liblxcfs)
find "/build/lxd/prime"/lib -type f \
-not -path "/build/lxd/prime/lib/python3/*" \
-not -path "/build/lxd/prime/lib/liblxcfs.so" \
-exec strip -s {} +
# Delete empty directories
find "/build/lxd/prime/" -type d -empty -print -delete
# XXX: look for broken symlinks indicating missing/invalid prime
broken_symlinks="$(find "/build/lxd/prime/" -xtype l \
-not -path "/build/lxd/prime/lxc/config/common.conf.d/*")"
if [ -n "${broken_symlinks}" ]; then
echo "Found broken symlinks:"
echo "${broken_symlinks}"
exit 1
fi
# Fixup logrotate.conf permissions to not be group writable
chmod g-w "/build/lxd/prime/etc/logrotate.conf"
# XXX: do not keep the duplicated and often outdated CA certificates
# store from Python `certifi`. This file is not even used as the
# `python3-certifi` package providing it is patched to always use:
# `/etc/ssl/certs/ca-certificates.crt`
truncate --no-create --size=0 "/build/lxd/prime/lib/python3/dist-packages/certifi/cacert.pem"
exit 0
plugin: nil
stage-packages: []
stage: []
prime: []
build-packages: []
swtpm:
organize:
usr/bin/: bin/
usr/lib/: lib/
plugin: nil
prime:
- bin/swtpm
- lib/*/swtpm/libswtpm*so*
- lib/*/libtpms*so*
stage-packages:
- libtpms0=0.9.3-0ubuntu4.24.04.1
- swtpm=0.7.3-0ubuntu5.24.04.1
stage: []
build-packages: []
uefivars:
after:
- spice-server
- edk2
- nftables
build-packages:
- quilt
organize:
bin/uefivars: bin/uefivars.py
lib/python3.12/site-packages/: lib/python3/dist-packages/
override-build: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
# Apply patches from Ubuntu sources.
QUILT_PATCHES=debian/patches quilt push -a
craftctl default
override-prime: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
plugin: python
prime:
- bin/uefivars.py
- lib/python3/dist-packages/crc32c*
- lib/python3/dist-packages/pyuefivars*
source: https://git.launchpad.net/ubuntu/+source/python-uefivars
source-commit: f5390dfa5df2c99da84a471fe5b322020d78cb15
source-depth: 1
source-type: git
stage-packages:
- python3-crc32c=2.3-1.1build3
stage: []
virtiofsd:
organize:
usr/libexec/: bin/
override-build: |-
[ "$(uname -m)" != "x86_64" ] && exit 0
craftctl default
override-prime: |-
[ "$(uname -m)" != "x86_64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" != "x86_64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" != "x86_64" ] && exit 0
craftctl default
plugin: nil
prime:
- bin/virtiofsd*
stage-packages:
- virtiofsd=1.10.0-1
stage: []
build-packages: []
wrappers:
organize:
commands/snap-query: bin/
hooks/: snap/hooks/
wrappers/editor: bin/
wrappers/gpu-2404-custom-wrapper: bin/
wrappers/lxd-stophook: bin/lxd
wrappers/remote-viewer: bin/
wrappers/sshfs: bin/
wrappers/virt-v2v-in-place: bin/
plugin: dump
source: snapcraft/
stage-packages: []
stage: []
prime: []
build-packages: []
xfs:
organize:
sbin/: bin/
usr/lib/: lib/
usr/sbin/: bin/
plugin: nil
prime:
- bin/xfs_admin
- bin/xfs_db
- bin/xfs_growfs
- bin/xfs_repair
- bin/mkfs.xfs
- lib/*/libinih.so*
- lib/*/liburcu.so*
stage-packages:
- libicu74=74.2-1ubuntu3.1
- libinih1=55-1ubuntu2
- liburcu8t64=0.14.0-3.1build1
- xfsprogs=6.6.0-1ubuntu2.1
stage: []
build-packages: []
xtables:
organize:
usr/lib/ebtables/: lib/
usr/sbin/: bin/
plugin: nil
prime:
- bin/arptables-legacy
- bin/ebtables-legacy
- lib/libebtc.so.*
stage-packages:
- arptables=0.0.5-3.1
- ebtables=2.0.11-6build1
- libgdbm-compat4t64=1.23-5.1build1
- libgdbm6t64=1.23-5.1build1
- libperl5.38t64=5.38.2-3.2ubuntu0.2
- netbase=6.4
- perl-base=5.38.2-3.2ubuntu0.2
- perl-modules-5.38=5.38.2-3.2ubuntu0.2
- perl=5.38.2-3.2ubuntu0.2
stage: []
build-packages: []
xz:
organize:
usr/bin/: bin/
usr/lib/: lib/
usr/sbin/: bin/
override-build: |
craftctl default
# Include the lzma symlink
ln -s xz "${CRAFT_PART_INSTALL}/usr/bin/lzma"
plugin: nil
prime:
- bin/lzma
- bin/xz
- lib/*/liblzma*so*
stage-packages:
- xz-utils=5.6.1+really5.4.5-1ubuntu0.2
stage: []
build-packages: []
zfs-2-2:
autotools-configure-parameters:
- --prefix=/
- --with-config=user
build-packages:
- libblkid-dev
- libssl-dev
- uuid-dev
- zlib1g-dev
- libtirpc-dev
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
set -ex
ZFS_VER="2.2"
mv "${CRAFT_PART_INSTALL}" "${CRAFT_PART_INSTALL}.tmp"
mkdir -p "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib"
mv "${CRAFT_PART_INSTALL}.tmp/sbin/zfs" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/sbin/zpool" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/lib/"*so* "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/"
rm -Rf "${CRAFT_PART_INSTALL}.tmp"
# unused .so
rm "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/libzfsbootenv.so"*
rm "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/libzpool.so"*
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: autotools
source: https://github.com/openzfs/zfs
source-commit: 079ba86d71571bf997ff688da061d8c4aa2fd052
source-depth: 1
source-type: git
stage-packages: []
stage: []
prime: []
zfs-2-3:
autotools-configure-parameters:
- --prefix=/
- --with-config=user
build-packages:
- libblkid-dev
- libssl-dev
- uuid-dev
- zlib1g-dev
- libtirpc-dev
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
set -ex
ZFS_VER="2.3"
mv "${CRAFT_PART_INSTALL}" "${CRAFT_PART_INSTALL}.tmp"
mkdir -p "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib"
mv "${CRAFT_PART_INSTALL}.tmp/sbin/zfs" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/sbin/zpool" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/lib/"*so* "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/"
rm -Rf "${CRAFT_PART_INSTALL}.tmp"
# unused .so
rm "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/libzfsbootenv.so"*
rm "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/libzpool.so"*
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: autotools
source: https://github.com/openzfs/zfs
source-commit: c840612ee1af993b835d3b3e59baee631970a781
source-depth: 1
source-type: git
stage-packages: []
stage: []
prime: []
zfs-2-4:
autotools-configure-parameters:
- --prefix=/
- --with-config=user
build-packages:
- libblkid-dev
- libssl-dev
- uuid-dev
- zlib1g-dev
- libtirpc-dev
override-build: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
set -ex
ZFS_VER="2.4"
mv "${CRAFT_PART_INSTALL}" "${CRAFT_PART_INSTALL}.tmp"
mkdir -p "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib"
mv "${CRAFT_PART_INSTALL}.tmp/sbin/zfs" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/sbin/zpool" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/bin/"
mv "${CRAFT_PART_INSTALL}.tmp/lib/"*so* "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/"
rm -Rf "${CRAFT_PART_INSTALL}.tmp"
# unused .so
rm "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/libzfsbootenv.so"*
rm "${CRAFT_PART_INSTALL}/zfs-${ZFS_VER}/lib/libzpool.so"*
override-prime: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-pull: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
override-stage: |-
[ "$(uname -m)" = "armv7l" ] && exit 0
[ "$(uname -m)" = "riscv64" ] && exit 0
craftctl default
plugin: autotools
source: https://github.com/openzfs/zfs
source-commit: 1c702dda346a59e05cfd3029569bbb1d5d91c54b
source-depth: 1
source-type: git
stage-packages: []
stage: []
prime: []
zstd:
organize:
usr/bin/: bin/
plugin: nil
prime:
- bin/pzstd
- bin/zstd
stage-packages:
- zstd=1.5.5+dfsg2-2build1.1
stage: []
build-packages: []
architectures:
- amd64
image-info:
build-request-id: lp-112108928
build-request-timestamp: '2026-05-06T15:15:10Z'
build_url: https://launchpad.net/~lxd-snap/lxd/+snap/lxd-latest-candidate/+build/3142425
build-packages: []
build-snaps: []
primed-stage-packages:
- acl=2.3.2-1build1.1
- arptables=0.0.5-3.1
- attr=1:2.5.2-1build1.1
- btrfs-progs=6.6.3-1.1build2
- dmeventd=2:1.02.185-3ubuntu3.2
- dnsmasq-base=2.90-2ubuntu0.1
- ebtables=2.0.11-6build1
- fuse3=3.14.0-5build1
- gdisk=1.0.10-1build1
- glibc-tools=0.0~git3.23fd2b9-0ubuntu1
- iw=6.7-1build1
- libaio1t64=0.3.113-6build1.1
- libdevmapper-event1.02.1=2:1.02.185-3ubuntu3.2
- libfuse3-3=3.14.0-5build1
- libinih1=55-1ubuntu2
- libjansson4=2.14-2build2
- liblvm2cmd2.03=2.03.16-3ubuntu3.2
- libnftables1=1.0.9-1ubuntu0.1
- libnvme1t64=1.8-3ubuntu1
- libsquashfs1=1.2.0-1
- libtpms0=0.9.3-0ubuntu4.24.04.1
- liburcu8t64=0.14.0-3.1build1
- libuv1t64=1.48.0-1.1build1
- logrotate=3.21.0-2build1
- lvm2=2.03.16-3ubuntu3.2
- nftables=1.0.9-1ubuntu0.1
- nvme-cli=2.8-1ubuntu0.1
- pci.ids=0.0~2024.03.31-1ubuntu0.1
- pigz=2.8-1
- rsync=3.2.7-1ubuntu1.2
- sqlite3=3.45.1-1ubuntu2.5
- squashfs-tools-ng=1.2.0-1
- swtpm=0.7.3-0ubuntu5.24.04.1
- thin-provisioning-tools=0.9.0-2ubuntu5.1
- usb.ids=2024.03.18-1
- xdelta3=3.0.11-dfsg-1.2
- xfsprogs=6.6.0-1ubuntu2.1
- xz-utils=5.6.1+really5.4.5-1ubuntu0.2
- zstd=1.5.5+dfsg2-2build1.1