mirror of
https://git.yoctoproject.org/poky
synced 2026-05-31 12:49:46 +00:00
cf648b0d28
To fulfill OverlayFS workdir requirements, the mount-copybind script creates a workdir. But if the mount operation fails for any reason, the workdir is left there. Then, subsequent runs of mount-copybind will again try to create the directory and pollute system logs with failed mkdir error messages. This commit mitigates the problem by unconditionally removing workdir if the OverlayFS is not used or fails to run. (From OE-Core rev: 7872edbb33024fc710ac683eaef5635b89a1b994) Signed-off-by: Ricardo Simoes <ricardo.simoes@pt.bosch.com> Signed-off-by: Mark Jonas <mark.jonas@de.bosch.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
87 lines
2.4 KiB
Bash
Executable File
87 lines
2.4 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 the target is a directory and overlayfs is available (and the environment
|
|
# variable MOUNT_COPYBIND_AVOID_OVERLAYFS=1 is not set), then an overlay mount
|
|
# will be attempted first.
|
|
|
|
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"
|
|
# If the $spec directory is created we need to take care that
|
|
# the selinux context is correct
|
|
if command -v selinuxenabled > /dev/null 2>&1; then
|
|
if selinuxenabled; then
|
|
restorecon "$spec"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Fast version of calculating `dirname ${spec}`/.`basename ${spec}`-work
|
|
overlay_workdir="${spec%/*}/.${spec##*/}-work"
|
|
if [ "$MOUNT_COPYBIND_AVOID_OVERLAYFS" != 1 ]; then
|
|
mkdir "${overlay_workdir}"
|
|
fi
|
|
|
|
# Try to mount using overlay, which is must faster than copying files.
|
|
# If that fails, fall back to slower copy.
|
|
if command -v selinuxenabled > /dev/null 2>&1; then
|
|
if selinuxenabled; then
|
|
mountcontext=",rootcontext=$(matchpathcon -n "$mountpoint")"
|
|
fi
|
|
fi
|
|
if [ "$MOUNT_COPYBIND_AVOID_OVERLAYFS" = 1 ] || ! mount -t overlay overlay -olowerdir="$mountpoint",upperdir="$spec",workdir="$overlay_workdir""$mountcontext" "$mountpoint" > /dev/null 2>&1; then
|
|
rm -rf "$overlay_workdir"
|
|
|
|
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
|