Skip to content

Instantly share code, notes, and snippets.

@mufasa71
Last active July 5, 2023 14:13
Show Gist options
  • Save mufasa71/d12b43976db1f5387a33efcab3a69e6d to your computer and use it in GitHub Desktop.
Save mufasa71/d12b43976db1f5387a33efcab3a69e6d to your computer and use it in GitHub Desktop.

/usr/share/lxc/config/common.conf.d/01-extra-mounts.conf

lxc.hook.pre-start = /usr/local/bin/lxc-extra-mounts
lxc.hook.post-stop = /usr/local/bin/lxc-extra-mounts

/usr/local/bin/lxc-extra-mounts

#!/bin/bash

ACTION="${3}"

# This is a crappy hack but the passed environment variable is simply wrong
LXC_ROOTFS_MOUNT=/var/lib/lxd/containers/${LXC_NAME}/rootfs/

logger -p user.info "${0} was executed!"
logger -p user.info "LXC_NAME: ${LXC_NAME}"
logger -p user.info "LXC_CONFIG_FILE: ${LXC_CONFIG_FILE}"
logger -p user.info "LXC_ROOTFS_MOUNT: ${LXC_ROOTFS_MOUNT}"
logger -p user.info "USER: $(whoami)"
logger -p user.info "GROUPS: $(groups)"
logger -p user.info "1: ${1}"
logger -p user.info "2: ${2}"
logger -p user.info "ACTION: ${ACTION}"

#ls -la ${LXC_ROOTFS_MOUNT} | logger

TMP_FILE=$(mktemp /tmp/.lxc-extra-mounts_${LXC_NAME}_XXXXX)
logger -p user.info "TMP_FILE: ${TMP_FILE}"

if [ "${ACTION}" == "pre-start" ] || [ "${ACTION}" == "post-stop" ]; then
	/bin/bash -c "sqlite3 /var/lib/lxd/lxd.db \"SELECT * FROM containers_config WHERE key LIKE 'user.extra-mount%' AND container_id = (SELECT id FROM containers WHERE name = '${LXC_NAME}');\" >${TMP_FILE}" 2>&1| logger

	cat "${TMP_FILE}" | while read MOUNT; do
		MOUNT=$(echo "${MOUNT}" | awk 'BEGIN{FS="|"}{print $NF}')
		logger -p user.info "${MOUNT}"

		SOURCE=$(echo "${MOUNT}" | awk '{print $1}')
		DESTINATION=$(echo "${MOUNT}" | awk '{print $2}')
		TYPE=$(echo "${MOUNT}" | awk '{print $3}')
		OPTIONS=$(echo "${MOUNT}" | awk '{print $4}')

		if [ "${ACTION}" == "pre-start" ]; then
			mkdir -p "${LXC_ROOTFS_MOUNT}/${DESTINATION}" |logger -p user.info
			logger -p user.info "mount -t ${TYPE} -o ${OPTIONS} ${SOURCE} ${LXC_ROOTFS_MOUNT}/${DESTINATION}"
			mount -t ${TYPE} -o ${OPTIONS} ${SOURCE} ${LXC_ROOTFS_MOUNT}/${DESTINATION} 2>&1 |logger -p user.info
		elif [ "${ACTION}" == "post-stop" ]; then
			logger -p user.info "umount -t ${LXC_ROOTFS_MOUNT}/${DESTINATION}"
			umount ${LXC_ROOTFS_MOUNT}/${DESTINATION} 2>&1 |logger -p user.info
		fi
	done
fi
rm "${TMP_FILE}"
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment