Skip to content

Commit

Permalink
Add lxd-stophook wrapper that redirects container stop callhooks to l…
Browse files Browse the repository at this point in the history
…xd-user (#635)

- Adds lxd-stophook wrapper that redirects container stop callhooks to
lxd-user.
- Builds lxd binary into sbin directory (so as not to conflict with
lxd-stophook script in bin/lxd).
- Changes LXD_EXEC_PATH to use the lxd binary in sbin directory.
  • Loading branch information
tomponline authored Nov 25, 2024
2 parents 87fd56f + 74e8bc7 commit 68321c2
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 4 deletions.
17 changes: 14 additions & 3 deletions snapcraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1415,7 +1415,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 @@ -1456,7 +1461,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 @@ -1477,9 +1482,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 @@ -1562,10 +1567,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 @@ -1577,6 +1584,9 @@ parts:
-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
# added to the path with `snap set lxd`, like `criu.enable=true`
for binary in "${CRAFT_PRIME}/criu/criu"; do
Expand Down Expand Up @@ -1618,6 +1628,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
2 changes: 1 addition & 1 deletion snapcraft/commands/daemon.start
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export HOME="/tmp/"
export LXD_DIR="${SNAP_COMMON}/lxd/"
export LXD_LXC_TEMPLATE_CONFIG="${SNAP_CURRENT}/lxc/config/"
export LXD_LXC_HOOK="${SNAP_CURRENT}/lxc/hooks/"
export LXD_EXEC_PATH="${SNAP_CURRENT}/bin/lxd"
export LXD_EXEC_PATH="${SNAP_CURRENT}/sbin/lxd"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}:${SNAP_CURRENT}/lib:${SNAP_CURRENT}/lib/${ARCH}:${SNAP_CURRENT}/lib/${ARCH}/ceph"
export PATH="${PATH}:${SNAP_CURRENT}/bin"
export LXD_CLUSTER_UPDATE="${SNAP_CURRENT}/commands/refresh"
Expand Down
9 changes: 9 additions & 0 deletions snapcraft/wrappers/lxd-stophook
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/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

echo "lxd-stophook: Invalid argument: ${1}" >&2
exit 1

0 comments on commit 68321c2

Please sign in to comment.