From: David Cassany Date: Fri, 22 Sep 2023 14:28:48 +0000 (+0200) Subject: fix(overlayfs): split overlayfs mount in two steps X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=bddffedae038ceca263a904e40513a6e92f1b558;p=thirdparty%2Fdracut.git fix(overlayfs): split overlayfs mount in two steps This commit splits the creation of required overlayfs underlaying directories and the actual overlayfs mount. This way it is still possible to mount the overlayfs with the generated sysroot.mount that dmsquash-live creates. The overlayfs tree is created in a pre-mount hook so it is executed before sysroot.mount is started. Otherwise sysroot.mount starts and fails before mount hooks are executed. Signed-off-by: David Cassany --- diff --git a/modules.d/90overlayfs/module-setup.sh b/modules.d/90overlayfs/module-setup.sh index 27aa7cfa5..893e2dc36 100755 --- a/modules.d/90overlayfs/module-setup.sh +++ b/modules.d/90overlayfs/module-setup.sh @@ -15,4 +15,5 @@ installkernel() { install() { inst_hook mount 01 "$moddir/mount-overlayfs.sh" + inst_hook pre-mount 01 "$moddir/prepare-overlayfs.sh" } diff --git a/modules.d/90overlayfs/mount-overlayfs.sh b/modules.d/90overlayfs/mount-overlayfs.sh index 7e2da1a80..e1d23fb44 100755 --- a/modules.d/90overlayfs/mount-overlayfs.sh +++ b/modules.d/90overlayfs/mount-overlayfs.sh @@ -3,24 +3,11 @@ type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh getargbool 0 rd.live.overlay.overlayfs && overlayfs="yes" -getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes" getargbool 0 rd.live.overlay.readonly -d -y readonly_overlay && readonly_overlay="--readonly" || readonly_overlay="" ROOTFLAGS="$(getarg rootflags)" if [ -n "$overlayfs" ]; then - if ! [ -e /run/rootfsbase ]; then - mkdir -m 0755 -p /run/rootfsbase - mount --bind "$NEWROOT" /run/rootfsbase - fi - - mkdir -m 0755 -p /run/overlayfs - mkdir -m 0755 -p /run/ovlwork - if [ -n "$reset_overlay" ] && [ -h /run/overlayfs ]; then - ovlfsdir=$(readlink /run/overlayfs) - info "Resetting the OverlayFS overlay directory." - rm -r -- "${ovlfsdir:?}"/* "${ovlfsdir:?}"/.* > /dev/null 2>&1 - fi if [ -n "$readonly_overlay" ] && [ -h /run/overlayfs-r ]; then ovlfs=lowerdir=/run/overlayfs-r:/run/rootfsbase else diff --git a/modules.d/90overlayfs/prepare-overlayfs.sh b/modules.d/90overlayfs/prepare-overlayfs.sh new file mode 100755 index 000000000..87bcc1963 --- /dev/null +++ b/modules.d/90overlayfs/prepare-overlayfs.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh + +getargbool 0 rd.live.overlay.overlayfs && overlayfs="yes" +getargbool 0 rd.live.overlay.reset -d -y reset_overlay && reset_overlay="yes" + +if [ -n "$overlayfs" ]; then + if ! [ -e /run/rootfsbase ]; then + mkdir -m 0755 -p /run/rootfsbase + mount --bind "$NEWROOT" /run/rootfsbase + fi + + mkdir -m 0755 -p /run/overlayfs + mkdir -m 0755 -p /run/ovlwork + if [ -n "$reset_overlay" ] && [ -h /run/overlayfs ]; then + ovlfsdir=$(readlink /run/overlayfs) + info "Resetting the OverlayFS overlay directory." + rm -r -- "${ovlfsdir:?}"/* "${ovlfsdir:?}"/.* > /dev/null 2>&1 + fi +fi