Skip to content

Commit

Permalink
LXD stop hook wrapper (#564)
Browse files Browse the repository at this point in the history
This requires support in `lxd-user` to add support for the `callhook`
subcommand.

Related to canonical/lxd#13331

Depends on canonical/lxd#14253
  • Loading branch information
tomponline authored Oct 10, 2024
2 parents 34dd519 + 6a1f4c2 commit 912a3ef
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
19 changes: 15 additions & 4 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 @@ -1559,7 +1566,10 @@ parts:
-not -path "${CRAFT_PRIME}/bin/uefivars.py" \
-not -path "${CRAFT_PRIME}/bin/lxcfs" \
-not -path "${CRAFT_PRIME}/bin/gpu-2404-custom-wrapper" \
-exec strip -s {} +
-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
# added to the path with `snap set lxd`, like `criu.enable=true`
Expand Down Expand Up @@ -1602,6 +1612,7 @@ parts:
organize:
commands/snap-query: bin/
hooks/: snap/hooks/
wrappers/lxd-stophook: bin/lxd
wrappers/gpu-2404-custom-wrapper: bin/
wrappers/editor: bin/
wrappers/remote-viewer: bin/
Expand Down
8 changes: 8 additions & 0 deletions snapcraft/wrappers/lxd-stophook
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/bin/sh
# Use exec so that this script process is replaced.
# This avoids polluting the process tree with this wrapper script.
if [ "$1" = "callhook" ]; then
exec /snap/lxd/current/bin/lxd-user "$@"
fi

exec lxd "$@"

0 comments on commit 912a3ef

Please sign in to comment.