apps:
  activate:
    command: commands/daemon.activate
    daemon: oneshot
    plugs:
    - lxd-support
    - system-observe
  benchmark:
    command: commands/lxd-benchmark
    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
    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: etc/bash_completion.d/snap.lxd.lxc
    plugs:
    - lxd-support
    - system-observe
  lxc-to-lxd:
    command: commands/lxc-to-lxd
    plugs:
    - lxd-support
    - system-observe
  lxd:
    command: commands/lxd
    plugs:
    - lxd-support
    - system-observe
  migrate:
    command: commands/lxd-migrate
    plugs:
    - lxd-support
    - system-observe
assumes:
- snapd2.39
base: core20
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>...]):

    - ceph.builtin: Use snap-specific Ceph configuration [default=false]
    - ceph.external: Use the system's ceph tools (ignores ceph.builtin) [default=false]
    - criu.enable: Enable experimental live-migration support [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.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]
    - lvm.external: Use the system's LVM tools [default=false]
    - lxcfs.pidfd: Start per-container process tracking [default=false]
    - lxcfs.loadavg: Start tracking per-container load average [default=false]
    - lxcfs.cfs: Consider CPU shares for CPU usage [default=false]
    - openvswitch.builtin: Run a snap-specific OVS daemon [default=false]
    - openvswitch.external: Use the system's OVS tools (ignores openvswitch.builtin) [default=false]
    - shiftfs.enable: Enable shiftfs support [default=auto]
grade: stable
hooks:
  configure:
    plugs:
    - lxd-support
    - network
    - system-observe
  remove:
    plugs:
    - lxd-support
    - system-observe
