403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /snap/lxd/37006/snap/snapcraft.yaml
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
    command-chain:
    - bin/gpu-2404-custom-wrapper
    daemon: simple
    plugs:
    - lxd-support
    - network-bind
    - system-observe
    reload-command: commands/daemon.reload
    restart-condition: on-failure
    slots:
    - lxd
    sockets:
      unix:
        listen-stream: $SNAP_COMMON/lxd/unix.socket
        socket-mode: 432
    stop-command: commands/daemon.stop
    stop-timeout: 600s
  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
    daemon: simple
    plugs:
    - lxd-support
    - network-bind
    - system-observe
    restart-condition: on-failure
    sockets:
      unix:
        listen-stream: $SNAP_COMMON/lxd-user/unix.socket
        socket-mode: 432
    stop-timeout: 600s
assumes:
- snapd2.39
base: core24
confinement: strict
contact: lxd@lists.canonical.com
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)
grade: stable
hooks:
  configure:
    plugs:
    - lxd-support
    - network
    - system-observe
  connect-plug-ceph-conf:
    plugs:
    - lxd-support
    - system-observe
  connect-plug-ovn-certificates:
    plugs:
    - lxd-support
    - system-observe
  connect-plug-ovn-chassis:
    plugs:
    - lxd-support
    - system-observe
  connect-plug-qemu-external:
    plugs:
    - lxd-support
    - system-observe
  disconnect-plug-ceph-conf:
    plugs:
    - lxd-support
    - system-observe
  disconnect-plug-ovn-certificates:
    plugs:
    - lxd-support
    - system-observe
  disconnect-plug-ovn-chassis:
    plugs:
    - lxd-support
    - system-observe
  disconnect-plug-qemu-external:
    plugs:
    - lxd-support
    - system-observe
  remove:
    plugs:
    - lxd-support
    - system-observe
issues: https://github.com/canonical/lxd/issues
layout:
  /usr/share/drirc.d:
    symlink: $SNAP/gpu-2404/drirc.d
  /usr/share/libdrm:
    bind: $SNAP/gpu-2404/libdrm
