1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-09 17:39:31 +00:00
Files
poky/meta/recipes-core/volatile-binds/files/mount-copybind
T
Tobias Kaufmann e1d658ef11 mount-copybind: add SELinux support
bind mounts don't use the SELinux label of the target, but the SELinux
label of the source.

This patch restores the SELinux context of the bind mount recursively using
restorecon.

(From OE-Core rev: 6f3e231dc9bc11772573bf9683de9804460362d1)

Signed-off-by: Tobias Kaufmann <Tobias.KA.Kaufmann@bmw.de>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2021-10-11 18:41:38 +01:00

69 lines
1.7 KiB
Bash
Executable File

#!/bin/sh
#
# Perform a bind mount, copying existing files as we do so to ensure the
# overlaid path has the necessary content.
if [ $# -lt 2 ]; then
echo >&2 "Usage: $0 spec mountpoint [OPTIONS]"
exit 1
fi
# e.g. /var/volatile/lib
spec=$1
# e.g. /var/lib
mountpoint=$2
if [ $# -gt 2 ]; then
options=$3
else
options=
fi
[ -n "$options" ] && options=",$options"
mkdir -p "${spec%/*}"
if [ -d "$mountpoint" ]; then
if [ -d "$spec" ]; then
specdir_existed=yes
else
specdir_existed=no
mkdir "$spec"
fi
# Fast version of calculating `dirname ${spec}`/.`basename ${spec}`-work
overlay_workdir="${spec%/*}/.${spec##*/}-work"
mkdir "${overlay_workdir}"
# Try to mount using overlay, which is must faster than copying files.
# If that fails, fall back to slower copy.
if ! mount -t overlay overlay -olowerdir="$mountpoint",upperdir="$spec",workdir="$overlay_workdir" "$mountpoint" > /dev/null 2>&1; then
if [ "$specdir_existed" != "yes" ]; then
cp -aPR "$mountpoint"/. "$spec/"
fi
mount -o "bind$options" "$spec" "$mountpoint"
# restore the selinux context.
if command -v selinuxenabled > /dev/null 2>&1; then
if selinuxenabled; then
restorecon -R "$mountpoint"
fi
fi
fi
elif [ -f "$mountpoint" ]; then
if [ ! -f "$spec" ]; then
cp -aP "$mountpoint" "$spec"
fi
mount -o "bind$options" "$spec" "$mountpoint"
# restore the selinux context.
if command -v selinuxenabled > /dev/null 2>&1; then
if selinuxenabled; then
restorecon -R "$mountpoint"
fi
fi
fi