issues: https://github.com/canonical/lxd/issues
name: lxd
parts:
  btrfs:
    organize:
      sbin/: bin/
    plugin: nil
    prime:
    - bin/btrfs
    - bin/btrfstune
    - bin/mkfs.btrfs
    source: snapcraft/empty
    stage-packages:
    - btrfs-progs
  ceph:
    organize:
      usr/bin/: bin/
      usr/lib/: lib/
    plugin: nil
    prime:
    - bin/ceph
    - bin/rbd
    - lib/*/ceph
    - lib/*/libatomic.so*
    - lib/*/libboost_iostreams.so*
    - lib/*/libboost_program_options.so*
    - lib/*/libboost_thread.so*
    - lib/*/libcephfs*
    - lib/*/libibverbs.so*
    - lib/*/librados.so*
    - lib/*/librbd.so*
    - lib/*/librdmacm.so*
    - lib/*/libsnappy.so*
    - lib/python3
    source: snapcraft/empty
    stage-packages:
    - ceph-common
  criu:
    build-packages:
    - asciidoc
    - libcap-dev
    - libnet1-dev
    - libnl-3-dev
    - libprotobuf-c-dev
    - libprotobuf-dev
    - protobuf-c-compiler
    - protobuf-compiler
    - xmlto
    organize:
      usr/lib/: lib/
    override-build: |
      set -ex

      [ "$(uname -m)" != "x86_64" ] && \
        [ "$(uname -m)" != "armv7l" ] && \
        [ "$(uname -m)" != "aarch64" ] && \
        [ "$(uname -m)" != "s390x" ] && \
        [ "$(uname -m)" != "ppc64le" ] && exit 0

      make
      mkdir -p "${SNAPCRAFT_PART_INSTALL}/criu/"
      cp criu/criu "${SNAPCRAFT_PART_INSTALL}/criu/"
    plugin: nil
    prime:
    - criu/*
    - lib/*/libnet*
    - lib/*/libproto*
    source: https://github.com/checkpoint-restore/criu
    source-depth: 1
    source-tag: v3.17.1
    source-type: git
    stage-packages:
    - libnet1
    - libprotobuf-c1
  dqlite:
    after:
    - raft
    - sqlite
    autotools-configure-parameters:
    - --prefix=
    build-packages:
    - libuv1-dev
    organize:
      usr/lib/: lib/
    plugin: autotools
    prime:
    - lib/libdqlite*so*
    - lib/*/libuv*
    source: https://github.com/canonical/dqlite
    source-commit: 50ee9af350b2fb4e79f9eb58db22c8a0927138de
    source-depth: 1
    source-type: git
    stage-packages:
    - libuv1
  edk2:
    after:
    - nasm
    build-packages:
    - on amd64:
      - acpica-tools
      - nasm
      - uuid-dev
    - on arm64:
      - acpica-tools
      - nasm
      - uuid-dev
    override-build: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0

      # Apply patches
      patch -p1 < "${SNAPCRAFT_PROJECT_DIR}/patches/edk2-0001-force-DUID-LLT.patch"
      cp "${SNAPCRAFT_PROJECT_DIR}/patches/edk2-0002-logo.bmp" MdeModulePkg/Logo/Logo.bmp
      patch -p1 < "${SNAPCRAFT_PROJECT_DIR}/patches/edk2-0003-boot-delay.patch"
      patch -p1 < "${SNAPCRAFT_PROJECT_DIR}/patches/edk2-0004-gcc-errors.patch"

      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
      set -ex
      (
      cat << EOF
          . ./edksetup.sh
          make -C BaseTools ARCH=${ARCH}
          build -a ${ARCH} -t GCC49 -b RELEASE -p ${PKG} \
            -DSECURE_BOOT_ENABLE=TRUE \
            -DNETWORK_IP4_ENABLE=TRUE \
            -DNETWORK_IP6_ENABLE=TRUE \
            -DNETWORK_TLS_ENABLE=TRUE \
            -DNETWORK_HTTP_BOOT_ENABLE=TRUE \
            -DFD_SIZE_2MB \
            -DTPM_ENABLE=TRUE \
            -DTPM_CONFIG_ENABLE=TRUE \
            -DTPM2_ENABLE=TRUE \
            -DTPM2_CONFIG_ENABLE=TRUE
      EOF
      ) | bash -e

      mkdir -p "${SNAPCRAFT_PART_INSTALL}/share/qemu/"
      cp Build/*/*/FV/${FV_CODE}.fd "${SNAPCRAFT_PART_INSTALL}/share/qemu/OVMF_CODE.fd"
      cp Build/*/*/FV/${FV_VARS}.fd "${SNAPCRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.fd"

      if [ "$(uname -m)" = "aarch64" ]; then
          truncate -s 64m "${SNAPCRAFT_PART_INSTALL}/share/qemu/OVMF_CODE.fd"
          truncate -s 64m "${SNAPCRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.fd"
      fi
    override-pull: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0
      set -ex
      git clone https://github.com/tianocore/edk2 . -b edk2-stable202208

      # Pull submodules after switching to source-commit
      git submodule update --init --recursive

      git config user.email "noreply@lists.canonical.com"
      git config user.name "LXD snap builder"
    plugin: nil
    prime:
    - share/qemu/*
    source: https://github.com/tianocore/edk2
    source-depth: 1
    source-tag: IRRELEVANT
    source-type: git
  libmnl:
    autotools-configure-parameters:
    - --prefix=
    organize:
      usr/lib/: lib/
    plugin: autotools
    prime:
    - lib/libmnl*so*
    source: https://www.netfilter.org/projects/libmnl/files/libmnl-1.0.5.tar.bz2
    source-checksum: sha256/274b9b919ef3152bfb3da3a13c950dd60d6e2bcd54230ffeca298d03b40d0525
  libnftnl:
    after:
    - libmnl
    autotools-configure-parameters:
    - --prefix=
    organize:
      usr/lib/: lib/
    override-build: |
      snapcraftctl build

      sed -i "s# /lib/libmnl.la# ${SNAPCRAFT_STAGE}/lib/libmnl.la#g" "${SNAPCRAFT_PART_INSTALL}/lib/libnftnl.la"
    plugin: autotools
    prime:
    - lib/libnftnl*so*
    source: https://www.netfilter.org/projects/libnftnl/files/libnftnl-1.2.4.tar.bz2
    source-checksum: sha256/c0fe233be4cdfd703e7d5977ef8eb63fcbf1d0052b6044e1b23d47ca3562477f
  libseccomp:
    autotools-configure-parameters:
    - --prefix=
    build-packages:
    - gperf
    organize:
      usr/lib/: lib/
    plugin: autotools
    prime:
    - lib/libseccomp*so*
    source: https://github.com/seccomp/libseccomp
    source-depth: 1
    source-tag: v2.5.4
    source-type: git
  liburing:
    autotools-configure-parameters:
    - --prefix=
    organize:
      usr/lib/: lib/
    override-build: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && [ "$(uname -m)" != "ppc64le" ] && [ "$(uname -m)" != "s390x" ] && exit 0
      snapcraftctl build
    plugin: autotools
    prime:
    - lib/liburing*so*
    source: https://github.com/axboe/liburing
    source-depth: 1
    source-tag: liburing-2.3
    source-type: git
  libusb:
    autotools-configure-parameters:
    - --prefix=
    organize:
      usr/lib/: lib/
    plugin: autotools
    prime:
    - lib/libusb*so*
    source: https://github.com/libusb/libusb
    source-depth: 1
    source-tag: v1.0.26
    source-type: git
  logrotate:
    organize:
      usr/bin/: bin/
      usr/lib/: lib/
      usr/sbin/: bin/
    plugin: nil
    prime:
    - bin/logrotate
    source: snapcraft/empty
    stage:
    - bin/logrotate
    stage-packages:
    - logrotate
  lvm:
    organize:
      sbin/: bin/
      usr/lib/: lib/
      usr/sbin/: bin/
    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
    - lib/*/device-mapper/*
    - lib/*/libaio.so*
    - lib/*/libdevmapper*
    - lib/*/liblvm*
    - lib/*/libreadline.so*
    source: snapcraft/empty
    stage-packages:
    - dmeventd
    - lvm2
    - thin-provisioning-tools
  lxc:
    after:
    - libseccomp
    autotools-configure-parameters:
    - --prefix=
    - --disable-api-docs
    - --disable-bash
    - --disable-doc
    - --disable-examples
    - --disable-memfd-rexec
    - --disable-tests
    - --disable-tools
    - --enable-apparmor
    - --enable-seccomp
    - --enable-selinux
    - --enable-capabilities
    - --with-rootfs-path=/var/snap/lxd/common/lxc/
    - --libexecdir=/snap/lxd/current/libexec/
    build-packages:
    - libapparmor-dev
    - libcap-dev
    - libgnutls28-dev
    - libselinux1-dev
    - pkg-config
    organize:
      share/lxc/hooks: lxc/hooks
      snap/lxd/current/libexec: libexec
      snap/lxd/current/lxc: lxc
    override-build: |
      set -ex

      git config user.email "noreply@lists.canonical.com"
      git config user.name "LXD snap builder"

      git cherry-pick ca4c25c6e9ebb92f9e241ef9a231d4a715cb812d  # lxc-net: don't start by default inside lxc
      git cherry-pick f314419d1e054f7833b6976ec5ed32373aace622  # lxc-checkconfig: Fix bashism
      git cherry-pick 71ba7f65616e72a313e2a41615e449178da9daf2  # doc: Fix reverse allowlist/denylist
      git cherry-pick f7446b4e10d71f79f9f3952255608268842ee1f3  # cgroups: check that opened file descriptor is a cgroup filesystem
      git cherry-pick f1c4a17e7df5d819b1b170917865e2e458c8e5db  # cgroups: log fd of newly created cgroup
      git cherry-pick 8ef019a6ce2555f7b438b3841ab5216e5d6973ba  # doc: Fix reverse allowlist/denylist in Japanese man page
      git cherry-pick 3b9f84fd2397d06782bbf67dc8421463c43ab139  # ttys: ensure container_ttys= env variable is set correctly
      git cherry-pick 5ba5725cb4a210c25707beeca64fde5f561d1c71  # cgroups: modify cgroup2 attach logic

      set +ex
      snapcraftctl build
      set -ex

      mkdir -p $SNAPCRAFT_PART_INSTALL/lxc/config/common.conf.d/
      ln -s /var/snap/lxd/common/lxc/local.conf $SNAPCRAFT_PART_INSTALL/lxc/config/common.conf.d/01-local.conf
      sed -i "s#includedir=.*#includedir=$SNAPCRAFT_PART_INSTALL/include#g" $SNAPCRAFT_PART_INSTALL/lib/pkgconfig/lxc.pc
      sed -i "s#libdir=.*#libdir=$SNAPCRAFT_PART_INSTALL/lib#g" $SNAPCRAFT_PART_INSTALL/lib/pkgconfig/lxc.pc
    plugin: autotools
    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-tag: lxc-4.0.12
    source-type: git
  lxcfs:
    autotools-configure-parameters:
    - --prefix=
    - --datarootdir=/snap/lxd/current/
    - --localstatedir=/var/snap/lxd/common/var/
    build-packages:
    - libfuse-dev
    - libpam0g-dev
    - pkg-config
    organize:
      lib/lxcfs: lib
      snap/lxd/current/lxc: lxc
      snap/lxd/current/lxcfs: lxcfs
    override-build: |
      set -ex

      git config user.email "noreply@lists.canonical.com"
      git config user.name "LXD snap builder"

      set +ex
      snapcraftctl build
      set -ex

      sed -i "s#\${LXC_ROOTFS_MOUNT}/var/snap/lxd/common/var/lib/lxcfs/#\${LXC_ROOTFS_MOUNT}/var/lib/lxcfs/#g" $SNAPCRAFT_PART_INSTALL/snap/lxd/current/lxcfs/lxc.mount.hook
      patch -p1 $SNAPCRAFT_PART_INSTALL/snap/lxd/current/lxcfs/lxc.mount.hook < "${SNAPCRAFT_PROJECT_DIR}/patches/lxcfs-0001-hook.patch"
    plugin: autotools
    prime:
    - bin/fusermount
    - lib/*/libfuse.so.*
    - bin/lxcfs
    - lib/liblxcfs.so
    - lxc
    - lxcfs
    source: https://github.com/lxc/lxcfs
    source-tag: lxcfs-4.0.12
    source-type: git
    stage-packages:
    - fuse
  lxd:
    after:
    - lxc
    - dqlite
    - sqlite
    build-packages:
    - libacl1-dev
    - libudev-dev
    - pkg-config
    build-snaps:
    - go/1.18/stable
    organize:
      sbin/: 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 GOPATH=$(realpath ./.go)
      export CGO_CFLAGS="-I${SNAPCRAFT_STAGE}/include/ -I${SNAPCRAFT_STAGE}/usr/local/include/"
      export CGO_LDFLAGS="-L${SNAPCRAFT_STAGE}/lib/ -L${SNAPCRAFT_STAGE}/usr/local/lib/"
      export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"

      git cherry-pick -x aa0adcee9fc3f1fc40adc09cfb98611eb53f733e # lxd/apparmor/instance_lxc: allow devpts for unprivileged containers
      git cherry-pick -x 73a796169cfe54f1953ac38c06022d5e38acb855 # lxd/apparmor/instance_lxc: allow procfs for unprivileged containers
      git cherry-pick -x c572eb174ae179507c98a726939a3340f9d28d2d # lxd/apparmor/instance_lxc: allow sysfs for unprivileged containers

      # Build the binaries
      go build -o "${SNAPCRAFT_PART_INSTALL}/bin/lxc" github.com/canonical/lxd/lxc
      go build -o "${SNAPCRAFT_PART_INSTALL}/bin/lxc-to-lxd" github.com/canonical/lxd/lxc-to-lxd
      go build -o "${SNAPCRAFT_PART_INSTALL}/bin/lxd" -tags=libsqlite3 github.com/canonical/lxd/lxd
      CGO_ENABLED=0 go build -o "${SNAPCRAFT_PART_INSTALL}/bin/lxd-agent" -tags=agent,netgo github.com/canonical/lxd/lxd-agent
      go build -o "${SNAPCRAFT_PART_INSTALL}/bin/lxd-benchmark" github.com/canonical/lxd/lxd-benchmark

      # Setup bash completion
      mkdir -p ${SNAPCRAFT_PART_INSTALL}/etc/bash_completion.d/
      cp scripts/bash/lxd-client ${SNAPCRAFT_PART_INSTALL}/etc/bash_completion.d/snap.lxd.lxc
    override-pull: |
      snapcraftctl pull
      set -ex

      # Setup build environment
      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 -d -v ./...
    plugin: nil
    prime:
    - bin/dnsmasq
    - bin/getfattr
    - bin/setfattr
    - bin/iw
    - bin/pigz
    - bin/rsync
    - bin/setfacl
    - bin/sgdisk
    - bin/unsquashfs
    - bin/xdelta3
    - lib/*/libidn.so.*
    - etc/bash_completion.d/snap.lxd.lxc
    - share/misc
    - bin/lxc
    - bin/lxc-to-lxd
    - bin/lxd
    - bin/lxd-agent
    - bin/lxd-benchmark
    source: https://github.com/canonical/lxd
    source-commit: 2eacddbb65acf10b2fcea4ee92374a90d2376dc4
    source-type: git
    stage-packages:
    - acl
    - attr
    - dnsmasq-base
    - gdisk
    - iw
    - netbase
    - pciutils
    - pigz
    - rsync
    - squashfs-tools
    - usbutils
    - xdelta3
  lxd-migrate:
    after:
    - lxd
    - sqlite
    build-snaps:
    - go/1.18/stable
    override-build: |
      set -ex

      # Setup build environment
      export GOPATH=$(realpath ./.go)
      export CGO_CFLAGS="-I${SNAPCRAFT_STAGE}/include/ -I${SNAPCRAFT_STAGE}/usr/local/include/"
      export CGO_LDFLAGS="-L${SNAPCRAFT_STAGE}/lib/ -L${SNAPCRAFT_STAGE}/usr/local/lib/"

      # Build the binaries
      go build -o "${SNAPCRAFT_PART_INSTALL}/bin/lxd-migrate" -tags=libsqlite3 ./

      # Install bridge script
      mkdir -p ${SNAPCRAFT_PART_INSTALL}/bin/
      cp scripts/upgrade-bridge ${SNAPCRAFT_PART_INSTALL}/bin/upgrade-bridge
    override-pull: |
      snapcraftctl pull
      set -ex

      # Setup build environment
      export GOPATH=$(realpath ./.go)

      # Download the dependencies
      go get -d -v ./...
    plugin: nil
    prime:
    - bin/lxd-migrate
    - bin/upgrade-bridge
    source: lxd-migrate/
  nano:
    organize:
      usr/bin/: bin/
    plugin: nil
    prime:
    - bin/nano
    - etc/nanorc
    source: snapcraft/empty
    stage-packages:
    - nano
  nasm:
    autotools-configure-parameters:
    - --prefix=
    organize:
      usr/bin/: bin/
    override-build: |
      patch -p1 < "${SNAPCRAFT_PROJECT_DIR}/patches/nasm-0000-disable-manpages.patch"
      snapcraftctl build
    plugin: autotools
    prime:
    - bin/nasm
    source: https://github.com/netwide-assembler/nasm
    source-depth: 1
    source-tag: nasm-2.15.05
    source-type: git
  nftables:
    after:
    - libmnl
    - libnftnl
    autotools-configure-parameters:
    - --prefix=
    - --with-json
    build-packages:
    - libedit-dev
    - libjansson-dev
    - libreadline-dev
    organize:
      sbin/: bin/
      usr/lib/: lib/
    plugin: autotools
    prime:
    - bin/nft
    - lib/*/libjansson*so*
    - lib/libnftables*so*
    source: https://www.netfilter.org/projects/nftables/files/nftables-1.0.5.tar.bz2
    source-checksum: sha256/8d1b4b18393af43698d10baa25d2b9b6397969beecac7816c35dd0714e4de50a
    stage-packages:
    - libjansson4
  nvidia-container:
    after:
    - libseccomp
    build-environment:
    - GIT_TAG: 1.11.0
    build-packages:
    - bmake
    - curl
    - lsb-release
    organize:
      usr/local/bin/nvidia-container-cli: bin/nvidia-container-cli.real
      usr/local/lib: lib/
    override-build: |-
      set -ex

      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0

      git config user.email "noreply@lists.canonical.com"
      git config user.name "LXD snap builder"

      mkdir -p "${SNAPCRAFT_PART_INSTALL}/bin/"
      cp ${SNAPCRAFT_PROJECT_DIR}/snapcraft/wrappers/nvidia-container-cli "${SNAPCRAFT_PART_INSTALL}/bin/"

      set +ex
      snapcraftctl build
    plugin: make
    prime:
    - bin/nvidia-container-cli*
    - lib/libnvidia-container*.so*
    source: https://github.com/NVIDIA/libnvidia-container
    source-commit: c8f267be0bac1c654d59ad4ea5df907141149977
    source-depth: 1
    source-type: git
  openvswitch:
    autotools-configure-parameters:
    - --enable-ssl
    - --prefix=
    organize:
      sbin/: bin/
      usr/bin/: bin/
    override-build: |
      set -ex

      git config user.email "noreply@lists.canonical.com"
      git config user.name "LXD snap builder"

      set +ex
      snapcraftctl build
      set -ex
    plugin: autotools
    prime:
    - bin/ovs-appctl
    - bin/ovs-vsctl
    - bin/ovs-vswitchd
    - bin/ovsdb-*
    - bin/uuidgen
    - share/openvswitch/
    source: https://github.com/openvswitch/ovs
    source-depth: 1
    source-tag: v3.0.1
    source-type: git
    stage-packages:
    - uuid-runtime
  qemu:
    after:
    - libseccomp
    - liburing
    - libusb
    - spice-protocol
    - spice-server
    autotools-configure-parameters:
    - --disable-bochs
    - --disable-cloop
    - --disable-dmg
    - --disable-docs
    - --disable-guest-agent
    - --disable-parallels
    - --disable-qed
    - --disable-slirp
    - --disable-user
    - --disable-vdi
    - --disable-vnc
    - --disable-xen
    - --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/
    build-packages:
    - bison
    - flex
    - pkg-config
    - libaio-dev
    - libcap-ng-dev
    - libglib2.0-dev
    - libnuma-dev
    - libpixman-1-dev
    - librbd-dev
    - libusbredirhost-dev
    organize:
      usr/bin/: bin/
      usr/lib/: lib/
      usr/local/bin/: bin/
      usr/local/lib/: lib/
      usr/local/libexec/: bin/
      usr/local/share/: share/
    override-build: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && [ "$(uname -m)" != "ppc64le" ] && [ "$(uname -m)" != "s390x" ] && exit 0

      set -ex
      # Mangle the configure a bit
      QEMUARCH="$(uname -m)"
      [ "${QEMUARCH}" = "ppc64le" ] && QEMUARCH="ppc64"
      sed -i "s/^unset target_list$/target_list=\"${QEMUARCH}-softmmu\"/" configure
      sed -i 's#libseccomp_minver=".*#libseccomp_minver="0.0"#g' configure

      set +ex
      snapcraftctl build
    override-pull: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && [ "$(uname -m)" != "ppc64le" ] && [ "$(uname -m)" != "s390x" ] && exit 0
      set -ex
      git clone https://gitlab.com/qemu/qemu . -b v7.1.0
    plugin: autotools
    prime:
    - bin/genisoimage*
    - bin/mkisofs*
    - bin/qemu-system-*
    - bin/qemu-img*
    - bin/virtfs-proxy-helper*
    - bin/virtiofsd*
    - lib/*/libatomic.so*
    - lib/*/libmagic*so*
    - lib/*/libnuma*so*
    - lib/*/libpixman*so*
    - lib/*/libusbredir*so*
    - share/qemu/keymaps*
    - share/qemu/efi-virtio.rom*
    - share/qemu/kvmvapic.bin*
    - share/qemu/s390-*.img*
    - share/qemu/slof.bin*
    - share/qemu/vgabios-*.bin*
    source: IRRELEVANT
    source-depth: 1
    source-tag: IRRELEVANT
    source-type: git
    stage-packages:
    - genisoimage
    - libmagic1
    - libnuma1
    - libpixman-1-0
    - libusbredirhost1
    - libusbredirparser1
  qemu-ovmf-secureboot:
    after:
    - edk2
    - qemu
    build-packages:
    - xorriso
    override-build: |-
      [ "$(uname -m)" != "x86_64" ] && [ "$(uname -m)" != "aarch64" ] && exit 0

      export ARCH="$(basename $(readlink -f ${SNAPCRAFT_STAGE}/lib/*-linux-gnu*/))"
      export LD_LIBRARY_PATH="${SNAPCRAFT_STAGE}/lib:${SNAPCRAFT_STAGE}/lib/${ARCH}"

      set -ex
      rm -Rf iso-root vfat-root shell.iso
      mkdir -p iso-root vfat-root/efi/boot
      cp ../../edk2/build/Build/*/*/*/Shell.efi vfat-root/efi/boot/bootx64.efi
      cp ../../edk2/build/Build/*/*/*/EnrollDefaultKeys.efi vfat-root/
      "${SNAPCRAFT_STAGE}/bin/qemu-img" convert --image-opts driver=vvfat,floppy=on,fat-type=12,label=UEFI_SHELL,dir=vfat-root iso-root/shell.img
      xorriso --as mkisofs -input-charset ASCII -J -rational-rock -e shell.img -no-emul-boot -o shell.iso iso-root/

      # Basic aarch64 support
      if [ "$(uname -m)" = "aarch64" ]; then
          sed -i ovmf-vars-generator \
              -e "s/'-machine', machinetype,/'-machine', 'virt', '-cpu', 'cortex-a57',/" \
              -e "/charserial1/d" \
              -e "s/ide-cd/scsi-cd/" \
              -e "s/'-device',$/'-device', 'virtio-scsi-pci,id=scsi', '-device',/"
      elif [ "$(uname -m)" = "x86_64" ]; then
          cp -f "${SNAPCRAFT_STAGE}/share/qemu/kvmvapic.bin" .
      fi

      mkdir -p "${SNAPCRAFT_PART_INSTALL}/share/qemu/"
      python3 ovmf-vars-generator \
        --qemu-binary "${SNAPCRAFT_STAGE}/bin/qemu-system-$(uname -m)" \
        --print-output --disable-smm --skip-testing \
        --oem-string "$(cat ${SNAPCRAFT_PROJECT_DIR}/snapcraft/etc/ubuntu-sb.crt)" \
        --ovmf-binary "${SNAPCRAFT_STAGE}/share/qemu/OVMF_CODE.fd" \
        --ovmf-template-vars "${SNAPCRAFT_STAGE}/share/qemu/OVMF_VARS.fd" \
        --uefi-shell-iso shell.iso \
        "${SNAPCRAFT_PART_INSTALL}/share/qemu/OVMF_VARS.ms.fd"
    plugin: nil
    prime:
    - share/qemu/*
    source: https://github.com/puiterwijk/qemu-ovmf-secureboot
    source-commit: 4da81a4cbdd6d96b7a653239865d3b1d92cc6117
    source-depth: 1
    source-type: git
  raft:
    autotools-configure-parameters:
    - --prefix=
    build-packages:
    - libuv1-dev
    - liblz4-dev
    organize:
      usr/lib/: lib/
    plugin: autotools
    prime:
    - lib/libraft*so*
    - lib/*/libuv.so*
    source: https://github.com/canonical/raft
    source-commit: abf9c42a9bb63c24920ab9f0bfbc4b7a47e7e5f4
    source-depth: 1
    source-type: git
    stage-packages:
    - libuv1
    - liblz4-1
  shmounts:
    plugin: make
    prime:
    - bin/setup-shmounts
    source: shmounts/
  snap-query:
    build-snaps:
    - go/1.18/stable
    override-build: |
      set -ex

      # Setup build environment
      export GOPATH=$(realpath ./.go)

      # Build the binaries
      go build -o "${SNAPCRAFT_PART_INSTALL}/bin/snap-query" snap-query.go
    plugin: nil
    prime:
    - bin/snap-query
    source: snap-query/
  spice-protocol:
    plugin: meson
    prime: []
    source: https://gitlab.freedesktop.org/spice/spice-protocol
    source-depth: 1
    source-tag: v0.14.4
    source-type: git
  spice-server:
    after:
    - spice-protocol
    build-packages:
    - libjpeg-turbo8-dev
    - python3-pyparsing
    - python3-six
    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/
    plugin: meson
    prime:
    - lib/*/libjpeg*so*
    - lib/*/libspice-server*so*
    - lib/*/libpixman*so*
    source: https://gitlab.freedesktop.org/spice/spice
    source-depth: 1
    source-tag: v0.15.1
    source-type: git
    stage-packages:
    - libjpeg-turbo8
    - libpixman-1-0
  sqlite:
    autotools-configure-parameters:
    - --prefix=
    build-packages:
    - tcl
    plugin: autotools
    prime:
    - bin/sqlite3
    - lib/libsqlite3*so*
    source: https://github.com/sqlite/sqlite
    source-depth: 1
    source-tag: version-3.40.0
    source-type: git
  squashfs-tools-ng:
    autotools-configure-parameters:
    - --prefix=
    build-packages:
    - liblzma-dev
    plugin: autotools
    prime:
    - bin/sqfs2tar
    - bin/tar2sqfs
    - lib/libsquashfs.so*
    source: https://github.com/AgentD/squashfs-tools-ng
    source-depth: 1
    source-tag: v1.1.4
    source-type: git
  strip:
    after:
    - btrfs
    - ceph
    - dqlite
    - libseccomp
    - logrotate
    - lvm
    - nano
    - nvidia-container
    - openvswitch
    - raft
    - sqlite
    - squashfs-tools-ng
    - vim
    - xfs
    - xz
    - zfs-0-6
    - zfs-0-7
    - zfs-0-8
    - zfs-2-0
    - zfs-2-1
    - lxc
    - lxcfs
    - criu
    - lxd
    - lxd-migrate
    - shmounts
    - snap-query
    override-prime: |
      set -x

      # Strip some of the heavy bits
      strip -s ${SNAPCRAFT_PRIME}/bin/lxc
      strip -s ${SNAPCRAFT_PRIME}/bin/lxd*
      strip -s ${SNAPCRAFT_PRIME}/bin/snap*
      strip -s ${SNAPCRAFT_PRIME}/lib/liblxc*
      strip -s ${SNAPCRAFT_PRIME}/lib/libdqlite*
      strip -s ${SNAPCRAFT_PRIME}/lib/libsqlite*

      for zfs in zfs-0.6 zfs-0.7 zfs-0.8 zfs-2.0 zfs-2.1; do
          [ ! -d "${SNAPCRAFT_PRIME}/${zfs}" ] && continue
          strip -s ${SNAPCRAFT_PRIME}/${zfs}/bin/* ${SNAPCRAFT_PRIME}/${zfs}/lib/*
      done

      [ -e "${SNAPCRAFT_PRIME}/criu/criu" ] && strip -s ${SNAPCRAFT_PRIME}/criu/criu

      exit 0
    plugin: nil
    source: snapcraft/empty
  vim:
    organize:
      usr/bin/: bin/
      usr/share/vim/vim*/debian.vim: etc/vimrc
    plugin: nil
    prime:
    - bin/vim.tiny
    - etc/vimrc
    source: snapcraft/empty
    stage-packages:
    - vim-common
    - vim-tiny
  wrappers:
    organize:
      hooks/: snap/hooks/
      wrappers/editor: bin/
      wrappers/remote-viewer: bin/
    plugin: dump
    source: snapcraft/
  xfs:
    organize:
      sbin/: bin/
      usr/sbin/: bin/
    plugin: nil
    prime:
    - bin/xfs_admin
    - bin/xfs_db
    - bin/xfs_growfs
    - bin/xfs_repair
    - bin/mkfs.xfs
    source: snapcraft/empty
    stage-packages:
    - xfsprogs
  xtables:
    organize:
      usr/lib/ebtables/: lib/
      usr/sbin/: bin/
    plugin: nil
    prime:
    - bin/arptables-legacy
    - bin/ebtables-legacy
    - etc/ethertypes
    - etc/protocols
    - lib/libebtc.so.*
    source: snapcraft/empty
    stage-packages:
    - arptables
    - ebtables
  xz:
    organize:
      usr/bin/: bin/
      usr/lib/: lib/
      usr/sbin/: bin/
    override-build: |
      snapcraftctl build

      # Include the lzma symlink
      ln -s xz "${SNAPCRAFT_PART_INSTALL}/usr/bin/lzma"
    plugin: nil
    prime:
    - bin/lzma
    - bin/xz
    - lib/*/liblzma*so*
    source: snapcraft/empty
    stage-packages:
    - xz-utils
  zfs-0-6:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - uuid-dev
    - zlib1g-dev
    override-build: |
      set -ex

      [ "$(uname -m)" != "x86_64" ] && \
        [ "$(uname -m)" != "aarch64" ] && \
        [ "$(uname -m)" != "s390x" ] && \
        [ "$(uname -m)" != "ppc64le" ] && exit 0

      git config user.email "noreply@lists.canonical.com"
      git config user.name "LXD snap builder"

      git cherry-pick fb963d33ee0dd350143ba1c9cd35d5f7d86910d2  # Fix endian build problem on ppc64el

      set +ex
      snapcraftctl build
      set -ex

      mv "${SNAPCRAFT_PART_INSTALL}" "${SNAPCRAFT_PART_INSTALL}.tmp"
      mkdir -p "${SNAPCRAFT_PART_INSTALL}/zfs-0.6/bin" "${SNAPCRAFT_PART_INSTALL}/zfs-0.6/lib"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zfs" "${SNAPCRAFT_PART_INSTALL}/zfs-0.6/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zpool" "${SNAPCRAFT_PART_INSTALL}/zfs-0.6/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${SNAPCRAFT_PART_INSTALL}/zfs-0.6/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/"*so* "${SNAPCRAFT_PART_INSTALL}/zfs-0.6/lib/"
      rm -Rf "${SNAPCRAFT_PART_INSTALL}.tmp"
    plugin: autotools
    source: https://github.com/openzfs/zfs
    source-tag: zfs-0.6.5.11
    source-type: git
  zfs-0-7:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - libblkid-dev
    - uuid-dev
    - zlib1g-dev
    override-build: |
      set -ex

      [ "$(uname -m)" != "x86_64" ] && \
        [ "$(uname -m)" != "aarch64" ] && \
        [ "$(uname -m)" != "s390x" ] && \
        [ "$(uname -m)" != "ppc64le" ] && exit 0

      set +ex
      snapcraftctl build
      set -ex

      mv "${SNAPCRAFT_PART_INSTALL}" "${SNAPCRAFT_PART_INSTALL}.tmp"
      mkdir -p "${SNAPCRAFT_PART_INSTALL}/zfs-0.7/bin" "${SNAPCRAFT_PART_INSTALL}/zfs-0.7/lib"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zfs" "${SNAPCRAFT_PART_INSTALL}/zfs-0.7/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zpool" "${SNAPCRAFT_PART_INSTALL}/zfs-0.7/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${SNAPCRAFT_PART_INSTALL}/zfs-0.7/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/"*so* "${SNAPCRAFT_PART_INSTALL}/zfs-0.7/lib/"
      rm -Rf "${SNAPCRAFT_PART_INSTALL}.tmp"
    plugin: autotools
    source: https://github.com/openzfs/zfs
    source-depth: 1
    source-tag: zfs-0.7.13
    source-type: git
  zfs-0-8:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - libblkid-dev
    - libssl-dev
    - uuid-dev
    - zlib1g-dev
    override-build: |
      set -ex

      [ "$(uname -m)" != "x86_64" ] && \
        [ "$(uname -m)" != "aarch64" ] && \
        [ "$(uname -m)" != "s390x" ] && \
        [ "$(uname -m)" != "ppc64le" ] && exit 0

      set +ex
      snapcraftctl build
      set -ex

      mv "${SNAPCRAFT_PART_INSTALL}" "${SNAPCRAFT_PART_INSTALL}.tmp"
      mkdir -p "${SNAPCRAFT_PART_INSTALL}/zfs-0.8/bin" "${SNAPCRAFT_PART_INSTALL}/zfs-0.8/lib"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zfs" "${SNAPCRAFT_PART_INSTALL}/zfs-0.8/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zpool" "${SNAPCRAFT_PART_INSTALL}/zfs-0.8/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${SNAPCRAFT_PART_INSTALL}/zfs-0.8/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/"*so* "${SNAPCRAFT_PART_INSTALL}/zfs-0.8/lib/"
      rm -Rf "${SNAPCRAFT_PART_INSTALL}.tmp"
    plugin: autotools
    source: https://github.com/openzfs/zfs
    source-depth: 1
    source-tag: zfs-0.8.6
    source-type: git
  zfs-2-0:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - libblkid-dev
    - libssl-dev
    - uuid-dev
    - zlib1g-dev
    override-build: |
      set -ex

      [ "$(uname -m)" != "x86_64" ] && \
        [ "$(uname -m)" != "aarch64" ] && \
        [ "$(uname -m)" != "s390x" ] && \
        [ "$(uname -m)" != "ppc64le" ] && exit 0

      set +ex
      snapcraftctl build
      set -ex

      mv "${SNAPCRAFT_PART_INSTALL}" "${SNAPCRAFT_PART_INSTALL}.tmp"
      mkdir -p "${SNAPCRAFT_PART_INSTALL}/zfs-2.0/bin" "${SNAPCRAFT_PART_INSTALL}/zfs-2.0/lib"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zfs" "${SNAPCRAFT_PART_INSTALL}/zfs-2.0/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zpool" "${SNAPCRAFT_PART_INSTALL}/zfs-2.0/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${SNAPCRAFT_PART_INSTALL}/zfs-2.0/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/"*so* "${SNAPCRAFT_PART_INSTALL}/zfs-2.0/lib/"
      rm -Rf "${SNAPCRAFT_PART_INSTALL}.tmp"
    plugin: autotools
    source: https://github.com/openzfs/zfs
    source-depth: 1
    source-tag: zfs-2.0.7
    source-type: git
  zfs-2-1:
    autotools-configure-parameters:
    - --prefix=/
    - --with-config=user
    build-packages:
    - libblkid-dev
    - libssl-dev
    - uuid-dev
    - zlib1g-dev
    override-build: |
      set -ex

      [ "$(uname -m)" != "x86_64" ] && \
        [ "$(uname -m)" != "aarch64" ] && \
        [ "$(uname -m)" != "s390x" ] && \
        [ "$(uname -m)" != "ppc64le" ] && exit 0

      set +ex
      snapcraftctl build
      set -ex

      mv "${SNAPCRAFT_PART_INSTALL}" "${SNAPCRAFT_PART_INSTALL}.tmp"
      mkdir -p "${SNAPCRAFT_PART_INSTALL}/zfs-2.1/bin" "${SNAPCRAFT_PART_INSTALL}/zfs-2.1/lib"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zfs" "${SNAPCRAFT_PART_INSTALL}/zfs-2.1/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/sbin/zpool" "${SNAPCRAFT_PART_INSTALL}/zfs-2.1/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/udev/zvol_id" "${SNAPCRAFT_PART_INSTALL}/zfs-2.1/bin/"
      mv "${SNAPCRAFT_PART_INSTALL}.tmp/lib/"*so* "${SNAPCRAFT_PART_INSTALL}/zfs-2.1/lib/"
      rm -Rf "${SNAPCRAFT_PART_INSTALL}.tmp"
    plugin: autotools
    source: https://github.com/openzfs/zfs
    source-depth: 1
    source-tag: zfs-2.1.15
    source-type: git
  zstd:
    organize:
      usr/bin/: bin/
    plugin: nil
    prime:
    - bin/pzstd
    - bin/zstd
    source: snapcraft/empty
    stage-packages:
    - zstd
source-code: https://github.com/canonical/lxd
summary: LXD - container and VM manager
version: 4.0.10-d342340
website: https://ubuntu.com/lxd