license: AGPL-3.0-only
name: lxd
parts:
  apparmor:
    organize:
      sbin/: bin/
    plugin: nil
    prime:
    - bin/apparmor_parser
    stage-packages:
    - apparmor
  btrfs:
    organize:
      sbin/: bin/
    plugin: nil
    prime:
    - bin/btrfs
    - bin/btrfstune
    - bin/mkfs.btrfs
    stage-packages:
    - btrfs-progs
  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:
    - to armhf: []
    - else:
      - ceph-common
      - libsnappy1v5
  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
    - libuv1t64
    - sqlite3
  edk2:
    build-packages:
    - to amd64:
      - g++
      - acpica-tools
      - nasm
      - uuid-dev
    - to arm64:
      - g++
      - acpica-tools
      - nasm
      - uuid-dev
    override-build: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
      set -ex

      # Apply patches
      patch -p1 < "${CRAFT_PROJECT_DIR}/patches/edk2-0001-force-DUID-LLT.patch"
      cp "${CRAFT_PROJECT_DIR}/patches/edk2-0002-logo.bmp" MdeModulePkg/Logo/Logo.bmp
      patch -p1 < "${CRAFT_PROJECT_DIR}/patches/edk2-0003-boot-delay.patch"
      patch -p1 < "${CRAFT_PROJECT_DIR}/patches/edk2-0004-gcc-errors.patch"
      patch --binary -p1 < "${CRAFT_PROJECT_DIR}/patches/edk2-0005-disable-dynamic-mmio-winsize.patch"
      patch --binary -p1 < "${CRAFT_PROJECT_DIR}/patches/edk2-0006-disable-EFI-memory-attributes-protocol.patch"
      patch --binary -p1 < "${CRAFT_PROJECT_DIR}/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 < "${CRAFT_PROJECT_DIR}/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
  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
  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:
    - to s390x:
      - libatomic1
  logrotate:
    organize:
      usr/bin/: bin/
      usr/lib/: lib/
      usr/sbin/: bin/
    plugin: nil
    prime:
    - bin/logrotate
    stage:
    - bin/logrotate
    stage-packages:
    - logrotate
  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
    - lvm2
    - thin-provisioning-tools
  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/${CRAFT_ARCH_TRIPLET_BUILD_FOR}
    - -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
  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" < "${CRAFT_PROJECT_DIR}/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:
    - fuse3
    - glibc-tools
  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${CRAFT_STAGE}/include/ -I${CRAFT_STAGE}/usr/local/include/"
      export CGO_LDFLAGS="-L${CRAFT_STAGE}/lib/ -L${CRAFT_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
    - attr
    - dnsmasq-base
    - gdisk
    - iw
    - lshw
    - pci.ids
    - pigz
    - rsync
    - usb.ids
    - xdelta3
  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
  nftables:
    organize:
      usr/lib/: lib/
      usr/sbin/: bin/
    plugin: nil
    prime:
    - bin/nft
    - lib/*/libjansson*so*
    - lib/*/libnftables*so*
    stage-packages:
    - nftables
  nvidia-container:
    build-environment:
    - GIT_TAG: 1.18.0
    build-packages:
    - to amd64:
      - bmake
      - curl
      - libelf-dev
      - libseccomp-dev
      - lsb-release
      - libtirpc-dev
    - to arm64:
      - 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 < "${CRAFT_PROJECT_DIR}/patches/nvidia-0001-Fix-for-22.04-build.patch"
      patch -p1 < "${CRAFT_PROJECT_DIR}/patches/nvidia-0002-pre-load-libdl.patch"

      mkdir -p "${CRAFT_PART_INSTALL}/bin/"
      cp "${CRAFT_PROJECT_DIR}/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
  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
  nvme:
    organize:
      usr/lib/: lib/
      usr/sbin/: bin/
    plugin: nil
    prime:
    - bin/nvme
    - lib/*/libnvme*
    stage-packages:
    - nvme-cli
  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:
    - to armhf: []
    - else:
      - openvswitch-common
      - openvswitch-switch
  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:
    - to armhf: []
    - else:
      - ovn-common
  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:
    - to armhf: []
    - else:
      - 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 < "${CRAFT_PROJECT_DIR}/patches/qemu-0001-kvm-Allow-kvm_arch_get-put_registers-to-accept-Error.patch"
      patch -p1 < "${CRAFT_PROJECT_DIR}/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:
    - to armhf: []
    - else:
      - genisoimage
      - ipxe-qemu
      - libfdt1
      - libmagic1t64
      - libnuma1
      - libpixman-1-0
      - libusb-1.0-0
      - libusbredirparser1t64
      - liburing2
      - seabios
      - qemu-system-data
  qemu-ovmf-secureboot:
    after:
    - edk2
    - qemu
    build-packages:
    - to amd64:
      - dosfstools
      - mtools
      - python3-pexpect
      - xorriso
    - to arm64:
      - dosfstools
      - mtools
      - python3-pexpect
      - xorriso
    override-build: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0

      export ARCH="$(basename "$(readlink -f "${CRAFT_STAGE}"/lib/*-linux-gnu*/)")"
      export LD_LIBRARY_PATH="${CRAFT_STAGE}/lib:${CRAFT_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 "${CRAFT_STAGE}/share/qemu/OVMF_CODE.4MB.fd" \
        -V "${CRAFT_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
  shmounts:
    plugin: make
    prime:
    - bin/setup-shmounts
    source: shmounts/
  spice-server:
    build-packages:
    - to armhf: []
    - else:
      - 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:
    - to armhf: []
    - else:
      - libjpeg-turbo8
      - libpixman-1-0
  squashfs-tools-ng:
    organize:
      usr/bin/: bin/
      usr/lib/: lib/
    plugin: nil
    prime:
    - bin/sqfs2tar
    - bin/tar2sqfs
    - lib/*/libsquashfs.so*
    stage-packages:
    - squashfs-tools-ng
  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 "${CRAFT_PRIME}/lib/systemd/"
      rm -rf "${CRAFT_PRIME}/lib/udev/"
      rm -rf "${CRAFT_PRIME}/usr/local/"
      rm -rf "${CRAFT_PRIME}/usr/share/"

      # Strip binaries (excluding shell scripts and LXCFS)
      # The "${CRAFT_PRIME}/bin/lxd" file is ignored as that is the lxd-stophook wrapper script.
      find "${CRAFT_PRIME}"/bin -type f \
        -not -path "${CRAFT_PRIME}/bin/ceph" \
        -not -path "${CRAFT_PRIME}/bin/editor" \
        -not -path "${CRAFT_PRIME}/bin/lxc-checkconfig" \
        -not -path "${CRAFT_PRIME}/bin/lxd" \
        -not -path "${CRAFT_PRIME}/bin/nvidia-container-cli" \
        -not -path "${CRAFT_PRIME}/bin/remote-viewer" \
        -not -path "${CRAFT_PRIME}/bin/snap-query" \
        -not -path "${CRAFT_PRIME}/bin/sshfs" \
        -not -path "${CRAFT_PRIME}/bin/virt-v2v-in-place" \
        -not -path "${CRAFT_PRIME}/bin/xfs_admin" \
        -not -path "${CRAFT_PRIME}/bin/uefivars.py" \
        -not -path "${CRAFT_PRIME}/bin/lxcfs" \
        -not -path "${CRAFT_PRIME}/bin/gpu-2404-custom-wrapper" \
        -exec strip --strip-all {} +

      # This is the actual LXD binary.
      strip --strip-all "${CRAFT_PRIME}/sbin/lxd"

      # Strip binaries not under bin/ due to being dynamically

      # Strip all versions of zfs utils
      for v in "${CRAFT_PRIME}"/zfs-*; do
        [ -d "${v}" ] || continue
        find "${v}/" -type f -exec strip -s {} +
      done

      # Strip libraries (excluding python3 scripts and liblxcfs)
      find "${CRAFT_PRIME}"/lib -type f \
        -not -path "${CRAFT_PRIME}/lib/python3/*" \
        -not -path "${CRAFT_PRIME}/lib/liblxcfs.so" \
        -exec strip -s {} +

      # Delete empty directories
      find "${CRAFT_PRIME}/" -type d -empty -print -delete

      # XXX: look for broken symlinks indicating missing/invalid prime
      broken_symlinks="$(find "${CRAFT_PRIME}/" -xtype l \
                           -not -path "${CRAFT_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 "${CRAFT_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 "${CRAFT_PRIME}/lib/python3/dist-packages/certifi/cacert.pem"

      exit 0
    plugin: nil
  swtpm:
    organize:
      usr/bin/: bin/
      usr/lib/: lib/
    plugin: nil
    prime:
    - bin/swtpm
    - lib/*/swtpm/libswtpm*so*
    - lib/*/libtpms*so*
    stage-packages:
    - swtpm
  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 < "${CRAFT_PROJECT_DIR}/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:
    - to amd64:
      - python3-crc32c
    - to arm64:
      - python3-crc32c
  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:
    - to amd64:
      - virtiofsd
  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/
  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:
    - xfsprogs
  xtables:
    organize:
      usr/lib/ebtables/: lib/
      usr/sbin/: bin/
    plugin: nil
    prime:
    - bin/arptables-legacy
    - bin/ebtables-legacy
    - lib/libebtc.so.*
    stage-packages:
    - arptables
    - ebtables
    - netbase
  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
  zfs-2-1:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - to armhf: []
    - else:
      - 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
  zfs-2-2:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - to armhf: []
    - else:
      - 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
  zfs-2-3:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - to armhf: []
    - else:
      - 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
  zstd:
    organize:
      usr/bin/: bin/
    plugin: nil
    prime:
    - bin/pzstd
    - bin/zstd
    stage-packages:
    - zstd
plugs:
  ceph-conf:
    interface: content
    target: $SNAP_DATA/microceph
  gpu-2404:
    interface: content
    target: $SNAP/gpu-2404
  ovn-certificates:
    interface: content
    target: $SNAP_DATA/microovn/certificates
  ovn-chassis:
    interface: content
    target: $SNAP_DATA/microovn/chassis
  qemu-external:
    content: qemu-external-binaries
    interface: content
    target: $SNAP/external/qemu
source-code: https://github.com/canonical/lxd
summary: LXD - container and VM manager
title: LXD
version: 6.6-a89d075
website: https://ubuntu.com/lxd

Youez - 2016 - github.com/yon3zu
LinuXploit