#!/bin/sh
# Remap all files uid/gid to a new range using fuidshift
#
# This is a wrapper around `fuidshift` from `lxd-tools` Debian package for my use-case of LVM based root disks.
#

usage () {
	echo "remap-uid-and-gid <container-name> [<target-lv>]"
	printf "\nIf <target-lv> is not given it is computed from a default value with the given container name\n"
	exit 1
}

if [ "$(which fuidshift)" = "" ]; then
	echo "fuidshift binary not found. Please install lxd-tools package."
	exit 1
fi

CONTAINER_NAME="${1}"
if [ "${CONTAINER_NAME}" = "" ] || [ "${CONTAINER_NAME}" = "--help" ] || [ "${CONTAINER_NAME}" = "-h" ]; then
	usage
fi

TARGET_LV="${2}"
if [ "${TARGET_LV}" = "" ]; then
	GUESSED_LV="/dev/mapper/daffy--vg-lxc--${CONTAINER_NAME}"
	if [ -e "${GUESSED_LV}" ]; then
		TARGET_LV="${GUESSED_LV}"
	fi
fi
if [ "${TARGET_LV}" = "" ]; then
	usage
fi

if mount | grep -qF " on /mnt"; then
	echo "Mountpoint /mnt is already in use."
	exit 1
fi

mount "${TARGET_LV}" /mnt

# we get e.g. lxc.idmap = u 0 1000000 65535 and want u:0:1000000:65535
USER_NAMESPACE=$(get-lxc-idmap-config u $CONTAINER_NAME | sed -r -e 's/.*= (.*)/\1/' -e 's/ /:/g')
GROUP_NAMESPACE=$(get-lxc-idmap-config g $CONTAINER_NAME | sed -r -e 's/.*= (.*)/\1/' -e 's/ /:/g')

printf "fuidshift %s %s %s\n" /mnt $USER_NAMESPACE $GROUP_NAMESPACE
# fuidshift /mnt $USER_NAMESPACE $GROUP_NAMESPACE

cd /
umount /mnt