Skip to content

Instantly share code, notes, and snippets.

@dzindra
Created October 6, 2022 18:31
Show Gist options
  • Save dzindra/9eb326422b9ec17ac6b1c5ce78052a42 to your computer and use it in GitHub Desktop.
Save dzindra/9eb326422b9ec17ac6b1c5ce78052a42 to your computer and use it in GitHub Desktop.
/etc/initramfs-tools/scripts/overlay
# /etc/initramfs-tools/scripts/overlay
# default file generated by /usr/bin/raspi-config
# add highlighted lines to access lower and upper filesystems
# Local filesystem mounting -*- shell-script -*-
#
# This script overrides local_mount_root() in /scripts/local
# and mounts root as a read-only filesystem with a temporary (rw)
# overlay filesystem.
#
. /scripts/local
local_mount_root()
{
local_top
local_device_setup "${ROOT}" "root file system"
ROOT="${DEV}"
# Get the root filesystem type if not set
if [ -z "${ROOTFSTYPE}" ]; then
FSTYPE=$(get_fstype "${ROOT}")
else
FSTYPE=${ROOTFSTYPE}
fi
local_premount
# CHANGES TO THE ORIGINAL FUNCTION BEGIN HERE
# N.B. this code still lacks error checking
modprobe ${FSTYPE}
checkfs ${ROOT} root "${FSTYPE}"
# Create directories for root and the overlay
mkdir /lower /upper
# Mount read-only root to /lower
if [ "${FSTYPE}" != "unknown" ]; then
mount -r -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /lower
else
mount -r ${ROOTFLAGS} ${ROOT} /lower
fi
modprobe overlay || insmod "/lower/lib/modules/$(uname -r)/kernel/fs/overlayfs/overlay.ko"
# Mount a tmpfs for the overlay in /upper
mount -t tmpfs tmpfs /upper
mkdir /upper/data /upper/work
# Mount the final overlay-root in $rootmnt
mount -t overlay \
-olowerdir=/lower,upperdir=/upper/data,workdir=/upper/work \
overlay ${rootmnt}
############ ADD THIS TO ACCESS OVERLAYS ###########
mkdir ${rootmnt}/.ro
mount --bind /lower ${rootmnt}/.ro
mkdir ${rootmnt}/.rw
mount --bind /upper ${rootmnt}/.rw
####################################################
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment