#!/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 []" printf "\nIf 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