| Server IP : 103.88.176.108 / Your IP : 216.73.216.211 Web Server : Apache/2.4.41 (Ubuntu) System : Linux webserver 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.18 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /snap/lxd/37006/snap/ |
Upload File : |
snapcraft-version: 8.13.1
snapcraft-started-at: '2025-12-04T16:36:43.563952Z'
snapcraft-os-release-id: ubuntu
snapcraft-os-release-version-id: '24.04'
name: lxd
version: 6.6-a89d075
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.pidfd: Start per-container process tracking [default=true]
- 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]
- minio.path: Path to the directory containing the minio and mc binaries to use with LXD [default=""]
- 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]
- ui.enable: Enable the web interface [default=true]
- 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:
apparmor:
organize:
sbin/: bin/
plugin: nil
prime:
- bin/apparmor_parser
stage-packages:
- apparmor=4.0.1really4.0.1-0ubuntu0.24.04.4
- debconf=1.5.86ubuntu1
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.1-0ubuntu0.24.04.2
- libaio1t64=0.3.113-6build1.1
- libbabeltrace1=1.5.11-3build3
- libboost-context1.83.0=1.83.0-2.1ubuntu3.1
- libboost-filesystem1.83.0=1.83.0-2.1ubuntu3.1
- libboost-iostreams1.83.0=1.83.0-2.1ubuntu3.1
- libboost-program-options1.83.0=1.83.0-2.1ubuntu3.1
- libboost-thread1.83.0=1.83.0-2.1ubuntu3.1
- libboost-url1.83.0=1.83.0-2.1ubuntu3.1
- libcephfs2=19.2.1-0ubuntu0.24.04.2
- libcurl3t64-gnutls=8.5.0-2ubuntu10.6
- 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.7+dfsg-1~exp1ubuntu8.2
- 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.2
- 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.1-0ubuntu0.24.04.2
- libradosstriper1=19.2.1-0ubuntu0.24.04.2
- librbd1=19.2.1-0ubuntu0.24.04.2
- 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.2
- libtcmalloc-minimal4t64=2.15-3build1
- libunwind8=1.6.2-3build1.1
- python3-ceph-argparse=19.2.1-0ubuntu0.24.04.2
- python3-ceph-common=19.2.1-0ubuntu0.24.04.2
- python3-cephfs=19.2.1-0ubuntu0.24.04.2
- 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.1-0ubuntu0.24.04.2
- python3-rbd=19.2.1-0ubuntu0.24.04.2
- python3-requests=2.31.0+dfsg-1ubuntu1.1
- python3-urllib3=2.0.7-1ubuntu0.2
- 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: 9a3a9a53110ef3d8357ecfedc4baecfb5fb878c8
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:
build-packages:
- g++
- acpica-tools
- nasm
- uuid-dev
override-build: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
set -ex
# 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"
patch -p1 < "/build/lxd/patches/edk2-0004-gcc-errors.patch"
patch --binary -p1 < "/build/lxd/patches/edk2-0005-disable-dynamic-mmio-winsize.patch"
patch --binary -p1 < "/build/lxd/patches/edk2-0006-disable-EFI-memory-attributes-protocol.patch"
patch --binary -p1 < "/build/lxd/patches/edk2-0007-Disable-the-Shell-when-SecureBoot-is-enabled.patch"
# revert "ArmVirtPkg: make EFI_LOADER_DATA non-executable" as it breaks almost everything
patch --binary -p1 < "/build/lxd/patches/edk2-0008-Revert-ArmVirtPkg-make-EFI_LOADER_DATA-non-execurable.patch"
# Arch-specific logic
ARCH="X64"
PKG="OvmfPkg/OvmfPkgX64.dsc"
FV_CODE="OVMF_CODE"
FV_VARS="OVMF_VARS"
if [ "$(uname -m)" = "aarch64" ]; then
ARCH="AARCH64"
PKG="ArmVirtPkg/ArmVirtQemu.dsc"
FV_CODE="QEMU_EFI"
FV_VARS="QEMU_VARS"
fi
# Run in a bash sub-shell as edksetup.sh requires it
build_edk2() {
TARGET_CODE="$1"
shift
TARGET_VARS="$1"
shift
TARGET_BUILD_TYPE="$1"
shift
set -ex
(
cat << EOF
. ./edksetup.sh
make -C BaseTools ARCH="${ARCH}"
build -a "${ARCH}" -t GCC5 -b "${TARGET_BUILD_TYPE}" -p "${PKG}" \
-DSMM_REQUIRE=FALSE \
-DSECURE_BOOT_ENABLE=TRUE \
-DNETWORK_IP4_ENABLE=TRUE \
-DNETWORK_IP6_ENABLE=TRUE \
-DNETWORK_TLS_ENABLE=TRUE \
-DNETWORK_HTTP_BOOT_ENABLE=TRUE \
-DTPM2_ENABLE=TRUE \
-DTPM2_CONFIG_ENABLE=TRUE \
$@
EOF
) | bash -e
cp Build/*/${TARGET_BUILD_TYPE}*/FV/${FV_CODE}.fd "${TARGET_CODE}"
cp Build/*/${TARGET_BUILD_TYPE}*/FV/${FV_VARS}.fd "${TARGET_VARS}"
if [ "$(uname -m)" = "aarch64" ]; then
truncate -s 64m "${TARGET_CODE}"
truncate -s 64m "${TARGET_VARS}"
fi
}
# Create the firmware path
mkdir -p "${CRAFT_PART_INSTALL}/share/qemu/"
# Primary firmware (4MB)
build_edk2 \
"${CRAFT_PART_INSTALL}/share/qemu/OVMF_CODE.4MB.fd" \
"${CRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.4MB.fd" \
RELEASE \
-DFD_SIZE_4MB
# Debug firmware (4MB, debug mode)
# Can be enabled with the LXD boot.debug_edk2 instance option
# Set DEBUG_VERBOSE flag
if [ "$(uname -m)" = "aarch64" ]; then
sed -i "s#DEBUG_PRINT_ERROR_LEVEL = 0x8000004F#DEBUG_PRINT_ERROR_LEVEL = 0x8040004F#g" ArmVirtPkg/ArmVirt.dsc.inc
fi
if [ "$(uname -m)" = "x86_64" ]; then
sed -i "s#PcdDebugPrintErrorLevel|0x8000004F#PcdDebugPrintErrorLevel|0x8040004F#g" "${PKG}"
fi
build_edk2 \
"${CRAFT_PART_INSTALL}/share/qemu/OVMF_CODE.4MB.debug.fd" \
"${CRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.4MB.debug.fd" \
DEBUG \
-DFD_SIZE_4MB
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
set -ex
# Fix submodule sources
# see https://github.com/tianocore/edk2/commit/95d8a1c255cfb8e063d679930d08ca6426eb5701
sed -i "s#https://github.com/Zeex/subhook.git#https://github.com/tianocore/edk2-subhook.git#g" .gitmodules
# Pull submodules after switching to source-commit
git submodule update --init --recursive
override-stage: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
craftctl default
plugin: nil
prime:
- share/qemu/*
source: https://github.com/tianocore/edk2
source-commit: 8736b8fdca85e02933cdb0a13309de14c9799ece
source-depth: 1
source-submodules: []
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:
after:
- apparmor
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: 9e4e69ed1cb93159b0da99dad8d320b795887d07
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
- -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: 16503df8e814d29b348e61abebc4f89b2e20f440
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.25/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"
# 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: 49569b65625b9c53dc5dce885ca2cb1390fd6481
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-1build1
- lsb-base=11.6
- lshw=02.19.git.2021.06.19.996aaad9c7-2build3
- 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: 69fa2699fe6a91754cc825bdca27d64bc6e39b2e
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-1build1
- nftables=1.0.9-1build1
stage: []
build-packages: []
nvidia-container:
build-environment:
- GIT_TAG: 1.18.0
build-packages:
- bmake
- curl
- libelf-dev
- libseccomp-dev
- lsb-release
- libtirpc-dev
build-snaps:
- go/1.25/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: 889a3bb5408c195ed7897ba2cb8341c7d249672f
source-depth: 1
source-type: git
stage-packages: []
stage: []
nvidia-container-toolkit:
build-snaps:
- go/1.25/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: f8daa5e26de9fd7eb79259040b6dd5a52060048c
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.3
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/*.ovsschema
stage-packages:
- adduser=3.137ubuntu1
- libnuma1=2.0.18-1build1
- libunbound8=1.19.2-1ubuntu3.7
- libxdp1=1.4.2-1ubuntu4
- openvswitch-common=3.3.4-0ubuntu0.24.04.1
- openvswitch-switch=3.3.4-0ubuntu0.24.04.1
- python3-netifaces=0.11.0-2build3
- python3-openvswitch=3.3.4-0ubuntu0.24.04.1
- python3-sortedcontainers=2.4.0-2
- uuid-runtime=2.39.3-9ubuntu6.3
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-pvrdma
- --disable-qed
- --disable-sdl
- --disable-slirp
- --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-tcg
- --enable-tools
- --enable-vhost-crypto
- --enable-vhost-kernel
- --enable-vhost-net
- --enable-vhost-user
- --enable-virtfs
- --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
- 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/s390-netboot.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
# Apply custom patches
# These patches enable more accurate error message returned in case of CPU registers mismatches.
# This is backported from QEMU v9.2.2.
patch -p1 < "/build/lxd/patches/qemu-0001-kvm-Allow-kvm_arch_get-put_registers-to-accept-Error.patch"
patch -p1 < "/build/lxd/patches/qemu-0002-target-i386-kvm-Report-which-action-failed-in-kvm_ar.patch"
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
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*
- bin/virtfs-proxy-helper*
- 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/s390-netboot.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: bc0011afab01de8c41ec80fc8c24dd33fb30cd90
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-1build1
- 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.10
- seabios=1.16.3-2
stage: []
qemu-ovmf-secureboot:
after:
- edk2
- qemu
build-packages:
- dosfstools
- mtools
- python3-pexpect
- xorriso
override-build: |-
[ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
export ARCH="$(basename "$(readlink -f "/build/lxd/stage"/lib/*-linux-gnu*/)")"
export LD_LIBRARY_PATH="/build/lxd/stage/lib:/build/lxd/stage/lib/${ARCH}"
set -ex
FIRMWARE="OVMF"
if [ "$(uname -m)" = "aarch64" ]; then
FIRMWARE="AAVMF"
fi
mkdir -p "${CRAFT_PART_INSTALL}/share/qemu/"
# 4MB variant
./edk2-vars-generator -f "${FIRMWARE}" \
-e ../../edk2/build/Build/*/RELEASE*/*/EnrollDefaultKeys.efi \
-s ../../edk2/build/Build/*/RELEASE*/*/Shell.efi \
-c "/build/lxd/stage/share/qemu/OVMF_CODE.4MB.fd" \
-V "/build/lxd/stage/share/qemu/OVMF_VARS.4MB.fd" \
-C "$(cat ubuntu-sb.crt)" \
-o "${CRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.4MB.ms.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: edk2-vars-generator
stage-packages: []
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:
- btrfs
- ceph
- dqlite
- logrotate
- lvm
- nvidia-container
- openvswitch
- ovn
- qemu-ovmf-secureboot
- spice-server
- squashfs-tools-ng
- swtpm
- virtiofsd
- xfs
- xz
- wrappers
- xtables
- zfs-2-1
- zfs-2-2
- zfs-2-3
- 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
- qemu-ovmf-secureboot
- nftables
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
# XXX: taken from: https://git.launchpad.net/ubuntu/+source/python-uefivars/plain/debian/patches/Revert-Use-google-crc32c-instead-of-crc32c.patch?h=ubuntu/plucky
patch -p1 < "/build/lxd/patches/uefivars-Revert-Use-google-crc32c-instead-of-crc32c.patch"
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://github.com/awslabs/python-uefivars
source-commit: ec1eab1717c65ea36ca7160c96fe0e10e071fb66
source-depth: 1
source-type: git
stage-packages:
- python3-crc32c=2.3-1.1build3
stage: []
build-packages: []
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-1:
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.1"
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: a7186651d3306debca6b4f72797239eea61db36c
source-depth: 1
source-type: git
stage-packages: []
stage: []
prime: []
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: 3e4a3e161c00273303cd9fa9e0dc09ead3499a8a
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: 34f96a15c73eab27dd6ad17bb5f1263bf26e37d7
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-103906328
build-request-timestamp: '2025-12-04T16:15:13Z'
build_url: https://launchpad.net/~lxd-snap/lxd/+snap/lxd-latest-candidate/+build/2980613
build-packages: []
build-snaps: []
primed-stage-packages:
- acl=2.3.2-1build1.1
- apparmor=4.0.1really4.0.1-0ubuntu0.24.04.4
- 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-1build1
- 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-1build1
- 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