Skip to content

Commit

Permalink
lxd: Build lxd server binary into /sbin
Browse files Browse the repository at this point in the history
    The PATH inside the snap is configured to prefer /sbin over /bin so the lxd binary will still
    be called by default.

    The lxd-stophook-wrapper script which will be placed into `/bin/lxd`.

    Because containers are configured to call `/snap/lxd/current/bin/lxd callhook` which in turn will be
    routed to `/snap/lxd/current/bin/lxd-user` by the lxd-stophook-wrapper script, which will then connect
    to LXD's unix socket to indicate to the server that the container is stopping.

    Because lxd-user is compiled as a static binary this will work across snap core base changes.

Signed-off-by: Thomas Parrott <[email protected]>
  • Loading branch information
tomponline committed Oct 9, 2024
1 parent 4d10cbd commit 75de117
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions snapcraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1401,7 +1401,12 @@ parts:
# Build the binaries
go build -trimpath -o "${CRAFT_PART_INSTALL}/bin/lxc" github.com/canonical/lxd/lxc
go build -trimpath -o "${CRAFT_PART_INSTALL}/bin/lxd" -tags=libsqlite3 github.com/canonical/lxd/lxd
# 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
Expand Down Expand Up @@ -1440,7 +1445,7 @@ parts:
usr/share/misc/: share/misc/
var/lib/usbutils/usb.ids: share/misc/
usr/sbin/: bin/
sbin/: bin/
sbin/sgdisk: bin/
prime:
- bin/dnsmasq
- bin/getfattr
Expand All @@ -1461,9 +1466,9 @@ parts:
- share/misc/usb.ids

- bin/lxc
- bin/lxd
- bin/lxd-agent
- bin/lxd-user
- sbin/lxd

lxd-ui:
source: https://github.com/canonical/lxd-ui
Expand Down Expand Up @@ -1546,10 +1551,12 @@ parts:
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" \
Expand All @@ -1561,6 +1568,9 @@ parts:
-not -path "${CRAFT_PRIME}/bin/gpu-2404-custom-wrapper" \
-exec strip -s {} +
# This is the actual LXD binary.
strip --strip-all "${CRAFT_PRIME}/sbin/lxd"
# Strip binaries not under bin/ due to being dynamically
# added to the path with `snap set lxd`, like `criu.enable=true`
for binary in "${CRAFT_PRIME}/criu/criu"; do
Expand Down

0 comments on commit 75de117

Please sign in to comment.