diff options
Diffstat (limited to 'debian/90overlay-root')
-rw-r--r-- | debian/90overlay-root/README | 14 | ||||
-rw-r--r-- | debian/90overlay-root/module-setup.sh | 20 | ||||
-rw-r--r-- | debian/90overlay-root/overlay-mount.sh | 39 |
3 files changed, 73 insertions, 0 deletions
diff --git a/debian/90overlay-root/README b/debian/90overlay-root/README new file mode 100644 index 0000000..aa14275 --- /dev/null +++ b/debian/90overlay-root/README @@ -0,0 +1,14 @@ +dracut rootfs overlayfs module + +Make any rootfs ro, but writable via overlayfs. +This is convenient, if for example using an ro-nfs-mount. + +Add the parameter "rootovl" to the kernel, to activate this feature + +This happens pre-pivot. Therefore the final root file system is already +mounted. It will be set ro, and turned into an overlayfs mount with an +underlying tmpfs. + +The original root and the tmpfs will be mounted at /live/image and +/live/cow in the final rootfs. + diff --git a/debian/90overlay-root/module-setup.sh b/debian/90overlay-root/module-setup.sh new file mode 100644 index 0000000..ae009f4 --- /dev/null +++ b/debian/90overlay-root/module-setup.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +check() { + # do not add modules if the kernel does not have overlayfs support + [ -d /lib/modules/$kernel/kernel/fs/overlayfs ] || return 1 +} + +depends() { + # We do not depend on any modules - just some root + return 0 +} + +# called by dracut +installkernel() { + hostonly='' instmods overlay +} + +install() { + inst_hook pre-pivot 10 "$moddir/overlay-mount.sh" +} diff --git a/debian/90overlay-root/overlay-mount.sh b/debian/90overlay-root/overlay-mount.sh new file mode 100644 index 0000000..27d0312 --- /dev/null +++ b/debian/90overlay-root/overlay-mount.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +# make a read-only nfsroot writeable by using overlayfs +# the nfsroot is already mounted to $NEWROOT +# add the parameter rootovl to the kernel, to activate this feature + +. /lib/dracut-lib.sh + +if ! getargbool 0 rootovl ; then + return +fi + +modprobe overlay + +# a little bit tuning +mount -o remount,nolock,noatime $NEWROOT + +# Move root +# --move does not always work. Google >mount move "wrong fs"< for +# details +mkdir -p /live/image +mount --bind $NEWROOT /live/image +umount $NEWROOT + +# Create tmpfs +mkdir /cow +mount -n -t tmpfs -o mode=0755 tmpfs /cow +mkdir /cow/work /cow/rw + +# Merge both to new Filesystem +mount -t overlay -o noatime,lowerdir=/live/image,upperdir=/cow/rw,workdir=/cow/work,default_permissions overlay $NEWROOT + +# Let filesystems survive pivot +mkdir -p $NEWROOT/live/cow +mkdir -p $NEWROOT/live/image +mount --bind /cow/rw $NEWROOT/live/cow +umount /cow +mount --bind /live/image $NEWROOT/live/image +umount /live/image |