summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/volatile-binds/files
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/volatile-binds/files')
-rwxr-xr-xmeta/recipes-core/volatile-binds/files/mount-copybind29
-rw-r--r--meta/recipes-core/volatile-binds/files/volatile-binds.service.in8
2 files changed, 32 insertions, 5 deletions
diff --git a/meta/recipes-core/volatile-binds/files/mount-copybind b/meta/recipes-core/volatile-binds/files/mount-copybind
index e32e675308..ddc4357615 100755
--- a/meta/recipes-core/volatile-binds/files/mount-copybind
+++ b/meta/recipes-core/volatile-binds/files/mount-copybind
@@ -2,6 +2,9 @@
#
# 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]"
@@ -31,6 +34,13 @@ if [ -d "$mountpoint" ]; then
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
@@ -39,13 +49,24 @@ if [ -d "$mountpoint" ]; then
# 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 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
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
@@ -53,4 +74,10 @@ elif [ -f "$mountpoint" ]; then
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
diff --git a/meta/recipes-core/volatile-binds/files/volatile-binds.service.in b/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
index b23355a714..5a0055bec3 100644
--- a/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
+++ b/meta/recipes-core/volatile-binds/files/volatile-binds.service.in
@@ -1,17 +1,17 @@
[Unit]
Description=Bind mount volatile @where@
-DefaultDependencies=false
+DefaultDependencies=no
Before=local-fs.target
RequiresMountsFor=@whatparent@ @whereparent@
-ConditionPathIsReadWrite=@whatparent@
+ConditionPathIsReadWrite=|@whatparent@
+ConditionPathExists=|!@whatparent@
ConditionPathExists=@where@
ConditionPathIsReadWrite=!@where@
[Service]
Type=oneshot
RemainAfterExit=Yes
-StandardOutput=syslog
-TimeoutSec=0
+Environment=MOUNT_COPYBIND_AVOID_OVERLAYFS=@avoid_overlayfs@
ExecStart=/sbin/mount-copybind @what@ @where@
ExecStop=/bin/umount @where@